//onload Arrays

g_missionDetails = false;
g_combatArena = false;
g_globalsObject = new Object();

g_globalsObject.protocol = "http://";

g_globalsObject.onloadRegistry 			= new Array();
g_globalsObject.pageEventsRegistry 		= new Array();
g_globalsObject.userAccountsArray		= new Array();

g_currentIdleTimer = 0;
g_idleScreenUp	   = false;
g_monitoringActive = false;

addLoadEvent = function(func){
	return;
};

window.onresize = function(){};
window.onscroll = function(){};

openMissions = function(){
	g_missionDetails = true;
	ftCommonTools.centerElement($("#missionDetailsBox"),{doScroll:false});
	$("#missionDetailsBox_closeButton").click(function(){
		ftCommonTools.blurElement($("#missionDetailsBox"));
	});
};

$(document).ready(function(){
	for (var i=0; i<g_globalsObject.onloadRegistry.length;i++){
		g_globalsObject.onloadRegistry[i]();
	}
	delete(g_globalsObject.onloadRegistry);
	i=null;
});

String.prototype.br2nl = function (){
	return this.replace(/<br[^>]*>/gi,'\n');
};

String.prototype.nl2br = function (){
	return this.replace(/(\r\n|\n)/gi,'<br />');
};

/* ftCommon is the class that holds all the basic functions which are commonly used in ftrails.
   The reason for doing this is Javascript garbage collection */

ftCommon = function(){
};

ftCommon.prototype.makeActionLink = function(anActionFile){
	return g_globalsObject.protocol+"karmawar.info/globals/app/php/" + anActionFile;
};

ftCommon.prototype.setAsHomepage = function(o){
};

ftCommon.prototype.getTrailsWebURL = function(){
	return g_globalsObject.protocol+"karmawar.info/";
};

ftCommon.prototype.loginMoveToSelectedLanguage = function(obj){
	var selectedID = obj.options[obj.selectedIndex].value;
	$.ajax({
		type: "POST",
		url: this.makeActionLink("login.action.php"),
		data:{
			action:"changeCurrentlyUsedLanguage",
			newLangId:selectedID
		},
		dataType: "text",
		success: function(msg){
			window.location.href = window.location.href;
		}
	});
	selectedID = null;
};

ftCommon.prototype.addLoadEvent = function(func){
	g_globalsObject.onloadRegistry.push(func);
};

ftCommon.prototype.addPageEvent = function(obj){
	g_globalsObject.pageEventsRegistry.push(obj);
};

ftCommon.prototype.runPageEvents = function(){
	for (var i=0; i<g_globalsObject.pageEventsRegistry.length;i++){
		g_globalsObject.pageEventsRegistry[i].method();
	}
	i=null;
};

ftCommon.prototype.runSpecificPageEvent = function(mIdent){
	for (var i=0; i<g_globalsObject.pageEventsRegistry.length;i++){
		if (g_globalsObject.pageEventsRegistry[i].methodIdent == mIdent){
			g_globalsObject.pageEventsRegistry[i].method();
		}
	}
	i=null;
};

ftCommon.prototype.getDimensions = function(){
	return {w:document.documentElement.clientWidth,h:document.documentElement.clientHeight};
};

ftCommon.prototype.centerElement = function(obj,params){
	var h = (document.all) ? document.documentElement.clientHeight : window.innerHeight;
	var w = (document.all) ? document.documentElement.clientWidth : window.innerWidth;
	
	obj.css("display","block");
	
	if (typeof(window.pageYOffset) == "number"){
		var sTop = window.pageYOffset;
	} else {
		var sTop = document.documentElement.scrollTop;
	}
	
	var ie7 = (document.all && !window.opera && window.XMLHttpRequest) ? true : false;
	
	var boxWidth = obj.width();
	var boxHeight = obj.height();
	
	var cmpBoxHeight = boxHeight + 25;
	
	if (cmpBoxHeight > h){
		var byCord = 30;
	} else {
		var byCord = Math.floor((h-boxHeight)/2) + sTop;
	}
	
	if (document.all && !ie7){
		obj.css("width","0%");
	}

	var bxCord = Math.floor((w-boxWidth)/2);
	
	if (params.doScroll){
		obj.animate( { top: byCord +"px", left: bxCord + "px" }, 300);
	} else {
		obj.css("left",bxCord + "px");
		obj.css("top",byCord + "px");
	}
	
	h=w=ie7=boxWidth=boxHeight=cmpBoxHeight=byCord=bxCord=null; return;
};

