//
// Advanced-Fecha 1.0   SADIEL.SA
//
// fecha de creación: 29/6/2001		última revisión: 16/8/2001
//
// Miguel A. Moreno Martín
//
// Descripción: Librería que implementa en javascript la creación de campos de fecha
//				Funciona en iexplore y NS
// 
// Uso: en aquel lugar que necesitemos el campo de fecha, pondremos una llamada a la función
//						'genera_campo_fecha'
// Interfaz: 
//                genera_campo_fecha(formulario, campo, fecha, primero, numanyos, permitenulo)
//
//				 donde:   formulario	- nombre del formulario donde irá el campo de fecha
//						  campo			- nombre con que queremos recoger el campo fecha en el formulario 
//						  fecha			- fecha de inicialización en formato: dd/mm/yyyy"
//						  primero		- primer año que queremos que aparezca en la lista desplegable
//						  numanyos		- número de años que queremos que aparezcan en la lista desplegable
//						  permitenulo	- (opcional) a true si queremos que la fecha pueda ser nula
//
// Requisitos: 
//
//     - Los podremos declarar más de un campo fecha con el mismo nombre, no funcionarán
//     - Los nombres de campo que sean el de un campo fecha con el sufijo "_dia" "_mes" o "_anyo" no deben emplearse pues
//     son utilizados en esta impplemantación y fallaría.
//
//  NOTA en este documento la salida del campo será en foto. fecha MySQL, yyyy-MM-dd
//
//	Modificación: José Antonio González Seco (JAGS)			Fecha: 26/02/2003
//		-- Añadida la posiblidad de cambiar los nombres de los meses: parámetro opcional 'nombresDeMeses'
//		-- Añadida la posiblidad de configurar un código adicional a ejecutar al cambiar la selección de cualquiera de las 3 casillas: parámetro opcional 'codigoCambio'
// ***************************************************************************************


var nombremeses= new Array();
nombremeses[0]="Ninguna";
nombremeses[1]="Enero";
nombremeses[2]="Febrero";
nombremeses[3]="Marzo";
nombremeses[4]="Abril";
nombremeses[5]="Mayo";
nombremeses[6]="Junio";
nombremeses[7]="Julio";
nombremeses[8]="Agosto";
nombremeses[9]="Septiembre";
nombremeses[10]="Octubre";
nombremeses[11]="Noviembre";
nombremeses[12]="Diciembre";

var diasmes= new Array();
diasmes[0]=31;
diasmes[1]=31;
diasmes[2]=28;
diasmes[3]=31;
diasmes[4]=30;
diasmes[5]=31;
diasmes[6]=30;
diasmes[7]=31;
diasmes[8]=31;
diasmes[9]=30;
diasmes[10]=31;
diasmes[11]=30;
diasmes[12]=31;

function diasen(mes, anyo)
{
mes = parseInt(mes);
anyo=parseInt(anyo);
if (mes!=2)
return diasmes[mes];
else
return (((anyo%4==0&&!anyo%100==0)||anyo%400==0)?29:28)
}




function escribemeses(_formulario, _campo, permiteninguna, codigoCambio)
{
window.document.write("<select class='txt' name='" + _campo + "_mes' onchange='javascript:controlafecha(\"" + _formulario + "\",\"" + _campo + "\"");
window.document.write(",\"mes\"");
if(permiteninguna!=null)
window.document.write(",true");
window.document.write(");");
if (codigoCambio!=null)
	window.document.write(codigoCambio);
window.document.write("'>");

if (permiteninguna!=null)
{
window.document.write("<option value='-1'>" + nombremeses[0] + "</option>");
}
for(var i=1;i<nombremeses.length;i++)
{
window.document.write("<option value=" + i + ">" + nombremeses[i] + "</option>");
}
window.document.write("</select>");
}

function escribeanyos(_formulario, _campo, primero,numanyos, permiteninguna, codigoCambio)
{
window.document.write("<select class='txt' name='" + _campo + "_anyo' onchange='javascript:controlafecha(\"" + _formulario + "\",\"" + _campo + "\"");
window.document.write(",\"anyo\"");
if(permiteninguna!=null)
window.document.write(",true");
window.document.write(");");
if (codigoCambio!=null)
	window.document.write(codigoCambio);
window.document.write("'>");


if (permiteninguna!=null)
{
window.document.write("<option value='-1'>____</option>");
}
for(i=0 ;i<=numanyos;i++)
{
window.document.write("<option value='" + (i + primero) + "'>" + (i + primero) + "</option>");
}
window.document.write("</select>");
}


