//***************************************************************************************
//**************	FUNCIONES COPIADAS DE			*************************
//**************   http://www.apriori-it.co.uk/FormatDate.jsp	*************************
//***************************************************************************************

var arrMonths = new Array("Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre");

function isDate(DateToCheck){
	if(DateToCheck==""){
		return false;
	}
	var m_strDate = FormatDate(DateToCheck);
	if(m_strDate==""){
		return false;
	}
	var m_arrDate = m_strDate.split("/");
	var m_DAY = m_arrDate[0];
	var m_MONTH = m_arrDate[1];
	var m_YEAR = m_arrDate[2];
	if(m_YEAR.length > 4){
		return false;
	}
	m_strDate = m_MONTH + "/" + m_DAY + "/" + m_YEAR;
	var testDate=new Date(m_strDate);
	if(testDate.getMonth()+1==m_MONTH){
		return true;
	}else{
		return false;
	}
}

function FormatDate(DateToFormat,FormatAs){
	if(DateToFormat==""){
		return"";
	}
	if(!FormatAs){
		FormatAs="dd/mm/yyyy";
	}
	FormatAs = FormatAs.toLowerCase()
	
	var strReturnDate;
	FormatAs = FormatAs.toLowerCase();
	DateToFormat = DateToFormat.toLowerCase();
	var arrDate
	var strMONTH;
	var Separator;

	while(DateToFormat.indexOf("st")>-1){
		DateToFormat = DateToFormat.replace("st","");
	}

	while(DateToFormat.indexOf("nd")>-1){
		DateToFormat = DateToFormat.replace("nd","");
	}

	while(DateToFormat.indexOf("rd")>-1){
		DateToFormat = DateToFormat.replace("rd","");
	}

	while(DateToFormat.indexOf("th")>-1){
		DateToFormat = DateToFormat.replace("th","");
	}

	if(DateToFormat.indexOf("-")>-1){
		Separator = "-";
	}

	if(DateToFormat.indexOf("/")>-1){
		Separator = "/";
	}

	arrDate = DateToFormat.split(Separator);
	DateToFormat = "";
	for(var iSD = 0;iSD < arrDate.length;iSD++){
		if(arrDate[iSD]!=""){
			DateToFormat += arrDate[iSD] + Separator;
		}
	}
	DateToFormat = DateToFormat.substring(0,DateToFormat.length-1);
	arrDate = DateToFormat.split(Separator);

	if(arrDate.length < 3){
		return "";
	}

	var DAY = arrDate[0];
	var MONTH = arrDate[1];
	var YEAR = arrDate[2];

	if(parseFloat(arrDate[1]) > 12){
		DAY = arrDate[1];
		MONTH = arrDate[0];
	}

	if(parseFloat(DAY) && DAY.toString().length==4){
		YEAR = arrDate[0];
		DAY = arrDate[2];
		MONTH = arrDate[1];
	}


	for(var iSD = 0;iSD < arrMonths.length;iSD++){
		var ShortMonth = arrMonths[iSD].substring(0,3).toLowerCase();
		var MonthPosition = DateToFormat.indexOf(ShortMonth);
		if(MonthPosition > -1){
			MONTH = iSD + 1;
			if(MonthPosition == 0){
				DAY = arrDate[1];
				YEAR = arrDate[2];
			}
		break;
		}
	}

	var strTemp = YEAR.toString();
	if(strTemp.length==2){
		if(parseFloat(YEAR)>40){
			YEAR = "19" + YEAR;
		}else{
			YEAR = "20" + YEAR;
		}
	}

	if(parseInt(MONTH)< 10 && MONTH.toString().length < 2){
		MONTH = "0" + MONTH;
	}
	if(parseInt(DAY)< 10 && DAY.toString().length < 2){
		DAY = "0" + DAY;
	}
	switch (FormatAs){
		case "dd/mm/yyyy":
			return DAY + "/" + MONTH + "/" + YEAR;
		case "yyyymmdd":
			return YEAR + MONTH + DAY;
		case "mm/dd/yyyy":
			return MONTH + "/" + DAY + "/" + YEAR;
		case "dd/mmm/yyyy":
			return DAY + " " + arrMonths[MONTH -1].substring(0,3) + " " + YEAR;
		case "dd-mm-yyyy":
			return DAY + "-" + MONTH + "-" + YEAR;
		case "mm-dd-yyyy":
			return MONTH + "-" + DAY + "-" + YEAR;
		case "yyyy-mm-dd":
			return YEAR + "-" + MONTH + "-" + DAY;
		case "mmm/dd/yyyy":
			return arrMonths[MONTH -1].substring(0,3) + " " + DAY + " " + YEAR;
		case "dd/mmmm/yyyy":
			return DAY + " " + arrMonths[MONTH -1] + " " + YEAR;	
		case "mmmm/dd/yyyy":
			return arrMonths[MONTH -1] + " " + DAY + " " + YEAR;
	}
	return DAY + "/" + strMONTH + "/" + YEAR;
}

