/**
 * Juan Servera - 01/10/2009
 * Libreria para el uso de calendarios de disponibilidad.
 * Seleccion de rangos de dias entre fechas.
 * Sincroniza las fechas de inicio y de final con 
 * los imputs del cajetin de busqueda.
 * 
 * Esta libre de restricciones (Soporta n meses y n años).
 * 
 * Tiene una configuracion por defecto que corresponde
 * al "estandar" de los fronts del BookingCore.
 * De todos modos dispone de funciones para cambiar
 * en algunos casos estos valores sin tener que 
 * modificar este codigo.
 *
 * !!!! UNICA NORMA !!!!
 * El dia del calendario en el jsp debe tener un 
 * identificador del tipo:  id="[dia]_[mes]_[año]" 
 * 
 */

/*********************** Configuracion ***********************/
// -- configuraciones por defecto. --
var FORM 				= "abode:dfBookBox";
var DIA_ENTRADA			= "entrada1";
var MES_ANIO_ENTRADA	= "entrada2";
var DIA_SALIDA			= "salida1";
var MES_ANIO_SALIDA		= "salida2";
var SEPARADOR_FECHA		= " - ";
var CLASE_ACTIVA		= "active";
var CLASE_DISPARADOR	= "click_calendar";

// -- modificadores de los valores por defecto. --
function setNombreForm(v){FORM = v;}
function setNombreInputDiaEntrada(v){DIA_ENTRADA = v;}
function setNombreInputMesAnioEntrada(v){MES_ANIO_ENTRADA = v;}
function setNombreInputDiaSalida(v){DIA_SALIDA = v;}
function setNombreInputMesAnioSalida(v){MES_ANIO_SALIDA = v;}
function setSeparadorFecha(v){SEPARADOR_FECHA = v;}
function setClaseActiva(v){CLASE_ACTIVA = v;}
function setClaseDisparador(v){CLASE_DISPARADOR = v;}
/*************************************************************/


var click	= 0;
var diaIni	= 0;
var mesIni	= 0;
var anioIni	= 0;
var diaFin	= 0;
var mesFin	= 0;
var anioFin	= 0;

$(document).ready(function(){
		
	$("."+CLASE_DISPARADOR).live("click",function(){
		var vars = $(this).attr('id').split('_');
		var dia = parseInt(vars[0]);
		var mes = parseInt(vars[1]);
		var anio = parseInt(vars[2]);
		
		if(click == 1 && dia == diaIni && mes == mesIni && anio == anioIni){			
			diaIni = 0;
			mesIni = 0;
			anioIni = 0;
			diaFin = 0;
			mesFin = 0;
			anioFin = 0;
			click = 0;
			$(this).removeClass(CLASE_ACTIVA);
		}else if(click == 0 || (dia < diaIni && mes == mesIni && anio==anioIni && click == 1) || (mes < mesIni && click == 1) || (anio < anioIni && click == 1)){
			$("#"+diaIni+"_"+mesIni+"_"+anioIni).removeClass('active');
			diaIni = dia;
			mesIni = mes;
			anioIni = anio;
			click = 1;
			$(this).addClass(CLASE_ACTIVA);
			setFechaInicio(dia,mes,anio);
		}else if(click==3 && (dia<=diaIni && mes == mesIni && anio == anio) ||  mes < mesIni || anio < anioIni){
			diaFin = 0;
			mesFin = 0;
			anioFin = 0;
			
			$(".active").each(function(){
				$(this).removeClass(CLASE_ACTIVA);
			});
			
			if(dia==diaIni && mes == mesIni && anio == anioIni){
				diaIni = 0;
				mesIni = 0;
				anioIni = 0;
				click = 0;
			}else{
				diaIni = dia;
				mesIni = mes;
				anioIni = anio;
				click = 1;
				$(this).addClass(CLASE_ACTIVA);
				setFechaInicio(dia,mes,anio);
			}
		}else if((dia > diaFin && mes == mesFin && anio == anioFin) || (mes > mesFin || anio > anioFin)){
			/* Pintamos entre fechas */
			if(mesIni == mes && anioIni == anio){
				var i;
				for(i = diaIni; i <= dia; i++){
					if($("#"+i+"_"+mes+"_"+anio!=null)){
						$("#"+i+"_"+mes+"_"+anio).addClass(CLASE_ACTIVA);
					}else{	
						break;
					}
				}
				diaFin = i-1;
				mesFin = mes;
				anioFin = anio;
				click = 3;
				setFechaSalida(diaFin,mesFin,anioFin);
			}else{
				var f = new Date();
				f.setFullYear(anioIni,mesIni-1,diaIni);
				var dias = Date.getDaysInMonth(f.getFullYear(),f.getMonth());
				
				/* rellenamos el mes a medias (inicial) */
				for(i = diaIni; i <= dias; i++){
					if($("#"+i+"_"+mesIni+"_"+anioIni)!=null){	
						$("#"+i+"_"+mesIni+"_"+anioIni).addClass(CLASE_ACTIVA);
					}else{
						diaFin = i-1;
						mesFin = mes;
						anioFin = anio;
						click = 3;
						setFechaSalida(diaFin,mesFin,anioFin);
						return false;
					}
				}
				
				/* Meses intermedios. */
				var mIni = Date.today().set({day:1, month:mesIni-1, year:anioIni});
				var mFin = Date.today().set({day:1, month:mes-1, year:anio});
				
				while(0>mIni.addMonths(1).compareTo(mFin)){
					for(i = 1; i <= Date.getDaysInMonth(mIni.getFullYear(),mIni.getMonth()); i++){
						if($("#"+i+"_"+(mIni.getMonth()+1)+"_"+mIni.getFullYear())!=null){
							$("#"+i+"_"+(mIni.getMonth()+1)+"_"+mIni.getFullYear()).addClass(CLASE_ACTIVA);
						}else{
							diaFin = i;
							mesFin = mIni.getMonth();
							anioFin = mIni.getFullYear();
							click = 3;
							setFechaSalida(diaFin,mesFin,anioFin);
							return false;
						}
					}
				}
				
				/* rellenamos el mes a medias (final) */
				for(i = 1; i <= dia; i++){
					if($("#"+i+"_"+mes+"_"+anio)!=null){
						$("#"+i+"_"+mes+"_"+anio).addClass(CLASE_ACTIVA);
					}else{		
						diaFin = i;
						mesFin = mes;
						anioFin = anio;
						click = 3;
						setFechaSalida(diaFin,mesFin,anioFin);
						return false;
					}
				}
				diaFin = dia;
				mesFin = mes;
				anioFin = anio;
				click = 3;
				setFechaSalida(diaFin,mesFin,anioFin);
				
			}
			
		}
		return false;
	});
		
});

function setFechaInicio(dia,mes,anio){
	document.getElementById(FORM+':'+MES_ANIO_ENTRADA).value = (mes-1) + SEPARADOR_FECHA + anio;
	changeFecha(FORM, null, null, true);
	document.getElementById(FORM+':'+DIA_ENTRADA).value = dia;
	changeFecha(FORM, null, null, true);
}

function setFechaSalida(dia,mes,anio){
	document.getElementById(FORM+':'+MES_ANIO_SALIDA).value = (mes-1) + SEPARADOR_FECHA + anio;
	changeFecha(FORM, null, null, true);
	document.getElementById(FORM+':'+DIA_SALIDA).value = dia;
	changeFecha(FORM, null, null, true);
}



