/**
* 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)
  {
//  alert(url+'\n'+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 
//alert("*******1*********"+url);    
    this.http_request = false;
    if (window.XMLHttpRequest) 
    { // Mozilla, Safari,...
//alert("*****2*******");
      this.http_request = new XMLHttpRequest();
      if (this.http_request.overrideMimeType) 
              this.http_request.overrideMimeType('text/xml');   
    }

    else if (window.ActiveXObject) 
    { // IE
//alert("*****22*qqqq**");
      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); }
      }
    }
//alert(!this.http_request);
    if (!this.http_request) 
    {
      this.alerta('No XMLHTTP');
      return false;
    }
    // Fi creació objece AJAX  

    var crida = funcioCallBack.split(")");
//alert('2:'+crida);
    crida = crida[0].split("(");
//alert('2:'+crida);
    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);
//alert("*****24*******");          
      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.
    var params = this.getFormAsString(nameOfFormToPost);

    this.makeRequestPost(url, params, funcioCallBack);

    return true;
  }

  this.makeRequestTooltip = function (msgKey, objRef)
  {
    url='chv/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_old = 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
      returnString=returnString+"&"+escape(formElements[i].name)+"="+escape(formElements[i].value);
    }
    
    returnString = returnString.substring(1,returnString.length);
    //return the values
    return returnString; 
  }
  	
  	this.getFormAsString = function (formName)
  	{
  	  //Setup the return String
  	  returnString ="";
  	  returnString2 ="";
  	  
  	  //Get the form values
  	  formElements=document.forms[formName].elements;
  	  
  	  for ( var i=formElements.length-1; i>=0; --i )
  	  {
  	    //we escape (encode) each value
  	    //alert(formElements[i].tagName+' -- '+formElements[i].type+'**'+(formElements[i].type != "checkbox"?escape(formElements[i].value):formElements[i].checked));
  	    if (formElements[i].tagName == "INPUT") {
  	      if (formElements[i].type == "text") 
  	      {
  	      	if(BrowserDetect.browser == "Firefox")
  	      		returnString += formElements[i].name + "=" + this.escapeMozilla(formElements[i].value) + "&";
  	      	else
  	      		returnString += formElements[i].name + "=" + escape(formElements[i].value) + "&";
  	      	
  	      }
  	      if (formElements[i].type == "hidden") {
  	      	if(BrowserDetect.browser == "Firefox")
  	      		returnString += formElements[i].name + "=" + this.escapeMozilla(formElements[i].value) + "&";
  	      	else
  	      		returnString += formElements[i].name + "=" + escape(formElements[i].value) + "&";
  	      }
  	      if (formElements[i].type == "checkbox") {
  	         if (formElements[i].checked) {
  	      	   returnString += formElements[i].name + "=true&";
  	         } else {
  	      	   returnString += formElements[i].name + "=false&";
  	         }
  	      }
  	      if (formElements[i].type == "radio") {
  	         if (formElements[i].checked) {
  	      	   returnString += formElements[i].name + "=" + formElements[i].value + "&";
  	         }
  	      }
  	   }   
  	    else if (formElements[i].tagName == "SELECT") {
  	      var sel = formElements[i];
  	      returnString += sel.name + "=" + sel.options[sel.selectedIndex].value + "&";
  	   }
  	    else if (formElements[i].tagName == "TEXTAREA") {
  	  	 if(BrowserDetect.browser == "Firefox")
  	  	 {	
  	   		returnString += formElements[i].name + "=" + this.escapeMozilla(formElements[i].value) + "&";
  	  	 }
  	   	else
  	  	 	returnString += formElements[i].name + "=" + escape(formElements[i].value) + "&";
  	    }
  	    returnString2=returnString2+"&"+escape(formElements[i].name)+"="+(formElements[i].type != "checkbox"?escape(formElements[i].value):formElements[i].checked);
  	  }
  	  returnString2 = returnString2.substring(1,returnString2.length);
  	  //return the values
  	  //alert(returnString);
  	  return returnString; 
  	}
  	
  	this.escapeMozilla = function (str)
  	{
  		  str = str.replace(/%/g,"%25");
  		  return str.replace(/&/g,"%26");
  	}

}
