﻿/// <summary>
/// -----------------------------------------------------------------
/// 文件名:   DataSubmitCheck.js
/// 创建人:   HJQ
/// 说  明;   数据提交检查相关处理函数
/// 日  期:   2008-04-10
/// 目  的:   
/// 
/// 版  本:   1.0.0
/// 修改历史
/// -----------------------------------------------------------------
///    日 期   修改人      描 述
/// -----------------------------------------------------------------
/// 
/// 
/// -----------------------------------------------------------------
/// </summary>

/// -----------------------------------------------------------------
//  IE bug 
//  满足下面条件就会引起 注释下面的样式或脚本不起作用：
//      1. css有中文注释
//      2. css为ANSI编码
//      3. html为utf-8编码
//  解决方法：
//      1. 去掉中文注释，用英文注释
//      2. 统一css 和 html 的编码
/// -----------------------------------------------------------------


var submitted = false;
function CheckSubmit()
{
  if (submitted == true)
  {
    alert("你已经提交了请求, 请等候服务器应答......");
	return true;
  }
  else
  	return false;
}

var CheckTypeInteger = 1;       //整数
var CheckTypeNumber = 2;        //数值
var CheckTypeChar = 3;          //字母
var CheckTypeCharAndNum = 4;    //字母与数字
var CheckTypeChinese = 5;       //测汉字的长度
var CheckTypeDate = 6;          //日期

/*
判断指定的对象输入的值是否正确. 输入有错时返回 true,输入正确返回 false

textobj 域名
listmsg 出错时的提示信息
cz=1 整数  2 数值 3字母  4字母与数字 5测汉字的长度  6日期          操作类型
maxlen  最大长度
declen  小数位的长度
bCheckNull  是否判空  True 判空
bShowMsg 是否在此函数中提示错误信息 0 为不提示,其它为提示,默认为提示
bClearSpace 是否清除对象前后的空格,默认为不清除

输入有错时返回 true,输入正确返回 false

*/
function CheckSubmitData(obj,listmsg,bCheckNull,cz,maxlen,declen,bShowMsg)
{
//	var obj=MM_findObj(textobj);
    if (obj == null) {
        if (bShowMsg) {
            alert("没有输入对象！");
        }
        return true;
    }
	if (cz != 5) clearSpace(obj);
	var intbz=0;
	var newvalue=obj.value;
	var newlenth=newvalue.length;
/*
	if (cz==6 && newvalue.indexOf("-")==-1 && newvalue!="" && newvalue.length>5)
	{
		obj.value=newvalue.substring(0,4)+"-"+newvalue.substring(4,6)+"-"+newvalue.substring(6,newvalue.length);
		newvalue=obj.value;
	}
	else if (cz==6 && newvalue.indexOf("-")!=-1)
	{
		if (newvalue.substring(4,5)!="-" || newvalue.substring(7,8)!="-") intbz = 6;
	}
*/
	if (cz==6 && newvalue != ""){
		newvalue=trimChar1(newvalue,"-");
		if (newvalue.length==8)
		{
		    newvalue=newvalue.substring(0,4)+"-"+newvalue.substring(4,6)+"-"+newvalue.substring(6,newvalue.length);
		}
		else
		{
		    cz=-1; intbz=6;
		}
	}
	
	if (bCheckNull && newvalue=="") {cz=-1; intbz=-1;}
	else if(newvalue.indexOf("'")!=-1) {cz=-1;intbz=-2;}
	else if(newvalue.indexOf("\"")!=-1) {cz=-1;intbz=-4;}
    
    
	switch (cz)
	{
		case 1:
			newvalue=trimChar1(newvalue,",");
			if (newvalue.substring(0,1)=="-"){
				if (newvalue.length==1) intbz=1;
				newvalue=newvalue.substring(1,newvalue.length);
			}
			newlenth=newvalue.length;
			if (isStringInt(newvalue,1,maxlen)) intbz=1;
			break;
		case 2:
			newvalue=trimChar1(newvalue,",");
			if (newvalue.substring(0,1)=="-"){
				if (newvalue.length==1) intbz=2;
				newvalue=newvalue.substring(1,newvalue.length);
			}
			newlenth=newvalue.length;
			var intdec=newvalue.indexOf(".");
			if (intdec==-1)
				var newstring=newvalue;
			else
			{
				var newstring=newvalue.substring(0,intdec);
				var decstring=newvalue.substring(intdec+1,newlenth);
			}
			if (isStringInt(newstring,1,maxlen-declen-1)) intbz=2;
			if (intbz!=2 && intdec!=-1)
				if (isStringInt(decstring,1,declen)) intbz=-3;
			break;
		case 3:
			if (isStringInt(newvalue,3,maxlen)) intbz=3;
			break;
		case 4:
			if (isStringInt(newvalue,4,maxlen)) intbz=4;
			break;
		case 5:
		    if (maxlen != 0)
			    if (isMaxlen(newvalue,maxlen)) intbz=5;
			break;
		case 6:
            if (intbz != 6)	if (isNotDate(newvalue.substring(0,4), newvalue.substring(5,7), newvalue.substring(8,newvalue.length))) intbz = 6;
			break;

	}

	var msg;
	if (listmsg==null || listmsg=="")
	{
		if (obj.title!=null && obj.title!="")
			listmsg=obj.title;
		else
			listmsg="数据";
	}

	switch (intbz)
	{
		case -1:
			msg="请录入 --> ["+listmsg+"]!!";
			break;
		case -2:
			msg="["+listmsg+"] 不能含有单引号!!";
			break;
		case -3:
			msg="["+listmsg+"]--> 输入错误或小数部份输入的长度过长!!";
			break;
		case -4:
			msg="["+listmsg+"] 不能含有双引号!!";
			break;
		case 1:
			msg="["+listmsg+"]--> 必须为数字字符或输入的长度过长!!";
			break;
		case 2:
			msg="["+listmsg+"]--> 输入错误或整数部份输入的长度过长!!";
			break;
		case 3:
			msg="["+listmsg+"]--> 必须为字母或输入的长度过长!!";
			break;
		case 4:
			msg="["+listmsg+"]--> 必须为字母或数字或输入的长度过长!!";
			break;
		case 5:
			msg="["+listmsg+"]--> 输入的长度过长!!";
			break;
		case 6:
	  		msg = "[" + listmsg + "]  ->  录入错误  !!!  请按此格式 录入  ->  2001-01-01";
			break;

	}

	if (intbz!=0)
	{
		if (bShowMsg){
			alert(msg);
		}
		try{
        	obj.focus();
	    	if (obj.type!="select-one") obj.select();
		}
		catch(e)
		{
//			alert(e);
		}

		return true;
	}else if (cz==6){
		obj.value=newvalue;
	}

	return false;
}

