var kport_ajax = new Class({
	//Implements: [Events, Options],
	Extends: Request,
	options: {
		url:"",
		update:"",
		async:true,
		js:"",
		next_js:"",
		wait_msg:"<img src=\"templates/img/ajax-loader-1.gif\" style=\"vertical-align:middle\" alt=\"\" />&nbsp;Attendere...",
		put_wait:true,
		method:"post",
		link: "cancel",
		json_response: false,
		afterSuccess: function(){},
		cycle:0,
		onRequest:function(){
			if (this.options.put_wait)
			{ var dest = $(this.options.update)
			  if (dest)
			   dest.set('html',this.options.wait_msg);
			}
		}
	},
	
	onSuccess:function(responseText, responseXML){
		var frm = false;
		var dest = $(this.options.update);
		var is_xml = (/<\?xml/i).test(responseText);
		if (is_xml)
		{ try {
			var rxml = parser_xml(responseText);
			var rmsg = rxml.getElementsByTagName("result_msg");
			if ($defined(rmsg[0].childNodes[0]))
			{ $("msgs").set("html",unescape(rmsg[0].childNodes[0].nodeValue/*get('text')*/));
			}
			var rbody = rxml.getElements("result_body");
			if ($defined(rbody[0].childNodes[0]) && $(dest))
			 dest.set('html',rbody[0].childNodes[0].nodeValue/*.get('text')*/);
			var rprf = rxml.getElements("page_reload_flg");
			if ($defined(rprf[0].childNodes[0]))
			{ if (rprf[0].childNodes[0].nodeValue/*.get('text')*/  == "true")
			  { frm = $$("form")[0];
			  }
			}
			}
			catch(msg) {
		 		alert("ATTEZIONE:\n\n"+msg);
			}
		}
		else
		 if (this.getHeader('Content-type') == "application/json")
		 { this.options.json_response = JSON.decode(responseText);
		 }
		 else
		  if(dest)
		   dest.set('html',responseText);
		this.options.afterSuccess.run(this);
		$exec(this.options.js);
		$exec(this.options.next_js);
		if (frm)
		 frm.submit();
		if (this.options.cycle)
		 (function(){this.send();}.bind(this)).delay(this.options.cycle);
		
		while(this.callChain(this)){};
		//alert(this.$chain);
		return this;
	},
	
	loadURL: function(options) {
		this.setOptions(options);
		this.send();
		//return this;
	},
	initialize: function(options) {
		this.parent();
		this.setOptions(options);
		this.options.evalScripts = function(script){
			this.options.js = script;
			//if (script) alert(script);
		}.bind(this);
		return this;
	}
});
