/*
    maxlength="100" Format="单位名|F|CSTRING|1|100|0|SPECIAL"
    对于每个输入域的检查。


以下是对每个参数意义
第一个参数“欠款单位名”:是出错时所提示的信息。


第二个参数 “F or T" : F表示一定要填，T表示可填可不填


第三个参数 “CSTRING" :检查类型，STRING 表示任何的字母；CSTRING 包括中文的任何字母，NUMBER 表示数字型等等


第四个参数 “1" :自己定制检查方式???，一般都用1
第五个参数 “100" :表示长度，


第六个参数 “0" :表示小数位。


第七个参数 “SPECIAL”：对于一些类型的检查，例如日期（DATE）才有用，一般的类型可以直接忽略不写此参数



注意:
1.第五个参数和第六个参数加起来要等于maxlength才可以。


2.第七个参数 SPECIAL 预定义的检查类型、含义和举例
    STRING		字符串（英文）			Format="英文名|T|STRING|1|50|0"
    CSTRING		包含中文的字符串		Format="车牌号|F|CSTRING|1|20|0"
    CHARACTER	字母和数字				Format="票据号码|F|CHARACTER|1|20|0"
    NUMBER		数字（不包括小数点）	Format="编号|F|NUMBER|1|20|0"
    DECIMAL		数字（包括小数点）	Format="编号|F|DECIMAL|1|20|0"
    INTEGER		同 NUMBER
    FLOAT		实数					Format="金额|F|FLOAT|1|9|5"
    EMAIL		电子邮件地址
    FREE		任意字符
    DATE		日期（必须是 YYYY年MM月DD日的格式）	Format="日期|F|DATE|1|11|11|YYYY年MM月DD日"
    SPECIAL STRING	特殊格式（保留）
    IDNO		身份证号码


    TEL			电话号码
*/
var fdName,fdOpt,fdType,fdLen,fdSubLen,fdFormat,fdMinLen;
var blSubmit = false,blDebug=true;
var IgnoreString = "\"\'><&_#|\\\\";
var WorkingObj=0;
var blHavSub = false;

function checkInput(Obj,param) {
    var bRet = CheckInputImp(Obj,param);
    if (bRet == false) {
        if(WorkingObj!=Obj.sourceIndex && WorkingObj!=0) {
        } else {
            try {
                Obj.select();
            } catch (e) {}
            try {
                Obj.focus();
            } catch (e) {}
        }
    }
    return bRet;
}

