﻿
function initDateCombo(selYear, selMonth, selDay, startYear, endYear, 
                       cmbYearId, cmbMonthId, cmbDayId)
{
    var curdate = new Date();
    curdate.setFullYear(selYear,selMonth,selDay);
    var startdate = new Date();
    startdate.setFullYear(startYear,0,1);
    setDisplayMonths(2, cmbMonthId);
    setDisplayYears(startdate.getFullYear(), startdate.getFullYear() + (endYear - startYear), cmbYearId);
    setDefaultDate(curdate, cmbDayId, cmbMonthId, cmbYearId);
    
    var cmbYear = document.getElementById(cmbYearId);
    cmbYear.onchange =  function() {populateDate(cmbDayId, cmbMonthId, cmbYearId);};
    var cmbMonth = document.getElementById(cmbMonthId);
    cmbMonth.onchange =  function() {populateDate(cmbDayId, cmbMonthId, cmbYearId);};
    var cmbDay = document.getElementById(cmbDayId);
    cmbDay.onchange =  function() {populateDate(cmbDayId, cmbMonthId, cmbYearId);};
}

function initDateComboNoDefaultDate(startYear, endYear, cmbYearId, cmbMonthId, cmbDayId)
{
    var startdate = new Date();
    startdate.setFullYear(startYear,0,1);    
    setDisplayMonths(2, cmbMonthId);
    setDisplayYears(startdate.getFullYear(), startdate.getFullYear() + (endYear - startYear), cmbYearId);
    
    var cmbYear = document.getElementById(cmbYearId);
    cmbYear.onchange =  function() {populateDate(cmbDayId, cmbMonthId, cmbYearId);};
    var cmbMonth = document.getElementById(cmbMonthId);
    cmbMonth.onchange =  function() {populateDate(cmbDayId, cmbMonthId, cmbYearId);};
    var cmbDay = document.getElementById(cmbDayId);
    cmbDay.onchange =  function() {populateDate(cmbDayId, cmbMonthId, cmbYearId);};
}

function populateDate(dayId, monthId, yearId)
{
    var day = document.getElementById(dayId);
    var year = document.getElementById(yearId);
    var month = document.getElementById(monthId);
    
    var dSelDay = day.options[day.selectedIndex].value;
    var dSelYear = year.options[year.selectedIndex].value;
    var dSelMonth = month.options[month.selectedIndex].value;
    
    if(dSelDay == "-1" || dSelYear == "-1" || dSelMonth == "-1")
    {
        return;
    }
    
    var timeA = new Date(dSelYear,dSelMonth,1); //get date of first day of next month
    var timeDifference = timeA - 86400000; //subtract 1 day
    var timeB = new Date(timeDifference);
    var daysInMonth = timeB.getDate();
    prevDaysInMonth = day.options.length - 1;
	
    if (daysInMonth < prevDaysInMonth){	
	    day.options.length = daysInMonth + 1;
	    
	    if (dSelDay > daysInMonth){
		    day.selectedIndex = daysInMonth; 
	    }
    }
    else if (daysInMonth > prevDaysInMonth){ //current month's days > previous month's
	    var sDay;
        for (var i = prevDaysInMonth; i < daysInMonth; i++) {
            sDay = ((i+1)<10)?"0"+(i+1):i+1;
            day.options[sDay] = new Option(sDay,sDay);
        }
    }
}

function setDisplayMonths(mode, monthId)
{
    var month = document.getElementById(monthId);
    
    switch (mode){
		case 1:
		    var arrMonth = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
			for (var i=0;i<arrMonth.length ;i++){
				month.options[i] = new Option(arrMonth[i],i);
			}
		    break;
		case 2: //abbreviated english month names (first 3 letters) with not select value option
		    var arrMonth = new Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
		    month.options[0] = new Option("", "-1");
			for (var i=1;i<arrMonth.length + 1;i++){
				month.options[i] = new Option(arrMonth[i-1],i);
			}
			break;
		default: //numeric months
			for (var i=0;i<12;i++){
				month.options[i] = new Option(((i+1)<10)?"0"+(i+1):i+1, i+1);
			}
	}		
}

function setDisplayYears(fromYear, toYear, yearId)
{
    var year = document.getElementById(yearId);
	year.length=0;
	if(this.hasDefaultDate){
	    for (var i=fromYear;i<=toYear;i++){
		    year.options[i-fromYear] = new Option(i,i);
	    }
	}else{
	    year.options[0] = new Option("", "-1");
	    for (var i=fromYear;i<=toYear;i++){
		    year.options[i-fromYear+1] = new Option(i,i);
	    }
	}
	
}

//set default date
function setDefaultDate(defaultDate, dayId, monthId, yearId)
{
    var day = document.getElementById(dayId);
    var month = document.getElementById(monthId);
    var year = document.getElementById(yearId);
    
	if (defaultDate==null || typeof defaultDate=="undefined" || isNaN(defaultDate)){
		defaultDate = new Date();
	}
	month.options[defaultDate.getMonth()].selected = true;		//select default month
	day.options[defaultDate.getDate()].selected = true;		//select default day
	//select default year
	for (var i=0;i<year.options.length;i++){
		if (year.options[i].value==defaultDate.getFullYear()){
			year.selectedIndex = i;
			break;
		}
	}
}

//	//set onchange handler
//	var monthChange = month.onchange;
//	if (monthChange){
//		month.onchange = function(){
//			this.populateDate();
//			monthChange();
//		}
//	}
//	else{
//		month.onchange = this.populateDate;
//	}
//	
//	var dayChange = day.onchange;
//	if (dayChange){
//		day.onchange = function(){
//			this.populateDate();
//			dayChange();
//		}
//	}
//	else{
//		day.onchange = this.populateDate;
//	}
//	
//	var yearChange = year.onchange;
//	if (yearChange){
//		year.onchange = function(){
//			this.populateDate();
//			yearChange();
//		}
//	}
//	else{
//		year.onchange = this.populateDate;	
//	}
//	
//}

