
  
      /* Validate.js, version 2
   
      *  (c) 2006 achraf bouyakhsass <mutation[at]mutationevent.com>
   
      *
   
      *  This software is licensed under the CC-GNU GPL
   
      *  http://creativecommons.org/licenses/GPL/0/
   
      *
   
      *  For more details
   
      *  http://www.mutationevent.com/project/validate.js
   
      *
  
      *  Package to validate various data :
  
      *  hasValidChars
  
      *  isSimpleIP
  
      *  isAlphaLatin
  
      *  isNotEmpty
  
      *  isIntegerInRange
  
      *  isNum
  
      *  isEMailAddr
  
      *  isZipCode
  
      *  isDate
  
      *  isMD5
  
      *  isURL
  
      *  isGuid
  
      *  isISBN
  
      *  isSSN
  
      *  isDecimal
  
      *  isplatform
  
      *  addRules
  
      *  Apply
  
      /*--------------------------------------------------------------------------*/
  
      var Class = {
  
              create: function() {
  
                      return function() {
  
                              this.initialize.apply(this, arguments);
  
                      }
  
              }
  
      }
  
       
  
      function getValue(s){return document.getElementById(s).value}
  
       
  
      var Validate = Class.create();
  
      Validate.prototype = {
  
              /*--------------------------------------------------------------------------*/
  
              initialize:function(){
  
                      this.error_array = []
  
                      this.rules_array = [];
  
                      this.e = true;
  
              },
  
              /*--------------------------------------------------------------------------*/
  
              hasValidChars:function(s, characters, caseSensitive){
  
                      function escapeSpecials(s){
  
                              return s.replace(new RegExp("([\\\\-])", "g"), "\\$1");
  
                      }
  
                      return new RegExp("^[" + escapeSpecials(characters) + "]+$",(!caseSensitive ? "i" : "")).test(s);
  
              },
  
              /*--------------------------------------------------------------------------*/
  
              isSimpleIP:function(ip){
  
                      ipRegExp = /^(([0-2]*[0-9]+[0-9]+)\.([0-2]*[0-9]+[0-9]+)\.([0-2]*[0-9]+[0-9]+)\.([0-2]*[0-9]+[0-9]+))$/
  
                      return ipRegExp.test(ip);
  
              },
  
              /*--------------------------------------------------------------------------*/
  
              isAlphaLatin:function(string){
  
                      alphaRegExp = /^[0-9a-z]+$/i
  
                      return alphaRegExp.test(string);
  
              },
  
              /*--------------------------------------------------------------------------*/
  
              isNotEmpty:function (string){
  
                      return /\S/.test(string);
  
              },
  
              /*--------------------------------------------------------------------------*/
  
              isEmpty:function(s){
  
                      return !/\S/.test(s);
  
              },
  
              /*--------------------------------------------------------------------------*/
  
              isIntegerInRange:function(n,Nmin,Nmax){
  
                      var num = Number(n);
  
                      if(isNaN(num)){
  
                              return false;
  
                      }
  
                      if(num != Math.round(num)){
  
                              return false;
  
                      }
  
                      return (num >= Nmin && num <= Nmax);
  
              },
  
              /*--------------------------------------------------------------------------*/
  
              isNum:function(number){
  
                      numRegExp = /^[0-9]+$/
  
                      return numRegExp.test(number);
  
              },
  
              /*--------------------------------------------------------------------------*/
  
              isEMailAddr:function(string){
  
                      emailRegExp = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.([a-z]){2,4})$/
  
                      return emailRegExp.test(string);
  
              },
  
              /*--------------------------------------------------------------------------*/
  
              isZipCode:function(zipcode,country){
  
                      if(!zipcode) return false;
  
                      if(!country) format = 'US';
  
                      switch(country){
  
                              case'US': zpcRegExp = /^\d{5}$|^\d{5}-\d{4}$/; break;
 
                              case'MA': zpcRegExp = /^\d{5}$/; break;
 
                              case'CA': zpcRegExp = /^[A-Z]\d[A-Z] \d[A-Z]\d$/; break;
 
                              case'DU': zpcRegExp = /^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/; break;
 
                              case'FR': zpcRegExp = /^\d{5}$/; break;
 
                              case'Monaco':zpcRegExp = /^(MC-)\d{5}$/; break;
 
                      }
 
                      return zpcRegExp.test(zipcode);
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              isDate:function(date,format){
 
                      if(!date) return false;
 
                      if(!format) format = 'FR';
 
                     
 
                      switch(format){
 
                              case'FR': RegExpformat = /^(([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/([2][0]|[1][9])\d{2})$/; break;
 
                              case'US': RegExpformat = /^([2][0]|[1][9])\d{2}\-([0]\d|[1][0-2])\-([0-2]\d|[3][0-1])$/; break;
 
                              case'SHORTFR': RegExpformat = /^([0-2]\d|[3][0-1])\/([0]\d|[1][0-2])\/\d{2}$/; break;
 
                              case'SHORTUS': RegExpformat = /^\d{2}\-([0]\d|[1][0-2])\-([0-2]\d|[3][0-1])$/; break;
 
                              case'dd MMM yyyy':RegExpformat = /^([0-2]\d|[3][0-1])\s(Jan(vier)?|Fév(rier)?|Mars|Avr(il)?|Mai|Juin|Juil(let)?|Aout|Sep(tembre)?|Oct(obre)?|Nov(ember)?|Dec(embre)?)\s([2][0]|[1][19])\d{2}$/; break;
 
                              case'MMM dd, yyyy':RegExpformat = /^(J(anuary|u(ne|ly))|February|Ma(rch|y)|A(pril|ugust)|(((Sept|Nov|Dec)em)|Octo)ber)\s([0-2]\d|[3][0-1])\,\s([2][0]|[1][9])\d{2}$/; break;
 
                      }
 
                     
 
                      return RegExpformat.test(date);
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              isMD5:function(string){
 
                      if(!string) return false;
 
                      md5RegExp = /^[a-f0-9]{32}$/;
 
                      return md5RegExp.test(string);
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              isURL:function(string){
 
                      if(!string) return false;
 
                      string = string.toLowerCase();
 
                      urlRegExp = /^(((ht|f)tp(s?))\:\/\/)([0-9a-zA-Z\-]+\.)+[a-zA-Z]{2,6}(\:[0-9]+)?(\/\S*)?$/
 
                      return urlRegExp.test(string);
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              isGuid:function(guid){//guid format : xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx or xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
 
                      if(!guid) return false;
 
                      GuidRegExp = /^[{|\(]?[0-9a-fA-F]{8}[-]?([0-9a-fA-F]{4}[-]?){3}[0-9a-fA-F]{12}[\)|}]?$/
 
                      return GuidRegExp.test(guid);
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              isISBN:function(number){
 
                      if(!number) return false;
 
                      ISBNRegExp = /ISBN\x20(?=.{13}$)\d{1,5}([- ])\d{1,7}\1\d{1,6}\1(\d|X)$/
 
                      return ISBNRegExp.test(number);
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              isSSN:function(number){//Social Security Number format : NNN-NN-NNNN
 
                      if(!number) return false;
 
                      ssnRegExp = /^\d{3}-\d{2}-\d{4}$/
 
                      return ssnRegExp.test(number);
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              isDecimal:function(number){// positive or negative decimal
 
                      if(!number) return false;
 
                      decimalRegExp = /^-?(0|[1-9]{1}\d{0,})(\.(\d{1}\d{0,}))?$/
 
                      return decimalRegExp.test(number);
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              isplatform:function(platform){
 
                      //win, mac, nix
 
                      if(!platform) return false;
 
                      var os;
 
                      winRegExp = /\win/i
 
                      if(winRegExp.test(window.navigator.platform)) os = 'win';
 
                     
 
                      macRegExp = /\mac/i
 
                      if(macRegExp.test(window.navigator.platform)) os = 'mac';
 
                     
 
                      nixRegExp = /\unix|\linux|\sun/i
 
                      if(nixRegExp.test(window.navigator.platform)) os = 'nix';
 
                     
 
                      if(platform == os) return true;
 
                      else return false;
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              getValue:function(id){
 
                      document.getElementById(id).value;
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              addRules:function(rules){
 
                      this.rules_array.push(rules);
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              check:function(){
 
                      this.error_array = [];
 
                      for(var i=0;i<this.rules_array.length;i++){
 
                              switch(this.rules_array[i].option){
 
                                      /*--------------------------------------------------------------------------*/
 
                                      case'ValidChars':
 
                                              if(!this.hasValidChars(getValue(this.rules_array[i].id),this.rules_array[i].chars,false)){
 
                                                      this.error_array.push(this.rules_array[i].error);
 
                                                      this.e = false;
 
                                              }
 
                                      break;
 
                                      /*--------------------------------------------------------------------------*/
 
                                      case'AlphaLatin':
 
                                              if (this.isAlphaLatin(getValue(this.rules_array[i].id))){
 
                                                      this.error_array.push(this.rules_array[i].error);
 
                                                      this.e = false;
 
                                              }
 
                                      break;
 
                                      /*--------------------------------------------------------------------------*/
 
                                      case'required':
 
                                              if (this.isEmpty(getValue(this.rules_array[i].id))){
 
                                                      this.error_array.push(this.rules_array[i].error);
 
                                                      this.e = false;
 
                                              }
 
                                      break;
 
                                      /*--------------------------------------------------------------------------*/
 
                                      case'integerRange':
 
                                              if (!this.isIntegerInRange(getValue(this.rules_array[i].id),this.rules_array[i].Min,this.rules_array[i].Max)){
 
                                                      this.error_array.push(this.rules_array[i].error);
 
                                                      this.e = false;
 
                                              }
 
                                      break;
 
                                      /*--------------------------------------------------------------------------*/
 
                                      case'Number':
 
                                              if (!this.isNum(getValue(this.rules_array[i].id))){
 
                                                      this.error_array.push(this.rules_array[i].error);
 
                                                      this.e = false;
 
                                              }
 
                                      break;
 
                                      /*--------------------------------------------------------------------------*/
 
                                      case'email':
 
                                              if (!this.isEMailAddr(getValue(this.rules_array[i].id))){
 
                                                      this.error_array.push(this.rules_array[i].error);
 
                                                      this.e = false;
 
                                              }
 
                                      break;
 
                                      /*--------------------------------------------------------------------------*/
 
                                      case'zipCode':
 
                                              if (!this.isZipCode(getValue(this.rules_array[i].id),this.rules_array[i].country)){
 
                                                      this.error_array.push(this.rules_array[i].error);
 
                                                      this.e = false;
 
                                              }
 
                                      break;
 
                                      /*--------------------------------------------------------------------------*/
 
                                      case'date':
 
                                              if(!this.isDate(getValue(this.rules_array[i].id),this.rules_array[i].format)){
 
                                                      this.error_array.push(this.rules_array[i].error);
 
                                                      this.e = false;
 
                                              }
 
                                      break;
 
                                      /*--------------------------------------------------------------------------*/
 
                                      case'url':
 
                                              if(!this.isURL(getValue(this.rules_array[i].id))){
 
                                                      this.error_array.push(this.rules_array[i].error);
 
                                                      this.e = false;
 
                                              }
 
                                      break;
 
                                      /*--------------------------------------------------------------------------*/
 
                                      case'Decimal':
 
                                              if(!this.isDecimal(getValue(this.rules_array[i].id))){
 
                                                      this.error_array.push(this.rules_array[i].error);
 
                                                      this.e = false;
 
                                              }
 
                                      break;
 
                                      /*--------------------------------------------------------------------------*/
 
                              }
 
                      }
 
              },
 
              /*--------------------------------------------------------------------------*/
 
              Apply:function(el){
 
                      this.check();
 
                      if(this.e){
 
                              return true;
 
                      }else{
 
                              var endMsg = this.error_array;
 
                              if(!el){
 
                                      alert(this.error_array.toString().replace(/\,/gi,"\n"));
 
                              }else{
 
                                      document.getElementById(el).innerHTML = this.error_array.toString().replace(/\,/gi,"<br/>");
 
                              }
 
                              return false;
 
                      }
 
              }
 
              /*--------------------------------------------------------------------------*/
 
      }
 
       

