// ****************************************************************
// File Name:			CheckFunction.js
// Description:			提供一组检查函数，判断数据是否有效，主要用于验证用户填写的表单数据
// -------------------------
// 2002-4-4,Created by yzy
// ****************************************************************


//此全局变量决定了在判断邮件、身份证号、数字时，是否允许用户不填写内容。
var g_blnAllowEmpty = true;

// 预定义好的文件过滤字符串
var g_FilterAspFile = ".asp.aspx";								//Asp文件
var g_FilterImageFile = ".gif.bmp.jpg.jpeg.png.ico.emf.wmf";	//图片文件
var g_FilterFlashFile = ".swf";									//Flash文件
var g_FilterMediaFile = ".asf.asx.wmv.avi.mpg.mpeg.rm.ra.ram";	//媒体文件


//判断填写的email地址是否有效
function IsValidMail(l_strMail, l_blnAllowEmpty){
	if (l_blnAllowEmpty == null) l_blnAllowEmpty = g_blnAllowEmpty;

	if (l_blnAllowEmpty && l_strMail == "")
		return true;

	var l_strTemp;
	var l_objRE = /(\w+@\w+\.\w+)(\.{0,1}\w*)(\.{0,1}\w*)/i;
	l_objRE.exec(l_strMail);


	if (RegExp.$3 != "" && RegExp.$3 != "." && RegExp.$2 != ".")
		l_strTemp = RegExp.$1 + RegExp.$2 + RegExp.$3;
	else
		if (RegExp.$2 !="" && RegExp.$2 != ".")
			l_strTemp = RegExp.$1 + RegExp.$2;
		else
			l_strTemp = RegExp.$1;

	if (l_strTemp != l_strMail)
		return false;

	return true;
}

//判断填写的身份证号是否有效
function IsValidIdentifyNumber(l_strIDNumber, l_blnAllowEmpty){
	if (l_blnAllowEmpty == null) l_blnAllowEmpty = g_blnAllowEmpty;

	if (l_blnAllowEmpty && l_strIDNumber == "")
		return true;

	l_strIDNumber = l_strIDNumber.replace(/(^[ \t]+)|([ \t]+$)/g , "" );
	if( l_strIDNumber.length == 15 || l_strIDNumber.length == 18 )
	{
		if( l_strIDNumber.search(/^[\d]+[\dx]$/gi) < 0)
			return false;
	}
	else
		return false;

	return true;
}

//判断填写的数字是否有效
function IsValidNumber(l_strNumber, l_blnAllowEmpty, l_blnAllowZero){
	if (l_blnAllowEmpty == null) l_blnAllowEmpty = g_blnAllowEmpty;

	if (l_blnAllowEmpty && l_strNumber == "")
		return true;

	l_strNumber = l_strNumber.replace(/(^[ \t]+)|([ \t]+$)/g , "" );

	// 判断整数
	if ( l_strNumber.search(/^[\d]+$/g) < 0 ) return false;

	// 判断非零
	if ( (!l_blnAllowZero) && ( parseInt(l_strNumber) == 0 ) ) return false;

	return true;
}

//判断填写的内容是否为空
function IsEmpty(l_strValue){
	return (killspace(l_strValue) == "");
}

//判断是否包含非法的字符
function HasBadLetter(l_strValue, l_strBadLetters){

	for(var i=0; i < l_strValue.length; i++)
	{
		if(l_strBadLetters.indexOf(l_strValue.substr(i,1)) >= 0 )
			return true;
	}
	return false;
}

function IsDifferent(l_strValue1, l_strValue2){
	return (l_strValue1 != l_strValue2);
}

function IsValidUrl(l_strUrl, l_blnAllowEmpty){
	if (l_blnAllowEmpty == null) l_blnAllowEmpty = g_blnAllowEmpty;

	if (l_blnAllowEmpty && l_strUrl == "")
		return true;

	l_strUrl = killspace( l_strUrl );

	if (!l_strUrl.length) return false;
	if (l_strUrl == "http://") return false;

	return true;
}

// 判断上传的是否是合法的文件类型
function IsValidFileType( sFileName, sAllowFilter, sDenyFilter )
{
	var sExt = GetFileExt(sFileName);
	if ( sExt.length )
	{
		var reg = new RegExp("\\." + sExt + "\\b", "i");

		if ( sAllowFilter.length )	return ( reg.test(sAllowFilter) );
		if ( sDenyFilter.length )	return ( !reg.test(sDenyFilter) );
	}

	return true;

}

// 得到上传文件的文件名，eg: GetFileExt("c:\a.txt") = "txt"
function GetFileExt( sFileName )
{
	var sExt = "";
	var pos = killspace(sFileName).lastIndexOf(".");
	if ( pos >= 0 ) {
		sExt = sFileName.substr( pos + 1, sFileName.length - pos - 1 );
		sExt = sExt.toLowerCase();
	}
	return sExt;
}

//JScript's trim
function killspace(l_strValue){
	return l_strValue.replace(/(^\s*)|(\s*$)/g, "");
}

function killHTMLspace(l_strValue){
	l_strValue = killspace( l_strValue );
	l_strValue = l_strValue.replace(/(^(&nbsp;)*)|((&nbsp;)*$)/g, "");

	// 在HTML编辑器中，如果输入一个空格，再删除那个空格，<p>&nbsp;</p>就会出现，
	// 在此并没有直接删除掉所以的<p>&nbsp;</p>，因为如果用户希望在首或尾添加空行时，也会有这种输入，
	// 在此只是简单地认为如果所有内容只是一个<p>&nbsp;</p>，则认为内容为空
	if ( l_strValue.toLowerCase() == "<p>&nbsp;</p>" ) l_strValue = "";

	return l_strValue;
}

