


// run on pageload
dom_addLoadEvent(FixExternalLinks);
/*dom_addLoadEvent(correctPNG);*/



// corrects PNG images to get PNG transparency to work in IE
function correctPNG() 
{
   for(var i=0; i<document.images.length; i++)
   {
          var img = document.images[i];
          var imgName = img.src.toUpperCase();
          if (imgName.substring(imgName.length-3, imgName.length) == "PNG")
          {
                var imgID = (img.id) ? "id='" + img.id + "' " : "";
                var imgClass = (img.className) ? "class='" + img.className + "' " : "";
                var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
                var imgStyle = "display:inline-block;" + img.style.cssText;
                if (img.align == "left") imgStyle = "float:left;" + imgStyle;
                if (img.align == "right") imgStyle = "float:right;" + imgStyle;
                if (img.parentElement.href) imgStyle = "cursor:hand;" + imgStyle ;          
                var strNewHTML = "<span " + imgID + imgClass + imgTitle + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";" + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader" + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>";
                img.outerHTML = strNewHTML;
                i = i-1;
          }
   }
}



// swaps an image with a specific id to a new image url
function swap(id, url)
{
	var oImg = document.getElementById(id);
	oImg.src = url;
}



// toggle for left menu options
function toggleMainNav(oThis)
{
	var oThisParentContainer = oThis.parentNode.parentNode;	
	var arrNavDivs = dom_getElementsByClassName(document, 'div', 'mainnav_mainlevel');

	// close all other submenus
	for (var i=0; i<arrNavDivs.length; i++)
	{
		if (arrNavDivs[i] !== oThisParentContainer)
		{
			dom_removeClassName(arrNavDivs[i], 'onstate');
		}
	}	

	// open or close (toggle) proper submenu
	if (!dom_hasClassName(oThisParentContainer, 'onstate'))
	{
		dom_addClassName(oThisParentContainer, 'onstate');
	}
	else
	{
		dom_removeClassName(oThisParentContainer, 'onstate');
	}
	
}



// toggle for tab content boxes
function toggleTabContent(oThisMenuLink, iTabContentId)
{
	var oThisContentDiv = document.getElementById('tabcontent_' + iTabContentId);
	var arrMenuLinks = dom_getElementsByClassName(document, 'a', 'tabbedboxmenulink');
	var arrContentDivs = dom_getElementsByClassName(document, 'div', 'tabbedboxcontent');

	// close all other content boxes
	for (var i=0; i<arrContentDivs.length; i++)
	{
		if (arrContentDivs[i] !== oThisContentDiv)
		{
			dom_removeClassName(arrContentDivs[i], 'onstate');
		}
	}	

	// open or close (toggle) proper content box
	if (!dom_hasClassName(oThisContentDiv, 'onstate'))
	{
		dom_addClassName(oThisContentDiv, 'onstate');
	}

	// close all other tab links
	for (var i=0; i<arrMenuLinks.length; i++)
	{
		if (arrMenuLinks[i] !== oThisMenuLink)
		{
			dom_removeClassName(arrMenuLinks[i], 'onstate');
		}
	}	

	// open or close (toggle) proper tab link
	if (!dom_hasClassName(oThisMenuLink, 'onstate'))
	{
		dom_addClassName(oThisMenuLink, 'onstate');
	}
	
	return false;
}

function toggleArticleTabContent(oThisMenuLink, iTabContentId)
{
    var link = oThisMenuLink;
    var tabbedboxDiv = GetParentNodeWithClassName( link, 'tabbedbox' ); 
    
    
    if( tabbedboxDiv == null )
    {
        tabbedboxDiv = document;
    }
    
	var sId = "tabcontent_" + iTabContentId;
	
	var oThisContentDiv = dom_getChildNodeById(tabbedboxDiv, sId );	

	var tempDiv = tabbedboxDiv;	
	var arrMenuDiv  = dom_getChildNodeWithClassName(tempDiv, 'tabbedboxmenu');
	var arrMenuLinks = dom_getChildNodesWithClassName(arrMenuDiv, 'tabbedboxmenulink');
	
	tempDiv = tabbedboxDiv;
	var arrContentDivs = dom_getChildNodesWithClassName(tempDiv,'tabbedboxcontent');

	// close all other content boxes
	for (var i=0; i<arrContentDivs.length; i++)
	{
		if (arrContentDivs[i] !== oThisContentDiv)
		{
		     dom_removeClassName(arrContentDivs[i], 'onstate');
		}
	}	

	// open or close (toggle) proper content box
	if (!dom_hasClassName(oThisContentDiv, 'onstate'))
	{
		dom_addClassName(oThisContentDiv, 'onstate');
	}

	// close all other tab links
	for (var i=0; i<arrMenuLinks.length; i++)
	{
		if (arrMenuLinks[i] !== oThisMenuLink)
		{
			dom_removeClassName(arrMenuLinks[i], 'onstate');
		}
	}	


	// open or close (toggle) proper tab link
	if (!dom_hasClassName(oThisMenuLink, 'onstate'))
	{
		dom_addClassName(oThisMenuLink, 'onstate');
	}
	
	return false;
}

