//Ivan Lusquiños - ivanllx@hotmail.com



// initialiZe variables...
var ppcIE=((navigator.appName == "Microsoft Internet Explorer") || ((navigator.appName == "Netscape") && (parseInt(navigator.appVersion)==5)));
var ppcNN6=((navigator.appName == "Netscape") && (parseInt(navigator.appVersion)==5));
//var ppcIE=(navigator.appName == "Microsoft Internet Explorer");
var ppcNN=((navigator.appName == "Netscape")&&(document.layers));
var ppcX = 4;
var ppcY = 4;

var IsCalendarVisible;
var calfrmName;
var maxYearList;
var minYearList;
var todayDate = new Date;
var curDate = new Date;
var curImg;
var curDateBox;
var minDate = new Date;
var maxDate = new Date;
var hideDropDowns;
var IsUsingMinMax;
var FuncsToRun;
var img_del;
var img_close;
img_del=new Image();
img_del.src="../images/btn_del_small.gif";
img_close=new Image();
img_close.src="../images/btn_close_small.gif";

minYearList=todayDate.getFullYear()-80;
maxYearList=todayDate.getFullYear()+1;
IsCalendarVisible=false;

img_Date_UP=new Image();
img_Date_UP.src="../images/date_picker.gif";

img_Date_OVER=new Image();
img_Date_OVER.src="../images/btn_date_over.gif";

img_Date_DOWN=new Image();
img_Date_DOWN.src="../images/btn_date_down.gif";

function calSwapImg(whatID, NewImg,override) {
    /*if (document.images) {
     if (!( IsCalendarVisible && override )) {
        document.images[whatID].src = eval(NewImg + ".src");
     }
    }
    window.status=' ';*/
    return true;
}

function getOffsetLeft (el) {
    var ol = el.offsetLeft +25;
    while ((el = el.offsetParent) != null)
        ol += el.offsetLeft;
    return ol;
}

function getOffsetTop (el) {
    var ot = el.offsetTop - 140;
    while((el = el.offsetParent) != null)
        ot += el.offsetTop;
    return ot;
}

function showCalendar(frmName, dteBox,btnImg, hideDrops, MnDt, MnMo, MnYr, MxDt, MxMo, MxYr,runFuncs) {
    hideDropDowns = hideDrops;
    FuncsToRun = runFuncs;
    calfrmName = frmName;
    if (IsCalendarVisible) {
        hideCalendar();
    }
    else {
//        if (document.images['calbtn1']!=null ) document.images['calbtn1'].src=img_del.src;
//        if (document.images['calbtn2']!=null ) document.images['calbtn2'].src=img_close.src;

        if (hideDropDowns) {toggleDropDowns('hidden');}
        if ((MnDt!=null) && (MnMo!=null) && (MnYr!=null) && (MxDt!=null) && (MxMo!=null) && (MxYr!=null)) {
            IsUsingMinMax = true;
            minDate.setDate(MnDt);
            minDate.setMonth(MnMo-1);
            minDate.setFullYear(MnYr);
            maxDate.setDate(MxDt);
            maxDate.setMonth(MxMo-1);
            maxDate.setFullYear(MxYr);

        }

        else {

            IsUsingMinMax = false;

        }



        curImg = btnImg;

        curDateBox = dteBox;

        if ( ppcIE ) {

            ppcX = getOffsetLeft(document.images[btnImg]);

            ppcY = getOffsetTop(document.images[btnImg]) + document.images[btnImg].height;

        }

        else if (ppcNN){

            ppcX = document.images[btnImg].x;

            ppcY = document.images[btnImg].y + document.images[btnImg].height;

        }



        domlay('popupcalendar',1,ppcX,ppcY,Calendar(todayDate.getMonth(),todayDate.getFullYear()));

        IsCalendarVisible = true;

    }

}



function toggleDropDowns(showHow){

    var i; var j;

    for (i=0;i<document.forms.length;i++) {

        for (j=0;j<document.forms[i].elements.length;j++) {

            if (document.forms[i].elements[j].tagName == "SELECT") {

                if (document.forms[i].name != "Cal")

                    document.forms[i].elements[j].style.visibility=showHow;

            }

        }

    }

}



