/////////////////////// JS LIB WRITE BY RUNMIN SUN-UP GROUP /////////////////////////////

//  全部校验方法：			********												   //
//  程序作者：				阮铭													   //

/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////表单校验程序开始////////////////////////////////////////////////

//	校验成功则返回true，如果不成功则先将WrongCode(错误编码修改)，返回false
//	可以通过getMessage(WrongCode)取得错误提示信息，该信息仅供编程参考

//	校验错误信息表：

var WrongCode = "00000000";
var WrongMessage = {
	"10000001" : "表单域不允许为空！",
	"10000002" : "表单域数值错误（非整型，或长度不符合要求）！",
	"10000003" : "填写的电话号码有错误！",
	"10000004" : "电子邮件地址填写有错误！",
	"10000005" : "单选按钮未被选中！",
	"10000006" : "多选按钮未被选中！",
	"10000007" : "日期格式错误！"
};

//	取得校验错误信息函数

function getMessage(MessageNum)
{
	var mes = null;
	mes = WrongMessage[MessageNum];
	
	if ( MessageNum == true )
	{
		return "无错误";
	}
	
	if( null != mes )
	{
		return mes;
	}
	else
	{
		return "未知错误：ID "+MessageNum+" ！";
	}
}
//	行号:		函数名	（ 参数 ）
//	28	:function getMessage( MessageNum )
//	48	:function checkNull( FormField )
//	63	:function checkNum( FormField , MinChkLength , MaxChkLength )
//	80	:function checkTelNum( FormField )
//	101	:function checkEmail( FormField )
//	118	:function checkDate( FormField )
//	135	:function checkRadio( RadioName )
//	169	:function checkCheckBox( CheckBoxName )
//	215	:function showDate( parentTag )
//	226	:function initMessage(targetElement)
//	231	:function dispMessage( Message, width, height, ClassName )
//	241	:function moveMessage()
//	247	:function clearMessage()
//	258	:function collectValue( FormName,SpecificCollect )

function checkNull( FormField )
{
	//	空值校验
	
	if (( FormField.value == "" )||( FormField.value == null ))
	{
		
		WrongCode = "10000001";		//	错误编码
		return false;
	}
	else
	{
		return true;
	}
}

function checkNum( FormField , MinChkLength , MaxChkLength )
{
	//	整数数值检查正则表达式
	
	var NumRegExp = new RegExp("^[0-9]{"+MinChkLength+","+MaxChkLength+"}$");

	if ( NumRegExp.test( FormField.value ))
	{
		return true;
	}
	else
	{
		WrongCode = 10000002;		//	错误编码
		return false;
	}
}

function checkTelNum( FormField )
{
	//	电话号码校验
	
	var TelRegExp = /^((0{1})|([0-9]{2,3}-))((([2]{1}[0-9]{1})|([1]{1}[0]{1}))|([3-9]{1}[0-9]{2}))-[0-9]{7,8}$/;

	//	表达式说明	国别：		0***-******** 86-***-********
	//	典型匹配	区号：		010-******** 02*-******** 0***-********
	//				电话号码：	7位或8位
	
	if ( TelRegExp.test( FormField.value ))
	{
		return true;
	}
	else
	{
		WrongCode = "10000003";		//	错误编码
		return false;
	}
}

function checkEmail( FormField )
{
	//	电子邮件校验

	var EmailRegExp = /^([a-z]|[A-Z]){1}([a-z]|[A-Z]|\.|[0-9]|-|_){0,20}@([a-z]|[A-Z]|[0-9]|-|_){0,20}\.([a-z]|[A-Z]){2,3}(\.([a-z]|[A-Z]){2}){0,1}$/;

	if (EmailRegExp.test( FormField.value ))
	{
		return true;
	}
	else
	{
		WrongCode = "10000004";		//	错误编码
		return false;
	}
}

function checkDate( FormField )
{
	//	日期校验
	
	var DateRegExp = /^20{1}[0-9]{2}-((0{1}[1-9]{1})|(1{1}[1-2]{1}))-(([0-2]{1}[0-9]{1})|(3[1]|[0-1]{1}))$/
	
	if (DateRegExp.test( FormField.value ))
	{
		return true;
	}
	else 
	{
		WrongCode = "10000007";		//	错误编码
		return false;
	}
}