function escribedias(_formulario, _campo, mes, anyo, permiteninguna, codigoCambio)
{

cadena = "<select class='txt' name='" + _campo + "_dia' onchange='javascript:controlafecha(\"" + _formulario + "\",\"" + _campo + "\"";
cadena = cadena + ",\"dia\""
if(permiteninguna!=null)
cadena = cadena + ",true";
cadena = cadena + ");";
if (codigoCambio!=null)
	cadena = cadena + codigoCambio;
cadena = cadena + "'>";

if (permiteninguna!=null)
{
cadena = cadena + "\n<option value='-1'>__</option>\n";
}

if (mes==0)
{
mes=1;
}

dias = diasen(mes,anyo)
for(i=1 ;i<=dias;i++)
{
cadena = cadena + "<option value='" + i + "'>" + i + "</option>\n" ;
}
window.document.write(cadena + "</select>"); 
}


function controlafecha(formul, cam, campo, permiteninguna)
{
selectdia=eval("window.document." +  formul + "." + cam + "_dia");
selectmes=eval("window.document." +  formul + "." + cam + "_mes");
selectanyo=eval("window.document." +  formul + "." + cam + "_anyo");
campohidden= eval("window.document." +  formul + "." + cam);
// Comprobamos si el cambio requiere reajuste de los combos


dia = selectdia.options[selectdia.selectedIndex].value;
mes = selectmes.options[selectmes.selectedIndex].value;
anyo = selectanyo.options[selectanyo.selectedIndex].value;

// alert(dia + "-" + mes + "-" + anyo)

if (dia=="-1" || mes=="-1" || anyo=="-1")
{
	switch (campo)
	{
	case "dia": if (dia=="-1") si=false; else si=true;
				break;
	case "mes": if(mes=="-1") si=false; else si=true;
				break;
	case "anyo": if (anyo=="-1") si=false; else si=true;
				break;
	default:  alert("que haces aqui?");
				break;
	}

	if (!si)
	{
	dia = "-1" ;
	mes = "-1";
	anyo = "-1" ;
	campohidden.value = "";
	selectdia.options[0].selected=true;
	selectmes.options[0].selected=true;
	selectanyo.options[0].selected=true;
	}
	else {

		if(selectdia.options[0].selected)
		selectdia.options[1].selected=true;
		if(selectmes.options[0].selected)
		selectmes.options[1].selected=true;
		if(selectanyo.options[0].selected)
		selectanyo.options[1].selected=true;

		dia = selectdia.options[selectdia.selectedIndex].value;
		mes = selectmes.options[selectmes.selectedIndex].value;
		anyo = selectanyo.options[selectanyo.selectedIndex].value;
/*	controlafecha(formul, cam, permiteninguna) */
	}
}
else
{

// si el número de dias para el mes es correcto no hay problema


nuevonumdias = diasen(mes,anyo);


if(permiteninguna){
 nuevonumdias+=1;
 }

antiguonumdias = selectdia.length;



if(antiguonumdias < nuevonumdias) // reajuste
  {
  selectdia.length = nuevonumdias;
  var i;
  if (permiteninguna==true)
    i=2;
	else i=1;
  
  for( i; i<= nuevonumdias; i++)
    {
	if (permiteninguna==true)
	 value=i-1;
	 else value=i;
	
	selectdia.options[i-1].text=value;
	selectdia.options[i-1].value=value;
	}

  }
else if  (antiguonumdias > nuevonumdias){
  selectdia.length = nuevonumdias;
  if(permiteninguna==true)
	dia++;
  if (dia > nuevonumdias)
     selectdia.options[selectdia.length - 1].selected = true ;

	 
		
} 
else {
// no necesitamos cambiar nada
}

// lo único que puede haber cambiado desde que miramos los select fue el dia...
dia = selectdia.options[selectdia.selectedIndex].value;
// Formato MySql
// aquí fallaba
//campohidden.value = dia + "/" + mes + "/" + anyo;
}
if(dia!=-1)
campohidden.value = dia + "/" + mes + "/" + anyo;
}

function escribehidden(_campo,_value)
{
window.document.write("<input type=hidden name='" + _campo + "' value='" + _value + "'>");
}

function genera_campo_fecha(formulario, campo, fecha, primero, numanyos, permiteninguna, nombresDeMeses, codigoCambio)
{
	
	// JAGS - I
	//nombresDeMeses es un parámetro opcional, de establecerlo, su valor es un array con los nombres que se dará a los meses. Por defecto, toman sus nombres clásicos en español
	if (nombresDeMeses != null)
	{
		for (var i = 0; i<nombresDeMeses.length && i<=12; i++)
			nombremeses[i]=nombresDeMeses[i];
	}
	
	if (permiteninguna==false)
		permiteninguna=null;
	// JAGS - F
	
// permiteninguna es un parámetro opcional, de establecerlo, si su valor es true la fecha podrá establecerse como "ninguna"
dia = fecha.replace(/(\d+)\/(\d+)\/(\d+)/, '$1');
mes =fecha.replace(/(\d+)\/(\d+)\/(\d+)/, '$2');
anyo=fecha.replace(/(\d+)\/(\d+)\/(\d+)/, '$3');
escribedias(formulario,campo,mes,anyo,permiteninguna, codigoCambio);
escribemeses(formulario,campo,permiteninguna, codigoCambio);
escribeanyos(formulario,campo,primero,numanyos,permiteninguna, codigoCambio);
// Si el hidden no está escrito lo escribimos...
if(eval("window.document." +  formulario + "." + campo)==null)
	escribehidden(campo, fecha,permiteninguna);



if (fecha=="")
{
dia=1;
mes=1;
anyo=primero;
}

// su posicion en el select del año
anyo = anyo - primero;

establecefecha(formulario,campo,dia, mes, anyo, fecha, permiteninguna );
// ahora seleccionamos inicializamos los select con la fecha pasada como parametro...
}

