﻿function initCalendar(ctlDateDisplayA,
                      ctlDateYYYYMMDDA,
                      dtDateStartA,
                      dtDateEndA,
                      dtInitialA,
                      aiEnabledDaysA,
                      sDisplayDateFormatA,
                      sNameParentA,
                      bHideOnDateSelectA) 
{
    var cal = new Calendar(0, dtInitialA, onSelect, onClose);

    cal.ctlDateDisplay = ctlDateDisplayA;
    cal.ctlDateYYYYMMDD = ctlDateYYYYMMDDA;
    cal.dtDateStart = dtDateStartA;
    cal.dtDateEnd = dtDateEndA;
    cal.dtInitial = dtInitialA;
    cal.aiEnabledDays = aiEnabledDaysA;
    cal.sNameParent = sNameParentA;
    cal.bHideOnDateSelect = bHideOnDateSelectA;
    
    if (sDisplayDateFormatA == '')
        sDisplayDateFormatA = '%a %d %b %Y';

    cal.setDateFormat(sDisplayDateFormatA);
    cal.weekNumbers = false;
    cal.showsTime = false;
    cal.setRange(dtDateStartA.getFullYear(), dtDateEndA.getFullYear());
    cal.setDateStatusHandler(dateStatusHandler);

    if (sNameParentA == '') 
    {
        cal.create();
    }
    else {
        var ctlParent = document.getElementById(sNameParentA);

        cal.create(ctlParent);

        cal.show();
    }

    return cal;
}

function onShowCalendar(ctlButtonA, calA) {

    if (ctlButtonA != null)
        calA.showAtElement(ctlButtonA, 'bR');
}

function dateStatusHandler(calA, dateA, y, m, d) {

    if ((dateA >= calA.dtDateStart) && (dateA <= calA.dtDateEnd))
        return (calA.aiEnabledDays[dateA.getDay()] == 0);
    else
        return true;
}

function Date_toYMD(dtA) {

    var year = String(dtA.getFullYear());
    
    var month = String(dtA.getMonth() + 1);

    if (month.length == 1) {
        month = "0" + month;
    }

    var day = String(dtA.getDate());

    if (day.length == 1) {
        day = "0" + day;
    }

    return year + "-" + month + "-" + day;
}

function onSelect(calA, dateA) {

    if (calA.dateClicked || (calA.sNameParent != '')) 
    {
        var ctl = document.getElementById(calA.ctlDateDisplay);

        if (ctl != null) 
        {
            if (ctl.nodeName == 'INPUT')
                ctl.value = dateA;  
            else if (ctl.nodeName == 'TD')
                ctl.innerHTML = dateA;
        }
        
        if ((calA.ctlDateYYYYMMDD != '') && (calA.ctlDateYYYYMMDD != calA.ctlDateDisplay)) 
        {
            ctl = document.getElementById(calA.ctlDateYYYYMMDD);

            if (ctl != null) 
            {
                if (ctl.nodeName == 'INPUT')
                    ctl.value = Date_toYMD(calA.date);
                else if (ctl.nodeName == 'TD')
                    ctl.innerHTML = Date_toYMD(calA.date);

                ctl.click();
            }
        }

        if ((calA.sNameParent == '') && (calA.bHideOnDateSelect == true))
            calA.callCloseHandler();
    }
};

function onClose(calA) {
    if (calA.bHideOnDateSelect == true)
        calA.hide();
    // or calendar.destroy();

    if (calA.myCloseHandler) {
        calA.myCloseHandler();
    }
};

function addMyCloseHandler(calA, myCloseHandlerA) {

    calA.myCloseHandler = myCloseHandlerA;
}
