/*
-----------------------------------------------
howardcenter.org
Script: glassUtil.js
Author: Ben Glassman
Created: Apr 25 2007
----------------------------------------------- */

glassUtil = {
	init:function() {
		glassUtil.mailtoFix(/REMOVETHISBEFORESENDING/);
		glassUtil.preparePopups();
		glassUtil.flashReplace('home_banner', '/flash/home_banner.swf');
		glassUtil.highlightAnchors();
		//secondaryNavigation.init();
	},
	mailtoFix:function(removeText) {
		var links = document.getElementsByTagName('a');
		for (var i = 0; i < links.length; i++) {
			if (links[i].href.indexOf('mailto:') != -1) {
				links[i].href = links[i].href.replace(removeText, '');
				links[i].firstChild.nodeValue = links[i].firstChild.nodeValue.replace(removeText, '');
				links[i].firstChild.nodeValue = links[i].firstChild.nodeValue.replace(/mailto:/, '');
			}
		}
	},
	popUp:function(winURL) {
		window.open(winURL,"popup","width=320,height=480");
	},
	pdfpopUp:function(winURL) {
		window.open(winURL,"pdf","");
	},
	externalpopUp:function(winURL) {
		window.open(winURL,"external","");
	},
	preparePopups:function() {
		if (!document.getElementsByTagName) return false;
		var lnks = document.getElementsByTagName("a");
		for (var i=0; i<lnks.length; i++) {
			if (lnks[i].className == "popup") {
				lnks[i].title+= " (opens in a new window)";
				lnks[i].onclick = function() {
					glassUtil.popUp(this.getAttribute("href"));
					return false;
				}
			}
			else if (lnks[i].className == "external") {
				lnks[i].title+= " (opens in a new window)";
				lnks[i].onclick = function() {
					glassUtil.externalpopUp(this.getAttribute("href"));
					return false;
				}
			}
			else if (lnks[i].href != null && lnks[i].href.indexOf('.pdf') != -1) {
				lnks[i].title += " (opens in a new window)";
				lnks[i].onclick = function() {
					glassUtil.pdfpopUp(this.getAttribute("href"),"pdf","");
					return false;
				}
			}
		}
	},
	trimString:function(str) {
		return str.replace(/^\s*\n*\r*|\s*\n*\r*$/g,'');
	},
	flashReplace:function(target, file) {
		if (document.getElementById(target)) {		
			var so = new SWFObject(file, 'flash', '615', '114', '5', '#FFFFFF');
			so.addParam('quality', 'high');
			so.write(target);
		}
	},
	fadeUp:function(element, red, green, blue) {
		if (element.fade) {
			clearTimeout(element.fade);
		}
		element.style.backgroundColor = 'rgb('+red+','+green+','+blue+')';
		if (red == 255 && green == 255 && blue == 255) {
			return;
		}
		var newred = red + Math.ceil((255-red)/10);
		var newgreen = green + Math.ceil((255-green)/10);
		var newblue = blue + Math.ceil((255-blue)/10);
		var repeat = function() {
			glassUtil.fadeUp(element, newred, newgreen, newblue);
		}
		element.fade = setTimeout(repeat, 100);
	},
	highlightAnchors:function() {
		var location = window.location.href;
		if (window.location.href.indexOf('#') != -1) {
			var id = window.location.href.substring(window.location.href.indexOf('#') + 1);
			if (!document.getElementById(id)) { return; }
			var anchor = document.getElementById(id);
			glassUtil.fadeUp(anchor, 255, 255, 153);
		}
	}
	
}

glassDOM = {
	addEvent:function(elm, evType, fn, useCapture){
		if (elm.addEventListener){
			elm.addEventListener(evType, fn, useCapture);
			return true;
		} else if (elm.attachEvent) {
			var r = elm.attachEvent('on' + evType, fn);
			return r;
		} else {
			elm['on' + evType] = fn;
		}
	},
	getTarget:function(e){
		var target = window.event ? window.event.srcElement : e ? e.target : null;
		if (!target){return false;}
		while(target.nodeType!=1 && target.nodeName.toLowerCase()!='body'){
			target=target.parentNode;
		}
		return target;
	},
	cancelClick:function(e){
		if (window.event){
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
		if (e && e.stopPropagation && e.preventDefault){
			e.stopPropagation();
			e.preventDefault();
		}
	},
	addClass:function(element, value) {
		if (!element.className) {
			element.className = value;
		} else {
			newClassName = element.className;
			newClassName+= " ";
			newClassName+= value;
			element.className = newClassName;
		}
	},
	removeClass:function(element, value) {
		var rep = element.className.match(' '+value)?' '+value:value;
		element.className = element.className.replace(rep,'');
	},
	/*
    getElementsByClassName
    Written by Jonathan Snook, http://www.snook.ca/jonathan
    Add-ons by Robert Nyman, http://www.robertnyman.com
	*/
	getElementsByClassName:function(oElm, strTagName, oClassNames){
		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|$)"));
			}
		}
		else{
			arrRegExpClassNames.push(new RegExp("(^|\\s)" + oClassNames.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)
	}
}

secondaryNavigation = {
	init:function() {
		if (!document.getElementById) { return; }
		secondaryNavigation.prepareNavigation();
	},
	prepareNavigation:function() {
		if (glassDOM.getElementsByClassName(document.getElementById('content'), 'ul', 'secondary_navigation').length == 0) {
			return;
		}
		var navigationLIs = glassDOM.getElementsByClassName(document.getElementById('content'), 'ul', 'secondary_navigation')[0].getElementsByTagName('li');
		for (var i = 0; i < navigationLIs.length; i++) {
			glassDOM.addEvent(navigationLIs[i], 'mouseover', secondaryNavigation.navRoll, false);
			glassDOM.addEvent(navigationLIs[i], 'mouseout', secondaryNavigation.navRoll, false);
			glassDOM.addEvent(navigationLIs[i], 'click', secondaryNavigation.navRoll, false);
		}
	},
	navRoll:function(e) {
		var target = glassDOM.getTarget(e);
		while (target.nodeName.toUpperCase() != 'LI' || target.parentNode.className.indexOf('secondary_navigation') == -1) {
			target = target.parentNode;
		}
		var a = target.getElementsByTagName('a')[0];
		if (!a) { return; }
		switch (e.type) {
			case 'mouseover':
			glassDOM.addClass(target, 'over');
			break;
			case 'mouseout':
			glassDOM.removeClass(target, 'over');
			break;
			case 'click':
			window.location = a.href;
			break;
		}
	}
}

glassDOM.addEvent(window, 'load', glassUtil.init, false);

// ---
// Array support for the push method in IE 5
if(typeof Array.prototype.push != "function"){
	Array.prototype.push = ArrayPush;
	function ArrayPush(value){
		this[this.length] = value;
	}
}
// ---
/*
	Examples of how to call the function:
	
	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(document.getElementById("container"), "div", ["col", "left"]);
*/
// ---