var mailRegex = /^\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,6}$/;
var loginIdRegex = /^[a-zA-Z0-9\u4e00-\u9fa5][\.\-\w\u4e00-\u9fa5]*[a-zA-Z0-9\u4e00-\u9fa5]$/;
var nickNameRegex = /^\d+$/;
var tips = {
	loginId : "由6~20位的中英文、数字、下划线、减号或点组成。以中英文或数字开头和结尾。",
	pwd : "由6~20个英文字母、数字或符号组成。",
	pwd_ : "请再填写一遍您上面填写的登录密码。",
	msn : "请输入您的MSN帐号。",
	msnPwd : "请输入您的MSN密码，MSN密码由6~20个英文字母、数字或符号组成。",
	jcaptcha : "请输入右侧数字。点击图片刷新。",
	jcaptchac : "点击图片刷新。",
	email : "你的邮箱将用于接受活动中奖信息等用途，请确保邮箱有效。",
	nickname : "由1~10个英文字母、数字、符号或1~5个汉字组成。",
	rFrom : "推荐人的通行证，必须是已经存在的小ｉ通行证用户。",
	commLoginForm_loginid_null : "请输入小ｉ通行证帐号！",
	commLoginForm_pwd_null : "请输入小ｉ通行证密码！",
	commLoginForm_pwd_invalid : "您输入的密码长度不合法！",
	commMsnLoginForm_loginid_null : "请输入您的MSN帐号！",
	commMsnLoginForm_loginid_invalid : "您输入的MSN帐号格式错误！",
	commMsnLoginForm_pwd_null : "请输入您的MSN密码！",
	commMsnLoginForm_pwd_invalid : "您输入的密码长度不合法！"
}
var msgMap = {
	err : "<div class=\"err\">%text</div>",
	pass : "<div class=\"pass\">&nbsp</div>",
	warn : "<div class=\"warn\">%text</div>",
	tip : "<div class=\"tip\">%text</div>"
}
var loginUrl = {
	"n" : "http://passport.xiaoi.com/login/index.do",
	"y" : "http://happy.xiaoi.com"
}

var pwdUrl = "http://passport.xiaoi.com/pwd/index.do";

$(document).ready(function() {
			$("a").each(function() {
						$(this).focus(function() {
									$(this).blur();
								});
					});
		})

function valLoginId() {
	var loginId = $('#loginId').val();
	var length = $.trim(loginId).length;
	if (length == 0) {
		appendMsg("loginIdTd", "请输入您要使用的用户名！");
	} else if (length > 20 || length < 3) {
		appendMsg("loginIdTd", "您输入的用户名长度不合法！");
	} else if (!loginId.match(loginIdRegex)) {
		appendMsg("loginIdTd", "您输入的格式错误，请按提示重新输入！");
	} else {
		if (!loginId.match(mailRegex)) {
			$.post('/val/loginId.do', {
						"loginId" : loginId
					}, function(rs) {
						if (rs == '2') {
							appendMsg(
									"loginIdTd",
									"您输入的用户名已经存在，请重新输入或尝试 <a href='"
											+ getLoginUrl()
											+ getUrlParam()
											+ "'' style='color: blue'>登录</a>、<a href='"
											+ getPwdUrl()
											+ "' style='color: blue'>获取密码</a>！");
						} else if (rs == '3' || rs == '5') {
							appendMsg("loginIdTd", "您输入的用户名不合法！注：一个中文字占两个字符");
						} else if (rs == "4") {
							appendMsg("loginIdTd", "您输入的用户名长度不合法！");
						} else if (rs == "1") {
							appendMsg("loginIdTd", "请输入您要使用的用户名！");
						} else if (rs == "6") {
							appendMsg("loginIdTd", "您输入的用户名中含有非法字符，请重新输入！");
						} else {
							appendMsg("loginIdTd", "", "pass");
						}
					});
		} else {
			appendMsg("loginIdTd", "您输入的格式错误！");
		}
	}
}

function valPwd() {
	var pwd = $.trim($('#pwd').val());
	if (pwd.length == 0) {
		appendMsg("pwdTd", "请输入密码！");
	} else if (pwd.length < 6 || pwd.length > 20) {
		appendMsg("pwdTd", "您输入的密码长度不合法！");
	} else {
		appendMsg("pwdTd", "", "pass");
	}
}

