/**
 * Fichier fonction principal
 * Version 1.3
 * Derniere maj : jc
 * Date mise à jour : 08/02/2010
 */

/*
 * Variables du formulaires
 */

/* variable pour le catchpa javascript */
var a = Math.ceil(Math.random() * 10);
var b = Math.ceil(Math.random() * 10);
var c = a + b;

/* image pour faire patienter pendant le chargement ajax */
var img_loading_ajax = "_view/js/lightbox/img/lightbox-ico-loading.gif";

/**
 * Declaration de l'objet Ajax
 * @return
 */
function getAjax()
{
  // initialise l'utilisation de l'ajax
  var Ajax = null;
  if(window.XMLHttpRequest) // Firefox et autres
  Ajax = new XMLHttpRequest();
  else if(window.ActiveXObject){ // Internet Explorer
  try {Ajax = new ActiveXObject("Msxml2.XMLHTTP");}
  catch (e) {Ajax = new ActiveXObject("Microsoft.XMLHTTP");}
  } else { // XMLHttpRequest non supporté par le navigateur
  alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
  Ajax = false;
  } return Ajax;
}


/**
 * Load ajax avec requete
 * @param div
 * @param page
 * @param vars
 * @return
 */
function loadAjax(div,page,vars)
{
  var Ajax = getAjax();
 // On définit ce qu'on va faire quand on aura la réponse
 Ajax.onreadystatechange = function(){
  // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
  if(Ajax.readyState == 4 && Ajax.status == 200){
   retour = Ajax.responseText;
   // On met a jour la div transmise
   if(page!=''){
     document.getElementById(div).innerHTML = retour;
   }else{document.getElementById(div).innerHTML = '';}
  } else {
   var chargement = '<br><font class=bleu12>chargement en cours...</font><br>&nbsp;';
   document.getElementById(div).innerHTML = chargement;
  }
 }
 // poste la page
 Ajax.open("POST",page,true);
 // ne pas oublier ça pour le post
 Ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
 // arguments
 //var menu = document.getElementById('journee');
 //var journee = menu.options[menu.selectedIndex].value;
 Ajax.send(vars);
}
/**
 * chargement page dans div ajax sans requete
 * @param page : id de la page a charger
 * @param div : id de la div
 * @return
 */
function chargement_page(page,div)
{
  var xhr = getAjax();
    xhr.onreadystatechange  = function()
    {
    if(document.getElementById(div)){document.getElementById(div).innerHTML="chargement ... ";}
         if(xhr.readyState  == 4)
         {
              if(xhr.status  == 200){document.getElementById(div).innerHTML = xhr.responseText; }
              else { document.getElementById(div).innerHTML = xhr.status; }
         }
    };
   xhr.open("GET",page,  true);
   xhr.send(null);
}

/*
 *  - -  VOILAGE / AFFICHAGE  - -
 */


/**
 * fonction d'affichage d'un objet avec display
 * @param div
 */
function affiche(div)
{
  document.getElementById(div).style.display='block';
}
/**
 * fonction d'affichage d'une div avec display et inline
 * @param div
 */
function affiche2(div)
{
  document.getElementById(div).style.display='inline';
}
/**
 * Fonction d'affichage avec visibility
 * @param div
 */
function affichev(div)
{
  document.getElementById(div).style.visibility='visible';
}
/**
 * Fonction pour cacher une div avec display
 * @param div
 * @return
 */
function cache(div)
{
  document.getElementById(div).style.display='none';
}
/**
 * Fonction pour cacher une div avec visibility
 * @param div
 * @return
 */
function cachev(div)
{
  document.getElementById(div).style.visibility='hidden';
}
/**
 * Fonction de voilage/affichage d'une div avec display
 * @param div
 * @return
 */
function alterne(div)
{
  if(document.getElementById(div).style.display=='none'){document.getElementById(div).style.display='block';}
  else{document.getElementById(div).style.display='none';}
}
/**
 * Fonction d'affichage d'un objet parent avec display
 * @param div
 * @return
 */
function p_affiche(div) {
 parent.document.getElementById(div).style.display='block';
}
/**
 * Fonction de voilage d'une objet parent avec display
 * @param div
 * @return
 */
function p_cache(div)
{
  parent.document.getElementById(div).style.display='none';
}

//////////////////////////////////// CONTROLE CHAMP STANDARD ////////////////////////////
// [6]
// fonction de controle d'un champ unique
//
// pré-requis : le nom des champs spéciaux doivent correspondre au tests effectués :
// email (contrôle de cohérence),cp (5 chiffres),telephone (10 chiffres),login (6 char min),pass (6 char min)
// par défaut, on contrôle juste si le champ est vide
//
// affichage du code erreur : une div doit être présente à côté de chaque champ avec un id comme 'ctl_email' par ex.
//
// ex d'utilisation : <input type="text" name="nom" id="nom" style="width:220px;" onBlur="controle_champ('inscription',this.name);"><span id="ctl_nom" class="rouge12"></span>
//