ftCommon.prototype.blurElement = function(obj){
	if (typeof(obj) != "undefined"){
		obj.css("left","-2000px");
		obj.css("top","-2000px");
		obj.css("display","none");
	}
	return;
};

ftCommon.prototype.getCenterCords = function(obj){
	var h = (document.all) ? document.documentElement.clientHeight : window.innerHeight;
	var w = (document.all) ? document.documentElement.clientWidth : window.innerWidth;
	if (typeof(window.pageYOffset) == "number"){
		var sTop = window.pageYOffset;
	} else {
		var sTop = document.documentElement.scrollTop;
	}
	
	var boxWidth = obj.width();
	var boxHeight = obj.height();
	
	var bxCord = Math.floor((w-boxWidth)/2);
	var byCord = Math.floor((h-boxHeight)/2) + sTop;
	sTop=h=w=boxWidth=boxHeight=null;
	return {x:bxCord,y:byCord};
};

ftCommon.prototype.isBadAjaxAnswer = function(aResponseText, aBool){
	/*
		aBool - is a boolean that tells you whether the request
		is supposed to be XML or raw text.
		
		true  means XML
		false means Raw Text
	*/
	
	if (jQuery.trim(aResponseText).length == 0){
		return true;
	}
	
	if (aBool){
		if (jQuery.trim(aResponseText).substr(0,5) == "<?xml"){
			return false;
		} else {
			return true;
		}
	}
	
	return false;
};

ftCommon.prototype.setErrorMessage = function(aText, params){
	if (typeof(params) == "undefined"){
		return false;
	}
	
	var obj  = $("#"+params.id);
	var obj2 = $("#"+params.id+"Text");
	this.currentErrorMessageObject = obj;
	this.currentErrorMessageTextObject = obj2;
	obj2.html(aText);
	obj.css("display","block");
	var w = obj2.width() + 18;
	obj.css("width", w+"px");
	
	if (g_globalsObject.errorMessagePID){
		clearInterval(g_globalsObject.errorMessagePID);
	}
	g_globalsObject.errorMessagePID = setTimeout("ftCommonTools.clearErrorMessage();",6*1000);
	resetSelectionRangeBorderHeights();
	w=obj=obj2=null;
	return;
};

ftCommon.prototype.clearErrorMessage = function(){
	if (typeof(this.currentErrorMessageObject) == "undefined"){
		return;
	}
	
	this.currentErrorMessageTextObject.html("");
	this.currentErrorMessageObject.css("display","none");
	this.currentErrorMessageObject = null;
	resetSelectionRangeBorderHeights();
	delete(this.currentErrorMessageObject);
	delete(this.currentErrorMessageTextObject);
	return;
};

ftCommon.prototype.forceLoadDialog = function(aDialogName){
	this.clearDialog();
	this.loadDialog(aDialogName);
};

ftCommon.prototype.setDialogArgs = function(obj){
	if (typeof(this.dialogPreArguments) == "object"){
		delete(this.dialogPreArguments);
	}
	this.dialogPreArguments = obj;
};

ftCommon.prototype.loadDialog = function(aDialogName){
	if (typeof(this.currentDialogJQueryObject) == "object"){
		return;
	}
	
	var params = {
		action:"loadDialog",
		dialogName:aDialogName
	};
	
	if (typeof(this.dialogPreArguments) == "object"){
		for (n in this.dialogPreArguments){
			if (n == "action" || n == "dialogName"){
				alert("Reserved POST keywords!");
				return;
			}
			params[n] = this.dialogPreArguments[n];
		}
	}

	$.ajax({
		type: "POST",
		url: this.makeActionLink("common.action.php"),
		data:params,
		dataType: "json",
		success: function(jsObj){
			var loaderElement = $("#dialogContentLoader");
			loaderElement.html(jsObj.html);
			var loadedElement = $("#dialogContentLoader > .dialogBox").remove();
			ftCommonTools.currentDialogJQueryObject = loadedElement;
			ftCommonTools.currentDialogDataObject	= jsObj.data;
			$(document.body).append(loadedElement);
			eval("ftCommonTools.currentDialogObject = " + jsObj.javascript);
			ftCommonTools.currentDialogObject.startup();
			ftCommonTools.centerLoadedElement();
			jsObj=loadedElement=loaderElement=null;
		}
	});
};