function CheckInputImp(Obj,param)
{
    var sFormat = param ? param : "";
    var sValue = Obj.value;
    var regVal = "";
    var sErr,nMaxLen;
    sValue = sTrimRight(sValue);
    if(WorkingObj!=Obj.sourceIndex && WorkingObj!=0)
        return false;
    WorkingObj=Obj.sourceIndex;
    PhraseFieldValue(sFormat);
    //alert(fdName);alert(fdOpt);alert(fdType);alert(fdLen);alert(fdSubLen);alert(fdFormat);
/*	if(blDebug)
    {
        nMaxLen = (Obj.maxLength) ? Obj.maxLength : 0;
        if(nMaxLen==0 || nMaxLen != (parseInt(fdLen) + parseInt((fdSubLen!=0) ? parseInt(fdSubLen)+1 : 0)))
        {
            alert("对于这种输入域，你应该定义最大输入长度为：maxlength=\""+(parseInt(fdLen) + parseInt((fdSubLen!=0) ? parseInt(fdSubLen)+1 : 0))+"\"");
            Obj.select();
            Obj.focus();
            return false;
        }
    }*/
    if(sValue.length==0)
    {
        if(fdOpt=="F" && blSubmit)
        {
            alert("‘"+fdName+"’不能为空，请输入："+fdName + "！");
            //Obj.focus();
            return false;
        }
    }
    else
    {
        if(sValue.length<fdMinLen)
        {
            alert("‘"+fdName + "’不能少于"+fdMinLen+"位！");
            //Obj.select();
            //Obj.focus();
            return false;
        }
        else
        {
            if(sValue.length > (parseInt(fdLen) + parseInt((fdSubLen!=0) ? parseInt(fdSubLen)+1 : 0)))
            {
                alert("‘"+fdName + "’不能超于"+(parseInt(fdLen) + parseInt((fdSubLen!=0) ? parseInt(fdSubLen)+1 : 0))+"位！")
                //Obj.select();
                //Obj.focus();
                return false;
            }
            else
            {
                switch(fdType.toUpperCase())
                {
                    case "STRING":
                        if(blCheckCN(sValue))
                        {
                            alert("‘"+fdName + "’中存在不合法字符！");
                            //Obj.select();
                            //Obj.focus();
                            return false;
                        }
                        regVal="^[^"+IgnoreString+"]+$";
                        sErr = "‘"+fdName+"’不符合格式要求，请检查！";
                    case "CSTRING":
                        if(!blCheckClen(sValue,parseInt(fdLen) + parseInt((fdSubLen!=0) ? parseInt(fdSubLen)+1 : 0)))
                        {
                            alert("‘"+fdName + "’输入过长！");
                            //Obj.select();
                            //Obj.focus();
                            return false;
                        }
                        regVal="^[^"+IgnoreString+"]+$";
                        sErr = "‘"+fdName+"’不符合格式要求，请检查！";
                        break;
                    case "CSTRINGS":
                        if(!blCheckClen(sValue,parseInt(fdLen) + parseInt((fdSubLen!=0) ? parseInt(fdSubLen)+1 : 0)))
                        {
                            alert("‘"+fdName + "’输入过长！");
                            //Obj.select();
                            //Obj.focus();
                            return false;
                        }
                        break;
                    case "EN":
                        regVal=/^([\-\w\ \.\,\_\(\)]+)?$/;
                        sErr = "‘"+fdName+"’不符合格式要求，请检查！";
                        break;
                    case "POST":
                        regVal=/^\d{6}$/;
                        sErr = "‘"+fdName+"’不符合格式要求，请检查！";
                        break;
                    case "CHARACTER":
                        regVal="^[0-9a-zA-Z]+$";
                        sErr = "‘"+fdName+"’不符合格式要求，请检查！";
                        break;
                    case "NUMBER":
                        regVal = "^[0-9]+$";
                        sErr = "‘"+fdName+"’只能输入数字，请检查！";
                        break;
                    case "DECIMAL":
                        regVal = "^[0-9]+[0-9.]+$";
                        sErr = "‘"+fdName+"’只能输入数字，请检查！";
                        break;
                    case "INTEGER":
                        regVal = "^[0-9]+$";
                        sValue = sTrim0(sValue);
                        sErr = "‘"+fdName+"’不是一个有效的整数，请检查！";
                        break;
                    case "FLOAT":
                        regVal = "^[0-9]{1,"+fdLen+"}.[0-9]{0,"+fdSubLen+"}$";
                        sValue = sTrim0(sValue);
                        sValue = sToFloat(sValue,fdSubLen);
                        sErr = "实数‘"+fdName+"’不符合格式要求，请检查！\n正确的格式是：整数部分不超过"+fdLen+"位，小数部分不超过"+fdSubLen+"位。";
                        break;
                    case "EMAIL":
                        regVal = "^[0-9a-zA-Z._-]*@[0-9a-zA-Z]+[.]{1,1}[0-9a-zA-Z.]+$";
                        sErr = "‘"+fdName+"’不是一个有效的电子邮件格式，请检查！";
                        break;
                    case "FREE":
                        regVal = "[^\0]*$";
                        sErr = "";
                        break;
                    case "DATE":
                        regVal = sToDateReg(fdFormat);
                        sErr = "‘"+fdName+"’不是一个有效的日期格式，请检查！";
                        break;
                    case "SPECIAL STRING":
                        regVal = fdFormat;
                        sErr = "‘"+fdName+"’不符合格式要求，请检查！";
                        break;
                    case "IDNO":
                        if(sValue.length!=15 && sValue.length!=18)
                        {
                            alert("‘"+fdName+"’长度不正确！");
                            //Obj.select();
                            //Obj.focus();
                            return false;
                        }
                        if(sValue.length==18)
                        {
                            if(!verifyCode(sValue))
                            {
                                alert("不是有效的身份证号码");
                                return false;
                            }
                        }
                        regVal = "^[0-9]{15,17}[0-9X]{0,1}$";
                        sErr = "‘"+fdName+"’不符合格式要求，请检查！";
                        break;
                    case "TEL":
                        //regVal = "^[0-9][0-9-]+[0-9]$";
                        regVal =  /^([\-\d\(\)]+)?$/;
                        sErr = "‘"+fdName+"’不符合格式要求，请检查！";
                        break;
                    default :break;
                }
                if(!blCheckValue(sValue,regVal))
                {
                    alert(sErr);
                    //Obj.select();
                    //Obj.focus();
                    return false;
                }
                else
                {
                    Obj.value = sValue;
                }
            }
        }
    }
    WorkingObj=0;
    return true;
}

