﻿var calDate;
var iYear;
var iMonth;
var iDay;
var sReturnID1;
var sReturnID2;
var sFormat;
var cHiddenControls;

function doShowCalendar(id1, id2, fmt, evt)
{
    if(doShowCalendar.arguments.length > 5)
    {
        var i;
        cHiddenControls = new Array();
        for(i = 5; i < doShowCalendar.arguments.length; i ++)
        {
            cHiddenControls[i - 5] = doShowCalendar.arguments[i];
            document.getElementById(cHiddenControls[i - 5]).style.visibility = "hidden";
        }
    }
    else
    {
        cHiddenControls = null;
    }
    
    sReturnID1 = id1;
    sReturnID2 = id2;
    sFormat = fmt;
    
    if(document.getElementById(id1).value != "")
    {
        try
        {
            var sDateParts;
            sDateParts = document.getElementById(id1).value.split("/");
            
            if(sFormat == "yyyy/mm/dd"){
                calDate = new Date(sDateParts[0], sDateParts[1] - 1, sDateParts[2]);
            }else{
                if(sFormat == "yy/mm/dd"){
                    calDate = new Date(2000 + Math.abs(sDateParts[0]), sDateParts[1] - 1, sDateParts[2]);
                }else{
                    if(sFormat == "dd/mm/yy"){
                        calDate = new Date(2000 + Math.abs(sDateParts[2]), sDateParts[1] - 1, sDateParts[0]);
                    }else{
                        if(sFormat == "dd/mm/yyyy"){
                            calDate = new Date(sDateParts[2], sDateParts[1] - 1, sDateParts[0]);
                        }else{
                            calDate = new Date();
                        }
                    }
                }
            }
        }
        catch(e)
        {
            calDate = new Date();
        }
    }
    else
    {
        calDate = new Date();
    }

    iYear = calDate.getFullYear();
    iMonth = calDate.getMonth();
    iDay = calDate.getDate();

    doCalendar();

    //Get the coordinates
    var pageXY = GetEventElementPosition(evt);
    var elmDim = GetEventElementDimensions(evt);

    var cal = document.getElementById("cal").style;
    cal.left = pageXY[0] + "px";
    cal.top = (pageXY[1] + elmDim[1]) + "px";
    cal.visibility = "visible";
    
    document.getElementById(id1).blur();
}

function doCalendar(){
	var sFirstDay, iFirstWeekDay, iMonthLength;
	var y = iYear;
	var m = iMonth;
	var i , j;
	
	var sHTML;

	//Create the month 'selected' array;
	var sMonthSelect = new Array();
	for(i = 0; i < 12; i ++){
	    if(i == iMonth){
	        sMonthSelect[i] = " selected='selected'";
	    }else{
	        sMonthSelect[i] = "";
	    }
	}

	sHTML = "<table class='calendar' cellspacing='0' cellpadding='0' border='0' width='140' style='background-color:#990000;border:1px solid #990000;font-size:11px;'>";
	sHTML += "<tr><td width='84' style='padding-left:2px;'><select id='cal_month' class='select' style='width:80px;font-size:11px;' onchange='doMonthChange();'>";
	sHTML += "<option value='0'" + sMonthSelect[0] + ">January</option>";
	sHTML += "<option value='1'" + sMonthSelect[1] + ">February</option>";
	sHTML += "<option value='2'" + sMonthSelect[2] + ">March</option>";
	sHTML += "<option value='3'" + sMonthSelect[3] + ">April</option>";
	sHTML += "<option value='4'" + sMonthSelect[4] + ">May</option>";
	sHTML += "<option value='5'" + sMonthSelect[5] + ">June</option>";
	sHTML += "<option value='6'" + sMonthSelect[6] + ">July</option>";
	sHTML += "<option value='7'" + sMonthSelect[7] + ">August</option>";
	sHTML += "<option value='8'" + sMonthSelect[8] + ">September</option>";
	sHTML += "<option value='9'" + sMonthSelect[9] + ">October</option>";
	sHTML += " <option value='10'" + sMonthSelect[10] + ">November</option>";
	sHTML += "<option value='11'" + sMonthSelect[11] + ">December</option>";
	sHTML += "</select>";
	sHTML += "</td><td width='54' style='padding-right:2px;'>";
	sHTML += "<select id='cal_year' class='select' style='width:50px;font-size:11px;' onchange='doYearChange();'>";

	var dNow = new Date();
	for(i = dNow.getFullYear(); i <= dNow.getFullYear() + 2; i ++){
	    if(i == iYear){
	        sHTML += "<option value='" + i + "' selected='selected'>" + i + "</option>";
	    }else{
	        sHTML += "<option value='" + i + "'>" + i + "</option>";
	    }
	}
				    
	sHTML += "</td></tr><tr><td id='calendar' colspan='2' style='padding-left:2px;'>";
	sHTML += "<table class='calendar' cellspacing='0' cellpadding='0' border='0' width='132' style='background-color:white;font-size:10px;'>";
	sHTML += "<tr align='center'>";
	sHTML += "<td><b>M</b></td>";
	sHTML += "<td><b>T</b></td>";
	sHTML += "<td><b>W</b></td>";
	sHTML += "<td><b>T</b></td>";
	sHTML += "<td><b>F</b></td>";
	sHTML += "<td><b>S</b></td>";
	sHTML += "<td><b>S</b></td>";	
	sHTML += "</tr><tr>";

	sFirstDay = new Date(y, m, 1);
	iFirstWeekDay = sFirstDay.getDay();
	iMonthLength = getMonthLength(y, m);

	if (iFirstWeekDay == 0){
		for (j = 0; j < 6; j++){
			sHTML += "<td width=20>&nbsp;</td>"
		}
	}else{
		for (j = 0; j < iFirstWeekDay - 1; j++){
			sHTML += "<td width=20>&nbsp;</td>"
		}
	}

	for (j = 1; j < iMonthLength + 1; j++){
		if ((j + iFirstWeekDay - 2) % 7 == 0){
			sHTML += "</tr><tr>";
		}
		if(y == iYear && m == iMonth && j == iDay){
			sHTML += "<td id=date_" + y + "_" + m + "_" + j + " width=20 style='border:1px solid #000000' align='center' onclick=doDay('" + y + "_" + m + "_" + j + "')>" + j + "</td>"
		}else{
			sHTML += "<td id=date_" + y + "_" + m + "_" + j + " width=20 style='border:1px solid white' align='center' onclick=doDay('" + y + "_" + m + "_" + j + "')>" + j + "</td>"
		}
	}
	sHTML += "</tr>";
	sHTML += "</table>";
	sHTML += "</td></tr>";
	sHTML += "<tr><td colspan='2' align='right' style='padding:1px 4px 0px 0px;'><input type='button' class='button' value='Cancel' onclick='doCancel();' /></td></tr>";
	sHTML += "</table>";
	
	document.getElementById("cal").innerHTML = sHTML;

	if(getMonthLength(iYear, iMonth) < iDay){
		iDay = getMonthLength(iYear, iMonth);
	}

	document.getElementById("date_" + iYear + "_" + iMonth + "_" + iDay).style.border = "1px solid #000000";
}

