/**
 * Script to handle advertising
 * @author Dean McGill 08/10/2009
 */

$(function() {
	
	/**
	 * URLs for the advert types
	 */
	var OPENX_BANNER_TOP = '/banners/openx_top.html',
		OPENX_BANNER_TOP_HOME = '/banners/openx_top_home.html',
		OPENX_BANNER_RIGHT = '/banners/openx_right.html',
		OPENX_BANNER_RIGHT_HOME = '/banners/openx_right_home.html',
		OPENX_BANNER_BOTTOM = '/banners/openx_bottom.html',
		OPENX_BANNER_BOTTOM_HOME = '/banners/openx_bottom_home.html',
		HPI_BANNER_TOP = '/banners/hpi_top.html',
		HPI_BANNER_RIGHT = '/banners/hpi_right.html',
		HPI_BANNER_BOTTOM = '/banners/hpi_bottom.html';
		
	/**
	 * render a banner advert
	 */
	function renderAdvert(cfg)
	{
		var frame = document.createElement('IFRAME');
		
		frame.src = cfg.src;
		frame.width = cfg.width;
		frame.height = cfg.height;
		frame.scrolling = 'no';
		frame.frameBorder = 0;
		frame.align = 'center';
		frame.valign='top';
		frame.marginwidth = 0;
		frame.marginheight = 0;
		frame.hspace = 0;
		frame.vspace = 0;
		cfg.el.appendChild(frame);
	};
	
	/**
	 * hide the advert text for HPI adverts
	 */
	function hideAdvertText()
	{
		document.getElementById('topadverttext').style.visibility = 'hidden';
		document.getElementById('rightadverttext').style.visibility = 'hidden';
		document.getElementById('bottomadverttext').style.visibility = 'hidden';
	};
	
	function showHpiAdverts()
	{
 	   aTop.src = HPI_BANNER_TOP;
	   aRight.src = HPI_BANNER_RIGHT;
	   aBottom.src = HPI_BANNER_BOTTOM;
	   
	   renderAdvert(aTop);
	   renderAdvert(aRight);
	   renderAdvert(aBottom);
	   
	   hideAdvertText();
	};
	
	/**
	 * define inital config objects and other variables
	 */
	var xhr = false,
		OPENX_ADVERT = 'openx',			// constant for openX banners
		HPI_ADVERT = 'hpi',				// constant for HPI banners
    	aTop = {
			el : document.getElementById('topadvert'),
			width : 728,
			height : 90
		},
    	aRight = {
			el : document.getElementById('rightadvert'),
			width : 120,
			height : 600
		},
    	aBottom = {
			el : document.getElementById('bottomadvert'),
			width : 468,
			height : 60
		};
	
	

	try {
	    xhr = new XMLHttpRequest();     
	} catch(e) {
	    try {
	        xhr = new ActiveXObject("Msxml2.XMLHTTP");
	    } catch(e) {
	        try {
	            xhr = new ActiveXObject("Microsoft.XMLHTTP");
	        } catch(e) {
	        	
	        }   
	    }     
	}
	
	/**
	 * check the statos of the openX servers using XHR to our servlet
	 */
	if (xhr) {
	    // set a timeout as a safeguard, although in practise this should never be used
	    var timer = window.setTimeout(function() {
	    	
	    	showHpiAdverts();
    	   
	    }, 10000);
	
	    xhr.onreadystatechange = function () {
	       if (xhr.readyState == 4) {
	           window.clearTimeout(timer);
	           
	           try {
	        	   	
				   var res = new Function( 'return ' + xhr.responseText )();
	
		           if (xhr.status == 200 && res.openx == true) {
		        	   
		        		// if the hpiAds variable is set, use our own adverts instead.
		        		if (window.hpiAds)
		        		{
		        			aTop.src = HPI_BANNER_TOP + '?gid=' + res.ga;
		        	 	    aRight.src = HPI_BANNER_RIGHT + '?gid=' + res.ga;
		        	 	    aBottom.src = HPI_BANNER_BOTTOM + '?gid=' + res.ga;
		        	 	   
		        	 	    renderAdvert(aTop);
		        	 	    renderAdvert(aRight);
		        	 	    renderAdvert(aBottom);
		        	 	    
		        	 	    hideAdvertText();
	
		        	 	    return;
		        		}
		        	   
		        	   if (window.location.pathname == '/' || window.location.pathname == '/index.html')
		        	   {
		        		   // use openx home page
		        		   aTop.src = OPENX_BANNER_TOP_HOME;
			        	   aRight.src = OPENX_BANNER_RIGHT_HOME;
			        	   aBottom.src = OPENX_BANNER_BOTTOM_HOME;
			        	   
		        	   }
		        	   else
		        	   {
		        		   // use openx
		        		   aTop.src = OPENX_BANNER_TOP;
			        	   aRight.src = OPENX_BANNER_RIGHT;
			        	   aBottom.src = OPENX_BANNER_BOTTOM;
	
		        	   }
		        	   
		        	   renderAdvert(aTop);
		        	   renderAdvert(aRight);
		        	   renderAdvert(aBottom);
		        	   
		           } else {
		        	   // use hpi
		        	   showHpiAdverts();
		           }
	           } catch (e) {
	        	   showHpiAdverts();
	           }
	        }
	    };
	
	    xhr.open('GET', '/consumer/openxStatus?cb=' + new Date().valueOf() , true);
	    xhr.send(null);
	}
	
});