/*** 该类包含一系列Html控件数据校验方法 ***/
/*** 作者：jackliu　QQ：19671453　Email：bardian_man@msn.com ***/

//验证录入数据有效性的正则表达式
var exprMobile = "^(13[0-9]{9})?$";  //手机号码
var exprEmail = "^([\\-_\\.a-zA-Z0-9]+@([\\-_a-zA-Z0-9]+\\.)+[a-zA-Z0-9]{2,3})?$";  //电子邮箱
var exprDate = "^(\\d{4}-\\d{1,2}-\\d{1,2})?$";  //日期(年-月-日)
var exprURL = "^([a-zA-z]+:\\/\\/(\\w+(-\\w+)*)(\\.(\\w+(-\\w+)*))*(\\?\\S*)?$)?$";  //网址

//用途：判断输入的日期是否有效
//如果通过验证返回true，否则返回false
//date : 日期字符串
//fmt : 日期格式
function isDate(date, fmt)
{
    if (date != "")
    {
        if (fmt == null) fmt = "yyyyMMdd";
        var yIndex = fmt.indexOf("yyyy");
        if (yIndex == -1) return false;
        var year = date.substring(yIndex, yIndex + 4);
        var mIndex = fmt.indexOf("MM");
        if (mIndex == -1) return false;
        var month = date.substring(mIndex, mIndex + 2);
        var dIndex = fmt.indexOf("dd");
        if (dIndex == -1) return false;
        var day = date.substring(dIndex, dIndex + 2);
        if (!isNumber(year) || year > "2100" || year < "1900") return false;
        if (!isNumber(month) || month > "12" || month < "01") return false;
        if (day > getMaxDay(year, month) || day < "01") return false;
    }
    return true;
}

//获得该月的最大天数
function getMaxDay(year, month)
{
    if(month == 4 || month == 6 || month == 9 || month == 11) return "30";
    if(month == 2)
    if(year % 4 == 0 && year % 100 != 0 || year % 400 == 0)
        return "29";
    else
        return "28";
    return "31";
}

function isNumber(num)
{
    var re = /^\d+$/;
	if (re.test(num))
	    return true;
	else
	    return false;
}

//校验文本框是否录入了内容
//内容为空返回false
function RequiredValid(intputTarget, errorMsg)
{
	if (intputTarget.value.trim() == "") {
		intputTarget.focus();
		alert(errorMsg);
		return false;
	} else
		return true;
}

//校验下拉框是否选择了内容
//选择为空返回true
function RequiredValid_sel(selectTarget, errorMsg)
{
	if (selectTarget.options[selectTarget.selectedIndex].value == "") {
		selectTarget.focus();
		alert(errorMsg);
		return false;
	} else
		return true;
}

//校验单选按钮是否选择了内容
//选择为空返回true
function RequiredValid_radio(idName, errorMsg)
{
	var i = 0;
	var isSelected = false;
	var element = document.getElementById(idName + "_" + i);
	while (element != null) {
	    if (element.checked == true) {
	        isSelected = true;
	        break;
	    }
	    i ++;
	    element = document.getElementById(idName + "_" + i);
	}
	if (isSelected == false) {
	    document.getElementById(idName + "_0").focus();
	    alert(errorMsg);
	    return false;
	}
	else {
	    return true;
	}
}

//校验复选框是否选择了内容
//选择为空返回true
function RequiredValid_check(idName, errorMsg)
{
	var i = 0;
	var isSelected = false;
	var element = document.getElementById(idName + "_" + i);
	while (element != null) {
	    if (element.checked == true) {
	        isSelected = true;
	        break;
	    }
	    i ++;
	    element = document.getElementById(idName + "_" + i);
	}
	if (isSelected == false) {
	    document.getElementById(idName + "_0").focus();
	    alert(errorMsg);
	    return false;
	}
	else {
	    return true;
	}
}

