var vPrenom = false;
var vNom = false;
var vCourriel = false;
var vCourrielConfirm = false;
var vPhone = false;
var vPhone2 = false;
var vAddress = false;
var vCity = false;
var vProvince = false;
var vPC = false;

var vNIV = false;
var vSerial = false;
var vMake = false;
var vModel = false;
var vYear = false;
var vKm = false;
var vPlate = false; // note HF: important: on ne peut pas mettre un champ # permis et # plaque dans le même formulaire (ils ont le même nom!)
var vColor = false;
var vParts = false;
var vCaptcha = false;

var vAppoint = false;

var formSubmit = true; // variable pour empecher les clicks abusifs sous IE

var fieldstyle = '';

/*if(!document.getElementById){
  if(document.all){
    document.getElementById=function(){
if(typeof document.all[arguments[0]]!="undefined"){return document.all[arguments[0]]}else{return null}
    }
  }else if(document.layers){
    document.getElementById=function(){
if(typeof document[arguments[0]]!="undefined"){return document[arguments[0]]}else{return null}
    }
  }
}*/

if(window.RegExp){
  var regexAlpha = /^[A-Za-zÀàÂâÉéÈèÊêËëÎîÏïÔôÖöÙùÛûÇç \-\'\.]+$/;
  var regexNum = /^[0-9]+$/;
  var regexAlphaNum = /^[0-9A-Za-zÀàÂâÉéÈèÊêËëÎîÏïÔôÖöÙùÛûÇç \-\'\.]+$/;
  //var regexVille = /^[A-Za-zÀàÂâÉéÈèÊêËëÎîÏïÔôÖöÙùÛûÇç \-\.]+$/;
  var regexAddress = /^[0-9]+(\,)? [0-9A-Za-zÀàÂâÉéÈèÊêËëÎîÏïÔôÖöÙùÛûÇç \-\.\,\']+$/;
  var regexPC = /^[A-Za-z][0-9][A-Za-z]( )?[0-9][A-Za-z][0-9]$/;
  var regexPhone = /^[0-9]{10}$/;
  var regexEmailNo = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
  var regexEmailYes = /^.+\@(\[?)[A-Za-z0-9\-\.]+\.([A-Za-z]{2,4}|[0-9]{1,3})(\]?)$/;
  var regexVIN = /^[0-9A-Za-z]{17}$/;
  var regexYear = /^[1-2][0-9]{3}$/;
  var regexKM = /^[0-9 \,\.]+$/;
  var regexDate = /^[0-9]{4}\/((0[1-9])|(1[0-2]))\/((0[1-9])|((1|2)[0-9])|(3(0|1)))$/;
  /*var regexHour = /^(((0|1)[0-9])|(2[0-3]))$/;*/
  var regexMoney = /^[0-9\.\,]+$/;
  var regexLicence = /^[A-Za-z][0-9]{4}-[0-9]{6}-[0-9]{2}$/;
  var regexPlate = /^[A-Za-z0-9 -]{4,8}$/;
  
  var regexNotEmpty = /^.+$/;
  var regexOnlySpace = /^ +$/;
}

var properFormId = '';

function findFormId(){
  for(var f = 0; f < document.forms.length; f++){
    if(document.forms[f].className == 'form2007'){
      properFormId = document.forms[f];
    }
  }
}

function validateField(field, regex){
  if(field == 'city'){
    field = document.forms[properFormId.id].elements["city"];
    return regex.test(field.value);
  }
  return regex.test(document.getElementById(field).value);
}

function errorField(field) {  
  if (document.layers) {
    fieldstyle = document.layers[field].className;
    document.layers[field].className = fieldstyle + ' field-err';
  }
  /*else if (document.all) {
    fieldstyle = document.all[field].className;
    document.all[field].className = fieldstyle + ' field-err';
  }*/
  else if(document.getElementById){
    if(field == 'city'){
      field = document.forms[properFormId.id].elements["city"];
      fieldstyle = field.className;
      field.className = fieldstyle + ' field-err';
    }
    else{
      fieldstyle = document.getElementById(field).className;
      document.getElementById(field).className = fieldstyle + ' field-err';
    }
  }
}
function okField(field){
  if (document.layers) {
    classname = document.layers[field].className;
    if (classname.search('long') != '-1')
      document.layers[field].className = 'long';
    else if (classname.search('short') != '-1')
      document.layers[field].className = 'short';
    else
      document.layers[field].className = '';
  }
  /*else if (document.all) {
    classname = document.all[field].className;
    if (classname.search('long') != '-1')
      document.all[field].className = 'long';
    else if (classname.search('short') != '-1')
      document.all[field].className = 'short';
    else
      document.all[field].className = '';
  }*/
  else if(document.getElementById){
    classname = document.getElementById(field).className;
    if (classname.search('long') != '-1')
      classname = document.getElementById(field).className = 'long';
    else if (classname.search('short') != '-1')
      classname = document.getElementById(field).className = 'short';
    else
      classname = document.getElementById(field).className = '';
  }
}

// Fonction checkprofil: Vérifie les champs nom, courriel et comments
function validate(f){
  findFormId();
  if(f.id == undefined){
    f = properFormId;
  }
  //var fn = f.name;
  //var ofn = document.forms[fn];
	var erreur = false;
  var nb_err = 0;
  
  if(!formSubmit) return false;
  formSubmit = false;
  
  if(document.getElementById('first_name').value == '' && document.getElementById('last_name').value == ''){
    var title_err = '';
  	var msgerreur = "<ul>";
    
    if(vPrenom){
      if (!validateField('qwe', regexAlpha)){
        errorField('qwe');
        msgerreur += "<li><a href=\"#a-fname\">'Prénom' : Veuillez entrer votre prénom</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('qwe');
    }
    
    if(vNom){
      if (!validateField('rty', regexAlpha)){
        errorField('rty');
        msgerreur += "<li><a href=\"#a-lname\">'Nom' : Veuillez entrer votre nom de famille</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('rty');
    }
    
    if(vAddress){
      if (!validateField('address', regexAddress)){
        errorField('address');
        msgerreur += "<li><a href=\"#a-address\">'Adresse' : Veuillez entrer votre adresse</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('address');
    }
    
    //does not work with IE because it confuses ids with meta tags. Meta tags are converted into global objects in IE (and others?). So 'name="city"' conflicts with 'id="city"'.
    //we should access form elements thru document.forms["forName"].elements["city"]
    if(vCity){
      if (!validateField('city', regexAlpha)){
        errorField('city');
        msgerreur += "<li><a href=\"#a-city\">'Ville' : Veuillez entrer votre ville</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('city');
    }
    
    if(vProvince){
      if (document.getElementById('province').selectedIndex == 0){
        errorField('province');
        msgerreur += "<li><a href=\"#a-province\">'Province' : Veuillez sélectionner votre province</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('province');
    }
    
    if(vPC){
      if (!validateField('postalcode', regexPC)){
        errorField('postalcode');
        msgerreur += "<li><a href=\"#a-postalcode\">'Code postal' : Veuillez entrer votre code postal correctement</a></li>";
        erreur = true;
        nb_err++;
      }
      else{
        okField('postalcode');
        
        var pc = document.getElementById('postalcode').value;
        pc = pc.toUpperCase();
        if(pc.indexOf(' ') == -1)
          pc = pc.substring(0,3) + ' ' + pc.substring(3);
        document.getElementById('postalcode').value = pc;
      }
    }
    
    if(vCourriel){
      if (!(!validateField('email', regexEmailNo) && validateField('email', regexEmailYes))){
        errorField('email');
        msgerreur += "<li><a href=\"#a-email\">'Courriel' : Veuillez entrer une adresse de courriel valide</a></li>";
        erreur = true;
        nb_err++;
      }
      else{
        okField('email');
        
        if(vCourrielConfirm){
          if (document.getElementById('emailconfirm').value != document.getElementById('email').value){
            errorField('emailconfirm');
            msgerreur += "<li><a href=\"#a-emailconfirm\">'Courriel (confirmation)' : Veuillez entrer votre adresse de courriel une seconde fois</a></li>";
            erreur = true;
            nb_err++;
          }
          else
            okField('emailconfirm');
        }
      }
    }
    
    if (vPhone) {
      var phone = document.getElementById('area_j').value + document.getElementById('phone2').value + document.getElementById('phone3').value;
      
      if (!regexPhone.test(phone)){
        errorField('area_j');
        errorField('phone2');
        errorField('phone3');
        msgerreur += "<li><a href=\"#a-phone\">'Téléphone' : Veuillez entrer votre numéro de téléphone</a></li>";
        erreur = true;
        nb_err++;
      }
      else {
        okField('area_j');
        okField('phone2');
        okField('phone3');
      }
    }
    
    if(vPhone2){
      var phoneDay = document.getElementById('area_j').value + document.getElementById('phone2').value + document.getElementById('phone3').value;
      var phoneNight = document.getElementById('area_s').value + document.getElementById('phone2s').value + document.getElementById('phone3s').value;
      if (!regexPhone.test(phoneDay) && !regexPhone.test(phoneNight)){
        errorField('area_j');
        errorField('phone2');
        errorField('phone3');
        errorField('area_s');
        errorField('phone2s');
        errorField('phone3s');
        msgerreur += "<li><a href=\"#a-phone\">'Téléphone' : Veuillez entrer votre numéro de téléphone</a></li>";
        erreur = true;
        nb_err++;
      }
      else {
        okField('area_j');
        okField('phone2');
        okField('phone3');
        okField('area_s');
        okField('phone2s');
        okField('phone3s');
      }
    }
    
    if(vMake){
      if(!validateField('make', regexAlpha)){
        errorField('make');
        msgerreur += "<li><a href=\"#a-make\">'Marque' : Veuillez entrer la marque du véhicule</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('make');
    }
    
    if(vModel){
      if(!validateField('model', regexAlphaNum)){
        errorField('model');
        msgerreur += "<li><a href=\"#a-model\">'Modèle' : Veuillez entrer le modèle du véhicule</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('model');
    }
    
    if(vYear){
      if(!validateField('year', regexYear)){
        errorField('year');
        msgerreur += "<li><a href=\"#a-year\">'Année' : Veuillez entrer l'année du véhicule</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('year');
    }
    
    if(vKm){
      if(!validateField('km', regexKM)){
        errorField('km');
        msgerreur += "<li><a href=\"#a-km\">'Kilométrage' : Veuillez entrer le kilométrage du véhicule</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('km');
    }
  
    // Validation du champs NIV (Numéro Identification Vehicule)
    if(vNIV){
      if(!validateField('niv', regexVIN)){
        errorField('niv');
        msgerreur += "<li><a href=\"#a-niv\">'Numéro d'identification (NIV)' : Veuillez entrer le numéro du véhicule</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('niv');
    }
    
    if(vSerial){
      if(!validateField('serial', regexNotEmpty) || validateField('serial', regexOnlySpace)){
        errorField('serial');
        msgerreur += "<li><a href=\"#a-serial\">'Numéro de série' : Veuillez entrer le numéro de série du véhicule</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('serial');
    }
    
    if(vPlate){
      if(!validateField('licence', regexPlate)){
        errorField('licence');
        msgerreur += "<li><a href=\"#a-licence\">'Plaque d'immatriculation' : Veuillez entrer le numéro de la plaque d'immatriculation du véhicule</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('licence');
    }
    
    if(vColor){
      if(!validateField('color', regexNotEmpty) || validateField('color', regexOnlySpace)){
        errorField('color');
        msgerreur += "<li><a href=\"#a-color\">'Couleur' : Veuillez entrer la couleur du véhicule</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('color');
    }
    
    if(vAppoint){
      var appoint1 = document.getElementById('dfy1').value + '/' + document.getElementById('dfm1').value + '/' + document.getElementById('dfd1').value;
      if(document.getElementById('dfy2')){
        var appoint2 = document.getElementById('dfy2').value + '/' + document.getElementById('dfm2').value + '/' + document.getElementById('dfd2').value;
      }
      
      if (!regexDate.test(appoint1)){
        errorField('dfy1');
        errorField('dfm1');
        errorField('dfd1');
        msgerreur += "<li><a href=\"#a-daterdv1\">'Date du rendez-vous (premier choix)' : Veuillez choisir une date</a></li>";
        erreur = true;
        nb_err++;
      }
      else {
        okField('dfy1');
        okField('dfm1');
        okField('dfd1');
      }
      
      if(!validateField('time1', regexNotEmpty) || validateField('time1', regexOnlySpace)){
        errorField('time1');
        msgerreur += "<li><a href=\"#a-timerdv1\">'Heure du rendez-vous (premier choix)' : Veuillez entrer votre heure de préférence</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('time1');
      
      if(document.getElementById('dfy2')){
        if (!regexDate.test(appoint2)){
          errorField('dfy2');
          errorField('dfm2');
          errorField('dfd2');
          msgerreur += "<li><a href=\"#a-daterdv2\">'Date du rendez-vous (deuxième choix)' : Veuillez choisir une date</a></li>";
          erreur = true;
          nb_err++;
        }
        else {
          okField('dfy2');
          okField('dfm2');
          okField('dfd2');
        }
      
        if(!validateField('time2', regexNotEmpty) || validateField('time2', regexOnlySpace)){
          errorField('time2');
          msgerreur += "<li><a href=\"#a-timerdv2\">'Heure du rendez-vous (deuxième choix)' : Veuillez entrer votre heure de préférence</a></li>";
          erreur = true;
          nb_err++;
        }
        else
          okField('time2');
      }
    }
    
    if(vParts){
      if(document.getElementById('parts').value == ''){
        errorField('parts');
        msgerreur += "<li><a href=\"#a-parts\">'Pièces requises' : Veuillez indiquer les pièces à commander</a></li>";
        erreur = true;
        nb_err++;
      }
      else
        okField('parts');
    }

    if(vCaptcha){
      if (!validateField('captcha', regexAlpha)){
        errorField('captcha');
        msgerreur += "<li><a href=\"#a-captcha\">'Mot' : Veuillez entrer les caractères figurant dans l'image</a></li>";
        erreur = true;
        nb_err++; 
      }
      else
        okField('captcha');
    }
    
    msgerreur += "</ul>";
    
    if (nb_err > 1)
      title_err = "Il y a un problème avec les champs suivants :";
    else
      title_err = "Il y a un problème avec le champ suivant :";
  }

  if(erreur == true) {
		if (document.layers) {
      document.layers.error.document.write(title_err + msgerreur);
      document.layers.error.document.close();
      document.layers['err-msg'].className = 'visible';
    }
    else if (document.all) {
      error.innerHTML = title_err + msgerreur;
      document.all['err-msg'].className = 'visible';
    }
    else if(document.getElementById){
      document.getElementById("err-msg").innerHTML = title_err + msgerreur;
      document.getElementById('err-msg').className = 'visible';
    }
    else{
      alert(msgerreur);
    }
    formSubmit = true;
		return false;
  }
  else {
    /*if (ofn.PHONE_J) { //some forms don't have phone number input fields
      ofn.PHONE_J.value = ofn.PHONE2.value+'-'+ofn.PHONE3.value+' *'+ofn.PHONE4.value;
    }*/
    
    if (document.getElementById('phone_j')) { //some forms don't have phone number input fields
      if(document.getElementById('phone4'))
        document.getElementById('phone_j').value = document.getElementById('phone2').value+'-'+document.getElementById('phone3').value+' *'+document.getElementById('phone4').value;
      else
        document.getElementById('phone_j').value = document.getElementById('phone2').value+'-'+document.getElementById('phone3').value;
    }
    
    if (document.getElementById('phone_n')) { //some forms don't have phone number input fields
      if(document.getElementById('phone4s'))
        document.getElementById('phone_n').value = document.getElementById('phone2s').value+'-'+document.getElementById('phone3s').value+' *'+document.getElementById('phone4s').value;
      else
        document.getElementById('phone_n').value = document.getElementById('phone2s').value+'-'+document.getElementById('phone3s').value;
    }
    
    if(document.getElementById('first_name').value == '' && document.getElementById('last_name').value == ''){
      //document.getElementById(f.id).action = "<spy=spy.uri/>"; <-- can't do because we're in a .js file
      document.getElementById(f.id).submit();
    }
  }
}

formsOverride = {

  formId: '',
  
  findFormId: function(){
    for(var f = 0; f < document.forms.length; f++){
      if(document.forms[f].className == 'form2007'){
        formsOverride.formId = document.forms[f].id;
        formsOverride.setFields();
      }
    }
  },
  
  makeMandatoryOrNot: function(e, change){
    var formName = document.getElementById(formsOverride.formId);
    var len = formName.elements.length;
    var el = '';
    for(var i = 0; i < len; i++){
      if(e == formName.elements[i].id){
        el = formName.elements[i];
      }
    }
    //var el = document.getElementById(el); does not work becaus IE confuses ids with meta and might get the wrong object ('city for example')
    if(el && el.tagName == 'INPUT'){
      var pNode = el.parentNode;
      while(pNode.previousSibling){
        if(pNode.className == 'mandatory'){
          break;
        }
        pNode = pNode.previousSibling;
      }
      if(change){
        var asterix = document.createTextNode('*');
        if(pNode.firstChild){
          pNode.replaceChild(asterix, pNode.firstChild);
        }
        else{
          pNode.appendChild(asterix);
        }
        //pNode.appendChild(asterix);
        //pNode.appendChild(asterix);
        //pNode.innerHTML = '*';
      }
      else{
        var asterix = document.createTextNode('');
        if(pNode.firstChild){
          pNode.replaceChild(asterix, pNode.firstChild);
        }
        else{
          pNode.appendChild(asterix);
        }
        //pNode.replaceChild(asterix, pNode.firstChild);
        //pNode.innerHTML = '';
      }
    }
  },
  
  setFields: function(){
    if(vPrenom){
      formsOverride.makeMandatoryOrNot('first_name', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('first_name', false);
    }

    if(vNom){
      formsOverride.makeMandatoryOrNot('last_name', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('last_name', false);
    }

    if(vCity){
      formsOverride.makeMandatoryOrNot('city', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('city', false);
    }

    if(vPhone){
      formsOverride.makeMandatoryOrNot('area_j', true);
      formsOverride.makeMandatoryOrNot('phone2', true);
      formsOverride.makeMandatoryOrNot('phone3', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('area_j', false);
      formsOverride.makeMandatoryOrNot('phone2', false);
      formsOverride.makeMandatoryOrNot('phone3', false);
    }
    
    if(vPC){
      formsOverride.makeMandatoryOrNot('postalcode', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('postalcode', false);
    }

    if(vProvince){
      formsOverride.makeMandatoryOrNot('province', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('province', false);
    }
   
    if(vMake){
      formsOverride.makeMandatoryOrNot('make', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('make', false);
    }

    if(vModel){
      formsOverride.makeMandatoryOrNot('model', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('model', false);
    }

    if(vYear){
      formsOverride.makeMandatoryOrNot('year', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('year', false);
    }
    
    if(vKm){
      formsOverride.makeMandatoryOrNot('km', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('km', false);
    }
    
    if(vNIV){
      formsOverride.makeMandatoryOrNot('niv', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('niv', false);
    }
    
    if(vSerial){
      formsOverride.makeMandatoryOrNot('serial', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('serial', false);
    }
    
    if(vPlate){
      formsOverride.makeMandatoryOrNot('licence', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('licence', false);
    }
    
    if(vColor){
      formsOverride.makeMandatoryOrNot('color', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('color', false);
    }

    if(vParts){
      formsOverride.makeMandatoryOrNot('parts', true);
    }
    else{
      formsOverride.makeMandatoryOrNot('parts', false);
    }
  },
  
  addLoadListener: function(ev, fn){
    if(typeof window.addEventListener != 'undefined'){
      window.addEventListener(ev, fn, false);
    }
    else if(typeof document.addEventListener != 'undefined'){
      document.addEventListener(ev, fn, false);
    }
    else if(typeof window.attachEvent != 'undefined'){
      window.attachEvent('on' + ev, fn);
    }
    else{
      var oldfn = window.onload;
      if(typeof window.onload != 'function'){
        window.onload = fn;
      }
      else{
        window.onload = function(){
        oldfn();
        fn();
        }
      }
    }
  }
}
formsOverride.addLoadListener('load', formsOverride.findFormId);
