function WM_preloadImages() {

/*
WM_preloadImages()
Loads images into the browser's cache for later use.

Source: Webmonkey Code Library
(http://www.hotwired.com/webmonkey/javascript/code_library/)

Author: Nadav Savio
Author Email: nadav@wired.com

Usage: WM_preloadImages('image 1 URL', 'image 2 URL', 'image 3 URL', ...);
*/

  // Don't bother if there's no document.images
  if (document.images) {
    if (typeof(document.WM) == 'undefined'){
      document.WM = new Object();
    }
    document.WM.loadedImages = new Array();
    // Loop through all the arguments.
    var argLength = WM_preloadImages.arguments.length;
    for(arg=0;arg<argLength;arg++) {
      // For each arg, create a new image.
      document.WM.loadedImages[arg] = new Image();
      // Then set the source of that image to the current argument.
      document.WM.loadedImages[arg].src = WM_preloadImages.arguments[arg];
    }
  }
}

function WM_imageSwap(daImage, daSrc){
  var objStr,obj;
  /*
    WM_imageSwap()
    Changes the source of an image.

    Source: Webmonkey Code Library
    (http://www.hotwired.com/webmonkey/javascript/code_library/)

    Author: Shvatz
    Author Email: shvatz@wired.com

    Usage: WM_imageSwap(originalImage, 'newSourceUrl');

    Requires: WM_preloadImages() (optional, but recommended)
    Thanks to Ken Sundermeyer (ksundermeyer@macromedia.com) for his help
    with variables in ie3 for the mac. 
    */

  // Check to make sure that images are supported in the DOM.
  if(document.images){
    // Check to see whether you are using a name, number, or object
    if (typeof(daImage) == 'string') {
      // This whole objStr nonesense is here solely to gain compatability
      // with ie3 for the mac.
      objStr = 'document.' + daImage;
      obj = eval(objStr);
      obj.src = daSrc;
    } else if ((typeof(daImage) == 'object') && daImage && daImage.src) {
      daImage.src = daSrc;
    }
  }
}





function fOpenWindow(vPath,vName,vWidth,vHeight) {

	window.open(vPath,vName,"toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,width="+vWidth+",height="+vHeight);

}

function fullScreen(theURL) {
	window.open(theURL, 'XXX', 'fullscreen=yes, scrollbars=auto');
}


function fShowImage(vPath,vName,vWidth,vHeight) {
	vWWidth = vWidth + 10;
	vWHeight = vHeight + 10;
	window.open("/content/showimg.php?vPath=/images/"+vPath+"&vWidth="+vWidth+"&vHeight="+vHeight,vName,"toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,width="+(vWWidth)+",height="+(vWHeight));
}

function getObj(objId){
	if(document.getElementById) return document.getElementById(objId);
	if(document.all) return document.all(objId);
	return document.layers[objId];
}

function setClassActive(objId, vActive){
	if(document.getElementById) return document.getElementById(objId).className = document.getElementById(objId).className+vActive;
	if(document.all) return document.all(objId).className = document.all(objId).className+vActive;
	return document.layers[objId].className = document.layers[objId].className+vActive;
}

function setClassNormal(objId, vActive){
	var vObj;
	var vClassName;
	var vClassNormal;
	if(document.getElementById) {
		vObj = document.getElementById(objId);
	} else if(document.all) {
		vObj = document.all(objId);
	} else {
		vObj = document.layers[objId];
	}
	
	vClassName = vObj.className;
	vClassNormal = vClassName.substring(0,(vClassName.indexOf(vActive)));
	//alert(vClassNormal);
	vObj.className = vClassNormal;
}