function hideCalendar(){

    domlay('popupcalendar',0,ppcX,ppcY);

    calSwapImg(curImg, 'img_Date_UP');

    IsCalendarVisible = false;

    if (hideDropDowns) {toggleDropDowns('visible');}

}



function calClick() {

        window.focus();

}



function domlay(id,trigger,lax,lay,content) {

    /*

     * Cross browser Layer visibility / Placement Routine

     * Done by Chris Heilmann (mail@ichwill.net)

     * Feel free to use with these lines included!

     * Created with help from Scott Andrews.

     * The marked part of the content change routine is taken

     * from a script by Reyn posted in the DHTML

     * Forum at Website Attraction and changed to work with

     * any layername. Cheers to that!

     * Welcome DOM-1, about time you got included... :)

     */

    // Layer visible

    if (trigger=="1"){

        if (document.layers) document.layers[''+id+''].visibility = "show"

        else if (document.all) document.all[''+id+''].style.visibility = "visible"

        else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "visible"

        }

    // Layer hidden

    else if (trigger=="0"){

        if (document.layers) document.layers[''+id+''].visibility = "hide"

        else if (document.all) document.all[''+id+''].style.visibility = "hidden"

        else if (document.getElementById) document.getElementById(''+id+'').style.visibility = "hidden"

        }

    // Set horizontal position

    if (lax){

        if (document.layers){document.layers[''+id+''].left = lax}

        else if (document.all){document.all[''+id+''].style.left=lax}

        else if (document.getElementById){document.getElementById(''+id+'').style.left=lax+"px"}

        }

    // Set vertical position

    if (lay){

        if (document.layers){document.layers[''+id+''].top = lay}

        else if (document.all){document.all[''+id+''].style.top=lay}

        else if (document.getElementById){document.getElementById(''+id+'').style.top=lay+"px"}

        }

    // change content



    if (content){

    if (document.layers){

        sprite=document.layers[''+id+''].document;

        // add father layers if needed! document.layers[''+father+'']...

        sprite.open();

        sprite.write(content);

        sprite.close();

        }

    else if (document.all) document.all[''+id+''].innerHTML = content;

    else if (document.getElementById){

        //Thanx Reyn!

        rng = document.createRange();

        el = document.getElementById(''+id+'');

        rng.setStartBefore(el);

        htmlFrag = rng.createContextualFragment(content)

        while(el.hasChildNodes()) el.removeChild(el.lastChild);

        el.appendChild(htmlFrag);

        // end of Reyn ;)

        }

    }

}



