/***********************************************************
 * Copyright China-Mobile(SZ) 2004. All rights reserved.
 * @file:    ListBean.java
 * @date:    2004/07/31
 * @brief:   J2EE项目有关校验、判断类公共javaScripts funtion library,项目无关性
 * @author:  zhanglg
 * @version: 0.0.1
 * Other:
 * Change Log:
 *      <author>      <time>       <version>     <description>
 *      zhanglg    2004/07/31          0.0.1          create
 *      zhanglg    2004/09/21          0.0.2          规范化格式
 ************************************************************/


function isDBNumber(formObject,x,y) {
    if (formObject.value == null || trim(formObject.value).length==0){
        return false;
    }  else {
        var value = formObject.value;
        var n = value.indexOf(".");
        if(n == -1) {//没有小数点
            if(value.length > (x-y)) {
                return false;
            } else {
               return isNumberStr(value);
            }
        } else {
            var a = value.substring(0,n);
            if(a.length > (x-y)) {
                return false;
            } else {
                if(isNumberStr(a)) {
                    var b = value.substring(n + 1,value.length);
                    if(b.length > y) {
                        return false;
                    } else {
                        return isNumberStr(b);
                    }
                } else {
                    return false;
                }
            }
        }
    }
}


function isNumberStr(str) {
    var strTemp = "0123456789";
	for (i = 0; i < str.length; i++) {
		j = strTemp.indexOf(str.charAt(i));
		if (j == -1) {
			return false;
		}
	}
	return true;
}   



/* FORM对象空校验，若空进行相关提示
 * @param formObject=form对象
 * @param message=form对象的界面标签显示值
 * @return 若FORM对象为空，则返回true
 */
function isEmptyM (formObject,message) { 

if (trim(formObject.value).length==0){
      //alert(message+"不能为空！");
      alert("请输入"+message+"，谢谢！");
	  formObject.focus();
	  return true; 
}
 return false; 
}
/* FORM对象空校验，若空则在FORM另个对象中进行信息显示
 * @param formObject=form对象
 * @param message=form对象的界面标签显示值
 * @param formObject2=要进行信息提示的form对象
 * @return 若FORM对象为空，则返回true
*/
function isEmptyAt (formObject,message,formObject2) { 

if (trim(formObject.value).length==0){
      formObject2.value=message+"不能为空！";
	  formObject.focus();
	  return true; 
}
 return false; 
} 
/* 计算字符串的长度，中文算二个
 * @param str=计算字符串
 * @return 字符串的长度
 */
function strLen(str){
    return str.replace(/[^\x00-\xff]/g,"xx").length;
}
/* 判断某FORM对象的字符串值是否超长,若超长则提示
 * @param formObject=form对象
 * @param message=form对象的界面标签显示值
 * @param len=判断长度大小界限
 * @return 若超长则返回true
 */

function isLonger (formObject,message,len) { 

if (strLen(trim(formObject.value))>len){
      alert(message+"长度不能超过"+len+"！");
	  formObject.focus();
	  return true; 
}
 return false; 
}
/* 实时判断某FORM对象的字符串值输入情况，若超过给定大小则提示错误
 * @param formObject=检控的form对象
 * @param formObject_InputSum=显示currenLen/maxlen信息的FORM对象
 * @param formObject_temp=若超过给定大小则显示提示错误的FORM对象
 * @param maxlen=判断长度大小界限
 */
function testMessageInput(formObject,formObject_InputSum,formObject_temp,maxlen)
{
//var maxlen=160;
var len=strLen(trim(formObject.value));
formObject_InputSum.value=len+"/"+maxlen;
var tmp="";
if (len>maxlen)
{
//field1.value=temp.value;
//len=strLen(trim(field1.value));
//InputSum.value=len+"/160";
//alert("输入字符数已超过最大数！");

formObject_temp.value="输入字符数已超过最大数！！！";
}else
{
//temp.type="hidden";
formObject_temp.value="";

}
}
/* FORM对象合法日期校验，不合法则进行错误提示
 * @param formObject=form对象
 * @param message=form对象的界面标签显示值
 * @return 若合法，则返回true
 */
function isDateM(formObject,message){
   if(isEmptyM(formObject,message)) return false;
   if(!isDateValue(formObject.value)){
       alert(message+"的格式不正确！");
       formObject.focus();
	   return false;
   }
   return true;
}
/* FORM对象校验是否为合法时间，不合法则进行错误提示
 * @param formObject=form对象
 * @param message=form对象的界面标签显示值
 * @return 若合法，则返回true
 */
