
var INT_MAX_LENGTH = 14;
var obj = new Array();
function validate(formname)
{
	var objForm = eval("document."+formname);
	for(var i=0;i<objForm.elements.length;i++)
	{
		var e = objForm.elements[i];
		for(var j=0;j<obj.length;j++)
		{
			if(e.name==obj[j].objname)
			{
				var elem = document.all(obj[j].objname);
				obj[j].value = elem.value;

				//对选择框、邮件、密码、多选框不判断其长度
				if(obj[j].type!='SEL' && obj[j].type!='MAIL' && obj[j].type!='PWD' && obj[j].type!='MSEL')
				{
					//判断是否必填项，最小长度大于零时为比填项
					if(obj[j].decLen > 0)
					{
						//判断输入是否为空
						if(isBlank(obj[j].value))
						{
							alert('请注意，您忘了给‘'+obj[j].realname+'’输入(选择)内容了，请输入后再提交。');
							return false;
						}
						if(checkLen(obj[j].value)<obj[j].decLen)
						{
							alert('请注意，您在‘'+obj[j].realname+'’中输入的内容没有达到了要求的长度，\n'+
								'要求输入的最小长度为‘'+obj[j].decLen+'个’，请您修正后再提交。');
							return false;
						}
					}
					//检查最大长度
					if(checkLen(obj[j].value)>obj[j].length)
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的内容超过了要求的长度，\n'+
							'要求输入的最大长度为‘'+obj[j].length+'个字符或'+Math.floor(obj[j].length/3)+'个汉字’，请您修正后再提交。');
						return false;
					}
				}

				if(obj[j].type=='TXT')
				{
					if(hasBlank(elem))
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的内容中含有空格，请检查删除后再提交。');
						return false;
					}
					if(!validateSpe(obj[j].value))
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的内容中含有非法字符，请检查删除后再提交。');
						return false;
					}
				}
				else if(obj[j].type=='TXT_NOSC')
				{
					if(checkSC(obj[j].value))
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的内容中只能为数字和英文字母，请检查删除后再提交。');
						return false;
					}
					if(hasBlank(elem))
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的内容中含有空格，请检查删除后再提交。');
						return false;
					}
					if(!validateSpe(obj[j].value))
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的内容中含有非法字符，请检查删除后再提交。');
						return false;
					}
				}
				else if(obj[j].type=='INT')
				{
					if(!checkInteger(obj[j].value,0))
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的内容不是整数，请重新输入并确认后再提交。');
						return false;
					}
				}
				else if(obj[j].type=='DEC')
				{
					if(!checkNumber(obj[j].value,0))
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的内容不是数字，请重新输入并确认后再提交。');
						return false;
					}
				}
				else if(obj[j].type=='DEC_DIGITS')
				{
					if(!checkNumber(obj[j].value,0))
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的内容不是数字，请重新输入并确认后再提交。');
						return false;
					}
					var decLen = checkDecDigits(obj[j].value,obj[j].decLen);
					if(decLen == -1)
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的数字格式有错误，请修正后再提交。');
						return false;
					}
					if(decLen == 1)
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的数字，其中的小数位超出规定的长度\n'+
								'规定的小数位数长度为'+obj[j].decLen+'，请修正后再提交。');
						return false;
					}
					if(checkIntLen(obj[j].value)>INT_MAX_LENGTH)
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的数字超过系统支持的最大长度。\n'+
								'输入数字的整数部分最大长度为'+INT_MAX_LENGTH+'，请修正后提交。');
						return false;
					}
					////////////检查上限
					var required = obj[j].length;
					if(required.length>0)
					{
						var commaPos = required.indexOf(',');
						if(commaPos > 0)
						{
							obj[j].length = parseFloat(required.substring(0,commaPos));
							obj[j].upperlimit = parseFloat(required.substring(commaPos+1,required.length));
							if(obj[j].upperlimit!=-1 && (obj[j].value>obj[j].upperlimit) )
							{
								alert('请注意，您在‘'+obj[j].realname+'’中输入的数值超过了指定的大小，\n'+
									'此处录入的数据指定的上限为‘'+obj[j].upperlimit+'’，请修正后提交。');
								obj[j].length = required;
								obj[j].upperlimit = -1;
								return false;
							}
						}
					}
