// ***通用表单验证函数***
// Get Collection of Form Element Which has self define attributes.
// objTagName: 需要遍历的标签名
function initElementCheckEvent(objForm){
	// 获取所有objTagName
	var objEle = objForm.elements;
	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);
				objTemp.nextSibling.style.display = 'none';
				//if(maxNum)checkLong(objTemp,maxNum);
				//objTemp.onchange += checkEventHandle;
				objTemp.onkeyup = checkEventHandle;
				objTemp.onfocus = checkEventHandle;
				objTemp.onblur = HiddenErrSpan;
			}
		}
		objForm.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.display='none';
		}
	}
}
// 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+"";
	}
	return flags;
}


// 检测长度 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.display = 'block';
	obj.nextSibling.childNodes[1].innerHTML = '(' + tempI + '/' + intNum + ')';
}

// 通用数据检测函数
function checkDate(obj,type){
	var tempstr = '';
	switch(type){
		case "Number":
			tempstr=/^\d+$/; 
			ErrMsg = 'Not a Number , ';
			break;
		case "Money": 
			tempstr=/^\d+(\.\d+)?$/; 
			ErrMsg='Not a money , ';
			break;
		case "Email": 
			tempstr=/^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/;
			ErrMsg='Not a variable Email , ';
			break;
		case "Empty":
			tempstr=/.+/;
			ErrMsg='Can not Empty , ';
			break;
		case "sDate":	//短日期
			ErrMsg='Not a datetime ，';
			tempstr= /^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/;
			break;
		default:
	}
	if(obj.value.search(tempstr)==-1){
		obj.nextSibling.style.display = 'block';
		obj.nextSibling.className = 'objCheckMessageErr';
		obj.nextSibling.childNodes[0].innerHTML = ErrMsg;
		return false;
	}
	else{
		obj.nextSibling.style.display = 'block';
		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('DIV');
		objInfo.name = 'objCheckMessage';
		objInfo.className = 'objCheckMessage';

		var objErrFont = document.createElement('font');
		objErrFont.name = 'objErrFont';
		objErrFont.className = 'objErrFont';
		objInfo.appendChild(objErrFont);

		var objNumFont = document.createElement('font');
		objNumFont.name = 'objNumFont';
		objNumFont.className = 'objNumFont';
		objInfo.appendChild(objNumFont);

		obj.insertAdjacentElement('afterEnd',objInfo);
	}
	// 前面的历史记录
	if(obj.getAttribute('historyName')!=null){
		if(obj.previousSibling&&obj.previousSibling.tagName=='DIV'&&obj.previousSibling.name=='objHistory'){
		}else{
			var objHistory = document.createElement('DIV');
			objHistory.name = 'objHistory';
			objHistory.style.display = 'none';
			objHistory.innerHTML = obj.value;
			
			obj.insertAdjacentElement('beforeBegin',objHistory);
		}
	}
}