var EXTERNAL_CLOSE = 'externalClose';
var OPEN_VARIABLES = 'openVariables';
var BROWSER_UID_LEN = 8;
var SB_WIDTH = 850;
var SB_HEIGHT = 600;
var openVars;
var clientName = 'client';
var serverName = 'main';

var wrapperCount = 0;
var wrapperName = "";
var wrapperContent = "";
document.originalTitle = document.title;

// Make the function visible from iframes.
window["ex_close"] = ex_close;

function CookiesClass() {

    this.write = function (name, value, seconds) {
	var expires = "";
		
        if (typeof(seconds) != 'undefined') {
            var date = new Date();
            date.setTime(date.getTime() + (seconds*1000));
            expires = "; expires=" + date.toGMTString();
        }
	
	var cookie = name+"="+value+expires+"; path=/";
        document.cookie = cookie;
    }

    this.read = function (name) {
        name = name + "=";
        var carray = document.cookie.split(';');
	
        for(var i=0;i < carray.length;i++) {
            var c = carray[i];
            while (c.charAt(0)==' ') c = c.substring(1,c.length);
            if (c.indexOf(name) == 0) return c.substring(name.length,c.length);
        }
	
        return null;
    }
    
    this.erase = function (name) {
        this.write(name, "", -1);
    }
}

function fixAnchorTitleBug() { 
	document.title = document.originalTitle; 
} 

function setFocusOnClient() {
	// Give focus to client to handle keyboard properly.
	var flashObject = findObject(clientName);
	
	if(flashObject != null) {
		flashObject.focus();
	}
}

function ExternalClass() {
    this.reloaded = false;
    this.reloadVars = "";
	this.connStr = "";
    
    this.onBeforeUnload = function () {
	//Cookies.erase("reload");
    }
    
    this.onLoad = function () {
		var r = Cookies.read("reload");
		var c = Cookies.read("connStr");
		
		if(r != null) {
			Cookies.erase("reload");
			Cookies.erase("connStr");
			this.reloadVars = r;
			this.connStr = c;
			this.reloaded = true;
		}
    }
}

function convertRequest(){
    var strHref = window.location.href;
    if ( strHref.indexOf("?") > -1 ){
		var strQueryString = strHref.substr(strHref.indexOf("?") + 1).toLowerCase();
		var aQueryString = strQueryString.split("&");
		for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
			if (aQueryString[iParam].indexOf("=") > -1 ){
			var aParam = aQueryString[iParam].split("=");
			if(aParam[0] == 'contest'){					
				Cookies.write('contest', aParam[1]);
			}else if (aParam[0]=='forcedperfclass' || aParam[0]=='netspd' ){
				if(aParam[1].length > 0 && aParam[1] != "clear")
					Cookies.write(aParam[0], aParam[1]);
				else Cookies.erase(aParam[0])
			}
			}
		}
    }
}

var Cookies = new CookiesClass();
var External = new ExternalClass();

function isBrowserIE() {
	return /MSIE (\d+\.\d+);/.test(navigator.userAgent);
}

function removeMain() {
    swfobject.removeSWF(serverName);
	getEl("flashContent").innerHTML = "";
}

function hideMain() {
	var main = findObject(serverName);

	if(isBrowserIE()) {
		main.width = main.height = 0;
	}
	else {
		main.style.visibility = "hidden";
	}
}

function showMain() {
	var main = findObject(serverName);

	if(isBrowserIE()) {
		main.width = SB_WIDTH;
		main.height = SB_HEIGHT;
	}
	else {
		main.style.visibility = "visible";
	}
}

// Said by Adobe to be more reliable than getElementById
function findObject(movieName) {
    if (navigator.appName.indexOf("Microsoft") != -1) {
	return window[movieName];
    } 
    else {
	return document[movieName];
    }
}

function getEl(el) {
    return document.getElementById(el);
}

// This return 4 digit 16x integer number
function randomString() {
    return (((1 + Math.random())*0x10000) | 0).toString(16).substring(1);
}

function randomIdentifier() {
    var result = "";
    
    for(var i = 0; i < BROWSER_UID_LEN; i++)
	result += randomString();
    
    return result;
}

function ex_get_uid() {
    var uid = Cookies.read("browserUid");
    
    if(!uid) {
	uid = randomIdentifier();
	Cookies.write("browserUid", uid);
    }
    
    return uid;
}

function ex_alert(message) {
    alert(message);
}

function ex_confirm(message) {
    return confirm(message);
}

function ex_prompt(message, defaultvalue) {
    return prompt(message, defaultvalue);
}

function ex_clear() {
    swfobject.removeSWF(clientName);
	getEl("externalContent").innerHTML = "";
}

function ex_write(text, wrapperUrl) {
	if(wrapperUrl) {
		wrapperContent = text;
		wrapperName = "contentWrapper" + (wrapperCount++);
		getEl('externalContent').innerHTML = "";
		ex_write('<iframe id="' + wrapperName + '" name="' + wrapperName + '" src="' + wrapperUrl + '" onload="wrapIframeContent()" frameborder="0" style="border: none;" width="' + SB_WIDTH + '" height="' + SB_HEIGHT + '" scrolling="no"></iframe>');
		hideMain();
		return;
	}

    getEl('externalContent').innerHTML += text;
}

function wrapIframeContent() {
	window.frames[wrapperName].document.getElementById("content").innerHTML = wrapperContent;
	window.frames[wrapperName].document.getElementById("divClose").innerHTML = '&nbsp;';
	wrapperContent = "";
}

