/******************************************************************
	Name	:	isAlphaInvalid()	    判断一个字符串是否包含非法字符
	Parm	:	psValue		String		所要判断的字符串
	Return	:	结构		bFlag booleab true	存在 false	不存在；
							sValue String 去掉非法字符后的串；
	Call	:
	Called	:	公用函数
	Modi	:	2001.08.31  罗辉 于济南通软
	Process	:	
******************************************************************/
function isAlphaInvalid(psValue)
{
	var vsAlphaInvalid="\\&~%'\"*;<>#"
	if (isEmpty(psValue))
		psValue="";
	var vStMsg=new Object();
	vStMsg.bFlag=false;
	var i=0;
	for(i=0;i<psValue.length;i++)
	{
		vsTemp=psValue.substr(i,1);
		if(vsAlphaInvalid.indexOf(vsTemp)>=0)
		{
			vStMsg.bFlag=true;
			psValue=psValue.substr(0,i)+psValue.substr(i+1);
			i--;
		}
	} 
	vStMsg.sValue=psValue;
	return vStMsg
}
/*********************************************************************
	Name	:	DelAlphaInvalid()	去掉非法字符
	Parm	:	pObjSrc	TEXT对象
	Return	:	true
	Call	:	
	Called	:	onChange事件调用
	Modi	:	2001.09.06  罗辉 于济南
	Process	:	
**********************************************************************/
function DelAlphaInvalid(pObjSrc)
{
	if(!pObjSrc) return true;
	var vStMsg=isAlphaInvalid(pObjSrc.value);
	if(vStMsg.bFlag)
		pObjSrc.value=vStMsg.sValue;
	return true;
}
/******************************************************************
	Name	:	isNumber()	判断所给的字符串是否为合法的数值
	Parm	:	psValue		String		所要判断的字符串
	Return	:	Boolean		true	是
							false	否
	Call	:
	Called	:	公用函数
	Modi	:	2001.03.29  罗辉 于济南通软
	Process	:	
******************************************************************/
function isNumber(psValue)
{
	if((!psValue)||(psValue=="")||(psValue==null)) return false;
	var vsNumberSymble="+-.,0123456789";
	var vlDeciNum=0;
	var vsTemp="";
	for(var i=0;i<psValue.length;i++)
	{
		vsTemp=psValue.substr(i,1);
		if(vsNumberSymble.indexOf(vsTemp)<0) return false; 
		if((vsTemp=="-" || vsTemp=="+")&& i!=0) return false;
		if(vsTemp==".")
			vlDeciNum++;
	}
	if(vlDeciNum>1) return false;
	return true;
}
/******************************************************************
	Name	:	FormatNumber()	根据给定的值及精度返回其格式
	Parm	:	psValue		String		所要判断的字符串
				piPrec		Integer		精度
				psType		String		转换的类型
							"0"			去掉“，”
							"1"			加上“，”
	Return	:	vsRet		String		形成格式后的字符串
	Call	:
	Called	:	公用函数
	Modi	:	2001.03.29  罗辉 于济南通软
	Process	:	
******************************************************************/
function FormatNumber(psValue,piPrec,psType)
{
	var vsInt,vsDeci;
	var vsValue=psValue;
	var vsSign=""
	if(isEmpty(vsValue))
		vsValue="";
	if((vsValue.substr(0,1)=="+")||(vsValue.substr(0,1)=="-"))
	{
		vsSign=vsValue.substr(0,1);
		vsValue=vsValue.substr(1);
	}
	while(vsValue.substr(0,1)=="0")
		vsValue=vsValue.substr(1,vsValue.length -1);
	if(vsValue.substr(0,1)==".")
		vsValue="0"+vsValue;
	if(Number(vsValue)==0)
	{
		if(psType=="1")
			return "";
		else
		{
			if(piPrec>0)
				vsRet="0"+"."+fill("0","0",piPrec);
			else
				vsRet="0";
			return vsRet;
		}
	}
	while(vsValue.indexOf(",")>=0)
		vsValue=vsValue.replace(",","");
	//var vdValue=Number()
	/*if(psType=="0")
	{
		vsRet=vsSign+vsValue;
		
		return vsRet;
	}*/
	var viPos=vsValue.indexOf(".");
	if(viPos>=0)
	{
		vsInt=vsValue.substr(0,viPos);
		vsDeci=vsValue.substr(viPos+1);
	}
	else
	{
		vsInt=vsValue;
		vsDeci="";
	}
	if(piPrec<vsDeci.length)
	{
		var vsTemp=vsDeci.substr(piPrec,1);
		vsValue=vsInt+"."+vsDeci.substr(0,piPrec);
		if(vsTemp>=5)
		{
			if(piPrec==0)
				vsValue=String(Number(vsValue)+1);
			else
				vsValue=String(Number(vsValue)+Number("0."+fill("","0",piPrec -1)+"11"));
		}
	}
	var viPos=vsValue.indexOf(".");
	if(viPos>=0)
	{
		vsInt=vsValue.substr(0,viPos);
		vsDeci=vsValue.substr(viPos+1);
	}
	else
	{
		vsInt=vsValue;
		vsDeci="";
	}
	//else
	//	vsValue=vsInt+vsDeci;
	//vsInt=vsValue.substr(0,vsValue.length -vsDeci.length);
	//vsDeci=vsValue.substr(vsValue.length -vsDeci.length);
	var viMod=3 -vsInt.length%3;
	var vsRet="";
	if(psType=="1")
	{
		for(var i=0;i<vsInt.length;i++)
		{
			vsRet=vsRet+vsInt.substr(i,1);
			if(((i+viMod)%3==2)&&(i!=vsInt.length -1))
				vsRet+=",";
		}
	}
	else
		vsRet=vsInt;
	if(vsInt.length==0) vsRet="0";
	if(piPrec>0) vsRet+=".";
	for(i=0;i<piPrec;i++)
	{
		if(i>=vsDeci.length)
			vsRet+="0";
		else
			vsRet+=vsDeci.substr(i,1);
	}
	/*
	if(piPrec<vsDeci.length)
	{
		var vsTemp=vsDeci.substr(piPrec,1);
		if(vsTemp>=5)
			vsRet=vsRet.substr(0,vsRet.length-1)+String(Number(vsRet.substr(vsRet.length-1,1))+1);
	}*/
	vsRet=vsSign+vsRet;
	return vsRet;
}
/******************************************************************
	Name	:	trim()		去掉字符串两边的空格
	Parm	:	str			String		去掉空格的字符串
	Return	:	vsRet		String		去掉空格后的字符串
	Call	:
	Called	:	公用函数
	Modi	:	2001.03.29  罗辉 于济南通软
	Process	:	
******************************************************************/
function trim(str)
{
	var i=0;
	var viStartPos=0;
	var viEndPos=-1;
	var chr;
	if(typeof(str)!='undefined')
	{
		if(typeof(str)!='string')
			str=str.toString();
		for(i=0;i<=str.length-1;i++)
		{
			chr=str.charAt(i);
			if(chr!=" ")
			{
				viStartPos=i;
				break;
			}
		}
		for(i=str.length-1;i>=0;i--)
		{
			chr=str.charAt(i);
			if(chr!=" ")
			{
				viEndPos=i
				break;
			}
		}
	}
	if(viStartPos<=viEndPos)
	{
		return str.substring(viStartPos,viEndPos+1);
	}
	else
	{
		return "";
	}
}
/******************************************************************
	Name	:	isEmpty()	判断所给的字符串是否为空串或空值
	Parm	:	psValue		String		所要判断的字符串
	Return	:	Boolean		true	是
							false	否
	Call	:
	Called	:	公用函数
	Modi	:	2001.04.06  罗辉 于济南通软
	Process	:	
******************************************************************/
function isEmpty(psValue)
{
	if(psValue==null || trim(psValue)=="" || psValue=="undefined")
		return true
	return false
}
/******************************************************************
	Name	:	fill()		将给定的字符串是前面补位
	Parm	:	psValue		String	给定的字符串
				psSign		String	前面补位的符号
				piLen		String	达到的字符串长度
	Return	:	vsRet		String	返回的字符串
	Call	:
	Called	:	公用函数
	Modi	:	2001.04.07  罗辉 于济南通软
	Process	:	
******************************************************************/
function fill(psValue,psSign,piLen)
{
	viLen=psValue.length;
	if(viLen>=piLen) return psValue;
	var vsRet=psValue
	for(i=0;i<piLen -viLen;i++)
		vsRet=psSign+vsRet;
	return vsRet;
}
/******************************************************************
	Name	:	KeyFilter()			键值过滤
	Parm	:	psType		String	类型
	Return	:	vbRet		boolean	返回的值
	Call	:
	Called	:	公用函数
	Modi	:	2001.04.13  罗辉 于济南通软
	Process	:	
******************************************************************/
function KeyFilter(psType)
{
	var vbRet=false;
	switch(psType)
	{
		case 'date':
			if (!(event.keyCode == 46|| (event.keyCode>=48 && event.keyCode<=57)))// || event.keyCode == 47 
				vbRet=true;
			break;
		case 'number':
			if (!(event.keyCode>=48 && event.keyCode<=57))
				vbRet=true;
			break;
		case 'cy':
			if (!(event.keyCode == 46 || (event.keyCode>=48 && event.keyCode<=57)))
				vbRet=true;
			break;
		case 'long':
			if (!(event.keyCode == 45 || (event.keyCode>=48 && event.keyCode<=57)))
				vbRet=true;
			break;
		case 'double':
			if (!(event.keyCode == 45 || event.keyCode == 46 || (event.keyCode>=48 && event.keyCode<=57)))
				vbRet=true;
			break;
		default:
			if (event.keyCode == 35 || event.keyCode == 37 || event.keyCode==38)
				vbRet=true;
	}
	return !vbRet;
}
/******************************************************************
	Name	:	GetPerGradeEndPos	获取每级的编码结束位置
	Parm	:	psStru		String	编码结构
	Return	:	null
	Call	:	Null
	Called	:	
	Modi	:	2001.04.18  罗辉 于济南
	Process	:	
******************************************************************/
function GetPerGradeEndPos(psStru,piLen)
{
	var i=0;
	var viPos=0;
	var vArrPos=new Array();
	for(i=0;i<psStru.length;i++)
	{
		viPos=viPos+Number(psStru.substr(i,1));
		vArrPos[i]=viPos;
	}
	for(j=psStru.length;i<piLen;i++)
	{
		vArrPos[i]=0;
	}
	return vArrPos;
}

