/** CONTENTS ************************************

function s_FormatDate(dt)

*************************************************/
function s_SetHoverClass(parentID, tag, hoverClass) {
	var el = document.getElementById(parentID);
	if (el) {
		el = el.getElementsByTagName(tag);
		for (var i=0; i < el.length; i++) {
			el[i].onmouseover = function() {this.className += " "+ hoverClass;}
			el[i].onmouseout = function() {this.className = this.className.replace(new RegExp(" "+ hoverClass +"\\b"), "");}
		}
	}
}
function s_FormatDate(dt){
	var dtReturn
	var dt = new Date(dt);
	if (isNaN(dt)) dtReturn = ""
	else {
		var sMonth = dt.getMonth()+1
		var sDate = dt.getDate()
		sMonth = sMonth.toString();
		sDate = sDate.toString();
		if (sMonth.length < 2) sMonth = "0"+ sMonth
		if (sDate.length < 2) sDate = "0"+ sDate
		dtReturn = sMonth +"/"+ sDate +"/"+ dt.getFullYear();
	}
	return dtReturn;
}
function s_FormatTime(time, format) {
	if (time.length == 0) return "";
	time = s_IsValidTime(time)
	if (time == false) return "";
	var timeReturn = "1/1/1900 "+ time;
	timeReturn = s_FormatDateTime(timeReturn, format);
	return timeReturn;
}
function s_IsValidTime(timeStr) {
	// Checks if time is in HH:MM:SS AM/PM format.
	// Minutes, seconds and AM/PM are optional.
	if (timeStr.toLowerCase() == "noon") return "12:00 PM";
	var timePat = /^(\d{1,2})(:(\d{2}))?(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;
	var matchArray = timeStr.match(timePat);
	
	if (matchArray == null) {alert("The time entered is not in a valid format."); return false;}
	
	var hour = matchArray[1];
	var minute = matchArray[2];
	var second = matchArray[4];
	var ampm = matchArray[6];
	
	if (minute == "") {minute = ":00";}
	if (second == "") {second = null;}
	if (ampm == "") {ampm = null;}
	
	if (hour < 0  || hour > 23) {alert("The hour must be between 1 and 12 (or 0 and 23 for military time)."); return false;}
	/*
	if (hour <= 12 && ampm == null) {
		if (confirm("Please indicate which time format you are using.  OK = Standard Time, CANCEL = Military Time")) {
			alert("You must specify AM or PM."); return false;
	   }
	}
	if (hour > 12 && ampm != null) {alert("You can't specify AM or PM for military time."); return false;}
	*/
	if (minute < 0 || minute > 59) {alert("The minute must be between 0 and 59."); return false;}
	if (second != null && (second < 0 || second > 59)) {alert("The second must be between 0 and 59."); return false;}
	
	timeStr = hour + minute
	if (ampm != null) timeStr = timeStr +" "+ ampm
	return timeStr;
}
function s_GetMonthName(intMonth){
	var MonthArray = new Array("January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
	return MonthArray[intMonth];
}
function s_GetDayName(intDay){
	var DayArray = new Array("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday");
	return DayArray[intDay];
}
function s_FormatDateTime(dt, format) {
	/*
	%m Month as a decimal (2)
	%mm 2 digit Month (02)
	%B Full month name (February)
	%b Abbreviated month name (Feb )
	%d Day of the month (23)
	%dd 2 digit day of the month (23)
	%Y Year with century (1998)
	%y Year without century (98)
	%w Weekday as integer (0 is Sunday)
	%a Abbreviated day name (Fri)
	%A Weekday Name (Friday)
	%H Hour in 24 hour format (24)
	%h Hour in 12 hour format (12)
	%N Minute as an integer (01)
	%n Minute as optional if minute <> 0
	%S Second as an integer (55)
	%P AM/PM Indicator (PM)
	*/
	var re;
	var dtReturn = format;
	var dt = new Date(dt);
	if (isNaN(dt)) dtReturn = ""
	else {
		
	  //Reset one and two digit dates to 2000 + [entered year value].
	  //This is necessary because by default JavaScript assumes such dates are in the 20th century.
		var Year = dt.getYear();
		if (dt.getYear().toString().length < 4) {
			dt = new Date(dt.getYear() + 2000, dt.getMonth(), dt.getDate(), dt.getHours(), dt.getMinutes(), dt.getSeconds()) 
			s_FormatDateTime(dt, format)
		}
		
	  //Load variables
		var intMonth = dt.getMonth()+1;
		var intMonth2 = intMonth.toString();
		var strMonthName = s_GetMonthName(dt.getMonth());
		var strMonthNameShort = strMonthName;
		var intDate = dt.getDate();
		var intDate2 = intDate.toString();
		var intWeekDay = dt.getDay();
		var DayName = s_GetDayName(intWeekDay);
		var Year = dt.getYear().toString();
		var FullYear = dt.getFullYear().toString();
		var Hour = dt.getHours();
		var hour = Hour;
		var Minute = dt.getMinutes();
		var Second = dt.getSeconds();
		var AMPM = "AM"
		
		if (intMonth2.length < 2) intMonth2 = "0"+ intMonth2
		if (intDate2.length < 2) intDate2 = "0"+ intDate2
		if (strMonthNameShort.length > 5) strMonthNameShort = strMonthNameShort.substring(0,3);
		if (Year.length == 1) FullYear = "200"+ Year
		if (Year.length == 2) FullYear = "20"+ Year
		if (Hour >= 12){
			if (Hour > 12) hour = hour - 12;
			AMPM = "PM";
		}
		if (Minute == 0) {
			minute = "";
			Minute = "00";
		} else {
			if (Minute < 10) Minute = "0" + Minute;
			minute = ":" + Minute;
		}
		Minute = ":" + Minute
		
	  //Build return string
		//Month
		dtReturn = dtReturn.replace(/%mm/, intMonth2);
		dtReturn = dtReturn.replace(/%m/, intMonth);
		dtReturn = dtReturn.replace(/%B/, strMonthName);
		dtReturn = dtReturn.replace(/%b/, strMonthNameShort);
		//Date & Day
		dtReturn = dtReturn.replace(/%dd/, intDate2);
		dtReturn = dtReturn.replace(/%d/, intDate);
		dtReturn = dtReturn.replace(/%a/, DayName.substring(0,3));
		dtReturn = dtReturn.replace(/%A/, DayName);
		//Year
		dtReturn = dtReturn.replace(/%Y/, FullYear);
		dtReturn = dtReturn.replace(/%y/, FullYear.substring(2,4));
		//Time
		dtReturn = dtReturn.replace(/%H/, Hour);
		dtReturn = dtReturn.replace(/%h/, hour);
		dtReturn = dtReturn.replace(/%N/, Minute);
		dtReturn = dtReturn.replace(/%n/, minute);
		dtReturn = dtReturn.replace(/%S/, Second);
		dtReturn = dtReturn.replace(/%P/, AMPM);
	}
	return dtReturn;
}