/*
判断指定的对象输入的值是否正确. 输入有错时返回 true,输入正确返回 false

textobj 域名
listmsg 出错时的提示信息
cz=1 整数  2 数值 3字母  4字母与数字 5测汉字的长度  6日期          操作类型
maxlen  最大长度
declen  小数位的长度
bCheckNull  是否判空  True 判空
bShowMsg 是否在此函数中提示错误信息 0 为不提示,其它为提示,默认为提示
bClearSpace 是否清除对象前后的空格,默认为不清除

输入有错时返回 true,输入正确返回 false

*/
function CheckSubmitData2(sText,listmsg,bCheckNull,cz,maxlen,declen,bShowMsg)
{


	var intbz=0;
	var newvalue=trim(sText);
	var newlenth=newvalue.length;

	if (cz==6 && newvalue != ""){
		newvalue=trimChar1(newvalue,"-");
		if (newvalue.length==8)
		{
		    newvalue=newvalue.substring(0,4)+"-"+newvalue.substring(4,6)+"-"+newvalue.substring(6,newvalue.length);
		}
		else
		{
		    cz=-1; intbz=6;
		}
	}
	
	if (bCheckNull && newvalue=="") {cz=-1; intbz=-1;}
	else if(newvalue.indexOf("'")!=-1) {cz=-1;intbz=-2;}
	else if(newvalue.indexOf("\"")!=-1) {cz=-1;intbz=-4;}

	switch (cz)
	{
		case 1:
			newvalue=trimChar1(newvalue,",");
			if (newvalue.substring(0,1)=="-"){
				if (newvalue.length==1) intbz=1;
				newvalue=newvalue.substring(1,newvalue.length);
			}
			newlenth=newvalue.length;
			if (isStringInt(newvalue,1,maxlen)) intbz=1;
			break;
		case 2:
			newvalue=trimChar1(newvalue,",");
			if (newvalue.substring(0,1)=="-"){
				if (newvalue.length==1) intbz=2;
				newvalue=newvalue.substring(1,newvalue.length);
			}
			newlenth=newvalue.length;
			var intdec=newvalue.indexOf(".");
			if (intdec==-1)
				var newstring=newvalue;
			else
			{
				var newstring=newvalue.substring(0,intdec);
				var decstring=newvalue.substring(intdec+1,newlenth);
			}
			if (isStringInt(newstring,1,maxlen-declen-1)) intbz=2;
			if (intbz!=2 && intdec!=-1)
				if (isStringInt(decstring,1,declen)) intbz=-3;
			break;
		case 3:
			if (isStringInt(newvalue,3,maxlen)) intbz=3;
			break;
		case 4:
			if (isStringInt(newvalue,4,maxlen)) intbz=4;
			break;
		case 5:
			if (isMaxlen(newvalue,maxlen)) intbz=5;
			break;
		case 6:
            if (intbz != 6)	if (isNotDate(newvalue.substring(0,4), newvalue.substring(5,7), newvalue.substring(8,newvalue.length))) intbz = 6;
			break;

	}

	var msg;
	if (listmsg==null || listmsg=="")
	{
		if (obj.title!=null && obj.title!="")
			listmsg=obj.title;
		else
			listmsg="数据";
	}

	switch (intbz)
	{
		case -1:
			msg="请录入 --> ["+listmsg+"]!!";
			break;
		case -2:
			msg="["+listmsg+"] 不能含有单引号!!";
			break;
		case -3:
			msg="["+listmsg+"]--> 输入错误或小数部份输入的长度过长!!";
			break;
		case -4:
			msg="["+listmsg+"] 不能含有双引号!!";
			break;
		case 1:
			msg="["+listmsg+"]--> 必须为数字字符或输入的长度过长!!";
			break;
		case 2:
			msg="["+listmsg+"]--> 输入错误或整数部份输入的长度过长!!";
			break;
		case 3:
			msg="["+listmsg+"]--> 必须为字母或输入的长度过长!!";
			break;
		case 4:
			msg="["+listmsg+"]--> 必须为字母或数字或输入的长度过长!!";
			break;
		case 5:
			msg="["+listmsg+"]--> 输入的长度过长!!";
			break;
		case 6:
	  		msg = "[" + listmsg + "]  ->  录入错误  !!!  请按此格式 录入  ->  2001-01-01";
			break;

	}

	if (intbz!=0)
	{
		if (bShowMsg){
			alert(msg);
		}
		return true;
	}

	return false;
}


