/**
 * ajaxBase.js
 * @author Nick Kreeger <nick@mymodernmedia.com>
 */
 
var gHttpRequest = null;
var _gMethod = null;
var _gContentType = null;
var _gTargetUrl = null;

/**
 * Setup an AJAX connection with a URL to connect to.
 * @param inUrl The URL to connect to.
 * @param inMethod The HTTP request method (GET or POST).
 * @param inContentType The content type of the request (i.e. "text/xml").
 */
function initAJAX(inUrl, inMethod, inContentType)
{
  gHttpRequest = false;
  _gMethod = inMethod;
  _gContentType = inContentType;
  _gTargetUrl = inUrl;
  
  // Moz, Safari..
  if (window.XMLHttpRequest) 
  {
    gHttpRequest = new XMLHttpRequest();
  
    if (gHttpRequest.overrideMimeType) 
  	{
      gHttpRequest.overrideMimeType("text/xml");
  	}
  } 
 
  // I.E.
  else if (window.ActiveXObject) 
  { 
    try 
    { 
      gHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } 
    catch (e)
    {
      try 
      {
        gHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
      } 
      catch (e) { }
    }
  }
  
  if (!gHttpRequest) 
  {
    alert('Giving up :( Cannot create an XMLHTTP instance');
    return false;
  }
}

/**
 * Send an AJAX request with a message and a 'onreadystatechange' function.
 * @param inMessage The message to send.
 * @param inCallbackFunction The 'onreadystatechange' callback function.
 */
function sendAjaxRequest(inMessage, inCallbackFunction)
{
  gHttpRequest.onreadystatechange = inCallbackFunction;
  gHttpRequest.open(_gMethod, _gTargetUrl, true);
  gHttpRequest.setRequestHeader('Content-Type', _gContentType);
  gHttpRequest.setRequestHeader("MessageType", "CALL");
  gHttpRequest.send(inMessage);
}

/**
 * Convert the values of a form into a request string.
 * @param fobj 
 * @param valFunc 
 */
function getFormValues(fobj, valFunc)
{
   var str = "";
   var valueArr = null;
   var val = "";
   var cmd = "";
   var curCheckboxElement = "";
   var accumulatedCheckboxValues = "=";
   
   for (var i = 0; i < fobj.elements.length; i++)
   {
     switch (fobj.elements[i].type)
     {  
       case "text":
         if (valFunc)
         { 
           //use single quotes for argument so that the value of
           //fobj.elements[i].value is treated as a string not a literal
           cmd = valFunc + "(" + 'fobj.elements[i].value' + ")";
           val = eval(cmd);
         }
         str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
         break;
         
      case "textarea":
        str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&";
        break;
         
       case "select-one":
         str += fobj.elements[i].name + "=" + fobj.elements[i].options[fobj.elements[i].selectedIndex].value + "&";
         break;
         
      case "checkbox":
        if (curCheckboxElement != fobj.elements[i].name)
        {
          if (curCheckboxElement != "")
          {
            str += curCheckboxElement + accumulatedCheckboxValues + "&";        
            accumulatedCheckboxValues = "=";
          }
          
          curCheckboxElement = fobj.elements[i].name;
        }
        
        if (fobj.elements[i].checked)
        {
          accumulatedCheckboxValues += escape(fobj.elements[i].value ) + ", ";
          //str += fobj.elements[i].name + "=" + escape(fobj.elements[i].value) + "&"; 
        }
     }
   }
      
   // Catch any hanging checkbox values
   if (accumulatedCheckboxValues != "=")
   {
     accumulatedCheckboxValues = accumulatedCheckboxValues.substring(0, accumulatedCheckboxValues.length - 2);
     str += curCheckboxElement + accumulatedCheckboxValues + "&";        
   }
   
   str = str.substr(0,(str.length - 1));
   return str;
}

function validate(aVar)
{
  dump(aVar);
}

