//<script language="javascript"> //To temporarily view this JavaScript file in some development environments, comment out this line.
/*******************************************************************************************
CREATION: SiteJS.js
CREATOR: George Hernandez
NOTES: This script should be included in most pages on this site
TOC:
    Site Variables
    flipImage(url)
    inNewWindow(pstrFile, pstrWindowName, pstrWindowFeatures)
    formatDtm(myDate,format)
    gPad(intData,intPlaces)
    gSearch(form)
    ncr(iDec)
    function gExpandCollapse(Button,TargetList)
MOD LOG:
    2007-07-13 10:13:12
        Tidied up TOC.
        Added MOD LOG.
        Removed wholeDaysUntil(yr, mo, dy).
    200711061650 Added gExpandCollapse(Button,TargetList)
*******************************************************************************************/


//Site Variables

var csSECONDinMS= 1000; // the number of milliseconds in a second
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 csDAYNAME2= ["Su","Mo","Tu","We","Th","Fr","Sa"];
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="-"+ gPad(csTZDHOURSoftheNOW,2) +":"+ gPad(csTZDMINUTESoftheNOW,2);
} else if (csTZDHOURSoftheNOW<0) {
	csTZD="+"+ gPad(-csTZDHOURSoftheNOW,2) +":"+ gPad(csTZDMINUTESoftheNOW,2);
}else csTZD="Z";

//Changes an image with another.
function flipImage(url) {	
    window.event.srcElement.src = url;
}

//Opens a file in a new window with provided features.
function inNewWindow(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;
}

//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 "MM":
		strDate = gPad(jsmonth+1,2); break;
	case "DD":
		strDate = gPad(dayofthemonth,2); break;
	case "Mmmm":
		strDate = csMONTHNAME[jsmonth]; break;
	case "Mmm":
		strDate = csMONTHNAME3[jsmonth]; break;
	case "Dddd":
		strDate = csDAYNAME[dayoftheweek]; break;
	case "Ddd":
		strDate = csDAYNAME3[dayoftheweek]; 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-DD hh:mm:ss":
		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;
    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;
    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 "YYYY-MM-DD Ddd hh:mm:ss Z":
		strDate = //'hi ISO';
			jsdate.getUTCFullYear() +"-"+ gPad(jsdate.getUTCMonth()+1,2) +"-"+ gPad(jsdate.getUTCDate(),2) +" "+
			csDAYNAME3[dayoftheweek] +" "+
			gPad(jsdate.getUTCHours(),2) +":"+ gPad(jsdate.getUTCMinutes(),2) +":"+ gPad(jsdate.getUTCSeconds(),2) +"Z"; break;
	}
	return strDate;
}

//Pad ID (str or int) with zeros on its left.
function gPad(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;
}

//Used for Google search.
function gSearch(form) {
	if (form.searched[0].checked) form.q.value = form.q1.value+" site:www.somesite.com";
	else if (form.searched[1].checked) form.q.value = form.q1.value+" site:www.somesite.com"+location.pathname.substring(0,location.pathname.lastIndexOf('/')+1);
    else if (form.searched[2].checked) form.q.value = form.q1.value+" site:en.wikipedia.org";
	else form.q.value = form.q1.value;
}

//Fills prompt with CER and NCR for HTML
function ncr(iDec){
	switch(iDec){
    	case 20: prompt('The CER for _ _ (0x20) is:','&nbsp;'); break;
    	case 34: prompt('The CER for _"_ (0x22) is:','&quot;'); break;
    	case 38: prompt('The CER for _&_ (0x26) is:','&amp;'); break;
    	case 39: prompt('The CER for _\'_ (0x27) is:','&apos;'); break;
    	case 60: prompt('The CER for _<_ (0x3C) is:','&lt;'); break;
    	case 62: prompt('The CER for _>_ (0x3E) is:','&gt;'); break;
        default: prompt('The decimal NCR for _'+String.fromCharCode(iDec)+'_  (0x'+(iDec-0).toString(16).toUpperCase()+') is:', '&#'+String(iDec)+';');
	}
}

//Expands or Collapses an aqtree
function gExpandCollapse(Button,TargetList){
    var List=document.getElementById(TargetList);
    if (Button.innerHTML == "Expand All") {
        Button.innerHTML = "Collapse All";
        List.className="";
    } else {
        Button.innerHTML = "Expand All";
        List.className="aqtree3";
    }
    return false;	
}
