193 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			193 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /* Simple AJAX Code-Kit (SACK) v1.6.1 */
 | |
| /* ©2005 Gregory Wild-Smith */
 | |
| /* www.twilightuniverse.com */
 | |
| /* Software licenced under a modified X11 licence,
 | |
|    see documentation or authors website for more details */
 | |
| 
 | |
| 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;
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		// prevents caching of 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();
 | |
| }
 |