﻿//<!--
//Localized calendar dropdown

/*Starts the calendar dropdown
	Parameters:	CalID - the id of the href that is calling this function
							day - the day dropdown object to change
							month - the month dropdown object to change
	Dependencies:	step1scripts.xsl
								calendar.xsl
*/
var timeout = 500;
var timeoutId;
//write out the calendar div.
document.write('<div id="container"');
if (timeout) document.write(' onmouseout="calendarTimer();" onmouseover="if (timeoutId) clearTimeout(timeoutId);"');
document.write(' style="display: none;"></div>');
document.write('<iframe id="popupframe" frameborder="0" scrolling="no"></iframe>');

//create the date and calendar objects
var gCal= new Calendar();

var servermonth;
var serverday;
var sClose=closebutton;
var popup;

/*Closes the calendar after timeout (ms) has elapsed*/
function calendarTimer(){
	timeoutId=setTimeout('gCal.closeMe();',timeout);
}

/*Class Calendar encapsulates the dropdown calendar.*/
function Calendar(){
	this._iMonth	//currently selected month/year
	this._iDay		//Currently selected day
	this._endMonth;
	this._container=document.getElementById?document.getElementById('container'):document.all.container;
	this.objDay;				//reference to the day dropdown 
	this.objMonthYear;	//reference to the month dropdown
	this.objLinkedMonth; //reference to a linked Month
	this.objLinkedDay; //reference to a linked Day
	this._currentMonth=0;	//default to first item in the list

	Calendar.prototype.showCalendar=function(calID, sDay, sMonthYear, sLinkedMonth, sLinkedDay){
		//months in an array called shortMonthArray (Generated from calendar.xsl template ShortMonthlist)
		//days in an array called shortDayArray (Generated from calendar.xsl template ShortDayslist)
		try{
			this.objDay=(document.all)?document.all(sDay):document.getElementById(sDay);
			this.objMonthYear=(document.all)?document.all(sMonthYear):document.getElementById(sMonthYear);
			if(sLinkedMonth!=''){
			    this.objLinkedMonth=(document.all)?document.all(sLinkedMonth):document.getElementById(sLinkedMonth);
			}
			if(sLinkedDay!=''){
			    this.objLinkedDay=(document.all)?document.all(sLinkedDay):document.getElementById(sLinkedDay);
			}
			this._iDay=this.objDay.options[this.objDay.selectedIndex].value;
			this._iMonth=this.objMonthYear.options[this.objMonthYear.selectedIndex].value.substring(0,2)

  			servermonth=serverdate.split("/")[1];
			serverday=serverdate.split("/")[0];
          
			if(this._iDay=='00'||this._iMonth=="00"){
				//day is set to No... set to todays date
				this._iDay=serverdate.split("/")[0];
				this._currentMonth=0;	//first item in the month dropdown list
				
			}else{
				//Current month is selected from the dropdown list
				this._currentMonth=this.getCurrentMonth(this.objMonthYear.options[this.objMonthYear.selectedIndex].value);	
			}
			//Build the calendar HTML
			var calendarHTML=this.buildCalendar(this._currentMonth);
			//Get the calendar button on the page
			//Set the calendar container properties
			var left=this.getElementX(calID)+"px";
			var top=parseInt(this.getElementY(calID))+20+"px";
			if(IsIE()==true){
			    /*this.closeMe();
			    popup=window.createPopup();
			    calendarHTML='<div class="calie">'+calendarHTML+'</div>';
			    popup.document.body.innerHTML=calendarHTML;
    		    popup.document.createStyleSheet("css/core.css");
	            popup.document.body.onmouseleave=this.closeMe;
		        popup.show(0,calID.offsetHeight,140,190,calID);
                */
                //Hide overlapping drop down lists
                
                var popupframe=document.getElementById("popupframe");
                popupframe.style.left=left;
                popupframe.style.top=top;
                popupframe.style.display="block";
            
		    }	
		    this._container.innerHTML= calendarHTML;
		    this._container.style.left=left;
		    this._container.style.top=top;
		    this._container.style.zIndex=999;
		    this._container.style.display="";

		}catch(e){
			//just hide me - no errors to user...
			alert(e.message);
			this.closeMe();
		}
	}
	/* Main calendar class */
	Calendar.prototype.buildCalendar=function(iCurrentMonth) {

		//Get the current selected month
		var iMonth=this.getMonth(validMonthArray[iCurrentMonth]);
		var iYear=this.getYear(validMonthArray[iCurrentMonth]);
		//create a date object for the current selected month
		var currDate=new Date(iYear,iMonth-1,1);
		var month=currDate.getMonth()+1;
		var numDays=this.getDaysInMonth(month,iYear);
		var year=this.getFullYear(currDate);
				
		currDate.setDate(1); 

		var startDate=1;	//set to 0 for sunday, 1 for Monday, 2 for tuesday etc...
		
		var firstDay=(((currDate.getDay())+(7-startDate)) % 7);
		//build the html
		var calHTML='<table class="calTable" cellspacing="1" cellpadding="0"><tr><td height="20" width="15" ';
		//if not the first month, add a previous link
		if (iCurrentMonth>0){
			calHTML+=' onclick="javascript:gCal.movePrevious()" class="calHeadersel">&lt;&lt;';
		}else{calHTML+=' class="calHeader">'}
		calHTML+='</td><td colspan="5" width="100" class="calHeader">'+ shortMonthArray[currDate.getMonth()] +' '+year+'</td><td width="20" ';
		//if not the last month, add a next link		
		if (iCurrentMonth<validMonthArray.length-1){
			calHTML+=' onclick="javascript:gCal.moveNext()" class="calHeadersel">&gt;&gt;';
		}else{calHTML+=' class="calHeader">'}
		calHTML+='</td></tr>'
		//Add the day titles
		for(var iDay=0;iDay<7;iDay++){
			calHTML+='<td height="20" width="20">'+shortDayArray[(iDay+startDate) % 7]+'</td>';
		}
		calHTML+='</tr>';
		//for each week in a possible 6 weeks to display...
		for(var iWeek=0;iWeek<6;iWeek++){
			calHTML+='<tr>';
			//for each day in a week
			for(iDay=1;iDay<8;iDay++){
				var dayWeekPos=(iWeek*7)+iDay;		//Get the actual position in the 7 day by 6 week matrix
				var dayOffset=dayWeekPos-firstDay;	//Get the offset from the day of the week
				
				var isValidDay=(dayWeekPos>firstDay)&&(dayOffset<=numDays);	//Is the day in the proper range?
				var beforeToday=(month==servermonth&&dayOffset<serverday);	//Is the day before todays date?
				var dateToShow=(isValidDay)?dayOffset:'';	//Only show days that are in this month
						
				//Write the day as a link if appropriate
				calHTML+='<td height="20"';
				calHTML+=(isValidDay&&!beforeToday)?' class="caldaysel" onclick="javascript:gCal.selectDay('+dateToShow+',\''+validMonthArray[iCurrentMonth]+'\')"':' class="calday" ';
				calHTML+='>';
				calHTML+=dateToShow;
				//calHTML+=(isValidDay&&!beforeToday)?'</a>':'';
				calHTML+='</td>';
			}
			calHTML+='</tr>';
		}
		//write out the footer "close" link
		calHTML+='<tr><td height="20" class="calHeader">&nbsp;</td>'
		calHTML+='<td colspan="5" class="calHeadersel" onclick="javascript:gCal.closeMe()">'+sClose+'</td>'
		calHTML+='<td class="calHeader">&nbsp;</td></tr></table>'
				
		return calHTML;
	}
	
	
	Calendar.prototype.getDay = function(oDay) {		
		return oDay.options[oDay.selectedIndex].value;
	}
	Calendar.prototype.getMonYear = function(oMonYear) {		
		return oMonYear.options[oMonYear.selectedIndex].value;
	}

	/* gets the days in the month taking into account leap years */
	Calendar.prototype.getDaysInMonth=function(iMonth,iYear){
		if(iMonth==2){
			var febYear=(iMonth<=2)?iYear:iYear*1+1;
			var febDate=new Date(Date.UTC(febYear,1,29));
			return (febDate.getMonth()==1)?29:28;
		}
		else return (iMonth==4||iMonth==6||iMonth==9||iMonth==11)?30:31;
	}
	
	Calendar.prototype.getElementX=function(element){
		var x=element.offsetLeft;
		var oParent=element.offsetParent;
		while(oParent){
			x+=oParent.offsetLeft;
			oParent=oParent.offsetParent;}
		return x;
	}
	
	Calendar.prototype.getElementY=function(element){
		var y=element.offsetTop;
		var oParent=element.offsetParent;
		while(oParent){
			y+=oParent.offsetTop;
			oParent=oParent.offsetParent;}
		return y;
	}
	
	Calendar.prototype.closeMe=function(){
	    if(IsIE()==true){
           var popupframe=document.getElementById("popupframe");

	        if(popupframe){
	           popupframe.style["display"]="none";

	        }
	    }
	    this._container.style.left="";
	    this._container.style.top="";
	    this._container.style.display="none";
		
	}
	
	Calendar.prototype.movePrevious=function(){
		if(this._currentMonth>0){
			this._currentMonth--;
		}else{this._currentMonth=0;}
		var calendarHTML=this.buildCalendar(this._currentMonth);
		this._container.innerHTML= calendarHTML;
	}

	Calendar.prototype.moveNext=function(){
		if(this._currentMonth<validMonthArray.length-1){
			this._currentMonth++;
		}else{this._currentMonth=validMonthArray.length-1;}
		var calendarHTML=this.buildCalendar(this._currentMonth);
		this._container.innerHTML= calendarHTML;
	}
	
	Calendar.prototype.selectDay=function(iDay,iMonthYear){
		this.selectOption(this.objDay,iDay);
		this.selectOption(this.objMonthYear,iMonthYear);
		if(this.objLinkedMonth){
		    this.selectedMonth(iMonthYear);
		}
		if(this.objLinkedDay){
		    this.selectedDay(iDay);
		}
		this.closeMe();
	}
	
	Calendar.prototype.selectedMonth=function(iItem){
	    if (iItem>this.getMonYear(this.objLinkedMonth)){
		    this.selectOption(this.objLinkedMonth,iItem);
	    }
	}
	Calendar.prototype.selectedDay=function(iItem){
	    if (iItem>this.getDay(this.objLinkedDay)){
		    this.selectOption(this.objLinkedDay,iItem);
	    }
	}
	

	Calendar.prototype.getCurrentMonth=function(oMonthYear){
		for(var i=0;i<validMonthArray.length;i++){
			if(validMonthArray[i]==oMonthYear){return i;break;}
		}
	}
	
	Calendar.prototype.getMonth = function(sMonthYear){
		return sMonthYear.substring(0,2);
	}
	Calendar.prototype.getYear = function(sMonthYear){
		return sMonthYear.substring(2,6);
	}
	Calendar.prototype.getFullYear=function(date){
		fullyear = date.getYear();
		return (fullyear<1000)?fullyear+=1900:fullyear;
	} 
	
	Calendar.prototype.selectOption=function (pCtrl,strVal){
	    var nlCount;
	    if(pCtrl==null) return;
	    if(pCtrl.options){
		    for (nlCount=0; (nlCount < pCtrl.options.length); nlCount++) {
			    if(pCtrl.options[nlCount].value==strVal){
				    pCtrl.selectedIndex = nlCount;
				    break;
			    }
		    }
	    }
    }
    
}
function IsIE(){
    var ua=window.navigator.userAgent;
    if(ua.indexOf("MSIE")>=1&&ua.indexOf("Opera")==-1){return true;}else{return false;}
}

//-->