/********************* AJAX *********************\
 Using my old ALPACA calling functions, and the 
  core AJAX bits from quirksmode to create a nice
  and easy AJAX set, AJAX.call is where it is at!
\************************************************/

AJAX = {};

AJAX.sendRequest = function (el_ref, url, callback, postData) {
	var MenuBar1 = new Spry.Widget.MenuBar("MAINNAV");
  var req = AJAX.createXMLHTTPObject ();
  if (!req) return;
  var method = (postData) ? "POST" : "GET";
  req.open (method, url, true);
  req.setRequestHeader ('User-Agent', 'XMLHTTP/1.0');
  if (postData)
    req.setRequestHeader ('Content-type', 'application/x-www-form-urlencoded');
  req.onreadystatechange = function () {
    if (req.readyState != 4) return;
    if (req.status != 200 && req.status != 304) {
      // alert('HTTP error ' + req.status);
      return;
    }
    callback (req, el_ref);
  }
  if (req.readyState == 4) return;
  req.send (postData);
}

AJAX.XMLHttpFactories = [
  function () {return new XMLHttpRequest()},
  function () {return new ActiveXObject("Msxml2.XMLHTTP")},
  function () {return new ActiveXObject("Msxml3.XMLHTTP")},
  function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

AJAX.createXMLHTTPObject = function () {
  var xmlhttp = false;
  for (var i=0;i<AJAX.XMLHttpFactories.length;i++) {
    try {
      xmlhttp = AJAX.XMLHttpFactories[i]();
    }
    catch (e) {
      continue;
    }
    break;
  }
  return xmlhttp;
}

// <form> <a> <input> <textarea> <select> supported...
AJAX.call = function (el_ref, callback, override_url) {
  url      = location.href;
  postData = "";
  // Switch the type:
  switch (el_ref.nodeName.toLowerCase ()) {
    case "form":
      url = el_ref.action;
      for (i=0; i<el_ref.elements.length; i++) {
        postData += AJAX.get_value (el_ref.elements[i]);
      }
      break;
    case "a":
      tmp      = el_ref.href.split ("?");
      url      = tmp.shift();
      postData = tmp.join ("?");
      break;
    case "input":
    case "textarea":
    case "select":
      postData = AJAX.get_value (el_ref);
      break;
  }
  // Override the url?
  url = override_url || url;
  // Make the request:
  AJAX.sendRequest (el_ref, url, callback, postData);
  // Return false so the form isnt submitted
  return false;
};

// Returns the value of a form element:
AJAX.get_value = function (form_element) {
  var myVal = '';
  // A few form types are different, and require special parsing
  switch (form_element.type) {
    case 'select-multiple':
      var arr = new Array ();
      for (var x=0; x < form_element.length; x++) {
        if (form_element[x].selected == true) {
          arr[arr.length] = form_element[x].value;
        }
      }
      myVal = arr.join ();
      break;
    case 'radio':
      if (form_element.checked == true) {
        myVal = form_element.value;
      }
      break;
    case 'checkbox':
      myVal = form_element.checked;
      break;
    case 'undefined':
      break;
    default:
      myVal = form_element.value;
      break;
  }
  // If we have a value return it
  if (myVal) {
    // Good urlencoding:
    return "&" + form_element.name + "=" + escape (myVal).replace (/\+/g, '%2B').replace (/\"/g,'%22').replace (/\'/g, '%27');
  } else {
    return '';
  }
};

// Loads an URL into the named DOM element
AJAX.load_url = function (el_id, url) {
  var el_ref = document.getElementById (el_id);
  AJAX.sendRequest (el_ref, url, AJAX.on_load_url);
};

// Used as a callback from AJAX.load_url
AJAX.on_load_url = function (req, el_ref) {
  el_ref.innerHTML = req.responseText;
};
