Date.prototype.isLeapYear = function() {
	return (0 == this.getYear() % 4 && ((this.getYear() % 100 != 0) || (this
			.getYear()
			% 400 == 0)));
}

function StringToDate(Str) {
	return new Date(Str.replace(/-/, "/"));
}



function getDateFromSplitStr(Str, splitStr) {
	return new Date(Str.replace(new RegExp(splitStr, "g"), "/"));
}


function getDateFromStr(Str) {
	return new Date(Str.substring(0, 4) + "/" + Str.substring(4, 6) + "/"
			+ Str.substring(6, 8));
}

// ---------------------------------------------------
// 日期格式化
// 格式 YYYY/yyyy/YY/yy 表示年份
// MM/M 月份
// W/w 星期
// dd/DD/d/D 日期
// hh/HH/h/H 时间
// mm/m 分钟
// ss/SS/s/S 秒
// ---------------------------------------------------
Date.prototype.Format = function(formatStr) {
	var str = formatStr;
	var Week = ['日', '一', '二', '三', '四', '五', '六'];

	str = str.replace(/yyyy|YYYY/, this.getFullYear());
	str = str.replace(/yy|YY/, (this.getYear() % 100) > 9
			? (this.getYear() % 100).toString()
			: '0' + (this.getYear() % 100));

	str = str.replace(/MM/, this.getMonth() > 8 ? (this.getMonth() + 1)
			.toString() : '0' + (this.getMonth() + 1));
	str = str.replace(/M/g, this.getMonth() + 1);

	str = str.replace(/w|W/g, Week[this.getDay()]);

	str = str.replace(/dd|DD/, this.getDate() > 9
			? this.getDate().toString()
			: '0' + this.getDate());
	str = str.replace(/d|D/g, this.getDate());

	str = str.replace(/hh|HH/, this.getHours() > 9
			? this.getHours().toString()
			: '0' + this.getHours());
	str = str.replace(/h|H/g, this.getHours());
	str = str.replace(/mm/, this.getMinutes() > 9 ? this.getMinutes()
			.toString() : '0' + this.getMinutes());
	str = str.replace(/m/g, this.getMinutes());

	str = str.replace(/ss|SS/, this.getSeconds() > 9 ? this.getSeconds()
			.toString() : '0' + this.getSeconds());
	str = str.replace(/s|S/g, this.getSeconds());

	return str;
}

// +---------------------------------------------------
// | 求两个时间的天数差 日期格式为 YYYY-MM-dd
// +---------------------------------------------------
function daysBetween(DateOne, DateTwo) {
	var OneMonth = DateOne.substring(5, DateOne.lastIndexOf('-'));
	var OneDay = DateOne
			.substring(DateOne.length, DateOne.lastIndexOf('-') + 1);
	var OneYear = DateOne.substring(0, DateOne.indexOf('-'));

	var TwoMonth = DateTwo.substring(5, DateTwo.lastIndexOf('-'));
	var TwoDay = DateTwo
			.substring(DateTwo.length, DateTwo.lastIndexOf('-') + 1);
	var TwoYear = DateTwo.substring(0, DateTwo.indexOf('-'));

	var cha = ((Date.parse(OneMonth + '/' + OneDay + '/' + OneYear) - Date
			.parse(TwoMonth + '/' + TwoDay + '/' + TwoYear)) / 86400000);
	return Math.abs(cha);
}

// +---------------------------------------------------
// | 日期计算
// +---------------------------------------------------
Date.prototype.DateAdd = function(strInterval, Number) {
	var dtTmp = this;
	switch (strInterval) {
		case 's' :
			return new Date(Date.parse(dtTmp) + (1000 * Number));
		case 'n' :
			return new Date(Date.parse(dtTmp) + (60000 * Number));
		case 'h' :
			return new Date(Date.parse(dtTmp) + (3600000 * Number));
		case 'd' :
			return new Date(Date.parse(dtTmp) + (86400000 * Number));
		case 'w' :
			return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number));
		case 'q' :
			return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number
					* 3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(),
					dtTmp.getSeconds());
		case 'm' :
			return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number,
					dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(),
					dtTmp.getSeconds());
		case 'y' :
			return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(),
					dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(),
					dtTmp.getSeconds());
	}
}

