//<script language="javascript"> //To temporarily view this JavaScript file in some development environments, comment out this line.
/***********************************************************
MODIFIED: 20080512 1437
__NOTES ON csJS.asp
csJS.asp contains client side JS.
siteJS.js should be included in the <head> of every page on this site via something like this:
	script type="text/javascript" language="javascript" src="/includes/csJS.asp"
__TOC
Site Variables
____String Functions
function gPad(str,intPlaces)
function encodeSQL(str)
String.prototype.trim = function()
____Date/Time Functions
function gWholeDaysUntil(yr, mo, dy)
function formatDtm(myDate,format)
____Form Functions
function gValidDate(form)
function gValidEmail(form)
____zMisc Functions
function gFlipImage(url)
function gInNewWindow(pstrFile, pstrWindowName, pstrWindowFeatures)
Browser detection via http://www.quirksmode.org/js/detect.html as of 200805121327
***********************************************************/


/********* Site Variables ***********/
//Units of time in milliseconds
var csSECONDinMS = 1000;
var csMINUTEinMS = csSECONDinMS * 60;
var csHOURinMS = csMINUTEinMS * 60;
var csDAYinMS = csHOURinMS * 24;
var csWEEKinMS = csDAYinMS * 7;
//Arrays for name of days & monthsvar csDAYNAME = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var csDAYNAME3 = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"];
var csMONTHNAME = ["January","February","March","April","May","June","July","August","September","October","November","December"];var csMONTHNAME3 = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];
//Variables for Date & Time
var csNOW = new Date(); //Date at time of page load
var csYEARoftheNOW = csNOW.getFullYear();
var csMONTHoftheNOW = csNOW.getMonth();
var csDAYOFMONTHoftheNOW = csNOW.getDate();
var csDAYOFWEEKoftheNOW = csNOW.getDay();
var csHOURoftheNOW = csNOW.getHours();
var csMINUTEoftheNOW = csNOW.getMinutes();
var csSECONDoftheNOW = csNOW.getSeconds();
var csMILLISECONDoftheNOW = csNOW.getMilliseconds();
var csNOWinMS = csNOW.getTime();
var csVALUEOFtheNOW = csNOW.valueOf();
var csSEEDoftheNOW = csNOW.getTime() % 0xfffffff;
var csHOURSFROMGMToftheNOW = csNOW.getTimezoneOffset()/60;//50 U.S. states, PR, DC, & Canadian provinces
var gSTATES =
	"<option value=\"AL\">Alabama</option>"+
	"<option value=\"AK\">Alaska</option>"+
	"<option value=\"AB\">Alberta</option>"+
	"<option value=\"AZ\">Arizona</option>"+
	"<option value=\"AR\">Arkansas</option>"+
	"<option value=\"BC\">British Columbia</option>"+
	"<option value=\"CA\">California</option>"+
	"<option value=\"CO\">Colorado</option>"+
	"<option value=\"CT\">Connecticut" +
	"<option value=\"DE\">Delaware</option>"+
	"<option value=\"DC\">District of Columbia</option>"+
	"<option value=\"FL\">Florida</option>"+
	"<option value=\"GA\">Georgia</option>"+
	"<option value=\"HI\">Hawaii</option>"+
	"<option value=\"ID\">Idaho</option>"+
	"<option value=\"IL\" selected=\"\">Illinois</option>"+
	"<option value=\"IN\">Indiana</option>"+
	"<option value=\"IA\">Iowa</option>"+
	"<option value=\"KS\">Kansas</option>"+
	"<option value=\"KY\">Kentucky</option>"+
	"<option value=\"LA\">Louisiana</option>"+
	"<option value=\"ME\">Maine</option>"+
	"<option value=\"MB\">Manitoba</option>"+
	"<option value=\"MD\">Maryland</option>"+
	"<option value=\"MA\">Massachusetts</option>"+
	"<option value=\"MI\">Michigan</option>"+
	"<option value=\"MN\">Minnesota</option>"+
	"<option value=\"MS\">Mississippi</option>"+
	"<option value=\"MO\">Missouri</option>"+
	"<option value=\"MT\">Montana</option>"+
	"<option value=\"NE\">Nebraska</option>"+
	"<option value=\"NV\">Nevada</option>"+
	"<option value=\"NB\">New Brunswick</option>"+
	"<option value=\"NH\">New Hampshire</option>"+
	"<option value=\"NJ\">New Jersey</option>"+
	"<option value=\"NM\">New Mexico</option>"+
	"<option value=\"NY\">New York</option>"+
	"<option value=\"NF\">Newfoundland</option>"+
	"<option value=\"NC\">North Carolina</option>"+
	"<option value=\"ND\">North Dakota</option>"+
	"<option value=\"NT\">Northwest Territories</option>"+
	"<option value=\"NS\">Nova Scotia</option>"+
	"<option value=\"OH\">Ohio</option>"+
	"<option value=\"OK\">Oklahoma</option>"+
	"<option value=\"ON\">Ontario</option>"+
	"<option value=\"OR\">Oregon</option>"+
	"<option value=\"PA\">Pennsylvania</option>"+
	"<option value=\"PE\">Prince Edward Island</option>"+
	"<option value=\"PQ\">Province of Quebec</option>"+
	"<option value=\"PR\">Puerto Rico</option>"+
	"<option value=\"RI\">Rhode Island</option>"+
	"<option value=\"SK\">Saskatchewan</option>"+
	"<option value=\"SC\">South Carolina</option>"+
	"<option value=\"SD\">South Dakota</option>"+
	"<option value=\"TN\">Tennessee</option>"+
	"<option value=\"TX\">Texas</option>"+
	"<option value=\"UT\">Utah</option>"+
	"<option value=\"VT\">Vermont</option>"+
	"<option value=\"VI\">Virgin Islands</option>"+
	"<option value=\"VA\">Virginia</option>"+
	"<option value=\"WA\">Washington</option>"+
	"<option value=\"WV\">West Virginia</option>"+
	"<option value=\"WI\">Wisconsin</option>"+
	"<option value=\"WY\">Wyoming</option>"+
	"<option value=\"YT\">Yukon Territories</option>"
