/**
* JavaScript  validator.js
* 表单数据验证模型
* 程序版本：Version 1.2.1
* 创建时间：2007-04-19
* 更新时间：2007-11-13  修改函数 changeSBCCase(sbcStr) ，去掉传入字符串左右的多余空格
*           2007-12-13  增加函数 isEmail(email) ，验证字符串是否是有效的电子邮件帐号
*			2007-12-14  增加函数 isSafePassword(pwd), 验证传入的密码是否安全 (是否不包含不安全字符)
* ----------------------------
* 版权所有：艾伦开发者 (www.AlanYu.net)
* CopyRight @ 2007-04-19  Powered by Alan Yu
*/



/******** 函数 trim(str) 去除左右空格 *********/
function trim(str){ 
	while (str !="" && str.charAt(0) == " ") str = str.substring(1,str.length);
	while (str !="" && str.charAt(str.length-1) == " ") str = str.substring(0,str.length-1);
	return str;
}

/******** 函数 isEmail(email) 判断字符串是否是有效的电子邮件帐号 *********/
function isEmail(email){
	if(email==null || email=="")
		return false;
	var rec_email = /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
	return rec_email.test(email);
}


/******** 函数 convertIDCardNum(theStr) 将15位身份证号码转换为18位  *********/
function convertIDCardNum(theStr){
	if (theStr.length==18){
		return theStr
	}
	var  l_l_jym= new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
	var  l_l_total = 0;
	var  last;
	var strobject1 = new String(theStr);
	if (strobject1.length==15){
		var strobject = strobject1.substring(0,6) + "19" + strobject1.substring(6,15);
		for(var i=0;i<strobject.length;i++)	{
			var l_l_temp1 = parseInt(strobject.substr(i,1),10) * l_l_jym[i];
			l_l_total += l_l_temp1;
		}
		l_l_total --;
		var lastnum = l_l_total % 11;   //最后一位
		if (lastnum==0){
			last = 0;
		}else{
			if (lastnum==1){
				last="X";
			}else{
				last = 11 - lastnum;
			}
		}
		strobject = strobject + last;
		return strobject;
	}else{
		return strobject1;
	}
}

	
/******** 函数isIDCardNum(theStr) 校验身份证是否合法  *********/
function isIDCardNum(theStr)	{
	if(theStr=="" || theStr==null)
		return false;
	var  l_l_jym= new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
	var  l_l_total = 0;
	var strobject = new String(theStr);
	//位数校验
	var boolean1 = strobject.length!=15;
	var boolean2 = strobject.length!=18;
	if (boolean1 && boolean2) {
		return false;
	}
	//15校验
	if (strobject.length==15) {	
		if(isNaN(strobject)) {
			return false;	      
		}		
		//15位转18位
		strobject=convertIDCardNum(theStr);
	}    		
	var l_s_temp = strobject.substr(0,17);
	if (isNaN(l_s_temp)) {
		return false;
	}			
	var LastNum = strobject.substring(17,18);
	if (isNaN(LastNum) && LastNum!="x" &&LastNum!="X"){
		return false;
	}
	var L_s_temp1 = strobject.substr(6,8);
	var L_s_temp  = new String(L_s_temp1);
	var year  = L_s_temp.substring(0,4);
	var month =  L_s_temp.substring(4,6);
	var day   =  L_s_temp.substring(6,8);
	var l_l_temp1;
	var L_s_csny = year + "-" + month + "-" + day;
	//是否是合法日期
	if (!isDate(L_s_csny)){
		return false;
	}
	for(var i=0;i<strobject.length - 1;i++)	{
		l_l_temp1 = parseInt(strobject.substr(i,1),10) * l_l_jym[i];
		l_l_total += l_l_temp1;
	}
	if (!isNaN(strobject.substring(17,18)))	{
		l_l_total += parseInt(strobject.substring(17,18));
	}
	if (strobject.substring(17,18)=="X" || strobject.substring(17,18)=="x")	{
		l_l_total += 10;
	}
	l_l_total --;
	if (!(l_l_total%11==0))	{
		return false;
	}
	return true;
}


/******** 函数isDate(theStr) 判断字符串是否是有效的日期  *********/
function isDate(theStr) {
	var strObj=new String(theStr);
	var arr = strObj.split("-");
	if(arr.length!=3)
			return false;
	var theYear=parseInt(arr[0],10);
	var theMonth=parseInt(arr[1],10);
	var theDay=parseInt(arr[2],10);
	switch(theMonth){
		case 4:
		case 6:
		case 9:
		case 11:
			if(theDay==31)
				return false;
			else
				break;
		case 2:
			if((theYear%4==0 || theYear%100==0) && theYear%400!=0){  //润年2月份29天
				if(theDay>29) return false;
			} else {
				if(theDay>28) return false;
			}
			break;
		default: break;
	}
	return true;
}