function PhraseFieldValue(sField)
{
    var sTemp = new String(sField);
    var sFieldTemp;
    sFieldTemp = sTemp.split("|");
    if(sFieldTemp.length>0)
    {
        fdName = sFieldTemp[0];
        if(sFieldTemp.length>1)
        {
            fdOpt = sFieldTemp[1];
            if(sFieldTemp.length>2)
            {
                fdType = sFieldTemp[2];
                if(sFieldTemp.length>3)
                {
                    fdMinLen = parseInt(sFieldTemp[3]);
                    if(sFieldTemp.length>4)
                    {
                        fdLen = parseInt(sFieldTemp[4]);
                        if(sFieldTemp.length>5)
                        {
                            fdSubLen = sFieldTemp[5];
                            if(sFieldTemp.length>6)
                                fdFormat = sFieldTemp[6];
                            else
                                fdFormat = "";
                        }
                        else
                            fdSubLen = 0;
                    }
                    else
                        fdLen = 0;
                }
                else
                    fdMinLen = 0;
            }
            else
                fdType = "";
        }
        else
            fdOpt = "F";
    }
    else
        fdName = "";
}

function blCheckValue(sValue,regVal)
{
    var regex = new RegExp(regVal);
    return regex.test(sValue)
}

function blCheckClen(sValue,MaxLen)
{
    var CLen = 0;
    for(var i = 0; i<sValue.length ; i ++)
    {
        CLen ++;
        if(sValue.charCodeAt(i)>0x80) CLen++;
        if(sValue.charCodeAt(i)>0x800) CLen++;
    }
    if(CLen>MaxLen)
        return false;
    return true;
}

function blCheckCN(sValue)
{
    for(var i = 0; i<sValue.length ; i ++)
    {
        if(sValue.charCodeAt(i)>0xff)
            return true;
    }
    return false;
}

function sTrimRight(sValue)
{
    var cVal = sValue.charCodeAt(sValue.length-1);
    while((cVal ==32 ||cVal==9) && sValue.length>0)
    {
        sValue = sValue.substring(0,sValue.length-1);
        cVal = sValue.charCodeAt(sValue.length-1);
    }
    return sValue;
}

function sTrim0(sValue)
{
    while(sValue.length>=1 && sValue.charAt(0)=='0')
        sValue = sValue.substring(1,sValue.length);
    if(sValue.length==0 || sValue.charAt(0)=='.')
        sValue = "0" + sValue;
    return sValue;
}

function sToFloat(sValue,nSubLen)
{
    var slen,i;
    slen = "";
    for(i=0;i<nSubLen;i++)
        slen += "0";

    if(sValue.indexOf(".")==-1)
        sValue += ".";
    sValue += slen.substring(0,nSubLen-sValue.substring(sValue.indexOf(".")+1,sValue.length).length);
    return sValue;
}

function blCheckNum(sValue)
{
    var regVar = "^[0-9]+$";
    var regex = new RegExp(regVar);
    if(!regex.test(sValue))
    {
        alert("域‘"+fdName+"’只能输入数字，请检查！");
        Obj.select();
        Obj.focus();
        return false;
    }
    return true;
}

function sToDateReg(sFormat)
{
    var sVal;
    sVal = sFormat;
    sVal = sVal.replace("DD","[0-9]{1,2}");
    sVal = sVal.replace("MM","[0-9]{1,2}");
    sVal = sVal.replace("YYYY","[0-9]{4,4}");
    sVal = sVal.replace("YY","[0-9]{2,2}");
    return sVal;
}

