/*
Parametres:
   methode : Le type de requete HTTP, comme GET OU POST.
   url     : URL du programme reponse appelé sur le serveur
   datas   : donnees envoyees au programme reponse appelé sur le serveur
   asynch  : Precise si l'envoi de la requete est asynchrone ou non
   cible   : Endroit de la page ou sera insere la reponse
*/
function AjaxRequest(methode,url,datas,isAsynch)
{
    if (window.XMLHttpRequest) 
    {
        request = new XMLHttpRequest();
    }
    else if (window.ActiveXObject)
    {
        request = new ActiveXObject("Msxml2.XMLHTTP");
        if( !request )
        {
           request = new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    if(request)
    {
       request.onreadystatechange = function() { traite_reponse(request); };
       //on appelle le fichier reponse.txt dependant du type de requete POST ou GET
       if( methode == "GET" )
       {
          if(datas == 'null')
          {
             request.open("GET", url, isAsynch);
          }
          else
          {
             var p = url+"?"+datas;
             request.open("GET", p, isAsynch);
          }
          request.send(null);
       }
       else if(methode == "POST")
       {
          request.open("POST", url, isAsynch);
          request.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
          request.send(datas);
       }
    }
    else
    {
       alert("Votre navigateur ne permet pas d'utiliser toutes \n les fonctions de cette application!");
    }
}

function affiche(chaine,indice0)
{
   reponse = chaine;
   indice1 = reponse.indexOf("[",indice0)+1;
   indice2 = reponse.indexOf("|",indice1);
   div_cible = reponse.substring(indice1,indice2);
   indice3 = reponse.indexOf("]",indice2);
   effect = reponse.substring(indice2+1,indice3);
   indice1 = reponse.indexOf("{#}",indice3);
   if( div_cible == 'redirect' )
      window.location.replace(effect);
   else
   {
      if( indice1 == -1 )
      {
         if( reponse.substring(reponse.indexOf("]",indice2)+1,reponse.length).length > 0 )
            $(div_cible).innerHTML = reponse.substring(reponse.indexOf("]",indice2)+1,reponse.length);
         if( effect == 'BlindDown' )
            Effect.BlindDown(div_cible);
         if( effect == 'BlindUp' )
            Effect.BlindUp(div_cible);
         if( effect == 'Show' )
            $(div_cible).show();
         if( effect == 'Hide' )
            $(div_cible).hide();
      }
      else
      {
         if( reponse.substring(reponse.indexOf("]",indice2)+1,indice1).length > 0 )
            $(div_cible).innerHTML = reponse.substring(reponse.indexOf("]",indice2)+1,indice1);
         if( effect == 'BlindDown' )
            Effect.BlindDown(div_cible);
         if( effect == 'BlindUp' )
            Effect.BlindUp(div_cible);
         if( effect == 'Show' )
            $(div_cible).show();
         if( effect == 'Hide' )
            $(div_cible).hide();
         affiche(chaine,indice1)
      }
   }
}

function traite_reponse(request)
{
   var reponse = "";
   var div_cible = "";
   var effect = "";
   var indice1 = 0;
   var indice2 = 0;
   var indice3 = 0;
   var tempo = document.createElement('div');

   if (request.readyState==4)
   {
      $('tempo').style.display = 'none';
      if (request.status==200)
      {
         affiche(request.responseText,0);
      }
      else
      {
         alert("Un problème est survenu dans la communication entre \n votre navigateur et le programme côté serveur.");
      }
   }
   return false;
}

function getSelectValue(selectId)
{
    if(selectId.multiple == false)
    {
        if( selectId.selectedIndex > -1 )
           return selectId.options[selectId.selectedIndex].value;
        return '';
    }
    var values = new Array();
    for(var i=0; i< selectId.options.length; i++)
    {
        if(selectId.options[i].selected == true)
        {
            values[values.length] = selectId.options[i].value;
        }
    }
    return values;
}

function nbrSelectValue(selectId)
{
    var nbr=0;
    for(var i=0; i< $(selectId).options.length; i++)
    {
        if($(selectId).options[i].selected == true)
        {
           nbr++;;
        }
    }
    return nbr;
}

function datasRequest(formulaire)
{
   var datas = "";
   var nbr_elets = formulaire.elements.length;
   for(var i=0; i < nbr_elets; i++)
   {
      if( i < nbr_elets-1 )
      {
         if( formulaire.elements[i].type == 'checkbox' || formulaire.elements[i].type == 'radio')
         {
            if( formulaire.elements[i].checked )
            {
               datas += formulaire.elements[i].name+'=';
               datas += encodeURIComponent(formulaire.elements[i].value)+'&';
            }
         }
         else
         {
            if( formulaire.elements[i].type == 'select-one' || formulaire.elements[i].type == 'select-multiple' )
            {
               datas += formulaire.elements[i].name+'=';
               datas += encodeURIComponent(getSelectValue(formulaire.elements[i]))+'&';
            }
            else
            {
               datas += formulaire.elements[i].name+'=';
               datas += encodeURIComponent(formulaire.elements[i].value)+'&';
            }
         }
      }
      else
      {
         if( formulaire.elements[i].type == 'checkbox' || formulaire.elements[i].type == 'radio')
         {
            if( formulaire.elements[i].checked )
            {
               datas += formulaire.elements[i].name+'=';
               datas += encodeURIComponent(formulaire.elements[i].value);
            }
         }
         else
         {
            if( formulaire.elements[i].type == 'select-one' || formulaire.elements[i].type == 'select-multiple' )
            {
               datas += formulaire.elements[i].name+'=';
               datas += encodeURIComponent(getSelectValue(formulaire.elements[i]));
            }
            else
            {
               datas += formulaire.elements[i].name+'=';
               datas += encodeURIComponent(formulaire.elements[i].value);
            }
         }
      }
   }
   return datas;
}

function tempo(cible)
{
   var hauteur, largeur, mess;

   if($(cible).offsetHeight)
      hauteur = $(cible).offsetHeight;
   else
      hauteur = $(cible).style.height;

   if($(cible).offsetWidth)
      largeur = $(cible).offsetWidth;
   else
      largeur = $(cible).style.width;

   hauteur = hauteur.substring(0,hauteur.lastIndexOf("px"));
   largeur = largeur.substring(0,largeur.lastIndexOf("px"));

   $(cible).style.top = ((window.screen.height - hauteur) / 2) + 'px';
   $(cible).style.left = ((window.screen.width - largeur) / 2) + 'px';
   $(cible).show();
}

function form_post(leformulaire)
{
   var formulaire = $(leformulaire);
   if( formulaire.action )
   {
      tempo('tempo');
      var datas = datasRequest(formulaire);
//alert(datas);
      AjaxRequest('POST',formulaire.action,datas,true);
   }
}

function replace_html(url,cible)
{
   tempo(cible);
   AjaxRequest('POST',url,'',true,cible);
}
