function GetMontName(month) {
	if (monthNames.length > month) return monthNames[month];
}
	
function InitTime(selectDateObj, selectDayObj, selectMonthObj) {
	var iterator = new Date(minTime);
	iterator.setDate(1);

	while (iterator < maxTime) {
		selectMonthObj.options.add(new Option(GetMontName(iterator.getMonth()) + " " + iterator.getFullYear(), ((iterator.getMonth()+1 < 10)?"0":"") + (iterator.getMonth()+1) + "." + iterator.getFullYear()));
		iterator = new Date(new Date(iterator).setMonth(iterator.getMonth() + 1));
	}

	selectionChanged(selectDayObj, selectMonthObj);
	updateDate(selectDateObj, selectDayObj, selectMonthObj);
}

function selectionChanged(selectDayObj, selectMonthObj) {	
	var startDay, endDay;
	var monthYear = selectMonthObj.options[selectMonthObj.selectedIndex].value.split('.');
	var selectedMonth = monthYear[0];
	var selectedYear = monthYear[1];
	var selectedDay = -1;

	if (selectDayObj.options.length > 0) {
		selectedDay = selectDayObj.options[selectDayObj.selectedIndex].value;
	}

	if ((selectedMonth == minTime.getMonth()+1) && (minTime.getFullYear() == selectedYear)) {
		startDay = minTime.getDate();
	}
	else{
		startDay = 1;
	}

	if ((selectedMonth == maxTime.getMonth()+1) && (selectedYear == maxTime.getFullYear())) {
		endDay = maxTime.getDate();
	}
	else{
		switch (selectedMonth) {
			case "02":
				endDay = 28;
				break;
			case "04":
			case "06":
			case "09":
			case "11":
				endDay = 30;
				break;
			case "01":
			case "03":
			case "05":
			case "07":
			case "08":
			case "10":
			case "12":
				endDay = 31;
				break;
			default:
				endDay = 31;
				break;
		}
	}

	selectDayObj.options.length = 0;

	//Default item for unselected day
	selectDayObj.options.add(new Option("", ""));
	for (var i = startDay; i <= endDay; i++) {
		selectDayObj.options.add(new Option(i, ((i < 10) ? "0":"") + i));
		if (selectedDay == i) {
			selectDayObj.selectedIndex = selectDayObj.length - 1;
		}
	}
}

function updateDate(selectDateObj, selectDayObj, selectMonthObj){
	var dayValue = selectDayObj.options[selectDayObj.selectedIndex].value;
	var monthValue = selectMonthObj.options[selectMonthObj.selectedIndex].value;
	if (dayValue != "" && monthValue != "")
	{
		selectDateObj.value = dayValue + "." + monthValue;
	}
	else if (monthValue != "")
	{
		//dayValue = selectDayObj.options[1].value;
		selectDateObj.value = "." + monthValue;
	}
	else
	{
		selectDateObj.value = "";
	}
}

function AddItemsFromCache(selectCtrID, cacheObj, mergeItems){
	var selectCtr = document.getElementById(selectCtrID);	
	var merged = new Array();
	
	if (typeof(mergeItems) == 'undefined' || mergeItems.length == 0)
	{
		merged = cacheObj;
	}
	else if (typeof(cacheObj) == "undefined")
	{
		merged = mergeItems;
	}
	else
	{
		for (var i = 0; i < cacheObj.length; i++){
			var sepIndx = cacheObj[i].indexOf(";");
			var isMatch = false;
			
			if (sepIndx > -1){				
				var itemText = cacheObj[i].substring(0, sepIndx);
				var reg = new RegExp("^"+itemText+";", "i");
				for (var j = 0; j < mergeItems.length; j++)
				{
					isMatch = reg.test(mergeItems[j]);
					
					if (isMatch)
					{
						merged.push(mergeItems[j]);
						mergeItems.splice(j, 1);
						break;
					}										
				}
			}
			if (!isMatch)
			{
				merged.push(cacheObj[i]);
			}
		}
		if (mergeItems.length > 0)
		{
			merged = merged.concat(mergeItems);
		}
	}
	
	if (selectCtr != null && typeof(merged) != "undefined"){
		merged.sort();
		for (var i = 0; i < merged.length; i++){
			var sepIndx = merged[i].indexOf(";");
			var optionTag;
			if (sepIndx > -1){
				optionTag = document.createElement("option");
				optionTag.text = merged[i].substring(0, sepIndx);
				optionTag.value = merged[i].substring(sepIndx + 1, merged[i].length);
				selectCtr.options.add(optionTag);
			}
		}
	}
}
