function funcInitDateControl(ctrl)
{
	var dateControl = document.getElementById(ctrl);		
	dateControl.value = funcDateToString(dateControl.getAttribute('dateValue'),dateControl.getAttribute('dateFormat'));
}

function funcDateToString(dateValue,dateFormat)
{
	var dateYear	= dateValue.split('|')[0];
	var dateMonth	= dateValue.split('|')[1];
	var dateDay		= dateValue.split('|')[2];
	
	var dateString = dateFormat;				
	dateString = dateString.replace("yyyy",dateYear);
	dateString = dateString.replace("yy",dateYear.substring(2,4));
	dateString = dateString.replace("MM", dateMonth);
	dateString = dateString.replace("M", parseInt(dateMonth,10));
	dateString = dateString.replace("dd", dateDay);
	dateString = dateString.replace("d", parseInt(dateDay,10));
	
	return dateString;			
}

function funcDropCalendar(ctrl)
{
	var rootControl = document.getElementById(ctrl);
	
	//create elements
	var dropCalendarTABLE		 = document.createElement("TABLE");
	dropCalendarTABLE.id		 = rootControl.id + "_box";
	dropCalendarTABLE.className  = "styReflexAgenda_DropBox";
	dropCalendarTABLE.style.left = funcFindPosX(rootControl);
	dropCalendarTABLE.style.top  = 20+funcFindPosY(rootControl);				
	
	if(document.getElementById(dropCalendarTABLE.id) == null)
	{
		var dropCalendarTBODY = document.createElement("TBODY"); 
		var dropCalendarTR = document.createElement("TR");
		
		var controlBar = document.createElement("TD");
		controlBar.align = "center";
		controlBar.vAlign = "top";			
		
		//assign elements
		controlBar.appendChild(createMonthDropdown(rootControl));
		controlBar.appendChild(createYearDropdown(rootControl));
		//day overview
		controlBar.appendChild(createDayOverview(rootControl));
		
		//combine elements and add root to body element
		dropCalendarTR.appendChild(controlBar);
		dropCalendarTBODY.appendChild(dropCalendarTR);
		dropCalendarTABLE.appendChild(dropCalendarTBODY);
			
		document.getElementsByTagName("body").item(0).appendChild(dropCalendarTABLE);

		//setdate
		setDate_InBox(rootControl, rootControl.getAttribute("dateValue"));
		
		//todo: make mozilla browers compatible
		//set events				
		document.getElementById(rootControl.id + "_yeardrop").attachEvent("onchange",funcDateChanged);
		document.getElementById(rootControl.id + "_monthdrop").attachEvent("onchange",funcDateChanged);
		document.getElementById(rootControl.id + "_days").attachEvent("onclick",funcDateChanged);

		try
		{
			funcCalendarIsDropped(true);
		}	
		catch(exc) {}
	}
}

