//This file must be included on any page that wishes to dynamically create a Calendar.
/*
Created by:
	Shaune Reynolds
	The Webworks Webmaster
	Commercial & Consumer Equipment Division of Deere & Company
	E-mail:  ReynoldsShauneR@JohnDeere.com

Pop-up Calendar v5 - http://is.rc.deere.com/webworks/CalendarV5

Version 4 
	Added
	 	* SimpleDateFormat 
		* function makeCalendarForDay
		* Some Validation Goodies
			function isNDaysApart(start,end,n)
			function changeDay(selectedDay,n,maxDate)
Version 5
	Added
		* function clearCalendar() - which calls the function window.customDisplay 
					 	(if it exists) after the clear button is pressed
		* function makeCalendarForDays - to take an array of days
Version 5.1
	Added 
		* function posX(obj) and posY(obj) to get the current position of a form element
		* open the Calendar over the current form element instead of some arbitrary location
Version 5.1.1
	Added
		* in openCalendar(...) I now account for scrolling for posX(obj) and posY(obj)
*/
var textObj;
var defaultDateFormat = "ddMMMyyyy";
var sdf = new SimpleDateFormat(defaultDateFormat); 

var daysForMonth = new Array(31, 29, 31,30, 31, 30, 31, 31, 30, 31, 30, 31);
var thisMonth = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
var thisDay = new Array("Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday");

function containedInArray(arrayItems, value) {
	for (i=0; i<arrayItems.length; i++) {
		if (arrayItems[i] == value) return true;
	}
	return false;
}

function getNumDays(intMonth, intYear) 
//intMonth 0-11 (Jan-Dec)
//intYear 4-digit 
{	
	return (intMonth == 1) ? daysInFebruary(intYear) : daysForMonth[intMonth];
}

function daysInFebruary (year)
{    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}

function getFirstDayOfWeek(day,firstOfMonthDate) {
	
	var firstDayinMonth = firstOfMonthDate.getDay();
	return ( (firstDayinMonth <= day ? 1 : 8) + day-firstDayinMonth );
}

function stringToInt(string) {
	var i=0;
	if (string.length > 0) {
		if ( string.charAt(i)=='0' ) {			
			while( string.charAt(i++) == '0' );
			i--;
		}	
		if ( i==string.length ) return 0;		
	}	
	return parseInt( string.substring(i) );	
}

function ddmmmyyyy(date)
{		
	var day = (date.substring(0,1) == "0") ? date.substring(1,2) : date.substring(0,2);		
	date = day+" "+date.substring(2,5)+" "+date.substring(5,9);
	return new Date(Date.parse(date));
}

function mm_dd_yyyy(date)
{
	var mm = stringToInt( date.substring(0,2) );
	var dd = stringToInt( date.substring(3,5) );
	var yyyy = stringToInt( date.substring(6,10) );
	return new Date( yyyy, mm, dd );
}

function stringToDate(date)
//converts a date string to a JS Date object
{
	returnDate = null;
	millis = Date.parse(date)		
	if (!isNaN(millis)) {	
		returnDate = new Date(millis);
	} else if (date.length == 10) {				
		returnDate = mm_dd_yyyy(date);				
	} else if (date.length == 9) {			
		returnDate = ddmmmyyyy(date);
	} else { // yyyy/mm/dd and dd/mm/yyyy are parseable but yyyy-mm-dd and dd-mm-yyyy are not
		date.replace(/-/g,"/"); 
		millis = Date.parse(date)
		if (millis) returnDate = new Date(millis);
	}	
	return returnDate;
}

function dateToString(intYear,intMonth,intDay) {
	
	return sdf.format( new Date(intYear,intMonth,intDay) );
}

