1/* 2 * AdvancedAJAX 1.1.2 3 * (c) 2005-2006 Lukasz Lach 4 * mail: [email protected] 5 * www: http://advajax.anakin.us/ 6 * http://anakin.us/ 7 * http://creativecommons.org/licenses/LGPL/2.1/ 8 * 9 */ 10 11function advAJAX() { 12 13 var obj = new Object(); 14 15 obj.url = window.location.href; 16 obj.method = "GET"; 17 obj.parameters = new Object(); 18 obj.jsonParameters = new Object(); 19 obj.headers = new Object(); 20 obj.async = true; 21 obj.mimeType = "text/xml"; 22 obj.username = null; 23 obj.password = null; 24 obj.form = null; 25 obj.disableForm = true; 26 27 obj.unique = true; 28 obj.uniqueParameter = "_uniqid"; 29 30 obj.requestDone = false; 31 obj.queryString = ""; 32 obj.responseText = null; 33 obj.responseXML = null; 34 obj.status = null; 35 obj.statusText = null; 36 obj.aborted = false; 37 obj.timeout = 0; 38 obj.retryCount = 0; 39 obj.retryDelay = 1000; 40 obj.tag = null; 41 obj.group = null; 42 obj.progressTimerInterval = 50; 43 44 obj.xmlHttpRequest = null; 45 46 obj.onInitialization = null; 47 obj.onFinalization = null; 48 obj.onReadyStateChange = null; 49 obj.onLoading = null; 50 obj.onLoaded = null; 51 obj.onInteractive = null; 52 obj.onComplete = null; 53 obj.onProgress = null; 54 obj.onSuccess = null; 55 obj.onFatalError = null; 56 obj.onError = null; 57 obj.onTimeout = null; 58 obj.onRetryDelay = null; 59 obj.onRetry = null; 60 obj.onGroupEnter = null; 61 obj.onGroupLeave = null; 62 63 obj.createXmlHttpRequest = function() { 64 65 if (typeof XMLHttpRequest != "undefined") 66 return new XMLHttpRequest(); 67 var xhrVersion = [ "MSXML2.XMLHttp.5.0", "MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0", 68 "MSXML2.XMLHttp","Microsoft.XMLHttp" ]; 69 for (var i = 0; i < xhrVersion.length; i++) { 70 try { 71 var xhrObj = new ActiveXObject(xhrVersion[i]); 72 return xhrObj; 73 } catch (e) { } 74 } 75 obj.raiseEvent("FatalError"); 76 return null; 77 }; 78 79 obj._oldResponseLength = null; 80 obj._progressTimer = null; 81 obj._progressStarted = navigator.userAgent.indexOf('Opera') == -1; 82 obj._onProgress = function() { 83 84 if (typeof obj.onProgress == "function" && 85 typeof obj.xmlHttpRequest.getResponseHeader == "function") { 86 var contentLength = obj.xmlHttpRequest.getResponseHeader("Content-length"); 87 if (contentLength != null && contentLength != '') { 88 var responseLength = obj.xmlHttpRequest.responseText.length; 89 if (responseLength != obj._oldResponseLength) { 90 obj.raiseEvent("Progress", obj, responseLength, contentLength); 91 obj._oldResponseLength = obj.xmlHttpRequest.responseText.length; 92 } 93 } 94 } 95 if (obj._progressStarted) return; 96 obj._progressStarted = true; 97 var _obj = this; 98 this.__onProgress = function() { 99 obj._onProgress(); 100 obj._progressTimer = window.setTimeout(_obj.__onProgress, obj.progressTimerInterval); 101 } 102 _obj.__onProgress(); 103 } 104 105 obj._onInitializationHandled = false; 106 obj._initObject = function() { 107 108 if (obj.xmlHttpRequest != null) { 109 delete obj.xmlHttpRequest["onreadystatechange"]; 110 obj.xmlHttpRequest = null; 111 } 112 if ((obj.xmlHttpRequest = obj.createXmlHttpRequest()) == null) 113 return null; 114 if (typeof obj.xmlHttpRequest.overrideMimeType != "undefined") 115 obj.xmlHttpRequest.overrideMimeType(obj.mimeType); 116 obj.xmlHttpRequest.onreadystatechange = function() { 117 118 if (obj == null || obj.xmlHttpRequest == null) 119 return; 120 obj.raiseEvent("ReadyStateChange", obj, obj.xmlHttpRequest.readyState); 121 obj._onProgress(); 122 switch (obj.xmlHttpRequest.readyState) { 123 case 1: obj._onLoading(); break; 124 case 2: obj._onLoaded(); break; 125 case 3: obj._onInteractive(); break; 126 case 4: obj._onComplete(); break; 127 } 128 }; 129 obj._onLoadingHandled = 130 obj._onLoadedHandled = 131 obj._onInteractiveHandled = 132 obj._onCompleteHandled = false;
133 }; 134 135 obj._onLoading = function() { 136 137 if (obj._onLoadingHandled) 138 return; 139 if (!obj._retry && obj.group != null) { 140 if (typeof advAJAX._groupData[obj.group] == "undefined") 141 advAJAX._groupData[obj.group] = 0; 142 advAJAX._groupData[obj.group]++; 143 if (typeof obj.onGroupEnter == "function" && advAJAX._groupData[obj.group] == 1) 144 obj.onGroupEnter(obj); 145 } 146 obj.raiseEvent("Loading", obj); 147 obj._onLoadingHandled = true; 148 }; 149 obj._onLoaded = function() { 150 151 if (obj._onLoadedHandled) 152 return; 153 obj.raiseEvent("Loaded", obj); 154 obj._onLoadedHandled = true; 155 }; 156 obj._onInteractive = function() { 157 158 if (obj._onInteractiveHandled) 159 return; 160 obj.raiseEvent("Interactive", obj); 161 obj._onInteractiveHandled = true; 162 if (!obj._progressStarted) 163 obj._onProgress(); 164 }; 165 obj._onComplete = function() { 166 167 if (obj._onCompleteHandled || obj.aborted) 168 return; 169 if (obj._progressStarted) { 170 window.clearInterval(obj._progressTimer); 171 obj._progressStarted = false; 172 } 173 obj.requestDone = true; 174 with (obj.xmlHttpRequest) { 175 obj.responseText = responseText; 176 obj.responseXML = responseXML; 177 if (typeof status != "undefined") 178 obj.status = status; 179 if (typeof statusText != "undefined") 180 obj.statusText = statusText; 181 } 182 obj.raiseEvent("Complete", obj); 183 obj._onCompleteHandled = true; 184 if (obj.status == 200) 185 obj.raiseEvent("Success", obj); else 186 obj.raiseEvent("Error", obj); 187 delete obj.xmlHttpRequest['onreadystatechange']; 188 obj.xmlHttpRequest = null; 189 if (obj.disableForm) 190 obj.switchForm(true); 191 obj._groupLeave(); 192 obj.raiseEvent("Finalization", obj); 193 }; 194 195 obj._groupLeave = function() { 196 197 if (obj.group != null) { 198 advAJAX._groupData[obj.group]--; 199 if (advAJAX._groupData[obj.group] == 0) 200 obj.raiseEvent("GroupLeave", obj); 201 } 202 }; 203 204 obj._retry = false; 205 obj._retryNo = 0; 206 obj._onTimeout = function() { 207 208 if (obj == null || obj.xmlHttpRequest == null || obj._onCompleteHandled) 209 return; 210 obj.aborted = true; 211 obj.xmlHttpRequest.abort(); 212 obj.raiseEvent("Timeout", obj); 213 obj._retry = true; 214 if (obj._retryNo != obj.retryCount) { 215 obj._initObject(); 216 if (obj.retryDelay > 0) { 217 obj.raiseEvent("RetryDelay", obj); 218 startTime = new Date().getTime(); 219 while (new Date().getTime() - startTime < obj.retryDelay); 220 } 221 obj._retryNo++; 222 obj.raiseEvent("Retry", obj, obj._retryNo); 223 obj.run(); 224 } else { 225 delete obj.xmlHttpRequest["onreadystatechange"]; 226 obj.xmlHttpRequest = null; 227 if (obj.disableForm) 228 obj.switchForm(true); 229 obj._groupLeave(); 230 obj.raiseEvent("Finalization", obj); 231 } 232 }; 233 234 obj.run = function() { 235 236 obj._initObject(); 237 if (obj.xmlHttpRequest == null) 238 return false; 239 obj.aborted = false; 240 if (!obj._onInitializationHandled) { 241 obj.raiseEvent("Initialization", obj); 242 obj._onInitializationHandled = true; 243 } 244 if (obj.method == "GET" && obj.unique) 245 obj.parameters[encodeURIComponent(obj.uniqueParameter)] = 246 new Date().getTime().toString().substr(5) + Math.floor(Math.random() * 100).toString(); 247 if (!obj._retry) { 248 for (var a in obj.parameters) { 249 if (obj.queryString.length > 0) 250 obj.queryString += "&"; 251 if (typeof obj.parameters[a] != "object") 252 obj.queryString += encodeURIComponent(a) + "=" + encodeURIComponent(obj.parameters[a]); else { 253 for (var i = 0; i < obj.parameters[a].length; i++) 254 obj.queryString += encodeURIComponent(a) + "=" + encodeURIComponent(obj.parameters[a][i]) + "&"; 255 obj.queryString = obj.queryString.slice(0, -1); 256 } 257 } 258 for (var a in obj.jsonParameters) { 259 var useJson = typeof [].toJSONString == 'function'; 260 if (obj.queryString.length > 0) 261 obj.queryString += "&"; 262 obj.queryString += encodeURIComponent(a) + "="; 263 if (useJson) 264 obj.queryString += encodeURIComponent(obj.jsonParameters[a].toJSONString()); else 265 obj.queryString += encodeURIComponent(obj.jsonParameters[a]); 266 } 267 if (obj.method == "GET" && obj.queryString.length > 0) 268 obj.url += (obj.url.indexOf("?") != -1 ? "&" : "?") + obj.queryString; 269 } 270 if (obj.disableForm) 271 obj.switchForm(false); 272 try { 273 obj.xmlHttpRequest.open(obj.method, obj.url, obj.async, obj.username || '', obj.password || ''); 274 } catch (e) { 275 obj.raiseEvent("FatalError", obj, e); 276 return; 277 } 278 if (obj.timeout > 0) 279 setTimeout(obj._onTimeout, obj.timeout); 280 if (typeof obj.xmlHttpRequest.setRequestHeader != "undefined") 281 for (var a in obj.headers) 282 obj.xmlHttpRequest.setRequestHeader(encodeURIComponent(a), encodeURIComponent(obj.headers[a])); 283 if (obj.method == "POST" && typeof obj.xmlHttpRequest.setRequestHeader != "undefined") { 284 obj.xmlHttpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 285 obj.xmlHttpRequest.send(obj.queryString); 286 } else if (obj.method == "GET") 287 obj.xmlHttpRequest.send(''); 288 }; 289 290 obj.handleArguments = function(args) { 291 292 if (typeof args.form == "object" && args.form != null) { 293 obj.form = args.form; 294 obj.appendForm(); 295 } 296 for (a in args) { 297 if (typeof obj[a] == "undefined") 298 obj.parameters[a] = args[a]; else { 299 if (a != "parameters" && a != "headers") 300 obj[a] = args[a]; else 301 for (b in args[a]) 302 obj[a][b] = args[a][b]; 303 } 304 } 305 obj.method = obj.method.toUpperCase(); 306 }; 307 308 obj.switchForm = function(enable) { 309 310 if (typeof obj.form != "object" || obj.form == null) 311 return; 312 with (obj.form) 313 for (var nr = 0; nr < elements.length; nr++) 314 if (!enable) { 315 if (elements[nr]["disabled"]) 316 elements[nr]["_disabled"] = true; else 317 elements[nr]["disabled"] = "disabled"; 318 } else 319 if (typeof elements[nr]["_disabled"] == "undefined") 320 elements[nr].removeAttribute("disabled"); 321 }; 322 323 obj.appendForm = function() { 324 325 with (obj.form) { 326 obj.method = getAttribute("method").toUpperCase(); 327 obj.url = getAttribute("action"); 328 for (var nr = 0; nr < elements.length; nr++) { 329 var e = elements[nr]; 330 if (e.disabled) 331 continue; 332 switch (e.type) { 333 case "text": 334 case "password": 335 case "hidden": 336 case "textarea": 337 obj.addParameter(e.name, e.value); 338 break; 339 case "select-one": 340 if (e.selectedIndex >= 0) 341 obj.addParameter(e.name, e.options[e.selectedIndex].value); 342 break; 343 case "select-multiple": 344 for (var nr2 = 0; nr2 < e.options.length; nr2++) 345 if (e.options[nr2].selected) 346 obj.addParameter(e.name, e.options[nr2].value); 347 break; 348 case "checkbox": 349 case "radio": 350 if (e.checked) 351 obj.addParameter(e.name, e.value); 352 break; 353 } 354 } 355 } 356 }; 357 358 obj.addParameter = function(name, value) { 359 if (typeof obj.parameters[name] == "undefined") 360 obj.parameters[name] = value; else 361 if (typeof obj.parameters[name] != "object") 362 obj.parameters[name] = [ obj.parameters[name], value ]; else 363 obj.parameters[name][obj.parameters[name].length] = value; 364 }; 365 obj.delParameter = function(name) { 366 367 delete obj.parameters[name]; 368 }; 369 obj.raiseEvent = function(name) { 370 var args = []; 371 for (var i = 1; i < arguments.length; i++) 372 args.push(arguments[i]); 373 if (typeof obj["on" + name] == "function")
374 obj["on" + name].apply(null, args); 375 if (name == "FatalError") 376 obj.raiseEvent("Finalization", obj); 377 } 378 379 if (typeof advAJAX._defaultParameters != "undefined") 380 obj.handleArguments(advAJAX._defaultParameters); 381 return obj; 382} 383 384advAJAX.get = function(args) { 385 386 return advAJAX.handleRequest("GET", args); 387}; 388 389advAJAX.post = function(args) { 390 391 return advAJAX.handleRequest("POST", args); 392}; 393 394advAJAX.head = function(args) { 395 396 return advAJAX.handleRequest("HEAD", args); 397}; 398 399advAJAX.submit = function(form, args) { 400 401 if (typeof args == "undefined" || args == null) 402 return -1; 403 if (typeof form != "object" || form == null) 404 return -2; 405 var request = new advAJAX(); 406 args["form"] = form; 407 request.handleArguments(args); 408 return request.run(); 409}; 410 411advAJAX.assign = function(form, args) { 412 413 if (typeof args == "undefined" || args == null) 414 return -1; 415 if (typeof form != "object" || form == null) 416 return -2; 417 if (typeof form["onsubmit"] == "function") 418 form["_onsubmit"] = form["onsubmit"]; 419 form["advajax_args"] = args; 420 form["onsubmit"] = function() { 421 if (typeof this["_onsubmit"] != "undefined" && this["_onsubmit"]() === false) 422 return false; 423 if (advAJAX.submit(this, this["advajax_args"]) == false) 424 return true; 425 return false; 426 } 427 return true; 428}; 429 430advAJAX.download = function(targetObj, url) { 431 432 if (typeof targetObj == "string") 433 targetObj = document.getElementById(targetObj); 434 if (!targetObj) 435 return -1; 436 advAJAX.get({ 437 url: url, 438 onSuccess : function(obj) { 439 targetObj.innerHTML = obj.responseText; 440 } 441 }); 442}; 443 444advAJAX.scan = function() { 445 446 var obj = document.getElementsByTagName("a"); 447 for (var i = 0; i < obj.length;) { 448 if (obj[i].getAttribute("rel") == "advancedajax" && obj[i].getAttribute("href") !== null) { 449 var url = obj[i].getAttribute("href"); 450 var div = document.createElement("div"); 451 div.innerHTML = obj[i].innerHTML; 452 div.className = obj[i].className; 453 var parent = obj[i].parentNode; 454 parent.insertBefore(div, obj[i]); 455 parent.removeChild(obj[i]); 456 advAJAX.download(div, url); 457 } else i++; 458 } 459}; 460 461advAJAX.handleRequest = function(requestType, args) { 462 463 if (typeof args == "undefined" || args == null) 464 return -1; 465 var request = new advAJAX(); 466 window.advajax_obj = request; 467 request.method = requestType; 468 request.handleArguments(args); 469 return request.run(); 470}; 471 472advAJAX._defaultParameters = new Object(); 473advAJAX.setDefaultParameters = function(args) { 474 475 advAJAX._defaultParameters = new Object(); 476 for (a in args) 477 advAJAX._defaultParameters[a] = args[a]; 478}; 479 480advAJAX._groupData = new Object();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.