var CalEvents = new Array();
var CalDayHoliday = new Array(); 
var sTargetEvent = "";
var bShowCount = false;
var sToday = new Date();
sToday = sToday.getMonth() + 1 + "/" + sToday.getDate() + "/" + sToday.getFullYear() + " 00:00:00 AM";

for (var i = 1; i <= 31; i++){CalDayHoliday[i] = "";}
function CalEvent(sID,sClass,sStartDate,sEndDate,sTitle){
	//If EndDate is blank then set it to today's date
	if (sEndDate == ""){sEndDate = sToday;}
	this.ID = sID;
	this.Class = sClass;
	this.StartDate = sStartDate;
	this.EndDate = sEndDate;
	this.MonthTitle = sTitle;
	this.WeekTitle = sTitle;
	this.DayTitle = sTitle;
	this.ToolTip = "";
	this.ToolTipWidth = 450;
	this.Days = DaysDiff(sStartDate,sEndDate);
}
//Takes two dates in mm/dd/yyyy format and gets days diff
function DaysDiff(sDate1,sDate2){
    if (sDate1.indexOf(" ") > 1){
		dDate1= Date.parse(sDate1.substring(0,sDate1.indexOf(" ")));
    }else{
		dDate1= Date.parse(sDate1);
    }     
    if (sDate2.indexOf(" ") > 1){
		dDate2= Date.parse(sDate2.substring(0,sDate2.indexOf(" ")));
    }else{
		dDate2= Date.parse(sDate2);
    }      
    //dDate2= Date.parse(sDate2);
    return Math.ceil((dDate2-dDate1)/(24*60*60*1000));
}
function DateAdd(sInterval,iNum,sDateIn){
	var dTemp = new Date(sDateIn);
	if (!sInterval || iNum == 0) return dTemp;  
	switch (sInterval.toLowerCase()){	 
		case "d":
			dTemp.setDate(dTemp.getDate() + iNum);
			break;
		case "m":
			dTemp.setMonth(dTemp.getMonth() + iNum);
			break;
		case "yyyy":
			dTemp.setFullYear(dTemp.getFullYear() + iNum);
			break;
		case "ms":
			dTemp.setMilliseconds(dTemp.getMilliseconds() + iNum);
			break;
		case "s":
			dTemp.setSeconds(dTemp.getSeconds() + iNum);
			break;
		case "mi":
			dTemp.setMinutes(dTemp.getMinutes() + iNum);
			break;
		case "h":
			dTemp.setHours(dTemp.getHours() + iNum);
			break;
  } 
  return dTemp;
}
function WriteCalendar(sEventURL,sType,sDateStart,sDateEnd){
	var iDay = 0;
	var iDayRange = 0;
	var sCurrentDate = null;
	var sRangeStart = null;
	var sRangeEnd = null;
	var sDayText = "";
	var sTempTitle = "";
	var dTempDate = null;
	var sIntervalCSS = "Cal" + sType.toUpperCase();
	var sEventURLID = "";
	//Cycle through each event
	for (var i=0; i < CalEvents.length; i++) {		
		sEventURLID = sEventURL.replace(/\[ID\]/gi,CalEvents[i].ID);
		sRangeStart = CalEvents[i].StartDate;
		sRangeEnd = CalEvents[i].EndDate;		
		//Adjust date start and end to fit into specified date range instead of event range (event spans outside of range)
		if(DaysDiff(sDateStart,sRangeStart) < 0){sRangeStart = sDateStart;}
		if(DaysDiff(sDateEnd,sRangeEnd) > 0){sRangeEnd = sDateEnd;}
		//Get the loop count
		iDayRange = DaysDiff(sRangeStart,sRangeEnd);		
		//CalEvents[i].MonthTitle += " (" + iDayRange + " DAYS)";
		for (var j=0;j<iDayRange+1;j++){
			//Add day to RangeStart
			dTempDate = DateAdd("d",j,sRangeStart);			
			iDay = dTempDate.getDate();
			if (null != document.getElementById("CalText" + iDay)){
				if(sType=="m"){
					sTempTitle = CalEvents[i].MonthTitle;
				}else if(sType=="ww"){
					sTempTitle = CalEvents[i].WeekTitle;
				}
				AddDayCount(iDay,1);
				sDayText = "<div class='"+ CalEvents[i].Class + " " + sIntervalCSS +"' onmouseover=\"ttWidth="+ CalEvents[i].ToolTipWidth +";return escape('"+ CalEvents[i].ToolTip +"')\">";
				sDayText+= "<a href='"+ sEventURLID + "'"+ sTargetEvent +">" + sTempTitle + "</a>";
				sDayText+= "</div>";
				document.getElementById("CalText" + iDay).innerHTML += sDayText;
			}
			
		}
	}
	//Write out day head text
	for (var i = 1; i < 31; i++){
		if(null != document.getElementById("CalDayHoliday" + i)){
			document.getElementById("CalDayHoliday" + i).innerHTML += CalDayHoliday[i];
		}
	}
}
function WriteDay(sEventURL,sColumns,sDateIn){
	var sEventURLID = "";
	var aColumns;
	var bRecords = false;
	//Split columns into a row
	aColumns = sColumns.split("|");
	//Write out day head text
	document.write("<div id='CalDayHoliday' class='CalDayHoliday'>" + CalDayHoliday[GetDay(sDateIn)] + "</div>");
	//Write out day	
	document.write("<table width='100%' cellpadding='1' cellspacing='1' border='0'><tr><td class='CalBG'><table width='100%' bgcolor='#888888' cellspacing='1' cellpadding='5' border='0'>");
	//Check to see if events are not past today (undeclared Event End)
	for (var i = 0; i < CalEvents.length; i++) {
		if (DaysDiff(CalEvents[i].EndDate,sDateIn) <= 0){
			bRecords = true;		
		}
	}	
	//Write out data
	if (CalEvents.length == 0 || bRecords == false){
		document.write("<tr><td class='CalOff'>No events found for this day.</td></tr>");
	}else if (sColumns != ""){
		document.write("<tr>");
		for (var i = 0; i < aColumns.length;i++){
			document.write("<td class='CalDayHead' align='center'>"+ aColumns[i] +"</td>");
		}
		document.write("</tr>");
	}
	for (var i = 0; i < CalEvents.length; i++) {
		if (DaysDiff(CalEvents[i].EndDate,sDateIn) <= 0){
			sEventURLID = sEventURL.replace(/\[ID\]/gi,CalEvents[i].ID);
			document.write("<tr class='"+ CalEvents[i].Class +"' onmouseover=\"ttWidth="+ CalEvents[i].ToolTipWidth +";return escape('"+ CalEvents[i].ToolTip +"')\">");
			document.write(CalEvents[i].DayTitle.replace(/<a>/gi,"<a href='"+ sEventURLID + "'"+ sTargetEvent +">"));
			document.write("</tr>");
		}
	}	
	document.write("</table></td></tr></table>");
}
//Cycle through all the holidays and pluck out any that match date range
function PopulateHolidays(sHolidays,sDateStart,sDateEnd){
	var aHolidays = sHolidays.split("|");
	var dDateStart = new Date(sDateStart);
	var dDateEnd = new Date(sDateEnd);
	var dDateTemp;
	for (var i = 0; i < aHolidays.length; i++) {
		dDateTemp = new Date(aHolidays[i]);
		if (dDateTemp >= dDateStart && dDateTemp <= dDateEnd){
			CalDayHoliday[dDateTemp.getDate()] = "Holiday";
		}
	}	
}
function PopulateSelect(oFieldIn,sValueList,sSelectedList){
	var aOptions = sValueList.split("|");
	var aSelects = sSelectedList.split("|");
	var iStart = oFieldIn.options.length;
	for (var i = 0; i < aOptions.length; i++) {
		oFieldIn[iStart+i] = new Option(aOptions[i],aOptions[i]);
		//Check the select array to see if this option should be selected
		for (var j=0;j<aSelects.length;j++){
			if (oFieldIn.options[iStart+i].value == aSelects[j]){
				oFieldIn.options[iStart+i].selected = true;
			}
		}
	}
	//Don't forget to select any values that might exist already in field
	for (var i = 0; i <= iStart; i++) {
		for (var j=0;j<aSelects.length;j++){
			if (oFieldIn.options[i].value == aSelects[j]){
				oFieldIn.options[i].selected = true;
			}
		}
	}	
}
function AddDayCount(iDayIn,iCountIn){
	if (bShowCount){
		//Find the current count
		var iCount = 0;
		var sTempCount = document.getElementById("CalDayCount" + iDayIn).innerHTML;
		iCount = parseInt(sTempCount.slice(0,sTempCount.indexOf(" ")));
		document.getElementById("CalDayCount" + iDayIn).innerHTML = iCount + iCountIn + " events";
	}else{
		document.getElementById("CalDayCount" + iDayIn).innerHTML = "";
	}
}
function GetDay(sDate){
	return parseInt(sDate.slice(sDate.indexOf("/")+1,sDate.lastIndexOf("/")));
}
function GetMonthName(intin){switch (intin){case 1:return "January";case 2:return "February";case 3:return "March";case 4:return "April";case 5:return "May";case 6:return "June";case 7:return "July";case 8:return "August";case 9:return "September";	case 10:return "October";case 11:return "November";case 12:return "December";}}