// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

/*

Utitity functions


*/

function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}

document.getElementsByClassName = function(clsName){
    var retVal = new Array();
    var elements = document.getElementsByTagName("*");
    for(var i = 0;i < elements.length;i++){
        if(elements[i].className.indexOf(" ") >= 0){
            var classes = elements[i].className.split(" ");
            for(var j = 0;j < classes.length;j++){
                if(classes[j] == clsName)
                    retVal.push(elements[i]);
            }
        }
        else if(elements[i].className == clsName)
            retVal.push(elements[i]);
    }
    return retVal;
}
/*  /Utility functions */



sfHover=function() {
	var sfEls = document.getElementById("nav").getElementsByTagName("LI");
	if (sfEls[0]!=undefined) {
		for (var i=0; i<(sfEls.length); i++) {
			sfEls[i].onmouseover=function() {
				this.className+=" hover";
			}
			sfEls[i].onmouseout=function() {
				this.className=this.className.replace(new RegExp(" hover\\b"), "");
			}
		}
	}
}
if (window.attachEvent) window.attachEvent("onload", sfHover);


/* Stripey tables */

 // this function is needed to work around 
  // a bug in IE related to element attributes
  function hasClass(obj) {
     var result = false;
     if (obj.getAttributeNode("class") != undefined) {
         result = obj.getAttributeNode("class").value;
     }
     return result;
  } 

stripeytable = function() {
	var stripeytables = document.getElementsByClassName('stripey');
	if (stripeytables[0]!=undefined) {
		for (var i=0; i<(stripeytables.length); i++) {
			// the flag we'll use to keep track of 
			// whether the current row is odd or even
			var even = false;
		  
			// if arguments are provided to specify the colours
			// of the even & odd rows, then use the them;
			// otherwise use the following defaults:
			var evenColor = arguments[1] ? arguments[1] : "#fff";
			var oddColor = arguments[2] ? arguments[2] : "#f6f6f6";
		  
			// obtain a reference to the desired table
			// if no such table exists, abort
			var table = stripeytables[i];
			if (! table) { return; }
			
			// by definition, tables can have more than one tbody
			// element, so we'll have to get the list of child
			// &lt;tbody&gt;s 
			var tbodies = table.getElementsByTagName("tbody");
		
			// and iterate through them...
			for (var h = 0; h < tbodies.length; h++) {
			
			 // find all the &lt;tr&gt; elements... 
			  var trs = tbodies[h].getElementsByTagName("tr");
			  
			  // ... and iterate through them
			  for (var i = 0; i < trs.length; i++) {
		
				// avoid rows that have a class attribute
				// or backgroundColor style
				if (! hasClass(trs[i]) &&
					! trs[i].style.backgroundColor) {
				  
				  // get all the cells in this row...
				  var tds = trs[i].getElementsByTagName("td");
				
				  // and iterate through them...
				  for (var j = 0; j < tds.length; j++) {
				
					var mytd = tds[j];
		
					// avoid cells that have a class attribute
					// or backgroundColor style
					if (! hasClass(mytd) &&
						! mytd.style.backgroundColor) {
				
					  mytd.style.backgroundColor =
						even ? evenColor : oddColor;
					
					}
				  }
				}
				// flip from odd to even, or vice-versa
				even =  ! even;
			  }
			}
		}
	}
}
//Event.observe(window, 'load', stripeytable);
if (window.attachEvent) window.attachEvent("onload", stripeytable);
