//////////////////////////////////////////////////////////////////////////////////////////////////////////
//strPath variable is retrieved from Global.master.. Used to locate Images (Next Month / Prev. Month etc)
//strDateFormat variable is retrieved from Global.master.. Used to get the DateFormat specified in the WebConfig
var strPath = "/"; ///Modified By Abhijit Original value was "";
var strDateFormat = "DD/MM/YYYY";
var sDateFormat = strDateFormat;
var aDateFormat = new Array();
var aFutureDate, aPrevDate;
var aFutureCal;
aDateFormat = sDateFormat.split('/');

var sCalDivId = "";

function CalendarControl() {
    var calendarId = sCalDivId;
    //calendarId = 'CalendarControl';// Nilesh

    var currentYear = 0;
    var currentMonth = 0;
    var currentDay = 0;

    var selectedYear = 0;
    var selectedMonth = 0;
    var selectedDay = 0;

    var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var dateField = null;

    function getProperty(p_property) {
        var p_elm = calendarId;
        var elm = null;

        if (typeof (p_elm) == "object") {
            elm = p_elm;
        }
        else {
            elm = document.getElementById(p_elm);
        }
        if (elm != null) {
            if (elm.style) {
                elm = elm.style;
                if (elm[p_property]) {
                    return elm[p_property];
                } else {
                    return null;
                }
            } else {
                return null;
            }
        }
    }

    function setElementProperty(p_property, p_value, p_elmId) {
        var p_elm = p_elmId;
        var elm = null;

        if (typeof (p_elm) == "object") {
            elm = p_elm;
        } else {
            elm = document.getElementById(p_elm);
        }
        if ((elm != null) && (elm.style != null)) {
            elm = elm.style;
            elm[p_property] = p_value;
        }
    }

    function setProperty(p_property, p_value) {
        setElementProperty(p_property, p_value, calendarId);
    }

    function getDaysInMonth(year, month) {
        return [31, ((!(year % 4) && ((year % 100) || !(year % 400))) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1];
    }

    function getDayOfWeek(year, month, day) {
        var date = new Date(year, month - 1, day)
        return date.getDay();
    }

    this.clearDate = clearDate;
    function clearDate() {
        dateField.value = '';
        hide();
    }

    this.setDate = setDate;
    function setDate(year, month, day) {
        if (dateField) {
            if (month < 10) {
                month = "0" + month;
            }
            if (day < 10) {
                day = "0" + day;
            }

            // Date Format Starts
            // Commented By Nilesh - To set date according to format defined  
            //var dateString = day+"/"+month+"/"+year;   
            var dateString = "";

            var sTempYear = year;
            if (sDateFormat != "") {
                for (var i = 0; i < aDateFormat.length; i++) {
                    switch (aDateFormat[i].toString().charAt(0).toUpperCase()) {
                        case "D":
                            dateString += day + "/";
                            break;
                        case "M":
                            dateString += month + "/";
                            break;
                        case "Y":
                            if (aDateFormat[i].length > 2) {
                                dateString += sTempYear + "/";
                            }
                            else {
                                dateString += sTempYear.toString().slice(2, 4) + "/";
                            }
                            break;
                    }
                }
                dateString = dateString.substring(0, dateString.length - 1);
            }
            else
                dateString = day + "/" + month + "/" + year;

            // Date Format Ends  
            /*can chk for future date*/
            //      if(aFutureDate)
            //        {
            //             dateField.value = dateString;
            //          //document.getElementById(dateField).value = dateString;      
            //          hide();
            //        }
            //      else
            {
                if (!compareWithTodaysDate(dateString)) {
                    if (aFutureCal) {
                        alert("You can't select previous date");
                    }
                    else
                        alert("You can't select future date");
                }
                else {
                    dateField.value = dateString;
                    hide();
                }
            }
        }
        return;
    }

    this.gotoTodaysDate = gotoTodaysDate;
    function gotoTodaysDate() {
        currentDay = getCurrentDay();
        currentMonth = getCurrentMonth();
        currentYear = getCurrentYear();

        calendar = document.getElementById(calendarId);
        calendar.innerHTML = calendarDrawTable();

    }


    this.changeDay = changeDay;
    function changeDay(change) {
        currentDay = change;
        if (currentDay > getDaysInMonth(currentYear, currentMonth)) {
            currentDay = 1;
            currentMonth++;
        }

        calendar = document.getElementById(calendarId);
        calendar.innerHTML = calendarDrawTable();
    }


    this.changeMonth = changeMonth;
    function changeMonth(change) {

        if (change == -1) {
            currentMonth = parseInt(currentMonth) + parseInt(change);
        }
        else if (change == 0) {
            currentMonth++;
        }
        else {
            currentMonth = change;
        }
        currentDay = 0;
        if (currentMonth > 12) {
            currentYear++;
            if (currentYear > (parseInt(getCurrentYear()) + 10)) {
                currentYear--;
                currentMonth--;

                return false;
            }
            else {
                currentMonth = 1;
            }
        }
        else if (currentMonth < 1) {
            currentYear--;
            if (currentYear < 1970) {
                currentYear++;
                return false;
            }
            else {
                currentMonth = 12;
            }
        }

        //    if((currentYear < 1970) || (currentYear > (parseInt(getCurrentYear()) + 10)))
        //       return false;

        calendar = document.getElementById(calendarId);
        calendar.innerHTML = calendarDrawTable();
    }


    this.changeYear = changeYear;
    function changeYear(change) {

        var constCurrYear = currentYear;
        if (change == -1) {
            currentYear = parseInt(currentYear) + parseInt(change);
        }
        else if (change == 0) {
            currentYear++;
        }
        else {
            currentYear = change;
        }

        //    if(currentYear < 1970 || 
        //         currentYear > (getCurrentYear() + 10))
        //    {
        //        currentYear=constCurrYear;
        //       return false;    
        //    }
        if (currentYear < 1970) {
            currentYear = constCurrYear;
            return false;
        }

        if (currentYear > parseInt(getCurrentYear()) + 10) {
            currentYear = constCurrYear;
            return false;
        }

        currentDay = 0;
        calendar = document.getElementById(calendarId);
        calendar.innerHTML = calendarDrawTable();
    }

    function getCurrentYear() {
        var year = new Date().getFullYear();
        if (year < 1970) year += 1970;
        return year;
    }

    function getCurrentMonth() {
        return new Date().getMonth() + 1;
    }

    function getCurrentDay() {
        return new Date().getDate();
    }

    function calendarDrawTable() {

        var dayOfMonth = 1;
        var validDay = 0;
        var startDayOfWeek = getDayOfWeek(currentYear, currentMonth, dayOfMonth);
        var daysInMonth = getDaysInMonth(currentYear, currentMonth);
        var css_class = null; //CSS class for each day    
        var sCurrDay = getCurrentDay();
        var sCurrMonth = getCurrentMonth();
        var sCurrYear = getCurrentYear();

        var table = "";
        table = table + "<iframe id='CalendarControlIFrame' src='' frameBorder='0' scrolling='no' style='position:absolute; width:180px; z-index:99;'></iframe>";
        table = table + "<div class='cal_control' >";

        table = table + "<table cellspacing='0' cellpadding='1' border='0' width='100%' >";

        table = table + "<tr class='c_header'>";
        table = table + "<td colspan='7'></td></tr>";

        table = table + "<tr class='c_header'>";
        table = table + "<td colspan='7'><div style='text-align:center'>";
        //    table = table + "<select name='ddlCalDay' onchange='javascript:changeCalendarControlDay(ddlCalDay.value);'>";
        //     
        //     for(var iDays=1; iDays<=daysInMonth; iDays++)
        //     {
        //        if(iDays == currentDay)
        //            table = table + "<option value='" + iDays + "' selected='selected'>"  + iDays + "</option>";
        //        else
        //             table = table + "<option value='" + iDays + "'>" + iDays + "</option>";
        //     
        //     }
        //    table = table + "</select>&nbsp;";
        table = table + "<select name='ddlCalMonth" + calendarId + "' style='width:45%' onchange='javascript:changeCalendarControlMonth(ddlCalMonth" + calendarId + ".value);'>";

        for (var iMonths = 1; iMonths <= 12; iMonths++) {
            if (iMonths == currentMonth)
                table = table + "<option value='" + iMonths + "' selected='selected'>" + months[iMonths - 1] + "</option>";
            else
                table = table + "<option value='" + iMonths + "' >" + months[iMonths - 1] + "</option>";
        }
        table = table + "</select>&nbsp;";
        table = table + "&nbsp;<select name='ddlCalYear" + calendarId + "' style='width:45%' onchange='javascript:changeCalendarControlYear(ddlCalYear" + calendarId + ".value);'>";
        for (var iYear = (sCurrYear + 1); iYear >= 1970; iYear--) {
            if (currentYear == iYear)
                table = table + "<option selected='selected' value='" + currentYear + "'>" + currentYear + "</option>";
            else
                table = table + "<option value='" + iYear + "'>" + iYear + "</option>";
        }

        table = table + "</select></div></td>";
        table = table + "</tr>";

        table = table + "<tr class='c_header' >";
        table = table + "<td height='18' align='center'><a href='javascript:changeCalendarControlYear(-1);'><img src='" + strPath + "Images/prev_y.gif' alt='Prev. Year' border='0' /></a></td>";
        table = table + "<td align='center'><a href='javascript:changeCalendarControlMonth(-1);'><img src='" + strPath + "Images/prev_m.gif' alt='Prev. Month' border='0' /></a></td>";
        table = table + "<td colspan='3' class='c_header' align='center'>" + months[currentMonth - 1] + "&nbsp;" + currentYear + "</td>";
        table = table + "<td align='center'><a href='javascript:changeCalendarControlMonth(0);'><img src='" + strPath + "Images/next_m.gif' alt='Next Month' border='0' /></a></td>";
        table = table + "<td align='center'><a href='javascript:changeCalendarControlYear(0);'><img src='" + strPath + "Images/next_y.gif' alt='Next Year' border='0' /></a></td>";
        table = table + "</tr>";

        table = table + "<tr class='c_days'>";
        table = table + "<td width='22' height='18' align='center'>S</td>";
        table = table + "<td width='22' align='center'>M</td>";
        table = table + "<td width='22' align='center'>T</td>";
        table = table + "<td width='22' align='center'>W</td>";
        table = table + "<td width='22' align='center'>T</td>";
        table = table + "<td width='22' align='center'>F</td>";
        table = table + "<td width='22' align='center'>S</td>";
        table = table + "</tr>";
        table = table + "</table>";

        table = table + "<table border='0' cellspacing='1' cellpadding='0' width='100%' class='c_datetable'>";
        for (var week = 0; week < 6; week++) {
            table = table + "<tr class='c_daterow'>";
            for (var dayOfWeek = 0; dayOfWeek < 7; dayOfWeek++) {
                if (week == 0 && startDayOfWeek == dayOfWeek) {
                    validDay = 1;
                }
                else if (validDay == 1 && dayOfMonth > daysInMonth) {
                    validDay = 0;
                }

                if (validDay) {

                    if ((sCurrDay == dayOfMonth) && (currentYear == sCurrYear) && (currentMonth == sCurrMonth)) {
                        css_class = 'current';
                    }
                    else if (dayOfMonth == selectedDay && currentYear == selectedYear && currentMonth == selectedMonth) {
                        css_class = 'selected';
                    }
                    else if (dayOfWeek == 0 || dayOfWeek == 6) {
                        css_class = 'weekend';
                    }
                    else {
                        css_class = 'weekday';
                    }

                    table = table + "<td height='18' align='center' class='" + css_class + "'><a href=\"javascript:setCalendarControlDate(" + currentYear + "," + currentMonth + "," + dayOfMonth + ")\">" + dayOfMonth + "</a></td>";
                    dayOfMonth++;
                }
                else {
                    table = table + "<td height='18' align='center' class='nodate'>&nbsp;</td>";
                }
            }
            table = table + "</tr>";
        }
        table = table + "</table>";

        table = table + "<table width='100%' border='0' cellspacing='0' cellpadding='0'>";
        table = table + "<tr class='c_footer'>";
        table = table + "<td align='center'><a href='javascript:clearCalendarControl();'>Clear</a>";
        gotoTodaysDate
        table = table + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"javascript:gotoTodaysDate();\">" + sCurrDay + "/" + sCurrMonth + "/" + sCurrYear + "</a>" +
            "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:hideCalendarControl();'>Close</a> </td>";


        //    table = table + "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href=\"javascript:setCalendarControlDate(" + sCurrYear +"," + sCurrMonth + "," + sCurrDay + ")\">"+ sCurrDay + "/" + sCurrMonth + "/" + sCurrYear + "</a>" +
        //            "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href='javascript:hideCalendarControl();'>Close</a> </td>";
        //    
        //table = table + "<td align='center'><a href='javascript:clearCalendarControl();'>Clear</a></td>";
        //table = table + "<td align='center'>" + sCurrDay + "/" + sCurrMonth + "/" + sCurrYear+ "</td>";
        //table = table + "<td align='center'><a href='javascript:hideCalendarControl();'>Close</a></td>";
        table = table + "</tr>";
        table = table + "</table>";

        table = table + "</div>";

        return table;
    }

    this.show = show;
    function show(field) {
        can_hide = 0;

        // If the calendar is visible and associated with
        // this field do not do anything.
        if (dateField == field) {
            return;
        }
        else {
            dateField = document.getElementById(field);
        }

        if (dateField) {
            try {
                var dateString = new String(dateField.value);
                var dateParts = dateString.split("/");
                var sLenSelectedYear = "";
                //Date selection starts
                //Commented By Nilesh - To Select dates according to Format Defined
                //selectedDay = parseInt(dateParts[0],10);
                //selectedMonth = parseInt(dateParts[1],10);
                //selectedYear = parseInt(dateParts[2],10);
                if (sDateFormat != "") {
                    for (var i = 0; i < aDateFormat.length; i++) {
                        switch (aDateFormat[i].toString().charAt(0).toUpperCase()) {
                            case "D":
                                selectedDay = parseInt(dateParts[i], 10);
                                break;
                            case "M":
                                selectedMonth = parseInt(dateParts[i], 10);
                                break;
                            case "Y":
                                selectedYear = parseInt(dateParts[i], 10);
                                sLenSelectedYear = selectedYear;

                                if (sLenSelectedYear.toString().length == 1)
                                    selectedYear = parseInt("200" + selectedYear, 10);
                                else if (sLenSelectedYear.toString().length == 2)
                                    selectedYear = parseInt("20" + selectedYear, 10);
                                break;
                        }
                    }
                    dateString = dateString.substring(0, dateString.length - 1);
                }
                else {
                    selectedDay = parseInt(dateParts[0], 10);
                    selectedMonth = parseInt(dateParts[1], 10);
                    selectedYear = parseInt(dateParts[2], 10);
                }
                // Date selection ends

            }
            catch (e) { }
        }

        if (!(selectedYear && selectedMonth && selectedDay)) {
            selectedMonth = getCurrentMonth();
            selectedDay = getCurrentDay();
            selectedYear = getCurrentYear();
        }

        currentMonth = selectedMonth;
        currentDay = selectedDay;
        currentYear = selectedYear;

        if (document.getElementById) {
            calendarId = sCalDivId;
            calendar = document.getElementById(calendarId);
            calendar.innerHTML = calendarDrawTable(currentYear, currentMonth);

            setProperty('display', 'block');
        }

    }

    this.hide = hide;
    function hide() {
        if (dateField) {
            setProperty('display', 'none');
            setElementProperty('display', 'none', 'CalendarControlIFrame');
            dateField = null;
        }
    }

    this.visible = visible;
    function visible() {
        return dateField
    }

    this.can_hide = can_hide;
    var can_hide = 0;
}

var calendarControl = new CalendarControl();

function showCalendarControl(textField, DivId, FutureDate) {
    //aFutureDate=FutureDate;
    aFutureDate = FutureDate;
    aFutureCal = false;
    sCalDivId = DivId;
    hideCalendarControl();
    calendarControl.show(textField);
    document.getElementById(DivId).focus(); // Nilesh
    return false;
}

function clearCalendarControl() {

    calendarControl.clearDate();
}

function hideCalendarControl() {
    if (calendarControl.visible()) {
        calendarControl.hide();
    }
}

function setCalendarControlDate(year, month, day) {
    calendarControl.setDate(year, month, day);
}

function changeCalendarControlYear(change) {
    calendarControl.changeYear(change);
}

function changeCalendarControlMonth(change) {
    calendarControl.changeMonth(change);
}

function changeCalendarControlDay(change) {
    calendarControl.changeDay(change);
}

function gotoTodaysDate() {
    calendarControl.gotoTodaysDate();
}

function compareWithTodaysDate(selecteddate) {
    var dt = new Date();

    var x1 = dt.getDate() + "/" + (dt.getMonth() + 1) + "/" + dt.getFullYear();
    var x2 = selecteddate;
    var ssdate = new String(x1);
    var ssdatee = new String(x2);

    var SDate = new Array(3);
    SDate = ssdate.split("/");
    var ssdate1 = new String(SDate[1] + "/" + SDate[0] + "/" + SDate[2]);

    var SDate1 = new Array(3);
    SDate1 = ssdatee.split("/");
    var ssdate2 = new String(SDate1[1] + "/" + SDate1[0] + "/" + SDate1[2]);

    var one_day = 1000 * 60 * 60 * 24;

    var objDate1 = new Date("" + ssdate1);
    var objDate2 = new Date("" + ssdate2);
    var diff = (objDate2.getTime() - objDate1.getTime()) / one_day;
    if (parseInt(SDate1[2] % 4) > 0) {
        diff = parseInt(diff) + 1;
    }

    if (aFutureDate) {
        if (diff < 0) {
            return false;
        }
    }
    else {
        if (diff > 1) {
            return false;
        }
    }
    return true;
}
    
    