//判断输入是否非空，如为空直接弹出对话框提示用户
function PromptEmptyString(l_label, l_objInput){

	if (!l_objInput) return false;

	if (IsEmpty(l_objInput.value)){
		alert("对不起，" + l_label + "不能为空，请您正确填写！");
		l_objInput.focus();
		l_objInput.select();
		return false;
	}

	return true;
}

//判断包含非法的字符，如包含非法的字符直接弹出对话框提示用户
function PromptBadLetter(l_label, l_objInput, l_strBadLetters){

	if (!l_objInput) return false;

	if ( HasBadLetter(l_objInput.value, l_strBadLetters) ){
		alert("对不起，" + l_label + "中不能包含有以下字符：\n " + l_strBadLetters + " \n请您正确填写！");
		l_objInput.focus();
		l_objInput.select();
		return false;
	}

	return true;
}

//判断两个值是否相等，如不等直接弹出对话框提示用户
function PromptDifferent(l_label1, l_label2, l_objInput1, l_objInput2){

	if ( (!l_objInput1) || (!l_objInput2) ) return false;

	if ( IsDifferent(l_objInput1.value, l_objInput2.value) ){
		alert("对不起，您填写的" + l_label1 + "与" + l_label2 + "不一致，请您重新填写！");
		l_objInput2.value = "";
		l_objInput1.focus();
		l_objInput1.select();
		return false;
	}

	return true;
}

//判断输入的数字是否有效，如无效直接弹出对话框提示用户
function PromptInvalidNumber(l_label, l_objInput, l_blnAllowEmpty, l_blnAllowZero){

	// 默认不允许输入零
	if (l_blnAllowZero == null) l_blnAllowZero = false;

	if (!l_objInput) return false;

	if (!IsValidNumber(l_objInput.value, l_blnAllowEmpty, l_blnAllowZero)){
		var l_type = l_blnAllowZero ? "整数" : "正整数";
		alert("对不起，" + l_label + "必须为" + l_type + "，请您正确填写！");
		l_objInput.focus();
		l_objInput.select();
		return false;
	}

	return true;
}

//判断输入的身份证号是否有效，如无效直接弹出对话框提示用户
function PromptInvalidIdentifyNumber(l_label, l_objInput, l_blnAllowEmpty){

	if (!l_objInput) return false;

	if (!IsValidIdentifyNumber(l_objInput.value, l_blnAllowEmpty)){
		alert("对不起，请您正确填写" + l_label + "！");
		l_objInput.focus();
		l_objInput.select();
		return false;
	}

	return true;
}

//判断输入的e-mail是否有效，如无效直接弹出对话框提示用户
function PromptInvalidMail(l_label, l_objInput, l_blnAllowEmpty){

	if (!l_objInput) return false;

	if (!IsValidMail(l_objInput.value, l_blnAllowEmpty)){
		alert("对不起，请您正确填写" + l_label + "！");
		l_objInput.focus();
		l_objInput.select();
		return false;
	}

	return true;
}

//判断输入的url是否有效，如无效直接弹出对话框提示用户
function PromptInvalidUrl(l_label, l_objInput, l_blnAllowEmpty){

	if (!l_objInput) return false;

	if (!IsValidUrl(l_objInput.value, l_blnAllowEmpty)){
		alert("对不起，请您正确填写" + l_label + "！");
		l_objInput.focus();
		l_objInput.select();
		return false;
	}

	return true;
}

//判断必选的Select是否被选中有效值，如无效值直接弹出对话框提示用户
function PromptForcedSelect(l_label, l_objSelect){

	if (!l_objSelect) return false;

	if (l_objSelect.value < 0 ){
		alert("对不起，请您选择" + l_label + "！");
		l_objSelect.focus();
		return false;
	}

	return true;
}

//check if the content is too long
function checkLength(value){
	if(value.length > 2000000)
		return false;
	else
		return true;
}

//hand the Long String problem
function handleLongString(theform, colname){

	var iCount;		//拆分为多少个域
	var strData;	//原始数据
	var iMaxChars = 50000;	//考虑到汉字为双字节，域的最大字符数限制为50K

	var objHidden;	//辅助的表单域

	strData = theform.elements[colname].value;

	iCount = parseInt(strData.length / iMaxChars) + 1;

	//记录原数据域拆分为多少个子域
	if(theform.elements[colname + 'Count'] != null){
		theform.removeChild(theform.elements[colname + 'Count']);
	}

	objHidden = document.createElement('<input name="' + colname + 'Count" type="hidden" value="' + iCount + '">');
	theform.appendChild(objHidden);


	//生成各子域
	for (var i = 1; i <= iCount; i++)
	{
		if(theform.elements[colname + i] != null){
			theform.removeChild(theform.elements[colname + i]);
		}

		objHidden = document.createElement('<input name="' + colname + i + '" type="hidden" value="">');
		theform.appendChild(objHidden);

		theform.elements[colname + i].value = strData.substring((i - 1) * iMaxChars, i * iMaxChars);
	}


	//原数据域清空
	theform.elements[colname].value = "";
}

function IsValidVDName(strVDName)
{
	if(strVDName == "")return false;
	var reg = /\w+/g;
	return strVDName.replace(reg, "") == "";
}