function createCheckCode(sNum)
{
    var code = new Array("1","0","X","9","8","7","6","5","4","3","2")
    var strLength = sNum.length;
    var totalNum = 0;
    for (i = 0; i <= strLength - 1; i++) {
        bitInt = sNum.charAt(i) - '0';
        totalNum = totalNum + bitInt * ((Math.pow(2, strLength - i)) % 11);
    }
    checkCodeInt = totalNum % 11;
    sNum += code[checkCodeInt];
    return sNum;
}

function verifyCode(sNum)
{
    if(sNum<2)
        return false;
    else
        return (sNum == createCheckCode(sNum.substr(0,sNum.length-1)));
}

function formatPrice(curPrice)
{
	if(curPrice.value != ''){
		var price  = curPrice.value;
		if(price.indexOf(".")!=-1){
			var tmp = price.substring(price.indexOf(".")+1, price.length);
			while(true){
				if(tmp.length == 2)
					break;
				if(tmp.substring(tmp.length-1,tmp.length) != '0')
					break;
				tmp = tmp.substring(0, tmp.length-1);
			}
			price = price.substring(0,price.indexOf(".") + 1) + tmp;
			curPrice.value = price;
		}
	}
}

function validDate(s_year,s_month,s_day)
{
    i_year = eval(s_year);
    i_month = eval(s_month);
    i_day = eval(s_day);

    if(i_month>12 || i_month<1 || i_day>31 || i_day<1)
        return false;

    switch(i_month)
    {
        case 2:
        {
            if(i_day>29)
                return false;
            if(i_day==29)
            {
                if((i_year%4)==0)
                {
                    if((i_year%100)==0)
                    {
                        if((i_year%400)==0)
                            return true;
                        else
                            return false;
                    }
                    else
                        return true;
                }
                else
                    return false;
            }
            else
                return true;
        }
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:
        {
            return true;
        }
        case 4:
        case 6:
        case 9:
        case 11:
        {
            if(i_day>30)
                return false;
            else
                return true;
        }
        default:
        {
            return false;
        }
    }
}


function fnGetobj(sObjID)
{
return eval("document.all."+sObjID)
}

