[44] | 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 | }
|
---|