/**
* Objeto Dia contiene el dia del mes y su disponibilidad
*
* @param sFecha fecha en formato dd/mm/yyy
* @param disponible Disponibilidad (NO,YES)
*
**/

function CP_tmpReturnFunction() { 
}

function CP_setReturnFunction(name) { 
	this.returnFunction = name; 
}

function Dia (sFecha,disponible,precio,moneda,disponibleOtrasTarifas,rules){
	this.disponible							= disponible;
	this.fecha 									= sFecha;
	this.dia										= new Number(sFecha.substring(0,2));
	this.precio 								= precio;
	this.moneda									= moneda;
	this.disponibleOtrasTarifas	= disponibleOtrasTarifas;
	this.rules									= rules;
	return this;
}

/**
* Devuelve un objeto según nombre
**/
function getObject(nombre){
	return document.getElementById(nombre);
}

/**
* Suma o resta valores a una fecha
**/
function OffersDateAdd(fecha, numDays, numMonths, numYears)
{
	var sFecha 	= fecha.split("/");
	var sAux 	= "";
	if(sFecha[0].charAt(0)=="0") sFecha[0] = sFecha[0].charAt(1);
	if(sFecha[1].charAt(0)=="0") sFecha[1] = sFecha[1].charAt(1);
	startDate = new Date(sFecha[2],(sFecha[1]-1),1,0,0,0);
	var returnDate = new Date(startDate.getTime());
	var yearsToAdd = numYears;
	var month = returnDate.getMonth() + numMonths;
	if (month > 11)
	{
		yearsToAdd = Math.floor((month+1)/12);
		month -= 12*yearsToAdd;
		yearsToAdd += numYears;
	}
	returnDate.setMonth(month);
	returnDate.setFullYear(returnDate.getFullYear()	+ yearsToAdd);
	if(returnDate.getDate()<10) sAux +="0"
	sAux +=returnDate.getDate()+"/"
	if((returnDate.getMonth() + 1)<10)sAux +="0"
	sAux +=(returnDate.getMonth() + 1)+"/"+ returnDate.getFullYear();
	return sAux;
}

/**
* Crea la fecha del primero de mes indicado por el parametro
**/
function dateFirstMonth (stFecha){
	var sfAux 	= stFecha.split("/");
	if(sfAux[1].charAt(0)=="0") sfAux[1] = sfAux[1].charAt(1);
	return	new Date(sfAux[2],(parseInt(sfAux[1])-1),1,0,0,0);
}

/**
* Crea un string con el formato dd/mm/aaaa
**/
function getStrDate(dia,mes,anyo){
	if(dia.length==1) dia= "0"+dia;
	if(mes.length==1) mes= "0"+mes;
	return (dia + "/" + mes + "/" + anyo);
}

/**
* Carga ls disponibilidad en eun mes concreto
**/
function cargaMes(cal, fecha, lista)
{
	var objCal 	= eval(cal);
	objCal.fecha		= fecha;
	var sFecha 	= fecha.split("/");
	if(sFecha[1].charAt(0)=="0") 
		sFecha[1] = sFecha[1].charAt(1);
	objCal.dia 		= 1;
	objCal.mes 		= sFecha[1];
	objCal.anyo 		= sFecha[2];
	for(i=0;i<lista.length;i++){
		sAux 		= lista[i].fecha;
		sFechaAux 	= sAux.split("/");
		if(sFechaAux[1].charAt(0)=="0") sFechaAux[1] = sFechaAux[1].charAt(1);
		if(sFecha[1]==sFechaAux[1])
			if(sFecha[2]==sFechaAux[2])
				objCal.addDiaSelect(lista[i]);
	}
}

/**
* Devuelve  un array con los dias que estan seleccionados
**/
function  getDiasChekeados(){
	var result 	= new Array();
	var i		= 0;
	var obj;
	for(var j=0;j<this.diasSelect.length;j++){
		if(this.diasSelect[j].disponible=='YES'){
			obj = eval("document.frm_"+this.nombre+"."+this.nombre+"_chk_"+this.diasSelect[j].dia);
			try{
				if(obj.checked){
					result[i++]=this.diasSelect[j];
				}
			}
			catch(e){
			}
		}
	}
	return result;
}

