var AjaxObj=new Class({initialize:function(a,b){this.url=a;this.numjobs=b;this.queue=[];this.jobs=new Hash;this.jobID=0},add:function(a){a.id=++this.jobID;if(!a.priority)a.priority=1;if(!a.instance)a.instance=0;if(!a.mode){return false}if(!this._insertToQueue(a)){return false}this._send();return this.jobID},addToQueue:function(a,b,c,d,e,f,g){return this.add({mode:a,priority:b,data:c,onSuccess:e,parm:d,instance:f,onCancel:g})},_send:function(){if(this.queue.length==0)return false;if(this.jobs.getLength()>=this.numjobs)return false;var job=this.queue.shift();this.jobs.include(job.id,job);var postData=["thread_id="+job.id,"thread_mode="+job.mode,"thread_page_instance="+job.instance];for(var x in job.data){var type=$type(job.data[x]);if(type=="array"||type=="object"){postData.push(x+"="+JSON.encode(job.data[x]))}else{postData.push(x+"="+job.data[x])}}job.req=new Request({url:this.url,onRequest:function(){if(job.onRequest)job.onRequest();return false},onComplete:function(){if(job.onComplete)job.onComplete();return false},onSuccess:function(text,xml){var errorMsg=null,resObj;try{resObj=JSON.decode(text)}catch(e){}if(!resObj)errorMsg="Ajax: response jest null lub JSON.decode zwraca blad";if(!job.parm){if(job.onSuccess)job.onSuccess(resObj,errorMsg)}else{if(job.onSuccess){if($type(job.onSuccess)!="string"){job.onSuccess(job.parm,resObj,errorMsg)}else{eval(job.onSuccess+"(job.parm, resObj, errorMsg);")}}}this.jobs.erase(job.id);this._send();return false}.bind(this),onCancel:function(){if(job.onCancel)job.onCancel();this.jobs.erase(job.id);this._send();return false}.bind(this),onFailure:function(a){if(job.onFailure)job.onFailure(a);return false}});job.req.send(postData.join("&"));if(job.ttl){job.timeout=setTimeout(function(){if(job.req.running)job.req.cancel()},job.ttl.toInt())}},_insertToQueue:function(a){for(var b=0;b<this.queue.length;b++){if(this.queue[b+1]&&this.queue[b].priority<a.priority){this.queue.splice(b,0,a);return true}}this.queue.push(a);return true}})
