String.prototype.trim = function() {
  var x=this;
  x=x.replace(/^\s*(.*)/, "$1");
  x=x.replace(/(.*?)\s*$/, "$1");
  return x;
}

function doKeyPress(obj,evt){
    var maxLength = obj.getAttribute("maxlength");
    var e = window.event ? event.keyCode : evt.which;
    if ( (e == 32) || (e == 13) || (e > 47)) { //IE
        if(maxLength && (obj.value.length > maxLength-1)) {
            if (window.event) {
                window.event.returnValue = null;
            }
            else {
                evt.cancelDefault;
                return false;
            }
        }
    }
}

function doKeyUp(obj){
	var maxLength = obj.getAttribute("maxlength");
	if(maxLength && obj.value.length > maxLength){
		obj.value = obj.value.substr(0,maxLength);
	}
	var sr = obj.getAttribute("showremain");
	if (sr) {
		document.getElementById(sr).innerHTML = maxLength-obj.value.length;
	}
}

function doBeforePaste(obj){
	var maxLength = obj.getAttribute("maxlength");
	if (maxLength) {
		return false;
	}
}

function doPaste(obj){
	var detect = navigator.userAgent.toLowerCase();
	var maxLength = obj.getAttribute("maxlength");
	if (maxLength) {
		if ((window.event) && (detect.indexOf("safari") + 1 == 0)) { //IE
			var oTR = obj.document.selection.createRange();
			var iInsertLength = maxLength - obj.value.length + oTR.text.length;
			try {
				var sData = window.clipboardData.getData("Text").substr(0,iInsertLength);
				oTR.text = sData;
			}
			catch (err) {
			}
			if (window.event) { //IE
				window.event.returnValue = null;
			}
			else {
				//not IE
				obj.value = obj.value.substr(0,maxLength);
				return false;
			}
		}
	}
}

var taRules = {
    "textarea" : function(element){
        element.onkeydown = function(event){
            return doKeyPress(element,event);
        }
        ,
        element.onpaste = function(){
            return doPaste(element);
        }
        ,
        element.onbeforepaste = function(){
            return doBeforePaste(element);
        }
        ,
        element.onkeyup = function(){
            return doKeyUp(element);
        }
        ,
        element.onblur = function(){
            return doKeyUp(element);
        }
    }
}

Behaviour.register(taRules);

function openGame(url) {
	window.open (url, "SpaceBomberDemo", "location=0, status=0, scrollbars=0, resizable=0, width=800, height=600").focus();
}

function openPicture(url, id) {
	window.open(url+"?id="+id, "SpaceBomberGallery", "location=0, status=0, scrollbars=0, resizable=0, width=800, height=600").focus();
}

function setButtonBackground(id, url) {
	var styles = {background: "transparent url('"+url+"') no-repeat top left"};
	$(id).setStyle(styles);
}

function showHelp(id) {
	var e = $(id);
	if (e) {
		var h = $("help");
		if (h) {
			h.innerHTML = e.innerHTML;
			var hDims = $(id=="help_errors"?"main_text_scroll":"right_buy").positionedOffset();
			var x = hDims.left + 20;
			var y = hDims.top + (id=="help_errors"?20:50);
			var styles = {position: "absolute", top: y+"px", left: x+"px"};
			h.setStyle(styles);
			h.scrollTo();
			h.show();
		}
	}
}

var buyForm = new RPCClient();
var statusForm = new RPCClient();

function buy() {
	var cb = new Callback(buyForm, "left_big");
	cb.onLoad = function() {
		var scriptObj = new RPCClient();
		var scb = new Callback(scriptObj);
		scb.onLoad = function () {
			initBuyForm();
		};
		scriptObj.execute(scb, buyForm.scriptUrl);
	};
	buyForm.execute(cb, buyForm.formUrl);
}

function pay(form) {
	if (!form.accept.checked) {
		alert($("text_condition").innerHTML.trim());
	}
	else {
    	var params = new Array();
		var p;
		
		for (param in form) {
			if (form[param] && form[param].name && typeof form[param].name=="string" && 
				(form[param].name.indexOf("license.")==0 || form[param].name.indexOf("key.")==0 || form[param].name.indexOf("payment.")==0)) {
				if (form[param].type=="checkbox") {
					p = new Object();
					p.name = form[param].name;
					p.value = form[param].checked;
					params[params.length] = p;
				}
				else if (form[param].value) {
					p = new Object();
					p.name = form[param].name;
					p.value = form[param].value;
					params[params.length] = p;
				}
			}
		}

		p = new Object();
		p.name = "payment.invoiceRequested";
		p.value = form.invoice_requested.checked;
		params[params.length] = p;

		p = new Object();
		p.name = "accept";
		p.value = form.accept.checked;
		params[params.length] = p;

		p = new Object();
		p.name = "code";
		p.value = form.code.value;
		params[params.length] = p;

		p = new Object();
		p.name = "check";
		p.value = form.check.value;
		params[params.length] = p;

		var cb = new Callback(buyForm, "left_big");
		cb.onLoad = function() {
			var scriptObj = new RPCClient();
			var scb = new Callback(scriptObj);
			scb.onLoad = function () {
				initBuyForm();
			};
			scriptObj.execute(scb, buyForm.scriptUrl, params);
		};
		buyForm.execute(cb, buyForm.actionUrl, params);
	}
}

function status() {
	var cb = new Callback(buyForm, "left_big");
	cb.onLoad = function() {
		var scriptObj = new RPCClient();
		var scb = new Callback(scriptObj);
		scb.onLoad = function () {
			initStatusForm();
		};
		scriptObj.execute(scb, statusForm.scriptUrl);
	};
	buyForm.execute(cb, statusForm.formUrl);
}

function load(form) {
	statusAction(form, statusForm.loadUrl);
}

function resend(form) {
	statusAction(form, statusForm.resendUrl);
}

function statusAction(form, action) {
	var params = new Array();
	var p;
	
	for (param in form) {
		if (form[param] && form[param].name && typeof form[param].name=="string" && 
			form[param].name.indexOf("license.")==0) {
			if (form[param].type=="checkbox") {
				p = new Object();
				p.name = form[param].name;
				p.value = form[param].checked;
				params[params.length] = p;
			}
			else if (form[param].value) {
				p = new Object();
				p.name = form[param].name;
				p.value = form[param].value;
				params[params.length] = p;
			}
		}
	}

	if (action==statusForm.resendUrl) {
		p = new Object();
		p.name = "resend";
		p.value = true;
		params[params.length] = p;
	}
	
	p = new Object();
	p.name = "code";
	p.value = form.code.value;
	params[params.length] = p;

	p = new Object();
	p.name = "check";
	p.value = form.check.value;
	params[params.length] = p;

	var cb = new Callback(buyForm, "left_big");
	cb.onLoad = function() {
		var scriptObj = new RPCClient();
		var scb = new Callback(scriptObj);
		scb.onLoad = function () {
			initStatusForm();
		};
		scriptObj.execute(scb, statusForm.scriptUrl, params);
	};
	buyForm.execute(cb, action, params);
}

