web/wp-includes/js/tw-sack.dev.js
changeset 204 09a1c134465b
parent 203 f507feede89a
child 205 a4f7897e21a9
equal deleted inserted replaced
203:f507feede89a 204:09a1c134465b
     1 /* Simple AJAX Code-Kit (SACK) v1.6.1 */
       
     2 /* ©2005 Gregory Wild-Smith */
       
     3 /* www.twilightuniverse.com */
       
     4 /* Software licenced under a modified X11 licence,
       
     5    see documentation or authors website for more details */
       
     6 
       
     7 function sack(file) {
       
     8 	this.xmlhttp = null;
       
     9 
       
    10 	this.resetData = function() {
       
    11 		this.method = "POST";
       
    12   		this.queryStringSeparator = "?";
       
    13 		this.argumentSeparator = "&";
       
    14 		this.URLString = "";
       
    15 		this.encodeURIString = true;
       
    16   		this.execute = false;
       
    17   		this.element = null;
       
    18 		this.elementObj = null;
       
    19 		this.requestFile = file;
       
    20 		this.vars = new Object();
       
    21 		this.responseStatus = new Array(2);
       
    22   	};
       
    23 
       
    24 	this.resetFunctions = function() {
       
    25   		this.onLoading = function() { };
       
    26   		this.onLoaded = function() { };
       
    27   		this.onInteractive = function() { };
       
    28   		this.onCompletion = function() { };
       
    29   		this.onError = function() { };
       
    30 		this.onFail = function() { };
       
    31 	};
       
    32 
       
    33 	this.reset = function() {
       
    34 		this.resetFunctions();
       
    35 		this.resetData();
       
    36 	};
       
    37 
       
    38 	this.createAJAX = function() {
       
    39 		try {
       
    40 			this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
       
    41 		} catch (e1) {
       
    42 			try {
       
    43 				this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
       
    44 			} catch (e2) {
       
    45 				this.xmlhttp = null;
       
    46 			}
       
    47 		}
       
    48 
       
    49 		if (! this.xmlhttp) {
       
    50 			if (typeof XMLHttpRequest != "undefined") {
       
    51 				this.xmlhttp = new XMLHttpRequest();
       
    52 			} else {
       
    53 				this.failed = true;
       
    54 			}
       
    55 		}
       
    56 	};
       
    57 
       
    58 	this.setVar = function(name, value){
       
    59 		this.vars[name] = Array(value, false);
       
    60 	};
       
    61 
       
    62 	this.encVar = function(name, value, returnvars) {
       
    63 		if (true == returnvars) {
       
    64 			return Array(encodeURIComponent(name), encodeURIComponent(value));
       
    65 		} else {
       
    66 			this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
       
    67 		}
       
    68 	}
       
    69 
       
    70 	this.processURLString = function(string, encode) {
       
    71 		encoded = encodeURIComponent(this.argumentSeparator);
       
    72 		regexp = new RegExp(this.argumentSeparator + "|" + encoded);
       
    73 		varArray = string.split(regexp);
       
    74 		for (i = 0; i < varArray.length; i++){
       
    75 			urlVars = varArray[i].split("=");
       
    76 			if (true == encode){
       
    77 				this.encVar(urlVars[0], urlVars[1]);
       
    78 			} else {
       
    79 				this.setVar(urlVars[0], urlVars[1]);
       
    80 			}
       
    81 		}
       
    82 	}
       
    83 
       
    84 	this.createURLString = function(urlstring) {
       
    85 		if (this.encodeURIString && this.URLString.length) {
       
    86 			this.processURLString(this.URLString, true);
       
    87 		}
       
    88 
       
    89 		if (urlstring) {
       
    90 			if (this.URLString.length) {
       
    91 				this.URLString += this.argumentSeparator + urlstring;
       
    92 			} else {
       
    93 				this.URLString = urlstring;
       
    94 			}
       
    95 		}
       
    96 
       
    97 		// prevents caching of URLString
       
    98 		this.setVar("rndval", new Date().getTime());
       
    99 
       
   100 		urlstringtemp = new Array();
       
   101 		for (key in this.vars) {
       
   102 			if (false == this.vars[key][1] && true == this.encodeURIString) {
       
   103 				encoded = this.encVar(key, this.vars[key][0], true);
       
   104 				delete this.vars[key];
       
   105 				this.vars[encoded[0]] = Array(encoded[1], true);
       
   106 				key = encoded[0];
       
   107 			}
       
   108 
       
   109 			urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
       
   110 		}
       
   111 		if (urlstring){
       
   112 			this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
       
   113 		} else {
       
   114 			this.URLString += urlstringtemp.join(this.argumentSeparator);
       
   115 		}
       
   116 	}
       
   117 
       
   118 	this.runResponse = function() {
       
   119 		eval(this.response);
       
   120 	}
       
   121 
       
   122 	this.runAJAX = function(urlstring) {
       
   123 		if (this.failed) {
       
   124 			this.onFail();
       
   125 		} else {
       
   126 			this.createURLString(urlstring);
       
   127 			if (this.element) {
       
   128 				this.elementObj = document.getElementById(this.element);
       
   129 			}
       
   130 			if (this.xmlhttp) {
       
   131 				var self = this;
       
   132 				if (this.method == "GET") {
       
   133 					totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
       
   134 					this.xmlhttp.open(this.method, totalurlstring, true);
       
   135 				} else {
       
   136 					this.xmlhttp.open(this.method, this.requestFile, true);
       
   137 					try {
       
   138 						this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
       
   139 					} catch (e) { }
       
   140 				}
       
   141 
       
   142 				this.xmlhttp.onreadystatechange = function() {
       
   143 					switch (self.xmlhttp.readyState) {
       
   144 						case 1:
       
   145 							self.onLoading();
       
   146 							break;
       
   147 						case 2:
       
   148 							self.onLoaded();
       
   149 							break;
       
   150 						case 3:
       
   151 							self.onInteractive();
       
   152 							break;
       
   153 						case 4:
       
   154 							self.response = self.xmlhttp.responseText;
       
   155 							self.responseXML = self.xmlhttp.responseXML;
       
   156 							self.responseStatus[0] = self.xmlhttp.status;
       
   157 							self.responseStatus[1] = self.xmlhttp.statusText;
       
   158 
       
   159 							if (self.execute) {
       
   160 								self.runResponse();
       
   161 							}
       
   162 
       
   163 							if (self.elementObj) {
       
   164 								elemNodeName = self.elementObj.nodeName;
       
   165 								elemNodeName.toLowerCase();
       
   166 								if (elemNodeName == "input"
       
   167 								|| elemNodeName == "select"
       
   168 								|| elemNodeName == "option"
       
   169 								|| elemNodeName == "textarea") {
       
   170 									self.elementObj.value = self.response;
       
   171 								} else {
       
   172 									self.elementObj.innerHTML = self.response;
       
   173 								}
       
   174 							}
       
   175 							if (self.responseStatus[0] == "200") {
       
   176 								self.onCompletion();
       
   177 							} else {
       
   178 								self.onError();
       
   179 							}
       
   180 
       
   181 							self.URLString = "";
       
   182 							break;
       
   183 					}
       
   184 				};
       
   185 
       
   186 				this.xmlhttp.send(this.URLString);
       
   187 			}
       
   188 		}
       
   189 	};
       
   190 
       
   191 	this.reset();
       
   192 	this.createAJAX();
       
   193 }