function isNDaysApart(start,end,n)
{  
	var startDate = stringToDate(start);
	var endDate = stringToDate(end);
 	var milliDate = (startDate.getTime()) + (n *1000*60*60*24);
	var tempDate = new Date();
  	tempDate.setTime(milliDate);
	//alert(endDate.toString() + " <= " + tempDate.toString());
 	// if end date > temp date (start date + n days) then return false
	return ( endDate.getTime() <= tempDate.getTime() );
}

function changeDay(selectedDay,n,maxDate)
{
	if (!maxDate) maxDate = new Date();
	var anyDate = stringToDate(selectedDay.value);
	//converts a 12:OO AM date to a 11:59.999 PM date n days later
	var milliDate = (anyDate.getTime()) + ( (n+1) * (1000*60*60*24) ) - 1;
	var milliTomorrow = (maxDate).getTime() + (1000*60*60*24);
	//alert(milliDate + " < " + milliTomorrow);
	// change date if less than tomorrow
	if ( milliDate < milliTomorrow ){
		var tempDate = new Date()
		tempDate.setTime(milliDate)
		selectedDay.value = sdf.format( tempDate );  
  	}  
}

function sendDay(intYear,intMonth,intDay)
{
	window.textCalendar.value = dateToString(intYear,intMonth,intDay);
	if (window.customDisplay) window.customDisplay(textCalendar);
	window.Calendar.close();
}

function clearCalendar() {
	window.textCalendar.value = ""; 
	if (window.customDisplay) window.customDisplay(textCalendar);
	window.Calendar.close();
}

function makeMonth(Calendar,intYear,intMonth,intStart,intEnd,isStartMon,isEndMon,isHighlight,highlightDate,daysOfWeek)
// this fuction gets run for every month
{
		// Initialize variables
	var i = 1;
	var daysInMon= 0;	
	var highlightDay = highlightDate.getDate();
	var highlightMonth = highlightDate.getMonth();
		
	daysInMon=getNumDays(intMonth, intYear)		

	//getting value for next/prev months inline navigation
	if ((intMonth+1)==12) {
		nextMonth = "0";
		nextYear = (intYear+1).toString();		
	} else {
		nextMonth = intMonth+1;
		nextMonth = nextMonth.toString();
		nextYear = intYear.toString();
	}
	
	if ((intMonth-1)==-1) {
		prevMonth="11";
		prevYear = (intYear-1).toString()
	} else {
		prevMonth = (intMonth-1).toString();		
		prevYear = intYear.toString();
	}
		
	Calendar.document.writeln("<table align=center CELLSPACING='0' CELLPADDING='1'>");					
	Calendar.document.writeln("<tr class='mon'><td class='mon' align=right>");	
	if (isStartMon) {
		Calendar.document.write("&nbsp;");
	}  else {	
		Calendar.document.write("<input tabindex=30 type=button onClick='opener.makeDocument(opener, self,"+prevYear+","+prevMonth+")' value='&laquo;'>");
	}  
	
	Calendar.document.write("</td><td class='mon' colspan='5' align=center>"+ thisMonth[intMonth].substring(0,3) +" "+ intYear +"</td><td class='mon' align=left>");
	
	if (isEndMon) {
		Calendar.document.write("&nbsp;");
	} else {
		Calendar.document.write("<input tabindex=30 type=button onClick='opener.makeDocument(opener, self,"+nextYear+","+nextMonth+")' value='&raquo;'>");																							
	} 
	Calendar.document.writeln("</td></tr>");
	Calendar.document.writeln("<tr>\n<td class='week'>S</td>\n<td class='week'>M</td>\n<td class='week'>T</td>\n<td class='week'>W</td>\n<td class='week'>H</td>\n<td class='week'>F</td>\n<td class='week'>S</td>\n</tr>");
	
	//getting the first day of the desired month
	currentDate = new Date(intYear,intMonth,1);
	if (daysOfWeek) {
		firstDaysOfWeekDate = new Array();		
		for (var i=0; i<daysOfWeek.length; i++) {
			firstDaysOfWeekDate[i] = getFirstDayOfWeek(daysOfWeek[i],currentDate)%7;
		}		
	}	
	firstDay = currentDate.getDay();
	Calendar.document.writeln("<tr>");
		
	//setting the cells before the first day of the month to &nbsp;
	var x=0;
	for (; x<firstDay; x++) {
		Calendar.document.writeln("<td>&nbsp;</td>");
	}
		
	var showTabIndex = false;  //start TabIndex after selected Day 
	for (i=1; i<=daysInMon; i++) {
		//creating link to sendDay function
		Calendar.document.write("<td class=");
		//checking for highlight Day
		if (isHighlight && i==highlightDay) {
			Calendar.document.write("'highlight'");
			showTabIndex = true;
		} else {
			Calendar.document.write("'day'");			
		}			
		//alert(intStart+" <= "+i+" <= "+intEnd+"   firstDays="+firstDaysOfWeekDate);
		if ((i>=intStart && i<=intEnd) && (!daysOfWeek || containedInArray(firstDaysOfWeekDate, i%7) )) {								
			Calendar.document.write("><a class='date'");
			if (showTabIndex) {
				Calendar.document.write(" tabindex=" + (i == highlightDay ? "10" : "20") );
			}	
			Calendar.document.writeln(" href='javascript:opener.sendDay("+intYear+","+intMonth+","+i+");'>"+i+"</a></td>");		
		} else {
			Calendar.document.writeln(">"+i+"</td>");		
		}
		x++;			
		if (x%7==0) {
			Calendar.document.writeln("</tr><tr>");
		}												
	} 		
	
	while (x%7 != 6) {
	//start of next month
	x++;
	}	
	
	Calendar.document.write("<tr><td colspan=7 align=center>");
	//var m = '"' + highlightMonth + '"';
	//Removing the selected button and replacing it with a clear button
	//Calendar.document.write("<input type=button onClick='opener.makeDocument(opener, self,"+m+")' value='Selected'>");
	Calendar.document.write("<input tabindex=20 type=button onClick='opener.clearCalendar();' value='Clear'>");	
	Calendar.document.write("</td></tr>");
	Calendar.document.writeln("</tr>\n</table>");			
}