function fnCreateoption(sObjID,pMode)
{
//创建option
//sObjID为字符串,为将要创建option的对象名
//pMode
//range的话,为一个区间,从第3个参数到第4个参数,text和value都相同
//string的话,为一个字符串,第3个参数为字符串,第4个参数为分割value和text(默认为,)字符串形式为 value,text,value,text....
oObj=fnGetobj(sObjID)
if (pMode == 'range')
	{
	nP1=arguments[2]
	nP2=arguments[3]
	for (;nP1<=nP2;nP1++)
		{
		var oOption = document.createElement("OPTION")
		oOption.text=nP1
		oOption.value=nP1
		oObj.add(oOption)
		}
	}
if (pMode == 'string')
	{
	aArray=arguments[2].split(",")
	var i=0,j=0
	for (i=0;i<=(aArray.length/2-1);i++)
		{
		var oOption = document.createElement("OPTION")
		oOption.text=aArray[j+1]
		oOption.value=aArray[j]
		oObj.add(oOption)
		j+=2
		}
	}
}
function fnSelectoption(sObjID,nOptionValue)
{
oSelect=fnGetobj(sObjID)
for(i=0;i<=oSelect.length;i++)
	{
	  if (oSelect.options[i].value == nOptionValue )
	  {
	 	oSelect.selectedIndex=i;
	    break;
	  }
	}
}
function fnChangeOption(sObjID,pMode)
{
oObj=fnGetobj(sObjID)
if (pMode == "string")
	{
	fnClearoption(sObjID)
	fnCreateoption(sObjID,'string',arguments[2])
	}
}
function fnClearoption(sObjID)
{
//删除sObjID对象的所有option
oObj=fnGetobj(sObjID)
oObj.innerHTML=""
}
function fnRemoveoption (sObj) {
//删除选中的option -- 如果为多选则为删除所有选中的option ,从指定的sObj对象中
oObj=fnGetobj(sObj);
for (i=0;i<oObj.length;i++)
	{
	if (oObj.options[i].selected)
		{
		oObj.remove(i);
		i--;
		}
	}
}
function fnAddoption(sObj,sObj2) {
//sObj为  要添加到的对象
//sObj2为 从那个对象添加
//可选的第三个参数为父对象的类型
//值为 Text (textfield) Select (select) 默认为select


oObj=fnGetobj(sObj);
oFather=fnGetobj(sObj2);

/*
限定数目
if (oObj.length > 4)
	{
	alert("超过数目限制");
	return;
	}
*/

if ((arguments.length == 2) | (arguments[2]='Select')) {
	for (i=0;i<oFather.length;i++)
		{
		if (oFather.options[i].selected)
			{
			bFound=true;
			for (j=0;j<oObj.length;j++)
				{
				if (oObj.options[j].value == oFather.options[i].value)
					{
					bFound=false;
					break;
					}
				if ( (oObj.options[j].value / 100) == Math.floor(oFather.options[i].value / 100) )
					{
					bFound=false;
					break;
					}
				}
			if (bFound)
				{
					if (oFather.options[i].value % 100 == 0) //??????
						{
						for (j=0;j<oObj.length;j++)
							{
							if (Math.floor(oObj.options[j].value / 100) == (oFather.options[i].value / 100))
								{
								oObj.remove(j);
								j--;
								}
							}
						}
					var oOption = document.createElement("OPTION");
					oOption.text=oFather.options[i].text;
					oOption.value=oFather.options[i].value;
					oObj.add(oOption);
				}
			}
		}
	}
if (arguments[2]=='Text') {
	bFound=true;
	for (j=0;j<oObj.length;j++)
		{
		if (oObj.options[j].value == oFather.value)
			{
			bFound=false;
			break;
			}
		}
	if (bFound) {
		var oOption = document.createElement("OPTION");
		oOption.text=oFather.value;
		oOption.value=oFather.value;
		oObj.add(oOption);
	}
}
}
function fnCaldata(sObj,hObj) {
oObj=eval(sObj);
vObj=eval(hObj)
sValue="";
for (i=0;i<oObj.length;i++)
	{
	sValue=sValue+oObj.options[i].value;
	if (i<oObj.length-1) sValue+=",";
	}
vObj.value=sValue;
//alert(vObj.value);
}
function fnDisable()
{
for (i=0;i<arguments.length;i++)
	{
	oObj=fnGetobj(arguments[i])
	oObj.disabled=true
	}
}
function fnEnable()
{
for (i=0;i<arguments.length;i++)
	{
	oObj=fnGetobj(arguments[i])
	oObj.disabled=false
	}
}


//日期格式是否有效
function isDate(str){
      var reg = /^(\d+)-(\d{1,2})-(\d{1,2})$/;
      var r = str.match(reg);
      if(r==null)return false;
      r[2]=r[2]-1;
      var d= new Date(r[1], r[2],r[3]);
      if(d.getFullYear()!=r[1])return false;
      if(d.getMonth()!=r[2])return false;
      if(d.getDate()!=r[3])return false;
      return true;
}

function check(name,str){
	var times=str.value;
	time=trim(times);
	if (time.length>0){
		var regex;
		regex = /^\d{4}-\d{2}-\d{2}$/;
		if (!regex.test(time)){
      	alert(name + '2007-01-01');
        str.focus();
        return false;
      }
    }
    return true
  }
function checkDate(name,str){
    var time=str.value;
    if (time.length>0){
      var regex;
      regex = /^\d{4}-\d{2}-\d{2}$/;
      if (!regex.test(time)){
      	alert(name + '2007-01-01');
        str.focus();
        return false;
      }
    }
    return true
  }
  
  function trim(str){
    return r_trim(l_trim(str));
  }
  
  function l_trim(str){
    if (str.charAt(0)==" "){
      str = str.slice(1);
      str = l_trim(str);
    }
    return str;
  }
  
  function r_trim(str){
    var str_length;
    str_length = str.length;
    if (str.charAt(str_length-1)==" "){
      str = str.slice(0,str_length-1);
      str = r_trim(str)
    }
    return str;
  }
  
  function isNotNull(fieldname,formObj){
    formObj.value=trim(formObj.value);
    if (formObj.value == "") {
      alert(fieldname+"不可为空！");
      formObj.focus();
      return false;
    }else{
      return true;
    }
  }
  
  function isNotSelect(fieldname,formObj){
    formObj.value=trim(formObj.value);
    if (formObj.value == "") {
      alert("请选择"+fieldname);
      formObj.focus();
      return false;
    }else{
      return true;
    }
  }