function checkRadio( RadioName )
{
	//	RADIO BUTTON检查
	
	var checkedFlag = false;
	var checkedIndex;	//	未选择编码
	
	if ( RadioName.length == null )
	{
		if ( RadioName.checked )
		{
			checkedIndex = 0;
			checkedFlag = true;
		}
	}
	else
	{
		for ( var i=0; i < RadioName.length; i++ )
		{
			if ( RadioName[i].checked )
			{
				checkedIndex = i;
				checkedFlag = true;
			}
		}
	}
	if ( checkedFlag ) return checkedIndex
	else
	{
		WrongCode = "10000005";
		return checkedFlag;
	}
}

function checkCheckBox( CheckBoxName )
{
	//	RADIO BUTTON检查
	
	var checkedIndex;	//	未选择编码
	var checkedIndexArray = new Array();
	var checkedFlag = false;
	
	if ( CheckBoxName.length == null )
	{
		if ( CheckBoxName.checked )
		{
			checkedIndexArray[0] = 0;
			return checkedIndexArray;
		}
	}
	else
	{
		for ( var i=0; i < CheckBoxName.length; i++ )
		{
			if ( CheckBoxName[i].checked )
			{
				checkedIndexArray[i] = i;
				checkedFlag = true;
			}
		}
		if ( checkedFlag )
		{
			return checkedIndexArray;
		}
	}
	if ( checkedFlag ) return checkedIndex;
	else
	{
		WrongCode = "10000006";
		return false;
	}
}

/////////////////////////表单校验程序结束////////////////////////////////////////////////

function showMessage( FormField, Message, className )
{	
	//	注需要CSS样式支持，样式名作为第三个参数传递到函数体

	FormField.insertAdjacentHTML("AfterEnd","<font class="+className+">"+Message+"</font>");
}


/////////////////////////常规应用程序开始////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////

function showDate( parentTag )
{
	var nowHour;
	var nowMinute
	var nowSecond;
	var nowMonth;
	var now = new Date();
	
	
	nowMonth= now.getMonth()+1;
	
	if (now.getHours()<10) {
		nowHour="0" + now.getHours();
	}
	else 
	{
		nowHour = now.getHours();
	}
	
	if (now.getMinutes()<10) {
		nowMinute="0" + now.getMinutes();
	}
	else 
	{
		nowMinute = now.getMinutes();
	}
	
	if (now.getSeconds()<10) {
		nowSecond="0" + now.getSeconds();
	}
	else
	{
		nowSecond = now.getSeconds();
	}
	
	
	parentTag.innerText = now.getYear()+"年 "+nowMonth+"月 "+now.getDate()+"日 "+nowHour+":"+nowMinute+":"+nowSecond;
	setTimeout("showDate(" + parentTag.id + ")",1000);
}


function getSum( valueArray )
{
	var sum = 0;
	for ( var i=0; i < valueArray.length; i++ )
	{
		sum += valueArray[i];
	}
	return sum;
}

/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////

//		注：以下四个函数为显示提示信息函数，提示信息样式需CSS支持；
//		样式名作为dispMessage的第四个参数传递函数体

function initMessage(targetElement)
{
	targetElement.insertAdjacentHTML("BeforeEnd","<div id=messageDiv></div>");
}

function dispMessage( Message, width, height, ClassName )
{
	messageDiv.style.display = "";
	messageDiv.style.position = "absolute";
	messageDiv.style.width = width;
	messageDiv.style.height = height;
	messageDiv.innerText = Message;
	messageDiv.className = ClassName;
}

function moveMessage()
{
	messageDiv.style.top = event.clientY+15;
	messageDiv.style.left = event.clientX+15;
}

function clearMessage()
{
	messageDiv.style.display = "None";
}

//		showMessage( document.body.all[0], "good", 200, 100, "box" )