function makeCalendarForDay(dayOfWeek, textObj, startDay, endDay, formatString)
{
	var daysOfWeek = new Array(1);
	var intDayOfWeek = parseInt(dayOfWeek);
	daysOfWeek[0] = intDayOfWeek;
	makeCalendarForDays(daysOfWeek, textObj, startDay, endDay, formatString)
}

function makeCalendarForDays(daysOfWeek, textObj, startDay, endDay, formatString)
{
	if (daysOfWeek && daysOfWeek.length > 0) {
		self.daysOfWeekCalendar = daysOfWeek; //making the daysOfWeek sticky
	} else {
		self.daysOfWeekCalendar = null;
	}
	validateInput(textObj, startDay, endDay, formatString);
	openCalendar(textObj, startDate, endDate, highlightDate);
}

function makeCalendar(textObj, startDay, endDay, formatString)
{
	self.daysOfWeekCalendar = null;
	validateInput(textObj, startDay, endDay, formatString);
	openCalendar(textObj, startDate, endDate, highlightDate);
}

function validateInput(textObj, startDay, endDay, formatString)
{	
	if (!formatString) {
		formatString = defaultDateFormat;
	}	
	sdf = new SimpleDateFormat(formatString)
	var highlightDay = textObj.value;
					
	if (highlightDay.length == 0) {		
		highlightDate = new Date();
	} else {
		highlightDate = stringToDate(highlightDay);
		if (!highlightDate) highlightDate = new Date();	
	} 				
	
	if (!startDay || startDay.length == 0) {
		//startDay not given, so setting to 5yrs before highlightDay
		//startDate = new Date(highlightDate.getTime());
		//startDate.setYear(startDate.getFullYear() - 5);

		//Setting the start date to Jan 01, 1995
		startDate = new Date();
		startDate.setYear(1995);
		startDate.setMonth(0);
		startDate.setDate(01);
	} else {
		startDate = stringToDate(startDay);	
	}			
	
	if (!endDay || endDay.length == 0) {
		//startDay not given, so setting to 5yrs after highlightDay
		//endDate = new Date(highlightDate.getTime());
		//endDate.setYear(endDate.getFullYear() + 5);

		//Setting end year to 5yrs after today
		endDate = new Date();
		endDate.setYear(endDate.getFullYear() + 5);
		endDate.setMonth(11);
		endDate.setDate(31);
	} else {
		endDate = stringToDate(endDay);
	}
	//alert("startDate="+startDate+"  endDate="+endDate+"highlightDate="+highlightDate);  			
}