ftCommon.prototype.clearDialog = function(){
	if ( typeof (this.currentDialogJQueryObject) != "object" ){
		return;
	}
	this.currentDialogJQueryObject.remove();
	delete(this.currentDialogJQueryObject);
	delete(this.currentDialogObject);
	delete(this.currentDialogDataObject);
};

ftCommon.prototype.setupDialogCloseButton = function(obj){
	obj.mouseover(function(){ this.className = "closeButtonOver"; });
	obj.mouseout(function(){ this.className = "closeButtonCommon"; });
	obj.mousedown(function(){ this.className = "closeButtonDown"; });
	obj.click(function(){ ftCommonTools.clearDialog(); });
};

ftCommon.prototype.launchFeedback = function(){
	this.loadDialog("sendFeedback");
};

ftCommon.prototype.launchSettings = function(){
	this.loadDialog("settingsWindow");
};

ftCommon.prototype.centerLoadedElement = function(){
	this.centerElement(this.currentDialogJQueryObject,{doScroll:false});
	this.resizeDialog();
};

ftCommon.prototype.resizeDialog = function(){
	$(".aDialogStage", this.currentDialogJQueryObject).each(function(i){
		if ($(this).css("display").toLowerCase() == "block"){
			ftCommonTools.currentDialogJQueryObject.css("width", $(this).width());
		}
	});
};

ftCommon.prototype.handleAjaxError = function(XMLHttpRequest, textStatus, errorThrown){
	this.clearDialog();
	this.loadDialog("generalErrorWindow");
};

ftCommon.prototype.handleAjaxErrorNoArgs = function(){
	this.clearDialog();
	this.loadDialog("generalErrorWindow");
};

ftCommon.prototype.isDateInFuture = function(obj){
	if (parseInt(g_globalsObject.currentDateObject.year) < parseInt(obj.year)){
		return true;
	} else if (parseInt(g_globalsObject.currentDateObject.year) == parseInt(obj.year)) {
		
		if (parseInt(g_globalsObject.currentDateObject.month) < parseInt(obj.month)){
			return true;
		} else if (parseInt(g_globalsObject.currentDateObject.month) == parseInt(obj.month)){
			
			if (parseInt(g_globalsObject.currentDateObject.day) < parseInt(obj.day)){
				return true;
			} else if (parseInt(g_globalsObject.currentDateObject.day) == parseInt(obj.day)){
				return false;
			} else {
				return false;
			}
			
		} else {
			return false;
		}
		
	} else {
		return false;
	}
};

ftCommon.prototype.inspect = function(obj){
	var str = "";
	
	for (n in obj){
		str += n + " => " + obj[n] +"\r\n";
	}
	
	alert(str);
	delete(str);
	return;
};

ftCommonTools = new ftCommon();

g_globalPassMeterPID = null;

passwordMeter = function(base_id,globalName){
	/*
		Collect references 
	*/
	
	this.field = $("#"+base_id);
	this.level = $("#"+base_id + "_level");
	this.block = $("#"+base_id + "_block");
	this.nonjblock = document.getElementById(base_id + "_block");
	
	this.passwordStrengthLevel = 0;
	this.globalName = globalName;
	this.field.attr("globalInstanceRef", this.globalName);
	this.trigger = false;
	
	/*
		Colors
	*/
	
	this.red 		= "#cc0000";
	this.yellow 	= "#ff9900";
	this.green 		= "#009933";
	
	/*
		Attach events
	*/
	
	this.field.keydown(new Function(this.globalName + ".analyze();"));
	this.field.keyup(new Function(this.globalName + ".analyze();"));
};

passwordMeter.prototype.analyze = function(){
	var thePass = jQuery.trim(this.field.val());
	
	if (thePass.length > 4){
		
		/*
			Check for Alphanumeric only password  ( Weak )
		*/
		
		if ( this.isAlphaOnlyOrNumericOnly(thePass) ){
			this.setMeter(1);
		} else if ( this.isAlphaNumericOnly(thePass) ){
			this.setMeter(2);
		} else if ( this.isAlphaNumericSigned1Group(thePass) ){
			this.setMeter(3);
		} else if ( this.isAlphaNumericSignedMultiGroup(thePass) ){
			this.setMeter(4);
		}
	} else {
		this.block.css("width","0px");
		this.level.empty();
	}
};