// +---------------------------------------------------
// | 比较日期差 dtEnd 格式为日期型或者 有效日期格式字符串
// +---------------------------------------------------
Date.prototype.DateDiff = function(strInterval, dtEnd) {
	var dtStart = this;
	if (typeof dtEnd == 'string')// 如果是字符串转换为日期型
	{
		dtEnd = StringToDate(dtEnd);
	}
	switch (strInterval) {
		case 's' :
			return parseInt((dtEnd - dtStart) / 1000);
		case 'n' :
			return parseInt((dtEnd - dtStart) / 60000);
		case 'h' :
			return parseInt((dtEnd - dtStart) / 3600000);
		case 'd' :
			return parseInt((dtEnd - dtStart) / 86400000);
		case 'w' :
			return parseInt((dtEnd - dtStart) / (86400000 * 7));
		case 'm' :
			return (dtEnd.getMonth() + 1)
					+ ((dtEnd.getFullYear() - dtStart.getFullYear()) * 12)
					- (dtStart.getMonth() + 1);
		case 'y' :
			return dtEnd.getFullYear() - dtStart.getFullYear();
	}
}

// +---------------------------------------------------
// | 日期输出字符串，重载了系统的toString方法
// +---------------------------------------------------
Date.prototype.toString = function(showWeek) {
	var myDate = this;
	var str = myDate.toLocaleDateString();
	if (showWeek) {
		var Week = ['日', '一', '二', '三', '四', '五', '六'];
		str += ' 星期' + Week[myDate.getDay()];
	}
	return str;
}

/*
 * js获取request参数 name:参数名
 */
function GetQueryString(name) {
	var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
	var r = window.location.search.substr(1).match(reg);
	if (r != null)
		return unescape(r[2]);
	return "";
}
String.prototype.trim = function() {
	return this.replace(/(^\s*)|(\s*$)/g, "");
}

/*
 * 打开模态窗口 theURL:打开地址 height:高度 width:宽度
 * isGotoByReturnValue：是否以窗体返回值进行跳转,否的话返回窗体返回值
 */
function openModalWindow(theURL, height, width, isGotoByReturnValue) { // v2.0
	var returnValue = window.showModalDialog(theURL, window, 'dialogHeight:'
			+ height + 'px;dialogWidth:' + width + 'px;center:yes');
	if (returnValue != null && returnValue != undefined
			&& returnValue.trim() != "" && isGotoByReturnValue == true) {
		window.location.href = returnValue;
	} else {
		return returnValue;
	}
}

/*
 * 身份证合法性验证
 */
function checkIdcardObj(objIdCard) {

	if (objIdCard != '[object]') {
		return false;
	}

	var idcard = objIdCard.value;

	if (checkIdcard(idcard) == false) {
		objIdCard.focus();
		return false;
	}
	return true;
}

/**
 * 身份证合法性验证
 */
function checkIdcard(idcard) {

	return checkIdcardByFlag(idcard, true);
}

/**
 * 身份证合法性验证,如果isRtnBoolean为true，则返回布尔值,同时弹出错误提示框，如果为false，则返回错误字符串,为空表示正常
 */