function Calendar(whatMonth,whatYear) {

    var output = '';

    var datecolwidth;

    var startMonth;

    var startYear;

    startMonth=whatMonth;

    startYear=whatYear;



    curDate.setMonth(whatMonth);

    curDate.setFullYear(whatYear);

    curDate.setDate(todayDate.getDate());

    if (ppcNN6) {

        output += '<form name="Cal"><table width="185" border="3" class="cal-Table" cellspacing="0" cellpadding="0"><tr>';

    }

    else {

        output += '<table width="185" border="3" class="cal-Table" cellspacing="0" cellpadding="0"><form name="Cal"><tr>';
    }

    output += '<td class="cal-HeadCell" align="center" width="100%"><a href="javascript:clearDay();"><img name="calbtn1" src="admin/images/sistema/blank.gif" border="0" width="12" height="10"></a>&nbsp;&nbsp;<a href="javascript:scrollMonth(-1);" class="cal-DayLink"><font color=ffffff><b>&laquo;</font></b></a>&nbsp;<SELECT class="cal-TextBox" NAME="cboMonth" onChange="changeMonth();">';
    for (month=0; month<12; month++) {
        if (month == whatMonth) output += '<OPTION VALUE="' + month + '" SELECTED>' + names[month] + '<\/OPTION>';
        else                output += '<OPTION VALUE="' + month + '">'          + names[month] + '<\/OPTION>';
    }

    output += '<\/SELECT><SELECT class="cal-TextBox" NAME="cboYear" onChange="changeYear();">';

    for (year=minYearList; year<2010; year++) {
        if (year == whatYear) output += '<OPTION VALUE="' + year + '" SELECTED>' + year + '<\/OPTION>';
        else              output += '<OPTION VALUE="' + year + '">'          + year + '<\/OPTION>';
    }

    output += '<\/SELECT>&nbsp;<a href="javascript:scrollMonth(1);" class="cal-DayLink"><font color=ffffff><b>&raquo;</b></font></a>&nbsp;&nbsp;<a href="javascript:hideCalendar();"><img name="calbtn2" src="admin/images/sistema/cancel.gif" border="0" ></a><\/td><\/tr><tr><td width="100%" align="center">';

    firstDay = new Date(whatYear,whatMonth,1);
    startDay = firstDay.getDay();

    if (((whatYear % 4 == 0) && (whatYear % 100 != 0)) || (whatYear % 400 == 0))
         days[1] = 29;
    else
         days[1] = 28;

    output += '<table width="185" cellspacing="1" cellpadding="2" border="0"><tr>';

    for (i=0; i<7; i++) {
        if (i==0 || i==6) {

            datecolwidth="15%"

        }

        else

        {

            datecolwidth="14%"

        }

        output += '<td class="cal-HeadCell" width="' + datecolwidth + '" align="center" valign="middle">'+ dow[i] +'<\/td>';

    }



    output += '<\/tr><tr>';



    var column = 0;

    var lastMonth = whatMonth - 1;

    var lastYear = whatYear;

    if (lastMonth == -1) { lastMonth = 11; lastYear=lastYear-1;}



    for (i=0; i<startDay; i++, column++) {

        output += getDayLink((days[lastMonth]-startDay+i+1),true,lastMonth,lastYear);

    }



    for (i=1; i<=days[whatMonth]; i++, column++) {

        output += getDayLink(i,false,whatMonth,whatYear);

        if (column == 6) {

            output += '<\/tr><tr>';

            column = -1;

        }

    }



    var nextMonth = whatMonth+1;

    var nextYear = whatYear;

    if (nextMonth==12) { nextMonth=0; nextYear=nextYear+1;}



    if (column > 0) {

        for (i=1; column<7; i++, column++) {

            output +=  getDayLink(i,true,nextMonth,nextYear);

        }

        output += '<\/tr><\/table><\/td><\/tr>';

    }

    else {

        output = output.substr(0,output.length-4); // remove the <tr> from the end if there's no last row

        output += '<\/table><\/td><\/tr>';

    }



    if (ppcNN6) {

        output += '<\/table><\/form>';

    }

    else {

        output += '<\/form><\/table>';

    }

    curDate.setDate(1);

    curDate.setMonth(startMonth);

    curDate.setFullYear(startYear);

    return output;

}



function getDayLink(linkDay,isGreyDate,linkMonth,linkYear) {

    var templink;

    if (!(IsUsingMinMax)) {

        if (isGreyDate) {

            templink='<td align="center" class="cal-GreyDate">' + linkDay + '<\/td>';

        }

        else {

            if (isDayToday(linkDay)) {

                templink='<td align="center" class="cal-DayCell">' + '<a class="cal-TodayLink" onmouseover="self.status=\' \';return true" href="javascript:changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';

            }

            else {

                templink='<td align="center" class="cal-DayCell">' + '<a class="cal-DayLink" onmouseover="self.status=\' \';return true" href="javascript:changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';

            }

        }

    }

    else {

        if (isDayValid(linkDay,linkMonth,linkYear)) {



            if (isGreyDate){

                templink='<td align="center" class="cal-GreyDate">' + linkDay + '<\/td>';

            }

            else {

                if (isDayToday(linkDay)) {

                    templink='<td align="center" class="cal-DayCell">' + '<a class="cal-TodayLink" onmouseover="self.status=\' \';return true" href="javascript:changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';

                }

                else {

                    templink='<td align="center" class="cal-DayCell">' + '<a class="cal-DayLink" onmouseover="self.status=\' \';return true" href="javascript:changeDay(' + linkDay + ');">' + linkDay + '<\/a>' +'<\/td>';

                }

            }

        }

        else {

            templink='<td align="center" class="cal-GreyInvalidDate">'+ linkDay + '<\/td>';

        }

    }

    return templink;

}



function isDayToday(isDay) {

    if ((curDate.getFullYear() == todayDate.getFullYear()) && (curDate.getMonth() == todayDate.getMonth()) && (isDay == todayDate.getDate())) {

        return true;

    }

    else {

        return false;

    }

}



