var __validator = {
  errorMsg : null,
  res : Array(),
  errorIds : Array(),
  init : function(errorMsg){
    __validator.errorMsg = errorMsg;
    __validator.res = Array();
    __validator.errorIds = Array();
  },
  getRes : function(){
    return __validator.res;
  },
  isError : function(){
    var ret = false
    if(__validator.res.length > 0)
      ret = true;
    return ret;
  },
  setError : function(p_id, p_eOffset){
    if(p_eOffset != '')
      __validator.res.push(__validator.errorMsg[p_eOffset]);
    if(p_id != '')
      __validator.errorIds.push(p_id);
  },
  getFirstError : function(){
    return __validator.errorIds[0];
  },
  checkPass : function(p_eOffset, p_id, p_id2, p_minLength){
    var ret = true;
    pass1 = getId(p_id).value;
    pass2 = getId(p_id2).value;
    if(pass1 == ''){
      __validator.setError(p_id, p_eOffset);
      ret = false;
    }else if(pass1 != pass2){
      __validator.setError(p_id, p_eOffset+1);
      ret = false;
    }else if(pass1.length < p_minLength){
      __validator.setError(p_id, p_eOffset+2);
      ret = false;
    }
    return ret;
  },
  checkEmail : function(p_eOffset, p_id){
    var ret = true;
    var email = getId(p_id).value;
    validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
    if (email.search(validRegExp) == -1){
      __validator.setError(p_id, p_eOffset);
      ret = false;
    }
    return ret;
  },
  strLen : function(p_eOffset, p_id, p_minLength, p_maxLenght){
    var ret = true;
    var s = getId(p_id).value;
    if(s.length < p_minLength){
      __validator.setError(p_id, p_eOffset);
      ret = false;
    }else if(s.length > p_maxLenght){
      __validator.setError(p_id, p_eOffset+1);
      ret = false;
		}
		return ret;
  },
  numRange : function(p_eOffset, p_id, p_min, p_max){
    var ret = true;
    var val = getId(p_id).value;
		if(val < p_min){
      __validator.setError(p_id, p_eOffset);
      ret = false;
    }else if(val > p_max){
      __validator.setError(p_id, p_eOffset+1);
      ret = false;
    }else if(val == ''){
      __validator.setError(p_id, p_eOffset+2);
      ret = false;
		}else{
		  n = parseInt(val);
		 	if(!n && n!=0){
	      __validator.setError(p_id, p_eOffset+3);
	      ret = false;
    	}
    }
    return ret;
  },
  isNumeric : function(p_eOffset, p_id){
		var val = getId(p_id).value.split('');
		var n = '0123456789';
		var ret = true;
		if(val.length == 0){
			ret = false;
	    __validator.setError(p_id, p_eOffset);
		}else{
			for(var i=0;i<val.length;i++)
			  if(n.indexOf(val[i]) == -1){
			    ret = false;
		      __validator.setError(p_id, p_eOffset);
			    break;
			  }
		}
		return ret;
	},
  isEmpty : function(p_eOffset, p_x, p_name){
    var ret = false;
    if(p_name != null){
      var p_obj = o.getElementsByName(p_x);
      var c = 0;
      for(var i=0;i<p_obj.length;i++)
        switch(p_obj[i].type){
          case 'radio':
            if(p_obj[i].checked)
              c++;
            break;
          case 'checkbox':
            if(p_obj[i].checked)
              c++;
            break;
        }
			var tagId = p_obj[0].id;
			if(c == 0)
			  ret = true;
    }else{
      var p_obj = getId(p_x);
      var tagId = p_x;
	    switch(p_obj.tagName){
	      case 'SELECT':
			    if(p_obj.options.length > 0)
	    	    if(__validator.trim(p_obj.options[p_obj.selectedIndex].value) == '')
	      	    ret = true;
	        break;
				default:
					if(__validator.trim(p_obj.value) == '')
					  ret = true;
					break;
	    }
		}
    if(ret)
      __validator.setError(tagId, p_eOffset);
		return ret;
  },
  trim : function (str){
  	return str.replace(/^\s*|\s*$/g,"");
  },
  showErrors : function(er, obj){
  	    var trs = obj.getElementsByTagName('TR');
  	    for(var i=0;i<trs.length;i++){
  	      trs[i].className = '';
  	    }
  			for(var i=0;i<er.length;i++){
  			  tag = getId(er[i]).parentNode;
  			  while(tag.tagName != 'TR'){
  			    tag = tag.parentNode;
  			  }
  			  tag.className = 'er_row';
  			}
  	    var error = __validator.getRes();
  	    alert(error.join('\n'));
  	    getId(__validator.getFirstError()).focus();
    		ret = false;
  }
}

