
//form util for getting values
FormUtil = {
  getParameters:function(input){
    var res = new Array();
    if(input==null || input.disabled) return res;
    if(input.options!=null) {input = input.options};
    //enter into checkboxes, radios, options
    if(input.length){
      for(var i=0;i<input.length;i++){
        res.appendArray(this.getParameters(input[i]));
      }
    }else{
      //do simple element value
      var val=this._getParam(input);
      if(val!=null){
        res.push(val);
      }
    }
    return res;
  },

setMyValueToAll:function(input, val) {
	if(input.length){
		for(var i=0;i<input.length;i++){
			input[i].value=val;
		}
	}else{
	 input.value=val;
	}
	return;
},

  getParameter:function(input){
    if(input==null || input.disabled) return null;
    if(input.length && input.value==null){
      for(var i=0;i<input.length;i++){
        if(input[i].disabled) continue;
        var val = this._getParam(input[i]);
        if(val!=null) return val;
      }
    }else{
      return this._getParam(input);
    }
  },
  //warning do not give null or disabled input to this method
  _getParam:function(input){
    var type = (input.type)?input.type:input.nodeName;
    switch (type.toLowerCase()) {
      case 'checkbox':
      case 'radio':{
        if(input.checked) return input.value;
        break;
      }
      case 'option':{
		if(input.selected) return ((input.value!=null)?input.value:input.text);
        break;
      }
      default:{
        return input.value;
      }
    }
  },
  _getInputByType : function(input,type){
    if(input==null) return new Array();
    if(input.length){
      var res = new Array();
      for(var i=0;i<input.length;i++){
        if(input[i].type==type) res.push(input[i]);
      }
      return res;
    }else if(input.type==type){
      return new Array(input);
    }else{
      return new Array();
    }
  },
  getCheckboxes : function(input){
  	return this._getInputByType(input,'checkbox');
  },
  areAllchecked : function(input){
	  var chkboxs = this.getCheckboxes(input);
	  if(chkboxs.length==0) return false;
	  for(var i=0;i<chkboxs.length;i++){
		  if(!chkboxs[i].checked) return false;
	  }
	  return true;
  },
  getRadios : function(input){
  	return this._getInputByType(input,'radio');
  },
  _getIds : function(form,inputName){
  	if(form[inputName + 'list']){
  		var res = form[inputName + 'list'].value.split('|')
  		res.removeAll('');
  		return res;
  	}else{
  		return this.getParameters(form[inputName]);
  	}
  }
}

//validation class
Validation = function(){}

Validation.prototype = {
  _validate: function(command){
    return (!this['on'+command] || this['on'+command]());
  },
  _docommand : function(command){
    if(this['do'+command]){
      this['do'+command]();
    }else{
      this._submit(command);
    }
  },
  _submit : function(command){
    var navigation = null;
    try{
      navigation = $('navigation');
    }catch(e){}
    if(navigation!=null){
      this.form.action = this.form.action.replace(/\?.*/g,'')+'?'+Form.serialize(navigation);
    }
    this.form.cmd.value = command;
    this.form.submit();
  },
  getParameters : function(inputName){
     return FormUtil.getParameters(this.form[inputName]);
  },
  getParameter : function(inputName){
     return FormUtil.getParameter(this.form[inputName]);
  },
  getIds : function(inputName){
     return FormUtil._getIds(this.form, inputName);
  }
}

//function to call when doing something
doCommand = function(command, form){
   if(form==null) form=document.mainform;
   if(form==null) {
     form=document.getElementById('mainform');
   }
   var formidx =  (form.name.length>0)?form.name:form.id;
   var valElem = (Validation[formidx])?Validation[formidx]:new Validation();
   valElem.form = form;
   if(valElem._validate(command)){
     valElem._docommand(command);
   }
}

isEmpty= function(val){
  return val.trim().length==0;
}
//function r?cup?r?e, pas sur que ca marche
isMail = function(val){
  var splitted = val.match("^(.+)@(.+)$");
  if(splitted==null || splitted.length < 2) return false;
  if(splitted[1].match(/^\"?[\w-_\.+]+\"?$/) == null) return false;
  if(splitted[2].match(/^[\w-\.]+\.[A-Za-z]{2,4}$/) == null) return false;
  return true;
}
isValid = function(val, forbiddenChar){
  for(var c=0;c<forbiddenChar.length;c++){
    if(val.indexOf(forbiddenChar.charAt(c))>=0) return false;
  }
  return true;
}

formatPhoneNumber = function(sourceElt, targetElt) {
	var str = sourceElt.value;
	var digits = str.replace(/\s/g,"");
	digits = digits.replace(/^\+/g,"");
	digits = digits.replace(/\./g,"");
	digits = digits.replace(/-/g,"");
	digits = digits.replace(/\(\d{1,4}\)/g,"");
	if(/^\d{10,}$/.test(digits)){
		targetElt.value = digits;
		return true;
	}else{
		return false;
	}
}

formatFrenchNationalPhoneNumber = function(sourceElt, targetElt) {
	 var str = sourceElt.value;
	 var digits = str.replace(/\s/g,"");
	 digits = digits.replace(/^\+/g,"");
	 digits = digits.replace(/\./g,"");
	 digits = digits.replace(/-/g,"");
	 digits = digits.replace(/\(/g,"");
	 digits = digits.replace(/\)/g,"");
	 if(/^0[67]\d{8}$/.test(digits)){
		 targetElt.value = "33" + digits.slice(1);
		 return true;
	 } else{
		 return false;
	 }
}


function isPhoneValid(phone) {
	for (var i=0;i<phone.length;i++) {
		var c = phone.charAt(i);
		if ((c<'0' || c>'9') && c!='(' && c!=')' && c!='-' && c!=' ' && c!='+') {
			return false;
		}
	}
	return true;
}


