summaryrefslogtreecommitdiff
path: root/skins/common/ajax.js
diff options
context:
space:
mode:
Diffstat (limited to 'skins/common/ajax.js')
-rw-r--r--skins/common/ajax.js177
1 files changed, 177 insertions, 0 deletions
diff --git a/skins/common/ajax.js b/skins/common/ajax.js
new file mode 100644
index 00000000..90676548
--- /dev/null
+++ b/skins/common/ajax.js
@@ -0,0 +1,177 @@
+// remote scripting library
+// (c) copyright 2005 modernmethod, inc
+var sajax_debug_mode = false;
+var sajax_request_type = "GET";
+
+var started;
+var typing;
+var memory=null;
+var body=null;
+var oldbody=null;
+
+function sajax_debug(text) {
+ if (sajax_debug_mode)
+ alert("RSD: " + text)
+}
+
+
+function sajax_init_object() {
+ sajax_debug("sajax_init_object() called..")
+ var A;
+ try {
+ A=new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e) {
+ try {
+ A=new ActiveXObject("Microsoft.XMLHTTP");
+ } catch (oc) {
+ A=null;
+ }
+ }
+ if(!A && typeof XMLHttpRequest != "undefined")
+ A = new XMLHttpRequest();
+ if (!A)
+ sajax_debug("Could not create connection object.");
+ return A;
+}
+
+
+function sajax_do_call(func_name, args) {
+ var i, x, n;
+ var uri;
+ var post_data;
+ uri = wgServer + "/" + wgScriptPath + "/index.php?action=ajax";
+ if (sajax_request_type == "GET") {
+ if (uri.indexOf("?") == -1)
+ uri = uri + "?rs=" + escape(func_name);
+ else
+ uri = uri + "&rs=" + escape(func_name);
+ for (i = 0; i < args.length-1; i++)
+ uri = uri + "&rsargs[]=" + escape(args[i]);
+ //uri = uri + "&rsrnd=" + new Date().getTime();
+ post_data = null;
+ } else {
+ post_data = "rs=" + escape(func_name);
+ for (i = 0; i < args.length-1; i++)
+ post_data = post_data + "&rsargs[]=" + escape(args[i]);
+ }
+ x = sajax_init_object();
+ x.open(sajax_request_type, uri, true);
+ if (sajax_request_type == "POST") {
+ x.setRequestHeader("Method", "POST " + uri + " HTTP/1.1");
+ x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
+ }
+ x.setRequestHeader("Pragma", "cache=yes");
+ x.setRequestHeader("Cache-Control", "no-transform");
+ x.onreadystatechange = function() {
+ if (x.readyState != 4)
+ return;
+ sajax_debug("received " + x.responseText);
+ var status;
+ var data;
+ status = x.responseText.charAt(0);
+ data = x.responseText.substring(2);
+ if (status == "-")
+ alert("Error: " + data);
+ else
+ args[args.length-1](data);
+ }
+ x.send(post_data);
+ sajax_debug(func_name + " uri = " + uri + "/post = " + post_data);
+ sajax_debug(func_name + " waiting..");
+ delete x;
+}
+
+// Remove the typing barrier to allow call() to complete
+function Search_doneTyping()
+{
+ typing=false;
+}
+
+// Wait 500ms to run call()
+function Searching_Go()
+{
+ setTimeout("Searching_Call()", 500);
+}
+
+// If the user is typing wait until they are done.
+function Search_Typing() {
+ started=true;
+ typing=true;
+ window.status = "Waiting until you're done typing...";
+ setTimeout("Search_doneTyping()", 500);
+
+ // I believe these are needed by IE for when the users press return?
+ if (window.event)
+ {
+ if (event.keyCode == 13)
+ {
+ event.cancelBubble = true;
+ event.returnValue = false;
+ }
+ }
+}
+
+// Set the body div to the results
+function Searching_SetResult(result)
+{
+ //body.innerHTML = result;
+ t = document.getElementById("searchTarget");
+ if ( t == null ) {
+ oldbody=body.innerHTML;
+ body.innerHTML= '<div id="searchTargetContainer"><div id="searchTarget" ></div></div>' ;
+ t = document.getElementById("searchTarget");
+ }
+ t.innerHTML = result;
+ t.style.display='block';
+}
+
+function Searching_Hide_Results()
+{
+ t = document.getElementById("searchTarget");
+ t.style.display='none';
+ body.innerHTML = oldbody;
+}
+
+
+// This will call the php function that will eventually
+// return a results table
+function Searching_Call()
+{
+ var x;
+ Searching_Go();
+
+ //Don't proceed if user is typing
+ if (typing)
+ return;
+
+ x = document.getElementById("searchInput").value;
+
+ // Don't search again if the query is the same
+ if (x==memory)
+ return;
+
+ memory=x;
+ if (started) {
+ // Don't search for blank or < 3 chars.
+ if ((x=="") || (x.length < 3))
+ {
+ return;
+ }
+ x_wfSajaxSearch(x, Searching_SetResult);
+ }
+}
+
+function x_wfSajaxSearch() {
+ sajax_do_call( "wfSajaxSearch", x_wfSajaxSearch.arguments );
+}
+
+
+//Initialize
+function sajax_onload() {
+ x = document.getElementById( 'searchInput' );
+ x.onkeypress= function() { Search_Typing(); };
+ Searching_Go();
+ body = document.getElementById("content");
+}
+
+hookEvent("load", sajax_onload);