var acd_request;
var acd_deServer = "ads.pgatour.com";
var hostname = window.location.hostname;	
var acd_adFileHost = hostname;
var acd_iframeSync = "/.element/js/5.0/sect/leaderboards/AdCompositeManager/iframeSync.html";

function acd_MultiCallback() {
   if (acd_request.readyState == 4) {
     try {
       if (acd_request.status != 200) {
       // erroring out, not much we can do about it
       } else {
		acdManager.getInstance().adQueue.parseDEReturn(acd_request.responseText);
       }
     } catch(e) {
     	// erroring out, not much we can do about it
     }
   }
}

function acd_AdFileCallback() {
   if (acd_request.readyState == 4) {
     try {
       if (acd_request.status != 200) {
     	// erroring out, not much we can do about it
       } else {
         acdManager.getInstance().adQueue.adFileDataSet(acd_request.responseText);
       }
     } catch(e) {
     	// erroring out, not much we can do about it
     }
   }
}

function acd_displayAd(adFileLocation,targetDiv, dimensions) {
	this.adFileLocation = adFileLocation;
	this.targetDiv = targetDiv;
	this.dimensions = dimensions;
	this.adSegvars = null;
	this.deData = null;
}

function acd_group() {
	this.adFiles = new Array();
	this.request = null;
	this.workingIterator = -1;
	
	this.adFileDataSet = function(segvars) {
		this.adFiles[this.workingIterator].adSegvars = segvars;
		var recursiveIterator = -1;
		for (var  i = 0; i < this.adFiles.length; i++) {
			if (this.adFiles[i].adSegvars == null) {
				recursiveIterator = i;
				break;
			}
		}
		if (recursiveIterator >= 0) {
			this.adFileGrab(recursiveIterator);
		} else {
			this.composeAds();
		}
	}
	
	this.parseDEReturn = function(data) {
		var arr = data.split("__@@$$@@__");
		arr.splice(0,1);
		for (var i = 0; i < arr.length; i++) {
			// this is messy, but what're ya gonna do?
			var str = arr[i];
			var ok = str.indexOf('OK');
			str = str.slice((ok + 3), str.length);
			this.adFiles[i].deData = str;
		}
		this.displayAds();
	}

	this.displayAds = function() {
		for (var i = 0; i < this.adFiles.length; i++) {
			var ll = this.adFiles[i].deData.toUpperCase();
			if (ll.indexOf('<SCRIPT') > -1) {

				if (ll.indexOf('VBSCRIPT') > -1) {
					this.adFiles[i].deData = this.adFiles[i].deData.slice(0,this.adFiles[i].deData.indexOf(("doc" + "ument.write('<SC" + "RIPT LANGUAGE=V" + "BScript"))) + "ShockMode = 1;" + 
						this.adFiles[i].deData.slice(this.adFiles[i].deData.indexOf(("doc" + "ument.write('<\/SC" + "RIPT\> \n');")) + 31, this.adFiles[i].deData.length);
				}

				$(this.adFiles[i].targetDiv).innerHTML = '<iframe hspace="0" vspace="0" marginHeight="0" marginWidth="0" src="'+acd_iframeSync+'?q='+i+'" border="0" frameBorder="0" height="'+this.adFiles[i].dimensions[1]+'" width="'+this.adFiles[i].dimensions[0]+'" scrolling="no" id="adIter'+i+'Iframe" style="position: absolute;" allowTransparency="true"></iframe>';
			} else {
				$(this.adFiles[i].targetDiv).innerHTML = this.adFiles[i].deData;
			}
		}
	}

	this.composeAds = function() {
		var postRequest = "";
		var tileId = cnnad_getID();
		for (var i = 0; i < this.adFiles.length; i++) {
			var adOn = "ad0" + i + "=";
			var str = "tile=" + tileId + "&";
			var segVars = this.adFiles[i].adSegvars; //for production ad tags
			//var segVars = this.adFiles[i].adSegvars.slice(0,this.adFiles[i].adSegvars.length - 1);	//for test ad tags
			str += segVars;
			adOn = adOn + escape(str);
			postRequest += adOn + "&";
		}
		postRequest = postRequest.slice(0,postRequest.length - 1);

		var url = 'http://'+acd_deServer+'/multi/html.ng';
		acd_request = new CrossXHR();
		acd_request.onreadystatechange = acd_MultiCallback;
		acd_request.open('POST', url);
		acd_request.send(postRequest);
	}
	
	this.adFileGrab = function(it) {
		this.workingIterator = it;
	  	var url = ('http://'+acd_adFileHost+'/'+this.adFiles[it].adFileLocation);
		acd_request = new CrossXHR();
		acd_request.onreadystatechange = acd_AdFileCallback;
		acd_request.open('GET', url);
		acd_request.send();
	}
}

function acdManager() {
	if (acdManager.caller != acdManager.getInstance) {
		// do nothing, we don't really care
	}
	
	this.adQueue = null;
	
	this.writeSyncIframe = function(h) {
		var ss = h + "";
		var adIter = ss.charAt(ss.indexOf('q=')+2) - 0;
		var b = document.getElementById(('adIter'+adIter+'Iframe'));
		var doc = b.contentDocument;
	    if (doc == undefined || doc == null)
	        doc = b.contentWindow.document;
	    doc.open();
	    doc.write(this.adQueue.adFiles[adIter].deData);
	    doc.close();
	}
	
	this.push = function(adFileLocation, targetDiv, dimensions) {
		if (this.adQueue == null) {
			this.adQueue = new acd_group();
		}
		this.adQueue.adFiles[this.adQueue.adFiles.length] = new acd_displayAd(adFileLocation, targetDiv, dimensions);
	}
	
	this.displayAds = function() {
		this.adQueue.adFileGrab(0);
	}
	
	
	
}

acdManager.__instance__ = null;
acdManager.getInstance = function() {
	if (this.__instance__ == null) {
		this.__instance__ = new acdManager();
	}
	return this.__instance__;
}

