﻿//<script language="javascript"> //To temporarily view this JavaScript file in some development environments, comment out this line.
/*************************************************************************
This file 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.js"></script>

__TOC
Site Variables
DateTime Functions
    csFormatDtm(myDate, format)
    csWholeDaysUntil(yr, mo, dy)
Form Functions
    csValidDate(form)
    csValidEmail(form)
String Functions
    csEncodeSQL(str)
    csPad(str, intPlaces)
    String.prototype.trim = function()
Miscellany Functions
    csFlipImage(url)
    csInNewWindow(pstrFile, pstrWindowName, pstrWindowFeatures)
**************************************************************************/

/********* Site Variables ***********/

//DateTime variables
var cssecondinms = 1000;
var csminuteinms = cssecondinms * 60;
var cshourinms = csminuteinms * 60;
var csdayinms = cshourinms * 24;
var csweekinms = csdayinms * 7;
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"];
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 cstzdhoursofthenow= csnow.getTimezoneOffset()/60;
var cstzdminutesofthenow= csnow.getTimezoneOffset()%60;
var cstzd;
if (cstzdhoursofthenow>0) {
	cstzd="-"+ csPad(cstzdhoursofthenow,2) +":"+ csPad(cstzdminutesofthenow,2);
} else if (cstzdhoursofthenow<0) {
	cstzd="+"+ csPad(-cstzdhoursofthenow,2) +":"+ csPad(cstzdminutesofthenow,2);
}else cstzd="Z";

//50 U.S. states, PR, DC, & Canadian provinces
var csstates =
    "<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 Terr

/********* DateTime Variables ***********/