//****************************************************************************************
//******************************		MI CODIGO		**********************************
//****************************************************************************************
function GenerarCalendario(form, txt, vAno, vMes, formato_fecha){
	var sHTML=""

	var NumeroDeDiasMesActual
	var PrimerDiaDeSemanaMesActual

	var cont, DiaSemana
	var fPaso, fComienzaSemana
	var MesAnterior, MesSiguiente, AnoAnterior, AnoSiguiente
	var Dia = 0;
	
	//Obtiene el día de la semana, para el día 1, del mes y año actual
	PrimerDiaDeSemanaMesActual = ObtenerDiaDeLaSemana(1, vMes, vAno)
	
	//Obtener número de días que tiene el mes y año actual
	NumeroDeDiasMesActual = ObtenerNumeroDiasMes(vAno, vMes)
	
	//Calculamos el Mes y Año siguiente y anterior
	AnoAnterior = parseInt(vAno) - 1;
	AnoSiguiente = parseInt(vAno) + 1;
	if(parseFloat(vMes) == 1){
		MesAnterior = 12;
		MesSiguiente = 2;
	}else{
		if(parseFloat(vMes) == 12){
			MesAnterior = 11;
			MesSiguiente = 1;
		}else{
			MesAnterior = parseFloat(vMes) - 1;
			MesSiguiente = parseFloat(vMes) + 1;
		}
	}

	sHTML += "	<table border='0' summary='Selecciones un día en el calendario como inicio del intervalo en el que se realizarán las búsquedas'>";
	sHTML += "  <caption>Selecciones fecha desde:</caption>";
	sHTML += "  <thead>";
	sHTML += "  <tr>";
	sHTML += "    <th colspan='7'>";
	sHTML += "    <strong><span class='left'><small>Mes:</small>" + arrMonths[vMes-1] + "</span><span class='right'><small>Año:</small>" + vAno + "</span></strong>";

	sHTML += "    <a href='#' Title='Seleccionar día de mes y año' class='no'>Seleccionar día</a>";

	sHTML += "    <span class='left'>";
	sHTML += "    <a href='calendar.jsp?formato=" + formato_fecha + "&form=" + form + "&txt=" + txt + "&ano=" + vAno + "&mes=" + MesAnterior + "' accesskey='a' title='mes anterior' class='button before'>anterior</a>";
	sHTML += "    <a href='calendar.jsp?formato=" + formato_fecha + "&form=" + form + "&txt=" + txt + "&ano=" + vAno + "&mes=" + MesSiguiente + "' accesskey='s' title='mes siguiente' class='button after'>siguiente</a>";
	sHTML += "	  </span>";
	sHTML += "    <span class='right'>";
	sHTML += "    <a href='calendar.jsp?formato=" + formato_fecha + "&form=" + form + "&txt=" + txt + "&ano=" + AnoAnterior + "&mes=" + vMes + "' accesskey='z' title='año anterior' class='button before'>anterior</a>";
	sHTML += "    <a href='calendar.jsp?formato=" + formato_fecha + "&form=" + form + "&txt=" + txt + "&ano=" + AnoSiguiente + "&mes=" + vMes + "' accesskey='x' title='año siguiente' class='button after'>siguiente</a>";
	sHTML += "    </span>";
	sHTML += "    <span style='clear:both'/>";
	sHTML += "    </th>";
	sHTML += "  </tr>";
	sHTML += "  </thead>";
	sHTML += "  <tbody>";
	sHTML += "	<tr>";
	sHTML += "	    <th scope='col' class='day'>L<em>unes</em></th>";
	sHTML += "	    <th scope='col' class='day'>M<em>artes</em></th>";
	sHTML += "	    <th scope='col' class='day'>Mi<em>ércoles</em></th>";
	sHTML += "	    <th scope='col' class='day'>J<em>ueves</em></th>";
	sHTML += "	    <th scope='col' class='day'>V<em>iernes</em></th>";
	sHTML += "	    <th scope='col' class='day'>S<em>ábado</em></th>";
	sHTML += "	    <th scope='col' class='day'>D<em>omingo</em></th>";
	sHTML += "  	</tr>";
	sHTML += "  <tr>"; 
	
	
	//NumeroDeDiasMesActual
	for (cont=1;cont<42;cont++){
		if(Dia == NumeroDeDiasMesActual){
			break;
		}
		
		if(cont == PrimerDiaDeSemanaMesActual){
		    fPaso = true;
		    Dia = Dia + 1;
		    var today = new Date().getDate();
		    var todayClassName = "";
		    if (today == Dia)
		    	todayClassName = "today";
		    else	
		    	todayClassName = "";
		    	
	  		tmpFecha = FormatDate(Dia + "/" + vMes + "/" + vAno, formato_fecha)
			tmpString = 'javascript:verfecha("' + tmpFecha + '");';
		    if(EsFinDeSemana(vAno, vMes, Dia)){
				if(EsDomingo(vAno, vMes, Dia)){
					sHTML = sHTML + "<td align='center' class='" + todayClassName + "'> <a href='" + tmpString + "'>" + Dia + " </a> </td>" + "<tr><td colspan='7'></td> </tr>" ;
					fComienzaSemana = true;
				}else{
					sHTML = sHTML + "<td align='center' class='" + todayClassName + "'> <a href='" + tmpString + "'>" + Dia + " </a> </td>" ;
				}
		    }else{
				sHTML = sHTML + "<td align='center' class='" + todayClassName + "'> <a href='" + tmpString + "'>" + Dia + "</a> </td>" 
		    }
		}else{
		    if(! fPaso){
				sHTML = sHTML + "<td align='center'>&nbsp;</td>" ;
		    }
		}

		if(fPaso){
			Dia = Dia + 1;
			if (today == Dia)
		    	todayClassName = "today";
		    else	
		    	todayClassName = "";
		    	
			tmpFecha = FormatDate(Dia + "/" + vMes + "/" + vAno,formato_fecha)
			tmpString = 'javascript:verfecha("' + tmpFecha + '");';
			if(EsFinDeSemana(vAno, vMes, Dia)){
				if(EsDomingo(vAno, vMes, Dia)){
					sHTML = sHTML + "<td align='center' class='" + todayClassName + "'> <a href='" + tmpString + "'>" + Dia + " </a> </td>" + "<tr><td colspan='7'></td></tr> </tr>" ;
					fComienzaSemana = true;
				}else{
					if(fComienzaSemana){
						sHTML = sHTML + "</tr>";
					}
					fComienzaSemana = false;
					sHTML = sHTML + "<td align='center' class='" + todayClassName + "'> <a href='" + tmpString + "'>" + Dia + "</a></td>" ;
				}
			}else{
				if(fComienzaSemana){
					sHTML = sHTML + "</tr>";
				}
				fComienzaSemana = false;
				sHTML = sHTML + "<td align='center' class='" + todayClassName + "'> <a href='" + tmpString + "'>" + Dia + "</a> </td>" ;
			}
		}
	}

	DiaSemana = ObtenerDiaDeLaSemana(Dia, vMes, vAno);
	for(cont = DiaSemana;cont<=7;cont++){
		if(parseInt(cont) != parseInt(DiaSemana)){
		    sHTML = sHTML + "<td align='center'>&nbsp;</td>";
		}
	}
	sHTML += "</tr>";
	sHTML += "</tbody>";		
	sHTML += "</table>";		
	
	return sHTML
}

