/**
 * Copyright 2006 Olivier Clavel
 *
 * This file is part of Site LCJ-Conseil software.
 *
 * Site LCJ-Conseil is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License,
 * or any later version.
 *
 * Site LCJ-Conseil is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with MediaNetLive portal software; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * @author Olivier Clavel <contact AT retiz DOT com>
 */
/**
 * This scripts depends on:
 * - glm-ajax.js (GodLikeMouse Ajax Framework)
 * - funclib.js (some current usage homemade functions
 */

/**
 * Called  to update password status (is it long enough)
 */
function updatePassStatus () {
   var passField = document.getElementById("newUserForm").motDePasse;
   if (passField.value.length < 6) {
     passField.style.borderColor = "#FF0000";
   } else {
     passField.style.borderColor = "#00FF00";
   }
   updatePassConfirmStatus();
}

/**
 * Called to update confirm pass status (is it present and does it match pass)
 */
function updatePassConfirmStatus () {
  var form = document.getElementById("newUserForm");
  var passField = form.motDePasse;
  var passConfirmField = form.motDePasseConfirm;

  if (passConfirmField.value.length >= 6 && passField.value == passConfirmField.value) {
    passConfirmField.style.borderColor = "#00FF00";
  } else {
    passConfirmField.style.borderColor = "#FF0000";
  }
}


/**
 * Checks the email field and see if mail exists
 */
function emailExists () {
  var form = document.getElementById("newUserForm");
  var loginForm = document.getElementById("identForm");
  if (emailCheck(form.email.value)) {
    var url = "/checkEmail?val=" + form.email.value;
    var ajax = new GLM.AJAX();    
    ajax.callPage(url, ifMailExists);
  } else {
    alert('Vous devez entrer une adresse email valide');
    return false;
  }
  return true;
}

function ifMailExists (content) {
  var form = document.getElementById("newUserForm");
  var loginForm = document.getElementById("identForm");
  if (content == 'true') {
    document.getElementById('pageMain').scrollTop = 0;
    currentMail = form.email.value;
    form.reset();
    loginForm.email.value = currentMail;
    alert ('Cette adresse existe déjà dans notre base de données, veuillez vous identifier. Si vous n\'avez jamais eu de mot de passe ou que vous l\'avez oublié, merci de vous référer aux instructions pour demander un nouveau mot de passe.');
    return false;
  } else {
    return true;
  }
}

/**
 * Function to load a new captcha image in the document
 * in case the one presented is not readable
 */
function new_freecap() {
  // loads new freeCap image
  if(document.getElementById)
    {
      var captcha = document.getElementById("captchaImg");
      // extract image name from image source (i.e. cut off ?randomness)
      thesrc = captcha.src;
      thesrc = thesrc.substring(0,thesrc.lastIndexOf(".")+4);
      // add ?(random) to prevent browser/isp caching
      captcha.src = thesrc+"?"+Math.round(Math.random()*100000);
    } else {
    alert("Désolé, impossible de charger une nouvelle image. Utilisez la fonction <rafraichir> de votre navigateur.");
  }
}


/**
 * Checks the subscription form. Takes care of checking all values
 * in the form and to check the captcha as well before it is sent.
 * Values must be checked before captcha or subsequent captchaCheck
 * in case of wrong values
 */
