/**************************************/
/*** 用于客户端检测用户数据的合法性 ***/
/**************************************/

//去除字符串的首尾的空格
String.prototype.trim=function(){
return this.replace(/(^\s*)|(\s*$)/g, "");
}

//去除字符串的左侧的空格
String.prototype.ltrim=function()
{
return this.replace(/(^\s*)/g, "");
}

//去除字符串的右侧的空格
String.prototype.rtrim=function()
{
return this.replace(/(\s*$)/g, "");
}

//返回字符串的实际长度, 一个汉字算2个长度
String.prototype.len=function()
{
var str=this;
return str.replace(/[^\x00-\xff]/g, "**").length
}

//判断输入是否是有效的短日期格式 - "YYYY-MM-DD"
String.prototype.isValidDate=function()
{
var result=this.match(/^([12]\d{3})(-|\/)(\d{1,2})\2(\d{1,2})$/);
if(result==null) return false;
var d=new Date(result[1], result[3]-1, result[4]);
return (d.getFullYear()==result[1]&&d.getMonth()+1==result[3]&&d.getDate()==result[4]);
}

//判断输入是否是有效的时间格式 - "HH:MM:SS"
String.prototype.isValidTime=function()
{
var result=this.match(/^(\d{1,2}):(\d{1,2}):(\d{1,2})$/);
if (result==null) return false;
if (result[1]>24 || result[3]>60 || result[4]>60) return false;
return true;
}

//判断输入是否是有效的长日期格式 - "YYYY-MM-DD HH:MM:SS"
String.prototype.isValidDatetime=function()
{
var result=this.match(/^([12]\d{3})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/);
if(result==null) return false;
var d= new Date(result[1], result[3]-1, result[4], result[5], result[6], result[7]);
return (d.getFullYear()==result[1]&&(d.getMonth()+1)==result[3]&&d.getDate()==result[4]&&d.getHours()==result[5]&&d.getMinutes()==result[6]&&d.getSeconds()==result[7]);
}

//判断输入是否是一个整数(无长度限制)
String.prototype.isValidInteger=function()
{
var result=this.match(/^(-|\+)?(0|([1-9]\d*$))/);
if(result==null) return false;
return true;
}

//判断输入是否是一个正整数(无长度限制)
String.prototype.isValidPositiveInteger=function()
{
var result=this.match(/^(\+)?[1-9]\d*$/);
if(result==null) return false;
if(parseInt(this)>0) return true;
return false;
}

//判断输入是否是一个负整数(无长度限制)
String.prototype.isValidNegativeInteger=function()
{
var result=this.match(/^-(0|([1-9]\d*$))/);
if(result==null) return false;
return true;
}

//判断输入是否是一个数字
String.prototype.isValidNumber=function()
{
return !isNaN(this);
}

//判断输入是否是一个由 A-Z / a-z 组成的字符串
String.prototype.isValidLetters=function()
{
var result=this.match(/^[a-zA-Z]+$/);
if(result==null) return false;
return true;
}

//判断输入是否是一个由 0-9 组成的字符串
String.prototype.isValidDigits=function()
{
var result=this.match(/^\d+$/);
if(result==null) return false;
return true;
}

//判断输入是否是一个由 0-9 / A-Z / a-z 组成的字符串
String.prototype.isValidAlphanumeric=function()
{
var result=this.match(/^[a-zA-Z0-9]+$/);
if(result==null) return false;
return true;
}

//判断输入是否是一个由 0-9 / A-Z / a-z / . / / - / _ 组成的字符串
String.prototype.isValidString=function()
{
var result=this.match(/^[a-zA-Z0-9\s.\-_]+$/);
if(result==null) return false;
return true;
}

