/*
##########################################
------------------------------------------
Company: MCS Business Technologies, Inc.
File: calendar.js
Dependencies: tjmlib.js
TODO: combine this 2 files

Purpose: provide date picking functionality
Date: 2004.08.13


Note:  This code was found in the PFHA application
within any mention to its original author.  So our
apologies to this one.
The date mentioned above is the day the this code
was modified to fix select bleed through in IE.
'selectEl' param's presence indicates where changes
have been made.
-- PAB
-------------------------------------------
###########################################
*/

isIE = (document.all ? true : false);
isDOM = (document.getElementById ? true : false);

// Initialize arrays.
var months = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
var daysInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var displayMonth = new Date().getMonth();
var displayYear = new Date().getFullYear();
var displayDivName;
var displayElement;

function getDays(month, year) {
	// Test for leap year when February is selected.
	if (1 == month)
		return ((0 == year % 4) && (0 != (year % 100))) || (0 == year % 400) ? 29 : 28;
	else
		return daysInMonth[month];
}

function getToday() {
// Generate today's date.
	this.now = new Date();
	this.year = this.now.getFullYear();
	this.month = this.now.getMonth();
	this.day = this.now.getDate();
}

// Start with a calendar for today.
today = new getToday();

function newCalendar(eltName,attachedElement, selectEl) {
	if (attachedElement) {
		if (displayDivName && displayDivName != eltName) hideElement(displayDivName);
			displayElement = attachedElement;
	    }
	displayDivName = eltName;
	today = new getToday();
	var parseYear = parseInt(displayYear + '');
	var newCal = new Date(parseYear,displayMonth,1);
	var day = -1;
	var startDayOfWeek = newCal.getDay();
	if ((today.year == newCal.getFullYear()) && (today.month == newCal.getMonth())) {
		day = today.day;
	}
	var intDaysInMonth =
	getDays(newCal.getMonth(), newCal.getFullYear());
	var daysGrid = makeDaysGrid(startDayOfWeek,day,intDaysInMonth,newCal,eltName, selectEl)
	if (isIE) {
		var elt = document.all[eltName];
		elt.innerHTML = daysGrid;
	} else if (isDOM) {
		var elt = document.getElementById(eltName);
		elt.innerHTML = daysGrid;
	} else {
		var elt = document.layers[eltName].document;
		elt.open();
		elt.write(daysGrid);
		elt.close();
	}
}

function incMonth(delta,eltName) {
	displayMonth += delta;
	if (displayMonth >= 12) {
		displayMonth = 0;
		incYear(1,eltName);
	} else if (displayMonth <= -1) {
		displayMonth = 11;
		incYear(-1,eltName);
	} else {
		newCalendar(eltName);
	}
}

function incYear(delta,eltName) {
	displayYear = parseInt(displayYear + '') + delta;
	newCalendar(eltName);
}

function makeDaysGrid(startDay,day,intDaysInMonth,newCal,eltName, selectEl) {
	var daysGrid;
	var month = newCal.getMonth();
	var year = newCal.getFullYear();
	var isThisYear = (year == new Date().getFullYear());
	var isThisMonth = (day > -1)
	daysGrid = '<table border=1 cellspacing=0 cellpadding=2><tr><td bgcolor=#ffffff nowrap>';
	daysGrid += '<font face="courier new, courier" size=2>';
	if( selectEl){
		daysGrid += '<a href="javascript:hideElement(\'' + eltName + '\');javascript:showElement(\'' + selectEl + '\');">x</a>';
		
	} else {
		daysGrid += '<a href="javascript:hideElement(\'' + eltName + '\');">x</a>';
	}	
		daysGrid += '&nbsp;&nbsp;';
		daysGrid += '<a href="javascript:incMonth(-1,\'' + eltName + '\')">&laquo; </a>';

	daysGrid += '<b>';
	if (isThisMonth) { 
		daysGrid += '<font color=red>' + months[month] + '</font>'; 
	} else { 
		daysGrid += months[month]; 
	}
	daysGrid += '</b>';

	daysGrid += '<a href="javascript:incMonth(1,\'' + eltName + '\')"> &raquo;</a>';
	daysGrid += '&nbsp;&nbsp;&nbsp;';
	daysGrid += '<a href="javascript:incYear(-1,\'' + eltName + '\')">&laquo; </a>';

	daysGrid += '<b>';
	if (isThisYear) { 
		daysGrid += '<font color=red>' + year + '</font>'; 
	} else { 
		daysGrid += ''+year; 
	}
	daysGrid += '</b>';

	daysGrid += '<a href="javascript:incYear(1,\'' + eltName + '\')"> &raquo;</a><br>';
	daysGrid += '&nbsp;Su Mo Tu We Th Fr Sa&nbsp;<br>&nbsp;';
	var dayOfMonthOfFirstSunday = (7 - startDay + 1);
	for (var intWeek = 0; intWeek < 6; intWeek++) {
		var dayOfMonth;
		for (var intDay = 0; intDay < 7; intDay++) {
			dayOfMonth = (intWeek * 7) + intDay + dayOfMonthOfFirstSunday - 7;
			if (dayOfMonth <= 0) {
				daysGrid += "&nbsp;&nbsp; ";
			} else if (dayOfMonth <= intDaysInMonth) {
				var color = "blue";
				if (day > 0 && day == dayOfMonth) color="red";
				daysGrid += '<a href="javascript:setDay(';
				if(selectEl){
					daysGrid += dayOfMonth + ',\'' + eltName + '\',\'' + selectEl + '\')" '
				} else {
					daysGrid += dayOfMonth + ',\'' + eltName + '\')" '
				}
				daysGrid += 'style="color:' + color + '">';
				var dayString = dayOfMonth + "</a> ";
				if (dayString.length == 6) dayString = '0' + dayString;
				daysGrid += dayString;
			}
		}
		if (dayOfMonth < intDaysInMonth) daysGrid += "<br>&nbsp;";
	}
	return daysGrid + "</td></tr></table>";
}

function setDay(day,eltName,selectEl) {
	//JJR 11.13.2003 - added next to make sure month and day are always 2 positions
	var dayString = day;
	var monthString = (displayMonth + 1);
	if (dayString < 10){
		dayString = '0' + dayString;
	}
	if (monthString < 10) {
		monthString = '0' + monthString;
	}
	//JJR 11.13.2003 - end jjr add
	//JJR 11.13.2003 - changed next line to use new variables
	//displayElement.value = (displayMonth + 1) + "/" + day + "/" + displayYear;
	displayElement.value = monthString + "/" + dayString + "/" + displayYear;
	hideElement(eltName);
	if(selectEl)showElement(selectEl);
}
	 

function fixPosition(divname) {
	divstyle = getDivStyle(divname);
	positionerImgName = divname + 'Pos';
	// hint: try setting isPlacedUnder to false
	isPlacedUnder = false;
	if (isPlacedUnder) {
		setPosition(divstyle,positionerImgName,true);
	} else {
		setPosition(divstyle,positionerImgName)
	}
}

function toggleDatePicker(eltName,formElt,selectEl) {
  	var x = formElt.indexOf('.');
  	var formName = formElt.substring(0,x);
  	var formEltName = formElt.substring(x+1);
  	if(selectEl){
  		
		newCalendar(eltName,document.forms[formName].elements[formEltName],selectEl);
		hideElement(selectEl); 
		}else{
		
		newCalendar(eltName,document.forms[formName].elements[formEltName]);
		
	}	
  
  	toggleVisible(eltName);
 
}