function showMessage( TargetElement, Message, width, height, ClassName )
{
	document.body.onload = Function("initMessage(document.body)");
	TargetElement.onmouseover = Function("dispMessage( '"+Message+"', "+width+", "+height+", '"+ClassName+"' )");
	TargetElement.onmousemove = Function("moveMessage()");
	TargetElement.onmouseout = Function("clearMessage()");
}

/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////

//		表单域值搜集程序		function collectValue( FormName,SpecificCollect )	   //
//		参数说明：				FormName:			需要搜集的表单名				   //
//								SpecificCollect:	需要特殊搜集的表单域名，数组类型   //
//													特殊搜集说明：表单域名重复		   //
//													例如：CHECKBOX，RADIO等			   //
//		返回值说明：		AllValue		Array									   //
//							AllValue[0]		一般值数组，所有未被注名需要特殊搜集的域值 //
//							AllValue[1]		特殊值数组，与SpecificCollect下标相同的数组//
//					例1.	AllValue[0][1]		表单的第二个非特殊域的值			   //
//					例2.	AllValue[1][1][0]	表单的第二个特殊域的第一个选择值	   //


/////////////////////////////////////////////////////////////////////////////////////////

function collectValue( FormName,SpecificCollect )
{
	//	搜集所有表单域值
	
	var AllValue = new Array();					//	返回所有值的数组，包含以下两个数组
	var CommonValue = new Array();				//	返回一般值的数组
	var SpecificValue = new Array();				//	返回特殊值的数组
	var counter = 0;

	for ( var i=0; i < FormName.all.length; i++ )
	{
		if ( FormName.all[i].tagName != "OPTION" )
		{
			var isspecialflag = false;
			for ( var j=0; j < SpecificCollect.length; j++ )
			{
				if (( FormName.all[i].name == SpecificCollect[j] )||( FormName.all[i].id == SpecificCollect[j] )) 
				{
					isspecialflag = true;
				}
			}

			if ( !isspecialflag )
			{
				CommonValue[counter] = FormName.all[i].value;
				counter++;
			}
		}
	}
	
	eval("alert(FormName.all."+SpecificCollect[0]+".length);");

	for ( var i=0; i < SpecificCollect.length; i++ )
	{
		eval("var tmplen = FormName.all." + SpecificCollect[i] + ".length");
		SpecificValue[i] = new Array();
		for ( var j=0; j < tmplen; j++ )
		{
			eval("var tmpflgc = FormName.all." + SpecificCollect[i] + "[" + j + "].checked");
			eval("var tmpflgs = FormName.all." + SpecificCollect[i] + "[" + j + "].selected");
			eval("var tmpval = FormName.all." + SpecificCollect[i] + "[" + j + "].value");
			if ( tmpflgc || tmpflgs )
			{
				SpecificValue[i][j] = tmpval;
			}
		};
	};

	AllValue[0] = CommonValue;
	AllValue[1] = SpecificValue;
	return AllValue;
}

/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////

//				数据初始化

//	var tableTitle = new Array("编号","姓名","年龄","性别","职业","备注");	//标题
//	var tabFieldWidth = new Array(100,200,100,100,100,100);					//宽度
//	var tr1 = new Array("1","run","年龄","性别","职业","备注");				
//	var tr2 = new Array("2","zhao","年龄","性别","职业","备注");
//	var tr3 = new Array("3","wang","年龄","性别","职业","备注");
//	var tr4 = new Array("4","li","年龄","性别","职业","备注");				
//	var data = new Array(tr1,tr2,tr3,tr4);									//数据数组(2维)

//				函数调用

//			元素ID										CSS名称
//	createTab( tmp, tableTitle, tabFieldWidth, data, "ti", "good" );

//				CSS定义

//	<style>
//	.ti
//	{
//		color: white;
//		background-color: gray;
//	};
//	.good
//	{
//		background-color: lightskyblue;
//	}
//	</style>

