/**
* Created on 07/03/2006
* @author Salva
*/

function AJAX ()
{
  var debug = false;
  var http_request = false;
  var xml = false;

  this.alerta = function(msg)
  {
    if (this.debug)
      alert(msg);
  }
  
  this.makeRequestXML = function  (url, funcioCallBack)
  {
    this.xml = true;
    this.makeRequest(url, funcioCallBack);
    this.xml = false;
  }
  
  this.makeRequest = function (url, funcioCallBack)
  {
    // Inici creació objece AJAX  
    this.http_request = false;
    if (window.XMLHttpRequest) 
    { // Mozilla, Safari,...
      this.http_request = new XMLHttpRequest();
      if (this.http_request.overrideMimeType) 
              this.http_request.overrideMimeType('text/xml');   
    } 
    else if (window.ActiveXObject) 
    { // IE
      var MSxmlHttp = new Array ("Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP");
      for (var i=0; i<MSxmlHttp.length; i++)
      {
        try
        {
          this.http_request = new ActiveXObject(MSxmlHttp[i]);
        } catch (e) { this.alerta("A1"+e.message); }
      }
    }

    if (!this.http_request) 
    {
      this.alerta('No XMLHTTP');
      return false;
    }
    // Fi creació objece AJAX  

    var crida = funcioCallBack.split(")");
    crida = crida[0].split("(");
    var capa = document.getElementById(crida[1]);
    var ini = capa.innerHTML;
  
    try
    {
      // Assigna una funció d'espera de resultat
      this.http_request.onreadystatechange = this.getFuncio(this.http_request, eval(crida[0]), crida[1], ini, this.xml);
//      var Qurl = "q="+url.substr(url.search("=")+1,url.length);
      this.http_request.open("GET", url, true);
//      this.http_request.open("POST", url, true);
          
      this.http_request.setRequestHeader("Cache-Control", "no-cache");
      this.http_request.setRequestHeader("Pragma", "no-cache");
      this.http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      this.http_request.setRequestHeader("Content-length", url.length);
      this.http_request.setRequestHeader("Connection", "close");
      this.http_request.send(null);//Qurl
    }
    catch(e){ this.alerta("A2"+e.message); }

    return true;
  }
  


  this.makeRequestAfegir = function (url, funcioCallBack)
  {
    // Inici creació objece AJAX  
    this.http_request = false;
    if (window.XMLHttpRequest) 
    { // Mozilla, Safari,...
      this.http_request = new XMLHttpRequest();
      if (this.http_request.overrideMimeType) 
              this.http_request.overrideMimeType('text/xml');   
    } 
    else if (window.ActiveXObject) 
    { // IE
      var MSxmlHttp = new Array ("Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP");
      for (var i=0; i<MSxmlHttp.length; i++)
      {
        try
        {
          this.http_request = new ActiveXObject(MSxmlHttp[i]);
        } catch (e) { this.alerta("A1"+e.message); }
      }
    }

    if (!this.http_request) 
    {
      this.alerta('No XMLHTTP');
      return false;
    }
    // Fi creació objece AJAX  

    var crida = funcioCallBack.split(")");
    crida = crida[0].split("(");
    var capa = document.getElementById('divNull');
    var ini = capa.innerHTML;
  
    try
    {
      // Assigna una funció d'espera de resultat
      this.http_request.onreadystatechange = this.getFuncioAfegir(this.http_request, eval(crida[0]), 'divNull', crida[1], ini, this.xml);
//      var Qurl = "q="+url.substr(url.search("=")+1,url.length);
      this.http_request.open("GET", url, true);
//      this.http_request.open("POST", url, true);
          
      this.http_request.setRequestHeader("Cache-Control", "no-cache");
      this.http_request.setRequestHeader("Pragma", "no-cache");
      this.http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      this.http_request.setRequestHeader("Content-length", url.length);
      this.http_request.setRequestHeader("Connection", "close");
      this.http_request.send(null);//Qurl
    }
    catch(e){ this.alerta("A2"+e.message); }

    return true;
  }


  this.makeRequestPost = function (url, params, funcioCallBack)
  {
    // Inici creació objece AJAX  
    this.http_request = false;
    if (window.XMLHttpRequest) 
    { // Mozilla, Safari,...
      this.http_request = new XMLHttpRequest();
      if (this.http_request.overrideMimeType) 
              this.http_request.overrideMimeType('text/xml');   
    } 
    else if (window.ActiveXObject) 
    { // IE
      var MSxmlHttp = new Array ("Msxml2.XMLHTTP.6.0", "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0", "Msxml2.XMLHTTP", "Microsoft.XMLHTTP");
      for (var i=0; i<MSxmlHttp.length; i++)
      {
        try
        {
          this.http_request = new ActiveXObject(MSxmlHttp[i]);
        } catch (e) { this.alerta("A1"+e.message); }
      }
    }
    if (!this.http_request) 
    {
      this.alerta('No XMLHTTP');
      return false;
    }
    // Fi creació objece AJAX  
    var crida = funcioCallBack.split(")");
    crida = crida[0].split("(");
    var capa = document.getElementById(crida[1]);
    var ini = capa.innerHTML;
    try
    {
      // Assigna una funció d'espera de resultat
      this.http_request.onreadystatechange = this.getFuncio(this.http_request, eval(crida[0]), crida[1], ini, this.xml);
      this.http_request.open("POST", url, true);          
      this.http_request.setRequestHeader("Cache-Control", "no-cache");
      this.http_request.setRequestHeader("Pragma", "no-cache");
      this.http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      this.http_request.setRequestHeader("Content-length", url.length);
      this.http_request.setRequestHeader("Connection", "close");
      this.http_request.send(params);//Qurl
    }
    catch(e){ this.alerta("A2"+e.message); }
    return true;
  }


  this.makeRequestForm = function (url, nameOfFormToPost, funcioCallBack)
  {
    // Agafem els parametres del formulari.
    //this.http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=ISO-8859-1');
    var params = this.getFormAsString(nameOfFormToPost);
    this.makeRequestPost(url, params, funcioCallBack);

    return true;
  }

  this.makeRequestTooltip = function (msgKey, objRef)
  {
    url='chsj/util/tooltip.jps?msg.key='+msgKey;
    this.makeRequest(url, 'ajaxResultatTooltip(tooltip, objRef)');

    return true;
  }
  
  this.getFuncio = function (req, call, obj, ini, xml)
  {
    return function ()
    {
      var capa = document.getElementById(obj);
      try
      {
        switch (req.readyState)
        {
          case 0:
          case 1:
              capa.innerHTML = "<center><img src=\"/img/load.gif\" title=\"Loading...\" /></center>";
              break;			
          case 2:
              capa.innerHTML = "<center>Loaded</center>";
              break;
          case 3:
              capa.innerHTML = "<center><img src=\"/img/load.gif\" title=\"Procesing...\" /></center>";
              break;			
          case 4:
              if (req.status == 200) 
              {
                capa.innerHTML = ini;
                if (xml) call(req.responseXML, obj);
                else call(req.responseText, obj);
               }
               else
               {
                 alert("A4:"+req.status+': '+req.responseText);
                 return false
               }
               break;
        }
      } catch(e) { /*alert("A3:"+e.message); */ }
    }
  }

  this.getFuncioAfegir = function (req, call, obj, codi, ini, xml)
  {
    return function ()
    {
      var capa = document.getElementById(obj);
      try
      {
        switch (req.readyState)
        {
          case 0:
          case 1:
              capa.innerHTML = "<center><img src=\"/img/load.gif\" title=\"Loading...\" /></center>";
              break;			
          case 2:
              capa.innerHTML = "<center>Loaded</center>";
              break;
          case 3:
              capa.innerHTML = "<center><img src=\"/img/load.gif\" title=\"Procesing...\" /></center>";
              break;			
          case 4:
              if (req.status == 200) 
              {
                capa.innerHTML = ini;
                if (xml) call(req.responseXML, obj, codi);
                else call(req.responseText, obj, codi);
               }
               else
               {
                 alert("A4:"+req.status+': '+req.responseText);
                 return false
               }
               break;
        }
      } catch(e) { /*alert("A3:"+e.message); */ }
    }
  }
////////////////////////////////////////////////////////////////	
  this.fillGSelect = function (resposta, obj)
  {
    var sel = document.getElementById(obj);
    var i;
    for (i = sel.length - 1; i>=0; i--)
    sel.remove(i);

    var texts = resposta.split('#');  	
    for (val=0;val<texts.length;val++)
    {
      var OptNew = document.createElement('option');
      var tmp = texts[val].split("@");  
      OptNew.text = tmp[0];
      OptNew.value = tmp[1];
      
      try 
      {
        sel.add(OptNew, null); //standards
      }
      catch(ex) { sel.add(OptNew); /* IE */ }
    }
  }

  this.toolTip = function(msg, posicio)
  {
    var capa = document.getElementById('tooltip');
    var content = '<div id="tooltipObj">'+
                    '<div id="tooltip_arrow" class="tooltip_arrow"></div>'+
                      '<div id="tooltip_content" class="tooltip_content">'+msg+
                      '</div>'+
                    '</div>';
//    var content = "<center>"+msg+"</center>";
//    content += '<center><form name="f" method="post" action="">';
//    content += '<input type="button" name="s" value=" Aceptar " onclick="document.getElementById(\''+obj+'\').style.display = \'none\';"/></form></center>';

    var x = (posicio[0] + 30);
    var y = posicio[1];
    capa.innerHTML = content;
    capa.style.left = x + 'px';
    capa.style.top = y + 'px';
    capa.style.display = "block";
  }

this.getFormAsString = function (formName)
{

  //Setup the return String
  returnString ="";
  //Get the form values
  formElements=document.forms[formName].elements;
  
  //loop through the array , building up the url
  //in the form /strutsaction.do&name=value
  
  for ( var i=formElements.length-1; i>=0; --i )
  {
    //we escape (encode) each value
    //alert(formElements[i].name+"="+formElements[i].value);
    //alert("escape("+formElements[i].name+")="+escape(formElements[i].value));
    returnString=returnString+"&"+escape(formElements[i].name)+"="+escape(formElements[i].value);
  }
  //alert("parametres: "+returnString) ;
  returnString = returnString.substring(1,returnString.length);
  //return the values
  return returnString; 
}
}