function trimChar1(strValue,strTemp){
//删除字符串中含有的字符
 var i=strValue.indexOf(strTemp);
 while (i!=-1){
 	strValue=strValue.substring(0,i)+strValue.substring(i+1,strValue.length);
	i=strValue.indexOf(strTemp);
 }
 return strValue;
}

function isStringInt(textValue,temp,maxlen)
{
/*
<!--
// 测试是否是整数 temp=1
// 测试是否是字母 temp=3
// 测试是否是整数和字母  temp=4

taxtValue  值
maxlen     最大长度
-->
*/

	textValue=textValue+"";
	temp=temp*1;
	maxlen=maxlen*1;
    var newlength=textValue.length;

	if (newlength>maxlen) return true;

	for (var i=0;i != newlength;i++)
	{
        var achar=textValue.substring(i,i+1);
        achar=achar.toUpperCase();
		if (temp==1)
        {
			if (achar<"0" || achar>"9") return true;
		}
		else if (temp==3)
		{
            if (achar<"A" || achar>"Z") return true;
		}
		else if (temp==4)
		{
			if ((achar<"0" || achar>"9") && (achar<"A" || achar>"Z")) return true;
		}

    }
	return false;
}

function isMaxlen(textvalue,maxlen)
{
/*
	测试字符串的字节数
*/
	textvalue=textvalue+"";
	var strNum=0;
	var strTemp=textvalue;

	for (var i=0;i!=strTemp.length;i++)
	{
        var achar=strTemp.substring(i,i+1);
		if (achar<"" || achar>"€")
			strNum=strNum+2;
		else
			strNum=strNum+1;
	}

	if (strNum>maxlen)
		return true;
	else
		return false;
}

