﻿function getMonthCombo(calendarField) {
  if (calendarField != null) {
    return document.getElementById(calendarField.id + 'MonthCombo');
  }
  else {
    return null;
  }
}

function getDayCombo(calendarField) {
  if (calendarField != null) {
    return document.getElementById(calendarField.id + 'DayCombo');
  }
  else {
    return null;
  }
}

function getDateMode(calendarField) {
  var dateModeField = null;
  if (calendarField != null) {
    dateModeField = document.getElementById(calendarField.id + 'DateMode');
  }

  if (dateModeField != null) {
    return dateModeField.value;
  }
  else {
    return null;
  }
}

function getCalendar(dayOrMonthCombo) {
  if (dayOrMonthCombo != null) {
    if (dayOrMonthCombo.id.endsWith('DayCombo')) {
      return this.getElementById(dayOrMonthCombo.id.replace('DayCombo', ''));
    }
    if (dayOrMonthCombo.id.endsWith('MonthCombo')) {
      return this.getElementById(dayOrMonthCombo.id.replace('MonthCombo', ''));
    }
    else {
      return null;
    }
  }
  else {
    return null;
  }
}

function updateFromCalendar(sender, date) {   
  if (sender != null) {
    date = sender.selectedDate;
  }
  if (date != null) {  
    updateMonths(getMonthCombo(sender), date.getFullYear(), date.getMonth()+1);
    updateDays(getDayCombo(sender), date.getFullYear(),date.getMonth()+1,date.getDate(), getDateMode(sender));
  }
}

function updateFromDayCombo(calendarField) {
  var dayField = getDayCombo(calendarField);
  var monthField = getMonthCombo(calendarField);
  var comboVal = (monthField.options[monthField.selectedIndex].value).split("-");

  var selectedDay = (dayField.childNodes.length == 0) ? 1 : dayField.options[dayField.selectedIndex].value;
  var selectedMonth = comboVal[0];
  var selectedYear = comboVal[1];
  updateCalendar(calendarField, selectedYear,selectedMonth,selectedDay);
}

function updateFromMonthCombo(calendarField) {
  //var calendarField = getCalendar(monthCombo);
  var monthField = getMonthCombo(calendarField);
  var dayField = getDayCombo(calendarField);
  var comboVal = (monthField.options[monthField.selectedIndex].value).split("-");
  var selectedDay = (dayField.childNodes.length == 0) ? 1 : dayField.options[dayField.selectedIndex].value;
  var selectedMonth = comboVal[0];
  var selectedYear = comboVal[1];
  updateDays(dayField, selectedYear, selectedMonth, selectedDay, getDateMode(calendarField));
  
  updateCalendar(calendarField, selectedYear,selectedMonth,selectedDay); 
}

function updateMonths(monthCombo, selectedYear, selectedMonth) {
  var val = selectedMonth + "-" + selectedYear;
  for (var i=0;i<=12;i++) {
    if (monthCombo.options[i].value == val) {
      monthCombo.selectedIndex=i;
      return;
    }
  }
}

function updateDays(dayCombo, selectedYear, selectedMonth, selectedDay, currentDateMode) {
  var days;
  var startCnt=0;
  var todayDate = new Date();
  if (currentDateMode == 'Past') {
    if (todayDate.getMonth() == selectedMonth-1) { days = todayDate.getDate(); }
    else { days = getNumberOfDays(selectedMonth,selectedYear); }
    dayCombo.length=days;
    for (var i=days;i>=1;i--) {
      var tmpDate = new Date(selectedYear,selectedMonth-1,i); 
      dayCombo.options[days - i] = null;
      dayCombo.options[days - i] = new Option(dayarr[tmpDate.getDay()] + " " + i,i);
    }
    if (selectedDay >= days) {
      dayCombo.selectedIndex=0;
    }
    else {
      dayCombo.selectedIndex=days-selectedDay;
    }
  }
  else {
    days = getNumberOfDays(selectedMonth,selectedYear);
    if (currentDateMode == 'Future') {
      if (todayDate.getMonth() == selectedMonth - 1) {
        if (todayDate.getYear() == selectedYear || todayDate.getYear() + 1900 == selectedYear) { // firefox + 1900
          startCnt = todayDate.getDate() - 1;
        }
      }  
    }
    dayCombo.length=days-startCnt;
    for (var i=startCnt+1;i<=days;i++) {
      var tmpDate = new Date(selectedYear,selectedMonth-1,i); 
      dayCombo.options[i-1-startCnt] = null;
      dayCombo.options[i-1-startCnt] = new Option(dayarr[tmpDate.getDay()] + " " + i,i);
    }
    if (selectedDay <= startCnt) {
      dayCombo.selectedIndex=0;
    }
    else if (selectedDay > (dayCombo.options.length + startCnt)) {
      dayCombo.selectedIndex=dayCombo.options.length - 1;
    }
    else {
      dayCombo.selectedIndex=selectedDay-startCnt-1;
    }
  }
}

function updateCalendar(calendarField, selectedYear, selectedMonth, selectedDay) {
  var d = new Date(selectedYear,selectedMonth-1,selectedDay); 
  calendarField.setDate(d,d);
}

function getNumberOfDays(month,year) {
  if(month==2) {
    var feb= new Date(year,1,29); 
    return (feb.getMonth()==1) ? 29 : 28; 
  } 
  else return (month==4||month==6||month==9||month==11) ? 30 : 31;
}     



