function isDate(dateStr) {
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
	var matchArray = dateStr.match(datePat);
	if(matchArray == null)return false;
	month = matchArray[3];
	day = matchArray[1];
	year = matchArray[5];
	if(month < 1 || month > 12)return false;
	if(day < 1 || day > 31)return false;
	if((month==4 || month==6 || month==9 || month==11) && day==31)	return false;
	if(month == 2){
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day > 29 || (day==29 && !isleap))return false;
	}
	return true;
}

function truncar(texto,limite){
	if(texto.length>limite){	
		limite--;
		last = texto.substr(limite-1,1);
		while(last!=' ' && limite > 0){
			limite--;
			last = texto.substr(limite-1,1);
		}
		last = texto.substr(limite-2,1);
		if(last == ',' || last == ';'  || last == ':'){
			 texto = texto.substr(0,limite-2) + '...';
		} else if(last == '.' || last == '?' || last == '!'){
			 texto = texto.substr(0,limite-1);
		} else {
			 texto = texto.substr(0,limite-1) + '...';
		}
	}
	return texto;
}

function ultimo_dia(mes,ano){
	if(mes==1||mes==3||mes==5||mes==7||mes==8||mes==10||mes==12) return 31;
	if(mes==4||mes==6||mes==9||mes==11) return 30;
	if(mes==2) if(ano%4==0) return 29;	else return 28; 
}

var nomeMes = new Array(13);
nomeMes[1]="Janeiro";
nomeMes[2]="Fevereiro";
nomeMes[3]="Março";
nomeMes[4]="Abril";
nomeMes[5]="Maio";
nomeMes[6]="Junho";
nomeMes[7]="Julho";
nomeMes[8]="Agosto";
nomeMes[9]="Setembro";
nomeMes[10]="Outubro";
nomeMes[11]="Novembro";
nomeMes[12]="Dezembro";		

var hoje = new Date();

var mes = hoje.getMonth() + 1;
var ano = hoje.getFullYear();

var diaOriginal = hoje.getDate();
var mesOriginal = hoje.getMonth() + 1;
var anoOriginal = hoje.getFullYear();

function preencher_calendario(){

	// colocando ou alterando título do calendário
	var titulo = nomeMes[mes]+" "+ano;
	J('p.nome_mes').html(titulo);
	
	// Apagando dias do calendário (caso o usuario esteja avancando / voltando o mes)
	J('ul#lista_dia li.dia_vazio').remove();							
	J('ul#lista_dia li.dia').remove();
	
	// Obtendo o dia da semana do primeiro dia do mês
	var primeiro = new Date();
	primeiro.setFullYear(ano,mes-1,1);
	var inicioSemana = primeiro.getDay();
	
	// Preenchendo dias vazios no calendário
	for(i=0;i<inicioSemana;i++){ J('ul#lista_dia').append("<li class='dia_vazio'>&nbsp;<\/li>"); }
	// preenchendo dias do mes
	for(i=1;i<=ultimo_dia(mes,ano);i++){ 
		J('ul#lista_dia').append("<li class='dia dia_n"+i+"'><\/li>");		
		// verificando se a data preenchida é hoje
		if(i==diaOriginal && mes == mesOriginal && ano == anoOriginal){
			J('ul#lista_dia li.dia_n'+i).addClass('hoje');
		} 
		// adicionando conteudo
		J('ul#lista_dia li.dia_n'+i).html('<a href="#" class="preencher" rel="'+i+'">'+i+'</a>');
	}
	
	// Verificando se deve ter o botão "próximo mês"
	if(mes == mesOriginal && ano == anoOriginal){
		J('div#calendario a.bt_avancar_mes').hide();
	} else { 
		J('div#calendario a.bt_avancar_mes').show();
	}
		
	J('ul#lista_dia li a.preencher').unbind();
	J('ul#lista_dia li a.preencher').click(function(){
		id = J('div#calendario').attr('class');
		dia = J(this).attr('rel');
		mes = mes.toString();
		if(dia.length==1) dia = '0' + dia;
		if(mes.length==1) mes = '0' + mes;
		J('input#'+id).val(dia+'/'+mes+'/'+ano);
		J('div#calendario').hide();
		J('#qlqr_periodo').attr('checked','');		
		return false;
	});
}		

