/* ==============================
	Date Input v1
	Last updated: Jan 19, 2012
============================== */

/* ==============================
	variables
============================== */

/* ==============================
	functions
============================== */
	function GetTopLeft(elm) {
		var x = elm.offsetLeft;
		var y = elm.offsetTop;
		
		elm = elm.offsetParent;
		while(elm != null) {
			x = parseInt(x) + parseInt(elm.offsetLeft);
			y = parseInt(y) + parseInt(elm.offsetTop);
			elm = elm.offsetParent;
		}
		
		return {Top:y, Left: x};
	}

	function dynamicDate_updateCalendar(dateObj, formFieldName) {
		var ddObj = document.getElementById('inputDate_container');
		if(ddObj) {
			ddObj.innerHTML = dynamicDate_getCalendar(dateObj, formFieldName);
		}
	}

	function dynamicDate_getCalendar(dateObj, formFieldName) {
		var current = new Date(dateObj.getFullYear(), dateObj.getMonth(), 1);
		var year = current.getFullYear();
		var month = current.getMonth();
		var day = current.getDay();
		var prevDate = decDateByMonth(current, 1);
		var prevDateTxt = prevDate.getFullYear() +", "+ prevDate.getMonth() + ", 1";
		var nextDate = incDateByMonth(current, 1);
		var nextDateTxt = nextDate.getFullYear() +", "+ nextDate.getMonth() + ", 1";
		
		var monthDropDownHTML = '<select name="m" onchange="dynamicDate_updateCalendar(new Date('+year+', this.value), \''+formFieldName+'\');">';
		for(var a=0; a<moyf.length; a++) {
			monthDropDownHTML += '<option value="'+a+'" '+(a==month ? 'selected="selected"' : '')+'>'+moyf[a]+'</option>';
		}
		monthDropDownHTML += '</select>';
		
		var yearDropDownHTML = '<select name="y" onchange="dynamicDate_updateCalendar(new Date(this.value, '+month+'), \''+formFieldName+'\');">';
		for(var a=(year-5); a<=(year+5); a++) {
			yearDropDownHTML += '<option value="'+a+'" '+(a==year ? 'selected="selected"' : '')+'>'+a+'</option>';
		}
		yearDropDownHTML += '</select>';
		
		var yearUpdater = 'if(this.value.match(/^([0-9]{4})$/g)) {dynamicDate_updateCalendar(new Date(this.value, '+month+'), \''+formFieldName+'\')}';
		
		var calendarHTML = '<div>' +
			'	<span>' +
			'		<a href="javascript:dynamicDate_updateCalendar(new Date('+prevDateTxt+'), \''+formFieldName+'\');">&laquo;</a> '+
					monthDropDownHTML +
			'		<a href="javascript:dynamicDate_updateCalendar(new Date('+nextDateTxt+'), \''+formFieldName+'\');">&raquo;</a> '+
			'	</span>' +
		//	'	<span>'+yearDropDownHTML+'</span>' +
			'	<span><input type="text" name="y" value="'+year+'" size="5" onblur="'+yearUpdater+'" onkeyup="'+yearUpdater+'" /></span>' +
			'</div>' +
			'<table id="inputDate_calendar"><tr>';
		
		// print days of the week
		calendarHTML += '<tr>';
		for(var a=0; a<dowa.length; a++) {
			calendarHTML += '<th>'+ dowa[a] +'</th>';
		}
		
		// print opening spacers
		if(day!=0) calendarHTML += '<tr><td colspan="'+ day +'" class="calEmpty"> </td>';
		
		// print days...
		for(var a=1; a<=daysInMonth(month,year); a++) {
			if(day==0) calendarHTML += '<tr>';
			
			calendarHTML += '<td><a href="javascript:'+formFieldName+'.value=\''+twoForm(month+1)+'/'+twoForm(a)+'/'+year+'\'; dynamicDate_closeCalendar(); void 1;">'+ a +'</a></td>';
			
			if(day==6) {
				calendarHTML += '</tr>';
				day = 0;
			} else {
				day++;
			}
		}
		
		// print closing spacers
		if(day!=0) calendarHTML += '<td colspan="', 7-day ,'" class="calEmpty"> </td></tr>';
		
		calendarHTML += '</tr>';
		
		calendarHTML += '</form></table">';
		
		return calendarHTML;
	}
	
	function dynamicDate_toggleCalendar(fieldObj) {
		if(!fieldObj) return;
		
		var dim = GetTopLeft(fieldObj);
		var left = dim.Left;
		var top = dim.Top + fieldObj.offsetHeight;
		
		var initDate = new Date();
		var fieldValues = fieldObj.value.split("/");
		if(
			fieldValues.length==3 &&
			Number(fieldValues[0])<12 &&
			fieldValues[2].length==4
		) {
			initDate = new Date(fieldValues[2], Number(fieldValues[0])-1, 1);
		}
		
		var ddObj = document.getElementById('inputDate_container');
		if(!ddObj) {
			ddObj = document.createElement('div');
			ddObj.id = 'inputDate_container';
			document.body.appendChild(ddObj);
		}
		ddObj.style.left = left + "px";
		ddObj.style.top = top + "px";
		ddObj.innerHTML = dynamicDate_getCalendar(initDate, "document."+(fieldObj.form.name)+"."+fieldObj.name);
		// tester:ddObj.innerHTML += '<p>top: '+top+', left: '+left+'</p>';
	}
	
	function dynamicDate_closeCalendar() {
		var ddObj = document.getElementById('inputDate_container');
		if(ddObj) {
			document.body.removeChild(ddObj);
		}
	}
