/**
 * 快速注册JS验证类
 *
 * @auther D.Y <dongyong@linekong.com>
 * 
 * @Date 2010-07-19
 *
 */

var Reg = function () {
	
	/**
	 * 提示颜色
	 * 
	 */
	// 警告颜色
	this.color1 = 'red';
	// 正常颜色
	this.color2 = 'blue';
	
	/**
	 * 输出目标
	 *
	 */
	this.target = null;
	
	/**
	 * Ajax输出目标
	 *
	 */
	this.ptarget = null;
	
	/**
	 * Loading Element
	 *
	 */
	this.loading = null;
	
	/**
	 * 表单对象
	 *
	 */
	this.form = '';
	
	/**
	 * 是否使用系统alert提示信息
	 *
	 */
	this.isSYS = false;
	
	/**
	 * 提交状态
	 *
	 */
	this.is_submit = false;
	
	this.passport_state = false;
	
	/**
	 * 回调方法
	 *
	 */
	this.callback;
	
	this.passportName = '';
	
};

/**
 * 中文字符长度
 *
 */
String.prototype.getBytes = function() {    
    var cArr = this.match(/[^\x00-\xff]/ig);    
    return this.length + (cArr == null ? 0 : cArr.length);    
}

/**
 * 获取对象
 *
 */
Reg.prototype.$ = function(id) {
	return document.getElementById(id);
}

/**
 * 声明Ajax
 *
 */
Reg.prototype.ajax = new Ajax();

/**
 * 悬浮提示
 *
 */
Reg.prototype.tips = function(obj, txt) {

	obj.style.position = "relative";

	var tips = document.createElement('div');
	tips.id = obj.name + "_tips";
	tips.style.position = "absolute";
	tips.style.float = "left";
	tips.style.fontSize = "12px";
	tips.style.background = "#99FFFF";
	tips.style.border = "1px solid #0066CC";
	tips.style.padding = "6px 6px 3px 6px";
	tips.style.top = (obj.offsetTop + 10) + "px";
	tips.style.left = (obj.offsetLeft + obj.offsetWidth - 10) + "px";
	tips.innerHTML = txt;

	document.body.appendChild(tips);

}

/**
 * 验证操作
 *
 */
