/* Javascript - Ads API *****************************************************
 *	
 *	REQUIRES:	For the ads to works the following elements must exist
 *				on the calling page:
 *
 *					1. "bannerAdImage" Element		- Container for Ad Image
 *					2. "bannerAdAlt" Element		- Container for Alt Text
 *					3. "bannerAdLink" Element		- Container for the Link
 *					4. "bannerAdContainer" Element	- Container for everything
 *
 *	NOTES:		Functions related to ads and banner ads.
 *
 ****************************************************************************/

	addLoadEvent(initializeAds);
	
	var firstAd 		= true;
	var adIndex 		= "";
	var numAds 			= "";
	var firstAdIndex	= "";
	var bannerAdElement = "";
	var adPageNum		= "no";
	var stopRotation	= false;
	
	var bannerAdImage 	= new Array();
	var bannerAdLink 	= new Array();
	var bannerAdAlt 	= new Array();
	var bannerAdWeight 	= new Array();
	
	
/* Initialize Ads ******************************************************
 *	
 *		TAKES:		NOTHING
 *		RETURNS:	NOTHING
 *		NOTES:		Sets up the initial variables for the ads
 *
 *********************************************************************/
 
	function initializeAds()
	{
		if (getElement("bannerAdContainer") != null)
		{
			var totalWeight		= 0;
			var weightedValue 	= 0;
			var currentWeight	= 0;
			var lastWeight		= 0;
			
			firstAdIndex		= 1; // Default
			numAds 				= bannerAdImage.length;
			
			// Get Ad Weights
			for(var ctr=0; ctr<numAds; ctr++)
			{
				totalWeight += bannerAdWeight[ctr];
			}
			
			weightedValue 	= Math.floor(Math.random()*(totalWeight)); // Random
			
			for(ctr=0; ctr<numAds; ctr++)
			{
				currentWeight += bannerAdWeight[ctr];
				
				if ((weightedValue <= currentWeight) & (weightedValue > lastWeight)) 
				{
					firstAdIndex = ctr;
					break;
				}
				
				lastWeight = currentWeight;
			}
			
			addBannerAdNavigation();
			getNextAd();
			addResizeEvent(updateBannerAdNavigationPosition); 
		}
	}

/* Add Banner Ad Navigation******************************************************
 *	
 *		TAKES:		NOTHING
 *		RETURNS:	NOTHING
 *		NOTES:		
 *
 *********************************************************************/
 
	function addBannerAdNavigation()
	{
		if (getElement("bannerAdContainer") != "undefined")
		{
			// Navigation ***************************
			var navElement						= getElement("bannerNav");
			//navElement.style.backgroundColor	= "#FFFFFF";
			
			var navTableElement 	= document.createElement("table");
			navTableElement.cellSpacing = 4;
			
			var navBodyElement 		= document.createElement("tbody");
			
			var navRowElement 		= document.createElement("tr");
			
			for(var ctr=0; ctr<numAds; ctr++)
			{
				adNum = ctr;
				
				var navColumn		= document.createElement("td");
				navColumn.id		= "adNum" + adNum;
				navColumn.className	= "bannerAdIndexNum";
				navColumn.innerHTML = adNum + 1;
				
				// Actions *****************************
				
					// Mouse Over Actions *****************************
					navColumn.onmouseover = function()
					{
						var newPageNum = this.id.replace("adNum", "");
						
						if (adPageNum != newPageNum)
						{
							this.className = "bannerAdIndexNumHover";
							this.style.cursor = "pointer";
						}
					}
					
					// Mouse Out Actions *****************************
					navColumn.onmouseout = function()
					{
						var newPageNum = this.id.replace("adNum", "");
						
						if (adPageNum != newPageNum)
						{
							this.className = "bannerAdIndexNum";
							this.style.cursor = "";
						}
					}
					
					// On Click Actions *****************************
					navColumn.onclick = function()
					{
						if (getOpacity("bannerAdImage") == 100)
						{
							var newPageNum = this.id.replace("adNum", "");
							
							stopRotation = true;
							getAd(newPageNum);
						}
					}
				
				navRowElement.appendChild(navColumn);
			}
			
			navBodyElement.appendChild(navRowElement);
			navTableElement.appendChild(navBodyElement);
			navElement.appendChild(navTableElement);
			
			var bannerElement = getElement("bannerAdContainer");
			
			var newPosX = getElementX(bannerElement) + getWidth(bannerElement) - getWidth(navElement);
			var newPosY = getElementY(bannerElement) + getHeight(bannerElement) - getHeight(navElement);
			
			setPosX(navElement, newPosX);
			setPosY(navElement, newPosY);
			setOpacity(navElement.id, 60);
		}
		
	}
	
