var HTTP=function(){var leadingSpace=/^\s*/;var trailingSpace=/\s*$/;var encodedSpace=/%20/g;var factory;var factories=[function(){return new XMLHttpRequest();},function(){return new ActiveXObject("Msxml2.XMLHTTP");},function(){return new ActiveXObject("Microsoft.XMLHTTP");}];function newRequest(){var request;if(factory){return factory();}
for(var i=0;i<factories.length;i+=1){try{factory=factories[i];request=factory();if(request){return request;}}catch(e){continue;}}
factory=function(){throw new Error("XMLHttpRequest not supported");};factory();}
function doRequest(url,callback,options){var request=newRequest();var timer;if(options.timeout){timer=setTimeout(function(){request.abort();if(options.timeoutHandler){options.timeoutHandler();}},options.timeout);}
request.onreadystatechange=function(){if(request.readyState===4){if(timer){clearTimeout(timer);}
if(request.status===200){callback(getResponse(request));}else{if(options.errorHandler){options.errorHandler(request.status,request.statusText);}else{callback(null);}}}};request.open(options.method,url);if(options.method==="POST"){request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");request.send(encodeFormData(options.values));}else{request.send(encodeFormData(null));}}
function getResponse(request){switch(request.getResponseHeader("content-type")){case"text/xml":return request.responseXML;break;default:return request.responseText;}}
function parseHeaders(text){var headers={};var lines=text.split("\n");var line;var pos;var name;var value;for(var i=0;i<lines.length;i+=1){line=lines[i];if(line.length===0){continue;}
pos=line.indexOf(":");name=line.substring(0,pos).replace(leadingSpace,"").replace(trailingSpace,"");value=line.substring(pos+1).replace(leadingSpace,"").replace(trailingSpace,"");headers[name]=value;}
return headers;}
function encodeFormData(data){var pairs=[];var pair;var name;var value;for(name in data){value=data[name]+"";pair=encodeURIComponent(name).replace(encodedSpace,"+")+"="+encodeURIComponent(value).replace(encodedSpace,"+");pairs.push(pair);}
return pairs.join("&");}
return{get:function(url,callback,opts){var options=opts||{};options.method="GET";doRequest(url,callback,options);},post:function(url,values,callback,opts){var options=opts||{};options.method="POST";doRequest(url,callback,options);},head:function(url,callback,opts){var options=opts||{};options.method="HEAD";doRequest(url,callback,options);},getText:function(url,callback){HTTP.get(url,callback);}};}();