//Returns a formatted string given "now" or a JS Date object
function csFormatDtm(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 = "-"+ csPad(tzdhour,2) +":"+ csPad(tzdminute,2);
    } else if (tzdhour<0) {
    	tzd="+"+ csPad(-tzdhour,2) +":"+ csPad(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 = csPad(jsmonth+1,2)+"/"+csPad(dayofthemonth,2)+"/"+fullyear; break;
    case "MM/DD/YYYY Z":
        strDate = csPad(jsdate.getUTCMonth()+1,2) +"/"+ csPad(jsdate.getUTCDate(),2) +"/"+ jsdate.getUTCFullYear(); break;
    case "YYYY":
        strDate = fullyear; break;
    case "YYYY Z":
        strDate = jsdate.getUTCFullYear(); break;
    case "YYYY-MM":
        strDate = fullyear+"-"+csPad(jsmonth+1,2); break;
    case "YYYY-MM Z":
        strDate = jsdate.getUTCFullYear() +"-"+ csPad(jsdate.getUTCMonth()+1,2); break;
    case "YYYY-MM-DD":
        strDate = fullyear+"-"+csPad(jsmonth+1,2)+"-"+csPad(dayofthemonth,2); break;
    case "YYYY-MM-DD Z":
        strDate = jsdate.getUTCFullYear() +"-"+ csPad(jsdate.getUTCMonth()+1,2) +"-"+ csPad(jsdate.getUTCDate(),2); break;
    case "hh:mm":
        strDate = csPad(hour,2)+":"+csPad(minute,2); break;
    case "hh:mm tzd":
        strDate = csPad(hour,2)+":"+csPad(minute,2)+tzd; break;
    case "hh:mm Z":
        strDate = csPad(jsdate.getUTCHours(),2) +":"+ csPad(jsdate.getUTCMinutes(),2) +"Z"; break;
    case "hh:mm:ss":
        strDate = csPad(hour,2)+":"+csPad(minute,2)+":"+csPad(second,2); break;
    case "hh:mm:ss tzd":
        strDate = csPad(hour,2)+":"+csPad(minute,2)+":"+csPad(second,2)+tzd; break;
    case "hh:mm:ss Z":
        strDate = csPad(jsdate.getUTCHours(),2) +":"+ csPad(jsdate.getUTCMinutes(),2) +":"+ csPad(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]+", "+csPad(dayoftheweek,2)+" "+csMONTHNAME3[jsmonth]+" "+dayofthemonth+" "+
            csPad(hour,2)+":"+csPad(minute,2)+":"+csPad(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]+", "+csPad(dayoftheweek,2)+" "+csMONTHNAME3[jsmonth]+" "+dayofthemonth+" "+
            csPad(hour,2)+":"+csPad(minute,2)+":"+csPad(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()]+", "+csPad(jsdate.getUTCDate(),2)+" "+csMONTHNAME3[jsdate.getUTCMonth()]+" "+jsdate.getUTCFullYear()+" "+
            csPad(jsdate.getUTCHours(),2)+":"+csPad(jsdate.getUTCMinutes(),2)+":"+csPad(jsdate.getUTCSeconds(),2)+" GMT"; break;
    case "Ddd, dd Mmm YYYY hh:mm:ss Z":
        strDate =
            csDAYNAME3[jsdate.getUTCDay()]+", "+csPad(jsdate.getUTCDate(),2)+" "+csMONTHNAME3[jsdate.getUTCMonth()]+" "+jsdate.getUTCFullYear()+" "+
            csPad(jsdate.getUTCHours(),2)+":"+csPad(jsdate.getUTCMinutes(),2)+":"+csPad(jsdate.getUTCSeconds(),2)+" Z"; break;
    case "YYYY-MM-DDthh:mm:ss": //ISO 8601
        strDate = 
            fullyear+"-"+csPad(jsmonth+1,2)+"-"+csPad(dayofthemonth,2)+"t"+csPad(hour,2)+":"+csPad(minute,2)+":"+csPad(second,2); break;
    case "YYYY-MM-DDthh:mm:ss tzd":
        strDate = 
            fullyear+"-"+csPad(jsmonth+1,2)+"-"+csPad(dayofthemonth,2)+"t"+csPad(hour,2)+":"+csPad(minute,2)+":"+csPad(second,2)+tzd; break;
    case "YYYY-MM-DDthh:mm:ss Z":
        strDate = //'hi ISO';
            jsdate.getUTCFullYear() +"-"+ csPad(jsdate.getUTCMonth()+1,2) +"-"+ csPad(jsdate.getUTCDate(),2) +"t"+
            csPad(jsdate.getUTCHours(),2) +":"+ csPad(jsdate.getUTCMinutes(),2) +":"+ csPad(jsdate.getUTCSeconds(),2) +"Z"; break;
    }
    return strDate;
}

//Returns whole days until a provided date.
function csWholeDaysUntil(yr, mo, dy) {
	var nDate = new Date(); // current date (local)
	var nTime = nDate.getTime(); // current time (UTC)
	var dTime = Date.UTC(yr, mo - 1, dy); // specified time (UTC)
	var bTime = Math.abs(nTime - dTime)  // time difference
	return Math.round(bTime / DAY);
}

/********* Form Variables ***********/

//Validates existence and format of a date. This is a template of what would actually be on a form.
function csValidDate(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 csValidEmail(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;
        }
    }
}

/********* String Functions ***********/

//Encode a string for storing in a field in SQL
function csEncodeSQL(str) {
    var result;
    if (str=="undefined" || str=="null") result = "";
    else {
        var str1 = new String(str);
        str=str1.replace(/'/g, "''");
        result = str.trim();
    }
    return result;
}
//Pad ID (str or int) with zeros on its left.
function csPad(ID,intPlaces) {
    //assumes that places >= length
    var str = String(ID);
    var intLength = str.length;
    var intDifference = intPlaces-intLength;
    while (intDifference>0) {
        str = "0"+str;
        intDifference--;
    }
    return str;
}
//Add trim() to String object
String.prototype.trim = function() {
    return this.replace(/^\s*(\b.*\b|)\s*$/, "$1");
}

//Changes an image with another.
function csFlipImage(url) {	
    window.event.srcElement.src = url;
}

//Opens a file in a new window with provided features.
function csInNewWindow(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;
}
