"/*(c) Copyright 2007-2008 Slacker, Inc. 16935 West Bernardo Dr. San Diego, CA 92127 - All rights reserved.*/";var conTest={trials:0,cumm:0,avg:0,last:0};function http(){this.version="$LastChangedRevision: 1323 $";this.requests={};this.urlToRequestId={};this._seqId=0;this.callingTimeout=false}http.prototype={createRequest:function(params,wsr){if(!params.url){return 0}var method,url,async,postData,callback,username,password,requestTime;method=(params.method)?params.method:"GET";async=(params.async)?params.async:false;params.username=(params.username)?params.username:"";params.password=(params.password)?params.password:"";params.postData=(params.postData)?params.postData:null;var request=this.getHttpRequestObj(params);if(wsr){wsr.rid=request.id}if(params.url.indexOf("undefined")>-1){com.debug.console.log("debug","Malformed URL contains the word undefined: "+params.url);com.rockit.kernel.beacon("undefinedUrl",{url:params.url});params.url=params.url.replace(/undefined/g,"")}request.http.open(method,params.url,async,params.username,params.password);if(async&&params.callback&&typeof params.callback=="function"){if(window.ActiveXObject){request.http.onreadystatechange=function(){if(this.callingTimeout){return }if(request.http.readyState==4){try{request.requestTime=requestTime=(new Date())-request.startTime;request.contentLength=(request.http)?request.http.getResponseHeader("Content-Length"):0;com.debug.console.log("info","Async "+method+" request returning ("+request.http.status+" - "+requestTime+"ms / "+request.contentLength+"): "+params.url);params.httpStatus=request.http.status;setTimeout(function(){TestConnection(request.contentLength,requestTime,request.http)},10)}catch(e){}params.callback.apply(request.http,[request.id])}}}else{request.http.onload=function(evt){try{request.requestTime=requestTime=(new Date())-request.startTime;request.contentLength=(request.http)?request.http.getResponseHeader("Content-Length"):0;com.debug.console.log("info","Async "+method+" request returning ("+request.http.status+" - "+requestTime+"ms / "+request.contentLength+"): "+params.url);params.httpStatus=request.http.status;setTimeout(function(){TestConnection(request.contentLength,requestTime,request.http)},10)}catch(e){}params.callback.apply(request.http,[request.id])};request.http.onerror=function(evt){var status=null;try{status=evt.target.status}catch(e){status=500}try{request.requestTime=requestTime=(new Date())-request.startTime;com.debug.console.log("error","httprequest error - "+status+" ("+requestTime+"ms): "+params.url)}catch(e){}com.data.httpRequest.cancelRequest(request.id);if(params.async&&(!status||status>=500)){try{com.debug.console.log("warn","Retry request after error: "+params.url)}catch(e){}setTimeout(function(){com.data.httpRequest.createRequest(params,wsr)},1000)}}}}try{if(params.headers){for(var h in params.headers){request.http.setRequestHeader(h,params.headers[h])}}}catch(e){}try{request.http.setProperty("SelectionLanguage","XPath")}catch(e){}try{request.startTime=new Date();request.http.send(params.postData);com.debug.console.log("debug","Requesting (async:"+async+"): "+method+" "+params.url)}catch(e){try{var msg=(e.message)?e.message:e;com.debug.console.log("error",msg+" requesting (async:"+async+"): "+method+" "+params.url)}catch(e){}}if(params.timeout){var msec=params.timeout.msec;var ontimeout=params.timeout.ontimeout;setTimeout(function(){this.callingTimeout=true;try{var r=com.data.httpRequest.getRequest(request.id);if(r&&r.http&&r.http.readyState<3){com.data.httpRequest.cancelRequest(request.id);try{com.debug.console.log("warn","httpRequest: Request timed out: "+params.url)}catch(e){}if(typeof ontimeout=="function"){ontimeout.apply(request.http,[request.id,"timeout"])}}}catch(e){}this.callingTimeout=false},msec)}if(async==false&&typeof params.callback=="function"){try{request.requestTime=requestTime=(new Date())-request.startTime;request.contentLength=(request.http)?request.http.getResponseHeader("Content-Length"):0;com.debug.console.log("info","Returning sync request ("+requestTime+"ms / "+request.contentLength+") with callback: "+params.url);setTimeout(function(){TestConnection(request.contentLength,requestTime,request.http)},10)}catch(e){}return params.callback.apply(request.http,[request.id])}else{if(async==false||!params.callback){var type=(!params.callback)?"async fire and forget":"sync";try{request.requestTime=requestTime=(new Date())-request.startTime;request.contentLength=(request.http)?request.http.getResponseHeader("Content-Length"):0;com.debug.console.log("info","Returning "+type+" request ("+requestTime+"ms / "+request.contentLength+") : "+params.url);if(async!=true){setTimeout(function(){TestConnection(request.contentLength,requestTime,request.http)},10)}}catch(e){}}return request.id}},finalize:function(id){var r=this.requests[id];if(r){if(!r.isCacheable){if(window.ActiveXObject){try{r.http.onreadystatechange=null}catch(e){}}else{try{r.http.onload=null}catch(e){}}r.http.abort();r.http=null;delete this.urlToRequestId[r.url];delete this.requests[id]}}},getRequest:function(id){return this.requests[id]},getHttpRequestObj:function(structParams){var obj;var id=++this._seqId;if(window.ActiveXObject){obj=new ActiveXObject("Microsoft.XMLHTTP")}else{obj=new XMLHttpRequest()}this.requests[id]=new HttpRequest(this._seqId++,obj,structParams);this.urlToRequestId[structParams.url]=id;return this.requests[id]},getResponseHeaders:function(response){var headers={};var h=response.getAllResponseHeaders();var tempH=h.split("\n");var temp;for(var i=0;i<tempH.length;i++){temp=tempH[i].split(": ");headers[temp[0]]=temp[1]}tempH=h=temp=null;return headers},cancelRequest:function(id){var r=this.requests[id];if(r){r.isCacheable=false;this.finalize(id)}},getConnSpeed:function(){conTest.avg=conTest.cumm/conTest.trials;return conTest.avg}};function HttpRequest(id,request,structParams){this.startTime;this.id=id;this.url=structParams.url;this.method=structParams.method||"GET";this.postData=structParams.postData||"";this.http=request;this.contentLength;this.status=0;this.isCacheable=false;this.callback}function TestConnection(size,t,http){var speed;if(parseInt(size)&&t&&http&&http.status==200){conTest.trials++;speed=Math.round((parseInt(size)/128)/(t/1000));conTest.last=speed;conTest.cumm=conTest.cumm+speed}}try{netscape.security.PrivilegeManager.enablePrivilege("UniversalBrowserRead")}catch(e){}var dom;try{dom=(verifyNamespace)?parent:window}catch(e){dom=parent}try{dom.verifyNamespace("com.data.httpRequest")}catch(e){dom=this;dom.verifyNamespace("com.data.httpRequest")}com=dom.com;com.data.httpRequest=new http();dom.registerPackage("com.data.httpRequest");