// préliminaire : fonction DrawBotBoot pour captcha de calcul

/**
 * Fonction de calcul pour le catchpa
 */
function DrawBotBoot()
{
  document.write(""+ a + " + " + b +" ? ");
}

/**
 * Fonction de controle des champs, necessite l'utislisation du fichier : controle.js
 * @param form
 * @param champ
 * @return
 */
function controle_champ(form,champ){
 var test=document.forms[form].elements[champ].value;
 var span= 'ctl_'+champ;
 var valid=true;
 var message="";
 switch(champ) {
  case 'captcha':
   if(test=='' || test != c){valid=false;message='code non valide'; }
  break;
  case 'email':
   // test de l'email
   var atom = "[!#-'*+\\-\\/-9=?A-Z^-~]+";
   var regex_adresse = new RegExp("^"+atom+"(\\."+atom+")*@"+atom+"(\\."+atom+")*\\.[a-zA-Z]{2,4}$");
   if(test=='' || test.search(regex_adresse)!=0 || test.length>150){valid=false;message='email non valide';}
   // else { valid = check_email(test,span); alert(valid);} //-> pas beoin de vérification en base
  break;
  case 'email1':
   // test de l'email
   var atom = "[!#-'*+\\-\\/-9=?A-Z^-~]+";
   var regex_adresse = new RegExp("^"+atom+"(\\."+atom+")*@"+atom+"(\\."+atom+")*\\.[a-zA-Z]{2,4}$");
   if(test=='' || test.search(regex_adresse)!=0 || test.length>150){valid=false;message='email non valide';}
   //else {check_email(test,span);} -> pas beoin de vérification en base
  break;
  case 'email2':
   // test de l'email
   var atom = "[!#-'*+\\-\\/-9=?A-Z^-~]+";
   var regex_adresse = new RegExp("^"+atom+"(\\."+atom+")*@"+atom+"(\\."+atom+")*\\.[a-zA-Z]{2,4}$");
   if(test=='' || test.search(regex_adresse)!=0 || test.length>150){valid=false;message='email non valide';}
   //else {check_email(test,span);} -> pas beoin de vérification en base
  break;
  case 'cp':
   if(isNaN(test) || test.length!=5){valid=false;message='code-postal non valide';}
  break;
  case 'telephone':
   if(isNaN(test) || test.length!=10){valid=false;message='t&eacute;l&eacute;phone non valide';}
  break;
  case 'login':
   if(test.length<5){valid=false;message='login trop court';}
   //else {check_login(test,span);} -> pas beoin de vérification en base
  break;
  case 'pass':
   if(typeof(document.forms[form].elements['log'])!="undefined"){
     var login=document.forms[form].elements['log'].value;
     valid=false;message='identique au login';
   }
   if(test.length<6){
     valid=false;message='mot de passe trop court';
     // special schuller
     affiche('passcomments');
   } else{ cache('passcomments');
     }
  break;
  case 'pass2':
     if(typeof(document.forms[form].elements['pass'])!="undefined"){
      var pass=document.forms[form].elements['pass'].value;
      //alert(test.value);
      if(pass != test)
      {
        valid=false;message='mot de passe different !';
         affiche('pass2comments');
      }
      else
      {
       cache('pass2comments');
      }
     }
    break;
  default:
   if(document.forms[form].elements[champ].type == 'select-one'){
     var champ_temp = document.forms[form].elements[champ];
     if(champ_temp.options[champ_temp.selectedIndex].value == ""){valid=false; message='champ obligatoire';}
   } else if (document.forms[form].elements[champ].length>1){
     var champ_temp = document.forms[form].elements[champ];
     var validTemp = false;
     for(var j=0; j<champ_temp.length;j++){
       if((champ_temp[j].type == "radio" || champ_temp[j].type  == "checkbox") && champ_temp[j].checked == true){validTemp=true;}
     }
     if(validTemp == false){valid=false; message='champ obligatoire';}
   } else if (test == "" && document.forms[form].elements[champ].type != "radio" && document.forms[form].elements[champ].type != "checkbox"){
     valid=false;message='champ obligatoire';
   } else  if((document.forms[form].elements[champ].type == "radio" || document.forms[form].elements[champ].type  == "checkbox") && document.forms[form].elements[champ].checked == false){
       valid=false;message='champ obligatoire';
   }
  break;
 }
 if(valid==false){
   if ($('#'+span).hasClass('replace'))
   {
    document.getElementById(span).innerHTML='&nbsp;&nbsp;'+message;
   }

  if(document.getElementById(span).className.indexOf('alerte')==-1){document.getElementById(span).className+=" alerte";}
 }
 else{
  //document.getElementById(span).innerHTML='';
  document.getElementById(span).className=document.getElementById(span).className.replace('alerte','');
 }
 return valid;
}


