
function isBlank(A){
    return A.replace(/\s+/g, "").length == 0;
}
(function(B){
    function A(){
        var F = jQuery("#signup-form");
        var E = F.find("input, password");
        var D = F.hasClass("validated-by-backend");
        //F.find("#user_name").isNicknameField();        
        F.find("#user_screen_name").isScreenNameField();
        F.find("#user_email").isEmailField();
        F.find("#user_user_password").isSignupFormField({        	
            allowInput: /[^\s]/
        }).focus(function(){
            B(this).trigger("show-password-meter");
        }).isPasswordStrengthField("#password-meter", {
            username: function(){
                return F.find("#user_screen_name").val();
            }
        });
        F.find("#ruser_user_password").isSignupFormField({
        	validateWith: function(re_pas){
        		var pas = F.find("#user_user_password").val();
        		return (pas==re_pas)?true:_("两次密码必须一致");			
    		},
            allowInput: /[^\s]/
        });
        if (D) {
            E.trigger("align-validation");
        }
        var C = F.find(".fieldWithErrors:eq(0) input");
        if (C.length > 0) {
            C.focus();
        }
        else {
            F.find("#user_screen_name").focus();
        }
		//$('#user_screen_name_info').show();
    }
    B(document).ready(A);
})(jQuery);
(function(A){
    A.fn.isNicknameField = function(){
        return this.each(function(){
            var C = null;
            var F = A(this);
            var D = A("#nickname_info");
            var G = A("#avail_nickname_check_indicator");
			$(':hidden[name=isok_nickname]').val(2);
            function E(){
                F.trigger("show-info");
                D.hide();
                G.show()
            }
            function H(){
                D.show();
                G.hide()
            }
            function B(){
                var I = F.val();
                if (!C || I.match(C)) {
                    jQuery.ajax({
                        type: "GET",
                        url: "/ajax/check_name.php",
                        data: {
                    		name: I
                        },
                        dataType: "json",
                        beforeSend: function(){
                            E()
                        },
                        success: function(J){
                            var K = J.msg;
                            if (J.valid) {
								$(':hidden[name=isok_nickname]').val(1);	
                                F.trigger("is-valid", K);
                            }
                            else {
								if(J.msg !=''){									
									$(':hidden[name=isok_nickname]').val(2);									
								}
                                F.trigger("is-invalid", J.msg)
                            }
                        },
                        beforeSend: null,
                        complete: function(){
                            H()
                        }
                    })
                }
                else {
					$(':hidden[name=isok_nickname]').val(2);	
                    F.trigger("is-invalid", _("不能为空,长度不能超过6个汉字"))
                }
            }
            F.isSignupFormField({
                validateWith: function(G){
    				var len = G.length;
    				if(len > 6 || len < 2){
    					return _("不能为空,长度不能超过6个汉字")
    				}
    				return isBlank(G) ? _("不能为空,长度不能超过6个汉字") : true;
                } 
            });
            F.bind("value-changed", B);
            F.bind("custom-validate", B)
        })
    }
})(jQuery);
(function(A){
    A.fn.isEmailField = function(){
        return this.each(function(){
            var C = /.+@.+\..+/;
            var F = A(this);
            var D = A("#email_info");
            var G = A("#avail_email_check_indicator");
			$(':hidden[name=isok_mail]').val(2);
            function E(){
                F.trigger("show-info");
                D.hide();
                G.show()
            }
            function H(){
                D.show();
                G.hide()
            }
            function B(){
                var I = F.val();
                if (I.match(C)) {
                    jQuery.ajax({
                        type: "GET",
                        url: "/ajax/email_available.php",
                        data: {
                            email: I
                        },
                        dataType: "json",
                        beforeSend: function(){
                            E()
                        },
                        success: function(J){
                            var K = J.msg;
                            if (J.valid) {
								$(':hidden[name=isok_mail]').val(1);	
                                F.trigger("is-valid")
                            }
                            else {
								if(J.msg =='此邮箱已经被占用。'){									
									$(':hidden[name=isok_mail]').val(2);									
								}
                                F.trigger("is-invalid", J.msg)
                            }
                        },
                        beforeSend: null,
                        complete: function(){
                            H()
                        }
                    })
                }
                else {
								
					$(':hidden[name=isok_mail]').val(2);	
                    F.trigger("is-invalid", _("邮箱格式错误！"))
                }
            }
            F.isSignupFormField({
                validateWith: function(I){
                    if (isBlank(I)) {
                        return _("请输入邮件地址！")
                    }
                    else {
                        if (!I.match(C)) {
                            return _("邮箱格式错误！")
                        }
                    }
                },
                allowInput: /[^\s]/
            });
            F.bind("value-changed", B);
            F.bind("custom-validate", B)
        })
    }
})(jQuery);
(function(A){
    A.fn.isScreenNameField = function(){
        return this.each(function(){
            var M = A(this);
            var F = A("#signup_username_url");
            var E = A("#screen_name_info");
            var D = A("#avail_screenname_check_indicator");
            var O;
            var C;
            var I;
            var N = M.val();
            var G = N;
            var H = N != "";
            var Q = /[a-zA-Z0-9_]/;
			$(':hidden[name=isok_uname]').val(2);
            function K(){

                if (H) {
                    F.html(M.val())
                }
            }
            function L(){
                M.trigger("show-info");
                E.hide();
                D.show()
            }
            function B(){
                E.show();
                D.hide()
            }
            function P(){
                G = O;
                jQuery.ajax({
                    type: "GET",
                    url: "/ajax/username_available.php",
                    data: {
                        username: O
                    },
                    dataType: "json",
                    success: function(R){
                        if (C) {
                            var S = R.msg;
                            if (R.valid) {
								$(':hidden[name=isok_uname]').val(1);				
                                M.trigger("is-valid", "您的个人网址将是:http://tongxue.com/"+O);
                                F.removeClass("invalid").addClass("valid")
                            }
                            else {
								if(R.msg =='此账号已被占用'){									
									$(':hidden[name=isok_uname]').val(2);									
								}
                                M.trigger("is-invalid", R.msg);
                                F.addClass("invalid").removeClass("valid")
                            }
                        }else{
								$(':hidden[name=isok_uname]').val(2);
						        M.trigger("is-invalid", R.msg);
                                F.addClass("invalid").removeClass("valid")
						}
                    },
                    beforeSend: null,
                    complete: function(){
                        clearTimeout(twttr.timeouts.availabilityTimeout);
                        B()
                    }
                })
            }
            function J(R){
                O = M.val();
                clearTimeout(twttr.timeouts.availabilityTimeout);
                //jgw  edite: sorry, i am not good at js,no way,only by this...
               // C = O.match(Q);
                C = true;
                //edit  over
                if (!C) {
                    G = O;
                    B();
                    return
                }
                if (O == ''){
                	$(':hidden[name=isok_uname]').val(2);
			        M.trigger("is-invalid", "请输入个人网址");
                    F.addClass("invalid").removeClass("valid")
                }
                if (O == G) {
                    return
                }
                L();
                twttr.timeouts.availabilityTimeout = setTimeout(P, 700)
            }
            M.isSignupFormField({
                validateWith: function(R){
                    if (isBlank(R)) {
                        return _("请输入个人网址")
                    }
                },
                allowInput: Q
            });
            M.blur(function(R){
                if (jQuery.inArray(R.keyCode, [16, 17, 18, 20, 27, 33, 34, 35, 37, 38, 39, 40, 144]) == -1) {
                    if (M.val() != "") {
                        H = true
                    }
                    else {
                        M.trigger("show-info")
                    }
                    K();
                    J()
                }
            });
            //M.bind("value-changed", P);
            M.bind("custom-validate", P)
        })
    }
})(jQuery);
(function(A){
    A.fn.isSignupFormField = function(B){
        return this.each(function(){
            var K = A(this);
            var U = K.parents("tr:eq(0)");			
            var T = this;
            var F = U.find(".label-box");
            var D = U.find(".label-box.info");
            var V = U.find(".label-box.good");
            var L = U.find(".label-box.error");
            var E = D;
            var Q = false;
            var G = K.val();
            var J = G != "";
            var I = K.parent("div.fieldWithErrors").length > 0;
            var P = B.validateWith;
            var N = B.allowInput;
			var ajax_sep = null;
            function M(){
                E.show();
                K.addClass("with-box")
            }
            function X(){
                if (!Q) {
                    E.hide();
                    K.removeClass("with-box")
                }
            }
            function W(a){
                F.hide();
                E = a;
                M()
            }
            function H(){
                var a = K.val();
                J = (a != G);
                if (J) {
                    I = false
                }
                G = a;
                return J
            }
            function R(){
                Q = true;
                W(D)
            }
            function Z(){
                Q = true;
                W(L)
            }
            function Y(){
                Q = true;
                W(V)
            }
            function S(a){
                return P ? P(a) : true
            }
            function O(){
                if (I) {
                    K.trigger("is-invalid")
                }
                else {
                    if (J) {
                        var a = S(K.val());
                        if (a === true) {
                            K.trigger("is-valid")
                        }
                        else {
                            if (typeof(a) == "string") {
                                K.trigger("is-invalid", a)
                            }
                        }
                    }
                }
            }
            function C(){
                if (I) {
                    K.trigger("is-invalid")
                }
                else {
                    K.trigger("is-valid")
                }
            }
			function key(){
				K.trigger("value-changed");
			}
            K.focus(M);
            K.blur(function(){
                if (H()) {
                    K.trigger("value-changed");
                    O();
                }else{
					if (K.val()=='')
					{
						Z();
					}
                }
                X();
            });
            K.bind("is-valid", function(b, a){
            	if (a) {
            		V.html(a);
            	}
            	Y();	
            });
			K.keyup(function(){
				return;
				if (ajax_sep)
				{
					clearTimeout(ajax_sep);
				}
				ajax_sep = setTimeout(key, 700);
			});
            K.bind("is-invalid", Z);
            K.bind("show-info", R);
            K.bind("validate", O);
            K.bind("align-validation", C);
            K.bind("is-invalid", function(b, a){
                if (a) {
                    L.html(a)
                }
            });
            if (N) {
                K.keypress(function(b){
                    var a = b.which;
                    var c = String.fromCharCode(a);
                    return !!(a == 0 || a == 8 || a == 9 || a == 13 || c.match(N))
                })
            }
            F.hide()
        })
    }
})(jQuery);
$(document).ready(function(){
	$("#isok_code").val(2);
	$("#verify_code").bind("blur", function(event){
		ajax_code(event);
	});
	var key_code_ajax = null;
	$("#verify_code").bind("keyup", function(event){
		if (key_code_ajax)
		{
			clearTimeout(key_code_ajax);
		}
		key_code_ajax = setTimeout(ajax_code, 700);
	});
	$("#user_name").bind("blur", function(event){
		valid_nickname('blur');
	}).focus(function(event){
		valid_nickname('focus');
	});
});
String.prototype.byteLength=function(){
	var str = this;
	if(typeof str=="undefined"){
		return 0;
	}
	var aMatch=str.match(/[^\x00-\x80]/g);
	return(str.length+(!aMatch?0:aMatch.length));
};
var checkinfo = {
	"M01100":"请用4~20个字符的中文或者字母,不要含有空格",
	"M01101":"请输入4个字符两个汉字以上的昵称",
	"M01102":"昵称不能超过20个字母或10个汉字",
	"M01103":"昵称不能全是数字",
	"M01104":"昵称已经存在，请更换一个。",
	"M01105":"含有非法字符，请修改"		
};
var checkFunction={
	"M01100":function(el){if(el.value){return true}else{return false}},
	"M01101":function(el){var lens=el.lens;if(lens>=4){return true}else{return false}},
	"M01102":function(el){var lens=el.lens;if(lens<=20||lens==0){return true}else{return false}},
	"M01103":function(el){var lens=el.lens;if(!/^[0-9]*$/.test(el.value)||lens==0){return true}else{return false}},
	"M01104":function(el){},
	"M01105":function(el){if(/^[a-zA-Z0-9\u4e00-\u9fa5]*$/.test(el.value)||el.lens==0){return true}else{return false}}
};
function valid_base(el, funct){
	var i;
	var tip='';
	for(i=0;i<funct.length;i++) {
		if (!checkFunction[funct[i]](el)){
			tip = checkinfo[funct[i]];			
			break;
		}
	}
	return tip;
}
function valid_nickname(info_type){
	var value = $('#user_name').val();
	var isok = $("#isok_nickname");
	var tip, info;
	$("#user_name").parents("tr:eq(0)").find(".label-box").hide();
	isok.val(2);
	value=$.trim(value);
	var length = value.byteLength();//获得长度
	el = {value:value, "lens":length};
	var valid_info_func = ["M01100"]; //info的函数
	var valid_erro_func = ["M01101", "M01102", "M01103", "M01105"]; //error的函数
	if (info_type!='blur'){
		info = valid_base(el, valid_info_func);
		if (info!='') {
			$("#user_name").parents("tr:eq(0)").find(".info").html(info).show();
			return ;      
		}
	}	
	tip = valid_base(el, valid_erro_func);	
	if (tip!='') {
		$("#user_name").parents("tr:eq(0)").find(".error").html(tip).show();
		return ;      
	}
	if (info_type=='blur'){
		ajax_nickname(value);
	}
	function ajax_nickname(value){
		$.ajax({
			"url":"/ajax/check_name.php",
			type: "GET",
			data: {
				"name":value
			},
			dataType: "json",
			ajaxStart:function(){
				$("#avail_nickname_check_indicator").show();
			},
			success: function(R){
				$("#user_name").parents("tr:eq(0)").find('.label-box').hide();
				$("#avail_nickname_check_indicator").hide();
				if (R.valid){
					isok.val(1);
					$("#user_name").parents("tr:eq(0)").find('.good').html(R.msg).show();
				}else{
					$("#user_name").parents("tr:eq(0)").find('.error').html(R.msg).show();
				}
			}
		});
	}	
}
function ajax_code(){
	var code = $('#verify_code').val();
	var key = $('#verify_code_key').val();
	var isok = $("#isok_code");
	$("#verify_code").parents("tr:eq(0)").find(".label-box").hide();
	isok.val(2);
	if (code==""){
		$("#verify_code").parents("tr:eq(0)").find('.error').html("验证码不能为空").show();
		return ;
	}
	$.ajax({
		"url":"/ajax/check_code.php",
		type: "GET",
		'async':false,
		data: {
			verify_code: code,
			verify_code_key:key
		},
		dataType: "json",
		ajaxStart:function(){
			$("#avail_code_check_indicator").show();
		},
		success: function(R){
			$("#verify_code").parents("tr:eq(0)").find('.label-box').hide();
			$("#avail_code_check_indicator").hide();
			if (R.valid){
				isok.val(1);
				$("#verify_code").parents("tr:eq(0)").find('.good').html(R.msg).show();
			}else{	        		
				$("#verify_code").parents("tr:eq(0)").find('.error').html(R.msg).show();
			}
		}
	});	
}