/**
* Asigna la fecha actual
*/
function setFechaActual(sFecha){
	this.fechaActual=sFecha;
	if(this.fechaActual!=""){
		this.diaActual=new Number(this.fechaActual.substring(0,2)) ;
		this.mesActual=new Number(this.fechaActual.substring(3,5)) ;
		this.anyoActual=new Number(this.fechaActual.substring(6,10)) ;
	}
}

/**
* Recupera la primera fecha
*/
function getPrimerDia(){
	return this.PrimerDia;
}

/**
* Recupera el último dia
*/
function getUltimoDia(){
	return this.UltimoDia;
}

/**
 * Devuelve el nombre del mes
 *
 * @param 	iMes, número del mes (1-12)
 *
 **/
function getNombreMes(iMes){
	try{
		return this.nombresMeses[iMes-1];
	}
	catch(e){
		return "";
	}
}

/**
 * Devuelve el nombre del dia de la semana
 *
 * @param iDia 	número de dia de la semana (0-6)
 **/
function getNombreDia(iDia){
	try{
		if(iDia<0)
			iDia=6 ;
		return this.nombresDias[iDia];
	}
	catch(e){
		return "";
	}
}

/**
 * Devuelve un objeto Date
 *
 * @param 	dia
 * @param 	mes
 * @param 	anyo
 **/
function getDate(dia,mes,anyo){
	var stext = mes + "/" + dia + "/" + anyo;
	return new Date(stext);
}

/**
 * Devuelve la fecha seleccionada
**/
function getValue(){
	return  this.dia + "/" + this.mes + "/" + this.anyo;
}

/**
* añade un nuevo dia en la coleccion de dias seleccionados
**/
function addDiaSelect (obj){
	this.diasSelect[this.diasSelect.length]=obj;

}

/**
* devuelve el objeto Dia del dia pasado como parametro
*/
function getDia(sdia){
	for(var j=0;j<this.diasSelect.length;j++){
		if(this.diasSelect[j].dia==sdia)
			return this.diasSelect[j];
	}
	return null;
}

