/**
 * Funções utilitárias do site. 
 */
function TS()
{
	/**
	 * Inicia algumas configurações de ambiente JavaScript no site.
	 * @return TS
	 */
	this.init = function()
	{
		//Iniciando máscaras de formatação.
		this.masks();
		
		//Resolvendo campos arredondados.
		this.roundCorners();
	    
		//CSS do cursor nos botões dos formulários.
		this.cursor();
		
		//Adicionando comportamento de foco no form de login.
		this.frmFoco('fm-login-email', 'E-mail ou CPF')
		    .frmFoco('fm-login-senha', 'Senha');
		
		//Adicionando comportamento de foco no form de inscrição na newsletter.
		this.frmFoco('fm-newsletter-nome' , 'Nome...')
		    .frmFoco('fm-newsletter-email', 'E-mail...');
		
		//Adicionando comportamento de foco no formulário de pesquisa de títulos premiados.
		this.frmFoco('fm-num-titulo', 'Número do Título');
		
		//Botões do jQueryUI.
		$('.button').button();
		
		//Fancybox.
		$('.fancybox').fancybox({
			//hideOnContentClick : true,
			'titleShow' : false,
			'titlePosition' : 'inside',
			'transitionIn'	: 'elastic',
			'transitionOut'	: 'elastic',
			'showCloseButton' : true
		});
		
		//Iniciando efeitos dos menus do rodapé.
		this.hoverLinks(".ct-share ul li a,.empresas-grupo-ss li a");
		
		//formularios largura dos inputs - AJUSTAR LOCAL DESTA FUNÇÃO
	    $('.fm label').not('.bt, .chk').each(function () {
			
	        var largura = $(this).width();
	        var classe = $(this).attr('class');
	
	        largura = largura - 15;
	        if (classe == 'fm-telefone') {
	            $(this).children('input:first').addClass('ddd');
	        } else {
	            $(this).children('input').width(largura);
	        }
	
	    });
		
		return this;
	}
	
	/**
	 * Inicia as máscaras de formatação de formulário.
	 * @return TS
	 */
	this.masks = function()
	{
		//Data.
		$('[alt="date"]').mask('99/99/9999').css('width', '130px').attr('autocomplete', 'off');
		
		//Hora e minuto.
		$('[alt="hour"]').mask('99:99').attr('autocomplete', 'off');
		
		//Hora, minuto e segundo.
		$('[alt="date_hour_sec"]').mask('99/99/9999 99:99:99').attr('autocomplete', 'off');
		
		//CPF.
		$('[alt="cpf"]').mask('999.999.999-99').css('width', '145px').attr('autocomplete', 'off');
		
		//CNPJ.
		$('[alt="cnpj"]').mask('99.999.999/9999-99').attr('autocomplete', 'off');
		
		//CEP.
		$('[alt="cep"]').mask('99999-999').attr('autocomplete', 'off');
		
		//Telefone.
		$('[alt="fone"]').mask('(99) 9999-9999').css('width', '130px').attr('autocomplete', 'off');
		
		//Cartão de crédito(Visa e Master).
		$('[alt="cc"]').css('width', '155px').attr('autocomplete', 'off').setMask();
		
		//Cartão de crédito American Express(Amex).
		$.mask.masks = $.extend($.mask.masks, {
			cc_amex: { mask: '9999 999999 99999' }
		});
		$('[alt="cc_amex"]').css('width', '155px').attr('autocomplete', 'off').setMask();
		
		//Data de expiração de cartão de crédito.
		$('[alt="ce"]').mask('99/99').css('width', '45px').attr('autocomplete', 'off');
		
		//Números inteiros.
		$('[alt="integer"]').setMask();
		
		//Números deciamis em formato brasileiro e europeu(0.000,00). Também serve para dinheiro.
		$('[alt="decimal"]').setMask();
		
		//Números decimais em formato americano(0,000.00). Também serve para dinheiro.
		$('[alt="decimal-us"]').setMask();
		
		//Números sem qualquer separador.
		$.mask.masks = $.extend($.mask.masks, {
			numeric: { mask: '9999999999' }
		});
		$('[alt="numeric"]').setMask();
		
		return this;
	},
	
	/**
	 * Estiliza uma tag de "<ul>" como accordion simples.
	 * 
	 * @param string classe Classe de CSS do accordion.
	 * @return TS
	 */
	this.accordion = function(classe)
	{
		$('.bx .'+ classe +'>li').prepend('<span class="top"></span>');
		$('.bx .'+ classe +'>li').append('<span class="bottom"></span>');
		$('.bx .'+ classe +' li ul').hide();
		$('.bx .'+ classe +' li a').click(function () {
			if(!$(this).hasClass('ativo')) {
				var css = $(this).attr('class').split(' ');
	            $('.bx .'+ classe +' li a').removeClass('ativo');
	            $(this).addClass('ativo');
	            $('.bx .'+ classe +' li ul').slideUp();
	            $('.bx .'+ classe +' li .ativo').siblings().slideDown();
			} else {
				$('.bx .'+ classe +' li ul').slideUp();
				$('.bx .'+ classe +' li a').removeClass('ativo');
			}
		});
		
		return this;
	},
	
	/**
	 * Outro modelo de accordion proposto pela agência.
	 * 
	 * @param string classe Classe de CSS do accordion.
	 * @return TS
	 */
	this.accordion2 = function(classe)
	{
		$('.'+ classe +' li p').hide();
		
		//carregar o primeiro aberto
		$('.'+ classe +' li:first h3').addClass("ativo");
		$('.'+ classe +' li:first p').show();
		
		$('.'+ classe +' li h3').click(function() {
			if(!$(this).hasClass('ativo')) {
			    var css = $(this).attr('class').split(' ');
				$('.'+ classe +' li h3').removeClass('ativo');
				$(this).addClass('ativo');
				$('.'+ classe +' li p').slideUp();
				$('.'+ classe +' li .ativo').siblings().slideDown();
			}
		});
		
		$('.'+ classe +' li h3').each(function() {
			var tamanhoTexto     = $(this).text().length;
			var limiteCaracteres = 86;
			if(tamanhoTexto > limiteCaracteres) {
				$(this).addClass('duas-linhas');
		    }
		});
		
		return this;
	},
	
	/**
	 * Cantos arredondados nos boxes.
	 * @return TS
	 */
	this.roundCorners = function()
	{
		$('.ct-home>.ct-conteudo').append('<span class="bottom"></span>');
	    //$('.ct-home>.bottom').remove();
	    $('.bx').prepend('<span class="top"></span>');
	    $('.bx').append('<span class="bottom"></span>');
	    $('.ct-resultados-campanha ul li').append('<span class="bottom"></span>');
	    return this;
	},
	
	/**
	 * Alterando cursor para pointer nos campos de formulário.
	 * @return TS
	 */
	this.cursor = function()
	{
		$(':button, :submit, :checkbox, :radio, :button').css('cursor', 'pointer');
		$(':button, :submit, :button').attr('value', '');
		$(':checkbox, :radio').css({'background' : 'none', 'border' : 'none'});
		return this;
	},
	
	/**
	 * Desabilita um campo de formulário.
	 * 
	 * @param string id ID do campo no HTML.
	 * @return TS
	 */
	this.disableField = function(id)
	{
		id = '#' + id;
		$(id).attr('disabled', 'disabled').css('background-color', '#EEEDEC');
		return this;
	},
	
	/**
	 * Controla um formulário de filtro de campanhas por ano.
	 * 
	 * @param int    ano      Filtro ano.
	 * @param int    campanha ID do combo da campanha.
	 * @param int    selected Campanha selecionada no combo.
	 * @param string loader   ID do elemento HTML que receberá o loader.
	 * 
	 * @return TS
	 */
	this.FiltroCampanha = function(ano, campanha, selected, loader)
	{
		var selecionada = (selected != undefined) ? selected : 0;
		var loader      = (loader != undefined)   ? loader : 'sp_campanha';
		var campanha    = $('#' + campanha);
		var premiados   = $('#restringir_premiados').val();
		premiados       = (premiados == '1') ? premiados : '0';
		
		$.ajax({
			type: 'get',
			url : '/campanha/lista',
			data: 'ano=' + ano + '&premiados=' + premiados,
			dataType: 'json',
			beforeSend: function() {
				TS.startLoader(loader);
			},
			success: function(lista) {
				campanha.empty();
				campanha.append('<option value="">Selecione a campanha...</option>');
				for(var i in lista) {
					if(i == selecionada) {
						campanha.append('<option value="'+ i +'" selected=selected>'+ lista[i] +'</option>');
					} else {
						campanha.append('<option value="'+ i +'">'+ lista[i] +'</option>');
					}
				}
				campanha.removeAttr('disabled');
				TS.stopLoader(loader);
			}
		});
	},
	
	/**
	 * Inicia a execussão de um loader.
	 * 
	 * @param string hide   Div/span que deve ser escondido durante a execussão do loader.
	 * @param string loader ID do elemento HTML a receber o loader.
	 * @param string image  Caminho para a imgem do loader(opcional).
	 * 
	 * @return TS
	 */
	this.startLoader = function(hide, loader, image)
	{
		var loader = (loader != undefined) ? loader : 'sp_loader';
		var image  = (image  != undefined) ? image  : '/img/loader.gif';
		
		$('#' + loader).html('<img src="' + image + '" border="0" alt="" />');
		$('#' + hide).hide();
		$('#' + loader).show();
	},
	
	/**
	 * Para a execussão de um loader.
	 * 
	 * @param string show   Div/span que deve ser revelado após a execussão do loader.
	 * @param string loader ID do elemento HTML onde está o loader.
	 * 
	 * @return TS
	 */
	this.stopLoader = function(show, loader)
	{
		var loader = (loader != undefined) ? loader : 'sp_loader';
		
		$('#' + loader).html('');
		$('#' + loader).hide();
		$('#' + show).show();
	},
	
	/**
	 * Adiciona comportamentos de foco em campos de formulário.
	 * 
	 * @param string id    ID do campo no HTML.
	 * @param string label Conteúdo do campo.
	 * 
	 * @return TS
	 */
	this.frmFoco = function(id, label)
	{
		//Adicionando o "#" no ID caso já não tenha.
		id = id.substr(0, 1) == '#' ? id : '#' + id;
		
		//Preenchendo o campo pela primeira vez.
		$(id).val(label);
		
		//Colocando foco no campo.
		$(id).focus(function() {
			if($(this).val() == label) {
				$(this).val('');
			}
		});
		
		//Retirando foco do campo.
		$(id).blur(function() {
			if($(this).val() == '') {
				$(this).val(label);
			}
		});
		
		return this;
	},
	
	/**
	 * Adiciona o comportamento dos menus de links do rodapé
	 * 
	 * @param string aClass
	 * @return TS
	 */
	this.hoverLinks = function(aClass)
	{
        aClass = aClass.split(',');
        $(aClass).each(function (i, item) {
            $(item).bind('mouseenter', function () {
                $(item).animate({ opacity: '0.5' }, { duration: 200, queue: false });
                $(this).animate({ opacity: 1 }, { duration: 200, queue: false });
            }).bind('mouseleave', function () {
                $(item).animate({ opacity: 1 }, { duration: 200, queue: false });
            });
        });
        return this;
    },
	
	/**
	 * Converte números float para exibir na tela.
	 * 
	 * @param float num Número a ser convertido.
	 * @return string
	 */
	this.money = function(num) {
		return $().number_format(num, {
			numberOfDecimals: 2,
			decimalSeparator: ',',
			thousandSeparator: '.'
	    });
	}
}

var TS = new TS();
$(document).ready(function() {
	TS.init();
});

