
Object.extend=function(destination,source){for(var property in source){destination[property]=source[property];}return destination;};var cb={attempt:function(){var returnValue;for(var i=0,length=arguments.length;i<length;i++){var lambda=arguments[i];try{returnValue=lambda();break;}catch(e){}}return returnValue;}};function $(element){if(arguments.length>1){var elements=[];for(var i=0,length=arguments.length;i<length;i++){elements.push($(arguments[i]));}return elements;}if(typeof(element)=='string'){element=document.getElementById(element);}return element;};Object.extend(Function.prototype,{pass:function(args,bind){var fn=this;if(typeof(args)!='array'){args=[args];}return function(){return fn.apply(bind||fn,args);};},bind:function(bind){var fn=this;return function(){return fn.apply(bind,arguments);};},bindAsEventListener:function(bind){var fn=this;return function(event){fn.apply(bind,[event||window.event]);};},delay:function(ms,bind){return setTimeout(this.bind(bind||this),ms);},periodical:function(ms,bind){return setInterval(this.bind(bind||this),ms);}});var Ajax=ajax={initialize:function(url,options){this.url=url;this.setOptions(options);this.getTransport();},setOptions:function(options){this.options={method:'post',async:true,parameters:'',encoding:'UTF-8',contentType:'application/x-www-form-urlencoded',onComplete:this.empty,onFailure:this.empty,onStateChange:this.empty};Object.extend(this.options,options||{});this.options.method=this.options.method.toLowerCase();this.setParameters();},setParameters:function(){var parameters=this.options.parameters;if(typeof(parameters)=='string'){var params=parameters.trim().match(/[^?]*$/)[0];}else{var params=[];for(var key in parameters){params.push(key+'='+encodeURIComponent(parameters[key]?parameters[key]:undefined));}params=params.join('&');}this.options.parameters=params;if(this.options.method=='get'&&params){this.url+=(this.url.indexOf('?')>-1?'&':'?')+params;}},request:function(url,options){try{this.initialize(url,options);this.transport.open(this.options.method.toUpperCase(),this.url,this.options.async);this.transport.onreadystatechange=this.onStateChange.bind(this);this.setHeaders();this.transport.send(this.options.method=='post'?this.options.parameters:null);}catch(e){this.options.onFailure.pass([this.transport.responseText,this.transport.responseXML],this).delay(30);}return this;},onStateChange:function(){this.options.onStateChange.delay(10,this);if(this.transport.readyState!=4)return;var status=0;try{status=this.transport.status}catch(e){}if(status>=200&&status<300){this.options.onComplete.pass([this.transport.responseText,this.transport.responseXML],this).delay(20);}else{this.options.onFailure.pass([this.transport.responseText,this.transport.responseXML],this).delay(20);}this.transport.onreadystatechange=this.empty;},getTransport:function(){this.transport=cb.attempt(function(){return new XMLHttpRequest()},function(){return new ActiveXObject('Msxml2.XMLHTTP')},function(){return new ActiveXObject('Microsoft.XMLHTTP')})||false;},setHeaders:function(){var headers={'X-Requested-With':'XMLHttpRequest','X-Codebreeder-Version':'1.0','Accept':'text/javascript, text/html, application/xml, text/xml, */*'};if(this.options.method=='post'){headers['Content-type']=this.options.contentType+(this.options.encoding?'; charset='+this.options.encoding:'');if(this.transport.overrideMimeType){headers['Connection']='close';}}Object.extend(headers,this.options.requestHeaders);for(var key in headers){this.transport.setRequestHeader(key,headers[key]);}},empty:function(){}};