/******************************************************************
	Name	:	isDate()	判断所给的字符串是否为合法的日期
	Parm	:	psValue		String		所要判断的字符串
	Return	:	Boolean		true	是
							false	否
	Call	:
	Called	:	公用函数
	Modi	:	2001.08.13  罗辉 于济南通软
	Process	:	
******************************************************************/
function isDate(psValue)
{
	if((!psValue)||(psValue=="")||(psValue==null)) return false;
	var vsNumberSymble="-.0123456789";
	var vsTemp="";
	for(var i=0;i<psValue.length;i++)
	{
		vsTemp=psValue.substr(i,1);
		if(vsNumberSymble.indexOf(vsTemp)<0) return false; 
	}
	while(psValue.indexOf(".")>=0)
		psValue=psValue.replace(".","");
	while(psValue.indexOf("-")>=0)
		psValue=psValue.replace("-","");
	if(psValue.length!=8)	return false;
	var vsYear=psValue.substr(0,4);
	var vsMonth=psValue.substr(4,2);
	var vsDay=psValue.substr(6,2);
	if(vsMonth>"12")	return false;
	var vsMaxDay="31";
	if((vsMonth=="04")||(vsMonth=="06")||(vsMonth=="09")||(vsMonth=="11"))
		vsMaxDay="30";
	if(vsMonth=="02")
	{
		if(vsYear.substr(2,2)=="00")
		{
			if(Number(vsYear)%400==0)
				vsMaxDay="29";
			else
				vsMaxDay="28";
		}
		else
		{
			if(Number(vsYear)%4==0)
				vsMaxDay="29";
			else
				vsMaxDay="28";
		}
	}			
	if(vsDay>vsMaxDay)	return false;
	return true;
}
/*********************************************************************
	Name	:	AddOptionToSelect	在SELECT对象中的增加数据
	Parm	:	pObjSrc object SELECT对象
				psValue  String  值
				psText   String  显示文本
	Return	:	Option
	Call	:	
	Called	:	
	Modi	:	2001.09.20  罗辉 于济南
	Process	:	
**********************************************************************/
function AddOptionToSelect(pObjSrc,psValue,psText)
{
	var vObjOption=document.createElement("OPTION");
	vObjOption.text=psText;
	vObjOption.value=psValue;
	pObjSrc.add(vObjOption);
	return vObjOption;
}
/*********************************************************************
	Name	:	ResetSelect()	清除SELECT对象中的数据
	Parm	:	pObjSrc object SELECT对象
	Return	:	Null
	Call	:	
	Called	:	
	Modi	:	2001.09.20  罗辉 于济南
	Process	:	
**********************************************************************/
function ResetSelect(pObjSrc)
{
	if(!pObjSrc) return;
	if(pObjSrc.tagName!="SELECT") return;
	while(pObjSrc.options.length>0)
		pObjSrc.remove(0);
}
/******************************************************************
	Name	:	dateTest(psYear,psMonth,psDay)	日期合法性检验
	Parm	:	psYear(：年)、psMonth(：月)、psDay(：日)
	Return	:	Boolean							true	是
												false	否
	Call	:	getDaysInMonth(month,year)、isLeapYear(year)、strIsNumber(str)
	Called	:	公用函数
	Modi	:	2001.08.13  rainy 于济南通软
	Process	:	
******************************************************************/
function dateTest(psYear,psMonth,psDay)
{
	var vbFlag=null;
	if((psYear.length>4||psYear.length==0)||(psMonth.length>2||psMonth.length==0)||(psDay.length>2||psDay.length==0))
	{
		alert("日期长度非法");
		vbFlag=false;
	}
	else if(strIsNumber(psYear)||strIsNumber(psMonth)||strIsNumber(psDay))
	{
		alert("不是数字");
		vbFlag=false;
	}
	else if(psMonth>12||psMonth<=0)
	{
		alert("月份非法");
		vbFlag=false;
	}
	else 
	{
		if(psYear<=999||psYear>9999)
		{
			alert("年度非法！");
			vbFlag=false;
		}
		else if(psDay>getDaysInMonth(psMonth,psYear)||psDay<=0)
		{
			alert("日期非法！");
			vbFlag=false;
		}
		else
		{
			vbFlag=true;
		}
	}
	return vbFlag;
}
//取得某年月的最大天数。called by dateTest(psYear,psMonth,psDay)
function getDaysInMonth(month,year)
{
	var days;
	if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
		days=31;
	else if (month==4||month==6||month==9||month==11)
		days=30;
	else if (month==2)
	{
		if (isLeapYear(year))
			days=29;
		else
			days=28;	
	}
	return (days);		
}
//判断是否是闰年。	called by dateTest(psYear,psMonth,psDay)
function isLeapYear(year)
{
	if (((year%4)==0)&&((year%100)!=0)||((year%400)==0))
		return (true);
	else
		return (false);	
}
//判断是否是数字。	called by dateTest(psYear,psMonth,psDay)
function strIsNumber(str)
{
	if(isNaN(Number(str)))
		return true;		//不是数字
	else
		return false;		//为数字
}
/*************************************************************************/

/******************************************************************
	Name	:	LengthOfStr(psStr)  计算字符串的长度（字符长度为1，汉字长度为2）
	Parm	:	psStr ：要判断长度的字符串
	Return	:	long 
												false	否
	Call	:	
	Called	:	公用函数
	Modi	:	2002.09.03  李仙利 于济南通软
	Process	:	
******************************************************************/

function LengthOfStr(psStr)
{
  var vsStr=trim(psStr)
  var vlLeng=psStr.length;
  var vsSTRING="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`!@#$%^&*()-_=+;:,./?><\| "
  var vlLEN=0
  for(var i=0;i<vlLeng;i+=1)
  {
    var vsCH=psStr.substring(i,i+1);
    if(vsSTRING.indexOf(vsCH)>=0)
    {
      vlLEN=vlLEN+1
    }
    else
    {
      vlLEN=vlLEN+2
    }    
  }
  return vlLEN;
}
