/* (c) 2006-7 Ghost(TM) Inc. (http://G.ho.st/home) . All rights reserved.
G.ho.st licenses this software to you under the terms of the 
Common Public License Version 1.0 http://www.opensource.org/licenses/cpl.php 
*/

/**====================================================================================== **
/*  File: pool.js     				                                              **
/*  Creator: Mohammad Taweel...                                                             **
/*  Create date: 2009-01-28                                                               **
/*  Authors: Mohammad Taweel...					                                          **
/*                                                                                        **
/**====================================================================================== */
/* 
 * This javascript library is used to retrieve data from the pool.xml, where the pool.xml holds the server_revision
 * and the domain mapping, also it defines some important global variables such as VCURL
 * 
*/


// a global variable that holds the server_revision number which can be used in our clients requests.
var server_revision = "-1";

var callingURL = window.location.protocol + "//" + window.location.host;
callingURL.toLowerCase();

var rootURL;
var xmlDoc = null;
loadXMLDoc(callingURL + "/pool.xml");
function afterLoad(xmlD) {
	try {	
		xmlDoc = xmlD;
		server_revision = getServerRevision(xmlDoc);
	} catch (e) {
		failedToLoadPool();
	}
}


function getCDNURL(xmlD, callingURL) {
	var loadedFromElements = xmlD.getElementsByTagName("loadedFrom");
	for (var i=0; i<loadedFromElements.length; i++) {
		if (loadedFromElements[i].getAttribute("value").toLowerCase() == callingURL) { //callingURL
			return (loadedFromElements[i].getElementsByTagName("cdn")[0].getElementsByTagName("mapTo")[0].getAttribute("value"));
		}
	}
}
function getIMURL(xmlD, callingURL){
	var loadedFromElements = xmlD.getElementsByTagName("loadedFrom");
	for (var i=0; i<loadedFromElements.length; i++) {
		if (loadedFromElements[i].getAttribute("value").toLowerCase() == callingURL) { //callingURL
			return (loadedFromElements[i].getElementsByTagName("im")[0].getElementsByTagName("mapTo")[0].getAttribute("value"));
		}
	}
	
}

function getHOMEURL(xmlD, callingURL) {
	var loadedFromElements = xmlD.getElementsByTagName("loadedFrom");
	for (var i=0; i<loadedFromElements.length; i++) {
		if (loadedFromElements[i].getAttribute("value").toLowerCase() == callingURL) { //callingURL
			return (loadedFromElements[i].getElementsByTagName("homepage")[0].getElementsByTagName("mapTo")[0].getAttribute("value"));
		}
	}
}

function getSecureURL(xmlD, callingURL) {
	var loadedFromElements = xmlD.getElementsByTagName("loadedFrom");
	for (var i=0; i<loadedFromElements.length; i++) {
		if (loadedFromElements[i].getAttribute("value").toLowerCase() == callingURL) { //callingURL
			return (loadedFromElements[i].getElementsByTagName("secure")[0].getElementsByTagName("mapTo")[0].getAttribute("value"));
		}
	}
	if ((callingURL.split(":").length<=2) || (callingURL.split(":")[2] == "80")) {
		return ("https:" +callingURL.split(":")[1]+ ":443");
	} else {
		return ("https:" +(callingURL.split(":")[1])+ ":8443");
	}
}

function getServerRevision(xmlD) {
	// code for IE
	//if (window.ActiveXObject){
	//	return xmlDoc.getAttribute("server_revision");
	//} 
	xmlD = xmlD.getElementsByTagName("pool")[0];
	return xmlD.getAttribute("server_revision");

}

function loadXMLDoc(theFile){
		var httpXmlDoc = null;
		if (window.ActiveXObject){
			httpXmlDoc = new ActiveXObject("Microsoft.XMLHTTP");
			httpXmlDoc.onreadystatechange = function() {
				if (httpXmlDoc.readyState == 4) {	
					if (httpXmlDoc.responseXML) {			
						afterLoad(httpXmlDoc.responseXML);
					}
				}
			};
		}else{
			httpXmlDoc = new XMLHttpRequest();
			httpXmlDoc.onload =  function() {	
				afterLoad(httpXmlDoc.responseXML);
			}
		}	
		httpXmlDoc.open("GET", theFile + '?ts=' + (new Date().getTime()), false);
		httpXmlDoc.send(null);
	}

function getXMLHttpRequest() {
	var request = false;
	if (window.ActiveXObject) {
		var versions = ["Microsoft.XmlHttp","MSXML2.XmlHttp","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp.4.0","MSXML2.XmlHttp.5.0"];
		for (var i = 0; i<versions.length; i++) {
			try {
				request  = new ActiveXObject(versions[i]);
				break;
			} catch(e) {}
		}
	} else if (window.XMLHttpRequest) {
		request = new XMLHttpRequest();
	}
	return request;
}

function embedWithRevision(tag) {
	tag = tag.replace(/src="(.*)"/,"src=\"$1?revision="+server_revision+"\"");
	tag = tag.replace(/href="(.*)"/,"href=\"$1?revision="+server_revision+"\"");
	document.write(tag);
}



/** The following functions should be in the utils.js, but since pool.js is supposed   		**
 ** to be included at the beginning of the page , and it						  			**
 ** does some operations on the cookies, so we had to put those functions here           **/

/**
 * creates a new cookie with the passed parameters
 */
function setCookie (cookieName, cookieValue, expInMills , cookiePath, cookieDomain) {
  var cookie = cookieName + "=" + escape(cookieValue);
  if (expInMills) {
    var expireDate = new Date();
    expireDate.setTime(expireDate.getTime() + expInMills);
    cookie += "; expires=" + expireDate.toGMTString();
  }
  if (cookiePath){
        cookie += "; path=" + escape (cookiePath);
  }
  if (cookieDomain) {
        cookie += "; domain=" + escape (cookieDomain);
  }
  document.cookie = cookie;
}
 
 
 function failedToLoadPool() {
	 var result =confirm("Service is unavailable, do you wish to refresh?");
	 if (result==true) {
	   window.location.reload(true);
	 }else {
		 try {
			 window.stop();
		 }catch (e) {
			 document.execCommand("Stop");
		 }
	 }
 }
 