//比较两个控件值是否相同
//如果相同返回true，否则返回false
function CompareValid(intputTarget1, intputTarget2, errorMsg)
{
	if (intputTarget1.value.trim() == intputTarget2.value.trim())
		return true;
	else
	{
		intputTarget2.focus();
		alert(errorMsg);
		return false;
	}
}

//校验输入内容的有效性
//如果有效返回true，否则返回false
//expr : 用于有效性校验的正则表达式
function RegularValid(intputTarget, expr, errorMsg)
{
	var checkstr = intputTarget.value;
	eval("var re = /" + expr + "/;");
	if (re.test(checkstr))
		return true;
	else {
		intputTarget.focus();
		alert(errorMsg);
		return false;
	}
}

//=== BEGIN ===//
//为数字录入控件添加一系列事件，使用户只能录入与数字相关的字符
//控件可用的自定义属性：
//isReal : 是否可录入小数，值为true或不加此属性表可录入小数，为false表不可录入小数
//isNeg  : 是否可录入负数，值为true或不加此属性表可录入负数，为false表不可录入负数
//digits : 可录入的小数位数，不加此属性时默认为可录入2位小数
function Numeric_addCheckEvent(id) {
	id.onkeypress = Numeric_AddNumericItem;
	id.onpaste = Numeric_Paste;
	id.style.imeMode = "disabled";
}

function Numeric_AddNumericItem(e) {
	if(document.selection.createRange().text != '')
		document.selection.clear();
	var keyCode = event.keyCode;

	if ((keyCode >= 48 && keyCode <= 57) || keyCode == 13 || keyCode == 8) {
		if(event.srcElement.isReal == 'false' || keyCode == 13 || keyCode == 8)
			return true;
		else {
			var tempVal = event.srcElement.value;
			var dotIndex = tempVal.indexOf(".", 0);
			if(dotIndex != -1) {
				var digits = 2;
				if (event.srcElement.digits != null)
					digits = event.srcElement.digits;
				var curDigit = tempVal.length - dotIndex - 1;
				if (curDigit >= digits)
					return false;
			}
		}
	}
	else if(keyCode == 45 || keyCode == 46) {
		if(keyCode == 45) {
			var tempVal = event.srcElement.value + "-";
			if(tempVal.indexOf("-") == 0 && tempVal.indexOf("-", 1) == -1) {
				if(event.srcElement.isNeg == 'true' || event.srcElement.isNeg == null)
					return true;
				else
					return false;
			} else
				return false;
		} else if (keyCode == 46) {
			var tempVal = event.srcElement.value;
			if(tempVal.indexOf(".", 0) == -1) {
				if (event.srcElement.isReal == 'true' || event.srcElement.isReal == null)
					return true;
				else
					return false;
			} else
				return false;
		} else
			return false;
	} else
		return false;
}

function Numeric_Paste(e) {
	var pasteData = window.clipboardData.getData("Text");
	var expr = /^[-]?\d+(\.\d+)?$/;
	if (event.srcElement.isReal == "false") {
		if (event.srcElement.isNeg == "false")
			expr = /^\d+(\d+)?$/;
		else
			expr = /^[-]?\d+(\d+)?$/;
	} else {
		if (event.srcElement.isNeg == "false")
			expr = /^\d+(\.\d+)?$/;
		else
			expr = /^[-]?\d+(\.\d+)?$/;
	}
	if (expr.test(pasteData) || pasteData.length == 0) {
		var dotIndex = pasteData.indexOf(".", 0);
		if(dotIndex != -1) {
			var digits = 2;
			if (event.srcElement.digits != null)
				digits = event.srcElement.digits;
			var curDigit = pasteData.length - dotIndex - 1;
			if (curDigit > digits) {
				alert("被粘贴的内容不符合此项的格式！");
				return false;
			}
		}
		event.srcElement.value = pasteData;
		return false;
	} else {
		alert("被粘贴的内容不符合此项的格式！");
		return false;
	}
}
//=== END ===//