	/*** Global Variables ***/
	var tablesInited = false;
	
	window.onload = function(){
		runInitFunctions();
	}
	
	function runInitFunctions(){ // perform onLoad actions
		for(var i=0, len=initCalls.length; i<len; i++ ) {
			eval(initCalls [i]);
		}
		if (typeof(onloadFunctions) != "undefined") {
			for (var i = 0, len = onloadFunctions.length; i < len; i++) {
				if (typeof onloadFunctions[i] === "function") {
					onloadFunctions[i]();
				}
			}
		}
	}
	
	//NOTE: this initCalls collection should not be added to. Use global.js.
	var initCalls = new Array();
	//Note: These should all be changed to use the native JS array.push as its more efficient then 
	//      this method - ID - This change was made 10/12/07 by ID
	//initCalls.push(" NavigationEvents()");
	initCalls.push(" ColumnH6Fix()");
	initCalls.push(" IEPopupMarginFix()");
	initCalls.push(" FlashInit()");
	initCalls.push(" InitFeatures()");
	initCalls.push(" tableSpacingFix()");
	initCalls.push(" addWebtrendsTagToLinks()");

	//Note: Need to review if this is still needed. Not sure what problem this solves but there must
	//      be a CSS solution to this problem as fixing styling issues using JS isn't a good idea - ID
	function tableSpacingFix(){
		var tables = document.getElementsByTagName("table");
		for(var i=0, len=tables.length;i<len;i++){
			tables[i].cellSpacing=0;
		}
	}

	function InitFeatures() {
		var divs = document.getElementsByTagName("div");
		if (divs) {
			//Note: This "caching" of divs.length is a good idea all loops should use this principle as
			//      its more efficient and so is good practice to improve code performance - ID
			for (var i=0, len=divs.length;i<len;i++) {
				if (divs[i].className.indexOf("feature") > -1) {
					FixFeature(divs[i]);
				}
			}
		}
	}

	//Note: The use of Javascript to fix display bugs like the following should be reviewed and 
	//      solutions that use CSS should be used when possible - ID
	function FixFeature( feature ) {
		var imgs = feature.getElementsByTagName("img");
		var done = false;
		for (var i=0, len=imgs.length;i<len;i++) {
			if (imgs[i].className == "offscreen") {
				var div = feature.getElementsByTagName("div")[1].getElementsByTagName("div")[0];
				div.style.marginLeft = (imgs[i].width) + "px";
				imgs[i].style.display = "none";
				feature.style.position = "static";
				done = true;
			}
		}
		if (!done) {
			feature.style.position = "static";
		}
	}
	
	//Note: The use of Javascript to fix display bugs like the following should be reviewed and 
	//      solutions that use CSS should be used when possible - ID
	function IEPopupMarginFix() {
		var innerPop = document.getElementById("innerPop");
		if (innerPop && document.all) {
			innerPop.style.width = (document.getElementsByTagName("body")[0].offsetWidth - 50) + "px";
		}
	}

	//Note: This should be reviewed to see if there is a more effiecient way of doing it or if
	//      a different solution can be found - ID
	function ColumnH6Fix() {
		var objs = document.getElementsByTagName('div');
		for (var j=0, len=objs.length; j<len; j++) {
			var obj = objs[j];
			var s = obj.className;
			if (s.indexOf('columnType') > -1) {
				if (obj.childNodes) {
					var child = null;
					for (var i=0, len=obj.childNodes.length; i<len; i++) {
						s = "" + obj.childNodes[i].tagName;
						if (s != 'undefined') {
							child = obj.childNodes[i];
							break;
						}
					}
					if (child) {
						s = child.className + "";
						if (child.tagName.toLowerCase() == "h6") {
							if (s.indexOf("firstHeading") == -1) {
								child.className = s + " firstHeading";
							}
						} else if (s.indexOf("h6") != -1) {
							if (s.indexOf("firstHeading") == -1) {
								child.className = s + " firstHeading";
							}
						}
					}
				}
			}
		}
	}