function checkIdcardByFlag(idcard, isRtnBoolean) {
	var Errors = new Array("验证通过！", "身份证号码位数不对！", "身份证号码出生日期超出范围或含有非法字符！",
			"身份证号码校验错误！", "身份证地区非法！");
	var area = {
		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 idcard, Y, JYM;
	var S, M;
	var idcard_array = new Array();
	idcard_array = idcard.split("");
	// 地区检验
	if (area[parseInt(idcard.substr(0, 2))] == null) {

		if (isRtnBoolean) {
			alert(Errors[4]);
			return false;
		} else {
			return Errors[4];
		}

	}
	// 身份号码位数及格式检验
	switch (idcard.length) {
		case 15 :
			if ((parseInt(idcard.substr(6, 2)) + 1900) % 4 == 0
					|| ((parseInt(idcard.substr(6, 2)) + 1900) % 100 == 0 && (parseInt(idcard
							.substr(6, 2)) + 1900)
							% 4 == 0)) {
				ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$/;// 测试出生日期的合法性
			} else {
				ereg = /^[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$/;// 测试出生日期的合法性
			}
			if (ereg.test(idcard)) {

				if (isRtnBoolean) {
					return true;
				} else {
					return "";
				}

			} else {

				if (isRtnBoolean) {
					alert(Errors[2]);
					// $('pcCard').focus();
					return false;
				} else {
					return Errors[2];
				}
			}
			break;
		case 18 :
			// 18位身份号码检测
			// 出生日期的合法性检查
			// 闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
			// 平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
			if (parseInt(idcard.substr(6, 4)) % 4 == 0
					|| (parseInt(idcard.substr(6, 4)) % 100 == 0 && parseInt(idcard
							.substr(6, 4))
							% 4 == 0)) {
				ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$/;// 闰年出生日期的合法性正则表达式
			} else {
				ereg = /^[1-9][0-9]{5}19[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$/;// 平年出生日期的合法性正则表达式
			}
			if (ereg.test(idcard)) {// 测试出生日期的合法性
				// 计算校验位
				S = (parseInt(idcard_array[0]) + parseInt(idcard_array[10]))
						* 7
						+ (parseInt(idcard_array[1]) + parseInt(idcard_array[11]))
						* 9
						+ (parseInt(idcard_array[2]) + parseInt(idcard_array[12]))
						* 10
						+ (parseInt(idcard_array[3]) + parseInt(idcard_array[13]))
						* 5
						+ (parseInt(idcard_array[4]) + parseInt(idcard_array[14]))
						* 8
						+ (parseInt(idcard_array[5]) + parseInt(idcard_array[15]))
						* 4
						+ (parseInt(idcard_array[6]) + parseInt(idcard_array[16]))
						* 2 + parseInt(idcard_array[7]) * 1
						+ parseInt(idcard_array[8]) * 6
						+ parseInt(idcard_array[9]) * 3;
				Y = S % 11;
				M = "F";
				JYM = "10X98765432";
				M = JYM.substr(Y, 1);// 判断校验位
				if (M == idcard_array[17].toUpperCase()) {

					if (isRtnBoolean) {
						return true;
					} else {
						return "";
					}

				}// 检测ID的校验位
				else {

					if (isRtnBoolean) {
						alert(Errors[3]);
						return false;
					} else {
						return Errors[3];
					}
				}
			} else {
				if (isRtnBoolean) {
					alert(Errors[2]);
					return false;
				} else {
					return Errors[2];
				}
			}
			break;
		default :
			if (isRtnBoolean) {
				alert(Errors[1]);
				return false;
			} else {
				return Errors[1];
			}
			break;
	}
}

var REG_MOBILE = /^(13[0-9]\d{8})|(15[0-9]\d{8})|(18[0-9]\d{8})$/;

// 验证手机号
function checkMobileFormat(objMobile) {

	return checkMobileFormatByRtnBoolean(objMobile, true);

}

// 验证手机号
function checkMobileFormatByRtnBoolean(objMobile, isRtnBoolean) {

	if (objMobile != '[object]') {
		if (isRtnBoolean) {
			alert("查无此控件");
			return false;
		} else {
			return "查无此控件";
		}

	}

	if (REG_MOBILE.test(objMobile.value.trim()) == false) {

		objMobile.focus();

		if (isRtnBoolean) {
			alert("您输入的手机号无效！");
			return false;
		} else {
			return "您输入的手机号无效！";
		}

	}

	if (isRtnBoolean) {
		return true;
	} else {
		return ""
	};
}

/* 检查金额 */
function checkMoneyFormat(objMoney) {

	if (objMobile != '[object]') {
		return false;
	}

	var reg = /^\d+\.\d{2}$/;

	if (reg.test(objMoney.value.trim()) == false) {
		alert("购买价格必须为带两位小数部分的正浮点数！");
		objMoney.focus();
		return false;
	}

	return true;
}

function checkAgeRange(idCard, begin, end) {
	var tValue = idCard;

	var birthYear = "";
	var birthDate = "";

	if (tValue.length == 15) {
		birthYear = "19" + tValue.substring(6, 8);
		birthDate = tValue.substring(8, 12)
	} else if (tValue.length == 18) {
		birthYear = tValue.substring(6, 10);
		birthDate = tValue.substring(10, 14);
	} else {
		alert("您输入的身份证位数不对！");

		return false;

	}

	birthYear = parseInt(birthYear);

	var currentYear = (new Date()).getYear();

	var currentDate = setZero(((new Date()).getMonth() + 1))
			+ setZero(((new Date()).getDate()));

	var age = currentYear - birthYear;

	if (age < begin || age > end)// 首先判断年份
	{
		alert("您的年龄不再" + begin + "-" + end + "的范围内，不能投保！");

		return false;
	}
	if ((age == begin) && (currentDate < birthDate))// 如果刚好等于16，还得判断日期是否到了
	{
		alert("您的年龄尚未满" + begin + "岁，不能投保！");

		return false;
	}

	return true;
}

function checkAgeRangeObj(objIdCard, begin, end) {

	if (objIdCard != '[object]') {
		return false;
	}

	if (checkAgeRange(objIdCard.value.trim(), begin, end) == false) {
		objIdCard.focus();
		return false;
	}

	return true;

}

function setZero(tValue) {

	tValue = tValue + "";

	if (tValue.length == 1) {
		tValue = "0" + tValue;
	}

	return tValue;
}

function validateFormInputs(inputArray, form) {
	if (inputArray == null || inputArray.length < 1 || form != '[object]') {
		return;
	}

	var len = inputArray.length;

	var errorMsgs = "";
	var rtnObj = "";
	var isFerror = true;

	for (var i = 0;i < len; i++) {
		rtnObj = validateFormInput(inputArray[i]);
		if (rtnObj.isOk == false) {
			if (i > 0) {
				errorMsgs = errorMsgs + "\n";
			}
			errorMsgs = errorMsgs + rtnObj.errorMsg;

			if (isFerror == true) {

				if (rtnObj.objInput == '[object]') {
					rtnObj.objInput.focus();
				}
				isFerror = false;
			}

		}
	}

	if (errorMsgs != "") {
		alert(errorMsgs);
		return false;
	} else {
		return true;
	}

}

function validateFormInput(inputObj) {

	var rtnStr = "";

	if (inputObj != '[object Object]') {
		return "";
	}

	if (inputObj.objName.trim() == "" && inputObj.customFunName
			&& inputObj.customFunName.trim() != "") {
		return validateFormByCustomFun(inputObj);
	}

	var input = document.all(inputObj.objName);

	if (input != '[object]' && inputObj.objName.trim() != "") {
		return "";
	}

	var inputValue = input.value.trim();

	if (inputObj.isNotBlank) {
		if (inputValue == "") {
			rtnStr = inputObj.emptyText + " 为必填项！";

		}
	}

	if (rtnStr == "" && inputValue != "") {

		if (inputObj.isReg && (inputObj.regPattern.test(inputValue)) == false) {

			// alert("1:"+inputObj.regPattern.test(inputValue));
			// alert("2:"+inputObj.regPattern.test(inputValue));
			rtnStr = inputObj.regText;

			// alert("3:"+rtnStr);
		}
	}

	if (rtnStr == "" && inputValue != "") {
		if (('customFunName' in inputObj)
				&& (inputObj.customFunName.trim() != '')) {
			eval("rtnStr=" + inputObj.customFunName + "();");
		}
	}

	var isOk = true;

	if (rtnStr != "") {
		isOk = false;
	}

	return {
		objInput : input,
		isOk : isOk,
		errorMsg : rtnStr
	};

}

	/*
		增加，提取，删除COOKIE的公共方法
	*/
	function getCookieVal(offset)
	//获得Cookie解码后的值
	{
		var endstr = document.cookie.indexOf (";", offset);
		if (endstr == -1)
		endstr = document.cookie.length;
		return unescape(document.cookie.substring(offset, endstr));
	}
	
	function setCookieByExpdate(name, value,date)
	//设定Cookie值
	{
		if (date!=''){
			//alert(1);
			var expdate = new Date(date);
			//alert(expdate);
		}else{
			var expdate = new Date();
		}
		var argv = setCookieByExpdate.arguments;
		var argc = setCookieByExpdate.arguments.length;
		var expires = (argc > 3) ? argv[3] : null;
		var path = (argc > 4) ? argv[4] : null;
		var domain = (argc > 5) ? argv[5] : null;
		var secure = (argc > 6) ? argv[6] : false;
		if(expires!=null) expdate.setTime(expdate.getTime() + ( expires * 1000 ));
		document.cookie = name + "=" + escape (value) +((expires == null) ? "" : ("; expires="+ expdate.toGMTString()))
			+((path == null) ? "" : ("; path=" + path)) +((domain == null) ? "" : ("; domain=" + domain))
			+((secure == true) ? "; secure" : "");
	}
	
	function delCookie(name)
	//删除Cookie
	{
		var exp = new Date();
		exp.setTime (exp.getTime() - 1);
		var cval = getCookie (name);
		document.cookie = name + "=" + cval + "; expires="+ exp.toGMTString();
	}
	
	function getCookie(name)
	//获得Cookie的原始值
	{
		var arg = name + "=";
		var alen = arg.length;
		var clen = document.cookie.length;
		var i = 0;
		while (i < clen)
		{
			var j = i + alen;
			if (document.cookie.substring(i, j) == arg)
			return getCookieVal (j);
			i = document.cookie.indexOf(" ", i) + 1;
			if (i == 0) break;
		}
		return null;
	}


/**
 * 不针对某一特定控件进行验证，仅调用用户自定义函数进行验证，并返回验证结果对象
 */
function validateFormByCustomFun(inputObj) {

	var rtnStr = "";

	var input = null;

	if (('customFunName' in inputObj) && (inputObj.customFunName.trim() != '')) {
		eval("rtnStr=" + inputObj.customFunName + "();");
	}

	var isOk = true;

	if (rtnStr != "") {
		isOk = false;
	}

	return {
		objInput : input,
		isOk : isOk,
		errorMsg : rtnStr
	};

}