/******** isNumber(theStr) 判断不是数值型字符串  *********/
function isNumber(theStr) {
	if(isNaN(theStr))
		return false;
	else
		return true;
}



/******** 函数getBirthdayByIDCard(idCardNum) 根据身份证号码获取出生日期  *********/
function getBirthdayByIDCard(idCardNum){
	if(isIDCardNum){
		idCardNum = convertIDCardNum(idCardNum);
		return idCardNum.substring(6,10) +"-"+ idCardNum.substring(10,12) +"-"+ idCardNum.substring(12,14);
	}
}


/******** 函数getSexByIDCard(idCardNum) 根据身份证号码获取性别  *********/
function getSexByIDCard(idCardNum){
	if(isIDCardNum){
		idCardNum = convertIDCardNum(idCardNum);
		if(parseInt(idCardNum.substring(16,17),10)%2==0)
			return "女";
		else
			return "男";
	}
}

/******** 函数changeSBCCase(str) 将全角输入的数字转换成标准字符集数字  *********/
function changeSBCCase(sbcStr){
	if(sbcStr==""||sbcStr==null)
		return "";
	sbcStr = sbcStr+"";
	var str = "";
	for(var i=0; i<sbcStr.length; i++){
		switch(sbcStr.charAt(i)){
		case "　":
			str +=" ";
			break;
		case "１":
			str +="1";
			break;
		case "２":
			str +="2";
			break;
		case "３":
			str +="3";
			break;
		case "４":
			str +="4";
			break;
		case "５":
			str +="5";
			break;
		case "６":
			str +="6";
			break;
		case "７":
			str +="7";
			break;
		case "８":
			str +="8";
			break;
		case "９":
			str +="9";
			break;
		case "０":
			str +="0";
			break;
		case "ａ":
			str +="a";
			break;
		case "ｂ":
			str +="b";
			break;
		case "ｃ":
			str +="c";
			break;
		case "ｄ":
			str +="d";
			break;
		case "ｅ":
			str +="e";
			break;
		case "ｆ":
			str +="f";
			break;
		case "ｇ":
			str +="g";
			break;
		case "ｈ":
			str +="h";
			break;
		case "ｉ":
			str +="i";
			break;
		case "ｊ":
			str +="j";
			break;
		case "ｋ":
			str +="k";
			break;
		case "ｌ":
			str +="l";
			break;
		case "ｍ":
			str +="m";
			break;
		case "ｎ":
			str +="n";
			break;
		case "ｏ":
			str +="o";
			break;
		case "ｐ":
			str +="p";
			break;
		case "ｑ":
			str +="q";
			break;
		case "ｒ":
			str +="r";
			break;
		case "ｓ":
			str +="s";
			break;
		case "ｔ":
			str +="t";
			break;
		case "ｕ":
			str +="u";
			break;
		case "ｖ":
			str +="v";
			break;
		case "ｗ":
			str +="w";
			break;
		case "ｘ":
			str +="x";
			break;
		case "ｙ":
			str +="y";
			break;
		case "ｚ":
			str +="z";
			break;
		case "＂":
			str +="\"";
			break;
		case "＇":
			str +="'";
			break;
		case "；":
			str +=";";
			break;
		case "：":
			str +=":";
			break;
		case "－":
			str +="-";
			break;
		case "＿":
			str +="_";
			break;
		case "＠":
			str +="@";
			break;
		case "＋":
			str +="+";
			break;
		case "＝":
			str +="=";
			break;
		case "（":
			str +="(";
			break;
		case "）":
			str +=")";
			break;
		case "［":
			str +="[";
			break;
		case "］":
			str +="]";
			break;
		case "｛":
			str +="{";
			break;
		case "｝":
			str +="}";
			break;
		case "＊":
			str +="*";
			break;
		case "＆":
			str +="&";
			break;
		case "＾":
			str +="^";
			break;
		case "％":
			str +="%";
			break;
		case "！":
			str +="!";
			break;
		case "￥":
			str +="$";
			break;
		case "．":
			str +=".";
			break;
		case "，":
			str +=",";
			break;
		case "＜":
			str +="<";
			break;
		case "＞":
			str +=">";
			break;
		case "／":
			str +="/";
			break;
		case "？":
			str +="?";
			break;
		case "＼":
			str +="\\";
			break;
		case "｜":
			str +="|";
			break;
		case "＃":
			str +="#";
			break;
		default:
			str += sbcStr.charAt(i);
			break;
		}
	}
	return trim(str);
}

/******** 函数 isSafePassword(pwd), 验证传入的密码是否安全 (是否不包含不安全字符)  *********/
function isSafePassword(pwd){
	if(pwd==null || pwd.length==0)
		return false;
	var rec = /^[A-Za-z0-9_]+$/;
	return rec.test(pwd);
}