/*************************************
 * Global variables
 *************************************/
var alphabet="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var numberlist="0123456789";
var base_dir="";
/*--------------------------------------------------------*\
|                                                          |
|        Section  I. Basic Functions                       |
|                                                          |
\*--------------------------------------------------------*/


/*************************************
* 1. Check whether a string is null. *
*************************************/
function isEmpty(s)
{
	return ((s == null) || (s.length == 0) || (s == ""));
}

/****************************************
* 2. Check whether a string is all '0'. *
****************************************/
function isAllZero(s)
{
	var t = "";
	if(s == null) return true;
	for(var i = 0; i < s.length; i++) t = t + "0";
	return (t == s) ? true : false;
}

/****************************************
* 3. Check whether a string is all ' '. *
****************************************/
function isAllSpace(s)
{
	var t = "";
	if(s == null) return true;
	for(var i = 0; i < s.length; i++) t = t + " ";
	return (t == s) ? true : false;
}

/**************************************
* 4. Check whether a string has space. *
***************************************/
function hasSpace(s)
{
	var whitespace = " \t\n\r";
	var c;
	for(var i = 0; i < s.length; i++)
	{
		c = s.charAt(i);
		if (whitespace.indexOf(c) >= 0)	return true;
	}
	return false;
}

/********************************************************
* 5. If the characters of the string s are all included *
*    in the "bag", return true; else return false.      *
********************************************************/
function isCharsInBag(s, bag)
{
	var c;
	for(var i = 0; i < s.length; i++)
	{
		c = s.charAt(i);
		if(bag.indexOf(c) == -1) return false;
	}
	return true;
}

/*********************************************************
* 6. If the characters of the string s are NOT included  *
*    in the "bag", return ""; else return the character. *
*********************************************************/
function isCharsInBagEx(s, bag)
{
	var c;
	for(var i = 0; i < s.length; i++)
	{
		c = s.charAt(i);
		if(bag.indexOf(c) > -1) return c;
	}
	return "";
}

/************************************************
* 7. Trim the left or right spaces of a string. *
************************************************/
function LTrim(s)
{
	for(var i = 0; i < s.length; i++)
		if(s.charAt(i) != ' ')
			return s.substring(i, s.length);
	return "";
}
function RTrim(s)
{
	for(var i = s.length - 1; i >= 0; i--)
		if(s.charAt(i) != ' ')
			return s.substring(0, i + 1);
	return "";
}
function Trim(s)
{
	return RTrim(LTrim(s));
}

function splisStr(str) {
	var seperator = ",";
	return str.split(seperator);
}



/*--------------------------------------------------------*\
|                                                          |
|        Section  II. Validation Functions                 |
|                                                          |
\*--------------------------------------------------------*/


/*********************************
* 1. Check String Length
*********************************/
function checkStrLength(s,minlen,maxlen)
{
	if((s.length>maxlen)||(s.length<minlen))
	{
		return false;
	}
	return true;
}

/*********************************
* 2. Check Date Valiation
*********************************/
function checkDate(year,month,day)
{
	if(isEmpty(year)||isEmpty(month)||isEmpty(day))
	        return false;
	if((!isCharsInBag(year,numberlist))||(!isCharsInBag(month,numberlist))||(!isCharsInBag(day,numberlist)))
		return false;

	var y=parseInt(year,10);
	var m=parseInt(month,10);
	var d=parseInt(day,10);

	if((y>9999)||(m>12)||(m==0)||(d>31)||(d==0))
	        return false;

	switch(m)
	{
		case 4:case 6:case 9:case 11:
		     if(d==31) return false;
		     break;
		case 2:
		     if(y%4==0)
		     {
			  if((y%100==0)&&(y%400!=0)){
			      if (d>28) return false;
			  }
			  else{
			      if (d>29) return false;
			  }
		     }
		     else
		     {
			  if(d>28) return false;
		     }
	}
	return true;
}
function checkDate2(d,ch)
{
	var local = d.indexOf(ch);
	var local2 = d.lastIndexOf(ch);
	if(local<=0||local2<0||local==local2||local2>=d.length-1)
	    return false;
	var year = d.substring(0,local);
	var month =d.substring(local+1,local2);
	var dd = d.substring(local2+1);
	return checkDate(year,month,dd);
}
/*********************************
* 3. Check Email Address
*********************************/
function checkMailAddr(s)
{
	var i = 1;
	var pos1,pos2,pos3,pos4;
	var bag = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.-_@";

	if (hasSpace(s))
		return false;

	pos1 = s.indexOf("@");
	pos2 = s.indexOf(".");
	pos3 = s.lastIndexOf("@");
	pos4 = s.lastIndexOf(".");
	if ((pos1 <= 0)||(pos1 == s.length-1)||(pos2 <= 0)||(pos2 == s.length-1))
	{
		return false;
	}else{
		if((pos1 == pos2 - 1)||
		(pos1 == pos2 + 1) ||
		(pos1 != pos3)||	//find two '@'
		(pos4 < pos3))		//'.' should behind the '@'
		{
			return false;
		}
	}
	if (!isCharsInBag(s, bag))
	{
		return false;
	}
	return true;
}

