/*                  PENNYSAVERUSA.COM GLOBAL MASTER SCRIPTS                  */
/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */
/* Notes:  Function Naming - Internally-called functions begin with _        */
//                      Externally-called functions named w/o leading _      */
//         onLoad Handling - Add calls to the chain with _addLoadEvent(func) */
/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */

/* GENERAL FUNCTIONS */
	// Shortcut getID function
	function $(elmId) {return document.getElementById(elmId);}

	// Shortuct to innerHTML
	function getHtml(elmId) {return $(elmId).innerHTML;}

	// Modifier for innerHTML
	function setHtml(elmId,strContent) {$(elmId).innerHTML = strContent;}

	// Get Elements By Class
		//ie5 support for push method on Array object
		if (typeof Array.prototype.push != "function") {
			Array.prototype.push = ArrayPush;
			function ArrayPush(value){this[this.length] = value;}
		}
	function getElementsByClassName(oElm, strTagName, oClassNames){
		/* USAGE:
			To get all a elements in the document with a “info-links” class:
				getElementsByClassName(document, "a", "info-links");
			To get all div elements within the element named “container”, with a “col” and a “left” class:
				getElementsByClassName($("container"), "div", ["col", "left"]);
		*/
		var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
		var arrReturnElements = new Array();
		var arrRegExpClassNames = new Array();
		if (typeof oClassNames == "object") for (var i=0; i<oClassNames.length; i++) arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
		var oElement;
		var bMatchesAll;
		for (var j=0; j<arrElements.length; j++) {
			oElement = arrElements[j];
			bMatchesAll = true;
			for (var k=0; k<arrRegExpClassNames.length; k++) {
				if (!arrRegExpClassNames[k].test(oElement.className)) {
					bMatchesAll = false;
					break;
				}
			}
			if (bMatchesAll) arrReturnElements.push(oElement);
		}
		return (arrReturnElements)
	}

	function _Trim(s) {
		var r = /\b(.*)\b/.exec(s); // remove char's outside of word-boundries
		return (r == null) ? "" : r[1];
	}

	//Capitalize each Word in a String
	function capWords(str) {
		return str.toLowerCase().replace(/\b[a-z]/g, toUp);
		function toUp() {return arguments[0].toUpperCase();}
	}

	// String Randomizer
	function randomizeChrs(chrsLen, upperCase, numbersInTheMix) {
		var chrsList = "abcdefghijklmnopqrstuvwxyz", tMp = "";
		if (typeof upperCase == 'boolean' && upperCase) chrsList += "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
		if (typeof numbersInTheMix == 'boolean' && numbersInTheMix) chrsList += "0123456789";
		for (i = 0; i < chrsLen; i++) tMp += chrsList.charAt(1 + Math.floor(Math.random() * chrsList.length));
		return tMp;
	}

	// onLoad Handler
	function _addLoadEvent(func) {
		var oldonload = window.onload;
		if (typeof window.onload != 'function') window.onload = func;
		else {
			window.onload = function() {
				if (oldonload) {
					oldonload();
				}
				func();
			}
		}
	}

/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */

/* Remote Scripting Variable-Setup */
	//reference - http://www.xml.com/pub/a/2005/08/19/ajax.html
	var httpRequest = null; 
	var ie = document.all;
	var ns6 = document.getElementById && !document.all;
		// set static methods to represent http states
	var httpState = new function() {};
		httpState.UNINIT = 0;
		httpState.LOADING = 1;
		httpState.LOADED = 2;
		httpState.RUNNING = 3;
		httpState.DONE = 4;
	//preload wait animation
	var rsWait = new Image(); rsWait.src = "/img/g/rs-wait.gif";

/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */

/* SITE FILM */
var df,rf=false,na=navigator.userAgent,dt=document,op=(na.indexOf('Opera')!=-1),dm=(dt.getElementById)?true:false,ie5x=(dt.all&&dm),mci=(na.indexOf('Mac')!=-1);df=((ie5x||op)&&mci);decide();function decide(){if(df){return;}else{rf=true;}}
// Enabled otherwise; disable fade effect if 'aniFadeElms' not found or if IE6 (for opacity-during-animation bug)
var aniFade = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion.split('MSIE')[1]) == 6) ? false : true;

var bodyContainerPositionAbsoluteTop = 18; //matches value set in Archetype.css
var siteFilmOpacity = 75; //Opacity Percentage Level (larger=lessTransparent | 0-100, default=66)
var siteFilmColor = "#fff"; //Film Color (named or #HEX)
var bC,sF,oSupport=false,oStyle,oEqu,cOpacity,sFsetupComplete=false;

//Toggle siteFilm
function siteFilmToggle() {
	if (typeof bC == "undefined") _siteFilmSetupElms();

	// Determine Inner Window Height
	var wInnerW=0, wInnerH=0;
	//non-IE
	if (typeof window.innerWidth == "number") {
		wInnerW = window.innerWidth;
		wInnerH = window.innerHeight;
	}
	//IE6+ in 'standards compliant mode'
	else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
		wInnerW = document.documentElement.clientWidth;
		wInnerH = document.documentElement.clientHeight;
	}
	//IE 4 compatible
	else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
		wInnerW = document.body.clientWidth;
		wInnerH = document.body.clientHeight;
	}
	// Determine how many px the window is scrolled down
	var pxScrolledFromTop = (typeof window.pageYOffset != "undefined") ? window.pageYOffset : document.documentElement.scrollTop;

	// Enable siteFilm
	if (sF.style.display == "" || sF.style.display == "none") {
		//show siteFilm
		sF.style.display = "inline";
	}
	// Disable siteFilm & remove any of these children that may exist
	else {
		//remove siteFilm Outer Container
		if (typeof sFouterCntnr == "object" && bC.hasChildNodes(sFouterCntnr)) bC.removeChild(sFouterCntnr);

		//hide siteFilm
		sF.style.display = "none";
	}
}