function isDayValid(validDay, validMonth, validYear){



    curDate.setDate(validDay);

    curDate.setMonth(validMonth);

    curDate.setFullYear(validYear);



    if ((curDate>=minDate) && (curDate<=maxDate)) {

        return true;

    }

    else {

        return false;

    }

}

function padout(number) { return (number < 10) ? '0' + number : number; }

function clearDay() {
    eval('document.' + calfrmName + '.' + curDateBox + '.value = \'\'');
    hideCalendar();
    if (FuncsToRun!=null)
        eval(FuncsToRun);
}

function changeDay(whatDay) {
	/* Esto valida que la fecha no sea menor a la actual */
	fecha_actual = new Date();
	anio = fecha_actual.getYear();
	mes = fecha_actual.getMonth()+1;
	dia = fecha_actual.getDate();
	
//	if (whatDay<dia)
	if (whatDay < dia && (curDate.getYear() < anio || curDate.getYear() == anio && curDate.getMonth() + 1 <= mes))
	{
		alert("La fecha ingresada no es correcta...");	
		FuncsToRun=null; //??? =S
	}
	else
	{ /* Si se desea dejar la fecha con retraso... solo tomar en cuenta esta parte O.O */
    curDate.setDate(whatDay);
    eval('document.' + calfrmName + '.' + curDateBox + '.value = "'+ padout(curDate.getDate()) + '/' + names_numero[curDate.getMonth()] + '/' + curDate.getFullYear() + '"');
    hideCalendar();
    if (FuncsToRun!=null)
        eval(FuncsToRun);
	}//obvio quitar esta llave si se quita la validación de arriba o_O
}

function scrollMonth(amount) {
    var monthCheck;
    var yearCheck;

    if (ppcIE) {
        monthCheck = document.forms["Cal"].cboMonth.selectedIndex + amount;
    }
    else if (ppcNN) {
        monthCheck = document.popupcalendar.document.forms["Cal"].cboMonth.selectedIndex + amount;

    }

    if (monthCheck < 0) {

        yearCheck = curDate.getFullYear() - 1;

        if ( yearCheck < minYearList ) {

            yearCheck = minYearList;

            monthCheck = 0;

        }

        else {

            monthCheck = 11;

        }

        curDate.setFullYear(yearCheck);

    }

    else if (monthCheck >11) {

        yearCheck = curDate.getFullYear() + 1;

        if ( yearCheck > maxYearList-1 ) {

            yearCheck = maxYearList-1;

            monthCheck = 11;

        }

        else {

            monthCheck = 0;

        }

        curDate.setFullYear(yearCheck);

    }



    if (ppcIE) {

        curDate.setMonth(document.forms["Cal"].cboMonth.options[monthCheck].value);

    }

    else if (ppcNN) {

        curDate.setMonth(document.popupcalendar.document.forms["Cal"].cboMonth.options[monthCheck].value );

    }

    domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));

}



function changeMonth() {



    if (ppcIE) {

        curDate.setMonth(document.forms["Cal"].cboMonth.options[document.forms["Cal"].cboMonth.selectedIndex].value);

        domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));

    }

    else if (ppcNN) {



        curDate.setMonth(document.popupcalendar.document.forms["Cal"].cboMonth.options[document.popupcalendar.document.forms["Cal"].cboMonth.selectedIndex].value);

        domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));

    }



}



function changeYear() {

    if (ppcIE) {



        curDate.setFullYear(document.forms["Cal"].cboYear.options[document.forms["Cal"].cboYear.selectedIndex].value);

        domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));

    }

    else if (ppcNN) {



        curDate.setFullYear(document.popupcalendar.document.forms["Cal"].cboYear.options[document.popupcalendar.document.forms["Cal"].cboYear.selectedIndex].value);

        domlay('popupcalendar',1,ppcX,ppcY,Calendar(curDate.getMonth(),curDate.getFullYear()));

    }



}



function makeArray0() {

    for (i = 0; i<makeArray0.arguments.length; i++)

        this[i] = makeArray0.arguments[i];

}



var names     = new makeArray0('Ene','Feb','Mar','Abr','May','Jun','Jul','Ago','Sep','Oct','Nov','Dic');

var names_numero  = new makeArray0('01','02','03','04','05','06','07','08','09','10','11','12');

var days      = new makeArray0(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

var dow       = new makeArray0('D','L','M','M','J','V','S');