function posX(obj) {
    var curleft = 0;
    if (document.getElementById || document.all) {
         while (obj.offsetParent) {
              curleft += obj.offsetLeft
              obj = obj.offsetParent;
         }
    }
    else if (document.layers)
         curleft += obj.x;
    return curleft;
}

function posY(obj) {
    var curtop = 0;
    if (document.getElementById || document.all) {
         while (obj.offsetParent) {
              curtop += obj.offsetTop
              obj = obj.offsetParent;
         }
    }
    else if (document.layers)
         curtop += obj.y;
    return curtop;
}

function openCalendar(textObj, startDate, endDate, highlightDate)
// textObj = (Object) the reference to the target text object from the document 
//				
// 		To parse the below date string in a manner besides the JavaScript function 
//		Date.parse(string), redefine the function 'Date stringToDate(string)' 
// startDay = (String) the first day of the Calendar
// endDay = (String) the last day of the Calendar
//
// return - once the user selects a date the selected date will appear in textObj.value
//          redefine the function 'String dateToString(Date)' to get desired date format
{	
	var winX = posX(textObj) - window.document.body.scrollLeft;
	var winY = posY(textObj) - window.document.body.scrollTop;
	var screenY = screen.height/2;
	
	if(winY > screenY)
	{
		winY=event.screenY-400;
		winX=event.screenX-100;	
	}
	
	if(winX == 0 || winY == 0) {
		self.Calendar = window.open("","Calendar","width=180,height=225,scrollbars=no");	
	} else {
		if(document.all) { // ie
	    	self.Calendar = window.open("","Calendar","width=180,height=225,scrollbars=no,left="+(window.screenLeft+winX)+",top="+(window.screenTop+winY));
		} else { // ns
    		self.Calendar = window.open("","Calendar","width=180,height=225,scrollbars=no,screenx="+(window.screenX+winX)+",screeny="+(window.screenY+winY));
		}
    }
 
	//Making the below 4 objects sticky
	self.textCalendar = textObj;	
	self.startCalendar = startDate;
	self.endCalendar = endDate;
	self.highlightCalendar = highlightDate;				
	
	//Same call changing the drop down or clicking next/prev month button makes
	makeDocument(self, self.Calendar, self.highlightCalendar.getFullYear(), self.highlightCalendar.getMonth());
}

function getStyleSheetInfo() {
	return "<style>" +
	"a.date /* day of the month links*/" +
	"{" +
	"  color: blue;" +
	"  text-decoration: none;" +
	"  font-weight: bold;" +
	"}" +
	"td.day /* font for all day cells */" +
	"{" +
	"  font-family: verdana,arial;" +
	"  font-size: 8pt;"  +
	"  text-align: right;" +
	"}" +
	"td.highlight /* background for selected day */" +
	"{" +
	"	background-color:Yellow;" +
	"	font-family: verdana,arial;" +
	"  	font-size: 8pt;" +
	"  	text-align: right;" +
	"  	font-weight: bold;" +
	"}" +
	"tr.mon /* header row for month */" +
	"{ background-color:#006400; }" +
	"td.mon /* month header */" +
	"{"	 +
	"  font-family: verdana,arial;" +
	"  font-size: 10pt;" +
	"  text-decoration: none;" +
	"  font-weight: bold;" +
	"  color: #FFFFFF;" +
	"}" +
	"td.select /* month header */" +
	"{" +	
	"  font-family: verdana,arial;" +
	"  font-size: 8pt;" +
	"  text-decoration: none;" +
	"}" +
	"td.week /* font for weekday header */" +
	"{" +
	"  font-family: verdana,arial;" +
	"  font-size: 8pt;" +
	"  text-decoration: none;" +
	"  font-weight: bold;" +
	"  text-align: right;" +
	"}" +	
	"</style>";	
}

