/**
 * 复制对象obj的内容
 */
function copyToClipBoard(value) {
	var txt = value;
	if (window.clipboardData) {
		window.clipboardData.clearData();
		window.clipboardData.setData("Text", txt);
		alert("以下内容已复制：\n" + txt);
	} else if (navigator.userAgent.indexOf("Opera") != -1) {
		window.location = txt;
	} else if (window.netscape) {
		try {
			netscape.security.PrivilegeManager
					.enablePrivilege("UniversalXPConnect");
		} catch (e) {
			alert("被浏览器拒绝！\n请在浏览器地址栏输入'about:config'并回车\n然后将'signed.applets.codebase_principal_support'设置为'true");
		}
		var clip = Components.classes['@mozilla.org/widget/clipboard;1']
				.createInstance(Components.interfaces.nsIClipboard);
		if (!clip)
			return;
		var trans = Components.classes['@mozilla.org/widget/transferable;1']
				.createInstance(Components.interfaces.nsITransferable);
		if (!trans)
			return;
		trans.addDataFlavor('text/unicode');
		var str = new Object();
		var len = new Object();
		var str = Components.classes["@mozilla.org/supports-string;1"]
				.createInstance(Components.interfaces.nsISupportsString);
		var copytext = txt;
		str.data = copytext;
		trans.setTransferData("text/unicode", str, copytext.length * 2);
		var clipid = Components.interfaces.nsIClipboard;
		if (!clip)
			return false;
		clip.setData(trans, null, clipid.kGlobalClipboard);
		alert("以下内容已复制：\n" + txt);
	}
}

/**
 * 选择游戏下拉获取新手卡
 * 
 * @return
 */

function gainCard() {
	// 目前先不开放新手卡功能
	alert('当前暂未开放新手卡功能！');
	return

	var gameId = document.getElementById('gameId');
	var card_form = document.getElementById('card_form');
	if (gameId.value == 0) {
		alert('请选择领取新手卡游戏');
		return;
	}
	card_form.submit();
}

/**
 * 校验身份证
 * 
 * @param value
 * @return
 */
function validateIdentity(value) {

	// 提取日期和校验的正则表达式
	var ReDate15 = /\d{6}(\d{6})\d{3}/;
	var ReDate18 = /\d{6}(\d{8})\d{3}/;

	// 验证各位字符是否合法的正则表达式
	var ReDigital15 = /\d{15}/;
	var ReDigital18 = /\d{17}[0-9xX]{1}/;

	switch (value.length) {
		case 15 :
			// 特殊处理
			if (value == "111111111111111") {
				return false;
			}
			if (ReDigital15.test(value) == false) {
				return false;
			}
			Arr = ReDate15.exec(value);
			strDate = "19" + Arr[1];
			// 15位身份证号的日期范围(1900年-2000年)
			if (CheckDate(strDate, new Date(1900, 0, 1), new Date(1999, 11, 31)) == false) {
				return false;
			}
			break;

		case 18 :
			if (ReDigital18.test(value) == false) {
				return false;
			}
			Arr = ReDate18.exec(value);
			strDate = Arr[1];
			// 18位身份证号的日期范围(1900年-至今)
			if (CheckDate(strDate, new Date(1900, 0, 1), new Date()) == false) {
				return false;
			}
			if (CheckSum(value) == false) {
				return false;
			}
			break;
		case 0 :
			return false;
			break;

		default :
			return false;
			break;
	}

	return true;

}

/**
 * 检查在指定范围之内的日期，支持选择框自动生成格式和手动连打格式。返回bool，true表示日期有效，false表示日期无效
 * 
 * @author zsc
 * @param {Object}
 *            strDate 身份证中提取的日期
 * @param {Object}
 *            DateFrom
 * @param {Object}
 *            DateTo
 */
function CheckDate(strDate, DateFrom, DateTo) {
	// 手动日期验证正则表达式
	ReDigital8 = /\d{8}/;
	// 自动日期验证正则表达式
	ReAutoDate = /\d{4}-{1}\d{1,2}-\d{1,2}/;
	// 自动日期提取正则表达式
	// ReGetDate = /(\d{4})-{1}(\d{1,2})-(\d{1,2})/;

	if (strDate.indexOf("-") > -1) {
		if (ReAutoDate.test(strDate) == false)
			return false;
		Arr = strDate.split("-");
		strDate = (Arr[0]) + "" + (Arr[1].length < 2 ? "0" : "") + Arr[1]
				+ (Arr[2].length < 2 ? "0" : "") + (Arr[2]);
	}

	if (strDate.length != 8)
		return false;
	if (ReDigital8.test(strDate) == false)
		return false;
	MyDate = eval(strDate.replace(/^(\d{4})(\d{2})(\d{2})$/,
			"new Date($1,$2-1,$3)"));
	strMyDate = MyDate.getFullYear() + (MyDate.getMonth() < 9 ? "0" : "")
			+ (MyDate.getMonth() + 1) + "" + (MyDate.getDate() <= 9 ? "0" : "")
			+ MyDate.getDate();
	// 日期有效性验证
	if (strMyDate != strDate)
		return false;
	// 日期范围验证
	if (MyDate >= DateFrom && MyDate <= DateTo)
		return true;
	else
		return false;
}

/**
 * 对身份证的校验位进行验证
 * 
 * @author zsc
 * @param {Object}
 *            strID
 * @return
 */
function CheckSum(strID) {
	/***************************************************************************
	 * 1.校验的计算公式:对前17位数字本体码加权求和 S = Sum(Ai * Wi); i=0,...,16
	 * 其中Ai表示第i位置上的身份证号码数字值 Wi表示第i位置上的加权因子,对应值为:(7, 9, 10, 5, 8, 4, 2, 1, 6, 3,
	 * 7, 9, 10, 5, 8, 4, 2) 2.以11对计算结果取模 Y = mod(S,11) 3.根据模的值得到对应的校验码 Y 值: 0 1
	 * 2 3 4 5 6 7 8 9 10 校验码: 1 0 X 9 8 7 6 5 4 3 2
	 **************************************************************************/

	// 18位数字提取正则表达式
	Re18Digital = /(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})(\d{1})([0-9xX]{1})/;
	Arr = Re18Digital.exec(strID);
	var Wi = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
	Sum = 0;
	for (i = 0; i <= 16; i++)
		Sum += Arr[i + 1] * Wi[i];
	ArrCheckSum = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3',
			'2');
	strCheckSum = ArrCheckSum[Sum % 11];
	if (strCheckSum == Arr[18].toUpperCase())
		return true;
	else
		return false;
}

function validateRealname(v){
	var zh = /^[\u4E00-\u9FA5]+$/, vL = v.length;
	return ( zh.test(v) && vL >= 2 && vL <= 5) ? true : false;
}
