/**
* This script will check if necesary player is installed, only up from 7-th player
* choose the right client
* Install Core Browswer
* Inspect client parameters
* output souerce code wor the casino client
**/


// Globals
// requiered version
var requiredVersion3 = [10,0,22];
var requiredVersion2 = [10,0,22];

var clientpath3 = "casino.swf";
var clientpath2 = "as2/Casino.swf";
var clientpath1 = "as2/Casino_mini.swf";
var jsbase = '';
var clientlang = 'en';
var langbase = '';
var isMini = false;

var isIE  = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;

var addconn = false;
var usehttps = false;
var requestbase;

// Core util
function callFunc(win, func, obj, arr) {
	return win[func](obj, arr);
}


var acceptedParams = ["cashierdomain","advertisercode", "banner", "profile", "referer", "creferer", "remoteip", "preview", "fimid", "_realonly", "_funonly", "safgame", "sidegame", "game", "useconn", "affiliates", "affiliateStreakLimit", "affiliateWinLimit", "affiliateWinningStreakMessage", "affiliateBigWinMessage", "affiliateBalanceZeroMessage" , "affiliateAskMessage", "affiliateRedirectMode", "affiliateURLdl", "affiliateURLflash", "affiliateURLredirect", "language", "miniGame", "wmode"];

function initClient(base, parameters) {
	if (String(document.location).split(":")[0] == "https") {
		usehttps = true;
	}

	if (base != '') {
		var basedomain = findDomain(base);

		var reqdomain = findDomain(String(document.location));

		var s = base.indexOf(basedomain);

		var newbase;
		newbase = base.substr(0,s)+reqdomain+base.substr(s+basedomain.length);
		base = newbase;
	}
	

	//base, if defined must end with '/'
	//verify parameters
	var paramstr = "";
	var connparamstr = "";

	var definedmodule = "";
	var clienttype = 3;
	var versioncheck;
	var i;
	var ii;
	var acceptedparams = [];
	for (i=0; i<parameters.length; i+=2) {
		for (ii=0; ii<acceptedParams.length; ii++) {
			if (acceptedParams[ii] == parameters[i]) {
				if (parameters[i] == "game") {
					definedmodule = parameters[i+1];
					acceptedparams.push("module");
					acceptedparams.push(parameters[i+1]);
				}
				else if (parameters[i] == "useconn") {
					addconn = true;
				}
				else if (parameters[i] == "affiliates" && parameters[i+1] == "1") {
					acceptedparams.push("affiliates");
					acceptedparams.push("1");
					acceptedparams.push("mode");
					acceptedparams.push("offline");
					acceptedparams.push("nolobby");
					acceptedparams.push("1");
				}
				else if (parameters[i] == "language")
				{
					parameters[i+1] = parameters[i+1].toLowerCase();
					clientlang = parameters[i+1];
				}
				else if (parameters[i] == "miniGame" && parameters[i+1] == "1")
				{
					isMini = true;
				}

				acceptedparams.push(parameters[i]);
				acceptedparams.push(parameters[i+1]);
			}
		}
	}
	

	for (i=0; i<acceptedparams.length; i+=2) {
		paramstr += acceptedparams[i]+"="+acceptedparams[i+1]+"&";
	}
	//if casino is launched with a certain game, well need to know from which client to launch the game
	if (definedmodule != "") {
		for (i=0; i<gamecodes.length; i++) {
			if (gamecodes[i] == definedmodule) {
				clienttype = 2;
			}
		}
	}
	if (clienttype == 3) {
		versioncheck = hasVersion(requiredVersion3);
	}
	else {
		versioncheck = hasVersion(requiredVersion2);
	}
	
	if (!base)
	{
		base = "";
	}
	jsbase = base;
	base += '[' + clientlang + ']/';

	if (!versioncheck) {
		document.location = base+"flashless.html";
		return;
		//version check failed, cannnot launch the client
	}

	if (addconn && clienttype != 3) {
		lc1 = getRandomString();
		lc2 = getRandomString();
		paramstr += "inID="+lc1+"&outID="+lc2+"&";
		connparamstr = "inID="+lc2+"&outID="+lc1+"&";
	}

	page = generateOutput(base, paramstr, clienttype, connparamstr);

	if (isIE) {
		document.open();
		document.write(page);
		document.close();
		window.location.reload(true);
	}
	else {
		document.write(page);
	}
}

