/* ================ MENU FUNCTIONS ================ */
var sfHover = function() {
	if(document.getElementById("menu") != null) {
		var sfEls = document.getElementById("menu").getElementsByTagName("LI");
		for (var i=0; i<sfEls.length; i++) {
			if(sfEls[i] != null) {
				sfEls[i].onmouseover=function() {
					this.className+=" sfhover";
				}
				sfEls[i].onmouseout=function() {
					this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
				}
			}
		}
	}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);

/* ================ UTILITY FUNCTIONS ================ */

/* Utility function for checking if a variable is defined in JavaScript */
	function isDefined(variable){
		return (typeof(window[variable]) ==	"undefined")?  false:true;
	}
/* Utility function is a work around a bug in IE related to element attributes */
	function hasClass(obj) {
		var result = false;
			if (obj.getAttributeNode("class") != null) {
				result = obj.getAttributeNode("class").value;
			}
		return result;
	}  
/* Utility Function that Breaks out of Frames*/
	if (self != top) top.location.replace(self.location);

/* ================ SYSTEM WIDE FUNCTIONALITY FUNCTIONS ================ */

/* Function that disables all the submit buttons when a form is submited. */
	function submitOnce(form) {
		var fitems = form.getElementsByTagName("input");
		
		for (var i = 0; i < fitems.length; i++) {
			if (fitems[i].type.toLowerCase()=='submit' || fitems[i].type.toLowerCase()=='button') {
				fitems[i].disabled = true;
			}
		}
	}

/* ================ LOOK & STYLE FUNCTIONS ================ */

/* This set of functions are used to set alt row colors. */
	function setStripes(table) {
		var even = false;
		/* Look for color arguments, if not there set defaults. */
		var evenColor = arguments[1] ? arguments[1] : "#fff";
		var oddColor = arguments[2] ? arguments[2] : "#FFFCEC";
		
		var tbodies = table.getElementsByTagName("tbody");
		
		for (var h = 0; h < tbodies.length; h++) {
			var trs = tbodies[h].getElementsByTagName("tr");

			for (var i = 0; i < trs.length; i++) {
			if (trs[i].className.toLowerCase() == 'selected' || (!hasClass(trs[i]) && !trs[i].style.backgroundColor)) {
				var tds = trs[i].getElementsByTagName("td");
				
				for (var j = 0; j < tds.length; j++) {
					if(tds[j] != null) {
						if (!hasClass(tds[j]) && !tds[j].style.backgroundColor) {
							tds[j].style.backgroundColor = even ? evenColor : oddColor;
						}
					}
				}
			}
			even =  ! even;
			}
		}
	}
	function loadStripes() {
		var x = document.getElementsByTagName('table');
		for(var i = 0;i<x.length;i++) {
			if(x[i].getAttribute != null) {
				if(x[i].getAttribute('striped')) {
					setStripes(x[i]);
				}
			}
		}
	}

/* This set of functions are used to set the table ruler. */
	var rulerLastClass  = '';

	function setRuler(table) {	
		var tbodies = table.getElementsByTagName("tbody");
		
		for (var h = 0; h < tbodies.length; h++) {
			var trs = tbodies[h].getElementsByTagName("tr");

			for (var i = 0; i < trs.length; i++) {
				if(trs[i] != null) {
					if (!trs[i].style.backgroundColor) {
						trs[i].onmouseover = function() {rulerLastClass = this.className; this.className = 'ruled'; return false;};
						trs[i].onmouseout = function() {this.className  = rulerLastClass; return false;};
					}
				}
			}
		}
	}
	function loadRuler() {
		var x = document.getElementsByTagName('table');
		for(var i = 0;i<x.length;i++) {
			if(x[i].getAttribute != null) {
				if(x[i].getAttribute('ruled')) {
					setRuler(x[i]);
				}
			}
		}
	}

/* ================ SYSTEM WIDE ONLOAD FUNCTIONS ================ */

/* This function is used to add global onLoad functions to pages without breaking previous onLoads. */
	function addLoadEvent(func) {
		var oldonload = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = func;
		} else {
			window.onload = function() {oldonload();func();}
		}
	}
/* Any on page load events for a page should be added like below. */
	addLoadEvent(loadStripes);
	addLoadEvent(loadRuler);
	
/* ================ ERROR HANDLING FUNCTIONS ================ */

/* Set what happens to a JS error when a JS error occures. */
	//window.onerror = handleJSError
	
	function handleJSError() {
		return true;
	}