;
/********* String Functions ***********/
//Pad ID with zeros.
function gPad(str,intPlaces) {
	//assumes that places >= length
	var intLength = str.length;
	var intDifference = intPlaces-intLength;
	while (intDifference>0) {
		str = "0"+str;
		intDifference--;
	}
	return str;
}
//Encode a string for storing in a field in SQL
function encodeSQL(str) {
    var str1 = new String(str);
    str1=str1.replace(/'/g, "''");
    return str1.trim();
}
//Add trim() to String object
String.prototype.trim = function() {
	return this.replace(/^\s*(\b.*\b|)\s*$/, "$1");
}
/********* Date/Time Variables ***********/
//Returns whole days until a provided date.
function gWholeDaysUntil(yr, mo, dy) {
	var nDate = new Date(); // current date (local)
	var nTime = nDate.getTime(); // current time (UTC)
	var pTime = Date.UTC(yr, mo - 1, dy); // specified time (UTC)
	var bTime = Math.abs(csintTIMEoftheNOW - pTime)  // time difference
	return Math.round(bTime / gDAYinMS);
}
//Returns a formatted string given "now" or a JS Date object
function formatDtm(myDate,format) {
	var strDate = "";
	if (myDate=="now") {
	    var jsdate = new Date();
	} else {
	    var jsdate = myDate;
	    //myDate EGs: new Date("Oct 22, 1968"), new Date(), dtmX
	}
    var fullyear = jsdate.getFullYear();
    var jsmonth = jsdate.getMonth(); //0-11
    var dayofthemonth = jsdate.getDate();
    var dayoftheweek = jsdate.getDay();
    var hour = jsdate.getHours();
    var minute = jsdate.getMinutes();
    var second = jsdate.getSeconds();
    var millisecon = jsdate.getMilliseconds();
    var dtminms = jsdate.getTime();
    var valueofthedtm = jsdate.valueOf();
    var tzdhour = jsdate.getTimezoneOffset()/60;
    var tzdminute = jsdate.getTimezoneOffset()%60;
    var tzd; 
    if (tzdhour>0) {
    	tzd = "-"+ gPad(tzdhour,2) +":"+ gPad(tzdminute,2);
    } else if (tzdhour<0) {
    	tzd="+"+ gPad(-tzdhour,2) +":"+ gPad(tzdminute,2);
    } else tzd = "Z";
	switch (format) {
	case "Mmmm d, yyyy":
		strDate = csMONTHNAME[jsmonth]+" "+dayofthemonth+", "+fullyear; break;
	case "Mmmm d, yyyy Z":
		strDate = csMONTHNAME[jsdate.getUTCMonth()] +" "+ jsdate.getUTCDate() +", "+ jsdate.getUTCFullYear(); break;
	case "MM/DD/YYYY":
		strDate = gPad(jsmonth+1,2)+"/"+gPad(dayofthemonth,2)+"/"+fullyear; break;
	case "MM/DD/YYYY Z":
		strDate = gPad(jsdate.getUTCMonth()+1,2) +"/"+ gPad(jsdate.getUTCDate(),2) +"/"+ jsdate.getUTCFullYear(); break;
	case "YYYY":
		strDate = fullyear; break;
	case "YYYY Z":
		strDate = jsdate.getUTCFullYear(); break;
	case "YYYY-MM":
		strDate = fullyear+"-"+gPad(jsmonth+1,2); break;
	case "YYYY-MM Z":
		strDate = jsdate.getUTCFullYear() +"-"+ gPad(jsdate.getUTCMonth()+1,2); break;
	case "YYYY-MM-DD":
		strDate = fullyear+"-"+gPad(jsmonth+1,2)+"-"+gPad(dayofthemonth,2); break;
	case "YYYY-MM-DD Z":
		strDate = jsdate.getUTCFullYear() +"-"+ gPad(jsdate.getUTCMonth()+1,2) +"-"+ gPad(jsdate.getUTCDate(),2); break;
	case "hh:mm":
		strDate = gPad(hour,2)+":"+gPad(minute,2); break;
	case "hh:mm tzd":
		strDate = gPad(hour,2)+":"+gPad(minute,2)+tzd; break;
	case "hh:mm Z":
		strDate = gPad(jsdate.getUTCHours(),2) +":"+ gPad(jsdate.getUTCMinutes(),2) +"Z"; break;
	case "hh:mm:ss":
		strDate = gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2); break;
	case "hh:mm:ss tzd":
		strDate = gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2)+tzd; break;
	case "hh:mm:ss Z":
		strDate = gPad(jsdate.getUTCHours(),2) +":"+ gPad(jsdate.getUTCMinutes(),2) +":"+ gPad(jsdate.getUTCSeconds(),2) +"Z"; break;
	case "LocaleString":   //Usual EG: Tuesday, June 10, 2003 08:25:22 PM
		strDate = jsdate.toLocaleString(); break;
	case "Ddd, dd Mmm YYYY hh:mm:ss": //RFC 822
		strDate = 
			csDAYNAME3[dayoftheweek]+", "+gPad(dayoftheweek,2)+" "+csMONTHNAME3[jsmonth]+" "+dayofthemonth+" "+
		    gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2); break;
	case "Ddd, dd Mmm YYYY hh:mm:ss tzd":
		//strDate = jsdate.toUTCString();		//Don't use because lousy JS puts "UTC" on end by default.
		strDate = 
			csDAYNAME3[dayoftheweek]+", "+gPad(dayoftheweek,2)+" "+csMONTHNAME3[jsmonth]+" "+dayofthemonth+" "+
		    gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2)+" "+tzd; break;
	case "Ddd, dd Mmm YYYY hh:mm:ss GMT": //GMT is preferred over Z or UTC for rss.
		strDate =
			csDAYNAME3[jsdate.getUTCDay()]+", "+gPad(jsdate.getUTCDate(),2)+" "+csMONTHNAME3[jsdate.getUTCMonth()]+" "+jsdate.getUTCFullYear()+" "+
			gPad(jsdate.getUTCHours(),2)+":"+gPad(jsdate.getUTCMinutes(),2)+":"+gPad(jsdate.getUTCSeconds(),2)+" GMT"; break;
	case "Ddd, dd Mmm YYYY hh:mm:ss Z":
		strDate =
			csDAYNAME3[jsdate.getUTCDay()]+", "+gPad(jsdate.getUTCDate(),2)+" "+csMONTHNAME3[jsdate.getUTCMonth()]+" "+jsdate.getUTCFullYear()+" "+
			gPad(jsdate.getUTCHours(),2)+":"+gPad(jsdate.getUTCMinutes(),2)+":"+gPad(jsdate.getUTCSeconds(),2)+" Z"; break;
	case "YYYY-MM-DDthh:mm:ss": //ISO 8601
		strDate = 
			fullyear+"-"+gPad(jsmonth+1,2)+"-"+gPad(dayofthemonth,2)+"t"+gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2); break;
	case "YYYY-MM-DDthh:mm:ss tzd":
		strDate = 
			fullyear+"-"+gPad(jsmonth+1,2)+"-"+gPad(dayofthemonth,2)+"t"+gPad(hour,2)+":"+gPad(minute,2)+":"+gPad(second,2)+tzd; break;
    case "YYYY-MM-DDthh:mm:ss Z":
		strDate = //'hi ISO';
			jsdate.getUTCFullYear() +"-"+ gPad(jsdate.getUTCMonth()+1,2) +"-"+ gPad(jsdate.getUTCDate(),2) +"t"+
			gPad(jsdate.getUTCHours(),2) +":"+ gPad(jsdate.getUTCMinutes(),2) +":"+ gPad(jsdate.getUTCSeconds(),2) +"Z"; break;
	}
    case "YYYYMMDDhhmmss":
		strDate = //'hi ISO';
			jsdate.getUTCFullYear() +""+ gPad(jsdate.getUTCMonth()+1,2) +""+ gPad(jsdate.getUTCDate(),2) +""+
			gPad(jsdate.getUTCHours(),2) +""+ gPad(jsdate.getUTCMinutes(),2) +""+ gPad(jsdate.getUTCSeconds(),2) +""; break;
	}
	return strDate;
}
/********* Form Variables ***********/
/*Validates existence and format of a date.
This is a template of what would actually be on a form.
See ScheduleAppointment.asp for an example.*/
function gValidDate(form){
	var fld1=form.date
	var str1=fld1.value
	if (!str1){
		alert("You must enter a date.");
		fld1.focus();
		fld1.select();
		return false;
	}else{
		var dtm1=new Date(str1);
		if (isNaN(dtm1)){
			alert("Improper date format.");
			fld1.focus();
			fld1.select();
			return false; 
		}
	}
	//alert("You entered: " + dtm1);
	return true;
}
/*Validates existence and format of an email.
This is a template of what would actually be on a form. */
function gValidEmail(form) {
	var fld1=form.email
	var str1=fld1.value
	if (!str1) {
		alert("You must enter an Email Address.");
		fld1.focus();
		fld1.select();
		return false;		
	} else if (window.RegExp) { //For browsers that support RegExp
		var strReg1 = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
		var strReg2 = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";
		var reg1 = new RegExp(strReg1);
		var reg2 = new RegExp(strReg2);
		if (!reg1.test(str1) && reg2.test(str1)) {
			form;
		} else {
			alert("Improper email format.");
			fld1.focus();
			fld1.select();
			return false;
		}
	} else { //For browsers that don't support RegExp
		if (str1.indexOf("@") >= 0) {
			form;
		} else {
			alert("Improper email format.");
			fld1.focus();
			fld1.select();
			return false;
		}
	}
}
/********* zMisc Variables ***********/
//Changes an image with another.
function gFlipImage(url) {	
	window.event.srcElement.src = url;
}
//Opens a file in a new window with provided features.
function gInNewWindow(pstrFile, pstrWindowName, pstrWindowFeatures) {
	var intName;
	var intFeatures;
	var strWindowName = new String(pstrWindowName);
	var strWindowFeatures = new String(pstrWindowFeatures);
	intName = strWindowName.length;
	intFeatures = strWindowFeatures.length;
	if ((intName == 0) && (intFeatures == 0)) {
		window.open(pstrFile);
	} else if (intName == 0) {
		window.open(pstrFile, '', strWindowFeatures);
	} else if (intFeatures == 0) {
		window.open(pstrFile, strWindowName);
	} else {
		window.open(pstrFile, strWindowName, strWindowFeatures);
	}
	return false;
}
//Browser detection via http://www.quirksmode.org/js/detect.html as of 200805121327
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();
