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.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.onInteractive()
break
case 4:
self.response=self.xmlhttp.responseText
self.responseXML=self.xmlhttp.responseXML
self.responseStatus[0]=self.xmlhttp.status
self.responseStatus[1]=self.xmlhttp.statusText
if(self.execute){
self.runResponse()}
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()
}else{
self.onError()}
self.URLString=""
break}}
this.xmlhttp.send(this.URLString)}}}
this.reset()
this.createAJAX()}