function createTab( targetElement, tabTitle, tabFieldWidth, tabData, titleStyle, bodyStyle )
{
	targetElement.insertAdjacentHTML("AfterBegin","<table id=resultTab><tbody></tbody></table>");

	resultTab.insertRow(0);
	var currentTR = resultTab.all.tags("tr")[0];
	currentTR.className = titleStyle;

	for ( var i=0; i < tabTitle.length; i++ )
	{
		currentTR.insertCell();
		currentTR.all[i].width = tabFieldWidth[i];
		currentTR.all[i].innerHTML = tabTitle[i];
	}

	for ( var j=1; j <= tabData.length; j++ )
	{
		resultTab.insertRow(j);
		var currentTR = resultTab.all.tags("tr")[j];

		if ((j%2)!=(1))
		{
			currentTR.className = bodyStyle;
		}

		for ( var i=0; i < tabTitle.length; i++ )
		{
			currentTR.insertCell();
			currentTR.all[i].innerText = tabData[j-1][i];
		}
	}
};

/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////

function showForm_Confirm(in_Form) {    
	form1.action=in_Form;
    form1.submit();
    }
/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////	
	
	function TabControl(name,active)
{
	this.name = name;
	this.tabName = new Array();
	this.tabDiv = new Array();
	this.contentDiv = new Array();
	this.activeTab = active;
	return this;
}
/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////

function AddTabItem(tbCtrl,name,tabDiv,contentDiv)
{
	tbCtrl.tabName[tbCtrl.tabName.length] = name;
	tbCtrl.tabDiv[tbCtrl.tabDiv.length] = tabDiv;
	tbCtrl.contentDiv[tbCtrl.contentDiv.length] = contentDiv;
}

/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////

function SetActiveTab(tbCtrl,name)
{
	var i;
	for (i=0;i<tbCtrl.tabName.length;i++){
		if (tbCtrl.tabName[i]==name)
			break;
	}
	if (i>=tbCtrl.tabName.length)
		return false;
	document.all[tbCtrl.tabDiv[tbCtrl.activeTab]].className = "normalTab";
	document.all[tbCtrl.contentDiv[tbCtrl.activeTab]].style.display = "none";
	
	document.all[tbCtrl.tabDiv[i]].className = "activeTab";
	document.all[tbCtrl.contentDiv[i]].style.display = "block";
	tbCtrl.activeTab = i;
	return false;
}

/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////
function SetActiveVTab(tbCtrl,name)
{
	var i;
	for (i=0;i<tbCtrl.tabName.length;i++){
		if (tbCtrl.tabName[i]==name)
			break;
	}
	if (i>=tbCtrl.tabName.length)
		return false;
	document.all[tbCtrl.tabDiv[tbCtrl.activeTab]].className = "normalVTab";
	document.all[tbCtrl.contentDiv[tbCtrl.activeTab]].style.display = "none";
	document.all[tbCtrl.tabDiv[i]].className = "activeVTab";
	document.all[tbCtrl.contentDiv[i]].style.display = "block";
	tbCtrl.activeTab = i;
	window.top.StatFrame.RegisterVar(tbCtrl.name,name);
	return false;
}


/////////////////////////////////////////////////////////////////////////////////////////
//此函数用于统计求合计（注只能合计本页）
//具体用法：
//<SCRIPT LANGUAGE="JavaScript">
//<!--
//tableAddSumRow("table_list",";5;");
////-->
//</SCRIPT>
//其中“table_list”为tableID,";5;"为那一项需要合计，前后需有“；”合计项需用分号分隔
//注：对于JS计算列数时是从0开始，“;5;”则表示是寻第六列进行合计
//“table_list”为tableID是固定写法，因为在分页显示函数中将tableID设为“table_list”
//
/////////////////////////////////////////////////////////////////////////////////////////
function tableColSum(tableID,sumCol,startRow,endRow)
{
	var tableCtrl = document.all(tableID);
	if(tableCtrl==null)return null;
	var tdCtrl,tdChild;
	var tdText;
    var nSum = 0;
	var nIndex;
    for (var row = startRow; row <= endRow; row++){
		tdCtrl = tableCtrl.rows(row).cells(sumCol);
		if(tdCtrl==null)return null;
		tdText = tdCtrl.innerText;
		if(tdText == ""){
			tdChild = tdCtrl.children;
			if(tdChild==null)continue;
			if(tdChild.length==0)continue;
			tdText = tdChild[0].value;
		}
        nSum += tdText*1;
    }
	return nSum;
}

