//<![CDATA[
JSoul.$(function(){
    $("#registerForm").initRegisterForm();
});
/***JSoul prototype extend Method [Login Form]***/
JSoul.fn.extend({
    /**
     * 初始化注册表单
     * @return JSoul
     */
    initRegisterForm: function(){
		var infoDic= {};
        var main = this.extend({
            infos: this.find("@span,for,*").each(function(i){
				this.tr = this.parentNode.parentNode;
                infoDic[this.getAttribute("for")] = this;
            }),
			/**
			 * 设置提示信息
			 * @param {Element} elem
			 * @param {String} className
			 * @param {String} info
			 */
			setInfo: function(elem, className, info){
				var infoElem = infoDic[elem.name];
				if(infoElem){
					infoElem.tr.className = className;
					infoElem.innerHTML = info;
				}
			},
			/**
			 * 设置正在进行
			 * @param {Element} elem
			 */
			setLoding: function(elem){
				this.setInfo(elem, "loading", "");
			},
			/**
			 * 设置验证成功
			 * @param {Element} elem
			 */
			setSucceed: function(elem){
				this.setInfo(elem, "succeed", "");
			},
			/**
			 * 设置验证失败
			 * @param {Element} elem
			 * @param {String} info
			 */
			setFailed: function(elem, info){
				this.setInfo(elem, "error", info);
			},
            actBtn: this.find(">act"),
			authImage: this.find("#authImage").extend({
				refresh: function(){
					this.attr("src", this.getAttribute("rel") + "?timetemp=" + new Date());
				}
			}).bindEvent({
				onclick: function(e){
					main.authImage.refresh();
				}
			}),
			vaildInput: this.find(">valid").bindEvent({
				onfocus: function(e){
					if(this.value.trim().length == 0)
						main.authImage.refresh();
				}
			})
        }).bindFormEvent({
			onblur: function(e){
                JSoul.formItemEvent(this, main);
            }
        }).bindEvent({
            onsubmit: function(e){
				for(var key in infoDic){
					if(infoDic[key].tr.className == ""){
						main.setFailed(this[key], "该项为必填项");
						return false;
					}else if(!infoDic[key].tr.className.match("succeed")){
						return false;
					}
				}
				main.actBtn.setDisabled(true);
                return true;
            }
        });
		//解除浏览器默认设置
		this.eachForm(function(elem, i){
			if(elem.name == "valid"){
				elem.value = "";
			}else if(elem.type.match(JSoul.rex.inputs) 
					&& elem.value.trim().length > 0 
					&& infoDic[elem.name].tr.className == ""
					&& elem.onblur){
				elem.onblur();
			}
		});
        main.actBtn.setDisabled(false);
        return this;
    }
});
JSoul.extend({
    /**
     * 表单元素事件处理
     * @param {Element} elem
     * @param {JSoul} main
     * @return Boolean
     */
    formItemEvent: function(elem, main){
        switch (elem.name) {
            case "account":
				return JSoul.accountValid(elem, main);
            case "email":
				return JSoul.emailValid(elem, main);
            case "name":
				return JSoul.nameValid(elem, main);
            case "password":
				return JSoul.pwdVaild(elem, main);
            case "repassword":
				return JSoul.repwdVaild(elem, main);
            case "valid":
                return JSoul.validcodeVaild(elem, main);
            default:
                return true;
        }
    },
    /**
     * 帐号验证
     * @param {Element} elem
     * @param {JSoul} main
     * @return Boolean
     */
	accountValid: function(elem, main){
		var value = elem.value.trim();
		var info = "";
		if(value.length < 5){
			info = "输入的字符长度必须为5-20";
		}else if(value.match(/^[^a-zA-Z]{3}|\W/)){
			info = "帐号仅允许字母、数字、下划线，前三位为字母";
		}else{
			return JSoul.serverVaild(elem, main);
		}
		main.setFailed(elem, info);
		return false;
	},
    /**
     * 邮件验证
     * @param {Element} elem
     * @param {JSoul} main
     * @return Boolean
     */
	emailValid: function(elem, main){
		var value = elem.value.trim();
		var info = "";
		if(!JSoul.rex.mail.test(value.trim())){
			info = "请输入正确的邮件格式";
		}else{
			return JSoul.serverVaild(elem, main);
		}
		main.setFailed(elem, info);
		return false;
	},
    /**
     * 昵称验证
     * @param {Element} elem
     * @param {JSoul} main
     * @return Boolean
     */
	nameValid: function(elem, main){
		var value = elem.value.trim();
		var info = "";
		if(value.length < 2){
			info = "输入的字符长度必须为2-8";
		}else if(!value.match(/^[\u4e00-\u9fa5a-zA-Z0-9]{2,8}$/)){
			info = "昵称仅允许中文、字母、数字";
		}else{
			return JSoul.serverVaild(elem, main);
		}
		main.setFailed(elem, info);
		return false;
	},
    /**
     * 服务器端验证处理
     * @param {Element} elem
     * @param {JSoul} main
     * @return Boolean
     */
	serverVaild: function(elem, main){
		main.setLoding(elem);
		JSoul.$xJson(elem.getAttribute("valid") + "/" + encodeURIComponent(elem.value.trim()), function(json){
			if(json.isSucceed){
				main.setSucceed(elem);
			}else{
				main.setFailed(elem, json.errorInfo);
			}
		}, null);
	},
    /**
     * 验证密码
     * @param {Element} elem
     * @param {JSoul} main
     * @return Boolean
     */
    pwdVaild: function(elem, main){
        var value = elem.value.trim();
		if(value.length < 6 || value.length > 16){
			main.setFailed(elem, "密码由6-16个字符组成");
			return false;
		}
		main.setSucceed(elem);
		JSoul.repwdVaild(elem.form["repassword"], main);
        return true;
    },
    /**
     * 验证重复密码
     * @param {Element} elem
     * @param {JSoul} main
     * @return Boolean
     */
	repwdVaild: function(elem, main){
		if(elem.value.trim() != elem.form["password"].value.trim()){
			main.setFailed(elem, "两次输入的密码不一致");
			return false;
		}
		main.setSucceed(elem);
        return true;
    },
    /**
     * 验证验证码
     * @param {Element} elem
     * @param {JSoul} main
     * @return Boolean
     */
	validcodeVaild: function(elem, main){
		if(!elem.value.trim().match(/^[\d]{1,2}$/)){
			main.setFailed(elem, "请输入正确的验证码");
			return false;
		}else{
			return JSoul.serverVaild(elem, main);
		}
	}
});
//]]>