//判断输入是否是有效的电子邮件
String.prototype.isValidEmail=function()
{
var result=this.match(/^\w+((\-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/);
if(result==null) return false;
return true;
}

//判断输入是否是一个有效的邮政编码
String.prototype.isValidPostalcode=function()
{
var result=this.match(/(^[0-9]{6}$)/);
if(result==null) return false;
return true;
}

//判断输入是否是一个有效的电话号码(不包括分机号码和国家区号)
String.prototype.isValidPhoneNo=function()
{
var result=this.match(/(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^\([0-9]{3,4}\)[0-9]{7,8}$)/);
if(result==null) return false;
return true;
}

//判断输入是否是一个有效的手机号码
String.prototype.isValidMobileNo=function()
{
var result=this.match(/(^0{0,1}13[0-9]{9}$)/);
if(result==null) return false;
return true;
}


// 检查字符串数据是否为空
//   入口：提示标题、检查对象、错误提示信息
//   缺省：　　　　　　　　　　[XX]不能为空
function chkStringNull(aTitle,aTextCtrl,aMsg) {
	if (aTextCtrl.value.trim()=='') {
		alert((aMsg==null?'['+aTitle+'] 不能为空 ！':aMsg));
		aTextCtrl.focus();
		return false;
	} else
		return true;
}

// 检查输入是否为整数
//   入口：提示标题、检查对象
function chkInteger(aTitle,aTextCtrl) {
	if (!aTextCtrl.value.isValidInteger()) {
		alert('['+aTitle+'] 必须是整数！');
		aTextCtrl.focus();
		aTextCtrl.select();
		return false;
	} else
		return true;
}

// 检查输入是否为数字
//   入口：提示标题、检查对象
function chkDigit(aTitle,aTextCtrl) {
	if (!aTextCtrl.value.isValidDigits()) {
		alert('['+aTitle+'] 必须是数字！');
		aTextCtrl.focus();
		aTextCtrl.select();
		return false;
	} else
		return true;
}

// 检查输入的整形数的取值范围
//   入口：检查对象、最小长度、最大长度
function chkIntegerBound(aTitle,aTextCtrl,aMin,aMax) {
	if ( isNaN(aTextCtrl.value) || aTextCtrl.value<aMin || aTextCtrl.value>aMax ) {
		alert("["+aTitle+"]请输入介于"+aMin+"和"+aMax+"之间的数字");
		aTextCtrl.focus();
		aTextCtrl.select();
		return false;
	} else
		return true;
}

// 检查指定的同组检查框（含checkbox和radiobox）是否选中，都未选中返回假，否则返回真
//   入口：提示标题、检查对象
function chkCheckbox(aTitle,aTextCtrl) {
	var bValid= false;
	if (isNull(aTextCtrl))
		return false;
	var bSingleObject= isNaN(aTextCtrl.length);
	if (bSingleObject) {
		bValid= aTextCtrl.checked;
	} else {
		for (i=0; i<aTextCtrl.length; i++)
			if (aTextCtrl[i].checked)
				bValid = true;
	}
	if (!bValid) {
		alert('请选择 ['+aTitle+'] ！');
		if (bSingleObject)
			aTextCtrl.focus();
		else
			aTextCtrl[0].focus();
		return false;
	} else
		return true;
}

// 检查指定的同组检查框（含checkbox和radiobox）是否选中，都未选中返回假，否则返回真
// 其它项（最后一项）如果选中，要增加对其它项目文本框的非空检查
//   入口：提示标题、检查对象、检查其它对象的后缀
function chkCheckboxOther(aTitle,aTextCtrl,aOtherCtrlExt) {
	var oLastCtrl= aTextCtrl[aTextCtrl.length-1];
	var oOtherCtrl= eval('document.'+oLastCtrl.form.name+'.'+oLastCtrl.name+(aOtherCtrlExt==null?'_other':aOtherCtrlExt));

	if (!chkCheckbox(aTitle,aTextCtrl))
		return false;
	if (oLastCtrl.checked) {
		return (chkStringNull('('+aTitle+')'+oLastCtrl.value,oOtherCtrl))
	}
	return true;
}

// 检查指定的同组下拉列表框是否选中（选中缺省值不算）
//   入口：提示标题、检查对象、缺省值
//   缺省：　　　　　　　　　　空字符串
function chkCombobox(aTitle,aTextCtrl,aDefault) {
	var strDefault= (aDefault==null?'':aDefault);
	var bValid= false;
	var bSingleObject= isNaN(aTextCtrl[0].length);	// 因为单下拉框的length属性代表其项目数
	var oErrorObject;
	if (bSingleObject) {
		oErrorObject= aTextCtrl;
		bValid= !( aTextCtrl.value==strDefault );
	} else {
		oErrorObject= aTextCtrl[0];
		for (i=0; i<aTextCtrl.length; i++)
			if (!( aTextCtrl[i].value==strDefault )) {
				bValid = true;
				oErrorObject= aTextCtrl[i];
				break;
			}
	}
	if (!bValid) {
		alert('请选择 ['+aTitle+'] ！');
		oErrorObject.focus();
		return false;
	} else
		return true;
}

// 检查指定的多个下拉列表框是否都选中（选中缺省值不算）
//   入口：提示标题、检查对象、缺省值
//   缺省：　　　　　　　　　　空字符串
function chkComboboxAll(aTitle,aTextCtrl,aDefault) {
	var strDefault= (aDefault==null?'':aDefault);
	var bValid= true;
	var bSingleObject= isNaN(aTextCtrl[0].length);	// 因为单下拉框的length属性代表其项目数
	var oErrorObject;
	if (bSingleObject) {
		oErrorObject= aTextCtrl;
		bValid= !( aTextCtrl.value==strDefault );
	} else {
		oErrorObject= aTextCtrl[0];
		for (i=0; i<aTextCtrl.length; i++)
			if ( aTextCtrl[i].value==strDefault ) {
				bValid = false;
				oErrorObject= aTextCtrl[i];
				break;
			}
	}
	if (!bValid) {
		alert('请选择 ['+aTitle+'] ！');
		oErrorObject.focus();
		return false;
	} else
		return true;
}

// 检查是否是日期型值
//   入口：提示标题、检查对象
function chkDate(aTitle,aTextCtrl) {
	if ( !aTextCtrl.value.isValidDate() ) {
		alert('['+aTitle+'] 必须是合法日期 ！');
		aTextCtrl.focus();
		aTextCtrl.select();
		return false;
	}
	return true;
}

// 检查Email地址的合法性
//   入口：提示标题、检查对象
function chkEmail(aTitle,aTextCtrl) {
	if ( !aTextCtrl.value.isValidEmail() ) {
		alert('['+aTitle+'] 必须是正确的Email地址 ！');
		aTextCtrl.focus();
		aTextCtrl.select();
		return false;
	} else
		return true;
}

// ----------------------------------------------------------------------------
//    Password Functions
//

// 检查两次填写的密码是否相同，不同时光标落到Pass2上
//   入口：检查Pass对象1、检查Pass对象2
function chkPasswordSame(aPassCtrl1,aPassCtrl2) {
	if ( aPassCtrl1.value!=aPassCtrl2.value ) {
		alert('密码与确认密码必须相同 ！');
		aPassCtrl2.focus();
		aPassCtrl2.select();
		return false;
	} else
		return true;
}

// 检查是否为空串
//   入口：待检字符串
function isEmptyObject(aCtrl) {
	return aCtrl.value.trim()=='';
}

// 检查是否为空对象
//   入口：待检对象
function isNull(aCtrl) {
	return String(aCtrl)=="undefined";
}


// 强制在Frame中打开页面
// 入口：  frame框架名称
function chkIsFrame(aframeName) {
	if (self.name != aframeName) {
		self.location = '/tennis_admin/index.asp';
	}
	return false;
}

//提示信息
// 入口：  aMsg
function dispMsg(aMsg) {
	alert(aMsg);
	return false;
}

//弹出新窗口
// 入口：  aFilePath,aWidth,aHeight
var defaultWidth = 350;
var defaultHeight = 300;
function openWin(aFilePath,aWidth,aHeight) {
	window.open(aFilePath,"","toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=" + (aWidth==null? defaultWidth:aWidth) + ",height=" + (aHeight==null? defaultHeight:aHeight));
}
