// JavaScript Document - externel file from the CV3 file/*  MetroKitchen20090217     Function:   runOnLoad(f)    Purpose:    Portable event registration for onload event handlers    Usage:      Send functions which need to be attached to the document onload event to this function as a parameter:    Example:    runOnLoad(yourFunction);*/function runOnLoad(f){    if(runOnLoad.loaded) f();    else runOnLoad.funcs.push(f);}runOnLoad.funcs = [];runOnLoad.loaded = false; runOnLoad.run = function() {    if (runOnLoad.loaded) return;        for(var i = 0; i < runOnLoad.funcs.length; i++){        try{runOnLoad.funcs[i]();}        catch(e) {}    }            runOnLoad.loaded = true;    delete runOnLoad.funcs;    delete runOnLoad.run;}; if(window.addEventListener)    window.addEventListener("load", runOnLoad.run, false);else if (window.attachEvent)     window.attachEvent("onload", runOnLoad.run);else window.onload = runOnLoad.run;/* END portable event registration for onload event handlers */    /*  MetroKitchen20090217     Function:   getStyle(htmlElement, some-dash-delimited-css-property)    Purpose:    returns the computed style/value of a style property for an element    Usage:      Send your html element or document node to this function as parameter 1, and a css property as parameter 2    Example:    'getStyle(yourElement, border-top-color)' will return the value of the border-top-color for yourElement    Support:    IE6, IE7, Safari (mac), Firefox( mac + PC)*/function getStyle(element, cssproperty){    if(element.currentStyle){     	/*internet explorer's alternative to computed styles*/        try{            var css2props = element.currentStyle;            var cssProperty = convertToCamelCase(cssproperty);            if( cssProperty in css2props ){                var value = css2props[cssProperty];                return value;            }        }        catch(e){            return;        }    }     else if (window.getComputedStyle){     	/*firefox's syntax for reading computed styles*/        var css2prop = window.getComputedStyle(element, null);        var value = css2prop.getPropertyValue(cssproperty);        if(value != null) return value;    }    else{    	/*safari's syntax for reading computed styles*/        try{            var value = document.defaultView.getComputedStyle(element, null).getPropertyValue(cssproperty);            return value;        }        catch(e){            return;        }    }}/*end getStyle*/  /*  MetroKitchen20090217     Function:   convertToCamelCase(dash-delmited-text)    Purpose:    converts a dash delimited string to camelCase. This function is used by getStyle();    Usage:      Send dash delimited text as a parameter, and its camelCase equivalent will be returned    Support:    IE6, IE7, Safari (mac), Firefox( mac + PC)*/function convertToCamelCase(some_css_property){     var words = some_css_property.split("-");    var someCssProperty="";    for(var i=0; i<words.length; i++){someCssProperty += words[i].charAt(0).toUpperCase() + words[i].slice(1);}    someCssProperty = someCssProperty.charAt(0).toLowerCase() + someCssProperty.slice(1);    return someCssProperty;}/*end convertToCamelCase*/  /*  MetroKitchen20090217    Function:   id(string id)    Purpose:    convenience method for getting an element by id    Usage:      Send a string as a parameter, returns the element whose id matches the string    Support:    All Browsers*/function id(x) {    if(typeof x == "string") return document.getElementById(x);    return x;}/*end id*/  /*  MetroKitchen20090217    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 testElements(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 result = false;		for(var i = 0; i < all.length; i++){		var element = all[i];		if(isMember(element,classname))		var result = true;		}    return result;} 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;}/*end getElements*/ /*  MetroKitchen20090217     Function:   listClassifier()    Purpose:    convenience method for automatically adding an id to the first and last items of an unordered list    Usage:      Give your ul a classname of 'autoclassed' and an id of 'your choice'. First and last items will be given an id of the following format:                idOfYourUL_first, idOfYourUL_last     Support:    All Browsers*/function listClassifier(){    allLists = document.getElementsByTagName("UL");    for(var i=0;i<allLists.length;i++){        if(allLists[i].className == 'autoclassed'){            allLists[i].getElementsByTagName("LI")[0].id = allLists[i].id + "_first";            allLists[i].getElementsByTagName("LI")[allLists[i].getElementsByTagName("LI").length-1].id = allLists[i].id + "_last";        }    }}runOnLoad(listClassifier);/*end list classifier*/ /*MetroKitchen20090217    written specifically for the select form control in the footer. Is used to allow selects to hold urls as values which    are opened in a new window upon selecting the associated option/value. Can be easily modified for your own uses.*/function fslSelect(){    fsl = document.getElementById('footer_sub_links').getElementsByTagName('SELECT')[0];    fsl.onchange = fslRedirect;}function fslRedirect(){    if(this.options[this.selectedIndex].value.match(/http.*/)){         window.open(this.options[this.selectedIndex].value)    }}runOnLoad(fslSelect);/*end footer select*/  /*  Header area    ------ */    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; }