function ex_open(src, bgcolor, vars) {
    openVars = vars;
    getEl("externalContent").innerHTML = "";
    
    var c = document.getElementById(clientName);
    if (!c) {
		var d = document.createElement("div");
		d.setAttribute("id", clientName);
		document.getElementById("externalContent").appendChild(d);
    }
    
    var att = { data: noCacheIE(src), width: SB_WIDTH.toString(), height: SB_HEIGHT.toString(), id: clientName, name: clientName };
    var par = { menu:"false", swliveconnect:"true", wmode: "windowed" };
    var id = clientName;
    
    swfobject.createSWF(att, par, id);
	hideMain();
}

function ex_reload (connectionString, reloadVars) {
	Cookies.write("connStr", connectionString, 60);
    Cookies.write("reload", reloadVars, 60);
    location = '/gameplay/gameplay.html#play';
	removeMain();
    location.reload(true);
}

function ex_reload2 () {
	location = '/gameplay/gameplay.html#play';
	removeMain();
    location.reload(true);	
}

function ex_reloadVars() {
    return {connStr: External.connStr, reloadVars: External.reloadVars};
}

function ex_isReloaded() {
    return External.reloaded;
}

function ex_close(data) {
    //ex_clear();
    openVars = null;
    ex_pass(serverName, EXTERNAL_CLOSE, data);
	showMain();
}

function ex_pass(id, type, data) {
    findObject(id).flashDataPass(type, data);
}

function ex_openvars() {
    var client = findObject(clientName);
	
    if(client != null) {
		setFocusOnClient(); // Set focus to client
		ex_pass(clientName, OPEN_VARIABLES, openVars);
    }
}

function ex_get_cookie(key) {
    return Cookies.read(key);
}

function ex_set_cookie(key, value, exp) {
    Cookies.write(key, value, exp);
}

function ex_erase_cookie(key) {
    Cookies.erase(key);
}

function ex_eval_to_object(str) {
	var res = "";

	try {
		res = eval("(" + str + ")");
	}
	catch(e) { return {error: true, result: ""}; }
	
	return {error: false, result: res};
}

function pgt(page){
	parent.gt(page);
}

function new_xmlHttp(){
	var obj = null;	
	try {  		
  		obj=new XMLHttpRequest();
  	}catch (e) {  		
  		try {
    		obj=new ActiveXObject("Msxml2.XMLHTTP");
    	} catch (e){
    		try{
    		      obj=new ActiveXObject("Microsoft.XMLHTTP");
      		} catch (e){
      			alert("Your browser does not support AJAX!");      			
      		}
    	}
  	}    
	
  	return obj;
}

function startGame(acParam){		
		var flashvars = {};
		var params = {wmode: "windowed", cv: acParam};
		var attributes = {id: "main", name: "main"};
		
		document.getElementById("main").innnerHTML = 'Oops! Looks like you don\'t have Adobe Flash which is needed to access Secret Builders. Click<a href="http://www.adobe.com/go/getflash/"> here </a>to get Flash.';
		
		swfobject.embedSWF(noCacheIE("main.swf?cv=" + acParam),  "main", 
											"850", "600", "9.0.47", "../common/scripts/playerProductInstall.swf", 
											flashvars, params, attributes);
	}		

function getVersion(){
	try{
		var xmlHttp = new_xmlHttp();		
		var params = '';
		xmlHttp.onreadystatechange=function(){
			if(xmlHttp.readyState==4){				
				startGame(xmlHttp.responseText);	   	
			}			
		}
		
		var d = new Date();
		var t = d.getTime();
		xmlHttp.open("GET",'/build.txt?ac=' + t, true);
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", params.length);
		xmlHttp.setRequestHeader("Connection", "close");
		xmlHttp.send(params);	
	}catch(e){
		startGame('');
	}
}

function setLandingPage(){
	arr = document.location.href.split("/");
	Cookies.write('landing_page',arr[arr.length-1]);
}

function toGameplay(){
	try{
		var xmlHttp = new_xmlHttp();		
		var params = '';		
		
		xmlHttp.onreadystatechange=function(){
			if(xmlHttp.readyState==4){				
				document.location.href = '/gameplay/gameplay.html#play';
			}			
		}
		
		var d = new Date();
		var t = d.getTime();
		xmlHttp.open("GET",'/WebProject/AffiliateLogsServlet?cmd=lc&ac=' + t, true);
		xmlHttp.setRequestHeader("Content-type", "text/plain");
		xmlHttp.setRequestHeader("Content-length", params.length);
		xmlHttp.setRequestHeader("Connection", "close");
		xmlHttp.send(params);	
	}catch(e){		
		document.location.href = '/gameplay/gameplay.html#play';
	}	
}

/*function convertRequest(param){
    var strHref = window.location.href;
    if ( strHref.indexOf("?") > -1 ){
		var strQueryString = strHref.substr(strHref.indexOf("?") + 1).toLowerCase();
		var aQueryString = strQueryString.split("&");
		for ( var iParam = 0; iParam < aQueryString.length; iParam++ ){
			if (aQueryString[iParam].indexOf("=") > -1 ){
				var aParam = aQueryString[iParam].split("=");
				if(aParam[0] == param){					
					Cookies.write(param, aParam[1]);
				}
			}
		}
    }
}*/