/*  
    Function:   getElements(string classname, string tagname, element root)
    Purpose:    convenience method for getting groups of elements by classname or tagname
    Usage:      Returns all elements which extend the class. Can be refined by using optional tagname and root arguments
    Support:    All Browsers
*/
function getElements(classname, tagname, root){
	if(!root) root = document;
	else if (typeof root == "string") root = document.getElementById(root);
	
	if(!tagname) tagname = "*";
	
	var all = root.getElementsByTagName(tagname);
	
	if(!classname) return all;
	
	var elements = [];
	
	for(var i = 0; i < all.length; i++){
		var element = all[i];
		if(isMember(element,classname))
			elements.push(element)
	}
	return elements;
}

function isMember(element, classname){
    var classes = element.className;
    if(!classes) return false;
    if(classes ==classname) return true;
    
    var whitespace = /\s+/;
    if (!whitespace.test(classes)) return false;
    
    var c = classes.split(whitespace);
    for(var i = 0; i < c.length; i++){
        if (c[i] == classname) return true;
    }
    
    return false;
}

/* Header
	 ------ */
	 
function isDescendant(ancestor, descendant) {
	if (!ancestor || !descendant) {
		return false;
	}
	var similarDescendants = ancestor.getElementsByTagName(descendant.nodeName);
	for (var i = 0; i < similarDescendants.length; i++) {
		if (similarDescendants[i] == descendant) {
			return true;
		}
	}
	return false;
}
snavLoaded=false;
function setSnavLoadFlag(){snavLoaded = true;}