/* (c) 2005 - Laurent Houdard <laurent@houdard.net> 
   $Id: formvalid.js,v 1.5 2006-02-16 13:31:49 lh Exp $ */

function formValidInit(container) {
  var W3CDOM = (document.createElement && document.getElementsByTagName);
  if (!W3CDOM) { return; }
  container = container || document;

  var forms = getElementsByClassName('formvalid', container, 'FORM');
  for (var i = 0; i < forms.length; i++) {
    var form = forms[i];
    form.onsubmit = formValid;
  }
}

function formValid() {
  return _formValid(this);
}

function _formValid(form) {
  var W3CDOM = (document.createElement && document.getElementsByTagName);
  if (!W3CDOM) { return true; }

  var check = new Array();
  var post  = new Array();

  var labels = form.getElementsByTagName('LABEL');
  if (labels) {
    for (var i = 0; i < labels.length; i++) {
      var label = labels[i];
      var labelfor = label.getAttribute('FOR');
      if (!labelfor) { labelfor = label.getAttribute('HTMLFOR'); } // IE
      if (labelfor) {
	var input = document.getElementById(labelfor);
	var str = label.firstChild.nodeValue;
	if (input.className) {
	  var classes = input.className.split(" ");
	  for (var j = 0; j < classes.length; j++) {
	    var fcheck = 'formValid_'+classes[j];
	    if (window[fcheck]) {
	      check.push({func: fcheck, str: str, input: input});
	    }
	    var fsubmit = 'formValid_'+classes[j]+'_submit';
	    if (window[fsubmit]) {
	      post.push({func: fsubmit, input: input});
	    }
	  }
	}
      }
    }
  }

  var error = '';
  var inputfocus = undefined;

  while (check.length) {
    var c = check.shift();
    var e = window[c.func](c.str, c.input);
    if (e) { 
      error += e+'\n'; 
      if (!inputfocus) {
	inputfocus = c.input;
      }
    }
  }

  if (error != '') {
    alert(error);
    if (inputfocus && !inputfocus.disabled) {
      inputfocus.focus();
    }
    return false;
  }

  while (post.length) {
    var p = post.shift();
    window[p.func](p.input);
  }

  return true;
}

function formValid_isInt(str, input) {
  var data = input.value;
  return ((data != '' && !data.match(/^([-]?[0-9]+)$/)) ?
	  'Le champ "'+str+'" doit être un entier' : '');
}

function formValid_isFloat(str, input) {
  var data = input.value;
  return ((data != '' && !data.match(/^([-]?\d+(\.\d+)?)$/)) ?
	  'Le champ "'+str+'" doit être un nombre' : '');
}

function formValid_isEmail(str, input) {
  var data = input.value;
  var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;
  var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;
  return ((data != '' && (reg1.test(data) || !reg2.test(data))) ?
	  '"'+data+'" n\'est pas un e-mail valide' : '');
}

function formValid_isDate(str, input) {
  var data = input.value;
  return ((data != '' && !data.match(/^([0-9]{2}\/[0-9]{2}\/[0-9]{4})$/)) ?
	  'Le champ "'+str+'" doit être au format "jj/mm/aaaa"' : '');
}

function formValid_required(str, input) {
  var data = input.value;
  return ((data == '' && str != null) ? 
	  'Le champ "'+str+'" est obligatoire' : '');
}

function formValid_checkPasswd(str, input) {
  var p1 = document.getElementById(input.id+'_1');
  var p2 = document.getElementById(input.id+'_2');
  input.value = '';
  if (p1.value != '') {
    input.value = calcMD5(p1.value);
    if (p1.value.length < 4) {
      return 'Le mot de passe doit contenir au moins 4 caractères';
    }
  }
  if (p1.value != p2.value) {
    p1.value = '';
    p2.value = '';
    return 'Erreur dans la confirmation du mot de passe';
  }
  return '';
}

function formValid_checkPasswd_submit(input) {
  var p1 = document.getElementById(input.id+'_1');
  var p2 = document.getElementById(input.id+'_2');
  if (p1.value != '') {
    input.disabled = false;
    p1.disabled = true;
    p2.disabled = true;
  }
  else {
    p1.disabled = false;
    p2.disabled = false;
  }
}

function formValid_checkAccept(str, input) {
  return (input.checked == false ?
	  'Vous devez accepter les conditions générales d\'utilisation' : '');
}

