var adIdsOnPage = new Array();
var adMap = new Object();
function AdUnit(advertiserId, id, titleText, titleUrl, text, advertiserUrl, width, height, borderWidth, borderColor, backgroundColor, keywords, direct) {
	this.advertiserId = advertiserId;
	this.id = id;
	this.titleText = titleText;
	this.titleUrl = titleUrl;
	this.text = text;
	this.advertiserUrl = advertiserUrl;
	this.width = width;
	this.height = height;
	this.borderWidth = borderWidth;
	this.borderColor = borderColor;
	this.backgroundColor = backgroundColor;
	this.keywords = keywords;
	this.direct = direct;
	
}
var openRequest;

function prepareAds(){
	if (document.getElementById || document.all){
		document.write('<div id="adContainer" onmouseover="isMouseOnAd = true;" onmouseout="isMouseOnAd = false;">');
		document.write('</div>');
	}
}
function initAds(generatedQueryParameters){	
	var allSpans = document.getElementsByTagName("span");
	var j = 0;
	for(var i = 0; i < allSpans.length; i++){
		if(allSpans[i].className =="adphrase"){
			if(allSpans[i].id){
				try{
					//TODO - process advertiserid, adid
					var adId = allSpans[i].id;//.substring(7, allSpans[i].id.length);
					adIdsOnPage[j++] = adId;
				}
				catch(error){}
			}
		}
	}
	if(adIdsOnPage.length > 0){
		var requestLogQuery=generatedQueryParameters+"&requestFormatType=INTEXT&adRequestLog.adSet.adSetName=InTextAdSet&searchTermType=NONE&searchType=PRIMARYKEY";	
		var urlAdRetriever = "adriti/retrieve-ads.html?"+requestLogQuery+"&ads=";
		
		for(var k = 0; k < adIdsOnPage.length; k++){
			urlAdRetriever += adIdsOnPage[k];
			if(k != adIdsOnPage.length - 1){
				urlAdRetriever += ",";
			}
		}
		//alert("Retrieving Ad Data from " + urlAdRetriever);
		//var urlAdRetriever = "adritiunit-sample.xml";
		//TODO write code to retrieve ads pertaining to
		//these ads - use XMLHTTPRequest asynchronous mode
		openRequest = getAjaxRequest();
		try {
			openRequest.onreadystatechange = loadAds;
			if(debug) alert("Opening " + urlAdRetriever);
			openRequest.open("GET", urlAdRetriever, true);
			openRequest.send(null);
		}
		catch (error) {
			if(debug)
				displayDebugError("Error communicating with PageEventListener:\n", error);
		}
	}
}
//Map that holds all the adUnit instances
adMap = new Object();
function getAdUnit(advertiserId, adId){
	var obj =  adMap[advertiserId + "." + adId];
	return obj;
}
function getAdUnitById(adKey){
	var obj =  adMap[adKey];
	return obj;
}
function loadAds(){
	//TODO - use statechange values of 3 for faster loading
	if(debug) alert("Loading ads now and state = " + openRequest.readyState);
	if (openRequest.readyState == 4) {
        // only if "OK"
        if(debug) alert("finished getting xml and status = " + openRequest.status);
        if (openRequest.status == 200) {
        //if (openRequest.status == 0) {
            var adsXml = openRequest.responseXML;
            if(debug) alert(adsXml);
            var adUnitElements = adsXml.getElementsByTagName("adunit");
            if(debug) alert(adUnitElements);
            for(var i = 0; i < adUnitElements.length; i++){
            	var newAdUnit = getAdUnitFromXml(adUnitElements[i]);
            	adMap[newAdUnit.advertiserId + "." + newAdUnit.id] = newAdUnit;
            	//alert("Ad No." + i);
            }
        } else if(debug){
            if(debug) alert("There was a problem retrieving the XML data:\n" + openRequest.statusText);
        }
    }
}
function getAdUnitFromXml(adUnitElement){
	var id = getAdUnitAttribute(adUnitElement, "ad-id");
	var advertiserId = getAdUnitAttribute(adUnitElement, "advertiser-id");
	var titleText = getAdUnitProperty(adUnitElement, "title-text");
	var titleUrl = getAdUnitProperty(adUnitElement, "title-url");
	var text = getAdUnitProperty(adUnitElement, "text");
	var advertiserUrl = getAdUnitProperty(adUnitElement, "advertiser-url");
	var width = getAdUnitProperty(adUnitElement, "width");
	var height = getAdUnitProperty(adUnitElement, "height");
	var borderWidth = getAdUnitProperty(adUnitElement, "border-width");
	var borderColor = getAdUnitProperty(adUnitElement, "border-color");
	var backgroundColor = getAdUnitProperty(adUnitElement, "background-color");
	var keywords = getAdUnitProperty(adUnitElement, "keywords");
	var direct = getAdUnitProperty(adUnitElement, "direct");
	
	return new AdUnit(advertiserId, id, titleText, titleUrl, text, advertiserUrl, width, height, borderWidth, borderColor, backgroundColor, keywords, direct);
}
function getAdUnitProperty(adUnitElement, propertyName){
	for(var j = 0; j < adUnitElement.childNodes.length; j++){
		if(adUnitElement.childNodes[j].nodeName == propertyName){
			if(debug) alert ("Returning -> " + adUnitElement.childNodes[j].firstChild.nodeValue + " for " + propertyName + " of type " + adUnitElement.childNodes[j].firstChild.nodeType);
			return adUnitElement.childNodes[j].firstChild.nodeValue;
		}
	}
	return null;
}
function getAdUnitAttribute(adUnitElement, attributeName){
	if(debug) alert ("Returning -> " + adUnitElement.attributes.getNamedItem(attributeName).value);
	return adUnitElement.attributes.getNamedItem(attributeName).value;
}
///////////showad.js//////////
var offsetFromMouse = [1,1]; //image x,y offsets from cursor position in pixels. Enter 0,0 for no offset
var displayDuration = 200; //duration in seconds image should remain visible. 0 for always.
var isMouseOnAd = false;