function checkForm() {
  
  var form = document.getElementById("newUserForm");
  
  // Check for email presence and validity
  if (form.email.value.length == 0) { 
    alert('Vous devez entrer un email');
    form.email.focus();
    return;
  } else {
    if (!emailCheck(form.email.value)) {
      alert('Vous devez entrer une adresse email valide');
      form.email.focus();
      form.email.select();
      return;
    }
  }

  // Check for password presence, length and match
  if (form.motDePasse.value.length == 0) {
    alert('Vous devez entrer un mot de passe');
    form.motDePasse.focus();
    return;
  }

  if (form.motDePasseConfirm.value.length == 0) {
    alert('Vous devez entrer une vérification pour le  mot de passe');
    form.motDePasseConfirm.focus();
    return;
  }

  if (form.motDePasse.value.length < 6) {
    alert('Votre mot de passe doit comporter 6 caractères minimum');
    return;
  }

  if (form.motDePasse.value != form.motDePasseConfirm.value) {
    alert('Les mots de passe ne correspondent pas: veuillez recommencer.');
    form.motDePasse.value ="";
    form.motDePasseConfirm.value = "";
    form.motDePasse.focus();
    return;
  }

  // Check for first name
  if (form.prenom.value.length == 0) {
    alert('Vous devez entrer un prénom');
    form.prenom.focus();
    return;
  }
    
  // Check for last name
  if (form.nom.value.length == 0) {
    alert('Vous devez entrer un nom');
    form.nom.focus();
    return;
  }

  // Check for birth date
  if (form.elements['dateNaissance[jour]'].value.length == 0 || form.elements['dateNaissance[mois]'].value.length == 0 || form.elements['dateNaissance[annee]'].value.length == 0) {
    alert('Vous devez entrer votre date de naissance');
    form.elements['dateNaissance[jour]'].focus();
    return;
  }
    
  // Check for address
  if (form.adresse.value.length == 0) {
    alert('Vous devez entrer votre adresse');
    form.adresse.focus();
    return;
  }
    
  // check for zip code
  if (form.codePostal.value.length == 0) {
    alert('Vous devez entrer votre code postal');
    form.codePostal.focus();
    return;
  } else if (!isNumeric(form.codePostal.value)) {
    alert('Vous devez entrer un code postal valide (composé uniquement de chiffres)');
    form.codePostal.focus();
    return;
  }

  if (form.ville.value.length == 0) {
    alert('Vous devez entrer votre ville');
    form.ville.focus();
    return;
  }

  if (form.telephoneDomicile.value.length == 10) {
    var validPrefix = Array('01', '02', '03', '04', '05', '08', '09');
    var prefixFound = false;
    for (i=0; i<validPrefix.length; i++) {
      var re = new RegExp('^' + validPrefix[i]);
      if (form.telephoneDomicile.value.match(re)) {
	prefixFound = true;
      }
    }
    if (!prefixFound) {
      alert('Vous devez entrer un numéro de téléphone fixe personnel valide (commençant par 01, 02, 03, 04, 05, 08 ou 09)');
      form.telephoneDomicile.focus();
      form.telephoneDomicile.select();
      return;
    }
  } else {
    alert('Vous devez entrer un numéro de téléphone fixe personnel valide (comprenant 10 chiffres et commencant par 01, 02, 03, 04, 05, 08 ou 09)');
    form.telephoneDomicile.focus();
    return;
  }
  
  
  // All values seem OK. Check the captcha
  var url = "/checkCaptcha?val=" + form.captcha.value;
  var ajax = new GLM.AJAX();    
  ajax.callPage(url, checkSuccess);
  return true;
}


/**
 * Ajax callback function: see if captcha check succeeded
 * Sends the form if true, ask again if not.
 */
function checkSuccess(content) {

  var form = document.getElementById("newUserForm");
  
  if (content == "ok") {
    form.submit();
    return true;
  } else {
    alert("Le contrôle de sécurité a échoué. Veuillez essayer à nouveau");
    new_freecap();
    form.captcha.value = "";
    form.captcha.focus();
    return false;
  }
}

/**
 * Checks the state of Maiden Name field and
 * En/Dis-ables it depending on civility dropdown
 * value
 */
function checkMaidenNameState () {
  var form = document.getElementById("newUserForm");
  var civSelect = form.civilite;
  var maidenText = form.nomJeuneFille;
  if (civSelect.value == 'Mme' && maidenText.disabled) {
    maidenText.disabled = false;
  } else if (civSelect.value != 'Mme' && !maidenText.disabled) {
    maidenText.value = '';
    maidenText.disabled = true;
  }
}
