Function.registerNamespace( " net.bingosoft.web " );net.bingosoft.web.Validators = function (containers) ... { var _containers = containers ? containers : document.body; var _self = this; var _errmsg = ""; if( !(_containers instanceof Array) )...{ _containers = [_containers]; } this.attach = function()...{ if(arguments.length > 0)...{ _self._attach(arguments[0]); }else...{ _self._attach(_containers); } } this._attach = function(obj)...{ if(!obj)return; if(!(obj instanceof Array))obj = [obj]; for(var i=0; i<obj.length; i++)...{ var container = obj[i]; if(container.validator)...{ container.style.backgroundColor = "#DDEEFF"; _self._attachEvents(container); } if(container.childNodes) for(var j=0; j<container.childNodes.length; j++)...{ var child = container.childNodes[j]; _self._attach(child); } } } this._attachEvents = function(obj)...{ var validatorNames = (obj.validator.trim()).split(/s*,s*/g); var len = validatorNames.length; for(var i = len - 1; i >= 0; i--)...{ var validatorName = validatorNames[i].toLowerCase(); var valiatorTypeName = _self._upperFirstLetter(validatorName) + "Validator"; var namespace = typeof(obj.vnamespace) == 'undefined' ? "net.bingosoft.web" : obj.vnamespace; if(namespace) valiatorTypeName = namespace + "." + valiatorTypeName; var fn = Function.parse(valiatorTypeName); if(!fn) ...{ alert ('can not find validator: ' + valiatorTypeName); }else...{ var validator = new fn(obj, validatorName); var events = validator.getEvents(); if(events)...{ var arrEvents = events.split(/s*,s*/g); for(var j=0; j<arrEvents.length; j++)...{ obj.attachEvent(arrEvents[j], validator._doValidate); } } } } } this._getNamespace = function(obj, validatorName)...{ var ns = validatorName + "_namespace"; if(obj[ns]) return obj[ns]; if(obj.vnamespace) return obj.vnamespace; return "net.bingosoft.web"; } this._check = function(obj)...{ var validatorNames = (obj.validator.trim()).split(/s*,s*/g); var len = validatorNames.length; for(var i = len - 1; i >= 0; i--)...{ var validatorName = validatorNames[i].toLowerCase(); var valiatorTypeName = _self._upperFirstLetter(validatorName) + "Validator"; var namespace = _self._getNamespace(obj, validatorName); if(namespace) valiatorTypeName = namespace + "." + valiatorTypeName; var fn = Function.parse(valiatorTypeName); if(!fn) ...{ alert ('can not find validator: ' + valiatorTypeName); }else...{ var validator = new fn(obj, validatorName); if(!validator._doValidate()) return false; } } return true; } this._upperFirstLetter = function(inputString)...{ if(!inputString) return inputString; var first = inputString.substring(0,1).toUpperCase(); var left = inputString.substring(1); return first + left; } this.validate = function()...{ if(arguments.length > 0)...{ _self._validate(arguments[0]); }else...{ return _self._validate(_containers); } } this._validate = function(obj)...{ if(!obj)return true; if(!(obj instanceof Array))obj = [obj]; for(var i=0; i<obj.length; i++)...{ var container = obj[i]; if(container.validator)...{ if(!_self._check(container)) return false; } if(container.childNodes) for(var j=0; j<container.childNodes.length; j++)...{ var child = container.childNodes[j]; if(!_self._validate(child)) return false; } } return true; }} net.bingosoft.web.Validators.registerSealedClass( " net.bingosoft.web.Validators " , null , null );net.bingosoft.web.Validators._attachBodyReadyState = function () ... { if (document.readyState=="complete") ...{ window.$validator = new net.bingosoft.web.Validators(); window.$validator.attach(); }} document.attachEvent( " onreadystatechange " , net.bingosoft.web.Validators._attachBodyReadyState); // / // {validator}_message // {validator}_namespace // {validator}_events // vmessage // vnamespace // venvents // vrealtime net.bingosoft.web.Validator = function (element, validatorName) ... { net.bingosoft.web.Validator.initializeBase(this); var _element = element; if(!_element) throw new Error("can not found html element!"); if(!validatorName) throw new Error("can not found param 'validatorName'"); if(typeof (_element.validate_next) == 'undefined')...{ _element.validate_next = true;// _element.style.backgroundColor = "blue"; } var _validatorName = validatorName; var _bRealtime = _element.vrealtime ? true : false; var _self = this; this.validate = function()...{ alert('do validate'); return false; } this._doValidate = function()...{ //if(!element.validate_next) return true; var ret = _self.validate(); //element.validate_next = !ret; return ret; } this.getValidatorName = function()...{ return _validatorName; }; net.bingosoft.web.Validator.registerBaseMethod(this, "getValidatorName"); this.getMessage = function()...{ return _element[_self.getValidatorName() + "_message"] ? _element[_self.getValidatorName() + "_message"] : _element["vmessage"] ? _element["vmessage"] : _self.getDefaultMessage(); }; net.bingosoft.web.Validator.registerBaseMethod(this, "getMessage"); this.getDefaultMessage = function()...{ return "error input"; }; net.bingosoft.web.Validator.registerBaseMethod(this, "getDefaultMessage"); // this.getNamespace = function(){// return _element[_self.getValidatorName() + "_namespace"]// ? _element[_self.getValidatorName() + "_namespace"]// : _element["vnamespace"]// ? _element["vnamespace"]// : _self.getDefaultNamespace(); // }; net.bingosoft.web.Validator.registerBaseMethod(this, "getNamespace");// // this.getDefaultNamespace = function(){// return "net.bingosoft.web";// }; net.bingosoft.web.Validator.registerBaseMethod(this, "getDefaultNamespace"); this.getEvents = function()...{ return _element[_self.getValidatorName() + "_events"] ? _element[_self.getValidatorName() + "_events"] : _element["vevents"] ? _element["vevents"] : _self.getDefaultEvents(); }; net.bingosoft.web.Validator.registerBaseMethod(this, "getEvents"); this.getDefaultEvents = function()...{ var events = "onblur"; if(_bRealtime) events = "onblur,onkeypress,onpaste"; return events; }; net.bingosoft.web.Validator.registerBaseMethod(this, "getDefaultEvents"); this.isRealTime = function()...{ return _bRealtime; }; net.bingosoft.web.Validator.registerBaseMethod(this, "isRealTime"); this.getValue = function()...{ return _element.value; }; net.bingosoft.web.Validator.registerBaseMethod(this, "getValue"); this.reportError = function()...{ alert(_self.getMessage()); if(element.focus)element.focus(); if(element.select)element.select(); //element.validate_next = true; }; net.bingosoft.web.Validator.registerBaseMethod(this, "reportError"); //@Override this.toString = function()...{ return "[Validator]"; }} net.bingosoft.web.Validator.registerClass( " net.bingosoft.web.Validator " );net.bingosoft.web.Validator.prototype.toString = function () ... { return "validator";} // / // validator="notempty" net.bingosoft.web.NotemptyValidator = function (element) ... { net.bingosoft.web.NotemptyValidator.initializeBase(this, [element, "notempty"]); var _self = this; //@Override this.validate = function()...{ var value = net.bingosoft.web.NotemptyValidator.callBaseMethod(_self,"getValue"); var passed = value && value.trim(); if( !passed )...{ net.bingosoft.web.NotemptyValidator.callBaseMethod(_self, "reportError"); } return passed; } //@Override this.getDefaultMessage = function()...{ return "can not be empty"; } //@Override this.getDefaultEvents = function()...{ return ""; } //@Override this.toString = function()...{ return "[Notempty Validator]"; } } net.bingosoft.web.NotemptyValidator.registerClass( " net.bingosoft.web.NotemptyValidator " , net.bingosoft.web.Validator, null ); // / // validator="reg" // reg_checktime // reg_realtime net.bingosoft.web.RegValidator = function (element, validatorName, checktimReg, realtimeReg, defaultMsg) ... { net.bingosoft.web.RegValidator.initializeBase(this, [element, validatorName]); var _self = this; var _element = element; var _checktimeReg = checktimReg || _element.reg_checktime; var _realtimeReg = realtimeReg || _element.reg_realtime; var _defaultMsg = defaultMsg; if(!_checktimeReg)...{ alert("reg validator need attribute 'reg_checktime'"); } //@Override this.validate = function()...{ var eventtype = window.event.type; var value = net.bingosoft.web.RegValidator.callBaseMethod(_self, "getValue"); if(eventtype == "keypress")value += String.fromCharCode(window.event.keyCode); if(value=="") return true; var bRealtime = net.bingosoft.web.RegValidator.callBaseMethod(_self, "isRealTime"); if((eventtype == "keypress" || eventtype == "paste") && bRealtime)...{ _element.reg_express = _realtimeReg || _checktimeReg; }else...{ _element.reg_express = _checktimeReg; } var reg = new RegExp(_element.reg_express); var passed = reg.test(value);// alert(passed ? "passed" : "not passed"); if(passed) return passed; if(eventtype == "blur")...{ net.bingosoft.web.RegValidator.callBaseMethod(_self, "reportError"); }else...{ window.event.returnValue = false; } return passed; } //@Override this.getDefaultMessage = function()...{ return _defaultMsg || "not match the regular"; } //@Override this.toString = function()...{ return "[Reg Validator]"; }} net.bingosoft.web.RegValidator.registerClass( " net.bingosoft.web.RegValidator " , net.bingosoft.web.Validator, null ); // / // validator="upper" net.bingosoft.web.UpperValidator = function (element) ... { net.bingosoft.web.UpperValidator.initializeBase(this, [element, "upper"]); var _self = this; //@Override this.validate = function()...{ var eventtype = window.event.type; var value = net.bingosoft.web.RegValidator.callBaseMethod(_self, "getValue"); if(eventtype == "paste")...{ var tempStr = window.clipboardData.getData("Text").toUpperCase(); window.clipboardData.setData("Text",tempStr); }else if(eventtype=="keypress")...{ var keyCode = window.event.keyCode; if (keyCode >= 97 && keyCode <= 122) window.event.keyCode = keyCode - 32; } return true; } //@Override this.getDefaultEvents = function()...{ return "onblur,onkeypress,onpaste"; }} ;net.bingosoft.web.UpperValidator.registerClass( " net.bingosoft.web.UpperValidator " , net.bingosoft.web.Validator, null ); // / // validator="lower" net.bingosoft.web.LowerValidator = function (element) ... { net.bingosoft.web.LowerValidator.initializeBase(this, [element, "upper"]); var _self = this; //@Override this.validate = function()...{ var eventtype = window.event.type; var value = net.bingosoft.web.RegValidator.callBaseMethod(_self, "getValue"); if(eventtype == "paste")...{ var tempStr = window.clipboardData.getData("Text").toLowerCase(); window.clipboardData.setData("Text",tempStr); }else if(eventtype=="keypress")...{ var keyCode = window.event.keyCode; if (keyCode >= 65 && keyCode <= 90) window.event.keyCode = keyCode + 32; } return true; } //@Override this.getDefaultEvents = function()...{ return "onblur,onkeypress,onpaste"; }} ;net.bingosoft.web.LowerValidator.registerClass( " net.bingosoft.web.LowerValidator " , net.bingosoft.web.Validator, null ); // / net.bingosoft.web.NumberValidator = function (element) ... { net.bingosoft.web.NumberValidator.initializeBase(this, [element, "number", "^/d+$", "^/d*$", "you should input a number"]);} ;net.bingosoft.web.NumberValidator.registerClass( " net.bingosoft.web.NumberValidator " , net.bingosoft.web.RegValidator, null ); // / net.bingosoft.web.EmailValidator = function (element) ... { net.bingosoft.web.EmailValidator.initializeBase(this, [element, "email", "^[/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+$", "^(([/w-]+(/.[/w-]+)*@?)|([/w-]+(/.[/w-]+)*@[/w-]+)|([/w-]+(/.[/w-]+)*@([/w-]+/.)+)|([/w-]+(/.[/w-]+)*@[/w-]+(/.[/w-]+)+))$", "email format error"]);} ;net.bingosoft.web.EmailValidator.registerClass( " net.bingosoft.web.EmailValidator " , net.bingosoft.web.RegValidator, null );