/**
* Escribe una tabla con el calendario del mes actual.
**/
function escribeCalendario()
{
	var sText 	="";
	cal 		= getDate(1,this.mes,this.anyo);
	var primerDia 	= cal.getDay() -1 ;
	var diaSemana 	= 0;
	var diaMes 	= 0;
	var semana	= 0;
	if(primerDia < 0 )
		primerDia = 6;
	sText +="<form name='frm_"+this.nombre+"' action='' metho='POST'>";
	sText +="<table width='278' cellpadding='1' cellspacing='0' border='0' bgcolor='#F4F0E4'>";
	sText +="<tr bgcolor='#FFFFFF'><td colspan='9' class='v_333333_10b' align='center'>"+ this.getNombreMes(this.mes) +"  "+ this.anyo+"</td></tr>";
	sText +="<tr>";
	sText +="<td class='sp' width='2'>&nbsp;</td>";
	sText +="<td class='sp' width='38'>&nbsp;</td>";
	sText +="<td class='sp' width='38'>&nbsp;</td>";
	sText +="<td class='sp' width='38'>&nbsp;</td>";
	sText +="<td class='sp' width='38'>&nbsp;</td>";
	sText +="<td class='sp' width='38'>&nbsp;</td>";
	sText +="<td class='sp' width='38'>&nbsp;</td>";
	sText +="<td class='sp' width='38'>&nbsp;</td>";
	sText +="<td class='sp' width='2'>&nbsp;</td>";
	sText +="</tr>";
	// Dias de la semana
	sText +="<tr><td class='sp'>&nbsp;</td>";
	for(var j=0;j<7;j++){
		sText+="<td bgcolor='#F4F0E4'class='v_333333_11n' align='center'>" + this.getNombreDia(j)+"</td>";
	}
	sText +="<td class=sp>&nbsp;</td></tr>";
	
	// Ponemos la tabla interior donde van los dias
	sText += "<tr bgcolor='#F4F0E4'><td colspan='9'><table width='274' cellpadding='0' cellspacing='1' bgcolor='#FFFFFF' border='0'>";
	// Rellenamos una primera fila de espacios en blanco
	sText += "<tr><td class='sp'>&nbsp;</td>";
	for (i=0; i<7; i++) sText += "<td class='sp' width='38'>&nbsp;</td>";
	sText += "<td class='sp'>&nbsp;</td></tr>";
	// rellenamos los huecos de la primera semana
	if (primerDia > 0) 
		sText += "<tr><td class='sp'>&nbsp;</td>";
	for (i=0; i <primerDia; i++){
		sText +="<td align='center'>";
		sText +="<table width='38' height='38' cellpadding='0' cellspacing='0' border='0' bgcolor='"+this.bgColor+"'>";
		sText +="<tr><td width='19' class='v_666666_9n' style='padding-top:2px;padding-left:2px' valign='top'>&nbsp;</td></tr>";
		sText +="<tr><td colspan='2' align='center' class='v_666666_9n'>&nbsp;</td></tr>";
		sText +="</table>";
		sText +="</td>";
	}
	// primera semana recorremos el mes hasta el proximo mes
	// escribimos los dias del mes, creando filas de siete columnas.
	diaSemana = primerDia;
	while (this.mes == (cal.getMonth()+1) )
	{
		if(diaSemana == 0){
			sText += "<tr><td class='sp'>&nbsp;</td>";
		}
		diaMes 		= cal.getDate();
		this.UltimoDia	= diaMes;
		sText +="<td align='center'>";
		if(diaMes< this.diaActual && this.mes <= this.mesActual && this.anyo <= this.anyoActual){
			sText +="<table width='38' height='38' cellpadding='0' cellspacing='0' border='0' bgcolor='"+this.bgCoExpirado+"'>";
			sText +="<tr><td width='19' class='v_666666_9n' style='padding-top:2px;padding-left:2px' valign='top'>"+diaMes+"</td><td width='19' align='center'>&nbsp;</td></tr>";
			sText +="<tr><td colspan='2' align='center' class='v_333333_9b'>&nbsp;</td></tr>";
			sText +="</table>";
		}
		else{
			var disp 	= this.getDia(diaMes);
			var isClosed 	= true;
			// el dia tiene disponibilida para la tarifa
			if(disp!=null){
				if((disp.disponible.substring(0,1)=="Y" )&&(disp.precio!="")&&(disp.moneda!="")){
					// Hay disponibilidad en tarifa oferta
					isClosed 	= false;
					var precioDia	= disp.precio;
					var prc 	= precioDia.split(",");
					if (prc.length >= 2){
						if (prc[1] == "00") precioDia = prc[0];
					}
					sText +="<table width='38' height='38' cellpadding='0' cellspacing='0' border='0' bgcolor='"+this.bgColor+"'>";
					sText +="<tr>";
					sText +="<td width='19' class='v_666666_9n' style='padding-top:2px;padding-left:2px' valign='top'>"+diaMes+"</td>";
					sText +="<td width='19' align='center'><input type='Checkbox'  id='"+ this.nombre +"_chk_" + diaMes + "' onClick='"+this.returnFunction+"();'></td>";		
					sText +="</tr>";
					sText +="<tr>";
					if(this.viewPrice){
						sText +="<td colspan='2' align='center' class='v_333333_9b'>"+precioDia+"</td>";
					}
					else{
						sText +="<td colspan='2' align='center' class='v_333333_9b'>&nbsp;</td>";
					}
					sText +="</tr>";
					sText +="</table>";
				}
				else{
					if(disp.disponibleOtrasTarifas.substring(0,1)=="Y"){
						isClosed = false;
						sText +="<table width='38' height='38' cellpadding='0' cellspacing='0' border='0' bgcolor='"+this.bgCoNoHab+"'>";
						sText +="<tr>";
						sText +="<td width='19' class='v_666666_9n' style='padding-top:2px;padding-left:2px' valign='top'>"+diaMes+"</td>";
						sText +="<td width='19' align='center'>&nbsp;</td>";
						sText +="</tr>";						
						sText +="<tr>";
						sText +="<td colspan='2' align='center' class='v_333333_9b'>&nbsp;</td>";
						sText +="</tr>";
						sText +="</table>";
					}
				}
			}
			if(isClosed){
				// Dia cerrado no tenemos ni en 5y ni en otras tarifas
				sText +="<table width='38' height='38' cellpadding='0' cellspacing='0' border='0' bgcolor='"+this.bgCoCompleto+"'>";
				sText +="<tr>";
				sText +="<td width='19' class='v_666666_9n' style='padding-top:2px;padding-left:2px' valign='top'>"+diaMes+"</td>";
				sText +="<td width='19' align='center'>&nbsp;</td>";
				sText +="</tr>";
				sText +="<tr>";
				sText +="<td colspan='2' align='center' class='v_333333_9b'>&nbsp;</td>";
				sText +="</tr>";
				sText +="</table>";
				
			}
		}
		sText +="</td>";
		diaSemana++;
		if(diaSemana > 6){
			sText += "<td class='sp'>&nbsp;</td></tr>";
			semana++;
			diaSemana=0;
		}
		cal.setDate(diaMes + 1); // un dia mas para el bote.
	}
	// ultima semana rellenamos los huecos de la ultima semana y creamos semanas vacias hasta llegar a seis
	var faltanDiasPorPintar = false;
	while ((diaSemana <= 6) && (diaSemana >0)){
		sText +="<td align='center'>";
		sText +="<table width='38' height='38' cellpadding='0' cellspacing='0' border='0' bgcolor='"+this.bgColor+"'>";
		sText +="<tr>";
		sText +="<td width='19' class='v_666666_9n' style='padding-top:2px;padding-left:2px' valign='top'>&nbsp;</td>";
		sText +="</tr>";
		sText +="<tr>";
		sText +="<td colspan='2' align='center' class='v_666666_9n'>&nbsp;</td>";
		sText +="</tr>";
		sText +="</table>";
		sText +="</td>";
		faltanDiasPorPintar = true;
		diaSemana++;
	}
	if (faltanDiasPorPintar) 
		sText += "<td class='sp'>&nbsp;</td></tr>";
	if(diaSemana > 6)
		semana++;
	while (semana <6){
		sText += "<tr><td class='sp'>&nbsp;</td>";
		for(i=0;i<7;i++){
			sText +="<td align='center'>";
			sText +="<table width='38' height='38' cellpadding='0' cellspacing='0' border='0' bgcolor='"+this.bgColor+"'>";
			sText +="<tr>";
			sText +="<td width='19' class='v_666666_9n' style='padding-top:2px;padding-left:2px' valign='top'>&nbsp;</td><td width='19' align='center'>&nbsp;</td></tr>";
			sText +="<tr><td colspan='2' align='center' class='v_333333_9b'>&nbsp;</td></tr>";
			sText +="</table>";
			sText +="</td>";
		}
		sText += "<td class='sp'>&nbsp;</td></tr>";
		semana++;
	}
	// Cerramos la tabla de los dias
	sText += "</table></td></tr>";
	sText += "</table>";
	sText +="</form>";
	getObject(this.contenedor).innerHTML = sText;
}