//					if(parseFloat(obj[j].value)==0)
//					{
//						alert('请注意，您在‘'+obj[j].realname+'’中输入的数值为0，请修正后再提交。');
//						return false;
//					}
				}
				else if(obj[j].type=='DEC_DIGIT')
				{
					if(!checkNumber(obj[j].value,0))
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的内容不是数字，请重新输入并确认后再提交。');
						return false;
					}
					var decLen = checkDecDigits(obj[j].value,obj[j].decLen);
					if(decLen == -1)
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的数字格式有错误，请修正后再提交。');
						return false;
					}else if(decLen == 1)
					{
						alert('请注意，您在‘'+obj[j].realname+'’中输入的数字，其中的小数位超出规定的长度\n'+
								'规定的小数位数长度为'+obj[j].decLen+'，请修正后再提交。');
						return false;
					}
					if(checkIntLen(obj[j].value)>INT_MAX_LENGTH){
						alert('请注意，您在‘'+obj[j].realname+'’中输入的数字超过系统支持的最大长度。\n'+
								'输入数字的整数部分最大长度为'+INT_MAX_LENGTH+'，请修正后提交。');
						return false;
					}
					////////////检查上限
					var required = obj[j].length;
					if(required.length>0)
					{
						var commaPos = required.indexOf(',');
						if(commaPos > 0)
						{
							obj[j].length = parseFloat(required.substring(0,commaPos));
							obj[j].upperlimit = parseFloat(required.substring(commaPos+1,required.length));
							if(obj[j].upperlimit!=-1 && (obj[j].value>obj[j].upperlimit) )
							{
								alert('请注意，您在‘'+obj[j].realname+'’中输入的数值超过了指定的大小，\n'+
									'此处录入的数据指定的上限为‘'+obj[j].upperlimit+'’，请修正后提交。');
								obj[j].length = required;
								obj[j].upperlimit = -1;
								return false;
							}
						}
					}
				}
				else if(obj[j].type=='SEL')
				{
					if(obj[j].value=='null')
					{
						alert('请注意，您忘了对页面中的‘'+obj[j].realname+'’做选择，请选择后再提交。');
						return false;
					}
					if(obj[j].value=='' || obj[j].value=='0')
					{
						alert('请注意，您选择的‘'+obj[j].realname+'’的值有错误，请刷新后再选择。');
						return false;
					}
				}
				else if(obj[j].type=='MSEL')
				{
					var selLen = 0;
					for(var x=0; x<elem.length; x++){if(elem.options[x].selected)selLen++;}
					if(obj[j].length!=0 && selLen>obj[j].length)
					{
						alert('请注意，多选框‘'+obj[j].realname+'’只允许选择‘'+obj[j].length+'’个，请您修正后再提交。');
						return false;
					}
				}
				else if(obj[j].type=='MAIL')
				{
					if(!isMailAddress(obj[j]))
					{
						alert('请注意，您输入的‘'+obj[j].realname+'’不是正确的邮件地址，请修正后再提交。');
						return false;
					}
				}
				/*else if(obj[j].type=='PWD')
				{
					var oldPwd = document.all(obj[j].realname);
					if(!comparePwd(oldPwd.value,obj[j].value))
					{
						alert('请注意，您输入的新密码与旧密码的内容不一致，请重新输入。');
						return false;
					}
				}*/
			}
		}
	}
	return true;
}



///////////////////////////////////////////////
// type:
//	TXT				    文本内容
//	INT				    整数
//	DEC				    浮点数
//	DEC_DIGITS		浮点数_要求小数位数
//	SEL				    单项选择框
//	MSEL			    多项选择框
//	MAIL			    邮件地址
//	PWD				    密码
//  TXT_NOSC		  不能为中文
///////////////////////////////////////////////


function pageElement(realname, objname, type, length, declen)
{
	this.realname = realname;
	this.objname = objname;
	this.value = '';
	this.type = type.toUpperCase();
	this.length = length;
	this.upperlimit = -1;
	this.decLen = declen;
}

function comparePwd(newPwd,oldPwd)
{
	if(newPwd!=oldPwd)
		return false;
	else
		return true;
}

////////////////////////////////////////////
//判断是否为中文
function checkSC(value)
{
	for(var i = 0; i < value.length; i++)
	{
		if(value.charCodeAt(i)>255)return true;
	}
	return false;
}