function valRepeatPwd() {
	var pwd = $.trim($('#pwd').val());
	var repeatPwd = $.trim($('#pwd_').val());
	if (pwd.length != 0) {
		if (pwd != repeatPwd) {
			appendMsg("pwd_Td", "您两次密码输入不一致，请重新输入！");
		} else {
			appendMsg("pwd_Td", "", "pass");
		}
	} else {
		removeTips("pwd_Td");
	}
}

function valCaptcha() {
	var jcaptchaResponse = $('#jcaptchaResponse').val();
	if (jcaptchaResponse.length == 0) {
		appendMsg("jcaptchaTd", "请您输入验证码！");
	} else {
		$.post('/val/captcha.do', {
					"jcaptchaResponse" : jcaptchaResponse
				}, function(rs) {
					if (rs == '0') {
						appendMsg("jcaptchaTd", "", "pass");
					} else {
						refresh();
						appendMsg("jcaptchaTd", "验证码不正确,请重新输入！");
					}
				});
	}
}

function refresh() {
	var mydate = new Date();
	setTimeout(function() {
				$('#registryJcaptcha').attr(
						'src',
						'/JcaptchaServlet?for=registry&_version='
								+ mydate.getTime());
			}, 0);
	$("#jcaptchaResponse").val("");
	removeTips("jcaptchaTd");
	return false;
}

function valEMail() {
	var email = $.trim($('#email').val());
	var length = email.length;
	if (length > 0 && length <= 100) {
		if (email.match(mailRegex)) {
			$.post('/val/email.do', {
						"email" : email
					}, function(rs) {
						if (rs == '3') {
							appendMsg("emailTd", "您输入的格式错误，请按提示重新输入！");
						} else if (rs == '2') {
							appendMsg(
									"emailTd",
									"注册邮箱已用于其它小ｉ通行证帐户。您可以尝试使用该账户 <a href='"
											+ getLoginUrl()
											+ getUrlParam()
											+ "' style='color: blue'>登录</a> 或 <a href='"
											+ getPwdUrl()
											+ "' style='color: blue'>获取密码</a>！",
									"warn");
						} else if (rs == '0') {
							appendMsg("emailTd", "", "pass");
						}
					});
		} else {
			appendMsg("emailTd", "您输入的格式错误，请重新输入！");
		}
	} else if (length > 100) {
		appendMsg("emailTd", "您输入的邮箱的过长！");
	} else {
		removeTips('emailTd');
	}
}

function valNickname() {
	var nickname = $.trim($('#nickname').val());
	var length = nickname.length;
	if (length == 0) {
		appendMsg("nicknameTd", "请输入您要使用的昵称！");
	} else if (length > 10) {
		appendMsg("nicknameTd", "您输入的昵称的过长！");
	} else if (nickname.match(nickNameRegex)) {
		appendMsg("nicknameTd", "您输入的昵称中含有非法字符，请重新输入！");
	} else {
		$.post('/val/nickname.do', {
					"nickname" : nickname
				}, function(rs) {
					if (rs == '0') {
						appendMsg("nicknameTd", "", "pass");
					} else if (rs == '1') {
						appendMsg("nicknameTd", "请输入您要使用的昵称！");
					} else if (rs == '2') {
						appendMsg("nicknameTd", "你输入的昵称已存在,请重新输入！");
					} else if (rs == '6') {
						appendMsg("nicknameTd", "您输入的昵称中含有非法字符，请重新输入！");
					} else if (rs == '4') {
						appendMsg("nicknameTd", "您输入的昵称的过长！");
					}
				});
	}
}

function valRule(id) {
	if (!$("#" + id).attr("checked")) {
		alert("请您认真阅读并同意遵守服务条款再提交！");
		return false;
	}
	return true;
}

function valRFrom() {
	removeTips('rFromTd');
}

function valMsnPwd() {
	var pwd = $.trim($('#msnPwd').val());
	if (pwd.length == 0) {
		appendMsg("msnPwdTd", "请输入您的MSN密码！");
	} else if (pwd.length < 6 || pwd.length > 20) {
		appendMsg("msnPwdTd", "您输入的密码长度不合法！");
	} else {
		removeTips('msnPwdTd');
	}
}

function valMsn() {
	var msn = $.trim($("#msn").val());
	if (msn.length == 0) {
		appendMsg("msnTd", "请输入您的MSN帐号！");
	} else if (!msn.match(mailRegex)) {
		appendMsg("msnTd", "您输入的MSN帐号格式错误！");
	} else {
		removeTips('msnTd');
	}
}

