//	var promoRequest = false;
	document.write("<script src='https://www.google.com/jsapi'></script>");
	document.write("<script src='/qcms/qCmsRepository/Global/Javascript/Base64.js'></script>");
	
	var BrowserDetect = {
		init: function () {
			this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
			this.version = this.searchVersion(navigator.userAgent)
				|| this.searchVersion(navigator.appVersion)
				|| "an unknown version";
			this.OS = this.searchString(this.dataOS) || "an unknown OS";
			this.screenWidth = this.getScreenWidth();
			this.screenHeight = this.getScreenHeight();
		},
		getScreenWidth: function () {
			return screen.width;
		},
		getScreenHeight: function () {
			return screen.height;
		},
		searchString: function (data) {
			for (var i=0;i<data.length;i++)	{
				var dataString = data[i].string;
				var dataProp = data[i].prop;
				this.versionSearchString = data[i].versionSearch || data[i].identity;
				if (dataString) {
					if (dataString.indexOf(data[i].subString) != -1)
						return data[i].identity;
				}
				else if (dataProp)
					return data[i].identity;
			}
		},
		searchVersion: function (dataString) {
			var index = dataString.indexOf(this.versionSearchString);
			if (index == -1) return;
			return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
		},
		dataBrowser: [
			{
				string: navigator.userAgent,
				subString: "Chrome",
				identity: "Chrome"
			},
			{ 	string: navigator.userAgent,
				subString: "OmniWeb",
				versionSearch: "OmniWeb/",
				identity: "OmniWeb"
			},
			{
				string: navigator.vendor,
				subString: "Apple",
				identity: "Safari",
				versionSearch: "Version"
			},
			{
				prop: window.opera,
				identity: "Opera"
			},
			{
				string: navigator.vendor,
				subString: "iCab",
				identity: "iCab"
			},
			{
				string: navigator.vendor,
				subString: "KDE",
				identity: "Konqueror"
			},
			{
				string: navigator.userAgent,
				subString: "Firefox",
				identity: "Firefox"
			},
			{
				string: navigator.vendor,
				subString: "Camino",
				identity: "Camino"
			},
			{		// for newer Netscapes (6+)
				string: navigator.userAgent,
				subString: "Netscape",
				identity: "Netscape"
			},
			{
				string: navigator.userAgent,
				subString: "MSIE",
				identity: "Explorer",
				versionSearch: "MSIE"
			},
			{
				string: navigator.userAgent,
				subString: "Gecko",
				identity: "Mozilla",
				versionSearch: "rv"
			},
			{ 		// for older Netscapes (4-)
				string: navigator.userAgent,
				subString: "Mozilla",
				identity: "Netscape",
				versionSearch: "Mozilla"
			}
		],
		dataOS : [
			{
				string: navigator.platform,
				subString: "Win",
				identity: "Windows"
			},
			{
				string: navigator.platform,
				subString: "Mac",
				identity: "Mac"
			},
			{
				string: navigator.platform,
				subString: "Linux",
				identity: "Linux"
			}
		]

	};

	function readCookie(name) 
	{
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) 
		{
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}