////////////////////////////////////////////
//检查输入值的长度，一个汉字的长度计算为3(使用UTF－8编码)
function checkLen(value)
{
	var len = 0;
	for(var i = 0; i < value.length; i++)
	{
		if(value.charCodeAt(i)>255)
		{//三字节
			len = len+3;
		}
		else
		{
			len++;
		}
	}
	return len;
}
///////////////////////////////////////////
//检查数字中的整数位长度
function checkIntLen(value)
{
	var dotPos =  value.indexOf('.');


	if(dotPos == -1)
	{
		return value.length;
	}
	else
	{
		return dotPos;
	}
}
///////////////////////////////////////////
//检查输入值是否为空
function isBlank(value)
{
	var x = value.length;
	var y = 0;
	if(x==0)return true;
	for(var i = 0; i < x; i++)
	{
		if(value.charAt(i) == ' ')y++;
	}
	if(x==y)
	{
		return true;
	}
	else
	{
		return false;
	}
}
////////////////////////////////////////////////
//校验输入的特殊字符
function validateSpe(value)
{
	for (var i = 0; i < value.length; i++)
	{
	  	if ((value.charAt (i) == '\"')
	     	|| (value.charAt (i) == '^')
	     	||((value.charAt(i)>'&')&&(value.charAt(i)<'('))    	
	     	||((value.charAt(i)>'[')&&(value.charAt(i)<']'))
	     	|| (value.charAt (i) == '/')
	     	|| (value.charAt (i) == '&')
	     	|| (value.charAt (i) == '#')
	     	|| (value.charAt (i) == '$')
	     	|| (value.charAt (i) == '%')
	     	|| (value.charAt (i) == '|')
	     	|| (value.charAt (i) == '+')
	     	|| (value.charAt (i) == '*') )
  		return false;   
 	}
 	return true;
}


////////////////////////////////////////////////////
//指定浮点数的小数点后N位，超出则出错
function checkDecDigits(value,digit)
{
	var j = 0;
	var pos = 0;
	for(var i=0; i<value.length; i++)
	{
		if(value.charAt(i)=='.')
		{
			j++;
			pos = i;
		}
	}
	if(j==1)
	{
		if((value.length-(pos+1))<=digit)
			return 0;//正确
		else
			return 1;//超出
	}else if(j>1){
		return -1;//数字格式有错误
	}
	return 0;
}

////////////////////////////////////////////////////
//检查输入值是否为integer,flag表示是否可以包含+-号
function checkInteger(object_value,flag)
{
  if (object_value.length == 0)return true;
	var decimal_format = ".";
	var check_char;
	check_char = object_value.indexOf(decimal_format);
  if (check_char < 1)
		return checkNumber(object_value,flag);
  else
		return false;
}

////////////////////////////////////////////////////////
//检查输入值是否为数字，flag为1时不允许包含正负号
function checkNumber(object_value,flag)
{
	if (object_value.length == 0)return true;
	var start_format;
	if (flag == 0)
		start_format = " .+-0123456789";
	else
		start_format = ".0123456789";	
	var number_format = " .0123456789";
	var check_char;
	var decimal = false;
	var trailing_blank = false;
	var digits = false;
    //The first character can be + - .  blank or a digit.
	check_char = start_format.indexOf(object_value.charAt(0))
    //Was it a decimal?
	if (check_char == 0)
	    return false;//decimal = true; Can not be decimal;
	else if (check_char < 1)
		return false;
	//Remaining characters can be only . or a digit, but only one decimal.
	for (var i = 1; i < object_value.length; i++)
	{
		check_char = number_format.indexOf(object_value.charAt(i))
		if (check_char < 0)
			return false;
		else if (check_char == 1)
		{
			if (decimal)		// Second decimal.
				return false;
			else
				decimal = true;
		}
		else if (check_char == 0)
		{
			if (decimal || digits)	
				trailing_blank = true;// ignore leading blanks
		}else if (trailing_blank)
			return false;
		else
			digits = true;
	}//All tests passed, so...
    return true;
}



/////////////////////////////////////////
// check mail address format
function isMailAddress(address)
{
	var j=0;
	var addressValue = address.value;
	if(addressValue == '')return false;
	if(addressValue.length < 3)return false;//only: a@b
	if(hasBlank(address))return false;
	if(addressValue.indexOf('@') >= 1)
	{
		for(var i=0; i<addressValue.length; i++)
		{
			if(addressValue.charAt(i)=='@')j++;
		}
		if(j>1)return false;
		if( (addressValue.charAt(0)=='@') || (addressValue.charAt(addressValue.length-1)=='@') )
		{
			return false;//leading and last character cannot be @
		}
		else
		{
			if(!validateSpe(addressValue))
			{
				return false;
			}
			return true;
		}
	}else{
		return false;
	}
	return true;
}


/////////////////////////////////////
//检查输入值中是否有空格
function hasBlank(objChecking)
{
//	var i = 0;
//	for(var j=0; j<value.length; j++)
//	{
//		if(value.charAt(j)==' ')i++;
//	}
//	if(i==0)
//	{
//		return false;//no blank
//	}
	objChecking.value=objChecking.value.trim();
//    alert(objChecking.value);
	return false;//blank
}


//////////////////////////////////////
//日期检查，开始时间是否大于结束时间


