/*
 *  Classe MAHSAjax ---->TODO COMMENT<-----
 */

/* 
 * Questa classe permette TODO
 *
 * @author Antonio Bencivenga <a.bencivenga@mahs.it>, Marco Giammarini <m.giammarini@mahs.it>
 * @version 0.1.0
 * @copyright 2009-2010 - MAHS di Antonio Bencivenga - www.mahs.it  
 * @package mahsJS
 */

var MAHSAjax = 
{
  /*
   * Metodo TODO
   *
   * @param parameters Stringa contenente la lista dei parametri estratti dal form
   */
  ajaxConnection: function(ajaxURL, ajaxSuccess, ajaxUnsuccess, reqType, reqParameters)
  {
    var req = null;

    if (typeof XMLHttpRequest != "undefined")
      req = new XMLHttpRequest();

    if (!req && typeof ActiveXObject != "undefined") 
    {
      try
      {
        req=new ActiveXObject("Msxml2.XMLHTTP");
      }
      catch (e1)
      {
        try
        {
          req=new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch (e2)
        {
          try
          {
            req=new ActiveXObject("Msxml2.XMLHTTP.4.0");
          }
          catch (e3)
          {
            req=null;
          }
        }
      }
    }

    if(!req && window.createRequest)
      req = window.createRequest();

    if (!req)
      ajaxUnsuccess("Il browser non supporta AJAX");

    if (req != null)
    {
      MAHSAjax._timer = setTimeout(function()
      {
        req.abort();
        ajaxUnsuccess("Time Out");
      }, 10000);

      req.open("POST", ajaxURL, true);
      req.setRequestHeader("content-type", "application/x-www-form-urlencoded");
      req.setRequestHeader("Content-length", reqParameters.length);
      req.setRequestHeader("Connection", "close");
      req.onreadystatechange = function()
      {
        clearTimeout(MAHSAjax._timer);

        if (req.readyState == 4)
        {
          if (req.status == 200 || req.status == 304)
          {
            ajaxSuccess(req.responseXML, reqType, reqParameters);
          }
          else
          {
            ajaxUnsuccess("The server was unable to be contacted.");
          }
        }
      };
      req.send(reqParameters);
    }
  },
  
  xmlLength: function(xml,node)
  {
    var xmlNodes = xml.getElementsByTagName(node);
    return xmlNodes.length;  
  },

  xmlValue: function(xml,node,number)
  {
    if(number == undefined)
      number = 0;
    
    var xmlNodes = xml.getElementsByTagName(node);
    if(xmlNodes.length > 0)
    {
      var xmlTextNode = xmlNodes[number].firstChild;
      if(xmlTextNode != null)
      {
        return xmlTextNode.nodeValue;
      }
      else
      {
        return "";
      }
    }
    else
    {
      return "";
    }
  },

  getParam: function(key, parameters)
  {
    var pattern = new RegExp("(&|/|\\b)" + key + "=[a-zA-Z0-9._%-]+");
    var results = parameters.match(pattern);
    
    var result = results[0];
    if((result.charAt(0) == '&') || (result.charAt(0) == '/'))
    {
      return result.substring(key.length + 2);
    }
    else
    {
      return result.substring(key.length + 1);
    }
  }
};

/* TODO
 *
 *
 */
var MAHSAjaxPause = function(ajaxURL, ajaxSuccess, ajaxUnsuccess, reqType, reqParameters)
{
  this.ajaxURL = ajaxURL;
  this.ajaxSuccess = ajaxSuccess;
  this.ajaxUnsuccess = ajaxUnsuccess;
  this.reqType = reqType;
  this.reqParameters = reqParameters;

  this.launch = function()
  {
    var ajaxpause = this;

    return function()
    {
      MAHSAjax.ajaxConnection(ajaxpause.ajaxURL, 
                              ajaxpause.ajaxSuccess, 
                              ajaxpause.ajaxUnsuccess, 
                              ajaxpause.reqType, 
                              ajaxpause.reqParameters);
    };
  };
};