function navegacaoCalendario(){
	// FUNCÕES DO CALENDÀRIO
	J('a.outra_data').unbind();
	J('a.outra_data').click(function(){
		J('div#calendario').show();
		return false;
	});
	
	J('div#calendario a.fechar').unbind();
	J('div#calendario a.fechar').click(function(){
		J('div#calendario').hide();
		return false;
	});
	
	J('div#calendario a.bt_voltar_mes').unbind();
	J('div#calendario a.bt_voltar_mes').click(function(){			
		mes--;
		if(mes == 0){
			mes = 12;
			ano--;
		}
		preencher_calendario();
		return false;
	});				
	
	J('div#calendario a.bt_avancar_mes').unbind();
	J('div#calendario a.bt_avancar_mes').click(function(){			
		mes++;
		if(mes == 13){
			mes = 1;
			ano++;
		}
		preencher_calendario();
		return false;
	});	
}


J(document).ready(function(){

	J('input.data').mask('99/99/9999');	
	J('input.data').focus(function(){ 
		id = J(this).attr('id');
		J('div#calendario').removeClass(); 
		J('div#calendario').addClass(id); 
		J('div#calendario').show(); 
	});	
	preencher_calendario(mes,ano);
	navegacaoCalendario();	
	
	J('#tagBuscaResultados').keyup(eliminaSpecialChars);
	
	
	J('#subBuscaForm').submit(function(){

		var parametros = ''
		
		// Verificando data da busca
		var erroBuscaData = false;
		J('#data_ate, #data_de').each(function(){
			if(J(this).val()!=''){
				if(!isDate(J(this).val())){
					alert('Data de busca inválida.');
					J(this).focus();
					erroBuscaData = true;
					return false;
				}
			}
		});
		if(erroBuscaData==true)return false;
		
		// Verificando se a data de é menor que até
		if(J('#data_ate').val() !='' && J('#data_de').val()!=''){

			var arrDe = J('#data_de').val().split('/');
			var arrAte = J('#data_ate').val().split('/');
			var startDia = arrDe[0];
			var startMes = arrDe[1];
			var startAno = arrDe[2];
			var finishDia = arrAte[0];
			var finishMes = arrAte[1];
			var finishAno = arrAte[2];
			if(startAno>finishAno || (startAno==finishAno && startMes > finishMes) || (startAno==finishAno && startMes == finishMes && startDia > finishDia)){
				alert('Data de ínicio da busca maior que a data de fim da busca.');
				J('#data_de').focus();				
				return false;
			}
		}
		
		parametros += 'dataInicial='+J('#data_de').val();
		parametros += '&dataFinal='+J('#data_ate').val();
		parametros += '&tag='+escape(J('#tagBuscaResultados').val());

		J('#conteudo_busca').html('Carregando...');
		J.ajax({
			url:'/elementos/busca.busca.logic',
			data: parametros,
			success: function(msg){
				J('#conteudo_busca').html(msg);
				if(J('#novo_total_resultados').size()==0){
					var novoTotal = '0';
				} else {
					var novoTotal = J('#novo_total_resultados').val();
				}
				J('#total_resultados').html(novoTotal);
				J('#termo_buscado').html(truncar(J('#tagBuscaResultados').val(),45));
			}
		});
		return false;
	});
	
	
	J('#qlqr_periodo').click(function(){
		if(J(this).is(':checked')){
			J('#data_de, #data_ate').val('');
			J('div#calendario').hide();
		}
	});
	J('#data_ate, #data_de').keydown(function(){
		if(J(this).val()!='')J('#qlqr_periodo').attr('checked','');
	});
});