var promos;        
// Detection of browser, version and OS
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";
	},
	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: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			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 _initPromos(promos) {
	var zids = '';

    elements = document.getElementsByClassName("m_link");
    
    for (var i = 0, length = elements.length; i < length; i++) {
	    element = elements[i];
		zid = getZoneIdFromUrl(element.href, 'key=');	
	    
	    if (i > 0) {		    
		    zids += ';';
		}
	    zids += '' + zid;
    }
	
        
   if(render == 0) {
	    promos = getPromosAjax(zids);
	    return;
    }
 //   eval(response);

    
    // Holds the number of zones with same id
    var renderred = new Array();
    for (var i = 0, length = elements.length; i < length; i++) {
	    element = elements[i];
	    
		zid = getZoneIdFromUrl(element.href, 'key=');	
		zid = unescape(zid);
        
	    if (renderred[zid] != null) {
	    	renderred[zid]++;
	    } else {	    	
	    	renderred[zid] = 0;
	    }
		if (promos[zid]) {
		    if (promos[zid][renderred[zid]]) {
			    element.href = promos[zid][renderred[zid]]["ahref"];
			    if (promos[zid][renderred[zid]]["imgsrc"]) {
                    if (promos[zid][renderred[zid]]["imgw"]>0 && promos[zid][renderred[zid]]["imgh"]>0) {
			    	    element.innerHTML = "<img src=\" " + promos[zid][renderred[zid]]["imgsrc"] + "\" width=\"" + promos[zid][renderred[zid]]["imgw"] + "\" height=\"" + promos[zid][renderred[zid]]["imgh"] + "\" border=\"0\" title=\"" + promos[zid][renderred[zid]]["imgalt"] + "\" />";
                    }   else {
                            element.innerHTML = "<img src=\" " + promos[zid][renderred[zid]]["imgsrc"] + "\" border=\"0\" title=\"" + promos[zid][renderred[zid]]["imgalt"] + "\" />";          
			        }
			   } else if (promos[zid][renderred[zid]]["promotext"]) {	    	
			    	element.innerHTML = promos[zid][renderred[zid]]["promotext"];
			    }
			    else if (promos[zid][renderred[zid]]["flashsrc"]) {
			    	element.innerHTML = "<embed src=\"" + promos[zid][renderred[zid]]["flashsrc"] + "&clickTAG=" + promos[zid][renderred[zid]]["ahref"] + "\" width=\"" + promos[zid][renderred[zid]]["flashw"] + "\" height=\"" + promos[zid][renderred[zid]]["flashh"] + "\" border=\"0\" quality=\"high\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" type=\"application/x-shockwave-flash\" title=\"" + promos[zid][renderred[zid]]["flashalt"] + "\" />";         
			    }
			}
		}
    }
}

// making Ajax request
function getPromosAjax(zones) {
	var res;
	var url = window.location;
	var str = '';
	
	str = url.toString();
	pos1 = str.search('//');
	url1 = str.substring(pos1+2);
	pos2 = url1.search('/');
	newUrl = url1.substring(0, pos2);
	
	
//	res = xmlhttpGet('http://'+newUrl+'/trunk/delivery/index.php?zids=' + zones + _mInfo());
//	res = xmlhttpGet('delivery_engine_url/promoLoad?key=' + zones + _mInfo());
	//res = xmlhttpGet('d.php');//this works on the same domain
aObj = new JSONscriptRequest('delivery_engine_url/promoLoad?key=' + zones + _mInfo());
// Build the script tag
aObj.buildScriptTag();
// Execute (add) the script tag
aObj.addScriptTag();

//    res = xmlhttpGet('http://localhost:8080/delivery/promoLoad?zids=' + zones + _mInfo());
	
	return res;
}

function getZoneIdFromUrl(url, param) {
	var str = '';
	var newStr = '';
	
	str = url;
	pos = str.search(param);	
	newStr = str.substring(pos+param.length);
    
    return newStr.replace(/&/g, ",");	
//	newPos = newStr.search('&');	
//	if (newPos == -1) {
//		return newStr;
//	} else {
//		newStr = newStr.substring(0, newPos);
//		
//		return newStr;
//	}
}

