/*
jQuery.validator.addMethod("maxWords", function(value, element, params) { 
    return this.optional(element) || value.match(/\b\w+\b/g).length < params; 
}, "Please enter {0} words or less."); 
*/

/*
 * 对于包含中文的字节进行匹配
 * @value string 匹配的字符串
 * @lengthMin int 最小长度
 * @lengthMax int 最大长度
 * @patternOther pattern 非中文以外其他字符匹配模式
 */
function matchChinese(value, lengthMin, lengthMax, patternOther)
{
	patternChinese = /^[\u4e00-\u9fa5]$/;
	patternOtherDefined = typeof(patternOther) !=  "undefined ";
	
	bytesCount = 0;
	valid = true;
	for (i = 0; i < value.length; i++) {
		ch = value.charAt(i);
		if (patternChinese.test(ch)) {
			bytesCount += 2;
		}
		else if (patternOtherDefined && patternOther.test(ch)) {
			bytesCount += 1;
		}
		else {
			valid = false;
			break;
		}
	}
	if (bytesCount < lengthMin || bytesCount > lengthMax) {
		valid = false;
	}
	
	return valid;
}

function checkIdCard(value)
{
	var cities={11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"};    
	var sum = 0;
	var len = value.length;
	if(!/^\d{17}(\d|x)$/i.test(value)&&!/^\d{15}$/i.test(value)) {
		f_alert(obj,"非法身份证号");
		return false;
    }
	
    //在后面的运算中x相当于数字10,所以转换成a    
    value = value.replace(/x$/i,"a");    
	   
    if(cities[parseInt(value.substr(0,2))] == null) {    
        return false;    
    }
    
    if (len == 18) {    
        birthday = value.substr(6,4) + "-" + Number(value.substr(10,2)) + "-" + Number(value.substr(12,2));    
        var d = new Date(birthday.replace(/-/g,"/"));
        if(birthday!=(d.getFullYear() + "-" + (d.getMonth()+1) + "-" + d.getDate())) {           
            return false;    
        }    
   
        for(var i = 17; i >= 0; i--)    
            sum += (Math.pow(2,i) % 11) * parseInt(value.charAt(17 - i),11);
   
        if(sum%11 != 1) {    
            return false;    
        }    
    }    
    else if (len == 15) {    
    	birthday = "19" + value.substr(6,2) + "-" + Number(value.substr(8,2)) + "-" + Number(value.substr(10,2));    
        var d = new Date(birthday.replace(/-/g,"/"))    
        var dd = d.getFullYear().toString() + "-" + (d.getMonth()+1) + "-" + d.getDate();
        if(birthday != dd) {    
            return false;    
        }    
    }
    
    return true;
}
function checkAccount(value)
{
	return matchChinese(value, 4, 32, /^[a-z0-9_]$/);
}

function checkRealName(value)
{
	return matchChinese(value, 4, 30, /^[a-z0-9_]$/);
}

function checkPassword(value)
{
	return /^\S{6,25}$/.test(value);
}

function checkTelNo(value)
{
	return /^([0\+]\d{2,3}-)?(\d{3}-\d{8}|\d{4}-\d{7})(-\d+)?$/.test(value);
}

function checkMobileTelNo(value)
{
	return /^([0\+]\d{2,3}-)?(13|15)\d{9}$/.test(value);
}

function checkPostCode(value)
{
	return /^\d{6}$/.test(value);
}

function checkAddress(value)
{
	return /^\S{3,}$/.test(value);
}

function checkVerifyCode(value)
{
	return /^[0-9a-zA-Z]{4}$/.test(value);
}

function checkActivateCode(value)
{
	return /^[0-9a-np-zA-HJ-Z]{6}$/.test(value)
}

/**
 * 验证用户名（即账号）
 */
jQuery.validator.addMethod("account", function(value, element) {
    return this.optional(element) || checkAccount(value);
  }, "您填写的用户名有误。用户名应该由4-32个字符组成（包括小写字母、数字、中文、下划线）"); 

/**
 * 验证真实姓名
 */
jQuery.validator.addMethod("realName", function(value, element) { 
    return this.optional(element) || checkRealName(value) ;
  }, "您填写的姓名有误。姓名应该由汉字、字母、数字和“.”组成，长度为4-30个字符"); 

/**
 * 验证用户密码
 */
jQuery.validator.addMethod("password", function(value, element) {
    return this.optional(element) || checkPassword(value);
  }, "您设置的密码有误。密码由6-25个字符组成");

/**
 * 验证验证码
 */
jQuery.validator.addMethod("verifyCode", function(value, element) {
    return this.optional(element) || checkVerifyCode(value);
  }, "您输入的验证码错误，请重新输入");

/*
 * 验证激活码
 */
jQuery.validator.addMethod("activateCode", function(value, element) {
    return this.optional(element) || checkActiveCode(value);
  }, "您输入的激活码错误，请重新输入");

/**
 * 验证电话号码
 */
jQuery.validator.addMethod("telNo", function(value, element) { 
    return this.optional(element) || checkTelNo(value);
  }, "电话号码不合法"); 

/**
 * 验证手机号码
 */
jQuery.validator.addMethod("mobileTelNo", function(value, element) { 
    return this.optional(element) || checkMobileTelNo(value);
  }, "手机号码不合法");

/**
 * 验证电话号码，可以是电话或者手机号码
 */
jQuery.validator.addMethod("phone", function(value, element) { 
    return this.optional(element) || checkTelNo(value) || checkMobileTelNo(value);
  }, "电话号码不合法");


/**
 * 验证身份证号码
 */
jQuery.validator.addMethod("idCardNo", function(value, element) {
    return this.optional(element) || checkIdCard(value);
  }, "身份证号码不合法"); 

/**
 * 验证邮政编码
 */
jQuery.validator.addMethod("postCode", function(value, element) {
    return this.optional(element) || checkPostCode(value);
  }, "邮政编码不合法.");


/**
 * 验证联系地址
 */
jQuery.validator.addMethod("address", function(value, element) { 
    return this.optional(element) || checkAddress(value);
  }, "电话号码不合法");

function popLogin(srcUrl){
	ymPrompt.win({width:310, height:230, title:'用户登录', fixPosition:true, maskAlpha:0.6, iframe:{id:'win-login',name:'win-login',src:srcUrl}});
}

function popRegister(srcUrl){
    top.ymPrompt.close();
	top.ymPrompt.win({width:310, height:230, title:'快速注册', fixPosition:true, maskAlpha:0.6, iframe:{id:'win-register',name:'win-register',src:srcUrl}});
}

function popRedirect(dstUrl) {
	parent.location.href = dstUrl;
}
