// JavaScript Document: CMH_AdRotator.js
// Children's Mercy Hospital JavaScript Banner AdRotator version 0.1 - last modified 25 Mar 2008

var xmlReq, xmlObj, elementID, flashOK, browserName, browserVer;
var ad_Name = new Array();
var ad_File = new Array();
var ad_Link = new Array();
var ad_Alt = new Array();
var ad_Type = new Array();
var ad_Seed = new Array();

function loadAdXML(xmlURL, xmlDiv) {
	elementID = document.getElementById(xmlDiv);
	
	xmlReq = getXMLHttpObject();
	if (xmlReq == null) { elementID.innerHTML = ""; }
	else {
		xmlReq.onreadystatechange = readAdXML;
		xmlReq.open("GET", xmlURL, true);
		xmlReq.send(null);
	}
}

function readAdXML() {
	if (xmlReq.readyState == 4) {
		if (xmlReq.status == 200) {
			xmlObj = xmlReq.responseXML.getElementsByTagName('Ad');
			
			for (var i = 0; i < xmlObj.length; i++) {
				//ad_Name[i]	= xmlObj[i].getElementsByTagName('name')[0].firstChild.nodeValue;
				ad_File[i]	= xmlObj[i].getElementsByTagName('ImageUrl')[0].firstChild.nodeValue;
				ad_Link[i]	= xmlObj[i].getElementsByTagName('NavigateUrl')[0].firstChild.nodeValue;
				ad_Alt[i]	= xmlObj[i].getElementsByTagName('AlternateText')[0].firstChild.nodeValue;
				ad_Type[i]	= xmlObj[i].getElementsByTagName('Type')[0].firstChild.nodeValue;
				ad_Seed[i]	= xmlObj[i].getElementsByTagName('Impressions')[0].firstChild.nodeValue;
			}
			
			flashOK = GetSwfVer(); // Test to see if browser supports flash
			if (flashOK == -1) {
				killSWFs(); // if test fails: remove all swf instances
			}
			
			// Calculate random ad based on seed weight
			var totalWeight = eval(ad_Seed.join("+")); // get total weight
			var weighedAds = new Array()
			var currentAd = 0;
			while (currentAd < ad_Seed.length){
				for (var i = 0; i < ad_Seed[currentAd]; i++) {
					weighedAds[weighedAds.length] = ad_Name[currentAd];
					currentAd++;
				}
			}
			var randomSeed = Math.floor(Math.random() * totalWeight);
			
			// Set seed range using the combined values of ad_Seed
			var seedRange = new Array();
			seedRange = [0];
			for (var i = 0; i < ad_Seed.length; i++) {
				var x = parseInt(ad_Seed[i]) + parseInt(seedRange[i]);
				seedRange = seedRange.concat(x);
			}
			
			// assign ad based upon randomSeed and seedRange
			var foo;
			for (var i = 1; i < seedRange.length; i++) {
				if (randomSeed <= seedRange[i] && randomSeed >= seedRange[i-1]) {foo = i-1; break;}
			}
			var AD = new Array();
			AD = [ad_File[foo], ad_Link[foo], ad_Alt[foo], ad_Type[foo]];
			
			// add element to page
			if (AD[3] == "img") {
				elementID.innerHTML = "<a href='" + AD[1] + "' target='_self'>"
									+ "<img src='" + AD[0] +  "' alt='" + AD[2] + "' border='0' />"
									+ "</a>";
			}
			if (AD[3] == "swf") {
				elementID.innerHTML = "<object type='application/x-shockwave-flash' data='" + AD[0] +"' width='537' height='189'>"
									+ "<param name='movie' value='" + AD[0] +"' />"
									+ "<param name='FlashVars' value='adLink=" + AD[1] + "' />"
									+ "<a href='" + AD[1] + "' target='_self'>"
									+ "<img src='/pediatrics/testbin/Test1.jpg' border='0' width='537' height='189' />"
									+ "</a>";
									+ "</object>";
			}
		} else {}
	}
}

function getXMLHttpObject() {
	var xmlReq = null;
	
	try {
		xmlReq = new XMLHttpRequest();
	} catch (e) {
		try {
			xmlReq = new ActiveXObject("MSXML2.XMLHTTP");
		} catch (e) {
			xmlReq = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	
	return xmlReq;
}

function orderASC(a, b) {return (a-b);} // Ascending
function orderDESC(a, b) {return (b-a);} // Descending

function killSWFs() { // Kill instances of swf if browser does not support flash
	var killNum = new Array();
	for (var i = 0; i < ad_Type.length; i++) {
		if (ad_Type[i] == "swf") {killNum.push(i);}
	} // find any instance of swf and flag the position
	
	for (var i = 0; i < killNum.length; i++) {
		var killFlag = parseInt(killNum[i]);
		
		for (var i = 0; i < killNum.length; i++) {
			ad_Name.splice(killFlag, 1);
			ad_File.splice(killFlag, 1);
			ad_Link.splice(killFlag, 1);
			ad_Alt.splice(killFlag, 1);
			ad_Type.splice(killFlag, 1);
			ad_Seed.splice(killFlag, 1);
		}
	} // purge all instances flaged with swf
}

// Flash Detection Script (Adobe Inc.)
var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

function ControlVersion()
{
	var version;
	var axo;
	var e;

	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry

	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}

	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";

			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";

			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");

		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}

	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}

// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}