﻿
// Difernça entre as data
var dateDif = {  
	dateDiff: function(strDate1,strDate2){ 
		return (((Date.parse(strDate2))-(Date.parse(strDate1)))/(24*60*60*1000)).toFixed(0);
 	}
}

function diasEntreDatas(dataInicial, dataFinal) {
	var mes, dataAtual, dataInicial, arrDataInicial, novaDataInicial, diasEntreDatas;
	mes = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");

	arrDataFinal = dataFinal.split('/');
	arrDataInicial = dataInicial.split('/');
	novaDataInicial = mes[(arrDataInicial[1] - 1)] + ' ' + arrDataInicial[0] + ' ' + arrDataInicial[2];
	novaDataFinal = mes[(arrDataFinal[1] - 1)] + ' ' + arrDataFinal[0] + ' ' + arrDataFinal[2];
	diasEntreDatas = dateDif.dateDiff(novaDataInicial, novaDataFinal);
 	return diasEntreDatas;
}

function somardata(txtData){
	var DiasAdd = 1 // Aqui vem quantos dias você quer adicionar a data
	var d = new Date();
	var DataFinal;
	// EFETUA A SOMA DA DATA
	d.setTime(Date.parse(txtData.split("/").reverse().join("/"))+(86400000*(DiasAdd)))
	if(d.getDate() < 10){
		DataFinal = "0"+d.getDate().toString();
	} else {    
		DataFinal = d.getDate().toString();    
	}
	// ADICIONA ZERO CASO O MES SEJA MENOR QUE 10
	if((d.getMonth()+1) < 10){
		DataFinal += "/0"+(d.getMonth()+1).toString()+"/"+d.getFullYear().toString();
	} else {
		DataFinal += "/"+((d.getMonth()+1).toString())+"/"+d.getFullYear().toString();
	}
	return DataFinal;       
}
	
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%400==0) return 29;
	if(mes==2) if(ano%100==0) return 28;	
	if(mes==2) if(ano%4==0) return 29;	else return 28; 
}
var nomeMes = new Array("Janeiro","Fevereiro","Março","Abril","Maio","Junho","Julho","Agosto","Setembro","Outubro","Novembro","Dezembro");		
var hoje = new Date();
var diaAtual = hoje.getDate();
var mesAtual = hoje.getMonth()+1;
var anoAtual = hoje.getFullYear();
var dataAtual = diaAtual+'/'+mesAtual+'/'+anoAtual;
var contCalendario = 0;