function makeDocument(main, Calendar, displayYear, displayMonth)	
{	
	displayYear = parseInt(displayYear);
	displayMonth = parseInt(displayMonth);
	Calendar.document.open();
	
	Calendar.document.writeln("<html>");
	Calendar.document.writeln("<head>");	
	Calendar.document.writeln("<title>Calendar</title>");
	Calendar.document.writeln(getStyleSheetInfo());
	
	Calendar.document.writeln("</head>");
	Calendar.document.writeln("<body><form name=form>");		
			
	var startYear = main.startCalendar.getFullYear();
	var startMonth = main.startCalendar.getMonth();	
	var intStart = main.startCalendar.getDate();

	var endYear = main.endCalendar.getFullYear();

	var endMonth = main.endCalendar.getMonth();				
 	var intEnd = main.endCalendar.getDate();

	var highlightYear = main.highlightCalendar.getFullYear();
	var highlightMonth = main.highlightCalendar.getMonth();
		
	Calendar.document.writeln("<table CELLSPACING='0' CELLPADDING='1' align='center'>");	
	Calendar.document.writeln("<tr><td class=select width=50% align='right'>");	
	Calendar.document.writeln("<select name=selectM onchange='with (document.form) { opener.makeDocument(opener, self, selectY.options[selectY.selectedIndex].value, selectM.options[selectM.selectedIndex].value); }'>");
	
	var selectStartMonth = 0;
	var selectEndMonth = 11;
	
	if (displayYear == startYear) {
		selectStartMonth = startMonth;
	}
	if (displayYear == endYear) {
		selectEndMonth = endMonth;
	}				
		 	
	//for (i=selectStartMonth; i<=selectEndMonth; i++) {
	for (i=0; i<=11; i++) {
		Calendar.document.write("  <option value='"+i+"'");
		if (i == displayMonth) { Calendar.document.write(" selected"); }
		Calendar.document.writeln(">"+thisMonth[i].substring(0,3));
	}		
	Calendar.document.writeln("</select>");
	
	Calendar.document.writeln("</td><td class=select width=50% align='left'>");		
	
	Calendar.document.writeln("<select name=selectY onchange='with (document.form) { opener.makeDocument(opener, self, selectY.options[selectY.selectedIndex].value, selectM.options[selectM.selectedIndex].value); }'>");		

	for (i=startYear; i<=endYear; i++) {
		Calendar.document.write("  <option value='"+i+"'");
		if (i == displayYear) { Calendar.document.write(" selected"); }
		Calendar.document.writeln(">"+i);	
	}		
	Calendar.document.writeln("</select>");
				
	Calendar.document.writeln("</td></tr></table>");						
		
	var startDay = 0;
	var endDay = main.getNumDays(displayMonth, displayYear);	
	
	var isStartMon = false;
	var isEndMon = false; 
		 			
	if (displayYear <= startYear && displayMonth <= selectStartMonth) {
		startDay = (displayYear == startYear && displayMonth == selectStartMonth) ? intStart : 32;		
		isStartMon = true;
	}
	if (displayYear >= endYear && displayMonth >= selectEndMonth) {
		endDay = (displayYear == endYear && displayMonth == selectEndMonth) ? intEnd : -1;		
		isEndMon = true; 
	}		
			
	var isHighlightMon = ( displayYear == highlightYear && displayMonth == highlightMonth );	

	//alert("displayYear="+displayYear+"  displayMonth="+displayMonth+"  startDay="+startDay+"  endDay="+endDay+"\nisStartMon="+isStartMon+"  isEndMon="+isEndMon+"  isHighlightMon="+isHighlightMon+"  main.highlightCalendar="+main.highlightCalendar+"  main.daysOfWeekCalendar="+main.daysOfWeekCalendar);
	makeMonth(Calendar,displayYear,displayMonth,startDay,endDay,isStartMon,isEndMon,isHighlightMon,main.highlightCalendar,main.daysOfWeekCalendar);								
	
	Calendar.document.writeln("</form></body></html>");
	Calendar.document.close();	
  	Calendar.focus();
}