function isTimeM(formObject,message) 
{ 
var patrn=/^[0-9:]{0,7}$/; 

if (!patrn.exec(formObject.value) || converTimeToHHMM(formObject.value)>"24:00")
 {
       alert(message+"的格式不正确！");
       formObject.focus();
       return false;
   }
   
return true;
}
/* 比较两个dateTime时间的大小
 * @param dt1=第1个datetime值
 * @param dt2=第2个datetime值
 * @return flag 0=相等，1=dt1>dt2,-1=dt1<dt2
 */

function DateTimeDiff(dt1,dt2)
{
var i1=dt1.indexOf(" ");
var i2=dt2.indexOf(" ");
var date1="";
var time1="";
var date2="";
var time2="";

if (i1>=0)
{
date1=dt1.substr(0,i1);
time1=dt1.substr(i1+1,dt1.length-1);
time1=converTimeToHHMM(time1);
}else
{
date1=dt1;
}

if (i2>=0)
{
date2=dt2.substr(0,i2);
time2=dt2.substr(i2+1,dt2.length-1);
time2=converTimeToHHMM(time2);

}else
{
date2=dt2;
}
date1=converDateToYYYYMMDD(date1);
date2=converDateToYYYYMMDD(date2);
var tmpdt1=date1+" "+time1;
var tmpdt2=date2+" "+time2;
var flag="-1"
//alert(".....S.."+tmpdt1+"......E.."+tmpdt2);

if (tmpdt1==tmpdt2)
{
flag="0"
}else
if (tmpdt1>tmpdt2)
{
flag="1"
	
}

return flag;

}
/* FORM对象校验是否为合法整数，不合法则进行错误提示
 * @param formObject=form对象
 * @param message=form对象的界面标签显示值
 * @return 若合法，则返回true
 */
function isIntM(formObject,message){
   if(!isInt(formObject.value)){
       alert(message+"必须是整数，请输入有效的数字，谢谢！"); 
       formObject.focus();
	   return false;
   }
   return true;
}

/* FORM对象校验是否为合法数字，不合法则进行错误提示
 * @param formObject=form对象
 * @param message=form对象的界面标签显示值
 * @return 若合法，则返回true
 */
function isDigitM(formObject,message){
   if(!isDigit(formObject.value)){
       alert(message+"必须是数值，请输入有效的数字，谢谢！"); 
       formObject.focus();
	   return false;
   }
   return true;
}

/* FORM对象校验是否为合法整数，不合法则进行错误提示
 * @param formObject=form对象
 * @param message=form对象的界面标签显示值
 * @return 若合法，则返回true
 */
function isIntMsg(formObject,message){
   if(!isInt(formObject.value)){
       alert(message+"必须是整数，请输入有效的数字，谢谢！"); 
       formObject.focus();
	   return true;
   }
   return false;
}

/* FORM check 对象校验是否选择，没有选择则进行错误提示
 * @param formObject=form check对象
 * @param message=form对象的界面标签显示值
 * @return 若合法，则返回true
 */
function isCheckM(formObject,message){
    for(var len=0;len<formObject.length;len++){
	   if(formObject[len].checked)
		   return true;
      
   }
   alert(message+"没有选择");
   return false;
}
/********************************************************************************* 
* FUNCTION: isBetween 
* PARAMETERS: val AS any value 
* lo AS Lower limit to check 
* hi AS Higher limit to check 
* CALLS: NOTHING 
* RETURNS: TRUE if val is between lo and hi both inclusive, otherwise false. 
**********************************************************************************/ 
function isBetween (val, lo, hi) { 
if ((val < lo) || (val > hi)) { return(false); } 
else { return(true); } 
} 