function funcDateChanged(e)
{
	var sourceEvent = document.all ? event.srcElement : e.target;
	
	if(sourceEvent.id.indexOf("_yeardrop") > 0)
	{//year changed
		var rootElement = document.getElementById(sourceEvent.id.replace("_yeardrop",""));
	
		var newDate = funcGetJSDate(rootElement.getAttribute("dateValue"));
		newDate.setFullYear(parseInt(sourceEvent.options[sourceEvent.selectedIndex].text,10),newDate.getMonth(),1);										
		rootElement.setAttribute("dateValue",funcJSDateToValue(newDate));	
		
		document.getElementById(rootElement.id + "_days").detachEvent('onclick',funcDateChanged)
		sourceEvent.parentNode.removeChild(sourceEvent.parentNode.childNodes[2]);
		sourceEvent.parentNode.appendChild(createDayOverview(rootElement));
		document.getElementById(rootElement.id + "_days").attachEvent("onclick",funcDateChanged);
		
		setDate_InBox(rootElement,funcJSDateToValue(newDate));									
	}
	else if(sourceEvent.id.indexOf("_monthdrop") > 0)
	{//month changed
		var rootElement = document.getElementById(sourceEvent.id.replace("_monthdrop",""));
	
		var newDate = funcGetJSDate(rootElement.getAttribute("dateValue"));
		newDate.setFullYear(newDate.getFullYear(), sourceEvent.selectedIndex,1);										
	
		rootElement.setAttribute("dateValue",funcJSDateToValue(newDate));
		
		document.getElementById(rootElement.id + "_days").detachEvent('onclick',funcDateChanged)
		sourceEvent.parentNode.removeChild(sourceEvent.parentNode.childNodes[2]);
		sourceEvent.parentNode.appendChild(createDayOverview(rootElement));
		document.getElementById(rootElement.id + "_days").attachEvent("onclick",funcDateChanged);
		
		setDate_InBox(rootElement,funcJSDateToValue(newDate));
	}
	else
	{
		if(sourceEvent.innerHTML.length > 0)
		{	
			var newDayValue = parseInt(sourceEvent.innerHTML,10);
			var rootElement = document.getElementById(sourceEvent.parentNode.parentNode.id.replace("_days",""));
			
			var newDate = funcGetJSDate(rootElement.getAttribute("dateValue"));
			newDate.setFullYear(newDate.getFullYear(), newDate.getMonth(),newDayValue);
		
			rootElement.setAttribute("dateValue",funcJSDateToValue(newDate));
			
			rootElement.value = funcDateToString(funcJSDateToValue(newDate), rootElement.getAttribute("dateFormat"));
			document.getElementsByTagName("body").item(0).removeChild(document.getElementById(rootElement.id + "_box"));
			
			if(rootElement.getAttribute("apb") == "1")
				__doPostBack(rootElement.id ,'newdate');
				
			try
			{	funcCalendarIsDropped(false);
				funcGetNewAvailability();
			}catch(exc){}
		}
	}			
}

function funcJSDateToValue(JSDate)
{
	return JSDate.getFullYear() + "|" + (JSDate.getMonth()+1) + "|"	+ JSDate.getDate();
}

function funcGetJSDate(dateValue)
{
	var dateYear	 = parseInt(dateValue.split('|')[0],10);
	var dateMonth	 = parseInt(dateValue.split('|')[1],10);
	var dateDay		 = parseInt(dateValue.split('|')[2],10);
	
	if(dateYear < 1000) dateYear += 2000;
	var JSDate = new Date();
	JSDate.setFullYear(dateYear, dateMonth-1,dateDay);
	return JSDate;
}

function setDate_InBox(ctrl, dateValue)
{
	var dateYear	 = parseInt(dateValue.split('|')[0],10);
	var dateMonth	 = ctrl.getAttribute("dateNames").split('|')[6+parseInt(dateValue.split('|')[1],10)];
	var dateDay		 = parseInt(dateValue.split('|')[2],10);
	var selectOption = 0;

	//set year
	if(dateYear < 1000) dateYear += 2000;
	var dropYears = document.getElementById(ctrl.id + "_yeardrop");
	for(optionIndex = 0; optionIndex < dropYears.options.length; optionIndex++)
		if( parseInt(dropYears[optionIndex].text,10) == dateYear) selectOption = optionIndex;
	dropYears.selectedIndex = selectOption;
	
	//set month
	var dropMonths = document.getElementById(ctrl.id + "_monthdrop");
	for(optionIndex = 0; optionIndex < dropMonths.options.length; optionIndex++)
		if( dropMonths[optionIndex].text == dateMonth) selectOption = optionIndex;
	dropMonths.selectedIndex = selectOption;
	
	//set day
	var dayOverview = document.getElementById( ctrl.id + "_days" );
	
	
	for( rowIndex=0; rowIndex < dayOverview.childNodes.length; rowIndex++)
	{
		var dayOverviewRow = dayOverview.childNodes[rowIndex];
		for(columnIndex=0; columnIndex < dayOverviewRow.childNodes.length; columnIndex++)
		{	
			if(dayOverviewRow.childNodes[columnIndex].innerHTML.length > 0 && parseInt( dayOverviewRow.childNodes[columnIndex].innerHTML,10) == dateDay)
			{
				//alert(dayOverviewRow.childNodes[columnIndex].style.color = "red");
				dayOverviewRow.childNodes[columnIndex].className = "styReflexAgenda_DayOverview_Selected";
			}
		}					
	}
}