passwordMeter.prototype.isAlphaNumericSignedMultiGroup = function(aStr){
	var i,aChar;
	var lastIndex = aStr.length - 1;
	var multiGroupFlag = false;
	var allowed = "qwertyuiopasdfghjklmnbvcxzQWERTYUIOPLKJHGFDSAZXCVBNM0123456789!@#$%^&*()-_+=<>.,?";
	
	for (i=0; i<aStr.length; i++){
		aChar = aStr.substr(i,1);
		
		if (allowed.indexOf(aChar) == -1){
			return false;
		}
		
		if (aChar == "_"){
			if (i > 0 || i < lastIndex){
				multiGroupFlag = true;
			}
		}
	}
	
	if (multiGroupFlag){
		return true;
	} else {
		return false;
	}
	
};

passwordMeter.prototype.isAlphaNumericSigned1Group = function(aStr){
	var i,aChar;
	var lastIndex = aStr.length - 1;
	var oneGroupFlag = true;
	var allowed = "qwertyuiopasdfghjklmnbvcxzQWERTYUIOPLKJHGFDSAZXCVBNM0123456789!@#$%^&*()-_+=<>.,?";
	
	for (i=0; i<aStr.length; i++){
		aChar = aStr.substr(i,1);
		
		if (allowed.indexOf(aChar) == -1){
			return false;
		}
		
		if (aChar == "_"){
			if (i > 0 && i < lastIndex){
				oneGroupFlag = false;
			}
		}
	}
	
	if (oneGroupFlag){
		return true;
	} else {
		return false;
	}
	
};

passwordMeter.prototype.isAlphaNumericOnly = function(aStr){
	var i,aChar;
	var allowed = "qwertyuiopasdfghjklmnbvcxzQWERTYUIOPLKJHGFDSAZXCVBNM0123456789";
	
	for (i=0; i<aStr.length; i++){
		if (allowed.indexOf(aStr.substr(i,1)) == -1){
			return false;
		}
	}
	return true;
};

passwordMeter.prototype.isNumericOnly = function(aStr){
	var i,aChar;
	var allowed = "0123456789";
	
	for (i=0; i<aStr.length; i++){
		if (allowed.indexOf(aStr.substr(i,1)) == -1){
			return false;
		}
	}
	return true;
};


passwordMeter.prototype.isAlphaOnlyOrNumericOnly = function(aStr){
	if ( this.isAlphaOnly(aStr) || this.isNumericOnly(aStr) ){
		return true;
	}
	return false;
};

passwordMeter.prototype.isAlphaOnly = function(aStr){
	var i,aChar;
	var allowed = "qwertyuiopasdfghjklmnbvcxzQWERTYUIOPLKJHGFDSAZXCVBNM";
	
	for (i=0; i<aStr.length; i++){
		if (allowed.indexOf(aStr.substr(i,1)) == -1){
			return false;
		}
	}
	return true;
};

passwordMeter.prototype.getLevel = function(){
	return this.passwordStrengthLevel;
};

passwordMeter.prototype.setMeter = function(aMode){
	/*
		Responsible to set the right display in the 
		Password meter indicator.
		
		Arguments:
		aMode is an integer
		0 - off
		1 - weak
		2 - good
		3 - strong
	*/
	
	this.passwordStrengthLevel = aMode;

	switch (aMode){
		case 1:
			this.level.html(g_languageArray["LL_COMMON_APPLICATION_PASSWORD_METER_WEAK_LEVEL"]);
			this.block.css("backgroundColor",this.red);
			this.block.css("width","40px");
		break;
		
		case 2:
		case 3:
			this.level.html(g_languageArray["LL_COMMON_APPLICATION_PASSWORD_METER_GOOD_LEVEL"]);
			this.block.css("backgroundColor",this.green);
			this.block.css("width","100px");			
		break;
		
		case 4:
			this.level.html(g_languageArray["LL_COMMON_APPLICATION_PASSWORD_METER_STRONG_LEVEL"]);
			
			var fullPx = (document.all) ? 122 : 124;
			this.block.css("backgroundColor",this.green);
			this.block.css("width",fullPx+"px");
		break;
	}
	return;
};

swapMenuClass = function(elemId, newClass){
	
	if (!$("#"+elemId)){
		
		document.getElementById(elemId).className = newClass;
		
	} else {
		$("#"+elemId).removeClass();
		$("#"+elemId).attr("class",newClass);
	}	
};