/* Update Banner Ad Navigation Position ******************************************************
 *	
 *		TAKES:		NOTHING
 *		RETURNS:	NOTHING
 *		NOTES:		
 *
 *********************************************************************/
 
	function updateBannerAdNavigationPosition()
	{
		
		// Navigation ***************************
		var navElement		= getElement("bannerNav");
		var bannerElement 	= getElement("bannerAdContainer");
		
		var newPosX = getElementX(bannerElement) + getWidth(bannerElement) - getWidth(navElement);
		var newPosY = getElementY(bannerElement) + getHeight(bannerElement) - getHeight(navElement);
		
		setPosX(navElement, newPosX);
		setPosY(navElement, newPosY);
		
	}
	
/* Set Banner Ad Navigation Number ******************************************************
 *	
 *		TAKES:		New Number
 *		RETURNS:	NOTHING
 *		NOTES:		Removes the active number CSS class and adds it to the
 *					new one.
 *
 *********************************************************************/
 
	function setBannerAdNavigationNumber(newNumber)
	{
		if (getElement("bannerNav"))
		{
			if (adPageNum != "no")
			{
				getElement("adNum" + adPageNum).className = "bannerAdIndexNum";
			}
			
			getElement("adNum" + newNumber).className = "bannerAdIndexCurrentNum";
			adPageNum = newNumber;
		}
	}
	
/* Add Banner Ad ******************************************************
 *	
 *		TAKES:		Banner Image, Ad Link, Alt Text, Weight Percent
 *		RETURNS:	NOTHING
 *		NOTES:		Pushes the banner ad content into the global banner array.
 *					Weight is a number between 1 and 100 that represents
 *					the frequency of picking that banner image as the default
 *					image.
 *
 *********************************************************************/
 
	function addBannerAd(bannerImage, adLink, altText, weightPercent)
	{
		weightPercent = parseInt(weightPercent);
		
		bannerAdImage.push(bannerImage);
		bannerAdLink.push(adLink);
		bannerAdAlt.push(altText);
		bannerAdWeight.push(weightPercent);
		
		var newImage = new Image();
		newImage.src = bannerImage;
	}

// ************************************************************

/* Get Ad ******************************************************
 *	
 *		TAKES:		Banner Ad Index Number
 *		RETURNS:	NOTHING
 *		NOTES:		Pushes the banner ad content into the global banner array
 *
 *********************************************************************/
 
	function getAd(thisAdIndex)
	{
		getElement("bannerAdImage").src 	= "";
		getElement("bannerAdAlt").value 	= "";
		getElement("bannerAdLink").value 	= "";
		
		setOpacity("bannerAdImage", 0);
		
		getElement("bannerAdImage").src 	= bannerAdImage[thisAdIndex];
		getElement("bannerAdAlt").value 	= bannerAdAlt[thisAdIndex];
		getElement("bannerAdLink").value 	= bannerAdLink[thisAdIndex];
		
		hideElement("bannerAdLoading");
		showElement("bannerAdImage");
		
		setBannerAdNavigationNumber(thisAdIndex);
		fadeInElement("bannerAdImage", 0, 5);
		
		if (!stopRotation)
		{
			setTimeout("fadeOutAd()", 8500);
		}
	}

/* Get Next Ad ******************************************************
 *	
 *		TAKES:		NOTHING
 *		RETURNS:	NOTHING
 *		NOTES:		Pushes the banner ad content into the global banner array
 *
 *********************************************************************/
 
	function getNextAd()
	{
		if (getElement("bannerAdContainer") != undefined)
		{
		
			if (firstAdIndex != "no")
			{
				adIndex = firstAdIndex; // Random Ad
				firstAdIndex = "no";
			
			}
			else
			{
				if (adIndex < (numAds-1))
				{
					adIndex++;	
				}
				else
				{
					adIndex = 0;
				}
			}
			
			getAd(adIndex);
		}
		
	}

// *****************************************************************

/* Fade Out Ad ******************************************************
 *	
 *		TAKES:		NOTHING
 *		RETURNS:	NOTHING
 *		NOTES:		
 *
 *********************************************************************/
 
	function fadeOutAd()
	{
		if (!stopRotation)
		{
			fadeOutElementCallback("bannerAdImage", 100, 5, "getNextAd();")
		}
	}

// *******************************************************************************

/* Preload Banner Ad Images ******************************************************
 *	
 *		TAKES:		NOTHING
 *		RETURNS:	NOTHING
 *		NOTES:		
 *
 *********************************************************************/
 
	function preloadBannerAdImages()
	{
		if (bannerAdImage.length > 0)
		{
			
			for(var ctr=0; ctr<bannerAdImage.length; ctr++)
			{
				
			}
			
		}
	}
	
// ************************************************************
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	