//	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 customEventRequest = false;
	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 createCookie(name,value,days) 
	{
		if (days) 
		{
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		
		if(document.domain != "localhost")
			thisDomain = "domain=" + document.domain.slice(document.domain.lastIndexOf(".", document.domain.indexOf(".com") -1) + 1) + ";";
		else
			thisDomain = "";
		document.cookie = name + "=" + value + expires + "; path=/;" + thisDomain;
	}

	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 eraseCookie(name) 
	{
			try
			{
				createCookie(name,"",-1);
			}
			catch (e)
			{
			}
	}

	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 definePromoCall(promoID, divID)
	{
		if(!divID)
			divID = promoID;
		var city = google.loader.ClientLocation.address.city;
		var urlEncodedCity = Base64.encode(city);
		var state = google.loader.ClientLocation.address.region.toUpperCase();
		var promoUrl =  '/personalizedpromo/customize/trackingId/subTrackingId/promoId/' + promoID + '/OSName/subOSName/screenWidth/subScreenWidth/screenHeight/subScreenHeight/browserType/bType/browserVersion/bVersion/city/' + urlEncodedCity + '/state/' + state + '/promo?x=' + (new Date()).getTime();
		$(window).load( function() { personalizedPromotionCall(promoUrl, divID); });
	}
	
	function defineTcatPromoCall(promoID, divID)
		{
			if(!divID)
				divID = promoID;
			var city = google.loader.ClientLocation.address.city;
			var urlEncodedCity = Base64.encode(city);
			var state = google.loader.ClientLocation.address.region.toUpperCase();
			var promoUrl =  '/MasterWebPortal/customize/trackingId/subTrackingId/promoId/' + promoID + '/OSName/subOSName/screenWidth/subScreenWidth/screenHeight/subScreenHeight/browserType/bType/browserVersion/bVersion/city/' + urlEncodedCity + '/state/' + state + '/promo?x=' + (new Date()).getTime();
			$(window).load( function() { personalizedPromotionCall(promoUrl, divID); });
	}
	
	function personalizedPromotionCall(url, divID)
	{
		if(!divID)
			divID = "result";
		
		var promoRequest = newPromoRequest();

		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;
		}

		url = url.replace("subTrackingId", trackingId);
		url = url.replace("bVersion", browserVersion);
		url = url.replace("bType", browserType.toUpperCase());
		url = url.replace("subTrackingId", trackingId);
		url = url.replace("subScreenWidth", screenWidth);
		url = url.replace("subScreenHeight", screenHeight);
		url = url.replace("subOSName", osName);

		if (!promoRequest)
		{
		}
		else
		{
			promoRequest.open("GET", url, true);
			promoRequest.onreadystatechange = function(){
				personalizedPromotionsCallback(promoRequest, divID);
			}
			
			promoRequest.send(null);
		}
	};

	function personalizedPromotionsCallback(promoRequest, divID)
	{
		if (promoRequest.readyState == 4)
		{
			if (promoRequest.status == 200)
			{
				document.getElementById(divID).innerHTML = promoRequest.responseText;
			}
			else if (promoRequest.status == 404)
			{
			}
			else
			{
			}

		}
	};

	function customEventCall(url)
	{
		try
		{
			customEventRequest = new XMLHttpRequest();
		}
		catch (trymicrosoft)
		{
			try
			{
				customEventRequest = new ActiveXObject("Msxml2.XMLHTTP");
			}
			catch (othermicrosoft)
			{
				try
				{
					customEventRequest = new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch (failed)
				{
					customEventRequest = false;
				}
			}
		}

		if (!customEventRequest)
		{
		}
		else
		{
			var tid = readCookie('trackingIdCookie');
			var trackingId=0;

			if (tid == null) 
			{
				trackingId=0;
			}
			else
			{
				trackingId = tid;
			}

			url = url.replace("subTrackingId", trackingId);
			customEventRequest.open("GET", url, true);
			customEventRequest.onreadystatechange = customCallback;
			customEventRequest.send(null);

		}
	};

	function customCallback()
	{
		if (customEventRequest.readyState == 4)
		{
			if (customEventRequest.status == 200)
			{
				var trackingId = customEventRequest.responseText;
				var trackingIdCookie = readCookie('trackingIdCookie');

				if (trackingIdCookie == null) 
				{
					if(trackingId)
					{
						createCookie('trackingIdCookie',trackingId,14);
					}
				}
				else
				{
					if(trackingId)
					{
						eraseCookie('trackingIdCookie');
						createCookie('trackingIdCookie',trackingId,14);
					}
				}
			}
			else if (customEventRequest.status == 404)
			{
			}
			else
			{
			}

		}
	};

	function getScreenWidth() 
	{
		return screen.width;
	};
	
	function getScreenHeight() 
	{
		return screen.height;
	};

	function searchString(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;
			}
		}
	};

	function searchVersion(dataString) 
	{
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	};



//-------------------------------------------



function personalizedPromoControllerClass()
{
	var promoList = new Array();
	var completeList = new Array();
	var updateTimer = null;
	
	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);
				}
			}
			testPromo = testPromo.getNextPL();
		}
		
		if(promoList[0] == null)
			promoList.splice(0, 1);
			
		if(promoList.length != 0 || promoList[0] != null)
		{
			updateTimer = setTimeout(update, 250);
		}
	}
	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 urlEncodedCity = Base64.encode(city);
		var state = google.loader.ClientLocation.address.region.toUpperCase();
		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();

		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;
		
		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);
							if(!updateTimer)
								update();
						}
				}
		promoRequest.send(null);

		function getImageBufferF()
		{
			return imageBuffer;
		}
		function getExistingImageF()
		{
			return existingImage;
		}
		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);
		}
	}
}