bsw/jbe@19: 
bsw/jbe@19: partialload_queue = [];
bsw/jbe@19: partialload_queueRPos = 0;
bsw/jbe@19: partialload_queueWPos = 0;
bsw/jbe@19: 
bsw/jbe@19: function partialload_getFormKeyValuePairs(form) {
bsw/jbe@19:   var result = {};
bsw/jbe@19:   for (var i=0; i
= 0) {
bsw/jbe@19:       if (url.search(/&$/) >= 0) {
bsw/jbe@19:         url = url + params;
bsw/jbe@19:       } else {
bsw/jbe@19:         url = url + "&" + params;
bsw/jbe@19:       }
bsw/jbe@19:     } else {
bsw/jbe@19:       url = url + "?" + params;
bsw/jbe@19:     }
bsw/jbe@19:   }
bsw/jbe@19:   return url;
bsw/jbe@19: }
bsw/jbe@19: 
bsw/jbe@19: function partialload_mergeEncodedFormData(data1, data2) {
bsw/jbe@19:   if (data2 == null || data2 == "") return data1;
bsw/jbe@19:   if (data1 == null || data1 == "") return data2;
bsw/jbe@19:   return data1 + "&" + data2;
bsw/jbe@19: }
bsw/jbe@19: 
bsw/jbe@19: function partialload_startNextRequest() {
bsw/jbe@19:   var entry = partialload_queue[partialload_queueRPos++];
bsw/jbe@19:   var req = new XMLHttpRequest();
bsw/jbe@19:   req.open(entry.method, entry.url, true);
bsw/jbe@19:   req.onreadystatechange = function() {
bsw/jbe@19:     if (req.readyState == 4) {
bsw/jbe@19:       if (req.status == 200) {
bsw/jbe@19:         if (entry.successHandler != null) entry.successHandler(req.responseText);
bsw/jbe@19:       } else {
bsw/jbe@19:         if (entry.failureHandler != null) entry.failureHandler();
bsw/jbe@19:       }
bsw/jbe@19:       if (partialload_queue[partialload_queueRPos]) {
bsw/jbe@19:         partialload_startNextRequest();
bsw/jbe@19:       } else {
bsw/jbe@19:         partialload_queue = [];
bsw/jbe@19:         partialload_queueRPos = 0;
bsw/jbe@19:         partialload_queueWPos = 0;
bsw/jbe@19:       }
bsw/jbe@19:     }
bsw/jbe@19:   }
bsw/jbe@19:   if (entry.data) {
bsw/jbe@19:     req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
bsw/jbe@19:   }
bsw/jbe@19:   req.send(entry.data);
bsw/jbe@19: }
bsw/jbe@19: 
bsw/jbe@19: function queuedHttpRequest(
bsw/jbe@19:   url_or_form,
bsw/jbe@19:   urlParams,
bsw/jbe@19:   postParams,
bsw/jbe@19:   successHandler,
bsw/jbe@19:   failureHandler
bsw/jbe@19: ) {
bsw/jbe@19:   var method;
bsw/jbe@19:   var data = null;
bsw/jbe@19:   if (typeof(postParams) == "string") {
bsw/jbe@19:     data = postParams;
bsw/jbe@19:   } else if (postParams != null) {
bsw/jbe@19:     data = partialload_encodeFormData(postParams);
bsw/jbe@19:   }
bsw/jbe@19:   var url;
bsw/jbe@19:   if (typeof(url_or_form) == "object") {
bsw/jbe@19:     // form element given
bsw/jbe@19:     var form = url_or_form;
bsw/jbe@19:     url = partialload_addFormDataToUrl(form.action, urlParams);
bsw/jbe@19:     var dataFromForm = partialload_encodeFormData(
bsw/jbe@19:       partialload_getFormKeyValuePairs(form)
bsw/jbe@19:     );
bsw/jbe@19:     if (form.method != null && form.method.search(/^POST$/i) >= 0) {
bsw/jbe@19:       method = "POST";
bsw/jbe@19:       data = partialload_mergeEncodedFormData(data, dataFromForm);
bsw/jbe@19:     } else {
bsw/jbe@19:       method = (postParams == NULL) ? "GET" : "POST";
bsw/jbe@19:       url = partialload_addFormDataToUrl(url, dataFromForm);
bsw/jbe@19:     }
bsw/jbe@19:   } else {
bsw/jbe@19:     // URL given
bsw/jbe@19:     url = partialload_addFormDataToUrl(url_or_form, urlParams);
bsw/jbe@19:     if (postParams == null) {
bsw/jbe@19:       method = "GET";
bsw/jbe@19:     } else {
bsw/jbe@19:       method = "POST";
bsw/jbe@19:       if (typeof(postParams) == "string") {
bsw/jbe@19: 	data = postParams;
bsw/jbe@19:       } else {
bsw/jbe@19: 	data = partialload_encodeFormData(postParams);
bsw/jbe@19:       }
bsw/jbe@19:     }
bsw/jbe@19:   }
bsw/jbe@19:   partialload_queue[partialload_queueWPos++] = {
bsw/jbe@19:     method:         method,
bsw/jbe@19:     url:            url,
bsw/jbe@19:     data:           data,
bsw/jbe@19:     successHandler: successHandler,
bsw/jbe@19:     failureHandler: failureHandler
bsw/jbe@19:   };
bsw/jbe@19:   if (partialload_queueRPos == 0) {
bsw/jbe@19:     partialload_startNextRequest();
bsw/jbe@19:   }
bsw/jbe@19: }
bsw/jbe@19: 
bsw/jbe@19: function setHtmlContent(node, htmlWithScripts) {
bsw/jbe@19:   var uniquePrefix = "placeholder" + Math.floor(Math.random()*10e16) + "_";
bsw/jbe@19:   var i = 0;
bsw/jbe@19:   var scripts = [];
bsw/jbe@19:   var htmlWithPlaceholders = "";
bsw/jbe@19:   // NOTE: This function can not handle CDATA blocks at random positions.
bsw/jbe@19:   htmlWithPlaceholders = htmlWithScripts.replace(
bsw/jbe@19:     /