/* 检查日期 */
function isNotDate(year, month, day){

  if ((year + month + day) == "") return false;

  if (month.length>2 || day.length>2 || year.length>4) return true;

  var date, yy, mm, dd;
  date = new Date(year, month - 1, day);
  yy = date.getFullYear();

  if (yy < 1900) yy = 1900 + yy;

  mm = date.getMonth() + 1;
  dd = date.getDate();

  if (yy != year || mm != month || dd != day) return true;
  else return false;

}
function clearSpace(obj)
{
	//删除对象中前后的空格

//	var obj=MM_findObj(textobj);
	if (obj == null) return false;

    if (obj.type=="text" && obj.value!="")
	{
    	var strtemp=obj.value;
    	var strlen=strtemp.length;

    	for(var i=0,achar=strtemp.substring(0,1);i!=strlen && achar==" ";i++)
			achar=strtemp.substring(i,i+1);
    	if (i!=0) strtemp=strtemp.substring(i-1,strlen);

		i=strtemp.length-1;
		achar=strtemp.substring(i,i+1);
    	for(;i>=0 && achar==" ";--i)
			achar=strtemp.substring(i,i+1);

     	if (i!=strtemp.length-1) strtemp=strtemp.substring(0,i+2);

		if (strtemp.length==1 && strtemp==" ") strtemp="";

    	obj.value=strtemp;
	}
}

function SelectOneValue(cbo,sValue){
//查找下拉框中是否有"人民币" 选项

//查找到返回其 Value 值
//查找不到返回空串

	if (!cbo) return false;
	if (cbo.type!="select-one") return false;
	for (var i=0;i<cbo.length;i++){
		if (cbo.options[i].value == sValue) 
		{
		    cbo.selectedIndex=i;
		    return true;
		}
	}
	return false;
}

/* 
* ForDight(Dight,How):数值格式化函数，Dight要 
* 格式化的 数字，How要保留的小数位数。 
*/ 
function ForDight(Dight,How) 
{
    var iReturn = Math.round(Dight*Math.pow(10,How))/Math.pow(10,How); 
    return iReturn; 
} 

/*
* 取得单元格所在行对象
*/
function GetTableRow(objCell)
{
    try
    {
        
        
        if (!objCell) return null;
        //if (objCell.tagName != "TD" && (objCell.tagName != "TH")) return null;
        
        var objParent;
	    while (objCell.tagName != "TD" && (objCell.tagName != "TH"))
	    {
		    if (objCell.tagName == "BODY")   return null;
		    objCell = objCell.parentNode;
//		    if (gBrowserType==BrowserType.Firefox)
//		        objParent = objCell.parentNode;  //返回到上一级
//		    else
//		    {
//		        if (objCell.parentElement)
//		            objParent = objCell.parentElement;  //返回到上一级
//		        else
//		            objParent = objCell.parentNode;
//		    }
//		    objCell=objParent;
	    }
	    objParent=null;
	    
	    var objRow = objCell;
        while (objRow.tagName != "TR") objRow = objRow.parentNode;
	    //objRow.rowIndex == 0
		return objRow;
    }catch(e){
        alert(e);
        return null;
    }
}

/*
* 取得对象所在的表格
*/
function GetTable(obj)
{
    try
    {
        var objTable = GetTableRow(obj);
        if (objTable)
        {
	        while (objTable.tagName!="TABLE")
		        objTable=objTable.parentElement;

		    return objTable;
		}
		else
		    return null;
    }catch(e){
        alert(e);
        return null;
    }
}

//检查对象是否是单元格
function CheckIsCell(objCell)
{
    if (!objCell) return false;
    if (objCell.tagName == "TD" || (objCell.tagName == "TH")) return true;
    return false;
    
}