/************************************************
* 4. Check whether a telephone number is valid
************************************************/
function isTelValid(s)
{
	if(isAllZero(s)) return false;
	return isCharsInBag(s, "0123456789-()*");
}

/************************************************
* 5. Check whether a currency value is valid
************************************************/
function isMoneyValid(s,v)
{
	if(!isCharsInBag(s, "0123456789.")) return false;
	if(s.indexOf(".")<0) return true;
	if(s.indexOf(".")==0) return false;
	if(s.indexOf(".")!=s.lastIndexOf(".")) return false;
	if(s.lastIndexOf(".")>0&&s.lastIndexOf(".")<s.length-v-1) return false;
	return true;
}

/***********************************************
 * 6. Caculate string's length include unicode
 **********************************************/
function getRealLength(s)
{
	var i,j,s1;
	j=0;
	s1=escape(s);
	i=s1.indexOf("%u");
	while(i>=0)
	{
	        j=j+1;
	        i=s1.indexOf("%u",i+1);
	}
	return s.length+j;
}

function checkContentLength(s,minlen,maxlen)
{
	if((getRealLength(s)>maxlen)||(getRealLength(s)<minlen))
	{
		return false;
	}
	return true;
}

/***********************************************
 * 7. Check ID Card Number validation
 **********************************************/
 function isIDCardVaildByLength(s){
	if(!isCharsInBag(s,numberlist+alphabet)) return false;
	if((s.length!=15)&&(s.length!=18)) return false;
	return true;
}
function isIDCardValid(s,bd)
{
	if(!isCharsInBag(s,numberlist)) return false;
	if((s.length!=15)&&(s.length!=18)) return false;
	if(bd.length!=8) return false;
	if(s.length==15&&(s.substring(6,12)!=bd.substring(2,8))) return false;
	if(s.length==18&&(s.substring(6,14)!=bd)) return false;
	return true;
}

function isIDCardValidExd(s,bd)
{
        if((s.length != 15)&&(s.length != 18))
             return false;
        if(bd.length != 8)
             return false;
        if(s.length == 15 ){
             if((s.substring(6,12) != bd.substring(2,8) || !isCharsInBag(s,numberlist)))
                   return false;
        }
        if(s.length == 18){
             if((s.substring(6,14) != bd || !isCharsInBag(s.substring(0,17),numberlist) || !isCharsInBag(s.substring(17,18),"0123456789X")))
                    return false;
        }
        return true;
}

function getIDCardEfficientCode(code){
         //加权因子数组
         var tt= new Array(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1);
         //校验码数组
         var aa = new Array("1","0","X","9","8","7","6","5","4","3","2");
         var s = 0;

         for(var i=0;i<17;i++){
               s = s + parseInt(code.substring(i,i+1))*tt[i];
         }
         return aa[s%11];//返回校验码
}

//验证身份证号码
//sex=0:表示男
//sex=1:表示女
//sex!=0,1:表示不检测性别
function checkIDCard(id,birthday,sex){
        var data;

        if(!(id.length == 15 || id.length == 18))
                return "身份证号码长度不正确！";
        if(id.length == 18){
               data = id.substring(0,17);
               if(!isCharsInBag(data,"0123456789"))
                       return "身份证号码包含非法字符！";
               if(id.substring(6,14) != birthday)
                       return "身份证号码中生日表示错误！";
               if(sex == "0" && !isCharsInBag(id.substring(16,17),"13579"))
                       return "身份证号码中性别表示错误！";
               if(sex == "1" && !isCharsInBag(id.substring(16,17),"02468"))
                       return "身份证号码中性别表示错误！";
               if(getIDCardEfficientCode(data) != id.substring(17,18))
                       return "身份证号码中效验码表示错误！";
               return "0";
        }else{
               if(!isCharsInBag(id,"0123456789"))
                       return "身份证号码包含非法字符！";
               if(id.substring(6,12) != birthday.substring(2,8))
                       return "身份证号码中生日表示错误！";
               if(sex == "0" && !isCharsInBag(id.substring(14,15),"13579"))
                       return "身份证号码中性别表示错误！";
               if(sex == "1" && !isCharsInBag(id.substring(14,15),"02468"))
                       return "身份证号码中性别表示错误！";
               return "0";
        }
}
/*--------------------------------------------------------*\
|                                                          |
|        Section  III. Miscellaneous                       |
|                                                          |
\*--------------------------------------------------------*/

