var arrMonthNames;
var arrMonthDays;

var intDisplayedMonth;
var intDisplayedYear;
var firstEvent = true;
var firstCalendarsMonth;
var firstCalendarsYear;
var firstCalendersDay;
var secondCalendarsMonth;
var secondCalendarsYear;
var secondCalendersDay;

function loadCalendar(strMonth01, strMonth02, strMonth03, strMonth04, strMonth05, strMonth06, strMonth07, strMonth08, strMonth09, strMonth10, strMonth11, strMonth12) {
    arrMonthNames = [strMonth01, strMonth02, strMonth03, strMonth04, strMonth05, strMonth06, strMonth07, strMonth08, strMonth09, strMonth10, strMonth11, strMonth12];
}
function setMinimumDate(strRefMasterDay, strRefMasterMonthAndYear, strRefSlaveMinimumDay, strRefSlaveMinimumMonth, strRefSlaveMinimumYear) {
    document.getElementById(strRefSlaveMinimumDay).value = document.getElementById(strRefMasterDay).value;
    document.getElementById(strRefSlaveMinimumMonth).value = document.getElementById(strRefMasterMonthAndYear).value.split('/')[0];
    document.getElementById(strRefSlaveMinimumYear).value = document.getElementById(strRefMasterMonthAndYear).value.split('/')[1];
}
function changeMonth(intCalendarNumber, intChange, strRefDisplayedMonth, strRefDisplayedYear, strRefMinimumDay, strRefMinimumMonth, strRefMinimumYear, strRefMaximumDay, strRefMaximumMonth, strRefMaximumYear, strRefDay, strRefMonthAndYear, strRefMonthName, strRefDayLabel01, strRefDayLabel02, strRefDayLabel03, strRefDayLabel04, strRefDayLabel05, strRefDayLabel06, strRefDayLabel07, strRefDayLabel08, strRefDayLabel09, strRefDayLabel10, strRefDayLabel11, strRefDayLabel12, strRefDayLabel13, strRefDayLabel14, strRefDayLabel15, strRefDayLabel16, strRefDayLabel17, strRefDayLabel18, strRefDayLabel19, strRefDayLabel20, strRefDayLabel21, strRefDayLabel22, strRefDayLabel23, strRefDayLabel24, strRefDayLabel25, strRefDayLabel26, strRefDayLabel27, strRefDayLabel28, strRefDayLabel29, strRefDayLabel30, strRefDayLabel31, strRefDayLabel32, strRefDayLabel33, strRefDayLabel34, strRefDayLabel35, strRefDayLabel36, strRefDayLabel37, strRefDayLabel38, strRefDayLabel39, strRefDayLabel40, strRefDayLabel41, strRefDayLabel42, strRefWeekLabel1, strRefWeekLabel2, strRefWeekLabel3, strRefWeekLabel4, strRefWeekLabel5, strRefWeekLabel6) {

    var intNewMonth = parseInt(document.getElementById(strRefDisplayedMonth).value) + intChange;
    var intNewYear = parseInt(document.getElementById(strRefDisplayedYear).value)

    if (intNewMonth > 12) {
        intNewMonth = 1;
        intNewYear = intNewYear + 1;
    }
    else if (intNewMonth < 1) {
        intNewMonth = 12;
        intNewYear = intNewYear - 1;
    }

    document.getElementById(strRefDisplayedMonth).value = intNewMonth;
    document.getElementById(strRefDisplayedYear).value = intNewYear;

    updateCalendar(intCalendarNumber, strRefDisplayedMonth, strRefDisplayedYear, strRefMinimumDay, strRefMinimumMonth, strRefMinimumYear, strRefMaximumDay, strRefMaximumMonth, strRefMaximumYear, strRefDay, strRefMonthAndYear, strRefMonthName, strRefDayLabel01, strRefDayLabel02, strRefDayLabel03, strRefDayLabel04, strRefDayLabel05, strRefDayLabel06, strRefDayLabel07, strRefDayLabel08, strRefDayLabel09, strRefDayLabel10, strRefDayLabel11, strRefDayLabel12, strRefDayLabel13, strRefDayLabel14, strRefDayLabel15, strRefDayLabel16, strRefDayLabel17, strRefDayLabel18, strRefDayLabel19, strRefDayLabel20, strRefDayLabel21, strRefDayLabel22, strRefDayLabel23, strRefDayLabel24, strRefDayLabel25, strRefDayLabel26, strRefDayLabel27, strRefDayLabel28, strRefDayLabel29, strRefDayLabel30, strRefDayLabel31, strRefDayLabel32, strRefDayLabel33, strRefDayLabel34, strRefDayLabel35, strRefDayLabel36, strRefDayLabel37, strRefDayLabel38, strRefDayLabel39, strRefDayLabel40, strRefDayLabel41, strRefDayLabel42, strRefWeekLabel1, strRefWeekLabel2, strRefWeekLabel3, strRefWeekLabel4, strRefWeekLabel5, strRefWeekLabel6)
}
function setMonth(intCalendarNumber, strRefDisplayedMonth, strRefDisplayedYear, strRefMinimumDay, strRefMinimumMonth, strRefMinimumYear, strRefMaximumDay, strRefMaximumMonth, strRefMaximumYear, strRefDay, strRefMonthAndYear, strRefMonthName, strRefDayLabel01, strRefDayLabel02, strRefDayLabel03, strRefDayLabel04, strRefDayLabel05, strRefDayLabel06, strRefDayLabel07, strRefDayLabel08, strRefDayLabel09, strRefDayLabel10, strRefDayLabel11, strRefDayLabel12, strRefDayLabel13, strRefDayLabel14, strRefDayLabel15, strRefDayLabel16, strRefDayLabel17, strRefDayLabel18, strRefDayLabel19, strRefDayLabel20, strRefDayLabel21, strRefDayLabel22, strRefDayLabel23, strRefDayLabel24, strRefDayLabel25, strRefDayLabel26, strRefDayLabel27, strRefDayLabel28, strRefDayLabel29, strRefDayLabel30, strRefDayLabel31, strRefDayLabel32, strRefDayLabel33, strRefDayLabel34, strRefDayLabel35, strRefDayLabel36, strRefDayLabel37, strRefDayLabel38, strRefDayLabel39, strRefDayLabel40, strRefDayLabel41, strRefDayLabel42, strRefWeekLabel1, strRefWeekLabel2, strRefWeekLabel3, strRefWeekLabel4, strRefWeekLabel5, strRefWeekLabel6) {
   
    document.getElementById(strRefDisplayedMonth).value = parseInt(document.getElementById(strRefMonthAndYear).value.split('/')[0]);
    document.getElementById(strRefDisplayedYear).value = parseInt(document.getElementById(strRefMonthAndYear).value.split('/')[1]);

    updateCalendar(intCalendarNumber, strRefDisplayedMonth, strRefDisplayedYear, strRefMinimumDay, strRefMinimumMonth, strRefMinimumYear, strRefMaximumDay, strRefMaximumMonth, strRefMaximumYear, strRefDay, strRefMonthAndYear, strRefMonthName, strRefDayLabel01, strRefDayLabel02, strRefDayLabel03, strRefDayLabel04, strRefDayLabel05, strRefDayLabel06, strRefDayLabel07, strRefDayLabel08, strRefDayLabel09, strRefDayLabel10, strRefDayLabel11, strRefDayLabel12, strRefDayLabel13, strRefDayLabel14, strRefDayLabel15, strRefDayLabel16, strRefDayLabel17, strRefDayLabel18, strRefDayLabel19, strRefDayLabel20, strRefDayLabel21, strRefDayLabel22, strRefDayLabel23, strRefDayLabel24, strRefDayLabel25, strRefDayLabel26, strRefDayLabel27, strRefDayLabel28, strRefDayLabel29, strRefDayLabel30, strRefDayLabel31, strRefDayLabel32, strRefDayLabel33, strRefDayLabel34, strRefDayLabel35, strRefDayLabel36, strRefDayLabel37, strRefDayLabel38, strRefDayLabel39, strRefDayLabel40, strRefDayLabel41, strRefDayLabel42, strRefWeekLabel1, strRefWeekLabel2, strRefWeekLabel3, strRefWeekLabel4, strRefWeekLabel5, strRefWeekLabel6)

}
function setSelectedDate(strRefNewDay, strRefDisplayedMonth, strRefDisplayedYear, strRefDay, strRefMonthAndYear) {

    if (isNum(document.getElementById(strRefNewDay).innerHTML)) {
        document.getElementById(strRefDay).value = document.getElementById(strRefNewDay).innerHTML;
        document.getElementById(strRefMonthAndYear).value = document.getElementById(strRefDisplayedMonth).value + "/" + document.getElementById(strRefDisplayedYear).value;
    }
}

