var email_state = 0; //0 error ; 1 success ; 2 waiting
var username_state = 0;
var code_state = 0;
$(function(){
	$("#signup").on("focus","input",function(){
		var $this = $(this);
		var span = $this.siblings("span");	
		var tip;
		switch (this.id){
			case "email":
				tip = "请输入正确的邮箱，如：example@example.com。";
				break;
			case "name":
				tip = "2-20个字符，只能包含汉字，数字，英文，“_”或减号。";
				break;
			case "password":
				tip = "密码长度在6~20之间。";
				break;
			case "passwordck":
				tip = "";//重新输入密码
				break;
			case "captcha":
				tip = "";//输入验证码
				break;
		}
		var showTip = function(){
			$this.removeClass("error success");
			if (tip){
				span.attr("class","alert-inline-info");
				span.html(tip).show();
				$this.blur(function(){
					if (span.hasClass("alert-inline-info")){
						span.empty().attr("class","hide");
					}
				})
			}
			else {
				span.hide();
			}
		}
		if (this.value.length==0){
			showTip();
		}
		var orgialValue = $this.val();
		$this.bind('keyup',function(){
			if (orgialValue != $this.val()){
				showTip();
				$this.unbind('keyup');
			}
		})
	})
	.on("change","input",function(){
		var check;
		switch (this.id){
			case "email":
				email_state = 0;
				check = check_email;
				break;
			case "name":
				username_state = 0;
				check = check_username;
				break;
			case "password":
				check = check_password;
				break;
			case "passwordck":
				check = check_confirmpwd;
				break;
			case "captcha":
				code_state = 0;
				check = check_code;
				break;
			case "term":
				check = check_terms;
				break;
		}
		check();
	})
	var form = $("#signup").find("form")
	form.submit(function(e){
	    e.preventDefault();
		var checkFunctions = [//验证函数序列
			function(){
				check_email(oneStep);
			},
			function(){
				check_username(oneStep);
			},
			function(){
				check_password();
				check_confirmpwd();
				check_code(oneStep);
			},
			function(){
				check_terms();
				if (email_state && username_state && code_state && check_password() && check_confirmpwd() && check_terms()){
						form[0].submit();
				}
			}
		]
		form.queue("ck",checkFunctions);//加入队列
		var oneStep = function(){
			form.dequeue("ck");//从队列中取出一个函数执行
		}
		oneStep();
	})
})

var check_terms = function(){
	var elems = $("#term");
    if(elems[0].checked == false){
		$G.alertInput(elems,'error',"要完成注册，你必须接受使用条款。")
        return false
    }
	$G.alertInput(elems,'success','正确');
    return true; 
}

function check_email(fn){

	if (email_state==0){
		var email = $("#email").val();
		var elems = $("#email");
		var reg = /^([a-zA-Z0-9_\.-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/;
		if(email.length<=0){
			$G.alertInput(elems,'error','邮箱不能为空');
			if(fn) fn();
			return;
		}
		if(!reg.test(email)){
			$G.alertInput(elems,'error','邮箱格式不正确');
			if(fn) fn();
			return;
		}
		$.ajax({
			type: "POST",
			url: SITE_URL+"ajax/chkform/r:"+Math.round(Math.random()*1000),
			data: "type=checkemail&postdata="+email,
			success: function(msg){
				if(fn) fn();
				if(msg == "error"){
					$G.alertInput(elems,'error','该邮箱已注册');
					email_state = 0;
				}else if(msg == "ok"){
					$G.alertInput(elems,'success','正确');
					email_state = 1;
				}else{
					$G.alertInput(elems,'error','网络故障');
					email_state = 0;
				}
			}
		});
	} else {
		if(fn) fn();
	}
}

function check_username(fn){
	if (username_state==0){
		var username = $("#name").val();
		var elems = $("#name");
		if(username.length<2||username.length>20)
		{
			if(username.length==0){
				$G.alertInput(elems,'error','用户名不能为空');
			} else if(username.length<2){
				$G.alertInput(elems,'error','用户名不能少于2个字符');
			} else {
				$G.alertInput(elems,'error','用户名不能多于20个字符');
			}
			if(fn) fn();
			return;
		}
		if (/[^a-z一-龥0-9-_]/i.test(username)){
			if (/\s/.test(username)){
				$G.alertInput(elems,'error','用户名不能包含空格');
			}else {
				$G.alertInput(elems,'error','用户名只能包含汉字、字母、数字、英文破折号和下划线');
			}
			if(fn) fn();
			return;
		}
		
		$.ajax({
			type: "POST",
			url: SITE_URL+"ajax/chkform/r:"+Math.round(Math.random()*1000),
			data: "type=checkusername&postdata="+username,
			dataType:"text",
			success: function(msg){
				if(fn) fn();
				if(msg == "error"){
					$G.alertInput(elems,'error','该用户名已注册');
					username_state = 0;
				}else if(msg == "error2"){
					$G.alertInput(elems,'error','用户名含有系统保留字符。');
					username_state = 0;
				}else if(msg == "ok"){
					$G.alertInput(elems,'success','正确');
					username_state = 1;
				}else{
					$G.alertInput(elems,'error','网络故障');
					username_state = 0;
				}
			}
		});
	}else {
		if(fn) fn();
	}
}

function check_password(){
	var password = $("#password").val();
	var elems = $("#password");
	if (password.length<6||password.length>20){
		if (password.length<=0){
			$G.alertInput(elems,'error','密码不能为空');
		} else if (password.length<6){
			$G.alertInput(elems,'error','密码不能少于6位');
		} else {
			$G.alertInput(elems,'error','密码不能多于20位');
		}
		return false;
	}
	$G.alertInput(elems,'success','正确');
	
	var confirmpwd = $("#passwordck").val();
	if (confirmpwd.length>0){
		check_confirmpwd();
	}
	return true;
}

function check_confirmpwd(){
	var confirmpwd = $("#passwordck").val();
	var elems = $("#passwordck");
	var pwd = $("#password").val();
	if(confirmpwd.length<=0)
	{
		$G.alertInput(elems,'error','请输入确认密码');
		return false;
	}
	if(confirmpwd != pwd)
	{
		$G.alertInput(elems,'error','两次输入密码不一致');
		return false;
	}
	$G.alertInput(elems,'success','正确');
	return true;
}

function check_code(fn){
	if (code_state==0){
		var input_code = $("#captcha").val();
		var elems = $("#captcha");
		if(input_code.length!=4)
		{
			if (input_code.length<=0){
				$G.alertInput(elems,'error','请输入验证码');
			}else{
				$G.alertInput(elems,'error','验证码错误');
			}
			if(fn) fn();
			return;
		}
		$.ajax({
			type: "POST",
			url: SITE_URL+"ajax/chkform/r:"+Math.round(Math.random()*1000),
			data: "type=checkcode&postdata="+input_code,
			success: function(msg){
				if(fn) fn();
				if(msg == "error"){
					$G.alertInput(elems,'error','验证码错误');
					code_state = 0;
				}else if(msg == "ok"){
					$G.alertInput(elems,'success','正确');
					code_state = 1;
				}else
				{
					$G.alertInput(elems,'error','网络故障');
					code_state = 0;
				}
			}
		});
	}
	else{
		if(fn) fn();
	}	
}

$G.load_code = function(){
	var img = document.getElementById("codeid");
	img.src = SITE_URL+"authcode/r:"+Math.round(Math.random()*1000);
}