// ugly workaround for missing support for selectorText in Netscape6/Mozilla
// call onLoad() or before you need to do anything you would have otherwise used
// selectorText for.
var ugly_selectorText_workaround_flag = false;
var allStyleRules;
// code developed using the following workaround (CVS v1.15) as an example.
// http://lxr.mozilla.org/seamonkey/source/extensions/xmlterm/ui/content/XMLTermCommands.js
function ugly_selectorText_workaround() {
        if((navigator.userAgent.indexOf("Gecko") == -1) ||
           (ugly_selectorText_workaround_flag)) {
                return; // we've already been here or shouldn't be here
        }
        var styleElements = document.getElementsByTagName("style");
        
        for(var i = 0; i < styleElements.length; i++) {
                var styleText = styleElements[i].firstChild.data;
                // this should be using match(/\b[\w-.]+(?=\s*\{)/g but ?= causes an
                // error in IE5, so we include the open brace and then strip it
                allStyleRules = styleText.match(/\b[\w-.]+(\s*\{)/g);
        }

        for(var i = 0; i < allStyleRules.length; i++) {
                // probably insufficient for people who like random gobs of 
                // whitespace in their styles
                allStyleRules[i] = allStyleRules[i].substr(0, (allStyleRules[i].length - 2));
        }
        ugly_selectorText_workaround_flag = true;
}


// setStyleById: given an element id, style property and 
// value, apply the style.
// args:
//  i - element id
//  p - property
//  v - value
//
function setStyleById(i, p, v) {
        var n = getObj(i);
        n.style[p] = v;
}

// setStyleById: given an element id, style property and 
// value, apply the style.
// args:
//  i - element id
//  p - property
//  v - value
//
/*function setStyleById(i, p, v) {
        var n = document.getElementById(i);
        n.style[p] = v;
}
*/

// getStyleById: given an element ID and style property
// return the current setting for that property, or null.
// args:
//  i - element id
//  p - property
function getStyleById(i, p) {
        var n = document.getElementById(i);
        var s = eval("n.style." + p);

        // try inline
        if((s != "") && (s != null)) {
                return s;
        }

        // try currentStyle
        if(n.currentStyle) {
                var s = eval("n.currentStyle." + p);
                if((s != "") && (s != null)) {
                        return s;
                }
        }
        
        // try styleSheets
        var sheets = document.styleSheets;
        if(sheets.length > 0) {
                // loop over each sheet
                for(var x = 0; x < sheets.length; x++) {
                        // grab stylesheet rules
                        var rules = sheets[x].cssRules;
                        if(rules.length > 0) {
                                // check each rule
                                for(var y = 0; y < rules.length; y++) {
                                        var z = rules[y].style;
                                        // selectorText broken in NS 6/Mozilla: see
                                        // http://bugzilla.mozilla.org/show_bug.cgi?id=51944
                                        ugly_selectorText_workaround();
                                        if(allStyleRules) {
                                                if(allStyleRules[y] == i) {
                                                        return z[p];
                                                }                       
                                        } else {
                                                // use the native selectorText and style stuff
                                                if(((z[p] != "") && (z[p] != null)) ||
                                                   (rules[y].selectorText == i)) {
                                                        return z[p];
                                                }
                                        }
                                }
                        }
                }
        }
        return null;
}

// setStyleByClass: given an element type and a class selector,
// style property and value, apply the style.
// args:
//  t - type of tag to check for (e.g., SPAN)
//  c - class name
//  p - CSS property
//  v - value
var ie = (document.all) ? true : false;

function setStyleByClass(t,c,p,v){
        var elements;
        if(t == '*') {
                // '*' not supported by IE/Win 5.5 and below
                elements = (ie) ? document.all : document.getElementsByTagName('*');
        } else {
                elements = document.getElementsByTagName(t);
        }
        for(var i = 0; i < elements.length; i++){
                var node = elements.item(i);
                for(var j = 0; j < node.attributes.length; j++) {
                        if(node.attributes.item(j).nodeName == 'class') {
                                if(node.attributes.item(j).nodeValue == c) {
                                        eval('node.style.' + p + " = '" +v + "'");
                                }
                        }
                }
        }
}

// getStyleByClass: given an element type, a class selector and a property,
// return the value of the property for that element type.
// args:
//  t - element type
//  c - class identifier
//  p - CSS property
function getStyleByClass(t, c, p) {
        // first loop over elements, because if they've been modified they
        // will contain style data more recent than that in the stylesheet
        var elements;
        if(t == '*') {
                // '*' not supported by IE/Win 5.5 and below
                elements = (ie) ? document.all : document.getElementsByTagName('*');
        } else {
                elements = document.getElementsByTagName(t);
        }
        for(var i = 0; i < elements.length; i++){
                var node = elements.item(i);
                for(var j = 0; j < node.attributes.length; j++) {
                        if(node.attributes.item(j).nodeName == 'class') {
                                if(node.attributes.item(j).nodeValue == c) {
                                        var theStyle = eval('node.style.' + p);
                                        if((theStyle != "") && (theStyle != null)) {
                                                return theStyle;
                                        }
                                }
                        }
                }               
        }
        // if we got here it's because we didn't find anything
        // try styleSheets
        var sheets = document.styleSheets;
        if(sheets.length > 0) {
                // loop over each sheet
                for(var x = 0; x < sheets.length; x++) {
                        // grab stylesheet rules
                        var rules = sheets[x].cssRules;
                        if(rules.length > 0) {
                                // check each rule
                                for(var y = 0; y < rules.length; y++) {
                                        var z = rules[y].style;
                                        // selectorText broken in NS 6/Mozilla: see
                                        // http://bugzilla.mozilla.org/show_bug.cgi?id=51944
                                        ugly_selectorText_workaround();
                                        if(allStyleRules) {
                                                if((allStyleRules[y] == c) ||
                                                   (allStyleRules[y] == (t + "." + c))) {
                                                        return z[p];
                                                }                       
                                        } else {
                                                // use the native selectorText and style stuff
                                                if(((z[p] != "") && (z[p] != null)) &&
                                                   ((rules[y].selectorText == c) ||
                                                    (rules[y].selectorText == (t + "." + c)))) {
                                                        return z[p];
                                                }
                                        }
                                }
                        }
                }
        }

        return null;
}

// setStyleByTag: given an element type, style property and 
// value, and whether the property should override inline styles or
// just global stylesheet preferences, apply the style.
// args:
//  e - element type or id
//  p - property
//  v - value
//  g - boolean 0: modify global only; 1: modify all elements in document
function setStyleByTag(e, p, v, g) {
        if(g) {
                var elements = document.getElementsByTagName(e);
                for(var i = 0; i < elements.length; i++) {
                        elements.item(i).style[p] = v;
                }
        } else {
                var sheets = document.styleSheets;
                if(sheets.length > 0) {
                        for(var i = 0; i < sheets.length; i++) {
                                var rules = sheets[i].cssRules;
                                if(rules.length > 0) {
                                        for(var j = 0; j < rules.length; j++) {
                                                var s = rules[j].style;
                                                // selectorText broken in NS 6/Mozilla: see
                                                // http://bugzilla.mozilla.org/show_bug.cgi?id=51944
                                                ugly_selectorText_workaround();
                                                if(allStyleRules) {
                                                        if(allStyleRules[j] == e) {
                                                                s[p] = v;
                                                        }                       
                                                } else {
                                                        // use the native selectorText and style stuff
                                                        if(((s[p] != "") && (s[p] != null)) &&
                                                           (rules[j].selectorText == e)) {
                                                                s[p] = v;
                                                        }
                                                }

                                        }
                                }
                        }
                }
        }
}

// getStyleByTag: given an element type and style property, return
// the property's value
// args:
//  e - element type
//  p - property
function getStyleByTag(e, p) {
        var sheets = document.styleSheets;
        if(sheets.length > 0) {
                for(var i = 0; i < sheets.length; i++) {
                        var rules = sheets[i].cssRules;
                        if(rules.length > 0) {
                                for(var j = 0; j < rules.length; j++) {
                                        var s = rules[j].style;
                                        // selectorText broken in NS 6/Mozilla: see
                                        // http://bugzilla.mozilla.org/show_bug.cgi?id=51944
                                        ugly_selectorText_workaround();
                                        if(allStyleRules) {
                                                if(allStyleRules[j] == e) {
                                                        return s[p];
                                                }                       
                                        } else {
                                                // use the native selectorText and style stuff
                                                if(((s[p] != "") && (s[p] != null)) &&
                                                   (rules[j].selectorText == e)) {
                                                        return s[p];
                                                }
                                        }

                                }
                        }
                }
        }

        // if we don't find any style sheets, return the value for the first
        // element of this type we encounter without a CLASS or STYLE attribute
        var elements = document.getElementsByTagName(e);
        var sawClassOrStyleAttribute = false;
        for(var i = 0; i < elements.length; i++) {
                var node = elements.item(i);
                for(var j = 0; j < node.attributes.length; j++) {
                        if((node.attributes.item(j).nodeName == 'class') ||
                           (node.attributes.item(j).nodeName == 'style')){
                           sawClassOrStyleAttribute = true;
                        }
                }
                if(! sawClassOrStyleAttribute) {
                        return elements.item(i).style[p];
                }
        }
}

 function externalLinks()
 {
	 if (!document.getElementsByTagName) return;
		 var anchors = document.getElementsByTagName("a");
		 for (var i=0; i<anchors.length; i++)
	 {
		 var anchor = anchors[i];
		 if (anchor.getAttribute("href") && anchor.getAttribute("rel") == "external")
			 anchor.target = "_blank";
	 }
 }