//去除空格 
	String.prototype.trim = function() {
	 // x=x.replace(/^\s*(.*)/, "$1");
	 // x=x.replace(/(\S*)\s*$/, "$1");
	  return this.replace(/(^\s*)|(\s*$)/g, "");
	}
	
	//check input form element for not null, output alert message and focus.
	function checknull(element,alerts){
		element = eval(element);
		if (element.value.trim() == "") {
			alert(alerts);
			element.focus();
			return false;
		} else {
			return true;
		}
	}
	
	//reset invoke the function
	function clearTheForm()
	{
		var temps = document.getElementsByTagName("input");
		var theOptions;
		for(var i=0;i<temps.length;i++)
	    {
	    	try{
		    	if(temps[i].type.toLowerCase()=="text")
		    	{
		    		temps[i].value="";
		        }
		        else if(temps[i].type.toLowerCase()=="checkbox")
		        {
		        	temps[i].checked=false;
		        }
	    	}catch(e)
	    	{
	    		//alert(e);
	    	}
	   	}
	   	
	   	temps = document.getElementsByTagName("textarea");
	    //alert(temps.length);
		for(var i=0;i<temps.length;i++)
	    {
	    	temps[i].value="";
	   	}
	   	
	    temps = document.getElementsByTagName("select");
	    //alert(temps.length);
		for(var i=0;i<temps.length;i++)
	    {
	    	theOptions = temps[i].all;
		    for(var j=0;j<theOptions.length;j++)
		    {
		       if(theOptions[j].value=="" 
		       || theOptions[j].value==-1
		       || theOptions[j].value==0
		       )
		       {
		       		theOptions[j].selected=true;
		       		break;
		       }

		     }
	   	}
	}

//beginTime为开始时间,endTime为结束时间,maxInterval为最大时间间隔

function compareDate(beginTime, endTime, beginTimeMessage, endTimeMessage, maxInterval)
{
	var btv = document.all(beginTime).value;
	var etv = document.all(endTime).value;
	var regForDate = /^(\d+)\-(\d{1,2})\-(\d{1,2})$/; 
    var regForTime = /^(\d+)\-(\d{1,2})\-(\d{1,2})\s(\d{1,2}):(\d{1,2}):(\d{1,2})(.\d{1,2})*$/; 
    //正则表达式处理后的数组

    var btds;
    //正则表达式处理后的数组

    var etds;
    //开始日期，日期型

    var btd;
    //结束日期，日期型
    var etd;
    //如果日期长度小于14则当成不含时分秒来处理	
    if(btv.length<14)
    {
    	btds=btv.match(regForDate);
    	etds=etv.match(regForDate);
    	btds[2]--;
    	etds[2]--;
    	btd= new Date(btds[1],btds[2],btds[3]);
    	etd= new Date(etds[1],etds[2],etds[3]);
    }else
    {
    	btds=btv.match(regForTime);
    	etds=etv.match(regForTime);
    	
    	btds[2]--;
    	etds[2]--;
    	btd= new Date(btds[1],btds[2],btds[3],btds[4],btds[5]);
    	etd= new Date(etds[1],etds[2],etds[3],etds[4],etds[5]);
    }
    
	if(btd>etd)
	{
		alert(beginTimeMessage+'不得晚于'+endTimeMessage);
		return false;
	}
	
	//如果有最大间隔值，那么判断下最大间隔值，单位为小时

	if(null!=maxInterval)
	{
		if(etd.getTime()-btd.getTime()>maxInterval*3600000)
		{
			alert(endTimeMessage+'不得晚于'+beginTimeMessage+'超过'+maxInterval+'小时');
			return false;
		}
	}
	
	return true;
}

//全选
	function checkedAll(obj,type)
	{	
		 var allCkeckbox = document.getElementsByTagName("input");
	
		//进行全部选择
		for(var i=0;i<allCkeckbox.length;i++)
		{
			
		   //如果已有项被选择，则判断是否为全选了
		  try{
		  		//如果已选，且值为all,那么依然为all
				if(allCkeckbox[i].type=="checkbox" && allCkeckbox[i].name.indexOf(type)!=-1 )
				{
					allCkeckbox[i].checked = obj.checked;		
				}		
			}catch(e)
			{
			}	  
		}
		
	}
	
	
	//是否选择了待操作数据
	function checkHasItem(type)
	{	
		 var allCkeckbox = document.getElementsByTagName("input");
		//初始返回为有选择，但未全选
		 ret = false;
		 
		//判断是有被选中的
		for(var i=0;i<allCkeckbox.length;i++)
		{
			
		   //如果已有项被选择，则判断是否为全选了
		  try{
		  		//如果已选，且值为all,那么依然为all
				if(allCkeckbox[i].type=="checkbox" && allCkeckbox[i].checked && allCkeckbox[i].name.indexOf(type)!=-1 )
				{
					ret = true;
					break;			
				}		
			}catch(e)
			{
			}	  
		}
		
		return ret;
	}