/* NOTE: This functionality has been moved into CSS and so this code should be deleted - ID
	function NavigationEvents() {
		//AddNavEvent(document.getElementById("topNavLeft"), 0);
		//AddNavEvent(document.getElementById("leftNav"), 1);
	}
	
	//Note: This functionality should be performed using the CSS :hover attribute rather then in code
	//      - ID
	function AddNavEvent(obj, type) {
		if (obj) {
			var list = obj.getElementsByTagName("a");
			var len = list.length;
			for (var i=0;i<len;i++) {
				if (list[i].className != "sel") {
					var img = list[i].getElementsByTagName("img")
					if (img.length > 0) {
						if (type == 0) {
							img[0].onmouseover = rovt;
							img[0].onmouseout = rout;
						} else {
							img[0].onmouseover = rovl;
							img[0].onmouseout = roul;
						}
					}
				}
			}
		}
	}
	function tov(obj) {
		//obj.style.top = '-20px';
	}
	function tou(obj) {
		//obj.style.top = '0px';
	}
	function tovv(obj) {
		obj.style.marginLeft = '-166px';
	}
	function touv(obj) {
		obj.style.marginLeft = '0px';
	}
	function rovt() {
		this.style.top = '-20px';
	}
	function rovl() {
		this.style.marginLeft = '-154px';
	}
	function rout() {
		this.style.top = '0px';
	}
	function roul() {
		this.style.marginLeft = '0px';
	}
*/
	
	//Note: This wouldn't needed if use any of the 3rd party JS libraries - ID
	function getParentByTagName(el, tagName) {
		if (el.tagName.toLowerCase() == tagName) {
			return el;
		} else if (el.parentNode) {
			while (el.parentNode) {
				var tag = el.tagName.toLowerCase();
				if (tag == tagName) {
					break;
				} else {
					el = el.parentNode;
				}
			}
		}
		return el;
	}

	function openSitemap(el) {
		NewWindow(el.href, "sitemap", 250, 405);
	}

	function NewWindow(mypage, myname, w, h, scroll) {
		var winl = (screen.width - w) / 2;
		var wint = (screen.height - h) / 2;
		winprops = 'height='+h+',width='+w+',top='+wint+',left='+winl;
		if(scroll == "no"){
			winprops += ', scrollbars=no';
		} else {
			winprops += ', scrollbars=yes';
		}
		if (myname == '') {
			myname = '_blank';
		}
		win = window.open(mypage, myname, winprops);
		if(win){
			if (parseInt(navigator.appVersion) >= 4) {
				win.window.focus(); 
			}
		}
	}

	function showLayer(id) {
		var layers = new Array("");
		var layerId = "layer1";
		var count = 1;
		var vert = false;
		if (document.getElementById(layer).className.indexOf("vertTabbed") > -1) {
			vert = true;
		}
		while (document.getElementById(layerId)) {
			layers.push(layerId);
			count++;
			layerId = "layer" + count;
		}
		for (var i=1, len=layers.length; i<len; i++) {
			var obj = document.getElementById(layers[i]);
			if (layers.length > 2) {
				var tabs = obj.getElementsByTagName("div")[0].getElementsByTagName("img");
				for (var j=0, len=tabs.length; j<len; j++) {
					if (j+1 != i) {
						/*
						if (vert) {
							if (tabs[j].onmouseout) {
								touv(tabs[j]);
							}
						} else {
							tou(tabs[j]);
						}
						*/
					} else {
						if (vert) {
							tabs[j].parentNode.className = "sel";
						} else {
							tabs[j].className = "sel";
						}
					}
				}
			}
			obj.style.display = "none";
		}
		var layer = document.getElementById(layers[id])
		layer.style.display = "block";
		if (vert) {
			var divs = layer.getElementsByTagName("div");
			if (divs[0].offsetHeight == 0) {
				divs[0].style.height = divs[0].getElementsByTagName("img").length * 42 + "px";
			}
			if (divs[1].offsetHeight > divs[0].offsetHeight) {
				divs[0].style.height = divs[1].offsetHeight + "px";
			} 
			else {
				divs[1].style.height = divs[0].offsetHeight + "px";
			}
		}
	}

	function FlashInit() {
		var minFlashVersion = 6;
		var o=["object"];
		for(j=0, len=o.length; j<len; j++){
			var e=document.getElementsByTagName(o[j]);
			for(k=0, len=e.length; k<len; k++){
				var ele = e[k];
				if(ele.outerHTML){
					if(!ele.getAttribute("data")||ele.getAttribute("data")==""){
						ele.outerHTML=ele.outerHTML;
					} else {
						var tempStr = ele.getAttribute("data");
						ele.removeAttribute("data");
						ele.outerHTML=ele.outerHTML;
						ele.setAttribute("data", tempStr);
					}
				}
			}
		}
		var htmlContent = document.getElementById("htmlContent");
		var flashContent = document.getElementById("flashContent");
		if (htmlContent && flashContent) {
			if (flashinstalled == 2 && flashversion >= minFlashVersion) {
				flashContent.style.display = "block";
				//var obj = flashContent.getElementsByTagName("object")[0];
			} else {
				htmlContent.style.display = "block";
			}
		} else {
			if (htmlContent){
				htmlContent.style.display = "block";
			}
		}
	}

	function EventApplication() {
		var tagName;
		var dl = document.getElementsByTagName("dl");
		if (dl.length > 0) {
			var event = document.getElementById("headingColumn").getElementsByTagName("img")[0].getAttribute("alt");
			var html = "<dl><dt>Event</dt><dd>" + event + "</dd>";
			var dlChild = dl[0].childNodes;
			var dtCount = 0;
			for (var i=0, len=dlChild.length ;i<len; i++) {
				tagName = dlChild[i].tagName;
				if (tagName) {
					tagName = tagName.toLowerCase();
					if (tagName == "dt") {
						dtCount++;
						if (dtCount > 2) {
							break;
						}
						html += "<dt>" + dlChild[i].innerHTML + "</dt>";
					} else if (tagName == "dd") {
						html += "<dd>" + dlChild[i].innerHTML + "</dd>";
					}
				}
			}
			html += "</dl>";
			document.location.href = "/press/events/registration.jhtml?event=" + event + "&top=" + html;
		}
	}

	function initScrollableTable(){
		var scrollableTable, scrollableDiv, table, scrollableDivWidth;
		var caption, captionContent;
		var thead, headerTable, cWSupported;
		var trs, ths, headerTrs, headerThs, offset;
		var columnWidth;
		var divs = document.getElementsByTagName("div");
		for(var i=0, len=divs.length; i<len; i++){
			if(divs[i].getAttribute("className") == "scrollableTable" || divs[i].getAttribute("class") == "scrollableTable"){
				scrollableTable = divs[i];
				scrollableDiv   = scrollableTable.getElementsByTagName("div")[0];
				table           = scrollableDiv.getElementsByTagName("table")[0];
				if(scrollableDiv.clientWidth != 0){
					scrollableDivWidth = scrollableDiv.clientWidth + "px";
				} else {
					scrollableDivWidth = scrollableDiv.offsetWidth + "px";
				}
				table.style.width = scrollableDivWidth;
				scrollableTable.childNodes[0].style.width = scrollableDivWidth;
				caption = table.getElementsByTagName("caption")[0];
				if(caption){
					captionContent = "<caption>" + caption.innerHTML + "</caption>";
				} else {
					captionContent = "";
				}
				thead = table.getElementsByTagName("thead")[0];
				scrollableTable.childNodes[0].innerHTML = "<table>" + captionContent + thead.innerHTML + "</table>";
				headerTable = scrollableTable.childNodes[0].childNodes[0];
				headerTable.setAttribute("cellpadding",0);
				headerTable.setAttribute("cellspacing",0);
				if(table.getAttribute("className")){
					headerTable.setAttribute("className",table.getAttribute("className"));
				} else {
					headerTable.setAttribute("class",table.getAttribute("class"));
				}
				cWSupported = false;
				if(table.clientWidth != 0){
					headerTable.style.width = table.clientWidth + "px";
					cWSupported = true;
				} else {
					headerTable.style.width = table.offsetWidth + "px";
				}
				trs       = thead.getElementsByTagName("tr");
				ths       = trs[trs.length-1].getElementsByTagName("th");
				headerTrs = headerTable.getElementsByTagName("tr");
				headerThs = headerTrs[headerTrs.length-1].getElementsByTagName("th");
				offset    = "-" + headerThs[0].offsetHeight + "px";


				for(var j=0, len=headerThs.length; j<len; j++){
					if(cWSupported){
						columnWidth = ths[j].offsetWidth;
					}
					else{
						columnWidth = ths[j].offsetWidth;
					}
					headerThs[j].style.width = columnWidth - 6 + "px";
					table.parentNode.style.zIndex = "10";
					table.style.zIndex = "10";
					headerTable.parentNode.style.zIndex = "20";
					headerTable.style.zIndex = "20";
					headerTable.parentNode.style.position = "absolute";
				}
			}
		}
		tablesInited = true;
	}

	function scrollIt(){
		var top, scrollableTable, tableTop, table, headerTableContainer;
		if(!tablesInited) {
			return;
		}
		if (document.all){
			top = document.body.scrollTop;
		} else if (document.getElementById){
			top = window.pageYOffset;
		}
		var divs = document.getElementsByTagName("div");
		for(var i=0, len=divs.length; i<len; i++){
			if(divs[i].getAttribute("className") == "scrollableTable" ||
			   divs[i].getAttribute("class")     == "scrollableTable")
			{
				scrollableTable = divs[i];
				tableTop = scrollableTable.parentNode.offsetTop;
				table = scrollableTable.getElementsByTagName("div")[0].getElementsByTagName("table")[0];
				headerTableContainer = scrollableTable.childNodes[0];
				if(tableTop + table.offsetHeight - headerTableContainer.offsetHeight*2 < top){
					return;
				} else {
					if(tableTop < top){
						headerTableContainer.style.top = top + "px";
					} else {
						headerTableContainer.style.top = "";
					}
				}
			}
		}
	}
	function addWebtrendsTagToLinks(){
		var links = $$("a");
        //Need to cast document.location.host to a string so can be used for substring-ing
        var host = String(document.location.host);
		for(var i=0, len=links.size(); i<len; i++){
			var link = links[i];
			var href = link.getAttribute("href");
            var addWebTrends = false;
            if (href && !href.include("mailto")) { //Don't tag mailto links
                //Note: searching for http is enough for FF but IE needs to check for the whole host name
                if(href.include("http")) {
                    //Don't add webtrends for internal links ie if the href contains the host
                    if(!href.include(host)) {
                        addWebTrends = true;
                    }
                }
                if (href.match(/\.pdf/) || href.match(/\.xls/) || href.match(/\.dyn/) || addWebTrends) {
                    //Add dynamic cross browser event listener to the link
                    link.observe("click", function(event){
                            //Note: This does not stop the event from running
                            var target = Event.element(event);
                          /* Note: This code is needed if want JS to control access to an external link
                            var inLineClickEvent = target.getAttribute("onclick");
                            if (inLineClickEvent) {
                                Event.stop(event);
                            }
                          */
                            var linkUrl = target.getAttribute("href");
                            dcsMultiTrack('DCS.dcsuri', linkUrl);
                        });
                }
            }
		}
	}
	
