//##############################################################
//
// Portable AJAX Beta v0.1
// Last Update: 4:00 AM 9/12/2005
// Author: Neo Geek
// Email: neogeek0101@gmail.com
// Website: http://blog.neo-geek.net/
//
// ##############################################################

var ajax = new Object();

// ##############################################################
//
// createRequestObject()
//
// ##############################################################

function createRequestObject() {

   if (navigator.appName == "Microsoft Internet Explorer") { return new ActiveXObject("Microsoft.XMLHTTP"); }
   else { return new XMLHttpRequest(); }

}

var http = createRequestObject();

// ##############################################################
//
// locateObject(string object)
//
// ##############################################################

function locateObject(object, value) {

   var i, children, child, child_attrib;

   var children = document.getElementsByTagName("*") || document.all;

   for (i = 0; i < children.length; i++) {

      child = children[i];
      child_attrib = child.getAttributeNode("name");

      if (child_attrib && child_attrib.value) {
         if (child_attrib.value == object && child.value == value) { object = child; break; }
      }

   }

   if (document.getElementById(object)) { object = document.getElementById(object); }

   return object;

}

// ##############################################################
//
// handleResponse()
//
// ##############################################################

function handleResponse() {

   var object, tag, type, data, i;

   var status = document.getElementById("status");
   var error = document.getElementById("error");

   if (http.readyState == 1) { status.style.visibility = "visible"; error.style.visibility = "hidden"; }
   if (http.readyState == 4 && http.status == 200) { status.style.visibility = "hidden"; }
   if (http.readyState == 4 && http.status == 404) { status.style.visibility = "hidden"; error.style.visibility = "visible"; }

   if (http.readyState == 4) {

      if (http.status == 200) {

         ajax.data = http.responseText;
         ajax.data = ajax.data.substr(1, ajax.data.length - 5);
         ajax.data = ajax.data.split("]][[");

         for (i = 0; i < ajax.data.length; i++) {

            data = ajax.data[i].split("||");

            var object = locateObject(data[0], data[1]);

            if (object.nodeName && data[1]) {

               tag = object.nodeName.toLowerCase();
               type = object.type.toLowerCase();

               if (tag == "div") { object.innerHTML = data[1]; }
               else if (tag == "input" && type == "checkbox") { if (data[1] == object.value) { object.checked = true; } }
               else if (tag == "input" && type == "radio") { if (data[1] == object.value) { object.checked = true; } }
               else if (tag == "input") { object.value = data[1]; }
               else if (tag == "textarea") { object.value = data[1]; }
               else if (tag == "select") {

                  data[1] = data[1].split(",");

                  for (j = 0; j < object.options.length; j++) {
                     for (k = 0; k < data[1].length; k++) {
                        if (object.options[j].value == data[1][k]) { object.options[j].selected = true; }
                     }
                  }

               }

            }

         }

         if (ajax.display && ajax.method == "a") { ajax.display.innerHTML += http.responseText; }
         else if (ajax.display && ajax.method == "m") { ajax.display.innerHTML = http.responseText; }

      }

   }

}

// ##############################################################
//
// sendRequest(string http_method, string http_action [,string object [,string method]])
//
// ##############################################################

function sendRequest(http_method, http_action, object, method) {

   var tag, type, i;

   object = object?object:null;
   method = method?method:"a";

   ajax.http_method = http_method;
   ajax.http_action = http_action;
   ajax.objects = new Array();
   ajax.method = method;

   ajax.objects = object.split(",");

   for (i = 0; i < ajax.objects.length; i++) {
		
      var obj_name = ajax.objects[i];
		
      while (obj_name.indexOf(" ") > -1) { obj_name = obj_name.replace(" ", ""); }

      tag = document.getElementById(obj_name).nodeName.toLowerCase();
		
      if (tag == "div") { ajax.display = document.getElementById(obj_name); }
      else if (tag == "form") { ajax.form = document.getElementById(obj_name); }

   }

   http.open(http_method, http_action);
   http.onreadystatechange = handleResponse;

   if (ajax.http_method == "post") {
      http.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
      http.send(captureFormValues(ajax.form));
   } else if (ajax.http_method == "get") {
      http.setRequestHeader("Content-Type","test/plain");
      http.send(null);
   }

   return false;

}

// ##############################################################
//
// captureFormValues(string object)
//
// ##############################################################

function captureFormValues(object) {

   var i;
   var query = "";

   for (i = 0; i < object.elements.length; i++) {

      if (object.elements[i].type == "radio") {

         if (object.elements[i].checked == true) {
            query += object.elements[i].name + "=" + object.elements[i].value + "&";
         }

      } else if (object.elements[i].type == "checkbox") {

         if (object.elements[i].checked == true) {
            query += object.elements[i].name + "=true&";
         } else {
            query += object.elements[i].name + "=false&";
         }

      } else if (object.elements[i].value) {

         query += object.elements[i].name + "=" + object.elements[i].value + "&";

      }

   }

   query = query.substr(0, query.length - 1);

   return query;

}

// ##############################################################