﻿/** 
* Copyright 2006-2007 massimocorner.com
* License: http://www.massimocorner.com/license.htm
* @author      Massimo Foti (massimo@massimocorner.com)
* @version     0.8.2, 2007-05-18
*/

if(typeof(tmt)=="undefined"){var tmt={};}
tmt.net={};tmt.net.requestFactory=function(valueObj){var obj={};obj.request=null;obj.loadCallback=valueObj.loadCallback;if(!valueObj.params){valueObj.params=null;}
if(!valueObj.method){valueObj.method="GET";}
if(!valueObj.contentType&&valueObj.method=="POST"){valueObj.contentType="application/x-www-form-urlencoded";}
obj.timeout=tmt.net.DEFAULT_TIMEOUT;obj.timeoutId=null;if(valueObj.timeout){obj.timeout=valueObj.timeout;}
obj.request=tmt.net.getRequestObj();obj.abort=function(statusCode){var code=(statusCode)?statusCode:tmt.net.REQUEST_ABORTED;if(obj.isRequestRunning()){window.clearTimeout(obj.timeoutId);obj.request.abort();obj.errback.call(obj.createResponse(code));}}
obj.checkReadyState=function(){if(obj.request.readyState==tmt.net.READY_STATE_COMPLETE){window.clearTimeout(obj.timeoutId);var httpStatus=obj.request.status;if(httpStatus){if((httpStatus>=200&&httpStatus<=300)||(httpStatus==304)||(location.protocol=="file:")){obj.loadCallback.call(obj.createResponse(tmt.net.REQUEST_OK));}
else{obj.errback.call(obj.createResponse(tmt.net.REQUEST_FAILED));}}
else{obj.loadCallback.call(obj.createResponse(tmt.net.REQUEST_FAILED));}
obj.request=null;}}
obj.createResponse=function(statusCode){var container={};container.response={};container.response.url=valueObj.url;container.response.contextData=valueObj.contextData;container.response.errorcode=statusCode;if(statusCode==tmt.net.REQUEST_OK||statusCode==tmt.net.REQUEST_FAILED){container.response.status=obj.request.status;container.response.readyState=obj.request.readyState;container.response.statusText=obj.request.statusText;container.response.allResponseHeaders=obj.request.getAllResponseHeaders();container.response.responseText=obj.request.responseText;container.response.responseXML=obj.request.responseXML;}
if(valueObj.domNode){container.response.domNode=valueObj.domNode;}
return container;}
obj.defaultErrback=function(){var errorMsg=tmt.net.MSG_FAILED_REQUEST;errorMsg+="\n";errorMsg+="\nurl: "+this.response.url;errorMsg+="\nerrorcode: "+this.response.errorcode;if(this.response.errorcode==tmt.net.REQUEST_FAILED){errorMsg+="\nreadyState: "+this.response.readyState;errorMsg+="\nHTTP status: "+this.response.status;errorMsg+="\n";errorMsg+="\nResponse headers:";errorMsg+="\n"+this.response.allResponseHeaders;}
alert(errorMsg);}
obj.errback=(valueObj.errback)?valueObj.errback:obj.defaultErrback;obj.isRequestRunning=function(){return(obj.request.readyState!=tmt.net.READY_STATE_COMPLETE)&&(obj.request.readyState!=tmt.net.READY_STATE_COMPLETE);}
obj.send=function(){try{obj.request.onreadystatechange=function(){obj.checkReadyState.call();}
obj.request.open(valueObj.method,valueObj.url,true);if(valueObj.contentType){obj.request.setRequestHeader("Content-Type",valueObj.contentType);}
if(valueObj.headers){for(var x in valueObj.headers){obj.request.setRequestHeader(x,valueObj.headers[x]);}}
obj.request.send(valueObj.params);obj.timeoutId=setTimeout(obj.timedAbort,obj.timeout);}
catch(err){obj.errback.call(obj.createResponse(tmt.net.REQUEST_FAILED));}}
obj.timedAbort=function(){obj.abort(tmt.net.REQUEST_TIMEOUT);window.clearTimeout(obj.timeoutId);}
return obj;}
tmt.net.getRequestObj=function(){var requestObj={};var isLocal=location.protocol=="file:";if(!isLocal){if(window.XMLHttpRequest){requestObj=new XMLHttpRequest();}
else if(tmt.net.XHR_ACTIVEX_NAME){requestObj=new ActiveXObject(tmt.net.XHR_ACTIVEX_NAME);}
else{throw new Error(tmt.net.MSG_NO_XMLHTTPREQUEST);}}
else{if(tmt.net.XHR_ACTIVEX_NAME){requestObj=new ActiveXObject(tmt.net.XHR_ACTIVEX_NAME);}
else if(window.XMLHttpRequest){requestObj=new XMLHttpRequest();}
else{throw new Error(tmt.net.MSG_NO_XMLHTTPREQUEST);}}
return requestObj;}
tmt.net.httpRequest=function(url,loadCallback,errback,method,params){var request=null;var valueObj={};if(typeof(arguments[0])=="string"){valueObj.url=url;valueObj.loadCallback=loadCallback;if(errback){valueObj.errback=errback;}
if(method){valueObj.method=method;}
if(params){valueObj.params=params;}}
else{valueObj=arguments[0];}
try{request=tmt.net.requestFactory(valueObj);request.send();}
catch(err){alert(err.message);}
return request;}
tmt.net.isSupported=function(){if(window.XMLHttpRequest||window.ActiveXObject){return true;}
return false;}
tmt.net.DEFAULT_TIMEOUT=60000;tmt.net.READY_STATE_UNINITIALIZED=0;tmt.net.READY_STATE_COMPLETE=4;tmt.net.REQUEST_FAILED=100;tmt.net.REQUEST_ABORTED=101;tmt.net.REQUEST_TIMEOUT=102;tmt.net.REQUEST_OK=200;tmt.net.MSG_FAILED_REQUEST="Unable to retrieve data";tmt.net.MSG_NO_XMLHTTPREQUEST="Your browser doesn't support XMLHttp calls";tmt.net.XHR_ACTIVEX_VERSIONS=new Array("MSXML2.XmlHttp.6.0","MSXML2.XmlHttp.3.0","MSXML2.XmlHttp","Microsoft.XmlHttp");tmt.net.XHR_ACTIVEX_NAME=null;if(window.ActiveXObject){for(var i=0;tmt.net.XHR_ACTIVEX_VERSIONS.length;i++){if(i>tmt.net.XHR_ACTIVEX_VERSIONS.length){throw new Error("Unable to instantiate any suitable XMLHttp component");}
try{new ActiveXObject(tmt.net.XHR_ACTIVEX_VERSIONS[i]);tmt.net.XHR_ACTIVEX_NAME=tmt.net.XHR_ACTIVEX_VERSIONS[i];break;}
catch(err){}}}