Reg.prototype.check = function(input, target) {

	if(this.$(input.name + "_tips") != null) {
		document.body.removeChild(this.$(input.name + "_tips"));
	}
	
	this.target = this.$(target);
	
	this.ptarget = null;

	this.form = this.get_parent_form(input)

	//验证通行证
	if(input.name == 'passportName') {
		
		this.ptarget = this.$(target);

		var regex = /^[A-Za-z0-9.@_-]*$/;
		if(!regex.test(input.value)) {
			return this.alert("通行证内含非法字符", true);
		}

		var regex = /^lk/;
		if(regex.test(input.value.toLowerCase())) {
			return this.alert("不能以‘LK’开头", true);
		}

		var regex = /^[A-Za-z0-9]/;
		if(!regex.test(input.value)) {	
			return this.alert("通行证必须以字母或数字开头", true);
		}

		if(input.value.length < 6){
			return this.alert("通行证不能少于6位", true);
		}

		if(input.value.length > 31){
			return this.alert("通行证不能大于31位", true);
		}
		
		this.ajax_check(input.value);

		return true;

	//验证密码
	}else if(input.name == 'passportPswd') {

		var regex = /^[\x00-\x19\x21-\x7f]*$/;
		if(!regex.test(input.value)) {	
			return this.alert("密码内含非法字符", true);
		}

		var gameid = '';
		gameid = document.getElementById('gameId').value;
		if(gameid != 16){
			var regex = /([A-Za-z]+[\x00-\x19\x21-\x7f]*[0-9]+)|([0-9]+[\x00-\x19\x21-\x7f]*[A-Za-z]+)/;
			if(!regex.test(input.value)) {
				return this.alert("密码必须含有字母和数字", true);
			}
		}

		if(input.value.length < 6){
			return this.alert("密码不能少于6位", true);
		}

		if(input.value.length > 31){
			return this.alert("密码不能大于31位", true);
		}

		var level = 0;

		if (input.value.match(/[a-z]/ig)){
			level++;
		}

		if (input.value.match(/[0-9]/ig)){
			level++;
		}

		if (input.value.match(/(.[^a-z0-9])/ig)){
			level++;
		}

		switch(level) {

			case 1 : 
				this.alert('密码比较简单，但可以注册', false);
			break;
			case 2 : 
				this.alert('密码安全，可以注册', false);
			break;
			case 3 : 
				this.alert('密码非常安全,放心注册', false);
			break;
			default :
			break;

		}

		return true;

	//验证重复密码
	}else if(input.name == 'repassportPswd') {

		if(input.value != this.get_child("passportPswd").value) {
			return this.alert("两次输入的密码不一致", true);
		}

		this.alert("");
		
		return true;
		
	//验证邮箱
	}else if(input.name == 'email') {

		if(input.value.length <= 0) {
			return this.alert("邮箱不能为空", true);
		}

		var regex =  /^[a-z0-9]([a-z0-9]*[-_]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9\.]+)+[\.][a-z]{2,3}([\.][a-z]{2})?$/i;
		if(!regex.test(input.value)){
			return this.alert("邮箱格式错误", true);
		}
		
		this.alert("");

		return true;
	
	//重复验证邮箱
	}else if(input.name == 'reemail') {

		if(input.value != this.get_child("email").value) {
			return this.alert("两次输入的邮箱不一致", true);
		}

		this.alert("");

		return true;

	//验证身份证
	}else if(input.name == 'idcode') {

		if(input.value <= 0){
			return this.alert("身份证不能为空", true);
		}
		
		var regex = /^\d{15}|(\d{17}(?:\d|x|X))$/;
		if(!regex.test(input.value)){
			return this.alert("身份证格式错误", true);
		}

		if(input.value.length > 20){
			return this.alert("身份证不能超过20位", true);
		}
		
		this.alert("");

		return true;

	//验证真实姓名
	}else if(input.name == 'username') {

		if(input.value <= 0){
			return this.alert("真实姓名不能为空", true);
		}

		if(input.value.getBytes() < 4){
			return this.alert("真实姓名不能少于2个中文", true);
		}

		if(input.value.getBytes() > 8){
			return this.alert("真实姓名不能超过4个中文", true);
		}
		
		this.alert("");

		return true;
	
	//验证验证码
	}else if(input.name == 'validate') {

		if(input.value.length <= 0) {
			this.alert("验证码不能为空", true);
			return false;
		}

		this.alert("");
	
		return true;

	}

}

Reg.prototype.ajax_check = function(name) {
	
	var o = this;
		
	var url = '/common/do/passport.php?action=reg_check&name=' + name;
	
	this.ajax.callback = function(obj) {

		var name = obj.responseXML.getElementsByTagName("name")[0].firstChild.nodeValue;
				
		if(name == "0") {

			o.alert("网络异常，请稍后再试", true);

		}else if(name == "1") {

			o.alert("该通行证已存在", true);

		}else if(name == "2") {

			o.alert("可以注册", false);

		}else if(name == "3") {

			o.alert("请输入通行证", true);
			
		}else if(name == "-4000") {
			
			o.alert("网络繁忙，请您一分钟后再试。", true);

		}else{
			
			o.alert("通行证不能以“" + name + "”开头", true);

		}

	}

	this.ajax.doAjax(url, true);

}


/**
 * 验证通行证是否注册
 *
 */