function establecefecha(_formul, _cam, dia, mes, anyo, fecha, permiteninguna)
{
selectdia=eval("window.document." +  _formul + "." + _cam + "_dia");
selectmes=eval("window.document." +  _formul + "." + _cam + "_mes");
selectanyo=eval("window.document." +  _formul + "." + _cam + "_anyo");
oculto=eval("window.document." +  _formul + "." + _cam);

if(permiteninguna== null)
{
selectdia.options[dia - 1].selected = true;
selectmes.options[mes - 1].selected = true;
selectanyo.options[anyo].selected = true;
}
else{
selectdia.options[dia].selected = true;
selectmes.options[mes].selected = true;
selectanyo.options[anyo + 1].selected = true;
}

if (fecha=="" && (permiteninguna==true))
{
oculto.value="";
selectdia.options[0].selected = true;
selectmes.options[0].selected = true;
selectanyo.options[0].selected = true;
}
else{
// controlafecha(_formul, _cam, "dia", permiteninguna);
}
}



// Validación de fecha mayor by Mauricio Escobar
//
//Este script y otros muchos pueden
//descarse on-line de forma gratuita
//en El Código: www.elcodigo.net

//Formato de la fecha
// 1 = DD/MM/YYYY 
// 2 = MM/DD/YYYY	
// 3 = YYYY/MM/DD
// 4 = YYYY/DD/MM
var formato = 1;

//**********************************************************************************************
//	invierta una fecha dada retornando en formato YYYYMMDD
//  dFecIni = Fecha a invertir
//	nTipFormat = Formato en que biene la fecha
//				 1 = DD/MM/YYYY 
//				 2 = MM/DD/YYYY	
//				 3 = YYYY/MM/DD
//				 4 = YYYY/DD/MM

function invFecha(nTipFormat,dFecIni){
	var dFecIni = dFecIni.replace(/-/g,"/");					// reemplaza el - por /	
	
	// primera division fecha
	var nPosUno  = ponCero(dFecIni.substr(0,dFecIni.indexOf("/")));
	// 2º divicion fecha
	var nPosDos  = ponCero(dFecIni.substr(parseInt(dFecIni.indexOf("/")) + 1,parseInt(dFecIni.lastIndexOf("/")) - parseInt(dFecIni.indexOf("/")) - 1));
	// 3º divicion fecha
	var nPosTres = ponCero(dFecIni.substr(parseInt(dFecIni.lastIndexOf("/")) + 1));

	switch(nTipFormat){
		case 1 :	//	DD/MM/YYYY
			dReturnFecha = nPosTres + "" + nPosDos + "" + nPosUno;
			break;

		case 2 :	//	MM/DD/YYYY
			dReturnFecha = nPosTres + "" + nPosUno + "" +nPosDos;
			break;

		case 3 :	//	YYYY/MM/DD
			dReturnFecha = nPosUno + "" + nPosDos + "" +nPosTres;
			break;
	
		case 4 :	//	YYYY/DD/MM
			dReturnFecha = nPosUno + "" + nPosTres + "" +nPosDos;
			break;
	}
	
	return dReturnFecha;	// retorna la fecha 	
}

// Agrega un cero delante del strPon cuando tenga solo un caracter
function ponCero(strPon){
	if(parseInt(strPon.length) < 2)
		strPon = "0" + strPon;
	return strPon;
}

//*******************************************************************************
// valida que la fecha dFecMenor es menor o igual a  dFecMayor
// los parametros dFecMenor, dFecMayor son fecha con divisores validos "-" o "/"
// el parametro dFormat es el tipo de formato en que viene la fecha 
//				 1 = DD/MM/YYYY 
//				 2 = MM/DD/YYYY	
//				 3 = YYYY/MM/DD
//				 4 = YYYY/DD/MM

function comparaFecha(dFormat,dFecMenor, dFecMayor){
	dFecMenor = invFecha(dFormat,dFecMenor);
	dFecMayor = invFecha(dFormat,dFecMayor);

	if(dFecMenor < dFecMayor)
		return true;
	else
		return false;
}