function EsDomingo(Ano, Mes, Dia){
	var DiaDeSemana = ObtenerDiaDeLaSemana(Dia, Mes, Ano)
	if (DiaDeSemana == 7){
		return true
	}else{
		return false
	}    
}

function EsFinDeSemana(Ano, Mes, Dia){
	var DiaDeSemana = ObtenerDiaDeLaSemana(Dia, Mes, Ano);
	if (DiaDeSemana == 6)	return true;
	if (DiaDeSemana == 7) return true;
	return false;
}

function ObtenerDiaDeLaSemana(Dia, Mes, Ano){
	Fecha = new Date(Ano, Mes-1, Dia);
	if (Fecha.getDay() == 0){
		return 7;
	}else{
		return Fecha.getDay();
	}
}

function ObtenerNumeroDiasMes(vAno, vMes){
	for(var Dia=29;Dia<=32;Dia++){
  	if(! isDate(Dia + "/" + vMes + "/" + vAno)){
    	return Dia - 1;
    }
  }
}

function anyo4digitos(fecha){
    var separator;
    if(fecha.indexOf("-")>-1){
        separator = "-";
    }
    if(fecha.indexOf("/")>-1){
        separator = "/";
    }
    var arrDate = fecha.split(separator);
    var YEAR = trim(arrDate[2]);
    if (YEAR.length < 4 || YEAR.length > 4){
        return false;
    }
    return true;
        
}