function checkkBodyId(sId)
   {
   var iSum=0;   
   var aCity={11:"??",12:"??",13:"??",14:"??",15:"???",21:"??",22:"??",23:"???",31:"??",32:"??",33:"??",34:"??",35:"??",36:"??",37:"??",41:"??",42:"??",43:"??",44:"??",45:"??",46:"??",50:"??",51:"??",52:"??",53:"??",54:"??",61:"??",62:"??",63:"??",64:"??",65:"??",71:"??",81:"??",82:"??",91:"??"};   
   if(sId.length==15)   
     {
     	if(!/^\d{15}$/i.test(sID))   
        {
          return false;
        }
       sBirthday=sId.substr(6,2)+"-"+Number(sId.substr(8,2))+"-"+Number(sId.substr(10,2));
      }   
      else   
       {
       		if(!/^\d{17}(\d|x)$/i.test(sId))   
            { 
               return false;   
            }   
            sId=sId.replace(/x$/i,"a");   
            sBirthday=sId.substr(6,4)+"-"+Number(sId.substr(10,2))+"-"+Number(sId.substr(12,2));   
            for(var i=17;i>=0;i--)
               iSum += (Math.pow(2,i)%11)*parseInt(sId.charAt(17-i),11);   
                if(iSum%11!=1)   
                {  
                  return false;   
                }   
          }   
          if(aCity[parseInt(sId.substr(0,2))]==null)   
              { 
                return false;   
              }   
          var   d=new Date(sBirthday.replace(/-/g,"/"))   
          if(sBirthday!=(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()))   
              { 
                return false;   
              }   
          return true   
        } 

  function isNotRightNameEN(fieldname,formObj){
    formObj.value=trim(formObj.value);
    var strP=/^([\d\-\w\ \.\,\_\(\)]+)?$/;
    if(formObj.value!=""){
    if(strP.test(formObj.value)==false){
    	alert(fieldname+"格式不正确！");
    	formObj.focus();
        return false;
    }else{
    	return true;
    }
    }
    return true;
  }

   function isNotRightCode(fieldname,formObj){
    formObj.value=trim(formObj.value);
    var strP=/^([\d\-\w]+)?$/;
    if(strP.test(formObj.value)==false){
    	alert(fieldname+"格式不正确！");
    	formObj.focus();
        return false;
    }else{
    	return true;
    }
  }
        
  function isNoRightTel(fieldname,formObj){
    formObj.value=trim(formObj.value);
    var strP=/^\d+(\-\d+)?$/;
    if(strP.test(formObj.value)==false){
    	alert(fieldname+"格式不正确！");
    	formObj.focus();
        return false;
    }else{
    	return true;
    }
  }
        
  function isNotRightFax(fieldname,formObj){
    formObj.value=trim(formObj.value);
    var strP=/^\d+(\-\d+)?$/;
    if(formObj.value!=""){
    if(strP.test(formObj.value)==false){
    	alert(fieldname+"格式不正确！");
    	formObj.focus();
        return false;
    }else{
    	return true;
    }
    }
    return true;
  }
        
  function isNoRightPost(fieldname,formObj){
    formObj.value=trim(formObj.value);
    var strP=/^\d{6}$/;
    if(strP.test(formObj.value)==false){
    	alert(fieldname+"格式不正确！");
    	formObj.focus();
        return false;
    }else{
    	return true;
    }
  }
        
  function isNotRightEmail(fieldname,formObj){
    formObj.value=trim(formObj.value);
    var strP=/^(([\-\w]+)\.?)+@(([\-\w]+)\.?)+\.[a-zA-Z]{2,4}$/;
    if(formObj.value!=""){
    if(strP.test(formObj.value)==false){
    	alert(fieldname+"格式不正确！");
    	formObj.focus();
        return false;
    }else{
    	return true;
    }
    }
    return true;
  }
          
  function isNumber(oNum)
 {
  if(!oNum) return false;
  var strP=/^\d+(\.\d+)?$/;
  if(!strP.test(oNum)) return false;
  try{
  if(parseFloat(oNum)!=oNum) return false;
  }
  catch(ex)
  {
    return false;
  }
    return true;
 }
  