function valMsnForm() {
	removeErr("msn");
	valMsn();
	valMsnPwd();
	return valRule('box1') && $("#msnForm .err").size() == 0 ? true : false;
}

function valForm(id) {
	removeErr("loginId");
	valLoginId();
	valEMail();
	valNickname();
	valCaptcha(true);
	valPwd();
	valRepeatPwd();
	valRFrom();
	return valRule('box2') && $("#form .err").size() == 0 ? true : false;
}

function isEnter(event, obj) {
	var keyCode = event.keyCode ? event.keyCode : event.which
			? event.which
			: event.charCode;
	if (keyCode == 13) {
		obj.blur();
	}
}

function appendMsg(id, msg, type) {
	if (id) {
		removeTips(id);
		$('#' + id).append(msgMap[type || 'err'].replace("%text", msg));
	}
}

function showTB(id) {
	var obj = $("#" + id);
	if (obj) {
		if (obj.css("display") == "none") {
			obj.show();
		} else {
			obj.hide();
		}
	}
}

function showTips(id) {
	if (id) {
		removeErr(id);
		$("#" + id + "Td").find("div").remove().end().append(msgMap['tip']
				.replace("%text", tips[id]));
	}
}

function removeTips(id) {
	if (id) {
		$('#' + id + " div").remove();
	}
}

function removeErr(id) {
	if ($("#msnForm :input[id='" + id + "']:not(:hidden)").length > 0) {
		$("#form .err").each(function() {
					$(this).remove();
				});
		focusBg("step1Div");
	} else {
		$("#msnForm .err").each(function() {
					$(this).remove();
				});
		focusBg("step2Div");
	}
}

// background: #eeeeff;
// border: 1px solid #ccccee;
function focusBg(id) {
	var step1 = $("#step1Div");
	var step2 = $("#step2Div");
	if (id == 'step1Div') {
		step1.css({
					"background" : "#eeeeff",
					"border" : "1px solid #ccccee"
				});
		step2.css({
					"background" : "",
					"border" : ""
				});
	} else {
		step1.css({
					"background" : "",
					"border" : ""
				});
		step2.css({
					"background" : "#eeeeff",
					"border" : "1px solid #ccccee"
				});
	}
}

function getUrlParam() {
	var aid = $.trim($("#aid").val());
	var key = $.trim($("#key").val());
	var community = $.trim($("#community").val());
	var reme = $.trim($("#reme").val());
	var fd = $.trim($("#fd").val());
	var rFrom = $.trim($("#rFrom").val());
	var rtype = $.trim($("#rtype").val());
	var params = "?aid=%aid&key=%key&community=%community&reme=%reme&fd=%fd&rFrom=%rFrom&rtype=%rtype";
	return params.replace("%aid", aid.length > 0 ? aid : "def").replace("%key",
			key.length > 0 ? key : "def").replace("%community",
			community.length > 0 ? community : "def").replace("%reme",
			reme.length > 0 ? reme : "def").replace("%fd",
			fd.length > 0 ? encodeURIComponent(fd) : "").replace("%rFrom",
			rFrom.length > 0 ? encodeURIComponent(rFrom) : "").replace(
			"%rtype", rtype.length > 0 ? rtype : "");
}

function getLoginUrl() {
	var community = $.trim($("#community").val());
	return community.length > 0 && (community == 'y' || community == "Y")
			? loginUrl['y']
			: loginUrl['n']
}

function getPwdUrl() {
	var community = $.trim($("#community").val());
	return pwdUrl
			+ (community.length > 0 && (community == 'y' || community == "Y")
					? "?community=y"
					: "");
}

function checkCommLogin(id, needMailCheck) {
	var loginId = $.trim($("#" + id + " input[name='loginId']").val());
	var pwd = $.trim($("#" + id + " input[name='pwd']").val());
	if (loginId.length == 0) {
		alert(tips[id + "_loginid_null"]);
		return false;
	} else if (needMailCheck && !loginId.match(mailRegex)) {
		alert(tips[id + "_loginid_invalid"]);
		return false;
	}
	if (pwd.length == 0) {
		alert(tips[id + "_pwd_null"]);
		return false;
	} else if (pwd.length < 6 || pwd.length > 20) {
		alert(tips[id + "_pwd_invalid"]);
		return false;
	}
	return true;
}

function showMsnLogin() {
	$("#msnLoginDiv").toggle();
}

function stopEvent(obj, evt) {
	var e = (evt) ? evt : window.event;
	if (window.event) {
		e.cancelBubble = true;
	} else {
		e.stopPropagation();
	}
}