Reg.prototype.ajax_check_submit = function(name) {
		
	/**
	 * 在Ajax提交的时候，需要开启系统提示，因为这是最后一步来确认字段是否存在异常情况。
	 *
	 */
	this.isSYS = true;
	
	if(name == "") {
		alert("请填写通行证名称。");
		return false;
	}

	var o = this;

	var url = '/common/do/passport.php?action=reg_check&name=' + name;

	this.loading = document.createElement('div');

	if (document.documentElement && document.documentElement.scrollTop) {
		var dY = document.documentElement.scrollTop;
		var dX = document.documentElement.scrollLeft;
	}else if (document.body){
		var dY = document.body.scrollTop;
		var dX = document.body.scrollLeft;
	}

	this.loading.style.position = "absolute";

	this.loading.style.top = (dY + 150) + 'px';
	
	this.loading.style.width = '160px';

	this.loading.style.left = (document.body.offsetWidth / 2) - (parseInt(this.loading.style.width) / 2)  + dX + "px";

	this.loading.innerHTML = "<img src='/common/images/loading.gif'/>";

	document.body.appendChild(this.loading);

	this.ajax.callback = function(obj) {

		var name = obj.responseXML.getElementsByTagName("name")[0].firstChild.nodeValue;

		if(name == "0") {

			document.body.removeChild(o.loading);

			o.alert("网络异常，请稍后再试", true);

		}else if(name == "1") {

			document.body.removeChild(o.loading);

			o.alert("该通行证已存在", true);

		}else if(name == "2") {

			if(o.form.action != "") {

				var regurl = o.form.action;

			}else{

				var regurl = '/common/do/passport.php?action=register';

			}

			o.ajax.callback = function(obj) {

				document.body.removeChild(o.loading);

				if(obj.responseText == 1) {

					if(o.$('register_validate') != null) {
						o.$('register_validate').src += "?new=" + Math.random();
					}			

					o.clear();

					if(typeof(o.callback) == 'function') {
						o.callback(o.passportName);
					}else{
						alert("注册成功");
						window.location.reload();
					}

				}else{
					document.getElementById("register_validate").src += "?new=" + Math.random();
					alert(obj.responseText);
				}
			}

			o.ajax.Data = o.get_post_data();

			o.ajax.doAjax(regurl, true);

		}else if(name == "3") {
			
			document.body.removeChild(o.loading);

			o.alert("请输入通行证", true);

		}else if(name == "-4000") {

			o.alert("网络繁忙，请您一分钟后再试。", true);

		}else{

			document.body.removeChild(o.loading);

			o.alert("通行证不能以“" + name + "”开头", true);

		}

	}


	this.ajax.doAjax(url, true);

}

/**
 * 获得所有表单的值
 *
 */
Reg.prototype.get_post_data = function() {

	var str = '';

	for(var i=0; i<this.form.elements.length; i++) {

		if(this.form.elements[i].type == 'text' || this.form.elements[i].type == 'password' || this.form.elements[i].type == 'hidden') {
			str += '&' + this.form.elements[i].name + '=' + encodeURIComponent(this.form.elements[i].value);
		}

	}
	
	return str;

}

/**
 * 清空表单
 *
 */
Reg.prototype.clear = function() {
	
	for(var i=0; i<this.form.elements.length; i++) {

		if(this.form.elements[i].type == 'text' || this.form.elements[i].type == 'password') {
			this.form.elements[i].value = '';
		}

	}
	
}

/**
 * 提示信息
 *
 */
Reg.prototype.alert = function(msg, tips) {
			
	if(this.ptarget != null) {
		this.target = this.ptarget;
	}
	
	if(this.target != null) {	
		if(tips) {
			this.target.innerHTML = "<font color='" + this.color1 + "'>" + msg + "</font>";
		}else{
			this.target.innerHTML = "<font color='" + this.color2 + "'>" + msg + "</font>";
		}
	}else{
		if(msg != "") {
			if(this.isSYS) {
				if(tips) {
					alert(msg + "！");
				}
			}
		}
	}

	this.target = null
	this.ptarget = null;
	this.isSYS = false;
	this.is_submit = false;

	return false;

}


/**
 * 获得子对象
 *
 */
Reg.prototype.get_child = function(name) {
		
	for(var i=0; i<this.form.elements.length; i++) {
		if(this.form.elements[i].name == name) {
			return this.form.elements[i];
		}
	}

}

/**
 * 获得子对象所在的FORM表单对象
 *
 */
Reg.prototype.get_parent_form = function(child) {

	var childs = child;

	while(childs.parentNode.tagName != 'FORM') {
		childs = childs.parentNode;
	}

	return childs.parentNode;
	
}

/**
 * 提交表单
 *
 */
Reg.prototype.submit = function(obj, callback) {
 
	if(this.is_submit) return false;

	this.is_submit = true;
	
	this.callback = callback;

	this.form = obj;

	this.passportName = '';

	for(var i=0; i<obj.elements.length; i++) {
		if(obj.elements[i].name == 'passportName') {
			this.passportName = obj.elements[i].value;
		}
		if(typeof(obj.elements[i].onblur) == "function") {
			this.isSYS = true;
			if(!obj.elements[i].onblur()) {
				obj.elements[i].focus();
				this.is_submit = false;
				return false;
			}
			
		}
	}

	this.ajax_check_submit(this.passportName);
	this.is_submit = false;

	return false;

}

/**
 * 声明对象
 *
 */
var reg = new Reg();