/*
(If can be text or # then over 2 symbols equals text)

Symbol			Meaning					Represents		Example
yyyy, yy 		year					#				1997, 97
MMM, MM, M		month in year			#,text			Jul, 07, 7
dd, d			day in month			#				10
EEE				day in week				text			Tue
DDD,DD			day in year				*				189
F				day of week in month	#				2 (2nd Wed in July)
w				week in year			#				27
W				week in month  			#				2
x				number suffix			text			st, nd, rd, th
*/
function SimpleDateFormat(dateFormat) {
	this.dateFormat = dateFormat;
		
	this.format = format;
//	this.parse = parse;
} 


function format(dateObj) {
	var dateString = "";
	var i = 0;
	var cnt = 0;
	var lastFormattedField=null;
	previous = this.dateFormat.charAt(0);
	for (; i<this.dateFormat.length; i++) {			
		current = this.dateFormat.charAt(i);			
		if (cnt !=0) {
			 if (current!=previous) { 
			 	lastFormattedField = formatField(dateObj,previous,cnt)
				dateString += lastFormattedField;
				cnt=0;
			} else if ( i==this.dateFormat.length-1 ) {	
				lastFormattedField = formatField(dateObj,current,cnt+1);	
				dateString += lastFormattedField;	
				break;				
			}	
		}		
		if (current == 'x') {
			var suffix = "th";
			var prefixInt = stringToInt(lastFormattedField) % 100;
			if (prefixInt < 11 || prefixInt > 13) {
				prefixInt = prefixInt % 10;
				switch (prefixInt) {
					case 1 : suffix = "st"; break;
					case 2 : suffix = "nd"; break;
					case 3 : suffix = "rd"; break;
				}
			}	
			dateString += suffix;	
		} else if ( (current >= 'A' && current <= 'Z') || (current >= 'a' && current <= 'z') )	{								
			cnt++;		
		} else if (current == "'") {
			var endTick = this.dateFormat.indexOf("'",i+1);
			dateString += this.dateFormat.substring(i+1,endTick);
			i = endTick;
		} else {
			dateString += current;
		}									
		previous = current;					
   }											
   return dateString;
}

function formatField(dateObj,symbol,cnt) {
	switch (symbol) {
		case 'y' : return year(dateObj,cnt);
		case 'M' : return monthInYear(dateObj,cnt);
		case 'd' : return dayInMonth(dateObj,cnt);
		case 'E' : return dayInWeek(dateObj,cnt);
		case 'D' : return dayInYear(dateObj,cnt);
		case 'F' : return dayOfWeekInMonth(dateObj,cnt);
		case 'w' : return weekInYear(dateObj,cnt);
		case 'W' : return weekInMonth(dateObj,cnt);
		default  : alert("This is not a valid symbol: '" + symbol + "'\n\nValid Tags:\n"+
					"'y' = Year\n"+
					"'M' = Month In Year\n"+
					"'d' = Day In Month\n"+
					"'E' = Day In Week\n"+
					"'D' = Day In Year\n"+
					"'F' = Day Of Week In Month\n"+
					"'w' = Week In Year\n"+
					"'W' = Week In Month\n" +
					"'x' = Suffix For A Number");	
	}
}		

