/* --------------------------------------------------
	Created:	June 17, 2009
	Purpose:	Functions to print date field
				with clickable calendar feature
-------------------------------------------------- */

// Initialize
	var currentDateField = '';
	var singleDate = false;
	document.write('<div id="inputDateCalContainer"></div>');

// Find x/y position of element
	function findPos(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft
			curtop = obj.offsetTop
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft
				curtop += obj.offsetTop
			}
		}
		return new Array(curleft,curtop);
	}
	
// Convert string (mm/dd/yyyy) into a date object
	function makeStringDate(dateString) {
		dateArray = dateString.split("/");
		if(
			dateArray.length!=3 ||
			(dateArray[0].search(/[^0-9]/ig)!=-1 && dateArray[0].length<=2) ||
			(dateArray[1].search(/[^0-9]/ig)!=-1 && dateArray[0].length<=2) ||
			(dateArray[2].search(/[^0-9]/ig)!=-1 && dateArray[0].length<=4)
		) {
			return false;
		} else {
			return new Date(dateArray[2], Number(dateArray[0])-1, dateArray[1]);
		}
	}

/* --------------------------------------------------
	Print date input field
-------------------------------------------------- */
	function printDateField(dateFieldName, dateFieldValue, dateFieldMisc) {
		document.write(
			'<div id="inputDateContainer">',
			'	<input id="inputDateField" type="text" name="',dateFieldName,'" value="',dateFieldValue,'" ', (dateFieldMisc.indexOf('size=')==-1 ? ' size="12"'+dateFieldMisc : dateFieldMisc) ,' onfocus="activateCalendar(this);" onkeydown="returnDate(\'\')">',
			'</div>'
		);
	}

/* --------------------------------------------------
	Create calendar HTML
-------------------------------------------------- */
	function printInputDateCal(thisDate) {
		var calDate = new Date(thisDate.getFullYear(), thisDate.getMonth(), 1);
		var calSrc = '';
		
		// print opening table
		calSrc +=	'<table width="100%" align="center" border="0" cellpadding="0" cellspacing="0" id="inputDateCal">'+
					'	<tr>'+
					'		<td><a style="font-weight: bold;" href="javascript:reloadInputDateCal(\''+(calDate.getMonth()==0 ? '12' : calDate.getMonth())+'/1/'+(calDate.getMonth==0 ? calDate.getFullYear()-1 : calDate.getFullYear())+'\');">&laquo;</a></td>'+
					'		<td colspan="5"><select name="" onchange="reloadInputDateCal(this.value)">';
		var mo = calDate.getMonth()-6
		var yr = calDate.getFullYear();
		if(mo<0) {
			mo = mo+12;
			yr = yr-1;
		}
		var numMonths = 0;
		
		// print 12-month dropdown box
		while(numMonths<13) {
			calSrc += '<option value="'+(mo+1)+'/1/'+yr+'" '+ (mo==calDate.getMonth() && yr==calDate.getFullYear() ? 'selected' : '') +'>'+ moyf[mo]+' '+ yr +'</option>';
			mo++;
			if(mo>11) {
				mo = mo-12;
				yr++;
			}
			numMonths++;
		}
		calSrc += 	'		</select></td>'+
					'		<td><a style="font-weight: bold;" href="javascript:reloadInputDateCal(\''+(calDate.getMonth()==11 ? '1' : calDate.getMonth()+2)+'/1/'+(calDate.getMonth()==11 ? calDate.getFullYear()+1 : calDate.getFullYear())+'\');">&raquo;</a></td>'+
					'	</tr>'+
				 	'	<tr>';
		// print days of the week
		for(var x=0; x<dowa.length; x++) calSrc += 	'<th width="14%">'+ dowa[x] +'</th>';
		calSrc += 	'</tr>';
		
		// print out front spacer cells
		var currentDay = calDate.getDay();
		if(currentDay>0) calSrc += '<tr><td colspan="'+ currentDay +'" class="empty">&nbsp;</td>';
		
		// print calendar days
		for(var x=1; x<=daysInMonth(calDate.getMonth(), calDate.getFullYear()); x++) {
			if(currentDay==0) calSrc += '<tr>';
			calSrc += '<td><a href="javascript:returnDate(\''+ (calDate.getMonth()+1) +'/'+ x +'/'+ calDate.getFullYear() +'\');">'+ x +'</a></td>';
			if(currentDay==6) {
				calSrc += '</tr>';
				currentDay = 0;
			} else {
				currentDay++;
			}
		}
	
		// print out back spacer cells
		if(currentDay>0 && currentDay<7) calSrc += '<td colspan="'+ (7-currentDay) +'" class="empty">&nbsp;</td></tr>';
		
		// print closing table
		calSrc += 	'</table>';
		return calSrc;
	}

/* --------------------------------------------------
	ACTION!
-------------------------------------------------- */

// activate calendar
	function activateCalendar(theInputField) {
		currentDateField = theInputField;
		
		reloadInputDateCal(theInputField.value);
		
		var offset = findPos(theInputField);
		var offsetLeft = Number(offset[0])+20;
		var offsetTop = Number(offset[1])+20;
		document.getElementById("inputDateCalContainer").style.left = offsetLeft;
		document.getElementById("inputDateCalContainer").style.top = offsetTop;
	}

// fill date input field
	function returnDate(returnValue) {
		if(currentDateField!='' && returnValue!='') {
			currentDateField.value = returnValue;
			if(singleDate) {
				searchFormCheck(currentDateField.form);
			}
		}
		currentDateField = '';
		document.getElementById("inputDateCalContainer").style.left = '-999em';
		document.getElementById("inputDateCalContainer").style.top = '-999em';
	}

// reload input date cal
	function reloadInputDateCal(newDate) {
		newDate = makeStringDate(newDate);
		if(newDate==false) newDate = new Date();
		document.getElementById("inputDateCalContainer").innerHTML = printInputDateCal(newDate);
	}