function dom_getChildNodeById( objNode, sId )
{
    if (objNode.hasChildNodes())
    {// So, first we check if the object is not empty, if the object has child nodes
       var children = objNode.childNodes;
       for (var i = 0; i < children.length; i++) 
       {
            if( children[i].id == sId )
            {
                return children[i];
            }
       }
     }
    return null;
}


function dom_getChildNodeWithClassName( objNode, strClassName )
{
    if (objNode.hasChildNodes())
    {// So, first we check if the object is not empty, if the object has child nodes
       var children = objNode.childNodes;
       for (var i = 0; i < children.length; i++) 
       {
            if( dom_hasClassName(children[i],strClassName))
            {
                return (children[i]);
            }
       }
     }
    return null;
}

function dom_getChildNodesWithClassName( objNode, strClassName )
{
    var arrReturnElements = new Array();
    if (objNode.hasChildNodes())
    {// So, first we check if the object is not empty, if the object has child nodes
       var children = objNode.childNodes;
       for (var i = 0; i < children.length; i++) 
       {
            if( dom_hasClassName(children[i],strClassName))
            {
                arrReturnElements.push(children[i]);
            }
       }
     }
    return (arrReturnElements);
}
// This travels up from the given node until it finds a parent
// who has the given class name.
function GetParentNodeWithClassName( objNode, strClassName ){
	// Lowercase the class name for comparison.
	strClassName = strClassName.toLowerCase();

	// Crawl up the parent node chain. Keep crawling until we find the 
	// node with the proper class name, we hit a null node, or we hit 
	// a non-text node that has no tag name (the document object).
	for ( objNode = objNode.parentNode ; (	objNode && ((objNode.tagName && (
	
	!dom_hasClassName(objNode, strClassName)
	
	)) ||(!objNode.tagName && (objNode.nodeType != 3)))); objNode = objNode.parentNode){
		// Nothing has to be done within in the FOR loop. We are purely
		// using the FOR loop to crawl up the DOM structure.
	}

	// Return the node. At this point, it might contains a valid
	// parent node, or it might be null.
	return( objNode );
}






















// ### General Utility & DOM Handling Functions Below This Line



// ### gets an array of objects that match the input start element, tag name, and class name
// Ways of calling the function are:
// To get all a elements in the document with a “info-links” class. 
// getElementsByClassName(document, "a", "info-links"); 
// To get all div elements within the element named “container”, with a “col” and a “left” class. 
// getElementsByClassName(document.getElementById("container"), "div", ["col", "left"]); 
function dom_getElementsByClassName(oElm, strTagName, oClassNames){
    var arrElements = (strTagName == "*" && document.all)? document.all : 
    oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    var arrRegExpClassNames = new Array();
    if(typeof oClassNames == "object"){
        for(var i=0; i<oClassNames.length; i++){
            arrRegExpClassNames.push(new RegExp("(^|\\s)" + 
            oClassNames[i].replace(/\-/g, "\\-") + "(\\s|$)"));
        }
    }
    else{
        arrRegExpClassNames.push(new RegExp("(^|\\s)" + 
        oClassNames.replace(/\-/g, "\\-") + "(\\s|$)"));
    }
    var oElement;
    var bMatchesAll;
    for(var j=0; j<arrElements.length; j++){
        oElement = arrElements[j];
        bMatchesAll = true;
        for(var k=0; k<arrRegExpClassNames.length; k++){
            if(!arrRegExpClassNames[k].test(oElement.className)){
                bMatchesAll = false;
                break;                      
            }
        }
        if(bMatchesAll){
            arrReturnElements.push(oElement);
        }
    }
    return (arrReturnElements)
}



function dom_addClassName(oElm, strClassName)
{
	var strCurrentClass = oElm.className;
	if(!new RegExp(strClassName, "i").test(strCurrentClass)){
		oElm.className = strCurrentClass + ((strCurrentClass.length > 0)? " " : "") + strClassName;
	}
}



function dom_removeClassName(oElm, strClassName)
{
	var oClassToRemove = new RegExp((strClassName + "\s?"), "i");
	oElm.className = oElm.className.replace(oClassToRemove, "").replace(/^\s?|\s?$/g, "");
}



function dom_hasClassName(oElm, strClassName)
{  
    if(oElm.className == null || oElm.className == 'undefined')
        return false;
        
	return oElm.className.match(new RegExp('(\\s|^)'+strClassName+'(\\s|$)'));
}



// ### adds a function to run at onLoad
function dom_addLoadEvent(func)
{
	var oldonload = window.onload;
	if (typeof window.onload != 'function')
	{
		window.onload = func;
	}
	else
	{
		window.onload = function()
		{
			oldonload();
			func();
		}
	}
}






