	/*
	*****************************************************************************************************
	Author : Lea Smart
	Source : www.totallysmartit.com
	Date : 7/3/2001
	DHTML Calendar
	Version 1.2
	
	You are free to use this code if you retain this header.
	You do not need to link to my site (be nice though!)
	
	Amendments
	22 Jan 2002; Added ns resize bug code; rewrote date functions into Date 'class';
				 Added support for yyyy-mm-dd date format
				 Added support for calendar beginning on any day
	7th Feb 2002 Fixed day highlight when year wasn't current year bug
	9th Jun 2002 Fixed bug with weekend colour
				 Amended the code for the date functions extensions.  Shortened addDays code considerably
	*****************************************************************************************************
	*/

	var timeoutDelay = 2000; // milliseconds, change this if you like, set to 0 for the calendar to never auto disappear
	var g_startDay = 0// 0=sunday, 1=monday
	
	// preload images
	var imgUp = new Image(8,12);
	imgUp.src = '/images/calendar-next.gif';
	var imgDown = new Image(8,12);
	imgDown.src = '/images/calendar-prev.gif';
	
	checkDate='0';

	// used by timeout auto hide functions
	var timeoutId = false;
	
	var month = new Array ("January", "February", "March", "April", "May", "June",
				"July", "August", "September", "October", "November", "December");

	var monthabbrevs = new Array ("ja", "fe", "mar", "ap", "may", "jun", "jul", "au", "se", "oc", "no", "de");

	var maxDays = new Array (31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

	var reformatedDate;
	var changedItem = 0;
	var assocItem = 0;
	var intervalID;

	// the now standard browser sniffer class
	function Browser(){
	  this.dom = document.getElementById?1:0;
	  this.ie4 = (document.all && !this.dom)?1:0;
	  this.ns4 = (document.layers && !this.dom)?1:0;
	  this.ns6 = (this.dom && !document.all)?1:0;
	  this.ie5 = (this.dom && document.all)?1:0;
	  this.ok = this.dom || this.ie4 || this.ns4;
	  this.platform = navigator.platform;
	}
	var browser = new Browser();
		
	// dom browsers require this written to the HEAD section
	
	if (browser.dom || browser.ie4){
	    document.writeln('<style>');
		document.writeln('#container {');
		document.writeln('position : absolute;');
		document.writeln('left : 100px;');
		document.writeln('top : 100px;');
		document.writeln('width : 124px;');;
		browser.platform=='Win32'?height=130:height=135;
		document.writeln('height : ' + height +'px;');
		document.writeln('clip:rect(0px 124px ' + height + 'px 0px);');
		//document.writeln('overflow : hidden;');
		document.writeln('visibility : hidden;');
		document.writeln('background-color : #ffffff');
		document.writeln('}');
		document.writeln('</style>');
		document.write('<div id="container" style="z-index:6" ');
		if (timeoutDelay) document.write(' onmouseout="calendarTimeout();" onmouseover="if (timeoutId) clearTimeout(timeoutId);"');
		document.write('></div>');
	}
	
	var g_Calendar;  // global to hold the calendar reference, set by constructor
	
	function calendarTimeout(){
	  if (browser.ie4 || browser.ie5){
	    if (window.event.srcElement && window.event.srcElement.name!='month') timeoutId=setTimeout('g_Calendar.hide();',timeoutDelay);
	  }
	  if (browser.ns6 || browser.ns4){
	    timeoutId=setTimeout('g_Calendar.hide();',timeoutDelay);
	  }
	}
	
	// constructor for calendar class
	function Calendar(){
	  g_Calendar = this;
	  // some constants needed throughout the program
	  this.daysOfWeek = new Array("Su","Mo","Tu","We","Th","Fr","Sa");
	  this.months = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
	  this.daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
	  
	  if (browser.ns4){
	    var tmpLayer = new Layer(127);
		if (timeoutDelay){
		  tmpLayer.captureEvents(Event.MOUSEOVER | Event.MOUSEOUT);
		  tmpLayer.onmouseover = function(event) { if (timeoutId) clearTimeout(timeoutId); };
		  tmpLayer.onmouseout = function(event) { timeoutId=setTimeout('g_Calendar.hide()',timeoutDelay);};
		}
	    tmpLayer.x = 100;
	    tmpLayer.y = 100;
	    tmpLayer.bgColor = "#ffffff";
	  }
	  if (browser.dom || browser.ie4){
		var tmpLayer = browser.dom?document.getElementById('container'):document.all.container;
	  }
	  this.containerLayer = tmpLayer;
	  if (browser.ns4 && browser.platform=='Win32') {
	    this.containerLayer.clip.height=134;
	    this.containerLayer.clip.width=127;
	  }

	}
	
 	Calendar.prototype.getFirstDOM = function() {
		var thedate = new Date();
		thedate.setDate(1);
		thedate.setMonth(this.month);
		thedate.setFullYear(this.year);
		return thedate.getDay();
	}

	Calendar.prototype.getDaysInMonth = function (){
	   if (this.month!=1) {
	   return this.daysInMonth[this.month]
	   }
	   else {
	     // is it a leap year
		    if (Date.isLeapYear(this.year)) {
			  return 29;
			}
		    else {
			  return 28;
			}
	   }
	}
	 
	Calendar.prototype.buildString = function(){
	  var tmpStr = '<form onSubmit="this.year.blur();return false;"><table width="100%" border="0" cellspacing="0" cellpadding="2" class="calBorderColor"><tr><td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="1" class="calBgColor">';
	  tmpStr += '<tr>';
	  tmpStr += '<td width="60%" class="cal" align="left">';
	  if (this.hasDropDown) {
	    tmpStr += '<select class="month" name="month" onchange="g_Calendar.selectChange();">';
		for (var i=0;i<this.months.length;i++){
	      tmpStr += '<option value="' + i + '"' 
		  if (i == this.month) tmpStr += ' selected';
		  tmpStr += '>' + this.months[i] + '</option>';
	    }
	    tmpStr += '</select>';
	  } else {
	    tmpStr += '<table border="0" cellspacing="0" cellpadding="0"><tr><td class="cal"><a onMouseOver="window.status=\'Previous Month\';return true;" onMouseOut="window.status=\'\';return true;" href="javascript: g_Calendar.changeMonth(-1);"><img name="calendar" src="' + imgDown.src+'" width="8" height="12" border="0" alt="Previous Month"></a></td><td class="cal" width="100%" align="center">' + this.months[this.month] + '</td><td class="cal"><a onMouseOver="window.status=\'Next Month\';return true;" onMouseOut="window.status=\'\';return true;" href="javascript: g_Calendar.changeMonth(+1);"><img name="calendar" src="' + imgUp.src+'" width="8" height="12" border="0" alt="Next Month"></a></td></tr></table>';
	  }
	  tmpStr += '</td>';
	  /* observation : for some reason if the below event is changed to 'onChange' rather than 'onBlur' it totally crashes IE (4 and 5)!
	  */
	  tmpStr += '<td width="40%" align="right" class="cal">';
	  
	  if (this.hasDropDown) { 
	    tmpStr += '<input class="year" type="text" size="';
	    // get round NS4 win32 lenght of year input problem
	    (browser.ns4 && browser.platform=='Win32')?tmpStr += 1:tmpStr += 4;
	  tmpStr += '" name="year" maxlength="4" onBlur="g_Calendar.inputChange();" value="' + this.year + '">';
	  } else {
	  tmpStr += '<table border="0" cellspacing="0" cellpadding="0"><tr><td class="cal"><a onMouseOver="window.status=\'Previous Year\';return true;" onMouseOut="window.status=\'\';return true;" href="javascript: g_Calendar.changeYear(-1);"><img name="calendar" src="'+ imgDown.src+'" width="8" height="12" border="0" alt="Previous Year"></a></td><td class="cal" width="100%" align="center">' + this.year + '</td><td class="cal"><a onMouseOver="window.status=\'Next Year\';return true;" onMouseOut="window.status=\'\';return true;" href="javascript: g_Calendar.changeYear(+1);"><img name="calendar" src="'+ imgUp.src+'" width="8" height="12" border="0" alt="Next Year"></a></td></tr></table>'
	  }
	  tmpStr += '</td>';
	  tmpStr += '</tr>';
	  tmpStr += '</table>';
	  var iCount = 1;

	  var iFirstDOM = (7+this.getFirstDOM()-g_startDay)%7; // to prevent calling it in a loop

	  var iDaysInMonth = this.getDaysInMonth(); // to prevent calling it in a loop
	  

	  tmpStr += '<table width="100%" border="0" cellspacing="0" cellpadding="1" class="calBgColor">';
	  tmpStr += '<tr>';
	    for (var i=0;i<7;i++){
		  tmpStr += '<td align="center" class="calDaysColor">' + this.daysOfWeek[(g_startDay+i)%7] + '</td>';
		}
	  tmpStr += '</tr>';
	  var tmpFrom = parseInt('' + this.dateFromYear + this.dateFromMonth + this.dateFromDay,10);
	  var tmpTo = parseInt('' + this.dateToYear + this.dateToMonth + this.dateToDay,10);
	  var tmpCompare;
	  for (var j=1;j<=6;j++){
	     tmpStr += '<tr>';
	     for (var i=1;i<=7;i++){
		   tmpStr += '<td width="16" align="center" '
		   if ( (7*(j-1) + i)>=iFirstDOM+1  && iCount <= iDaysInMonth){
		     if (iCount==this.day && this.year==this.oYear && this.month==this.oMonth) tmpStr += 'class="calHighlightColor"';
			 else {
			    if (i==7-g_startDay || i==((7-g_startDay)%7)+1) tmpStr += 'class="calWeekend"';
				else tmpStr += 'class="cal"';
			 }
		     tmpStr += '>';
			 /* could create a date object here and compare that but probably more efficient to convert to a number
			   and compare number as numbers are primitives */
			 tmpCompare = parseInt('' + this.year + padZero(this.month) + padZero(iCount),10);
			 if (tmpCompare >= tmpFrom && tmpCompare <= tmpTo) {
			   tmpStr += '<a class="cal" onMouseOver="window.status=\'' + this.months[this.month] + ' ' + iCount + ', ' + this.year + '\';return true;" onMouseOut="window.status=\'\';return true;" href="javascript: g_Calendar.clickDay(' + iCount + ');">' + iCount + '</a>';
			 } else {
			   tmpStr += '<span class="disabled">' + iCount + '</span>';
			 }
			 iCount++;
		   } else {
		     if  (i==7-g_startDay || i==((7-g_startDay)%7)+1) tmpStr += 'class="calWeekend"'; else tmpStr +='class="cal"';
			 tmpStr += '>&nbsp;';
		   }
		   tmpStr += '</td>'
		 }
		 tmpStr += '</tr>'
	  }
	  tmpStr += '</table></td></tr></table></form>'
	  return tmpStr;
	}
	
	Calendar.prototype.selectChange = function(){
	  this.month = browser.ns6?this.containerLayer.ownerDocument.forms[0].month.selectedIndex:this.containerLayer.document.forms[0].month.selectedIndex;
	  this.writeString(this.buildString());
	}
	
	Calendar.prototype.inputChange = function(){
	  var tmp = browser.ns6?this.containerLayer.ownerDocument.forms[0].year:this.containerLayer.document.forms[0].year;
	  if (tmp.value >=1900 || tmp.value <=2100){
	    this.year = tmp.value;
	    this.writeString(this.buildString());
	  } else {
	    tmp.value = this.year;
	  }
	}
	Calendar.prototype.changeYear = function(incr){
	   (incr==1)?this.year++:this.year--;
	   this.writeString(this.buildString());
	}
	Calendar.prototype.changeMonth = function(incr){
	    if (this.month==11 && incr==1){
	      this.month = 0;
	  	  this.year++;
	    } else {
	      if (this.month==0 && incr==-1){
	        this.month = 11;
		    this.year--;
	      } else {
		    (incr==1)?this.month++:this.month--;
		  }
		}
		this.writeString(this.buildString());
	}
	
	Calendar.prototype.clickDay = function(day){
	   var tmp = eval('document.' + this.target);
	   if (this.dateFormat=='dd-mmm-yyyy' || this.dateFormat=='dd/mmm/yyyy') tmp.value = day + this.dateDelim + this.months[this.month].substr(0,3) + this.dateDelim + this.year;
	   if (this.dateFormat=='dd/mm/yyyy' || this.dateFormat=='dd-mm-yyyy') tmp.value = day + this.dateDelim + (this.month+1) + this.dateDelim + this.year;
	   if (this.dateFormat=='mm/dd/yyyy' || this.dateFormat=='mm-dd-yyyy') tmp.value = (this.month+1) + this.dateDelim + day + this.dateDelim + this.year;
	   if (this.dateFormat=='yyyy-mm-dd') tmp.value = this.year + this.dateDelim + (this.month+1) + this.dateDelim + day;
	   
	    if (browser.ns4) this.containerLayer.hidden=true;
	    if (browser.dom || browser.ie4){
	      this.containerLayer.style.visibility='hidden'
	    }
		// Set focus back to the input date field after selecting a calendar date. 
		// This will update the user feedback date string.

		stringToMDY (tmp.value);
		buildFriendlyDates ();
		

		if (navigator.appName == "Netscape")
			status = friendlyDate;
		if (navigator.appName == "Microsoft Internet Explorer")
		{
			eval("assocItem = document.getElementById ('r_" +  tmp.name + "');");
			if(assocItem!=null)
				assocItem.innerText = friendlyDate;
		}
		tmp.value = reformatedDate; 
		status = "";
		
		tmp.focus();
	}
	
	Calendar.prototype.writeString = function(str){
	  if (browser.ns4){
	    this.containerLayer.document.open();
	    this.containerLayer.document.write(str);
	    this.containerLayer.document.close();
	  } 
	  if (browser.dom || browser.ie4){
	    this.containerLayer.innerHTML = str;
	  }
	}
	

	Calendar.prototype.show = function(event, target, bHasDropDown, dateFormat, dateFrom, dateTo){
	// calendar can restrict choices between 2 dates, if however no restrictions
	// are made, let them choose any date between 1900 and 3000
	if (dateFrom) this.dateFrom = dateFrom; else this.dateFrom = new Date(1900,0,1);
	this.dateFromDay = padZero(this.dateFrom.getDate());
	this.dateFromMonth = padZero(this.dateFrom.getMonth());
	this.dateFromYear = this.dateFrom.getFullYear();
	if (dateTo) this.dateTo = dateTo; else this.dateTo = new Date(3000,0,1);
	this.dateToDay = padZero(this.dateTo.getDate());
	this.dateToMonth = padZero(this.dateTo.getMonth());
	this.dateToYear = this.dateTo.getFullYear();
	this.hasDropDown = bHasDropDown;
	if (dateFormat) this.dateFormat = dateFormat; else this.dateFormat = 'dd-mmm-yyyy';
	switch (this.dateFormat){
	  case 'dd-mmm-yyyy':
	  case 'dd-mm-yyyy':
	  case 'yyyy-mm-dd':
	  case 'mm-dd-yyyy':
	    this.dateDelim = '/';
		break;
	  case 'dd/mm/yyyy':
	  case 'mm/dd/yyyy':
	  case 'dd/mmm/yyyy':
	    this.dateDelim = '/';
		break;
	}
	
	  if (browser.ns4) {
	    if (!this.containerLayer.hidden) {
		  this.containerLayer.hidden=true;
		  return;
		}
	   }
	  if (browser.dom || browser.ie4){
	    if (this.containerLayer.style.visibility=='visible') {
		  this.containerLayer.style.visibility='hidden';
		  return;
		}  
	  }

	  if (browser.ie5 || browser.ie4){
	    var event = window.event;
	  }
	  if (browser.ns4){
	    this.containerLayer.x = event.x+10;
	    this.containerLayer.y = event.y-5;
	  }
	  if (browser.ie5 || browser.ie4){
	    var obj = event.srcElement;
 	    x = 0;
  		while (obj.offsetParent != null) {
    		  x += obj.offsetLeft;
    		  obj = obj.offsetParent;
  		}
  		x += obj.offsetLeft;
	    y = 0;
		var obj = event.srcElement;
	    while (obj.offsetParent != null) {
    		  y += obj.offsetTop;
    		  obj = obj.offsetParent;
  		}
  		y += obj.offsetTop;
		
		//calender frame will appear in front of image with following coordinates in ie6
		// this.containerLayer.style.left = x+35;
		// if (event.y>0)this.containerLayer.style.top = y;

	   //calender frame ll appear behind the calender image and below the text field with following coordinates in ie6
		this.containerLayer.style.left = x;
		if (event.y>0)this.containerLayer.style.top = y+23;
		
	  }
	  if (browser.ns6){
	    this.containerLayer.style.left = event.pageX+10;
		this.containerLayer.style.top = event.pageY-5;
	  }
	  this.target = target;
	  var tmp = eval('document.' + this.target);
	  if (tmp && tmp.value && tmp.value.split(this.dateDelim).length==3 && tmp.value.indexOf('d')==-1){
	    var atmp = tmp.value.split(this.dateDelim)
		switch (this.dateFormat){
		 case 'dd-mmm-yyyy':
		 case 'dd/mmm/yyyy':
		   for (var i=0;i<this.months.length;i++){
		     if (atmp[1].toLowerCase()==this.months[i].substr(0,3).toLowerCase()){
		       this.month = this.oMonth = i;
			   break;
		     }
		   }
		   this.day = parseInt(atmp[0],10);
		   this.year = this.oYear = parseInt(atmp[2],10);
		   break;
		 case 'dd/mm/yyyy':
		 case 'dd-mm-yyyy':
		   this.month = this.oMonth = parseInt(atmp[1]-1,10); 
		   this.day = parseInt(atmp[0],10);
		   this.year = this.oYear = parseInt(atmp[2],10);
		   break;
		 case 'mm/dd/yyyy':
		 case 'mm-dd-yyyy':
		   this.month = this.oMonth = parseInt(atmp[0]-1,10);
		   this.day = parseInt(atmp[1],10);
		   this.year = this.oYear = parseInt(atmp[2],10);
		   break;
		 case 'yyyy-mm-dd':
		   this.month = this.oMonth = parseInt(atmp[1]-1,10);
		   this.day = parseInt(atmp[2],10);
		   this.year = this.oYear = parseInt(atmp[0],10);
		   break;
		}
	  } else { // no date set, default to today
	    var theDate = new Date();
	  	 this.year = this.oYear = theDate.getFullYear();
	     this.month = this.oMonth = theDate.getMonth();
	     this.day = this.oDay = theDate.getDate();
	  }
	  this.writeString(this.buildString());
	  
	  // and then show it!
	   if (browser.ns4) {
	   this.containerLayer.hidden=false;
	   }
	  if (browser.dom || browser.ie4){
	      this.containerLayer.style.visibility='visible';
	  }
	}
	
	Calendar.prototype.hide = function(){
	  if (browser.ns4) this.containerLayer.hidden = true;
	  if (browser.dom || browser.ie4){
	    this.containerLayer.style.visibility='hidden';
	  }
	}
	
	function handleDocumentClick(e){
	  if (browser.ie4 || browser.ie5) e = window.event;

	  if (browser.ns6){
	    var bTest = (e.pageX > parseInt(g_Calendar.containerLayer.style.left,10) && e.pageX <  (parseInt(g_Calendar.containerLayer.style.left,10)+125) && e.pageY < (parseInt(g_Calendar.containerLayer.style.top,10)+125) && e.pageY > parseInt(g_Calendar.containerLayer.style.top,10));
	    if (e.target.name!='imgCalendar' && e.target.name!='month'  && e.target.name!='year' && e.target.name!='calendar' && !bTest){
		  g_Calendar.hide(); 
		}
	  }
	  if (browser.ie4 || browser.ie5){
		// extra test to see if user clicked inside the calendar but not on a valid date, we don't want it to disappear in this case
	   var bTest = (e.x > parseInt(g_Calendar.containerLayer.style.left,10) && e.x <  (parseInt(g_Calendar.containerLayer.style.left,10)+125) && e.y < (parseInt(g_Calendar.containerLayer.style.top,10)+125) && e.y > parseInt(g_Calendar.containerLayer.style.top,10));
	    if (e.srcElement.name!='imgCalendar' && e.srcElement.name!='month' && e.srcElement.name!='year' && !bTest & typeof(e.srcElement)!='object'){
		  g_Calendar.hide(); 
		}
	  }
	  if (browser.ns4) g_Calendar.hide();
	}
	
	// utility function
	function padZero(num) {
	  return ((num <= 9) ? ("0" + num) : num);
	}
	  // Finally licked extending  native date object;
	  Date.isLeapYear = function(year){ if (year%4==0 && ((year%100!=0) || (year%400==0))) return true; else return false; }
	  Date.daysInYear = function(year){ if (Date.isLeapYear(year)) return 366; else return 365;}
	  var DAY = 1000*60*60*24;
	  Date.prototype.addDays = function(num){
		return new Date((num*DAY)+this.valueOf());
	  }	
	  
	// events capturing, careful you don't override this by setting something in the onload event of 
	// the body tag
	// Commented this out -- I added it to the SetFocus() method in EditRecord.html so it would be executed.
/*
	window.onload=function(){ 
	  new Calendar(new Date());
	  if (browser.ns4){
	    if (typeof document.NSfix == 'undefined'){
		  document.NSfix = new Object();
	      document.NSfix.initWidth=window.innerWidth;
		  document.NSfix.initHeight=window.innerHeight;
		}
	  }
	}
*/
/*	if (browser.ns4) window.onresize = function(){
	  if (document.NSfix.initWidth!=window.innerWidth || document.NSfix.initHeight!=window.innerHeight) window.location.reload(false);
	} // ns4 resize bug workaround
	window.document.onclick=handleDocumentClick;
    window.onerror = function(msg,url,line){
	  alert('******* an error has occurred ********' +
//	  '\n\nPlease check that' + 
//	  '\n\n1)You have not added any code to the body onload event,'
//	  +  '\nif you want to run something as well as the calendar initialisation'
//	  + '\ncode, add it to the onload event in the calendar library.'
//	  + '\n\n2)You have set the parameters correctly in the g_Calendar.show() method '
//	  + '\n\nSee www.totallysmartit.com\\examples\\calendar\\simple.asp for examples'
	  + '\n\n------------------------------------------------------'
	  + '\nError details'
	  + '\nText:' + msg + '\nurl:' + url + '\nline:' + line);
	}
*/


/*********************************************************************
	setDateItem

		on a date item gaining focus sets the global current date item
*/
function setDateItem (item, assoc)
	{
	changedItem = item;
	if (navigator.appName == "Microsoft Internet Explorer")
		assocItem = document.getElementById (assoc);	

	intervalID = setInterval ("validateDate()", 100);
	return true;
	}

/*********************************************************************
	shared variables for validateDate and helper functions
*/

var m;
var d;
var y;

var friendlyDate;

/*********************************************************************
	filterKeys

		filters for the T key and reformats as today's date
*/
function filterKeys (e)		// clues in Netscape to update value field
	{
		
	var retval = true;
	var charcode;

	if (document.all)
		{
		e = window.event;
		charcode = e.keyCode;
		}
	else
		charcode = e.which;

	var selectionLen = 0;
	
	if (document.selection)
		selectionLen = document.selection.createRange().text.length;

	if (changedItem.value.length == selectionLen && (charcode == 84 || charcode == 116) )		// T or t
		{
		var now = new Date;
		changedItem.value = "" + (now.getMonth()+1) + "-" + now.getDate() + "-" + now.getFullYear();
		changedItem.select();
		retval = false;
		}

	if (charcode == 91 || charcode == 93 )		// [ or ]
		{
		stringToMDY (changedItem.value);
		buildFriendlyDates();

		var dt = new Date(y,m-1,d);

		// Add 25 hours to make sure we work when we cross the daylight savings time boundary
		// or subtract 2 hours when going backwards

		if (charcode == 93)
			dt.setTime (dt.getTime() + (1000*60*60*25));
		else
			dt.setTime (dt.getTime() - (1000*60*60*23));

		changedItem.value = "" + (dt.getMonth()+1) + "-" + dt.getDate() + "-" + dt.getFullYear();
		changedItem.select();
		retval = false;
		}

	if (document.all)
		{
		e.returnValue = retval;
		return charcode;
		}

	return retval;
	}

/*********************************************************************
	validateDate

		creates and displays a user-friendly version of the currently
		typed-in date string
*/
function validateDate (textname)
	{
	friendlyDate   = "MM/DD/YYYY      ";
	reformatedDate = "";

	if (changedItem != 0 && changedItem.value != "")
		{
		stringToMDY (changedItem.value);
		buildFriendlyDates ();
		}

	}

/*********************************************************************
	buildFriendlyDates

		helper function for validateDate
		builds friendlyDate and reformatedDate from m,d,y
*/
function buildFriendlyDates ()
	{
	var ms = "MM";
	var msr = "MM";
	var ds = "DD";
	var dsr = "DD";

	// Month
	if (! isNaN(m))
		{
		if (m < 1)	m = 1;
		if (m > 12)	m = 12;

		ms = month[m-1].substring(0,3);
		if (m < 10)
			msr = "0" + m;
		else
			msr = m;
		}
	
	// Year
	if (isNaN(y))
		{
		var now = new Date;
		y = now.getFullYear();
		}
	else if (y < 30)
		y += 2000;
	else if (y < 100)
		y += 1900;

	// Day
	if (!isNaN(d))
		{
		if (d < 1) d = 1;
		else if (!isNaN(m) && d > maxDays[m-1])
				d = maxDays[m-1];	
		ds = d;
		if (d < 10)
			dsr = "0" + d;
		else
			dsr = d;
		}

	reformatedDate = msr + "/" + dsr + "/"  + y;
	friendlyDate   = ms  + " " + ds  + ", " + y;

	// add spaces to maintain constant width

	while (friendlyDate.length < 16)
		friendlyDate += " "

	}

/*********************************************************************
	monthNameToMonth

*/
function monthNameToMonth (s)
	{
	var n;
	var subs;
	var	len;

	for (n=0; n<12; n++)
		{
		len = monthabbrevs[n].length;
		subs = s.substr (0, len).toLowerCase();

		if (subs == monthabbrevs[n])
			{
			return n+1;
			}
		}
	
	return 0;		// we need to return something
	}

/*********************************************************************
	stringToMDY

		helper function for validateDate
*/
function stringToMDY (s)
	{
	m = Number.NaN;
	d = Number.NaN;
	y = Number.NaN;
	

	var toks = s.match (/\w+/g);

	if (toks)
		{
		if (toks.length == 1)
			{
 			m = parseInt (s.substring(0,2), 10);

			if (isNaN(m))		// check if it might be an alphabetic month
				{
					checkDate='1';
				m = monthNameToMonth (s);
				}
			else
				{
				d = parseInt (s.substring(2,4), 10);
				y = parseInt (s.substring(4,6), 10);
				}
			}

		if (toks.length > 1)
			{
 			m = parseInt (toks[0], 10);
			if (isNaN(m))		// check if it might be an alphabetic month
				{
					checkDate='1';
				m = monthNameToMonth (toks[0]);
				}

			d = parseInt (toks[1], 10);
			y = parseInt (toks[2], 10);
			}
		}
		

	}

/*********************************************************************
	reformatDate

		on blurring reformats the date to be acceptable to form handler
*/
function reformatDate (text)
	{
		checkDate='0';
	clearInterval (intervalID);
	validateDate();
	if(checkDate=='1')
		{
			alert("Please Enter Date in 'MM/DD/YYYY' Format");
			reformatedDate="";
			friendlyDate="MM/DD/YYYY"
		}

	if (navigator.appName == "Netscape")
		status = friendlyDate;
	else if (assocItem)
		{
		if(assocItem!=null)
		{
		if (assocItem.innerText != friendlyDate)
			{
			assocItem.innerText = friendlyDate;
			}
		}
		}
	text.value = reformatedDate; 
	status = "";
	}

	function LoadProc()
	{
		new Calendar(new Date());
		if (browser.ns4)
		{
			if (typeof document.NSfix == 'undefined')
			{
			  document.NSfix = new Object();
			  document.NSfix.initWidth=window.innerWidth;
			  document.NSfix.initHeight=window.innerHeight;
			}
		}
	}