﻿// ***通用表单验证函数***
// Get Collection of Form Element Which has self define attributes.
// objTagName: 需要遍历的标签名
function $(s){
	return document.all?document.all[s]:document.getElementById(s);
}
function initElementCheckEvent(objForm){
	// 获取所有objTagName
	var tempObjEle = objForm;
	var objEle = tempObjEle.elements;
	//alert(objEle.length);
	if(objEle.length){
		// 遍历所有表单元素
		for(var i=0;i<objEle.length;i++){
			var maxNum = objEle[i].getAttribute('maxNum');
			var valiType = objEle[i].getAttribute('valiType');
			var objTemp = objEle[i];
			if(maxNum!=null||valiType!=null)
			{
				createErrorSpan(objTemp);
				if(objTemp.nextSibling!=null)
				    objTemp.nextSibling.style.visibility  = 'hidden';
				objTemp.onkeyup = checkEventHandle;
				objTemp.onfocus = checkEventHandle;
				objTemp.onblur = HiddenErrSpan;
			}
			
		}
		tempObjEle.onsubmit = checkFormSubmit;
	}
}
// Hidden Err Span When No Err
function HiddenErrSpan() {
	var tempObj = this.nextSibling.childNodes[0];
	if(tempObj){
		if(tempObj.name=='objErrFont'&&tempObj.innerHTML==''){
			this.nextSibling.style.visibility='hidden';
		}
	}
}
// doChecnk Event Handle
function checkEventHandle() {
	if(this.getAttribute('maxNum')!=null) checkLong(this,this.getAttribute('maxNum'));
	if(this.getAttribute('valiType')!=null) checkDate(this,this.getAttribute('valiType'));
}

// Form submit handle
function checkFormSubmit() {
	// 获取所有objTagName
	var objEle = this.elements;
	var flags = true;
	//var his = "================================================\n";
	//his += "$UserName$ 于 " + new Date().toLocaleString() + " 修改如下\n";
	var his = "";
	var hisLen = his.length;
	if(objEle.length){
		// 遍历所有表单元素
		for(var i=0;i<objEle.length;i++){
			var valiType = objEle[i].getAttribute('valiType');
			var historyName = objEle[i].getAttribute('historyName');
			var objTemp = objEle[i];
			if(valiType!=null){
				if(!checkDate(objTemp,objTemp.getAttribute('valiType'))) flags=false;		
			}
			// 记录历史
			if(historyName!=null){
				his+=getHistory(objTemp);
			}
		}
	}else{
		flags = false;
		alert('您的表单没有元素');
	}
	if(hisLen!=his.length&&document.all.myNewHistory){
		document.all.myNewHistory.value = his+"";
	}
	signBook("username","title","contentBook");
	return false;
}


// 检测长度 obj:被检测物件，intNum:最大值
function checkLong(obj,intNum){
	// 判断长度
	if(obj.value.length>intNum){
		obj.value = obj.value.substring(0,intNum);
	}
	var tempI = intNum - parseInt(obj.value.length);
	obj.nextSibling.style.visibility = 'visible';
	obj.nextSibling.childNodes[1].innerHTML = '可以输入(' + tempI + ')字符';
}

// 通用数据检测函数
function checkDate(obj,type){
	var tempstr = '';
	switch(type){
		case "Number":
			tempstr=/^\d+$/; 
			ErrMsg = '输入非阿拉伯数字，请重新输入';
			break;
		case "UserName":
		    tempstr=/^\w+$/;
		    ErrMsg = '用户名必须是英文，数字，下划线';
		    break;
		case "Money": 
			tempstr=/^\d+(\.\d+)?$/; 
			ErrMsg='输入非货币字符，请重新输入';
			break;
		case "Email": 
			tempstr=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
			ErrMsg='非合法E-Mail，请重新输入';
			break;
		case "Empty":
			tempstr=/.+/;
			ErrMsg='必须填写字段';
			break;
		case "sDate":	//短日期
			ErrMsg='请输入正确的日期格式';
			tempstr= /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
			break;
		case "Tel":
			ErrMsg='请输入正确的电话格式';
			tempstr= /^\d{10,13}$/;
			break;
		default:
		    break;
	}
	if(obj.value.search(tempstr)==-1){
		obj.nextSibling.style.visibility = 'visible';
		obj.nextSibling.className = 'objCheckMessageErr';
		obj.nextSibling.childNodes[0].innerHTML = ErrMsg;
		return false;
	}
	else{
	    if(obj.nextSibling!=null)
	    {
		    obj.nextSibling.style.visibility = 'hidden';
		    obj.nextSibling.className = 'objCheckMessage';
		    obj.nextSibling.childNodes[0].innerHTML = '';
		}
		return true;
	}
}

//
function getHistory(objTemp){
	var tempStr = "";
	var objTempValue = objTemp.value;
	if(objTempValue!=objTemp.previousSibling.innerHTML&&objTempValue!=""){
		tempStr="== "+ objTemp.getAttribute('historyName')+": "+objTemp.previousSibling.innerHTML;
		tempStr = tempStr + "  =>  " + objTemp.value + "\n";
	}
	return tempStr;
}
// 创建错误提示Span
function createErrorSpan(obj){
	
	
	// 后面的提示
	if(obj.nextSibling&&obj.nextSibling.tagName=='DIV'&&obj.nextSibling.name=='objCheckMessage'){}
	else
	{
		
		var objInfo = document.createElement('strong');
		objInfo.name = 'objCheckMessage';
		objInfo.className = 'objCheckMessage';

		var objErrFont = document.createElement('font');
		objErrFont.name = 'objErrFont';
		objErrFont.className = 'objErrFont';
		objInfo.appendChild(objErrFont);
        if(!navigator.appName.indexOf("Microsoft")==0)
            obj.parentNode.appendChild(objInfo);
        else
            obj.insertAdjacentElement('afterEnd',objInfo);
	}
	// 前面的历史记录
	if(obj.getAttribute('historyName')!=null){
		if(obj.previousSibling&&obj.previousSibling.tagName=='DIV'&&obj.previousSibling.name=='objHistory'){}
		else(obj.previousSibling==null)
		{
			var objHistory = document.createElement('DIV');
			objHistory.name = 'objHistory';
			objHistory.style.visibility = 'hidden';
			objHistory.innerHTML = obj.value;
			if(!navigator.appName.indexOf("Microsoft")==0)
			   obj.parentNode.appendChild(objHistory);
			else
			   bj.insertAdjacentElement('beforeBegin',objHistory);
		}
	}
	
}

 /********************************
 * 按键事件处理 
 * 只允许输入数字(包括小数点和方向键) 
 *********************************
 */

function  onlyNum(){  
   var  keycode  =  event.keyCode;  
   var  realkey  =  String.fromCharCode(keycode);  
   if(keycode==8 || keycode==46 || (keycode>=35 && keycode<=40))return;  
   else  if(!/\d/.test(realkey))event.returnValue  =  false;  
}  

 
 /********************************
 * 不允许输入逗号
 *********************************
 */
function NoComma(objForm){
	var tempValue;
	for(var i=0;i<objForm.length-1;i++){
	tempValue = objForm[i].value;
		if(tempValue != ""){
			objForm[i].value = tempValue.replace(/\,/g, "，");
		}
	}
}