/**
 * récupération en JS des éléments d'un formulaire puis transmission ajax à page pour mise à jour de div
 * attention : récupère seulement les input, pas les textarea ni les select...
 * @param formname
 * @param page
 * @param div : id de la div
 * @return
 */
function form_data(formname,page,div){
  var form = document.forms[formname];
  var data = "";
  // on récupère les input du formulaire
  var inputs = document.getElementsByTagName("input");
  // on les traite pour préparer la requete ajax
  for (var i = 0; i < inputs.length; i++){

    if(inputs[i].type == "checkbox"){
      var checkbox = form.elements[inputs[i].name];
      var datac = "";
      if(checkbox.length>1){
        for(var j = 0;j<checkbox.length;j++){
          alert(checkbox[j].checked);
          if(checkbox[j].checked == true){
            if (datac != ""){
              datac += "|";
            }
            datac += checkbox[j].value;
            alert(checkbox[j].value);
          }
        }
        if (data != ""){
          data += "&";
        }
        data += inputs[i].name + "=" + datac;
        i = i+(checkbox.length - 1);
      } else {
        if(checkbox.checked == true){
          if (datac != ""){
            datac += "|";
          }
          datac += checkbox.value;
          alert(checkbox.value);
        }
        if (data != ""){
          data += "&";
        }
        data += inputs[i].name + "=" + datac;
        i = i+1;
      }
    } else if(inputs[i].type == "radio"){
      if(inputs[i].checked == true){
        if (data != ""){
          data += "&";
        }
        data += inputs[i].name + "=" + inputs[i].value;
      }
    } else {
      if (data != ""){
        data += "&";
      }
      data += inputs[i].name + "=" + inputs[i].value;
    }
  }
  alert(data);
  // transmission ajax
  var Ajax = getAjax();
  // On définit ce qu'on va faire quand on aura la réponse
  Ajax.onreadystatechange = function(){
    // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    if(Ajax.readyState == 4 && Ajax.status == 200){
      retour = Ajax.responseText;
      // On met a jour la div transmise
      if(page!=''){
        // on remplace
        document.getElementById(div).innerHTML = retour;
      }else{document.getElementById(div).innerHTML = '';}
    } else {
      var chargement = '<span class=bleu12>chargement en cours...</span>';
      document.getElementById(div).innerHTML = chargement;
    }
  }
  // poste la page
  Ajax.open("POST",page,true);
  // ne pas oublier ça pour le post
  Ajax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  // arguments
  Ajax.send(data);
}
/**
 * Fonction qui permet de posté un formulaire en ajax, la reponse est réaffiché dans la page ajax ou etait le form
 * Fonctionnement avec checkbox a revoir
 * @param page : page de destination ou est poste le form
 * @param zone : id de la div ou objet dans lequel est le form
 * @param nomForm : nom du formulaire
 * @return
 */
function post_form(page,zone,nomForm)
{
  var xhr = getAjax();
    xhr.onreadystatechange  = function()
    {
    document.getElementById(zone).innerHTML="<br /><center><img src='"+img_loading_ajax+"' boder=0><center><br />";
        if(xhr.readyState  == 4)
        {
      if(xhr.status  == 200)
      {
        document.getElementById(zone).innerHTML = xhr.responseText;
            }
      else
      {
        document.getElementById(zone).innerHTML = "Page: " + page + xhr.status;
      }
    }
    };
  var sendTitre='';
  for(i=0 ; i < document.forms[nomForm].length ; i++)
  {
    if(i != 0){sendTitre += "&";}
    if(document.forms[nomForm].elements[i].type == "radio")
    {
      if(document.forms[nomForm].elements[i].checked == true)
      {
        sendTitre += document.forms[nomForm].elements[i].name + "=" + encodeURIComponent(document.forms[nomForm].elements[i].value);
      }
    }
    else
    {
      sendTitre += document.forms[nomForm].elements[i].name+"="+ encodeURIComponent(document.forms[nomForm].elements[i].value);
    }
  }
  xhr.open("POST",page,  true);
  xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  xhr.send(sendTitre);
}

/**
 * Effets Jquery
 */
/**
 * Fonction permettant de slider une div (monter / descendre) exemple pour menu
 */
function Slide(div)
{
  if( $('#'+div).css("display") == "none")
  {
    $('#'+div).slideDown("fast");
  }
  else
  {
    $('#'+div).slideUp("fast");
  }
}