/*********************************************
* 1. 确认删除                                *
*********************************************/	
function doConfirm() {
  return confirm("真的要删除吗?");
}

/*********************************************
* 2. 返回某页                                *
*********************************************/	
function goBack(page){
	self.location = page;
}
/*********************************************
* 3. 检测编号是否由数字和字母组成            *
*********************************************/	
function checkNumber(str){
	s1=escape(str);
	i=s1.indexOf("%u");
	if(i>=0)return false;//判断如果是中文则返回false;
	for(i=0; i<str.length; i++){
		c=str.charAt(i);
		if(!(isCharsInBag(c,alphabet) || isCharsInBag(c,numberlist)))return false;
	}
	return true;
}
/*********************************************
* 4. 检查money格式                           *
*    s:要检查字符串							 *
*    i:整数位数            					 *
*    k:小数位数            					 *
*********************************************/
function checkMoney(s,i,k){
	if(!isCharsInBag(s, "0123456789.")) return false;
	if(!isCharsInBag(i, "0123456789")) return false;
	if(!isCharsInBag(k, "0123456789")) return false;
	if(s.length > i+k+1) return false;
	if(s.indexOf(".")<0){ 
		if(s.length > i){
			return false;
		}
		else {
			return true;
		}
	}
	if(s.indexOf(".")==0) return false;
	if(s.indexOf(".")!=s.lastIndexOf(".")) return false;
	if(s.indexOf(".") > i) return false;
	if(s.lastIndexOf(".")>0&&s.lastIndexOf(".")<s.length-k-1) return false;
	return true;
}

/*****************************
*5.检查指定的字符串是否是整数*
*****************************/
function isInt(s){
	if(!isCharsInBag(s,numberlist)) return false;
	return true;
}

/***********************************************************
*6.带小数的任意精度乘法，解决了JavaScript乘法出现的精度问题*
***********************************************************/
function qswhMul(n1,n2){
	var m=0,s1=n1.toString(),s2=n2.toString();
	try{m+=s1.split(".")[1].length;}catch(e){}
	try{m+=s2.split(".")[1].length;}catch(e){}
	return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
}

/*********************************************
* 7. 添加一个文件上传组件                    *
*********************************************/	 
initCount = 11;
function AddRecord()
{
	var row = recordTable.insertRow(initCount); 
	var col = row.insertCell(0);
	col.innerHTML = "<font color='#D4E3F5'>* </font>上传文件" + (initCount-10) +"："; 
	col = row.insertCell(1); 
	col.innerHTML = "<input type='file' class='inputtext' name='file"+ (initCount-10) +"'>"; 
	initCount++;
}

/*********************************************
* 8. 删除页面中最后一个文件上传组件          *
*********************************************/	 
function DelRecord(frmName){
	if(getRowNumber(frmName) != 0){
		recordTable.deleteRow(rowNumber+10);
		initCount--;
	}else {
		alert("没有附件框可删除了！");
	}
}

/*********************************************
* 9. 得到页面中文件上传组件的个数            *
*********************************************/	 
function getRowNumber(frmName){
	var size = eval("document."+frmName+".elements.length");
	for(i=0,rowNumber = 0; i<size;i++)
		if(eval("document."+frmName+".elements[i].type") == "file")
			rowNumber++;
	return rowNumber;
}

/*********************************************
* 10. 删除确认                               *
*********************************************/	 
function doDelete(){
	if(confirm("真的要删除吗？")){
		var i,args=doDelete.arguments; document.MM_returnValue = true;
		for (i=0; i<(args.length-1); i+=2) eval(args[i]+".location='"+args[i+1]+"'");
	}
	return false;
}

