/*
 * 本地审核表格内容通用方法函数库

 */
 
/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：	检测字符串是否符合“最少4个字符,不超过20个字符(数字，字母和下划线)”的要求
 *
 */
function isPassword(obj) {
  var patrn=/^[0-9a-zA-Z_]{4,14}$/; 
  return patrn.exec(obj);
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：	检测字符串是否符合“最少4个字符,不超过20个字符(字母和下划线)”的要求
 *
 */
function isSpaceName(obj) {
  var patrn=/^[a-zA-Z_]{2,20}$/; 
  return patrn.exec(obj);
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：	检测字符串是否符合email的要求

 *
 */
function isEmail(obj) {
  var patrn=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/; 
  return patrn.exec(obj);
}

function isPhone( obj ){
  var patrn=/(^[0-9]{3,4}\-[0-9]{3,8}$)|(^[0-9]{3,8}$)|^\([0-9]{3,4}\)[0-9]{3,8}$|(^0{0,1}1[0-9]{10}$)/;
  return patrn.exec(obj)||!isFull(obj);
}

function isPostalcode(obj){
  var patrn=/^[1-9]{1}(\d){5}$/;
  return patrn.exec(obj)||!isFull(obj);
}

function isNumber(obj){
  var patrn=/^\d+\.?\d{0,2}$/;
  return patrn.exec(obj)||!isFull(obj);
}

function isUserAccount(obj){
  return hasStrange(obj);
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：	检测字符串是否全为字符和数字

 *
 */
function isChar(obj) {
  var patrn=/^[0-9a-zA-Z]+$/; 
  return patrn.exec(obj);
}
/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测字符串是否含有空格、&、+、＋等符号

 * <br>功能介绍：检测字符串是否有特殊字符

 *
 */
function hasStrange(obj) {
  var patrn=/[]×＋－.'*[-]/; 
  return !patrn.exec(obj);
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测字符串是否含有汉字
 * <br>功能介绍：检测字符串是否有特殊字符

 *
 */
function hasChinese(obj) {
  var patrn=/[^\x00-\xff]/g; 
  return patrn.exec(obj);
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：	检测字符串是否为空
 *
 */
function isFull(obj) 
{ 
	var patrn=/["]/; 
	if ( obj==="" ){
	    return false; 
	}
	else {
		return !patrn.exec(obj);
	}
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：	检测字符串是否为YYYYMMDD格式的日期,格式不精确。

 *
 */
function isDate(obj) {
	var patrn=/^[0-9]{4}[0,1]{1}[0-9]{1}[0-3]{1}[0-9]{1}$/; 
	return patrn.exec(obj);
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：	检测字符串是否为HHMM格式的时间，不精确。

 *
 */
function isTime(obj) {
	var patrn=/^[0-2]{1}[0-9]{1}[0-5]{1}[0-9]{1}$/; 
	return patrn.exec(obj);
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：检测字符串是否为YYYYMMDD格式的日期,精确到对闰年的检查。

 *
 */ 
function isFulldate(obj) {
	var patrn=/^((((1[6-9]|[2-9]\d)\d{2})(0?[13578]|1[02])(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})(0?[13456789]|1[012])(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})0?2(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))0?229))$/; 
	return patrn.exec(obj);
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：检测字符串是否为正浮点数

 *
 */
function isFloat(obj) {
	var patrn=/^[-]?\d+(\.)?(\d+)?$/;
	return patrn.exec(obj);
} 

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：检测字符串是否为百分比数(0-100之内的整数)
 *
 */
function isIntPercent(obj) {
	return isInt(obj)&&obj<=100&&obj>=0;
} 

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：检测字符串是否为百分比数(0-100之内的浮点数)
 *
 */
function isPercent(obj) {
	return isFloat(obj)&&obj<=100&&obj>=0;
} 


/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：检测字符串是否全为自然数

 *
 */
function isInt(obj) {
  var patrn=/^\d+$/; 
  return patrn.exec(obj);
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：检测字符串是否为8位自然数
 *
 */
function isInt8(obj) {
  var patrn=/^\d{8}$/; 
  return patrn.exec(obj);
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：检测字符串是否为4位正整数
 *
 */
function isYear(obj) {
  var patrn=/^[1,2]{1}[0-9]{3}$/; 
  return patrn.exec(obj);
}

/**
 * 
 * <br>入口参数：	@param 待检测字符串 	 
 * <br>出口参数：	@return	检测是否通过
 * <br>功能介绍：检测字符串是否为1-12之间的正整数
 *
 */
function isMonth(obj) {
  return obj<=12&&obj>=1;
}

function chooseAll( formname )
{
    var e = formname.elements;
	if( formname.checkbox.checked === true )
	{
		for( var i = 0;i < e.length;i ++ )
		{
			if( e[i].type=="checkbox" )
				e[i].checked=true;
		}
		return;
	}
	else if( formname.checkbox.checked == false )
	{
		for( var i = 0;i < e.length;i ++ )
		{
			if( e[i].type=="checkbox" )
				e[i].checked=false;
		}
	}
}

function delSubmit( formname, targetURL, submitBtn){
	var flag = false;
	var e = formname.elements;
	for( var i = 0;i < e.length;i ++ )
	{
		if( e[i].type=="checkbox" )
		if(e[i].checked==true)
			flag=true;
	}
	if(flag==false){
		alert("您没有选定任何记录！")
	}
	else if(confirm("您确定删除选定纪录？"))
	{
		submitForm( formname, targetURL, submitBtn );
	}
}

/**
 * 
 * <br>入口参数：	@param 待取值radio组 	 
 * <br>出口参数：	@return	radio组中选中项的值

 * <br>功能介绍：从radio组取出当前选中项的值

 *
 */
function getRadioValue( radio_array ) {
	var i;
	for (i=0;i<radio_array.length; i=i+1) {//radio_array.length是radio选项的个数

		if (radio_array[i].checked) {
			return radio_array[i].value;
		}
	}
	return null;//如果一项都没选则返回空值

}

/**
 * 
 * <br>入口参数：	@param 指定按钮,一般即为form的提交按钮 	 
 * <br>功能介绍：	启用指定按钮
 *
 */
var timerEnableButton; //用来定时启用按钮的全局变量
var COUNTTIME = 3; //激活按钮的等待时间
var countTmp = COUNTTIME;
var btnValue;
function enableButton( btn ) {
	btn.disabled = false;
	clearTimeout( timerEnableButton );
}
function countEnableButton( btn ) {
	countTmp= countTmp-1;
	btn.value = "  0"+countTmp+"  ";
	if (countTmp<0) {
		btn.value = btnValue;
		btnValue = "";
		btn.disabled = false;
		clearInterval( timerEnableButton );
		countTmp=COUNTTIME;
	}
}

/**
 * 
 * <br>入口参数：	@param 指定按钮,一般即为form的提交按钮 	 
 * <br>功能介绍：	禁用指定按钮
 *
 */
function disableButton( btn ) {
	btn.disabled = true;
}

/**
 * 
 * <br>入口参数：	@param element 待检查Form元素
 * <br>出口参数：	@return	检查是否通过
 * <br>功能介绍：	检查指定Form元素
 *
 */
function isValidate(element,isKeyup) {
	var vType = element.vType;
	var canBeNull = element.canBeNull;
	var value2Validate = element.value;
	isKeyup = (typeof isKeyup=="undefined")?"":isKeyup;
	if ( vType=="int"||vType=="float"||vType=="char"||vType=="percent"||vType=="intpercent"||vType=="date"||vType=="year"||vType=="month"||vType=="time") {
		if (isKeyup=="submit"){ value2Validate = element.value = AllTrim(element.value);}
		else{ value2Validate = AllTrim(element.value);}
	} else {
		if (isKeyup=="submit"){ 
			if(element.type=='file'){
				value2Validate = BothSidesTrim(element.value);
			}else{
				value2Validate = element.value = BothSidesTrim(element.value); 
			}	
		}
		else{ value2Validate = BothSidesTrim(element.value);}
	}
	
	if ( (typeof vType=="undefined")||(canBeNull=="true"&&(AllTrim(value2Validate)===""))||(canBeNull=="true"&&vType=="select") ) {
		return true;
	} else {
		var vResult;
		switch ( vType ) {
			case "full"	: 
				vResult = isFull( value2Validate );	break;
			case "int" :
				vResult = isInt( value2Validate ); break;
			case "float" :
				vResult = isFloat( value2Validate ); break;
			case "int8" :
				vResult = isInt8( value2Validate );	break;
			case "char" :
				vResult = isChar( value2Validate.replace(new RegExp("[]＋.'*[-]","g"),"") ); break;
			case "date" :
				vResult = isDate( value2Validate ); break;
			case "time" :
				vResult = isTime( value2Validate ); break;
			case "percent" :
				vResult = isPercent( value2Validate ); break;
			case "intpercent" :
				vResult = isIntpercent( value2Validate ); break;
			case "year" :
				vResult = isYear( value2Validate ); break;
			case "month" :
				vResult = isMonth( value2Validate ); break;
			case "select" :
				vResult = element.selectedIndex!==0; break;
			case "radio" :
				vResult = getRadioValue(document.getElementsByName(element.name))!==null; break;
		    case "password" :
				vResult = isPassword( value2Validate ); break;
			case "email" :
				vResult = isEmail( value2Validate ); break;
			case "useraccount" :
				vResult = isUserAccount( value2Validate ); break;
			case "phone" :
				vResult = isPhone( value2Validate ); break;
			case "postalcode" :
				vResult = isPostalcode ( value2Validate ); break;
			case "spacename" :
				vResult = isSpaceName ( value2Validate ); break;
			default :
				vResult = true;
		}
		return vResult;
	}	
}

function validateFormData( element )
{
	var vName = element.vName;
	var vType = element.vType;
	var vResult = isValidate(element,'submit');
	if (!vResult) {
		switch ( vType ) {
			case "full"	: 
				alert("请输入"+vName+",该栏不可为空！");break;
			case "int" :
				alert("请输入符合规范的"+vName+"，只能是正整数！"); break;
			case "int8" :
				alert("请输入符合规范的"+vName+"，只能是8位正整数！"); break;
			case "char" :
				alert("请输入符合规范的"+vName+"，只能是英文字母或0~9的数字或以下字符:× ＋ － . ' * [ ] - "); break;
			case "date" :
				alert("请输入符合规范的"+vName+"，只能是标准的日期格式，例如：19810204！"); break;
			case "time" :
				alert("请输入符合规范的"+vName+"，只能是标准的时间格式，例如：1340代表13点40分！"); break;
			case "float" :
				alert("请输入符合规范的"+vName+"，只能是浮点数，例如：12.235！"); break;
			case "percent" :
				alert("请输入符合规范的"+vName+"，只能是0-100之间的浮点数"); break;
			case "intpercent" :
				alert("请输入符合规范的"+vName+"，只能是0-100之间的正整数"); break;
			case "year" :
				alert("请输入符合规范的"+vName+"，只能是4位正整数"); break;
			case "month" :
				alert("请输入符合规范的"+vName+"，只能是介于1-12之间的正整数"); break;
			case "select" :
				alert("请选择"+vName+"！"); break;
			case "radio" :
				alert("请选择"+vName+"！"); break;
		    case "password" :
				alert("请输入符合规范的"+vName+"，只能输入4~14个字母、数字，可带下划线"); break;
		    case "email" :
				alert("请输入符合规范的"+vName); break;
		    case "phone" :
				alert("请输入符合规范的"+vName+"，区号用()或者-和其他部分隔开"); break;
			case "postalcode" :
				alert("请输入符合规范的"+vName); break;
			case "useraccount" :
				alert("请输入符合规范的"+vName+"，只能为中文、字母或数字，可带下划线"); break;
			case "spacename" :
				alert("请输入符合规范的"+vName+"，只能为4~20位字母，可带下划线"); break;
		}
	}
	return vResult;
}

/**
 * 
 * <br>入口参数：	@param targetForm 待检测的表单
 *             		@param submitBtn 表单的button,无此参数的话则默认为smt	 
 * <br>出口参数：	@return	检查是否通过
 * <br>功能介绍：	检查目标表单并提交
 *
 */
function submitForm( selForm, targetURL, submitBtn )
{
	//disableButton(submitBtn);
	btnValue = submitBtn.value;
	for (var i=0;i<selForm.elements.length;i=i+1) {
		var e = selForm.elements[i];
		if  ( !validateFormData( e ) )
		{
			e.focus();
			//timerEnableButton = setInterval("countEnableButton("+selForm.name+"."+submitBtn.name+")",1000);
			return false;
		}
	}
	var SubmitingHint = document.createElement("div");
	
	SubmitingHint.setAttribute("id","SubmitingHint");
	SubmitingHint.setAttribute("className","SubmitingHint");
	SubmitingHint.setAttribute("dypop","如果长时间没有响应，请关闭浏览器并重新登录。");
	SubmitingHint.style.top = screen.height=="600"?((document.body.scrollTop*1+225)+"px"):((document.body.scrollTop*1+310)+"px");
	SubmitingHint.innerHTML = "数据提交中, 请稍后<span id='Hintdot'>...</span><br/><span class='bottomtext'>(提示：请不要刷新页面！)</span>";
	document.body.appendChild(SubmitingHint);
	SubmitingHintTimer = setInterval("updateSubmitingHint()",200);
	
	selForm.action = targetURL;
	selForm.submit();
}

function updateSubmitingHint() {
	if(document.getElementById("Hintdot")==null){
	return;
	}
	var hintdot = document.getElementById("Hintdot").innerText;
	hintdot = hintdot===""?".":hintdot=="."?"..":hintdot==".."?"...":"";
	document.getElementById("Hintdot").innerText = hintdot;
}