function documentBody(){
return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function getAdContainer(){
	if (document.getElementById)
		return document.getElementById("adContainer").style
	else if (document.all)
		return document.all.adContainer.style
}

function getAdContainerNoStyle(){
if (document.getElementById)
	return document.getElementById("adContainer")
else if (document.all)
	return document.all.adContainer
}


function truebody(){
	return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}

function followMouse(e){

	var xCoord = offsetFromMouse[0]
	var yCoord=offsetFromMouse[1]

	var docWidth = document.all? truebody().scrollLeft + truebody().clientWidth : pageXOffset + window.innerWidth - 15;
	var docHeight = document.all? Math.min(truebody().scrollHeight, truebody().clientHeight) : window.innerHeight;
	var adWidth = parseInt(adObject.width);
	var adHeight = parseInt(adObject.height);
	var adBorderWidth = parseInt(adObject.borderWidth);
	var adPadding = 5;
	
	if (typeof e != "undefined"){
		if (e.pageX >= (docWidth - adWidth)){
			xCoord = e.pageX - adWidth - 12; // Move to the left side of the cursor
		} else {
			xCoord += e.pageX;
		}
		if (e.pageY >= (docHeight - adHeight)){
			yCoord = e.pageY - adHeight - 12;
		} else {
			yCoord += e.pageY;
		}

	} else if (typeof window.event != "undefined"){
		if (event.clientX >= docWidth - adWidth){
			xCoord = event.clientX + documentBody().scrollLeft - adWidth - 15; // Move to the left side of the cursor
		}
		else {
			xCoord += event.clientX + documentBody().scrollLeft;
		}
		if (event.clientY >= (docHeight - adHeight)){
			yCoord = event.clientY + documentBody().scrollTop - adHeight - 30;
		}
		else {
			yCoord += event.clientY + documentBody().scrollTop;
		}
	}
	//If it is already showing dont move it
	if(getAdContainer().visibility != "visible"){
		getAdContainer().left = xCoord + "px";
		getAdContainer().top = yCoord + "px";

		getAdContainer().width = (adWidth + 2 * adBorderWidth + 2 * adPadding) + "px";
		getAdContainer().height = (adHeight + 2 * adBorderWidth + 2 * adPadding) + "px";

		getAdContainer().visibility="visible";

		getAdContainer().maxWidth = getAdContainer().width;
		getAdContainer().maxHeight = getAdContainer().height;
		//also change width of adriti tabheader...
		var adritiTabHeader = document.getElementById("adrititab");
		adritiTabHeader.style.marginLeft = ((adWidth + 2 * adBorderWidth + 2 * adPadding) - 100) + "px";
	}
}
var adTimerId;
function doNotFollowMouse(e){
	//wait for sometime before Ad can disappear
	clearInterval(adTimerId);
	adTimerId = setInterval("hideAdContainer()",displayDuration);
}
function hideAdContainer(){
	//do the hiding only if not on adcontainer
	if(!isMouseOnAd){
		getAdContainer().visibility="hidden";
		document.onmousemove="";
		clearInterval(adTimerId);
	}
}
var adObject;
var checkURLValue=false;
function showAd(adUnitSpan){
	//get adId from adUnitSpan
	var adId = adUnitSpan.id;
	checkURLValue=true;
	if(getAdContainer().visibility != "visible"){
		//store the currently displayed ad
		adObject = getAdUnitById(adId);
		/*alert("width=" + adObject.width +
				",height=" + adObject.height + 
				",bgc=" + adObject.backgroundColor +
				",bw=" + adObject.borderWidth + 
				",bc=" + adObject.borderColor);*/
				
		document.onmousemove=followMouse;
		
		var newHtml = '<div class="adsbyadriti" style="background-color:#' + adObject.borderColor+ ';" id="adrititab">Ads by Adriti</div>' +
					'<div style="width:' + adObject.width+ 'px;height:' + 
					adObject.height + 'px;padding:5px;' + 
					'background-color:#' + adObject.backgroundColor + 
					';border: ' + adObject.borderWidth + 'px solid #' + adObject.borderColor + ';"><a href="adriti/show-ad?url=' + adObject.titleUrl + '" >' + adObject.titleText + '</a><br/><br/>' + adObject.text + '<br/><br/><span class="extsite">'  + adObject.advertiserUrl + '</span>'+'</div>';
		//alert(newHtml);
		getAdContainerNoStyle().innerHTML = newHtml;
	}
}
function hideAd(adUnit){	
	doNotFollowMouse();
}
/////////For Adriti - 2.0 //////////////////////
debug=true;
function sendClickToRequestLog(adRequestLogId, advertiserId, adId, href,isDirect){
	try{
		//check here weather base urshould be /adriti/show-ad(INTEXT  checkURLValue= true) or just show-ad(for iframe checkURLValue= false) 
		var baseUrl="";
		var addParameter="";
		if(checkURLValue){
			baseUrl="adriti/";
		}			
		var openRequest = getAjaxRequest();	
		var clickListenerUrl = baseUrl + "show-ad?adRequestLogId=" + adRequestLogId + "&advertiserId=" + advertiserId + "&adId=" + adId +"&clicked=true";
		if(debug){
			alert("Sending request to " + clickListenerUrl);
		}
		openRequest.open("GET", clickListenerUrl, true);
		openRequest.send(null);
		if(debug){
			alert("Done. Posting.  Result is [" + openRequest.responseText + "]");
		}
	}					
	catch (error) {
		if(debug){
			var r = "Error communicating with Adriti:\n";
			for (var p in error)
				r += p + ": " + error[p];			
			alert(r);
				
		}
	}
}