jQuery.fn.calendario = function(options){
	
	var settings = {
		target:'',
		targetDay:'',
		targetMonth:'',
		targetYear:'',
		minDate:'',
		maxDate:'',
		dateDefault: dataAtual,
		left:'0',
		top:'30',
		referencePosition: this,
		closeClick: true,
		positionFixed: false
	};
	options = jQuery.extend(settings, options);
	
	arrData = options.dateDefault.split('/');
	
	// INCLUIDO POR FERNANDO
	if(	$(options.target).val() != "" && $(options.target).val() != "__/__/____" )
		arrData = $(options.target).val().split('/');
		
	
	diaOriginal = parseInt(arrData[0],10);
	mesOriginal = parseInt(arrData[1],10)-1;
	anoOriginal = parseInt(arrData[2],10);
	
	// VERIFICANDO RANGE
	var diaMinimo = 0; var mesMinimo = 0;var anoMinimo = 0;
	if(options.minDate!=''){
		arrData = options.minDate.split('/');	
		diaMinimo = parseInt(arrData[0],10);
		mesMinimo = parseInt(arrData[1],10)-1;
		anoMinimo = parseInt(arrData[2],10);	
	}
	var diaMaximo = 9999; var mesMaximo = 9999;	var anoMaximo = 9999;
	if(options.maxDate!=''){
		arrData = options.maxDate.split('/');	
		diaMaximo = parseInt(arrData[0],10);
		mesMaximo = parseInt(arrData[1],10)-1;
		anoMaximo = parseInt(arrData[2],10);	
	}	
	
	
	
	this.each(function(){
	
		
		
		// Verificando se o botao tem id, senão tem, vai atribuir um id pro botão, para evitar de gerar 2 calendarios
		if(jQuery(this).attr('id')==''){
			contCalendario++;
			jQuery(this).attr('id','chamada_cal_'+contCalendario)
		}
		idChamada = jQuery(this).attr('id');
		
		
		var mes = mesOriginal;
		var ano = anoOriginal;	
	
		// determinando id pro calendário
		idCalendario = 'cal_'+idChamada;
		idCalendario = idCalendario.replace('_dia','').replace('_mes','').replace('_ano','');
		
		if($('#'+idCalendario).size()>0) return false;
		
		$('#cal_datasaida').remove();
		$('#cal_dataentrada').remove();
		$('#cal_clickdatasaida').remove();
		$('#cal_clickdataentrada').remove();
		
		$('#cal_checkin').remove();
		$('#cal_checkout').remove();
		$('#cal_clickcheckin').remove();
		$('#cal_clickcheckout').remove();

		//criando div
		
		if( options.positionFixed ){
			jQuery('body').append('<div class="calendario" id="'+idCalendario+'" style="position:absolute !important; z-index:55000 !important;"><a href="#" class="bt_controle_mes bt_voltar_mes"></a><p class="nome_mes">mês ano</p><a href="#" class="bt_controle_mes bt_avancar_mes"></a><ul class="lista_dia"><li class="semana">D</li><li class="semana">S</li><li class="semana">T</li><li class="semana">Q</li><li class="semana">Q</li><li class="semana">S</li><li class="semana">S</li></ul><a href="#" class="fechar" title="Fechar">Fechar</a></div>');
		} else{
			jQuery('body').append('<div class="calendario" id="'+idCalendario+'" ><a href="#" class="bt_controle_mes bt_voltar_mes"></a><p class="nome_mes">mês ano</p><a href="#" class="bt_controle_mes bt_avancar_mes"></a><ul class="lista_dia"><li class="semana">D</li><li class="semana">S</li><li class="semana">T</li><li class="semana">Q</li><li class="semana">Q</li><li class="semana">S</li><li class="semana">S</li></ul><a href="#" class="fechar" title="Fechar">Fechar</a></div>');
		}
		
		
		$('#'+idCalendario).append('<input type="hidden" name="calendarioMes" value="'+mes+'"/>');
		$('#'+idCalendario).append('<input type="hidden" name="calendarioAno" value="'+ano+'"/>');		
		$('.calendario').hide().slideDown('fast');
		
	

		function preencher_calendario(idCalendario){
		
			// colocando ou alterando título do calendário
			var titulo = nomeMes[mes]+" "+ano;
			$('#'+idCalendario+' p.nome_mes').html(titulo);
			
			// Apagando dias do calendário (caso o usuario esteja avancando / voltando o mes)
			$('#'+idCalendario+' ul.lista_dia li.dia_vazio').remove();							
			$('#'+idCalendario+' 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);
			var inicioSemana = primeiro.getDay();
			
			// Preenchendo dias vazios no calendário
			for(i=0;i<inicioSemana;i++){ 
				$('#'+idCalendario+' ul.lista_dia').append("<li class='dia_vazio'>&nbsp;<\/li>"); 
			}
			
			// preenchendo dias do mes
			var fimMes = ultimo_dia(mes+1,ano);
			for(i=1;i<=fimMes;i++){ 
				if( (ano == anoMinimo && mes == mesMinimo && i < diaMinimo ) || (ano == anoMaximo && mes == mesMaximo && i > diaMaximo )  ){
					$('#'+idCalendario+' ul.lista_dia').append("<li class='dia dia_n"+i+"'>"+i+"<\/li>");			
				} else {
					if(options.target!='' || options.targetDay != '' || options.targetMonth != '' || options.targetYear != ''){
						$('#'+idCalendario+' ul.lista_dia').append("<li class='dia dia_n"+i+"'><a href='#'>"+i+"<\/a><\/li>");		
					} else {
						$('#'+idCalendario+' ul.lista_dia').append("<li class='dia dia_n"+i+"'>"+i+"<\/li>");						
					}
				
				}
			}
			// verificando se a data preenchida é hoje
			if(mes == mesOriginal && ano == anoOriginal){
				$('#'+idCalendario+' ul.lista_dia li.dia_n'+diaOriginal).addClass('default');
			} 			
			
			$('#'+idCalendario+' ul.lista_dia li a').click(function(){
				
				var dia = $.trim($(this).html());
				if(dia.length==1)dia = '0'+dia;
				var mes = (1 + parseInt($.trim($(this.parentNode.parentNode.parentNode).find('input[name="calendarioMes"]').val()),10)).toString();
				if(mes.length==1)mes = '0'+mes;
				var ano = parseInt($.trim($(this.parentNode.parentNode.parentNode).find('input[name="calendarioAno"]').val()),10);					
				
				if(options.mi!='' && $(options.target).size()>0){
					
					
					var tag = $(options.target).get(0).tagName.toLowerCase();
					if(tag=='input'){
						$(options.target).val(dia+'/'+mes+'/'+ano);
						
						// DATA DE ENTRADA ou CHECKIN
						if(options.target=='#dataentrada'){
							//$('#datasaida').val(somardata($('#dataentrada').val()));
							
							var datebegin  	= $('#dataentrada').val();
							var dateend		= somardata($('#dataentrada').val());
							var diferencaday 	= diasEntreDatas(datebegin,dateend);
							
							if( diferencaday<=0 ) {
								$('#rsdatainvalida').css('display','block');
								$('#dataentrada').val('');
								$('#rsdatainvalida').html('As data de check-out é menor que a data de check-in');
								$('#qtddias').html('-');								
							} else{
								$('#rsdatainvalida').html('');
								$('#qtddias').html( diferencaday+(diferencaday==1?' di&aacute;ria':' di&aacute;rias') );
							}
						} else if(options.target=='#checkin'){
							//$('#checkout').val(somardata($('#checkin').val()));
							
							var datebegin  	= $('#checkin').val();
							var dateend		= somardata($('#checkin').val());
							var diferencaday 	= diasEntreDatas(datebegin,dateend);
							
							
							if( diferencaday<=0 ) {
								$('#rsdatainvalidacheckin').css('display','block');
								$('#checkin').val('');
								$('#rsdatainvalidacheckin').html('As data de check-out é menor que a data de check-in');
							} else{
								$('#rsdatainvalidacheckin').html('');
							}
						}
						
						// DATA DE SAIDA ou CHECKOUT
						if( options.target=='#datasaida' ){
							
							var datebegin  		= $('#dataentrada').val();
							var dateend			= $(options.target).val();
							var diferencaday 	= diasEntreDatas(datebegin,dateend);
							
							if( diferencaday<=0 ) {
								$('#rsdatainvalida').css('display','block');
								$('#dataentrada').val('');
								$('#rsdatainvalida').html('As data de check-out é menor que a data de check-in');
								$('#qtddias').html('-');
							} else{
								$('#rsdatainvalida').html('');
								$('#qtddias').html( diferencaday+(diferencaday==1?' di&aacute;ria':' di&aacute;rias') );
							}
						} else if( options.target=='#checkout' ){
							
							var datebegin  		= $('#checkin').val();
							var dateend			= $(options.target).val();
							var diferencaday 	= diasEntreDatas(datebegin,dateend);
							
							if( diferencaday<=0 ) {
								$('#rsdatainvalidacheckin').css('display','block');
								$('#checkin').val('');
								$('#rsdatainvalidacheckin').html('As data de check-out é menor que a data de check-in');
							} else{
								$('#rsdatainvalidacheckin').html('');
							}
						}
						
					} else {
						$(options.target).html(dia+'/'+mes+'/'+ano);
						if(options.target=='#dataentrada'){
							//$('#datasaida').html(somardata($('#dataentrada').val()));
						}
					}
					
				}				
				if(options.targetDay!='' && $(options.targetDay).size()>0){
					var tag = $(options.targetDay).get(0).tagName.toLowerCase();
					
					if(tag=='input'){
						$(options.targetDay).val(dia);
						
					} else {
						$(options.targetDay).html(dia);
					}
				}	
				if(options.targetMonth!='' && $(options.targetMonth).size()>0){
					var tag = $(options.targetMonth).get(0).tagName.toLowerCase();
					if(tag=='input'){
						$(options.targetMonth).val(mes);
					} else {
						$(options.targetMonth).html(mes);
					}
				}	
				if(options.targetYear!='' && $(options.targetYear).size()>0){
					var tag = $(options.targetYear).get(0).tagName.toLowerCase();
					if(tag=='input'){
						$(options.targetYear).val(ano);
					} else {
						$(options.targetYear).html(ano);
					}
				}	

				if(options.closeClick)$('#'+idCalendario).remove();
				return false;
			});
			navegacaoCalendario(idCalendario);
		}	
		
		function navegacaoCalendario(idCalendario){

			$('#'+idCalendario+' a.fechar').unbind();
			$('#'+idCalendario+' a.fechar').click(function(){
				$('#'+idCalendario).remove();
				return false;
			});
			
			//alert('ano = '+ano+' / mes = '+mes+'\nanoMinimo = '+anoMinimo+' e mesMinimo '+mesMinimo);
			if(ano == anoMinimo && mes == mesMinimo){
				$('#'+idCalendario+' a.bt_voltar_mes').hide();
			} else {
				$('#'+idCalendario+' a.bt_voltar_mes').show();
				$('#'+idCalendario+' a.bt_voltar_mes').unbind();
				$('#'+idCalendario+' a.bt_voltar_mes').click(function(){			
					mes = parseInt($('input[name="calendarioMes"]').val(),10);
					ano = parseInt($('input[name="calendarioAno"]').val(),10);
					mes--;
					if(mes < 0){
						mes = 11;
						ano--;
					}
					$('input[name="calendarioMes"]').val(mes);
					$('input[name="calendarioAno"]').val(ano);
					preencher_calendario(idCalendario);
					return false;
				});				
			}

			if(ano == anoMaximo && mes == mesMaximo){
				$('#'+idCalendario+' a.bt_avancar_mes').hide();
			} else {
				$('#'+idCalendario+' a.bt_avancar_mes').show();
				$('#'+idCalendario+' a.bt_avancar_mes').unbind();
				$('#'+idCalendario+' a.bt_avancar_mes').click(function(){		
					mes = parseInt($('input[name="calendarioMes"]').val(),10);
					ano = parseInt($('input[name="calendarioAno"]').val(),10);
					mes++;
					if(mes == 12){
						mes = 0;
						ano++;
					}
					$('input[name="calendarioMes"]').val(mes);
					$('input[name="calendarioAno"]').val(ano);				
					preencher_calendario(idCalendario);
					return false;
				});	
			}
		}	
		
		
		preencher_calendario(idCalendario);
		
		var posicoes = $(options.referencePosition).offset();
		var leftPosition = posicoes.left + parseInt(options.left,10);
		var topPosition = posicoes.top + parseInt(options.top,10);
		
		$('#'+idCalendario).css({
			'left':leftPosition,
			'top':topPosition
			
		});
		$('#'+idCalendario).show();
		
	});
};