function generateOutput(base, params, clienttype, connparams) {
	var clientversion;
	var nextpage = "";

	nextpage += '<html>';
	nextpage += '<head>';
	nextpage += '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-4" />';
	nextpage += '<title>::: Casino :::</title>';
	nextpage += '<!-- saved from url=(0013)about:internet -->';
	nextpage += '<script type="text/javascript" src="'+jsbase+'casinoclient.js"></script>';
	if (clienttype == 2) {
		clientversion = requiredVersion2;
		if (isMini) {
			client = "Casino_mini.swf";
		}
		else {
			client = "Casino.swf";
		}

		base = base+"as2/";
		nextpage += '<script type="text/javascript" src="'+base+'flashcasino.js"></script>';
	}
	else {
		clientversion = requiredVersion3;
		client = "casino.swf";
		nextpage += '<script type="text/javascript" src="'+jsbase+'CORE_Browser.js"></script>';
	}
	nextpage += '</head>';
	nextpage += '<body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0" ';
	if (clienttype == 2) {
		nextpage += 'onunload="closeWindows(); ';
	}
	nextpage += '">';
	if (connparams != "") {
		nextpage += '<div id="conn">';
		nextpage += '<script language="JavaScript" type="text/javascript">document.write(\''+getClientString(base, "conn.swf", connparams, clientversion, 1)+'\');</script>';
		nextpage += '</div>';
	}
	nextpage += '<div id="fContent">';
	if (clienttype == 3) {
		nextpage += '<script language="JavaScript" type="text/javascript">function callFunc(win, func, obj, arr) { return win[func](obj, arr); }</script>';
	}
	nextpage += '<script language="JavaScript" type="text/javascript">document.write(\''+getClientString(base, client, params, clientversion)+'\');</script>';
	nextpage += '</div>';
	nextpage += '<div id="casinosiframediv" style="display:none;"></div>';
	nextpage += '<div id="hurliframediv" style="display:none;"></div>';
	nextpage += '</body>';
	nextpage += '</html>';
	return (nextpage);
}


/**
* This should be used to return the source to be written into a document to display the client
*
* @param base client´s base folder
* @param parameters array of key value pairs that should be forwarded to client
**/
function getClientString(base, client, params, clientversion, invisible) {
	var height;
	var width;
	if (invisible == "1") {
		height = "0";
		width = "0";
	}
	else {
		height = "100%";
		width = "100%";
	}

	var str = "";
	var wmode = getValueFromString("wmode", params);
	params = removeFromParams("wmode", params);

	if (isIE && isWin && !isOpera) {
		//add object tag
		str += '<OBJECT ';
		if (usehttps) {
			str += 'width="'+width+'" height="'+height+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version='+clientversion[0]+','+clientversion[1]+','+clientversion[2]+',0" ';
		}
		else {
			str += 'width="'+width+'" height="'+height+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version='+clientversion[0]+','+clientversion[1]+','+clientversion[2]+',0" ';
		}
		str += 'id="Casino">';
		str += '<PARAM NAME="movie" VALUE="'+base+client+"?"+params+'">';
		str += '<PARAM NAME="base" VALUE="'+base+'">';
		str += '<PARAM NAME="swliveconnect" VALUE="true">';
		str += '<PARAM NAME="menu" VALUE="false">';
		str += '<PARAM NAME="quality" VALUE="high">';
		str += '<PARAM NAME="allowScriptAccess" VALUE="always">';
		str += '<PARAM NAME="seamlessTabbing" VALUE="false">';
		if (wmode != "no_key") {
			str += '<PARAM NAME="wmode" VALUE="'+wmode+'">';
		}
		else {
			str += '<PARAM NAME="wmode" VALUE="window">';
		}
		//str += '<PARAM NAME="flashvars" VALUE="'+params+'">';
		str += '</OBJECT>';
	}
	else {
		str += '<EMBED ';
		str += 'width="'+width+'" ';
		str += 'height="'+height+'" ';
		if (usehttps) {
			str += 'pluginspace="https://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" ';
		}
		else {
			str += 'pluginspace="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" ';
		}
		str += 'name="Casino" ';
		str += 'src="'+base+client+"?"+params+'" ';
		str += 'base="'+base+'" ';
		str += 'swliveconnect="true" ';
		str += 'menu="false" ';
		str += 'quality="high" ';
		str += 'allowScriptAccess="always" ';
		if (wmode != "no_key") {
			str += 'wmode="'+wmode+'" ';
		}
		else {
			str += 'wmode="window" ';
		}
		//str += 'flashvars="'+params+'" ';
		str += 'type="application/x-shockwave-flash" > ';
		str += '</EMBED>';
	}
	return (str);
}



/**
* This will compare requiered version and current version of the flash player and return true, if current version is greater or equal to the requiered version
**/
function hasVersion(version) {
	var currentVersion = getPlayerVersion();
	var i;
	for (i=0; i<currentVersion.length; i++) {
		if (Number(currentVersion[i]) < Number(version[i])) {
			return (false);
		}
	}
	return (true);
}