function createMonthDropdown(ctrl)
{
	var drpMonths = document.createElement("select");
	drpMonths.className = "styReflexAgenda_Input";
	drpMonths.id = ctrl.id + "_monthdrop";
	var dateNames = ctrl.getAttribute("dateNames").split('|');
	
	for(dateIndex = 7 ; dateIndex < 19; dateIndex++)
	{
		var monthName = document.createElement("option")
		monthName.innerHTML = dateNames[dateIndex];
		drpMonths.appendChild(monthName);					
	}		
	return drpMonths;
}

function createYearDropdown(ctrl)
{
	var drpYears = document.createElement("select");
	drpYears.className = "styReflexAgenda_Input";
	drpYears.id = ctrl.id + "_yeardrop";
	
	for(yearIndex = 2005 ; yearIndex < 2016; yearIndex++)
	{
		var yearName = document.createElement("option")
		yearName.innerHTML = yearIndex;
		drpYears.appendChild(yearName);					
	}		
	return drpYears;
}

function createDayOverview(ctrl)
{
	var tblDayOverview = document.createElement("TABLE");
	tblDayOverview.className = "styReflexAgenda_DayOverview";
	var tblDayOverviewHead = document.createElement("THEAD");
	
	
	//create headerrow
	var tblDayOverviewRow = document.createElement("TR");
	tblDayOverviewRow.className = "styReflexAgenda_DayOverview_Header";
	
	var dayNames = ctrl.getAttribute("dateNames").split('|');
	for(dayIndex=0; dayIndex < 7; dayIndex++)
	{
		var dayName = document.createElement("TD");
		dayName.innerHTML = dayNames[dayIndex];
		tblDayOverviewRow.appendChild(dayName);					
	}
	tblDayOverviewHead.appendChild(tblDayOverviewRow);
	
	//create day overview
	var tblDayOverviewBody = document.createElement("TBODY");
	tblDayOverviewBody.id = ctrl.id + "_days";
	
	var currentDate = new Date();
	var currentYear = parseInt( ctrl.getAttribute("dateValue").split('|')[0],10); 
	if(currentYear < 1000 ) currentYear += 2000;				
	var currentMonth = parseInt( ctrl.getAttribute("dateValue").split('|')[1],10);
	currentDate.setFullYear( currentYear,currentMonth-1,1);
	
	var startWeekDayNo = 0;
	var startWeekDay = new Date();
	startWeekDay.setTime(currentDate.getTime());				
	for(dayCounter=0; dayCounter < 7; dayCounter++)
	{
		if(startWeekDay.toDateString().substr(0,1).toLocaleLowerCase() == "i" || startWeekDay.toDateString().substr(0,1).toLocaleLowerCase() == "m")
		{
			break;
		}
		else 
		{
			startWeekDay.setTime( startWeekDay.getTime() - (24 * 3600 * 1000));
			startWeekDayNo++;
		}
	}

	for( rowIndex=0; rowIndex < 6; rowIndex++)
	{
		var tblDayOverviewRow = document.createElement("TR");
		tblDayOverviewRow.setAttribute("isclickable",true);
		for(columnIndex=0; columnIndex < 7; columnIndex++)
		{
			if( startWeekDayNo > 0)
			{
				var tblDayOverviewCell = document.createElement("TD");
				tblDayOverviewRow.appendChild(tblDayOverviewCell);	
				startWeekDayNo--;					
			}
			else
			{
				var tblDayOverviewCell = document.createElement("TD");
				tblDayOverviewCell.innerHTML = currentDate.getDate();
				
				if(currentDate.getMonth() == currentMonth-1)
					tblDayOverviewRow.appendChild(tblDayOverviewCell);	
			
				currentDate.setTime(currentDate.getTime() + (24 * 3600 * 1000));
			}
			
		}			
		tblDayOverviewBody.appendChild(tblDayOverviewRow);				
	}
	
	tblDayOverview.appendChild(tblDayOverviewBody);
	tblDayOverview.appendChild(tblDayOverviewHead);				
	return tblDayOverview;				
}

function funcFindPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function funcFindPosY(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}