/********************************************************************************* 
* FUNCTION: isDateValue checks a valid date 
* PARAMETERS: str AS String 
* CALLS: isBetween, isInt 
* RETURNS: TRUE if theStr is a valid date otherwise false. 
**********************************************************************************/ 
function isDateValue (str) { 
var the1st = str.indexOf('-'); 
var the2nd = str.lastIndexOf('-'); 

if (the1st == the2nd) { 
	return(false); 
	} 
else { 
	var y = str.substring(0,the1st); 
	var m = str.substring(the1st+1,the2nd); 
	var d = str.substring(the2nd+1,str.length); 
	var maxDays = 31; 

	if (isInt(m)==false || isInt(d)==false || isInt(y)==false) { 
		return(false); } 
	else if (y.length != 4) { return(false); } 
	else if (!isBetween (m, 1, 12)) { return(false); } 
	else if (m==4 || m==6 || m==9 || m==11) maxDays = 30; 
	else if (m==2) { 
		if (y % 4 > 0) maxDays = 28; 
		else if (y % 100 == 0 && y % 400 > 0) maxDays = 28; 
		else maxDays = 29; 
	} 
	
	if (isBetween(d, 1, maxDays) == false) { 
		return(false); } 
	else { 
		return(true); 
		} 
	} 
} 
/********************************************************************************* 
* FUNCTION: isEuDate checks a valid date in British format:03/21/2004
* PARAMETERS: str AS String 
* CALLS: isBetween, isInt 
* RETURNS: TRUE if theStr is a valid date otherwise false. 
**********************************************************************************/ 
function isEuDate (str) { 
if (isBetween(str.length, 8, 10) == false) { return(false); } 
else { 
var the1st = str.indexOf('/'); 
var the2nd = str.lastIndexOf('/'); 

if (the1st == the2nd) { return(false); } 
else { 
var m = str.substring(the1st+1,the2nd); 
var d = str.substring(0,the1st); 
var y = str.substring(the2nd+1,str.length); 
var maxDays = 31; 

if (isInt(m)==false || isInt(d)==false || isInt(y)==false) { 
return(false); } 
else if (y.length < 4) { return(false); } 
else if (isBetween (m, 1, 12) == false) { return(false); } 
else if (m==4 || m==6 || m==9 || m==11) maxDays = 30; 
else if (m==2) { 
if (y % 4 > 0) maxDays = 28; 
else if (y % 100 == 0 && y % 400 > 0) maxDays = 28; 
else maxDays = 29; 
} 

if (isBetween(d, 1, maxDays) == false) { return(false); } 
else { return(true); } 
} 
} 

} 
/******************************************************************************** 
* FUNCTION: Compare Date! Which is the latest! 
* PARAMETERS: lessDate,moreDate AS String 
* CALLS: isDate,isBetween 
* RETURNS: TRUE if lessDate<moreDate 
*********************************************************************************/ 
function isComdate (lessDate , moreDate) 
{ 

/* *******************************************************************************  
	if (!isDateValue(lessDate)) { return(false);} 
	if (!isDateValue(moreDate)) { return(false);} 
	var less1st = lessDate.indexOf('-'); 
	var less2nd = lessDate.lastIndexOf('-'); 
	var more1st = moreDate.indexOf('-'); 
	var more2nd = moreDate.lastIndexOf('-'); 
	var lessy = lessDate.substring(0,less1st); 
	var lessm = lessDate.substring(less1st+1,less2nd); 
	var lessd = lessDate.substring(less2nd+1,lessDate.length); 
	var morey = moreDate.substring(0,more1st); 
	var morem = moreDate.substring(more1st+1,more2nd); 
	var mored = moreDate.substring(more2nd+1,moreDate.length); 
	var Date1 = new Date(lessy,lessm,lessd); 
	var Date2 = new Date(morey,morem,mored); 
	if (Date1>Date2) { 
		return(false);
	} 
	return(true); 
******************************************************************************* */
	dt1=lessDate+" 00:00:00";
	dt2=moreDate+" 00:00:00";
	
	rt=DateTimeDiff(dt2,dt1);
	if(rt<0){
		return(false);
	}
	return(true); 
} 

/********************************************************************************* 
* FUNCTION isEmpty checks if the parameter is empty or null 
* PARAMETER str AS String 
**********************************************************************************/ 
function isEmpty (str) { 
if ((str==null)||(str.length==0)) return true; 
else return(false); 
} 

/********************************************************************************* 
* FUNCTION: isInt 
* PARAMETER: str AS String 
* RETURNS: TRUE if the passed parameter is an integer, otherwise FALSE 
* CALLS: isDigit 
**********************************************************************************/ 
function isInt (str) { 
var flag = true; 

if (isEmpty(str)) { flag=false; } 
else 
{ for (var i=0; i<str.length; i++) { 
if (isDigit(str.substring(i,i+1)) == false) { 
flag = false; break; 
} 
} 
} 
return(flag); 
} 


/********************************************************************************* 
* FUNCTION: isReal 
* PARAMETER: str AS String 
decLen AS Integer (how many digits after period) 
* RETURNS: TRUE if str is a float, otherwise FALSE 
* CALLS: isInt 
**********************************************************************************/ 
function isReal (str, decLen) { 
var dot1st = str.indexOf('.'); 
var dot2nd = str.lastIndexOf('.'); 
var OK = true; 

if (isEmpty(str)) return false; 

if (dot1st == -1) { 
if (!isInt(str)) return(false); 
else return(true); 
} 

else if (dot1st != dot2nd) return (false); 
else if (dot1st==0) return (false); 
else { 
var intPart = str.substring(0, dot1st); 
var decPart = str.substring(dot2nd+1); 

if (decPart.length > decLen) return(false); 
else if (!isInt(intPart) || !isInt(decPart)) return (false); 
else if (isEmpty(decPart)) return (false); 
else return(true); 
} 
} 