function personalizedPromoControllerClass()
{
	var promoList = new Array();
	var completeList = new Array();
	var updateTimer = null;
	var impressionTracking = "";
	var impressionTrackingDelim = "";
	
	this.addPP = addPPF;

	function update()
	{
		clearTimeout(updateTimer);

		if(promoList[0] == null)
			promoList.splice(0, 1);

		testPromo = promoList[0];
		while(testPromo)
		{
			if(testPromo.getNewImage())
			{
				if(testPromo.getNewImage() == testPromo.getExistingImage())
				{
					removePPF(testPromo);
				}
				else if(!testPromo.getImageBuffer())
				{
					testPromo.startImageLoad()
				}
				else if(testPromo.testImage())
				{
					promoContainer = new SlideClass(document.getElementById(testPromo.getDivID()), testPromo.getNewHTML());
					promoContainer.changeSlides();
					removePPF(testPromo);
					
					impressionTracking += impressionTrackingDelim + ";" + testPromo.getImpressionIdent();
					impressionTrackingDelim = ",";
						

				}
			}
			testPromo = testPromo.getNextPL();
		}
		
		if(promoList[0] == null)
			promoList.splice(0, 1);
			
		if(promoList.length != 0 || promoList[0] != null)
		{
			updateTimer = setTimeout(update, 250);
		}
		else
			try
			{
				trackAJAXimpressions(impressionTracking);
			}
			catch (err)
			{
				return;
			}
	}
	function addPPF(promoID,divID, priority)
	{
		if(readCookie("SCID") == null)
			return;
		if(window.location.href.indexOf(".com/MasterWebPortal/") >= 0)
			var rootDir = "/MasterWebPortal";
		else
			var rootDir = "/personalizedpromo";

		BrowserDetect.init();
		var browserType = BrowserDetect.browser;
		var browserVersion = BrowserDetect.version;
		var osName = BrowserDetect.OS;
		var screenWidth = BrowserDetect.screenWidth;
		var screenHeight = BrowserDetect.screenHeight;
		var tid = readCookie('trackingIdCookie');
		var trackingId=0;

		if (tid == null) 
		{
			trackingId=0;
		}
		else
		{
			trackingId = tid;
		}
		//if(google.loader.ClientLocation.address.city)
		//	var city = google.loader.ClientLocation.address.city;
		var city = "Denver";
		var urlEncodedCity = Base64.encode(city);
		//var state = google.loader.ClientLocation.address.region.toUpperCase();
		var state = "CO";
		var promoUrl =  rootDir + '/customize/trackingId/'+trackingId+'/promoId/' + promoID + '/OSName/'+osName+'/screenWidth/'+screenWidth+'/screenHeight/'+screenHeight+'/browserType/'+browserType.toUpperCase()+'/browserVersion/'+browserVersion+'/city/' + urlEncodedCity + '/state/' + state + '/promo?x=' + (new Date()).getTime();
		tempPromo = new promoLoaderClass(promoUrl,divID);
		if(!promoList[priority])
		{
			tempPromo.setPrevPL(null);
			tempPromo.setNextPL(null);
			promoList[priority] = tempPromo;
		}
		else
		{
			tempPromo.setNextPL(promoList[priority]);
			tempPromo.setPrevPL(null);
			promoList[priority].setPrevPL(tempPromo);
			promoList[priority] = tempPromo;
		}
		return;
	}
	function removePPF(promoToRemove)
	{
		if(promoToRemove.getNextPL() && promoToRemove.getPrevPL())
		{
			promoToRemove.getPrevPL().setNextPL(promoToRemove.getNextPL());
			promoToRemove.getNextPL().setPrevPL(promoToRemove.getPrevPL());
		}
		else if(promoToRemove.getPrevPL())
		{
			promoToRemove.getPrevPL().setNextPL(null);
		}
		else if(promoToRemove.getNextPL())
		{
			promoToRemove.getNextPL().setPrevPL(null);
			promoList[0] = promoToRemove.getNextPL();
		}
		else
		{
			promoList[0] = null;
		}
		completeList[completeList.length] = promoToRemove;
	}
	
	function promoLoaderClass(pID, dID)
	{
		var nextPromoLoader = null;
		var previousPromoLoader = null;
		var promoID = pID;
		var divID = dID;
		var newHTML = null;
		var newImage = null;
		var existingImage = null;
		var imageBuffer = null;
		var promoRequest = newPromoRequest();
		var impressionIdent = null;

		this.getDivID = getDivIDF;
		this.getNewHTML = getNewHTMLF;
		this.startImageLoad = startImageLoadF;
		this.getNextPL = getNextPLF;
		this.getPrevPL = getPrevPLF;
		this.setNextPL = setNextPLF;
		this.setPrevPL = setPrevPLF;
		this.testImage = testImageF;
		this.getNewImage = getNewImageF;
		this.getExistingImage = getExistingImageF;
		this.getImageBuffer = getImageBufferF;
		this.getImpressionIdent = getImpressionIdentF;

		promoRequest.open("GET", promoID, true);
		promoRequest.onreadystatechange = function()
				{
					if (promoRequest.readyState == 4)
						if (promoRequest.status == 200)
						{
							newHTML = promoRequest.responseText;
							existingImage = getImageFilename(document.getElementById(divID).innerHTML, false);
							newImage = getImageFilename(newHTML, false);
							impressionIdent = parseOmnitureData(newHTML);
							if(!updateTimer)
								update();
						}
				}
		promoRequest.send(null);

		function getImageBufferF()
		{
			return imageBuffer;
		}
		function getExistingImageF()
		{
			return existingImage;
		}
		function getImpressionIdentF()
		{
			return impressionIdent;
		}
		function getNewHTMLF()
		{
			return newHTML;
		}
		function getNewImageF()
		{
			return newImage;
		}
		function getNextPLF()
		{
			return nextPromoLoader;
		}
		function getPrevPLF()
		{
			return previousPromoLoader;
		}
		function setPrevPLF(prevPL)
		{
			previousPromoLoader = prevPL;
		}
		function setNextPLF(nextPL)
		{
			nextPromoLoader = nextPL;
		}
		function startImageLoadF()
		{
			imageBuffer = new Image();
			imageBuffer.src = getImageFilename(newHTML, true);
		}
		function getDivIDF()
		{
			return divID;
		}
		function getImageFilename(theHTML, keepPath)
		{
			var filename = theHTML.slice(theHTML.indexOf("src=\"") + 5, theHTML.indexOf("\"", theHTML.indexOf("src=\"") + 5));
			if(!keepPath && (lastSlash = filename.lastIndexOf("/") + 1) != -1)
				filename = filename.slice(lastSlash);
			return filename;
		}
		function testImageF()
		{
			if(imageBuffer)
				return imageBuffer.complete;
			else
				return false;
		}
	}
	function newPromoRequest()
	{
		try
		{
			promoRequest = new XMLHttpRequest();
		}
		catch (trymicrosoft)
		{
			try
			{
				promoRequest = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (othermicrosoft)
			{
				try
				{
					promoRequest = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (failed)
				{
					promoRequest = false;
				}
			}
		}
		return promoRequest;
	}
}
function SlideClass(slide, nextContent)
{
	var theSlide = slide;
	var nextSlide = nextContent;
	var fadeIndex = null;
	var fadeSlideInTimerFunction = fadeSlideInF;
	var fadeSlideOutTimerFunction = fadeSlideOutF;
	var fadeTimer = null;
	var fadeDelay = 40;
	var fadeStep = 10;

	this.showSlide = showSlideF;
	this.hideSlide = hideSlideF;
	this.getDelay = getDelayF;
	this.setOpacity = setOpacityF;
	this.fadeSlideIn = fadeSlideInF;
	this.fadeSlideOut = fadeSlideOutF;
	this.changeSlides = changeSlidesF;

	function changeSlidesF()
	{
		this.showSlide();
		fadeTimer = window.setInterval(fadeSlideOutTimerFunction, fadeDelay);
	}
	function setOpacityF(percent)
	{
		theSlide.style.opacity = percent/100;
		theSlide.style.filter = 'alpha(opacity=' + percent + ')';
		fadeIndex = percent;
	}
	function showSlideF()
	{
		setOpacityF(100);
	}
	function hideSlideF()
	{
		setOpacityF(0);
		fadeIndex = 0;
	}
	function getDelayF()
	{
		return delay;
	}
	function fadeSlideInF()
	{
		setOpacityF(fadeIndex + fadeStep - 6);
		if(fadeIndex > 99)
		{
			clearInterval(fadeTimer);
			showSlideF();
		}
	}
	function fadeSlideOutF()
	{
		setOpacityF(fadeIndex - fadeStep);
		if(fadeIndex < 1)
		{
			clearInterval(fadeTimer);
			hideSlideF();
			theSlide.innerHTML = nextSlide;
			fadeTimer = window.setInterval(fadeSlideInTimerFunction, fadeDelay);
		}
	}
}

function parseOmnitureData(promoRequest)
{
//	var responseCode = promoRequest.responseText;
	var responseCode = promoRequest;
	var workingStr = null;
	if(responseCode.indexOf("trackClickWithImpressions") > -1)
	{
		var track6s = responseCode.split("trackClickWithImpressions");
		for(i=0;i<track6s.length;i++)
		{
			var stopIndex = track6s[i].indexOf(")");
			workingStr = track6s[i].substring(2,stopIndex - 1);
			if(workingStr.indexOf("|") > -1)
			{
				if(workingStr.indexOf("check_address") > -1) {}
				else
				{
//					alert("if: " + workingStr);
					return(workingStr);
				}
	    }
		}
	}
	else
	{
		if(responseCode.indexOf("eVar6=") > -1)
		{
			var evar6arr = responseCode.split("eVar6=");
			for(i=0;i<evar6arr.length;i++)
			{
				if(evar6arr[i].indexOf("|") > -1)
				{
					var stopIndex = evar6arr[i].indexOf(";");
					workingStr = evar6arr[i].substring(1, stopIndex - 1);
//					alert("else: " + workingStr);
					return(workingStr);
				}
			}
		}
	}
	return workingStr;
}
 