function year(dateObj, cnt) {		 	
	if (cnt==2) {
		var str = dateObj.getFullYear() + "";
		return str.substring(str.length - 2, str.length);
	}
	else if (cnt==4) return dateObj.getFullYear();
	else alert("Acceptable year formats are yy and yyyy");
}	

function monthInYear(dateObj,cnt) {
    var monthString;
	if (cnt > 2) {
		monthString = thisMonth[dateObj.getMonth()];
		monthString = monthString.substring( 0, (monthString.length < cnt) ? monthString.length : cnt );
	} else {
		monthInt = dateObj.getMonth() + 1;
		monthString = (monthInt < 10 && cnt == 2) ? "0" + monthInt : monthInt.toString();
	}
	return monthString;	
}

function dayInMonth(dateObj,cnt) {
	if (cnt > 2) alert("Acceptable 'day in month' formats are d and dd");
	else {
		dateInt = dateObj.getDate();
		return (dateInt < 10 && cnt == 2) ? "0" + dateInt : dateInt.toString();
	}	
}

function dayInWeek(dateObj,cnt) {
	var dayString = thisDay[dateObj.getDay()];
	return dayString.substring( 0, (dayString.length < cnt) ? dayString.length : cnt );
}

function calculateDayInYear(dateObj) {
	var monthInt = dateObj.getMonth();
	var yearInt = dateObj.getFullYear();
	var i=0;
	var total = 0;
	for(; i<monthInt; i++) {
		total += getNumDays(i, yearInt);
	}
	return total + dateObj.getDate();	
}

function dayInYear(dateObj,cnt) {
	var dayInt = calculateDayInYear(dateObj);

	if (cnt>3) alert("Acceptable 'day in year' formats are D, DD and DDD");
	if (dayInt < 10 && cnt==2) return "0" + dayInt;
	else if (dayInt < 10 && cnt==3) return "00" + dayInt; 
	else if (dayInt < 100 && cnt==3) return "0" + dayInt;
	else return dayInt.toString();
}

function dayOfWeekInMonth(dateObj,cnt) {	
	if (cnt>1) alert("Acceptable 'day of week in month' format is F");	
	else {
		var dateInt = dateObj.getDate();
		var returnValue = 0;
		if (dateInt >= 7) {	returnValue = parseInt(dateInt / 7); }	
		if (dateInt % 7 > 0) { returnValue++; }
		return returnValue.toString();
	}	
}

function weekInYear(dateObj,cnt) {
	if (cnt>2) alert("Acceptable 'week in year' formats are w, ww");
	else {
		theFirstofJan = new Date( dateObj.getTime() );
		theFirstofJan.setMonth(0);
		theFirstofJan.setDate(1);
		var dayInt = theFirstofJan.getDay();
		var dayInYearInt = calculateDayInYear(dateObj);	
		var divisor = dayInYearInt + dayInt;
		var subTotal = 0;
		if (divisor >= 7) {	subTotal = parseInt( divisor / 7 ); }
		if ( divisor % 7 > 0 ) { subTotal++; }
		return  subTotal.toString();	
	}
}

function weekInMonth(dateObj,cnt) {
	if (cnt>2) alert("Acceptable 'week in month' formats are W, WW");
	else {
		theFirst = new Date( dateObj.getTime() );
		theFirst.setDate(1);
		var dayInt = theFirst.getDay();
		var dayInMonthInt = dateObj.getDate();
		var divisor = dayInMonthInt + dayInt;
		var subTotal = 0;
		if (divisor >= 7) {	subTotal = parseInt( divisor / 7 ); }
		if ( divisor % 7 > 0 ) { subTotal++; }
		return  subTotal.toString();
	}
}