/**
* Constructor del calendario
*
* @param sFecha fecha del calendario en formato dd/mm/yyyy
**/
function Calendario(fecha)
{
	var sFecha 	= fecha.split("/");
	if(sFecha[1].charAt(0)=="0") 
		sFecha[1] = sFecha[1].charAt(1);
	//atributos
	this.nombre 		= "sCal_"+sFecha[2]+"_"+sFecha[1];
	this.fecha 		= fecha;
	this.dia 		= 1;
	this.mes 		= sFecha[1];
	this.anyo 		= sFecha[2];
	this.contenedor 	= "calendar";
	this.diasSelect 	= new Array();
	this.nombresDias	= new Array("L","M","X","J","V","S","D");
	this.nombresMeses	= new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");
	this.fechaActual	= "";
	this.diaActual		= 1;
	this.mesActual 		= 1;
	this.anyoActual 	= 1900;
	this.UltimoDia		= 30;
	this.PrimerDia		= 1;
	//COLORES
	this.bgColor		= "#D6F2F8";  //Color de los dias disponibles
	this.bgCoNoHab		= "#8CDBEC";  //Color tarifa completa disponibles otra tarifa
	this.bgCoCompleto   	= "#E2D8B8";  //Color dia Hotel lleno
	this.bgCoExpirado	= "#F4F0E4";   // color dia expirado
	this.viewPrice		= true;
	//métodos
	this.show 		= escribeCalendario;
	this.getValue 		= getValue;
	this.addDiaSelect 	= addDiaSelect;
	this.getDia		= getDia;
	this.getDiasCheckeados	= getDiasChekeados;
	this.setFechaActual 	= setFechaActual;
	this.getUltimoDia	= getUltimoDia;
	this.getPrimerDia	= getPrimerDia;
	this.getNombreDia	= getNombreDia;
	this.getNombreMes	= getNombreMes;
	
	
	this.returnFunction = "CP_tmpReturnFunction";		
	this.setReturnFunction = CP_setReturnFunction;	
	
	//métodos de uso inter.
	this.getDate 		= getDate;
	return this;
}