function clipFloat(inFloat,inDec)
{
	var strTmp=String(inFloat);
	var posDot = strTmp.indexOf(".");
	if(posDot==-1)return strTmp;
	if((strTmp.length-posDot)>inDec)
		return strTmp.substring(0, posDot + inDec + 1);
	return strTmp;
}

function tableAddSumRow(tableID,sumCols)
{
	var tableCtrl = document.all(tableID);
	if(tableCtrl==null)return false;
	var maxRow =  tableCtrl.rows.length - 1;
	if(maxRow<2)return false;
	var countCell = tableCtrl.rows(0).cells.length;
	var sumValue;
	var objSrc,objNewCell;
	var objNewRow = tableCtrl.insertRow();
	var objSrcRow = tableCtrl.rows(maxRow-1);
	objNewRow.mergeAttributes(objSrcRow);
	for(col=0;col<countCell;col++){
	   if(sumCols.indexOf(";"+col+";")==-1){sumValue="---";}
	   else{
		   sumValue = tableColSum(tableID,col,1,maxRow);
		   if(isNaN(sumValue)||sumValue==null)sumValue="---";
		   else sumValue=clipFloat(sumValue,4);
	   }
	   if(col==0)sumValue="小 计：";
	   objSrc = objSrcRow.cells(col);
	   objNewCell = objNewRow.insertCell();
	   objNewCell.innerText = sumValue;
	   objNewCell.mergeAttributes(objSrc);
	}
	return true;
}
//重新合计当前页面上数据
function tableResetSumRow(tableID,sumCols)
{
 var tableCtrl,maxRow,maxSumRow,sumCell,sumValue;
 if((tableCtrl = document.all(tableID))==null)return false;// no table
 if((maxRow =  tableCtrl.rows.length - 1)<3)return false;//no sum row
 if((sumCells = tableCtrl.rows(maxRow).cells)==null)return false;//no sum row ctrl
 maxSumRow = maxRow - 1;
 for(col=0;col<sumCells.length;col++){
    if(sumCols.indexOf(";"+col+";")==-1)continue;
    sumValue = tableColSum(tableID,col,1,maxSumRow);
    if(isNaN(sumValue)){sumValue="---";}
    else sumValue = clipFloat(sumValue,4);
    sumCells(col).innerText = sumValue;
 }
 return true;
}


/////////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////
//检查是否为空
function isNull( val ) {
	return ( val == "" );
}
//检查是否为小数，且检查小数位
function isFloat( val ,intDec) {
	valNum = parseFloat( val );
	valStr = String(valNum);
	if(val!=valStr)return 1;//不是小数
	if((valDot=valStr.indexOf(".",0))==-1)return 0;;
	valDot = valStr.length - valDot - 1
	if(valDot>intDec)return 2;//小数过多
	return 0;
}
//检查是否包含特定串
function includeStr( valStr ,incStr ) {
	var intPos = valStr.indexOf(incStr);
	return intPos;
}


//检查输入多行数据是不是数值类型
function checkFloatGrp(inputID,inDec,inMsg)
{
	var inputGrp = document.all(inputID);
	if(inputGrp==null)return true;
	var inputCtrl;
	for (var row = 0; row < inputGrp.length; row++){
		inputCtrl = inputGrp[row];
		if(isFloat(inputCtrl.value,inDec)!=0){
			alert(inMsg);
			inputCtrl.focus();
			return false;
		}
	}
	return true;
}
//检查邮政编码是否正确
function checkZipCode(inputID)
{
 var strValue = String(inputID.value);
 if(strValue.length!=6)return false;
 if(strValue.indexOf(".")!=-1)return false;
 if(strValue.indexOf("-")!=-1)return false;
 var numValue = strValue * 1;
 if(isNaN(numValue))return false;
 return true;
}



