function sack(file){this.xmlhttp=null;this.resetData=function(){this.method="POST";this.queryStringSeparator="?";this.argumentSeparator="&";this.URLString="";this.encodeURIString=true;this.execute=false;this.element=null;this.elementObj=null;this.requestFile=file;this.vars=new Object();this.responseStatus=new Array(2);};this.abort=function(){if(this.xmlhttp){xmlhttp.abort();}
this.reset();};this.resetFunctions=function(){this.onLoading=function(){};this.onLoaded=function(){};this.onInteractive=function(){};this.onCompletion=function(){};this.onError=function(){};this.onFail=function(){};};this.reset=function(){this.resetFunctions();this.resetData();};this.createAJAX=function(){try{this.xmlhttp=new ActiveXObject("Msxml2.XMLHTTP");}catch(e1){try{this.xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}catch(e2){this.xmlhttp=null;}}
if(!this.xmlhttp){if(typeof XMLHttpRequest!="undefined"){this.xmlhttp=new XMLHttpRequest();}else{this.failed=true;}}};this.setVar=function(name,value){this.vars[name]=Array(value,false);};this.encVar=function(name,value,returnvars){if(true==returnvars){return Array(encodeURIComponent(name),encodeURIComponent(value));}else{this.vars[encodeURIComponent(name)]=Array(encodeURIComponent(value),true);}};this.processURLString=function(string,encode){encoded=encodeURIComponent(this.argumentSeparator);regexp=new RegExp(this.argumentSeparator+"|"+encoded);varArray=string.split(regexp);for(i=0;i<varArray.length;i++){urlVars=varArray[i].split("=");if(true==encode){this.encVar(urlVars[0],urlVars[1]);}else{this.setVar(urlVars[0],urlVars[1]);}}};this.createURLString=function(urlstring){if(this.encodeURIString&&this.URLString.length){this.processURLString(this.URLString,true);}
if(urlstring){if(this.URLString.length){this.URLString+=this.argumentSeparator+urlstring;}else{this.URLString=urlstring;}}
this.setVar("rndval",new Date().getTime());urlstringtemp=new Array();for(key in this.vars){if(false==this.vars[key][1]&&true==this.encodeURIString){encoded=this.encVar(key,this.vars[key][0],true);delete this.vars[key];this.vars[encoded[0]]=Array(encoded[1],true);key=encoded[0];}
urlstringtemp[urlstringtemp.length]=key+"="+this.vars[key][0];}
if(urlstring){this.URLString+=this.argumentSeparator+urlstringtemp.join(this.argumentSeparator);}else{this.URLString+=urlstringtemp.join(this.argumentSeparator);}};this.runResponse=function(){eval(this.response);};this.runAJAX=function(urlstring){if(this.failed){this.onFail();}else{this.createURLString(urlstring);if(this.element){this.elementObj=document.getElementById(this.element);}
if(this.xmlhttp){var self=this;if(this.method=="GET"){totalurlstring=this.requestFile+this.queryStringSeparator+this.URLString;this.xmlhttp.open(this.method,totalurlstring,true);}else{this.xmlhttp.open(this.method,this.requestFile,true);try{this.xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded")}catch(e){}}
this.xmlhttp.onreadystatechange=function(){switch(self.xmlhttp.readyState){case 1:self.onLoading();break;case 2:self.onLoaded();break;case 3:self.response=self.getTXTresponse();self.onInteractive(self);break;case 4:self.response=self.getTXTresponse();if(self.xmlhttp.getResponseHeader('content-type')=='application/json')
self.JSON=eval('('+self.response+')');else
self.JSON=null;self.responseXML=self.getXMLresponse();self.responseStatus[0]=self.xmlhttp.status;self.responseStatus[1]=self.xmlhttp.statusText;if(self.execute){self.runResponse(self);}
if(self.elementObj){elemNodeName=self.elementObj.nodeName;elemNodeName.toLowerCase();if(elemNodeName=="input"||elemNodeName=="select"||elemNodeName=="option"||elemNodeName=="textarea"){self.elementObj.value=self.response;}else{self.elementObj.innerHTML=self.response;}}
if(self.responseStatus[0]=="200"){self.onCompletion(self);}else{self.onError();}
self.URLString="";delete self.xmlhttp['onreadystatechange'];self.xmlhttp=null;self.responseStatus=null;self.response=null;self.responseXML=null;break;}};this.xmlhttp.send(this.URLString);}}};this.getXMLresponse=function(){if(window.ActiveXObject){var r=new ActiveXObject("Msxml2.DOMDocument.3.0");r.async=false;r.loadXML(this.xmlhttp.responseText);return r;}else if(window.XMLHttpRequest&&this.xmlhttp.responseXML){return this.xmlhttp.responseXML;}};this.getTXTresponse=function(){try{var regex=new RegExp('&amp;','gi');return this.xmlhttp.responseText.replace(regex,'&');}catch(e){return'';}};this.getXMLTagValue=function(xmlDoc,tagName,childName){if(!xmlDoc)return false;var e=xmlDoc.getElementsByTagName(tagName);if(!e)return false;var regex=new RegExp('&amp;','gi');if(childName){if(e[0].childNodes){for(var i=0;i<e[0].childNodes.length;i++){if(e[0].childNodes[i].nodeType!=1)continue;if(e[0].childNodes[i].nodeName==childName)
return e[0].childNodes[i].firstChild.nodeValue;}}
return false;}
if(e&&e.item(0)&&e.item(0).firstChild){return xmlDoc.getElementsByTagName(tagName).item(0).firstChild.data.replace(regex,'&');}
return false;};this.XMLTagExists=function(xmlDoc,tagName){return xmlDoc.getElementsByTagName(tagName).length?true:false;};this.execJS=function(t){var script_open='<script type="text/javascript">';var script_close='</script>';var si=0;while(true){var ss=t.indexOf(script_open,si);if(ss==-1){return;}
var se=t.indexOf(script_close,ss);if(se==-1){return;}
si=se+script_close.length;var sc=t.substring(ss+script_open.length,se);if(window.execScript)
window.execScript(sc);else
window.eval(sc);}};this.reset();this.createAJAX();}