function trim(strtemp)
{
	//删除前后的空格

	if (strtemp == null) return "";

    	var strlen=strtemp.length;

    	for(var i=0,achar=strtemp.substring(0,1);i!=strlen && achar==" ";i++)
			achar=strtemp.substring(i,i+1);
    	if (i!=0) strtemp=strtemp.substring(i-1,strlen);

		i=strtemp.length-1;
		achar=strtemp.substring(i,i+1);
    	for(;i>=0 && achar==" ";--i)
			achar=strtemp.substring(i,i+1);

     	if (i!=strtemp.length-1) strtemp=strtemp.substring(0,i+2);

		if (strtemp.length==1 && strtemp==" ") strtemp="";

    	return strtemp;
}

function strReplace(originalString,findText,replaceText){
//查找替换指定的字符串
	var pos=0,preString,postString;
	var len=findText.length;
	pos=originalString.indexOf(findText);
	while(pos != -1){
		preString=originalString.substring(0,pos);
		postString=originalString.substring(pos+len,originalString.length);
		originalString=preString + replaceText + postString;
		pos=originalString.indexOf(findText);
	}
	return originalString;
}

function getItemByte(textvalue,ByteNum,Num)
{
/*
	textvalue 字符串
	ByteNum  每次要取的字节数
	Num      第N个
*/
	var intT=isStrByte(textvalue,ByteNum,Num);
	var intB=isStrByte(textvalue,ByteNum,(Num*1+1));
//	alert(intT+"|"+intB);
	if (intT==-1) return "";
	if (intB==-1) return textvalue.substring(intT,textvalue.length);
	return textvalue.substring(intT,intB);
}

function getItem(str1,str2,num){
	var x1,x2;
	var strTemp="";
	num=num*1;
	x1=0;
	for (var i=1;i<=num;i++){
		x1=str1.indexOf(str2);
		if (i==num && x1 != -1) {
			strTemp=str1.substring(0,x1);
			break;
		}
		if (x1==-1 && i==num){
			strTemp=str1.substring(0,str1.length);
		 	break;
		}
		if (x1==-1 && i < num){
			strTemp="";
		 	break;
		}
		if (i > num){
			strTemp="";
			 break;
		}
		str1=str1.substring(x1+str2.length,str1.length);
	}
	return strTemp;
}


/*使用方法:在onkeydown或onkeyup中引用*/
function setFocus1(){

  var obj, keyDown, srcObjName, tagObjName = null, srcFormObj;
  var evt=getEvent();
  keyDown = evt.keyCode;
  srcObjName = (evt.srcElement || evt.target);  //event.srcElement;
  if (keyDown == 13 || keyDown == 27){
		 if (srcObjName.type=="button") return false;
		 //event.keyCode=9;
		 try{
		     evt.keyCode=9;
		     srcObjName = srcObjName = (evt.srcElement || evt.target);  //event.srcElement;
		     if (srcObjName.type==null) return true;
  		     if (srcObjName.type=="text" || srcObjName.type=="textarea") srcObjName.select();
  		  }catch(e){}
	     return true;
	}
}

//返回 event 对象 
function getEvent()
{
    if(document.all) return window.event;//IE
    
    //FF
    func=getEvent.caller;
    while(func!=null){
        var arg0=func.arguments[0];
        if(arg0)
        {
            if((arg0.constructor==Event || arg0.constructor ==MouseEvent) || (typeof(arg0)=="object" && arg0.preventDefault && arg0.stopPropagation))
            {return arg0;}            
        }
        func=func.caller;
    }
    return null;
}

//-------------- 检查电话号码是否正确 --------------------
function CheckPhone(sPhone,bShowInfo) {
    if (CheckSubmitData2(sPhone, "电话", true, CheckTypeInteger, 20, 0, bShowInfo)) return false;
    if (sPhone.substr(0, 1) == "0") {
        //-------------- 电话 --------------------
        if (sPhone.length < 11 || sPhone.length > 12) {
            if (bShowInfo) {
                alert("电话号码必须为11到12位长度。格式：区号+电话号码。\n\n例如：02087654321");
            }
            return false;
        }
    } else {
        //-------------- 手机 --------------------
        if (sPhone.length != 11) {
            if (bShowInfo) {
                alert("手机号码长度必须为11位。");
            }
            return false;
        }
    }
    return true;
}