/*
	Module      	scripts/calendar.js

	Description		Handles creation and display of a date selection calendar
	
	Change History
	Date             	  Edit     Author    	Comment
	------------------+---------+------------+---------------------------------------------
	01-Aug-01   [100]     PAC      Created
	------------------+---------+------------+---------------------------------------------
*/

	var use_css=false;
	var use_layers=false;   

	if (document.all)    { use_css    = true; }
	if (document.layers) { use_layers = true; }

	var CALWINDOW;

	// Write out default styles to document or return string
	function writestyles(doc) 
	{
		/*
			Parameters      

			Description		

			Returns			
											
			Change History
			Date             	  Edit     Author    	Comment
			------------------+---------+------------+---------------------------------------------
			16-May-00   [100]     PAC      Created
			------------------+---------+------------+---------------------------------------------
		*/

		var result = "";
		
		result += "<STYLE>\n";
		result += "TD.cal { font-family:arial; font-size: 8pt; }\n";
		result += "TD.calmonth { font-family:arial; font-size: 8pt; text-align: right;}\n";
		result += "TD.caltoday { font-family:arial; font-size: 8pt; text-align: right; color: white; background-color:#C0C0C0; border-width:1; border-type:solid; border-color:#800000; }\n";
		result += "INPUT.caltoday { font-family:arial; font-size: 8pt; width:47px; height: 20px; }\n";
		result += "A.cal { text-decoration:none; color:#000000; }\n";
		result += "A.calthismonth { text-decoration:none; color:#000000; }\n";
		result += "A.calothermonth { text-decoration:none; color:#808080; }\n";
		result += "</STYLE>\n";
		
		if (doc != "") 
			doc.write(result);
		else 
			return result;
	}

	writestyles(this.document);

	function getOffsetLeft (el) 
	{
		/*
			Parameters      

			Description		

			Returns			
											
			Change History
			Date             	  Edit     Author    	Comment
			------------------+---------+------------+---------------------------------------------
			16-May-00   [100]     PAC      Created
			------------------+---------+------------+---------------------------------------------
		*/

		var ol = el.offsetLeft - el.scrollLeft;

		while ((el = el.offsetParent) != null) 
		{ 
			ol += el.offsetLeft - el.scrollLeft; 
		}
		
		return ol;
	}

	function getOffsetTop (el) 
	{
		/*
			Parameters      

			Description		

			Returns			
											
			Change History
			Date             	  Edit     Author    	Comment
			------------------+---------+------------+---------------------------------------------
			16-May-00   [100]     PAC      Created
			------------------+---------+------------+---------------------------------------------
		*/

		var ot = el.offsetTop - el.scrollTop;

		while((el = el.offsetParent) != null) 
		{ 
			ot += el.offsetTop - el.scrollTop; 
		}
		
		return ot;
	}

	function showCalendar(divname, anchorname, functionname) 
	{
		/*
			Parameters      

			Description		

			Returns			
											
			Change History
			Date             	  Edit     Author    	Comment
			------------------+---------+------------+---------------------------------------------
			16-May-00   [100]     PAC      Created
			------------------+---------+------------+---------------------------------------------
		*/

		// Find position relative to anchor
		if (use_css) 
		{
			var x = getOffsetLeft(document.all[anchorname]);
			var y = getOffsetTop(document.all[anchorname]);
		}
		else if (use_layers) 
		{
			var found=0;
		
			for (var i=0; i<document.anchors.length; i++) 
			{
				if (document.anchors[i].name == anchorname) 
				{
					found=1;
					break;
				}
			}
			
			if (found == 0) 
			{
				return;
			}
			
			var x = document.anchors[i].x;
			var y = document.anchors[i].y;
		}
		else 
		{
			return;
		}
		
		//x = x-152;
		//y = y+25;
		
		// WRITE CALENDAR TO DIV
		if (divname != "") 
		{
			// Position the calendar DIV
			if (use_layers) 
				var calendardiv = document.layers[divname]; 
			
			if (use_css)    
				var calendardiv = document.all[divname].style;
				
			calendardiv.left = x;
			calendardiv.top  = y;
			
			// Write output to calendar DIV
			if (arguments.length>4) 
				outputCalendar(divname,functionname,arguments[3],arguments[4]);
			else 
				outputCalendar(divname,functionname);
			
			// Show the calendar DIV
			calendardiv.visibility = "visible";
		}
		
		// WRITE CALENDAR TO POPUP WINDOW
		else 
		{
			if (use_layers) 
			{
				var windowx = window.screenX;
				var windowy = window.screenY + (window.outerHeight-24-window.innerHeight);
			}
			
			if (use_css) 
			{
				var windowx = window.screenLeft;
				var windowy = window.screenTop;
			}
			
			x = x + windowx;
			y = y + windowy;
			
			if (!CALWINDOW || CALWINDOW.closed) 
			{
				var windowprops = "toolbar=0,location=0,directories=0,status=0, " +
								  "menubar=0,scrollbars=0,resizable=0,titlebar=0,title='calendar'," + 
								  "width=150,height=150,screenX="+x+",left="+x+",screenY="+y+",top="+y+""

				CALWINDOW = window.open("", "calwindow", windowprops);
			}
			
			// Write output to popup window
			if (arguments.length>4) 
			{ 
				outputCalendar(divname,functionname,arguments[3],arguments[4]);
			}
			else 
			{
				outputCalendar(divname,functionname);
			}
		}
	}

	function hideCalendar(divname) 
	{
		/*
			Parameters      

			Description		

			Returns			
											
			Change History
			Date             	  Edit     Author    	Comment
			------------------+---------+------------+---------------------------------------------
			16-May-00   [100]     PAC      Created
			------------------+---------+------------+---------------------------------------------
		*/

		if (divname != "") 
		{
			if (use_layers) 
				var calendardiv = document.layers[divname]; 
			
			if (use_css)    
				var calendardiv = document.all[divname].style;
				
			calendardiv.visibility = "hidden";
		}
		else 
		{
			if (CALWINDOW && !CALWINDOW.closed) 
				CALWINDOW.close();
		}
	}
		
	function outputCalendar(divname, functionname) 
	{
		/*
			Parameters      

			Description		

			Returns			
											
			Change History
			Date             	  Edit     Author    	Comment
			------------------+---------+------------+---------------------------------------------
			16-May-00   [100]     PAC      Created
			------------------+---------+------------+---------------------------------------------
		*/

		var now = new Date();
		
		if (arguments.length > 2) 
			var month = arguments[2]; 
		else 
			var month = now.getMonth()+1;
			
		if (arguments.length > 3) 
			var year = arguments[3];
		else 
			var year = now.getFullYear();
			
		var monthnames = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
		var daysinmonth= new Array(0,31,28,31,30,31,30,31,31,30,31,30,31);

		if ( ( (year%4 == 0)&&(year%100 != 0) ) || (year%400 == 0) ) 
		{
			// leap year
			daysinmonth[2] = 29;
		}
		
		var current_month = new Date(year,month-1,1);
		
		var display_year = year;
		var display_month = month;
		var display_date = 1;

		var offset = 0;
		var weekday= current_month.getDay();
		
		if (weekday > 0) 
		{
			display_month--;
		
			if (display_month < 1) 
			{ 
				display_month = 12; 
				display_year--; 
			}
			
			display_date = daysinmonth[display_month]-weekday+1;
		}
		
		var next_month = month+1;
		var next_month_year = year;
		
		if (next_month > 12) 
		{ 
			next_month=1; 
			next_month_year++; 
		}
		
		var last_month = month-1;
		var last_month_year = year;
		
		if (last_month < 1) 
		{ 
			last_month=12; 
			last_month_year--; 
		}
		
		var date_class;
		var result = "";
		
		if (divname == "" ) 
			var windowref = "window.opener.";
		else 
			var windowref = "";
		
		// If POPUP, write entire HTML document
		if (divname == "") 
		{
			result += "<HTML>";
			result += "<HEAD>";
			result += writestyles('');
			result += "<title>Calendar            </title>";
			result += "</HEAD>";
			result += "<BODY MARGINWIDTH=0 MARGINHEIGHT=0 TOPMARGIN=0 RIGHTMARGIN=0 LEFTMARGIN=0>";
		}
		
		result += '<FORM>';
		
		if (divname != "") 
		{
			result += '<TABLE WIDTH=144 BORDER=1 BORDERWIDTH=1 BORDERCOLOR="#808080" CELLSPACING=0 CELLPADDING=1>';
			result += '<TR><TD ALIGN=CENTER>';
			result += '<CENTER>';
			result += '<TABLE WIDTH=144 BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>';
		}
		else 
			result += '<CENTER><TABLE WIDTH=100% BORDER=0 BORDERWIDTH=0 CELLSPACING=0 CELLPADDING=0>';
		
		result += '<TR BGCOLOR="#C0C0C0">';
		result += '	<TD CLASS="cal" WIDTH=22 ALIGN=CENTER VALIGN=MIDDLE><B><A CLASS="cal" HREF="javascript:'+windowref+'outputCalendar(\''+divname+'\',\''+functionname+'\','+last_month+','+last_month_year+')"><<</A></B></TD>';
		result += '	<TD CLASS="cal" WIDTH=100 ALIGN=CENTER>'+monthnames[month-1]+' '+year+'</TD>';
		result += '	<TD CLASS="cal" WIDTH=22 ALIGN=CENTER VALIGN=MIDDLE><B><A CLASS="cal" HREF="javascript:'+windowref+'outputCalendar(\''+divname+'\',\''+functionname+'\','+next_month+','+next_month_year+')">>></A></B></TD>';
		result += '</TR>';
		result += '</TABLE>';
		result += '<TABLE WIDTH=120 BORDER=0 CELLSPACING=1 CELLPADDING=0 ALIGN=CENTER>';
		result += '<TR>';
		result += '	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>S</TD>';
		result += '	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>M</TD>';
		result += '	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>T</TD>';
		result += '	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>W</TD>';
		result += '	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>T</TD>';
		result += '	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>F</TD>';
		result += '	<TD CLASS="cal" ALIGN=RIGHT WIDTH=14%>S</TD>';
		result += '</TR>';
		result += '<TR><TD COLSPAN=7 ALIGN=CENTER><IMG SRC="graypixel.gif" WIDTH=120 HEIGHT=1></TD></TR>';
		
		for (var row=1; row<=6; row++) 
		{
			result += '<TR>';
			
			for (var col=1; col<=7; col++) 
			{
				if (display_month == month) 
					date_class = "calthismonth";
				else 
					date_class = "calothermonth";
				
				if ((display_month == now.getMonth()+1) && (display_date==now.getDate()) && (display_year==now.getFullYear())) 
					td_class="caltoday";
				else 
					td_class="calmonth";
				
				result += '	<TD CLASS="'+td_class+'"><A HREF="javascript:'+windowref+functionname+'('+display_year+','+display_month+','+display_date+');'+windowref+'hideCalendar(\''+divname+'\');" CLASS="'+date_class+'">'+display_date+'</A></TD>';
				display_date++;
				
				if (display_date > daysinmonth[display_month]) 
				{
					display_date=1;
					display_month++;
				}
				
				if (display_month > 12) 
				{
					display_month=1;
					display_year++;
				}
			}
			
			result += '</TR>';
		}
		
		result += '<TR><TD COLSPAN=7 ALIGN=CENTER><IMG SRC="graypixel.gif" WIDTH=120 HEIGHT=1></TD></TR>';
		result += '<TR>';
		result += '	<TD COLSPAN=7 ALIGN=CENTER>';
		result += '		<INPUT CLASS="caltoday" TYPE="button" VALUE="Today" onClick="'+windowref+functionname+'(\''+now.getFullYear()+'\',\''+(now.getMonth()+1)+'\',\''+now.getDate()+'\');'+windowref+'hideCalendar(\''+divname+'\');">';
		result += '		<BR>';
		result += '	</TD>';
		result += '</TR>';
		result += '</TABLE>';
		result += '</CENTER>';
		result += '</TD></TR>';
		result += '</TABLE>';
		result += '</FORM>';
		
		if (divname == "") 
			result += "</BODY></HTML>";
		
		if (divname != "") 
		{	
			if (use_css) 
				document.all[divname].innerHTML = result;

			if (use_layers) 
			{
				var thedoc = document.layers[divname].document;

				thedoc.open;
				thedoc.write(result);
				thedoc.close();
			}
		}
		else 
		{
			CALWINDOW.document.open();
			CALWINDOW.document.write(result);
			CALWINDOW.document.close();
		}
	}