/**
* This will return the version of the ActiveX Flash Player, the returned version will be at least 7
**/
function getAXVersion() {
	var version;
	var axo;
	var e;

	try {
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {}
	if (!version) {
		version = [7,0,0,0];
	}
	else {
		version = version.split(" ")[1];
		version = version.split(",");
	}
	return version;
}

/**
* This will return the version of the Plugin Flash Player, the returned version will be at least 7
**/
function getPlayerVersion() {
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var version = [0,0,0,0];
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var pluginDesc;
			if (navigator.plugins["Shockwave Flash 2.0"]) {
				pluginDesc = navigator.plugins["Shockwave Flash 2.0"].description;
			}
			else {
				pluginDesc = navigator.plugins["Shockwave Flash"].description;
			}
			//Shockwave Flash 10.0 r32
			//plugin majV.minorV rRevision
			var chunks = pluginDesc.split(" ");
			version = chunks[2].split(".");
			if (chunks[3] == "") {
				version.push(chunks[4]);
			}
			else {
				version.push(chunks[3]);
			}
			if (version[2][0] == "d") {
				version[2] = version[2].substring(1);
			} else if (version[2][0] == "r") {
				version[2] = version[2].substring(1);
				if (version[2].indexOf("d") > 0) {
					version[2] = version[2].substring(0, version[2].indexOf("d"));
				}
			}
		}
	}
	else if (isIE && isWin && !isOpera) {
		version = getAXVersion();
	}
	return version;
}
/*
return random string
*/

var letters = "ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789";
function getRandomString() {
	var str = "";
	var i;
	for (i=0; i<10; i++) {
		str += letters.charAt(Math.round(Math.random()*59));
	}
	return str;
}

function getValueFromString(needle, hay) {
	var chunks = hay.split("&");
	var keyvalue;
	var i;
	var l;
	chunks.pop();
	l = chunks.length;
	for (i=0; i<l; i++) {
		if (chunks[i].length > 2) {
			keyvalue = chunks[i].split("=");
			if (keyvalue[0] == needle) {
				return (keyvalue[1]);
			}
		}
	}
	return ("no_key");
}

function removeFromParams(key, params) {
	var chunks = params.split("&");
	var keyvalue;
	var i;

	for (i=0; i < chunks.length; i++) {
		if(chunks[i] == "") {
			chunks.splice(i, 1);
			i--;
			continue;
		}

		keyvalue = chunks[i].split("=");

		if (keyvalue[0] == key) {
			chunks.splice(i, 1);
			i--;
		}
	}

	return (chunks.join("&") + "&");
}

function findDomain(str) {
	var r;
	r = String(str.split("://")[1]);
	r = String(r.split("/")[0]);
	return (r);
}

var gamecodes = ["bjl", "7bal", "plba", "vbal", "rbal", "lmpg", "ropl", "rol", "rodzl", "sbl", "mbj", "mcm", "car", "ro", "roz", "rodz", "pbro", "rop", "rouk", "rofr", "mro", "ro3d", "cr", "bjz", "peb", "bj", "bj_mh3", "bj_mh5", "bj_mp", "bj_pg", "pbj", "pbj_mh5", "pbj_mp", "pbj_pg", "bjsd", "bjsd_mh3", "bjsd_mh5", "bjsd_mp", "bjsd_pg", "p6dbj", "p6dbj_mh3", "p6dbj_mh5", "p6dbj_mp", "p6dbj_pg", "psdbj", "pon", "pon_mh3", "pon_mh5", "pon_mp", "pon_pg", "bjs", "bjhd", "bjhd_mh3", "bjhd_mh5", "bjhd_mp", "bjhd_pg", "bjuk", "bjuk_mh3", "bjuk_mh5", "bjuk_mp", "bjuk_pg", "ba", "baz", "bj21r", "bj21r_mh", "odp", "cw", "sb", "sb_mp", "sb_pg", "tcp", "tqp", "cheaa", "rd", "rd_mp", "rd_pg", "pg", "wv", "str", "bj21d", "bj21d_mh3", "bj21d_mp", "bj21d_pg", "ct", "hk", "sib", "ssl", "potr", "tp", "gc", "tr", "op", "cm", "er", "psl", "gbs", "ms", "sc", "gos", "fmn", "gs", "wsffr", "cifr", "ck2", "grel", "mds", "wfm", "tms", "hb", "dt", "dlm", "msm", "ssr", "drs", "qop", "frwl", "ska", "fow", "wan", "gro", "ges", "tfm", "gt", "ml", "jb", "jbz", "fbr", "lm", "c7", "foy", "ek", "fm", "ub", "al", "hh", "nk", "sf", "ts", "rnr", "ah", "ta", "sof", "td", "bt", "pl", "bl", "ma", "8bs", "jb4", "dw4", "af4", "af25", "jb10", "jb50", "jb10p", "po", "dw", "af", "jp", "hljb", "mj", "tob", "bls", "sbls", "fbls", "rcd", "rps", "dctw", "pso", "ghl", "ghlj", "drts", "pop", "bowl", "head", "kn", "lwh", "fosl", "hr", "smw", "smj", "smpw", "smpj", "pc"];
