//AJAXrequest

function AJAXrequest(url,rq,rc,jspar){
	this.url=url;
	this.request=rq;
	this.returnCall=function(arg){rc(arg);};
	this.jsParams = jspar;
	
	function parseResponse(response){
		var out = new Array();
		var pms = ''+response.match(/\#\{.*\}\#/);
	 	var content = ''+response.replace(/\#\{.*\}\#/,"");
		pms = pms.substring(2,pms.length-2);
		pms = pms.split(";");
		out.unshift(content);
		return out.concat(pms);
	}
	
	function handleResponse(http_request,jsparams,req,timer){
		if(http_request.readyState == 4) {
	    if(http_request.status == 200) {
	    	clearTimeout(timer);
	    	//alert(http_request.responseText);
	    	var temp = parseResponse(http_request.responseText);
	    	temp.unshift(jsparams);
	    	rc(temp);
	    }else {
	      alert('Wystąpił problem z zapytaniem ('+http_request.status+'), trying again');
	      var ajx = this;
	      ajx.abort();
				window.setTimeout(function(){ajx.makeRequest(req,jsparams);},50);
	      //this.makeRequest(req,jsparams);
	    }
	  }
	}
	
	function timeout(http_request,jsparams,req){
		alert('there was timeout');
	}
	
	this.makeRequest = function(req,jsparams){
		var timer;
		if(jsparams==undefined)jsparams = this.jsParams;
		//alert('makeRequest jsparams: '+jsparams+' request:'+req);
		if(req==undefined)req = this.request;
		var http_request = false;
    if(window.XMLHttpRequest) { // Mozilla, Safari,...
      http_request = new XMLHttpRequest();
      if (http_request.overrideMimeType)http_request.overrideMimeType('text/xml');
    }else if(window.ActiveXObject) { // IE
      try {
        http_request = new ActiveXObject("Msxml2.XMLHTTP");
      }catch(e) {
        try{
          http_request = new ActiveXObject("Microsoft.XMLHTTP");
        }catch(e) {}
      }
    }
    if(!http_request){
        alert('Poddaję się :( Nie mogę stworzyć instancji obiektu XMLHTTP');
        return false;
    }
    http_request.onreadystatechange = function(){handleResponse(http_request,jsparams,req,timer);};
    http_request.open('POST', this.url, true);
		http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", req.length);
    http_request.setRequestHeader("Connection", "close");
    http_request.send(req);
    timer = window.setTimeout(function(){timeout(http_request,jsparams,req);},5000);
    window.status = 'sent';
	}
}

//CATrequests

function CATrequests(main_url, arg_prefix){
	main_url = main_url;
	this.main_url = main_url;
	requests = new Array();
	this.requests = requests;
	names = new Array();
	this.names = names;
	this.arg_prefix=arg_prefix;
	
	function notify(index){
		//alert('notify:'+index);
	}
	
	this.add = function(rq,rc,name,jsp){
		if(rq=='')rq=arg_prefix;
		else if(arg_prefix!='')rq=arg_prefix+'&'+rq;
		var index = requests.length;
		var temp = new AJAXrequest(main_url,rq,function(arg){notify(index);rc(arg);},jsp);
		requests.push(temp);
		names[index]=name;
		return index;
	}
	
	function callRequestIndex(index,rq,jsp){
		if(rq!=undefined && arg_prefix!='')rq=arg_prefix+'&'+rq;
		requests[index].makeRequest(rq,jsp);
	}
	this.callRequestIndex = callRequestIndex;
	
	function callRequestName(name,rq,jsp){
		var i;
		for(i in names){
			if(names[i]==name){
				callRequestIndex(i,rq,jsp);
				break;
			}
		}
	}
	this.callRequestName = callRequestName;
	
	
}