/********************************************************************************* 
* FUNCTION: isEmail 
* PARAMETER: String (Email Address) 
* RETURNS: TRUE if the String is a valid Email address 
* FALSE if the passed string is not a valid Email Address 
* EMAIL FORMAT: AnyName@EmailServer e.g; webmaster@hotmail.com 
* @ sign can appear only once in the email address. 
*********************************************************************************/ 
function isEmail (str) { 
var atIndex = str.indexOf('@'); 
var dotIndex = str.indexOf('.', atIndex); 
var flag = true; 
theSub = str.substring(0, dotIndex+1) 

if ((atIndex < 1)||(atIndex != str.lastIndexOf('@'))||(dotIndex < atIndex + 2)||(str.length <= theSub.length)) 
{ return(false); } 
else { return(true); } 
} 

//校验是否全由数字组成 
function isDigit(str) 
{ 
var patrn=/^[0-9]{1,20}$/; 
if (!patrn.exec(str)) return false 
return true 
} 

//校验登录名：只能输入5-20个以字母开头、可带数字、“_”、“.”的字串 
function isRegisterUserName(str) 
{ 
var patrn=/^[a-zA-Z]{1}([a-zA-Z0-9]|[._]){4,19}$/; 
if (!patrn.exec(str)) return false 
return true 
} 

//校验用户姓名：只能输入1-30个以字母开头的字串 
function isTrueName(str) 
{ 
var patrn=/^[a-zA-Z]{1,30}$/; 
if (!patrn.exec(str)) return false 
return true 
} 

//校验密码：只能输入6-20个字母、数字、下划线 
function isPasswd(str) 
{ 
var patrn=/^(\w){6,20}$/; 
if (!patrn.exec(str)) return false 
return true 
} 

//校验普通电话、传真号码：可以“+”开头，除数字外，可含有“-” 
function isTel(str) 
{ 
//var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?(\d){1,12})+$/; 
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/; 
if (!patrn.exec(str)) return false 
return true 
} 

//校验手机号码：必须以数字开头，除数字外，可含有“-” 
function isMobil(str) 
{ 
var patrn=/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/; 
if (!patrn.exec(str)) return false 
return true 
} 

//校验邮政编码 
function isPostalCode(str) 
{ 
//var patrn=/^[a-zA-Z0-9]{3,12}$/; 
var patrn=/^[a-zA-Z0-9 ]{3,12}$/; 
if (!patrn.exec(str)) return false 
return true 
} 

//校验搜索关键字 
function isSearch(str) 
{ 
var patrn=/^[^`~!@#$%^&*()+=|\\\][\]\{\}:;\'\,.<>/?]{1}[^`~!@$%^&()+=|\\\][\]\{\}:;\'\,.<>?]{0,19}$/; 
if (!patrn.exec(str)) return false 
return true 
} 
//校验IP地址
function isIP(str) 
{ 
var patrn=/^[0-9.]{1,20}$/; 
if (!patrn.exec(str)) return false 
return true 
} 
function its_a_digit(character){
	var digit_characters = "0123456789";
	if(digit_characters.indexOf(character) == -1){
		return false;
	}
	return true;
}
//判断是否为数字
function its_integer(string_value){
	for(var i = 0;i < string_value.length;i++){
		current_char = string_value.charAt(i);
		if(!its_a_digit(current_char)){
			return false;
		}
	}
	return true;
}

function its_a_float(character){
	var digit_characters = "-.0123456789";
	if(digit_characters.indexOf(character) == -1){
		return false;
	}
	return true;
}
//判断是否为浮点数
function its_float(string_value){
	var counter = 0;
	for(var i = 0;i < string_value.length;i++){
		current_char = string_value.charAt(i);
		if(!its_a_float(current_char)){
			return false;
		}
		if((i == 0 && current_char == ".") || 
			(i == string_value.length - 1 && current_char == ".")){
			return false;
		}
		if(current_char == "."){
			counter++;
		}
	}
	if(counter > 1){
		return false;
	}
	return true;
}
 
function isEmptyStr(str) { 
    if (str==null) return true; 
    var after = trim(str);
    if (after.length == 0 ) return true;
    
    return false;
} 

//校验是否由16进制数字组成 
function is16Digit(str) 
{ 
var patrn=/^[A-F0-9]{1,20}$/; 
if (!patrn.exec(str)) return false 
return true 
} 