var already_loaded;//This is used to prevent attaching more than one onload function when there are more than one invocation code on a single page
var response = "";
var render = 0;

if(!already_loaded){  
BrowserDetect.init();
       br = BrowserDetect.browser;       
	// Event Listener
	if (window.addEventListener && br!='Opera') {
		window.addEventListener ('load', _initPromos, true);
	} else if (window.attachEvent) {
		window.attachEvent ('onload', _initPromos);
	} else {
		window.onload = _initPromos;
	}
	already_loaded=1;
}










///////////////////////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
// Constructor -- pass a REST request URL to the constructor
//
function JSONscriptRequest(fullUrl) {
 // REST request path
 this.fullUrl = fullUrl;
 // Keep IE from caching requests
 this.noCacheIE = '&noCacheIE=' + (new Date()).getTime();
 // Get the DOM location to put the script tag
 this.headLoc = document.getElementsByTagName("head").item(0);
 // Check for pages without <head> tag.
 if(this.headLoc==null)
 	this.headLoc = document.getElementsByTagName("html").item(0);
 
 // Generate a unique script tag id
 this.scriptId = 'YJscriptId' + JSONscriptRequest.scriptCounter++;
}

// Static script ID counter
JSONscriptRequest.scriptCounter = 1;

// buildScriptTag method
//
JSONscriptRequest.prototype.buildScriptTag = function () {

 // Create the script tag
 this.scriptObj = document.createElement("script");

 // Add script object attributes
 this.scriptObj.setAttribute("type", "text/javascript");
 this.scriptObj.setAttribute("src", this.fullUrl + this.noCacheIE);
 this.scriptObj.setAttribute("id", this.scriptId);
}

// removeScriptTag method
//
JSONscriptRequest.prototype.removeScriptTag = function () {
 // Destroy the script tag
 this.headLoc.removeChild(this.scriptObj);
}

// addScriptTag method
//
JSONscriptRequest.prototype.addScriptTag = function () {
 // Create the script tag
 this.headLoc.appendChild(this.scriptObj);
}
function _uES(s,u) {
	if (typeof(encodeURIComponent) == 'function') {
		if (u) 
			return encodeURI(s);
		else 
			return encodeURIComponent(s);
	} else {
		return escape(s);
	}
}    
    
function _mInfo() {
       var sr="-",sc="-",ul="-",fl="-",cs="-",je=1,br="-",ver="-",os="-";
       var n=navigator;      
      
       if (self.screen) {
           sr=screen.width+"x"+screen.height;
           sc=screen.colorDepth+"-bit";
       } else if (self.java) {
           var j=java.awt.Toolkit.getDefaultToolkit();
           var s=j.getScreenSize();
           sr=s.width+"x"+s.height;
       }
       if (n.language) { 
           ul=n.language.toLowerCase(); 
       } else if (n.browserLanguage) { 
           ul=n.browserLanguage.toLowerCase(); 
       }
       je=n.javaEnabled()?1:0;
//       if (_uflash) fl=_uFlash();
       if (document.characterSet) 
           cs=_uES(document.characterSet);
       else if (document.charset) 
           cs=_uES(document.charset);
        
       // gathering info for the browser and OS    
       BrowserDetect.init();
       br = BrowserDetect.browser;   
       ver = BrowserDetect.version;
       os = BrowserDetect.OS;
        
       return "&mdscs="+cs+"&mdssr="+sr+"&mdssc="+sc+"&mdsul="+ul+"&mdsje="+je+"&mdsfl="+fl+"&mdsbr="+br+"&mdsver="+ver+"&mdsos="+os;
}
    
function hasClassName(element, className) {
    var elementClassName = element.className;
    if (elementClassName.length == 0) 
    	return false;
    if (elementClassName == className || elementClassName.match(new RegExp("(^|\\s)" + className + "(\\s|$)")))
        return true;
    return false;
}





document.getElementsByClassName = function(className, parentElement) {
    var children = document.body.getElementsByTagName('*');
    var elements = [], child;
    for (var i = 0, length = children.length; i < length; i++) {
	    child = children[i];
	    if (hasClassName(child, className))
        	elements.push(child);
    }
    return elements;
}


