home *** CD-ROM | disk | FTP | other *** search
/ HTML Examples / WP.iso / wordpress / wp-includes / js / tw-sack.js < prev    next >
Encoding:
JavaScript  |  2012-08-22  |  4.9 KB  |  194 lines

  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. }
  194.