/*
Returns an array containing all elements having the given class
http://code.google.com/p/getelementsbyclassname/

className
    One or several class names, separated by space. Multiple class names demands that each match have all of the classes specified. Mandatory.
tag
    Specifies the tag name of the elements to match. Optional.
elm
    Reference to a DOM element to look amongst its children for matches. Recommended for better performance in larger documents. Optional. 
*/
var getElementsByClassName = function (className, tag, elm){
	if (document.getElementsByClassName) { /* newer browsers may have this fxn implemented already, so check first */
		getElementsByClassName = function (className, tag, elm) {
			elm = elm || document;
			var elements = elm.getElementsByClassName(className),
				nodeName = (tag)? new RegExp("\\b" + tag + "\\b", "i") : null,
				returnElements = [],
				current;
			for(var i=0, il=elements.length; i<il; i+=1){
				current = elements[i];
				if(!nodeName || nodeName.test(current.nodeName)) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	else if (document.evaluate) {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = "",
				xhtmlNamespace = "http://www.w3.org/1999/xhtml",
				namespaceResolver = (document.documentElement.namespaceURI === xhtmlNamespace)? xhtmlNamespace : null,
				returnElements = [],
				elements,
				node;
			for(var j=0, jl=classes.length; j<jl; j+=1){
				classesToCheck += "[contains(concat(' ', @class, ' '), ' " + classes[j] + " ')]";
			}
			try	{
				elements = document.evaluate(".//" + tag + classesToCheck, elm, namespaceResolver, 0, null);
			}
			catch (e) {
				elements = document.evaluate(".//" + tag + classesToCheck, elm, null, 0, null);
			}
			while ((node = elements.iterateNext())) {
				returnElements.push(node);
			}
			return returnElements;
		};
	}
	else {
		getElementsByClassName = function (className, tag, elm) {
			tag = tag || "*";
			elm = elm || document;
			var classes = className.split(" "),
				classesToCheck = [],
				elements = (tag === "*" && elm.all)? elm.all : elm.getElementsByTagName(tag),
				current,
				returnElements = [],
				match;
			for(var k=0, kl=classes.length; k<kl; k+=1){
				classesToCheck.push(new RegExp("(^|\\s)" + classes[k] + "(\\s|$)"));
			}
			for(var l=0, ll=elements.length; l<ll; l+=1){
				current = elements[l];
				match = false;
				for(var m=0, ml=classesToCheck.length; m<ml; m+=1){
					match = classesToCheck[m].test(current.className);
					if (!match) {
						break;
					}
				}
				if (match) {
					returnElements.push(current);
				}
			}
			return returnElements;
		};
	}
	return getElementsByClassName(className, tag, elm);
};



/* 
	Highlights elements on a page by changing their bgrd & font color. Intended to highlight all cells in a schedule table matching selected nationality 
	Designed for use with Eurocup2008, OMNI1 and OMNI2 schedules. 
	Last update June 4, 2008
	
	elementsToChange: array containing html page elements - Note that all elements in array should have the same class but we do NOT check for this!
	disableFlag: if == "true", removes all existing highlighting for that class instead 
*/
function switchColor (elementsToChange, disableFlag) {

	if (disableFlag == "true") {
			// want to remove highlighting
			bgColor = '#464444';
			ftColor = '#EEECD8';
	} else {
		// want to apply highlighting
			bgColor = '#7F1217';
			ftColor = '#EEECD8';
	}

	var il = elementsToChange.length;
	
	for (var i=0; i < il; i++) {
		elementsToChange[i].style.backgroundColor = bgColor;
		elementsToChange[i].style.color = ftColor;
	}	
}


/* 
	Resets highlighting in the schedule

	classesToReset: Array of all the classes whose cells you want to reset 
*/
function switchNone (classesToReset){

	il = classesToReset.length;	
	
	for (i=0; i < il; i++)
	{
		switchColor( getElementsByClassName(classesToReset[i]), "true" );
	}	
}