function comparaFecha2(dFormat,dFecMenor, dFecMayor){
	dFecMenor = invFecha(dFormat,dFecMenor);
	dFecMayor = invFecha(dFormat,dFecMayor);

	if(dFecMenor > dFecMayor)
		return false;
	else
		return true;
}


function validaFecha(  ){
	if(document.getElementById('paramTipoBusqueda')){
		if (document.getElementById('paramTipoBusqueda').value=='apartamento'){
			var dFechaMenor = document.getElementById('FechaEntradaApartamento').value;
			var dFechaMayor = document.getElementById('FechaSalidaApartamento').value;
		}else{
			var dFechaMenor = document.getElementById('FechaEntrada').value;
			var dFechaMayor = document.getElementById('FechaSalida').value;
		}
	}else{
		var dFechaMenor = document.getElementById('FechaEntrada').value;
		var dFechaMayor = document.getElementById('FechaSalida').value;
	}
	
	if(comparaFecha( formato,dFechaMenor,dFechaMayor) == true)
		
		return true;
		
		
	else
		
		return false;
		
	
}

function validaFechaActual(  ){
	/*if(document.getElementById('paramTipoBusqueda')){
		if (document.getElementById('paramTipoBusqueda').value=='apartamento'){
			var dFechaMayor = document.getElementById('FechaSalidaApartamento').value;
		}else{
			var dFechaMayor = document.getElementById('FechaSalida').value;
		}
	}else{
		var dFechaMayor = document.getElementById('FechaSalida').value;
	}*/
	if(document.getElementById('paramTipoBusqueda')){
		if (document.getElementById('paramTipoBusqueda').value=='apartamento'){
			var dFechaMayor = document.getElementById('FechaEntradaApartamento').value;
		}else{
			var dFechaMayor = document.getElementById('FechaEntrada').value;
		}
	}else{
		var dFechaMayor = document.getElementById('FechaEntrada').value;
	}
	
	var mydate=new Date();
	var year=mydate.getYear();
	if (year < 1000)
	year+=1900;
	var day=mydate.getDay();
	var month=mydate.getMonth()+1;
	if (month<10)
	month="0"+month;
	var daym=mydate.getDate();
	if (daym<10)
	daym="0"+daym;
	
	
	var dFechaMenor = daym +"/"+ month +"/"+ year; 

	if(comparaFecha2(formato,dFechaMenor,dFechaMayor) == true){
		
		return true;
		}
	else{
		
		return false;
		}
}


function UpdFechaSalida (date) {
	
	 milisegundos=parseInt(1*24*60*60*1000);
 
 	 fecha=new Date(date);  
	 tiempo=fecha.getTime();
	 
	 diamas=fecha.getDate();
	 mes = new String(fecha.getMonth()+1);
	 if (mes.length < 2)
	 	mes = "0" + mes;
	 anio=fecha.getYear();
	
	if (anio < 1000)
	  anio = anio + 1900;
	var dia_de_hoy = fecha.getDate() + "/" + mes + "/" + anio;
	var FechaEntrada 
	if(document.getElementById('paramTipoBusqueda')){
		if (document.getElementById('paramTipoBusqueda').value=='apartamento'){
			FechaEntrada = document.getElementById('FechaEntradaApartamento').value;  
		}else{
			FechaEntrada = document.getElementById('FechaEntrada').value;
		}
	}else{
		FechaEntrada = document.getElementById('FechaEntrada').value;
	}
	
	
	total=fecha.setTime(parseInt(tiempo+milisegundos));
	 diamas = new String(fecha.getDate());
	 if (diamas.length < 2)
	 	diamas = "0" + diamas;
	 mes = new String(fecha.getMonth()+1);
	if (mes.length < 2)
	 	mes = "0" + mes;
	 anio=fecha.getYear();
	 if (anio < 1000)
	  anio = anio + 1900;
	var dia_de_salida = diamas + "/" + mes + "/" + anio;
	
	if(document.getElementById('paramTipoBusqueda')){
		if (document.getElementById('paramTipoBusqueda').value=='apartamento'){
			/*alert(date);*/
			/*alert(document.getElementById('FechaEntradaApartamento').value);
			alert(dia_de_hoy);
			alert(dia_de_salida);*/
			
			
			if (document.getElementById('FechaEntradaApartamento').value == dia_de_hoy){				
					document.getElementById('FechaSalidaApartamento').value = dia_de_salida;
				}
		}else{
			if (document.getElementById('FechaEntrada').value == dia_de_hoy){	
					document.getElementById('FechaSalida').value = dia_de_salida;
				}
			
		}
	}else{
		if (document.getElementById('FechaEntrada').value == dia_de_hoy){	
				document.getElementById('FechaSalida').value = dia_de_salida;
			}
	}
	
}