function updateCalendar(intCalendarNumber, strRefDisplayedMonth, strRefDisplayedYear, strRefMinimumDay, strRefMinimumMonth, strRefMinimumYear, strRefMaximumDay, strRefMaximumMonth, strRefMaximumYear, strRefDay, strRefMonthAndYear, strRefMonthName, strRefDayLabel01, strRefDayLabel02, strRefDayLabel03, strRefDayLabel04, strRefDayLabel05, strRefDayLabel06, strRefDayLabel07, strRefDayLabel08, strRefDayLabel09, strRefDayLabel10, strRefDayLabel11, strRefDayLabel12, strRefDayLabel13, strRefDayLabel14, strRefDayLabel15, strRefDayLabel16, strRefDayLabel17, strRefDayLabel18, strRefDayLabel19, strRefDayLabel20, strRefDayLabel21, strRefDayLabel22, strRefDayLabel23, strRefDayLabel24, strRefDayLabel25, strRefDayLabel26, strRefDayLabel27, strRefDayLabel28, strRefDayLabel29, strRefDayLabel30, strRefDayLabel31, strRefDayLabel32, strRefDayLabel33, strRefDayLabel34, strRefDayLabel35, strRefDayLabel36, strRefDayLabel37, strRefDayLabel38, strRefDayLabel39, strRefDayLabel40, strRefDayLabel41, strRefDayLabel42, strRefWeekLabel1, strRefWeekLabel2, strRefWeekLabel3, strRefWeekLabel4, strRefWeekLabel5, strRefWeekLabel6) {

    var intMinimumDay = parseInt(document.getElementById(strRefMinimumDay).value);
    var intMinimumMonth = parseInt(document.getElementById(strRefMinimumMonth).value);
    var intMinimumYear = parseInt(document.getElementById(strRefMinimumYear).value);

    var intMaximumDay = parseInt(document.getElementById(strRefMaximumDay).value);
    var intMaximumMonth = parseInt(document.getElementById(strRefMaximumMonth).value);
    var intMaximumYear = parseInt(document.getElementById(strRefMaximumYear).value);

    var intSelectedDay = parseInt(document.getElementById(strRefDay).value);
    var intSelectedMonth = parseInt(document.getElementById(strRefMonthAndYear).value.split('/')[0]);
    var intSelectedYear = parseInt(document.getElementById(strRefMonthAndYear).value.split('/')[1]);

    var objMinimumDate = new Date(intMinimumYear, intMinimumMonth - 1, intMinimumDay)
    var objMaximumDate = new Date(intMaximumYear, intMaximumMonth - 1, intMaximumDay)
    var objSelectedDate = new Date(intSelectedYear, intSelectedMonth - 1, intSelectedDay)

    if (objSelectedDate < objMinimumDate) {
        intSelectedDay = intMinimumDay;
        intSelectedMonth = intMinimumMonth;
        intSelectedYear = intMinimumYear;
        setDropDown(strRefDay, strRefMonthAndYear, intSelectedDay, intSelectedMonth, intSelectedYear)
    }
    else if (objSelectedDate > objMaximumDate) {
        intSelectedDay = intMaximumDay;
        intSelectedMonth = intMaximumMonth;
        intSelectedYear = intMaximumYear;
        setDropDown(strRefDay, strRefMonthAndYear, intSelectedDay, intSelectedMonth, intSelectedYear)
    }
    if (!isNum(document.getElementById(strRefDisplayedMonth).value)) {
        document.getElementById(strRefDisplayedMonth).value = intSelectedMonth;
    }

    if (!isNum(document.getElementById(strRefDisplayedYear).value)) {
        document.getElementById(strRefDisplayedYear).value = intSelectedYear;
    }

    if (isLeapYear(intSelectedYear)) {
        arrMonthDays = [31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    } else {
        arrMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
    }
    //arrMonthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];

    //setting the main calendar
    //if (strRefDisplayedMonth.toString().substr(18, 5) == "ctl00") {
    if (intCalendarNumber == 1) {
            intDisplayedMonth = parseInt(document.getElementById(strRefDisplayedMonth).value);
            intDisplayedYear = parseInt(document.getElementById(strRefDisplayedYear).value);
            firstCalendarsMonth = intDisplayedMonth;
            firstCalendarsYear = intDisplayedYear;
            firstCalendersDay = intSelectedDay;
    }
    
    //setting the child calender
    //if (strRefDisplayedMonth.toString().substr(18, 5) == "ctl01") {
    if (intCalendarNumber == 2) {
        // setting it the first time
        if (firstEvent == true) {
            intDisplayedMonth = parseInt(document.getElementById(strRefDisplayedMonth).value);
            intDisplayedYear = parseInt(document.getElementById(strRefDisplayedYear).value);
            secondCalendarsMonth = intDisplayedMonth;
            secondCalendarsYear = intDisplayedYear;
            secondCalendersDay = intSelectedDay;
            firstEvent = false;
        }
        else {
            if ((firstCalendarsMonth > secondCalendarsMonth && firstCalendarsYear >= secondCalendarsYear) || firstCalendarsYear > secondCalendarsYear) {
                document.getElementById(strRefDisplayedMonth).value = firstCalendarsMonth; 
                document.getElementById(strRefDisplayedYear).value = firstCalendarsYear;
                intDisplayedMonth = parseInt(document.getElementById(strRefDisplayedMonth).value);
                intDisplayedYear = parseInt(document.getElementById(strRefDisplayedYear).value);
                secondCalendarsMonth = intDisplayedMonth;
                secondCalendarsYear = intDisplayedYear;
                
            }
            else {
                intDisplayedMonth = parseInt(document.getElementById(strRefDisplayedMonth).value);
                intDisplayedYear = parseInt(document.getElementById(strRefDisplayedYear).value);
                secondCalendarsMonth = intDisplayedMonth;
                secondCalendarsYear = intDisplayedYear;
                secondCalendersDay = intSelectedDay;
            }
        }
        if(intSelectedDay < secondCalendersDay){
            intSelectedDay = secondCalendersDay;
            setDropDown(strRefDay, strRefMonthAndYear, intSelectedDay, intSelectedMonth, intSelectedYear)
        }
    }

    var dayLabels = new Array(42);

    dayLabels[0] = document.getElementById(strRefDayLabel01);
    dayLabels[1] = document.getElementById(strRefDayLabel02);
    dayLabels[2] = document.getElementById(strRefDayLabel03);
    dayLabels[3] = document.getElementById(strRefDayLabel04);
    dayLabels[4] = document.getElementById(strRefDayLabel05);
    dayLabels[5] = document.getElementById(strRefDayLabel06);
    dayLabels[6] = document.getElementById(strRefDayLabel07);
    dayLabels[7] = document.getElementById(strRefDayLabel08);
    dayLabels[8] = document.getElementById(strRefDayLabel09);
    dayLabels[9] = document.getElementById(strRefDayLabel10);
    dayLabels[10] = document.getElementById(strRefDayLabel11);
    dayLabels[11] = document.getElementById(strRefDayLabel12);
    dayLabels[12] = document.getElementById(strRefDayLabel13);
    dayLabels[13] = document.getElementById(strRefDayLabel14);
    dayLabels[14] = document.getElementById(strRefDayLabel15);
    dayLabels[15] = document.getElementById(strRefDayLabel16);
    dayLabels[16] = document.getElementById(strRefDayLabel17);
    dayLabels[17] = document.getElementById(strRefDayLabel18);
    dayLabels[18] = document.getElementById(strRefDayLabel19);
    dayLabels[19] = document.getElementById(strRefDayLabel20);
    dayLabels[20] = document.getElementById(strRefDayLabel21);
    dayLabels[21] = document.getElementById(strRefDayLabel22);
    dayLabels[22] = document.getElementById(strRefDayLabel23);
    dayLabels[23] = document.getElementById(strRefDayLabel24);
    dayLabels[24] = document.getElementById(strRefDayLabel25);
    dayLabels[25] = document.getElementById(strRefDayLabel26);
    dayLabels[26] = document.getElementById(strRefDayLabel27);
    dayLabels[27] = document.getElementById(strRefDayLabel28);
    dayLabels[28] = document.getElementById(strRefDayLabel29);
    dayLabels[29] = document.getElementById(strRefDayLabel30);
    dayLabels[30] = document.getElementById(strRefDayLabel31);
    dayLabels[31] = document.getElementById(strRefDayLabel32);
    dayLabels[32] = document.getElementById(strRefDayLabel33);
    dayLabels[33] = document.getElementById(strRefDayLabel34);
    dayLabels[34] = document.getElementById(strRefDayLabel35);
    dayLabels[35] = document.getElementById(strRefDayLabel36);
    dayLabels[36] = document.getElementById(strRefDayLabel37);
    dayLabels[37] = document.getElementById(strRefDayLabel38);
    dayLabels[38] = document.getElementById(strRefDayLabel39);
    dayLabels[39] = document.getElementById(strRefDayLabel40);
    dayLabels[40] = document.getElementById(strRefDayLabel41);
    dayLabels[41] = document.getElementById(strRefDayLabel42);

    var dateFirstDayInMonth = new Date(intDisplayedYear, intDisplayedMonth - 1, 1);

    var intStartPos;

    if (dateFirstDayInMonth.getDay() == 0)
        intStartPos = 6;
    else
        intStartPos = dateFirstDayInMonth.getDay() - 1;

    var intDay;

    var objDate;

    for (var i = 0; i < 42; i++) {
        if (i >= intStartPos && i < arrMonthDays[intDisplayedMonth - 1] + intStartPos) {
            intDay = i - intStartPos + 1;
            dayLabels[i].innerHTML = intDay;

            objDate = new Date(intDisplayedYear, intDisplayedMonth - 1, intDay)

            if (intDay == intSelectedDay && intDisplayedMonth == intSelectedMonth && intDisplayedYear == intSelectedYear) {
                dayLabels[i].innerHTML = "<b>" + intDay + "</b>";
                dayLabels[i].className = 'Calendar_DaySelected';
            }
            else {
                dayLabels[i].className = 'Calendar_DayUnselected';
            }
            if (objDate >= objMinimumDate && objDate <= objMaximumDate) {
                dayLabels[i].disabled = false;
            }
            else {
                dayLabels[i].disabled = true;
            }
        }
        else {
            dayLabels[i].innerHTML = "&nbsp;";
            dayLabels[i].className = 'Calendar_DayUnselected';
        }
    }

    document.getElementById(strRefWeekLabel1).innerHTML = getWeekNumber(dateFirstDayInMonth);
    document.getElementById(strRefWeekLabel2).innerHTML = getWeekNumber(DateAdd(dateFirstDayInMonth, 7, 0, 0));
    document.getElementById(strRefWeekLabel3).innerHTML = getWeekNumber(DateAdd(dateFirstDayInMonth, 14, 0, 0));
    document.getElementById(strRefWeekLabel4).innerHTML = getWeekNumber(DateAdd(dateFirstDayInMonth, 21, 0, 0));
    document.getElementById(strRefWeekLabel5).innerHTML = getWeekNumber(DateAdd(dateFirstDayInMonth, 28, 0, 0));
    document.getElementById(strRefWeekLabel6).innerHTML = getWeekNumber(DateAdd(dateFirstDayInMonth, 35, 0, 0));

    document.getElementById(strRefMonthName).innerHTML = arrMonthNames[intDisplayedMonth - 1] + " " + intDisplayedYear
}

function isLeapYear(year) {
    year = parseInt(year);

    if (year % 4 == 0) {
        if (year % 100 != 0) {
            return true;
        } else {
            if (year % 400 == 0)
                return true;
            else
                return false;
        }
    }
    return false;
}

function setDropDown(strRefDay, strRefMonthAndYear, intDay, intMonth, intYear) {
    document.getElementById(strRefDay).value = intDay;
    document.getElementById(strRefMonthAndYear).value = intMonth + "/" + intYear;

}