function doYearChange(){
    iYear = document.getElementById("cal_year").value;
    doCalendar();
}

function doMonthChange(){
    iMonth = document.getElementById("cal_month").value;
    doCalendar();
}

function doDay(dt){
	iYear = dt.substr(0, 4);
	iMonth = dt.substr(5, 2).replace("_", "");
	iDay = dt.substr(dt.lastIndexOf("_") + 1);

	doSubmit();
}

function getMonthLength(y, m){
	if (m == 0 | m == 2 | m == 4 | m == 6 | m == 7 | m == 9 | m == 11){
		return(31);
	}else{
		if (m == 3 | m == 5 | m == 8 | m == 10){
			return(30);
		}else{
			if (m == 1){
				if (y % 4 == 0){
					return(29);
				}else{
					return(28);
				}
			}		
		}
	}
}

function doSubmit(){
	var sDate, sYear, sMonth, sDay;
	
	if(iYear.toString().length < 3){
	    sYear = 2000 + Math.abs(iYear);
	}else{
	    sYear = iYear.toString();
	}
	
	sMonth = Math.abs(iMonth) + 1;
	if(sMonth.toString().length == 1){
	    sMonth = "0" + sMonth;
    }
    
    if(iDay.toString().length == 1){
        sDay = "0" + iDay;
	}else{
	    sDay = iDay;
	}
	
	sDate = sFormat;
	sDate = sDate.replace("dd", sDay);
	sDate = sDate.replace("mm", sMonth);
	
	if(sFormat.indexOf("yyyy") != -1){
	    sDate = sDate.replace("yyyy", sYear);
	}else{
	    sDate = sDate.replace("yy", sYear.substring(2));
	}

	
	document.getElementById(sReturnID1).value = sDate;
	
	if (document.getElementById(sReturnID1).fireEvent) // IE 5.5(WIN)
    {
        document.getElementById(sReturnID1).fireEvent("onchange");
    }
    else // Mozilla, Safari...
    {
        var evt = document.createEvent("HTMLEvents");
        evt.initEvent("change", true, true);
        document.getElementById(sReturnID1).dispatchEvent(evt);
    }

	document.getElementById(sReturnID1).style.borderColor = "";

    if(sReturnID2 != null){
        document.getElementById(sReturnID2).value = sDate;
        document.getElementById(sReturnID2).style.borderColor = "";
    }
    
    document.getElementById("cal").style.visibility = "hidden";
    doShowHiddenControls();
    
    document.getElementById(sReturnID1).focus();
}

function doCancel(){
	document.getElementById("cal").style.visibility = "hidden";
	doShowHiddenControls();
}

function doShowHiddenControls(){
    if(cHiddenControls != null)
    {
        var i;
        for(i = 0; i < cHiddenControls.length; i ++){
            document.getElementById(cHiddenControls[i]).style.visibility = "visible";
        }
        cHiddenControls = null;
    }
}