// LB

function array2url(){

this.array2str = function(prefix,array){
	str = '';
	for(var key in array){
		if(typeof array[key] != 'function'){
				if(typeof array[key] != 'object'){ // ?
					str += prefix+'['+key+']='+escape(array[key])+'&';
					
				} else {
					
					str += this.array2str(prefix+'['+key+']',array[key]);
				}
			}
		}
		
	return str;//.replace(/\&$/gi,"");
	}

this.makeParams = function(params){
	var str = '';
	for(var key in params){
		
		if(typeof params[key] != 'object'){
			str += key+'='+escape(params[key])+'&';
		} else {
			str += this.array2str(key,params[key])+'&';
		}
		
		}		
	return str;//.replace(/\&$/gi,"");
	}


}

function parseObject2url(object){
	var a2u = new array2url();	
	return a2u.makeParams(object);
}
 
function sajax_call_callback(func_name,callback,args,remote_uri){

	if(!args){
		var args = new Array();
	}
	
	if(remote_uri){
		sajax_remote_uri = remote_uri;
	}
	
	args[args.length] = callback;
	sajax_do_call(func_name,args);
}
 
function sajax_call_innerHTML(func_name,targetID,args,remote_uri){
	
	if(!args){
		var args = new Array();
	}
	
	if(remote_uri){
		sajax_remote_uri = remote_uri;
	}
	
	sajax_target_id = targetID;
	args[args.length] = false;
	sajax_do_call(func_name,args);
	sajax_target_id = '';
}

function sajax_call_Script(func_name,args,remote_uri){
	
	if(!args){
		var args = new Array();
	}
	
	if(remote_uri==''){
		sajax_remote_uri = remote_uri;
	}
	
	args[args.length] = function (response){
	
							try{
								if(typeof response == 'object'){
										for(var cmd in response){	
											eval(response[cmd]);
										}
								} else {
									eval(response);
								}
							} catch (e) {
								if (sajax_debug_mode){
									alert(e);
								}
							}
						};
//	console.log(func_name,args);return;
	sajax_do_call(func_name,args);
}

// remote scripting library
// (c) copyright 2005 modernmethod, inc
// modyfied by lukasz bak - mainseek.pl
//
var sajax_debug_mode = false;
var sajax_request_type = "POST";
var sajax_target_id = "";
var sajax_failure_redirect = "";
var sajax_remote_uri = "/sajaxresponse.php";
		
	function sajax_debug(text) {
		if (sajax_debug_mode){
			alert(text);
		}
	}
		
 	function sajax_init_object() {
 		sajax_debug("sajax_init_object() called..");
 			
 		var A;
 		
 		if(typeof XMLHttpRequest != "undefined"){
			A = new XMLHttpRequest();
		} else {	
	 		var msxmlhttp = new Array(
					'Msxml2.XMLHTTP',
					'Microsoft.XMLHTTP',
					'Msxml2.XMLHTTP.5.0',
					'Msxml2.XMLHTTP.4.0',
					'Msxml2.XMLHTTP.3.0'
					);
			
			for (var i = 0; i < msxmlhttp.length; i++) {
				try {
						A = new ActiveXObject(msxmlhttp[i]);
					} catch (e) {
						A = null;
					}
				
				if(A){
					break;	
				}
				
				}
		}
			
		if (!A){
				sajax_debug("Could not create connection object.");
		}
	
	return A;
	}
		
		var sajax_requests = new Array();
		
	function sajax_cancel() {
		for (var i = 0; i < sajax_requests.length; i++) 
			sajax_requests[i].abort();
	}
		
	function sajax_do_call(func_name, args) {
		var i, x, n;
		var uri;
		var post_data;
		var target_id;
		var a2u = new array2url(); 
			
		sajax_debug("in sajax_do_call().." + sajax_request_type + "/" + sajax_target_id);
		target_id = sajax_target_id;
		if (typeof(sajax_request_type) == "undefined" || sajax_request_type == ""){ 
			sajax_request_type = "GET";
		}
			
		uri = sajax_remote_uri;
		if (sajax_request_type == "GET") {
			
			if (uri.indexOf("?") == -1){ 
				uri += "?rs=" + escape(func_name);
			} else {
				uri += "&rs=" + escape(func_name);
			}
			
			
			
			uri += "&rst=" + escape(sajax_target_id);
			uri += "&rsrnd=" + new Date().getTime();
				
			/* for (i = 0; i < args.length-1; i++){
				if(typeof args[i] != 'object'){ 
					uri += "&rsargs["+i+"]=" + escape(args[i]);
				} else {
					uri += "&rsargs["+i+"]=" + escape(args[i]);
				}
			}
			*/
			
			uri += "&"+a2u.array2str('rsargs',args.slice(0,args.length-1));

				post_data = null;
			} 
			else if (sajax_request_type == "POST") {
				post_data = "rs=" + escape(func_name);
				post_data += "&rst=" + escape(sajax_target_id);
				post_data += "&rsrnd=" + new Date().getTime();
				
				/*
				for (i = 0; i < args.length-1; i++){ 
					post_data = post_data + "&rsargs["+i+"]=" + escape(args[i]);
				}
				*/
				
				post_data += "&"+a2u.array2str('rsargs',args.slice(0,args.length-1));
				
			} else {
				alert("Illegal request type: " + sajax_request_type);
			}

			x = sajax_init_object();
			if (x == null) {
				if (sajax_failure_redirect != "") {
					location.href = sajax_failure_redirect;
					return false;
				} else {
					sajax_debug("NULL sajax object for user agent:\n" + navigator.userAgent);
					return false;
				}
			} else {
				
				uri = 'http://'+location.host+uri;
//				console.log(uri);return;
				x.open(sajax_request_type, uri, true);
				// window.open(uri);
				
				sajax_requests[sajax_requests.length] = x;
				
				if (sajax_request_type == "POST") {
					x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
					x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				}
			
			x.onreadystatechange = function() {
				if (x.readyState != 4){ 
					return;
				}
				
				sajax_debug("received " + x.responseText);
				
				var status;
				var data;
				var txt = x.responseText.replace(/^\s*|\s*$/g,"");
				status = txt.charAt(0);
				data = txt.substring(2);
				
				if (status == "") {
					// let's just assume this is a pre-response bailout and let it slide for now
				} else if (status == "-"){ 
					alert("Error: " + data);
				} else {
					if (target_id != ""){ 
						document.getElementById(target_id).innerHTML = eval(data);
					} else {
						try {
							var callback;
							var extra_data = false;
							//alert(typeof args[args.length-1]);
							if (typeof args[args.length-1] == "object") {
								callback = args[args.length-1].callback;
								extra_data = args[args.length-1].extra_data;
							} else {
									callback = args[args.length-1];
							}
							callback(eval(data), extra_data);
						} catch (e) {
							sajax_debug("Caught error " + e + ": Could not eval " + data );
						}
					}
				}
			}
		}
			
	sajax_debug(func_name + " uri = " + uri + "/post = " + post_data);
	x.send(post_data);
	sajax_debug(func_name + " waiting..");
	delete x;
	return true;
	}