//Used to click 'sFouterCntnr'-elm, thus firing siteFilmToggle()
function _click_sFouterCntnr() {
	if (sFouterCntnr && typeof sFouterCntnr == "object") sFouterCntnr.click;
}

//Create bodyContainer & siteFilm objects
function _siteFilmSetupElms() {
	//Set div-objects depending on browser compatibility
	if (document.getElementById) { //Modern (OP4x, NN6+, IE5+ & OP5+)
		if ($('bodyContainer')) bC = $('bodyContainer');
		if ($('siteFilm')) sF = $('siteFilm');
	}
	else if (document.all) { //IE4x
		if (document.all["bodyContainer"]) bC = document.all["bodyContainer"];
		if (document.all["siteFilm"]) sF = document.all["siteFilm"];
	}
}

//Initialize siteFilm Height upon page-load
function _siteFilmSetup() {
	if (rf) {
		_siteFilmSetupElms();

		if (sF && bC) {
			//dynamically attach onclick Toggle to siteFilm
			if (sF.addEventListener) sF.addEventListener('click', siteFilmToggle, false); //Firefox
			else if (window.attachEvent) sF.attachEvent('onclick', siteFilmToggle); //IE

			//Check if opacity is supported and enable
			if (sF.style.opacity != undefined) { //Modern (CSS3)
				oSupport = true;
				oStyle = "style.opacity";
				oEqu = "iO/100";
	
				var iO = siteFilmOpacity;
				eval('sF.' + oStyle + ' = ' + oEqu);
			}
			else if (sF.style.filter != undefined) { //IE5+
				oSupport = true;
				oStyle = "style.filter";
				oEqu = "'alpha(opacity=' + iO + ')'";
	
				var iO = siteFilmOpacity;
				eval('sF.' + oStyle + ' = ' + oEqu);
			}
			else if (sF.style.MozOpacity != undefined) { //Older Mozilla
				oSupport = true;
				oStyle = "style.MozOpacity";
				oEqu = "iO/100";
	
				var iO = siteFilmOpacity;
				eval('sF.' + oStyle + ' = ' + oEqu);
			}
			else if (sF.style.KhtmlOpacity != undefined) { //Linux-Konquerer & MacoSupport-Safari
				oSupport = true;
				oStyle = "style.KhtmlOpacity";
				oEqu = "iO/100";
	
				var iO = siteFilmOpacity;
				eval('sF.' + oStyle + ' = ' + oEqu);
			}
			//Set siteFilm[div] backgroundColor if opacitySupported
			if (oSupport) sF.style.backgroundColor = siteFilmColor;
			//Set siteFilm[div] height to match siteContainer[div] height
			if (typeof bC.offsetHeight == "number") sF.style.height = bC.offsetHeight + bodyContainerPositionAbsoluteTop + "px";//Mozilla
			else if (typeof bC.style.pixelHeight == "number") sF.style.height = bC.style.pixelHeight + bodyContainerPositionAbsoluteTop + "px";//IE5+
		}
		sFsetupComplete = true;
	}
}
_addLoadEvent(_siteFilmSetup);

/* -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- */

/* Cross Browser Fader © 2007 John Davenport Scheuer
	details: http://www.dynamicdrive.com/forums/showthread.php?t=22494
		fade(this, 'in',100,2,50);
		fade(this, 'out',0,2,50);
	preview: http://home.comcast.net/~jscheuer1/side/files/fade_advanced.htm
*/
function fade(el, way, op, opinc, speed) { //element, 'in/out', target-opacity, opacity-increment, ms-delay
	clearTimeout(el.timer);
	if(!fade.t) fade.t=function(o){return typeof el.style[o]=='string'},
	fade.ie=el.filters&&el.filters[0], fade.ie6=fade.ie&&typeof el.filters[0].opacity=='number',
	fade.slctr=fade.t('opacity')||fade.ie6? 'opacity' : fade.t('MozOpacity')? 'MozOpacity' : fade.t('KhtmlOpacity')? 'KhtmlOpacity' : null;
	var optype=fade.ie6? el.filters[0] : el.style,
	waym=way=='in'? 1 : -1, speed=speed? speed*1 : 30, opinc=opinc&&opinc>=1? opinc*(fade.ie? 1 : .01) : opinc? opinc : fade.ie? 5 : .05,
	op=op&&fade.ie? op*1 : op&&op*1>=1? Math.min(op*.01, .99) : op? op : waym>0&&fade.ie? 100 : waym>0? .99 : 0;
	if(fade.slctr&&Math.abs(op*1-optype[fade.slctr]*1 + opinc*waym)<opinc)
	optype[fade.slctr]=op;
	else if(fade.slctr)
	optype[fade.slctr]=fade.ie6? optype[fade.slctr]*1 + opinc*waym : Math.min(optype[fade.slctr]*1 + opinc*waym, .99);
	else if (fade.ie&&Math.abs(op*1 - optype.filter.replace(/\D/g,'')*1 + opinc*waym)<opinc)
	optype.filter='alpha(opacity='+op+')';
	else if (fade.ie)
	optype.filter='alpha(opacity='+[optype.filter.replace(/\D/g,'')*1 + opinc*waym]+')';
	else
	return;
	if(optype[fade.slctr]&&optype[fade.slctr]*waym<op*waym||!fade.ie6&&fade.ie&&optype.filter.replace(/\D/g,'')*waym<op*waym)
	el.timer=setTimeout(function(){fade(el, way, op, opinc, speed)}, speed);
}