
if(!window.__rageLib){
  window.__rageLib = {};
  window.__rageLib.instances = {};
}

if(!window.__rageLib.formLib)
  window.__rageLib.formLib = {};

__rageLib.formLib.validator = function(){}

__rageLib.formLib.validator.prototype = {
  defaultLang: null,
  langData: [], //to be loaded
  actValues: [],
  
  toString: function(){ return 'rageLib.formLib.validator' },
  
  validateNumberField: function(elem, dec, minv, maxv, autoCorrect){
    if(elem.id && this.actValues[elem.id] != null && this.actValues[elem.id] == elem.value)
      return ;
    
    var v = elem.value,
        v2 = '',
        dot_allow = true;
    
    v = v.replace(',','.');
    
    if(v == '.'){
      v = 0;
    }
    v = ''+v; //make string
    
    for(var i=0; i<v.length; i++){
      if((v.charAt(i) == '.' && dot_allow == true) || (v.charCodeAt(i) >= 48 && v.charCodeAt(i) <= 57)){
  	    v2 += ''+v.charAt(i);
  	    if(v.charAt(i) == '.')
          dot_allow = false;
  	  }
    }
    if(v2 == '') 
      v2 = 0;
    v = new Number(v2);
    if(maxv != '')
      v = v > maxv ? new Number(maxv) : v;
    if(minv != '')
      v = v < minv ? new Number(minv) : v; 
  
    if(autoCorrect){
      if(elem.value != v.toFixed(dec))
        elem.value = v.toFixed(dec);
      
      if(elem.id){
        this.actValues[elem.id] = elem.value; 
      }
    }
    return v.toFixed(dec);
  },
  validateNIPValue: function(value){
    return (value.length == 10 && __rageHelper.isOnlyNumbersString(value)); 
  },
  validateNIPField: function(elem, autoCorrect){
    var t = __rageHelper.getOnlyNumbersString(elem.value,10);
    if(autoCorrect) elem.value = t;
    return t.length == 10;
  },
  validatePESELValue: function(value){
    if(value.length == 11 && __rageHelper.isOnlyNumbersString(value)){
      var weigths = new Array(1,3,7,9,1,3,7,9,1,3,1);
      var sum = 0;
      for(var i=0; i<11; i++){
        sum += (value.charCodeAt(i) - 48)*weigths[i];
      }
      if(sum%10)
        return false;
      return true;
    }else return false;
  },
  validatePESELField: function(elem, autoCorrect){
    var t = __rageHelper.getOnlyNumbersString(elem.value,11);
    if(autoCorrect) elem.value = t;
    return this.validatePESELValue(t);
  },
  getSexFromPESEL: function(value, male, female){
    if(!male) male = 'M';
    if(!female) female = 'F';
    if(this.validatePESELValue(value)){
      return ((value.charCodeAt(9) - 48)%2) ? male : female;
    }else return false;
  },
  validateEmailValue: function(value){
    var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
    if(reg.test(value) == false) return false;
    return true;
  },
  validateEmailField: function(elem, autoCorrect){ 
    return this.validateEmailValue(elem.value);
  },
  validateIdDocumentValue: function(value, lang_cname){ 
    if(lang_cname == 'pl'){
      if(value.length != 9) return false;
      value = value.toUpperCase();                                  
      for(var i=0; i<3; i++){
        if(value.charCodeAt(i) < 65 || value.charCodeAt(i) > 90)
          return false; 
      }
      for(var i=3; i<9; i++){
        if(value.charCodeAt(i) < 48 || value.charCodeAt(i) > 57)
          return false; 
      }
      var weigths = new Array(7,3,1,0,7,3,1,7,3);
      var sum = 0;
      for(var i=0; i<3; i++){
        sum += (value.charCodeAt(i) - 55)*weigths[i];
      }
      for(var i=4; i<9; i++){ //leave the control number out
        sum += (value.charCodeAt(i) - 48)*weigths[i];
      }
      var controlNumber = ''+sum%10;
      if(value.charCodeAt(3) != controlNumber.charCodeAt(0)) 
        return false;
      return true;
    }else return false;
  },
  validateIdDocumentField: function(elem, lang_cname, autoCorrect){
    return this.validateIdDocumentValue(elem.value, lang_cname);
  }
  //validateIdDocumentField(this,'{$this->__lang_cname}',true)
}

//__rageLib.instances.rageFormValidator = new __rageLib.formLib.validator();
var __rageFormValidator = new __rageLib.formLib.validator();
