var Checker = new Object();

Checker.checkAllInput = function ( formID )
{
	var elements = new Array();
	var form = document.getElementById(formID);  

	/* 所有input输入框框 */
	this.putAll(elements , form.getElementsByTagName("INPUT"));
	/* 所有文本域 */
	this.putAll(elements , form.getElementsByTagName("TEXTAREA"));
	/* 所有列表框 */
	this.putAll(elements , form.getElementsByTagName("SELECT"));
	for(var i = 0 ; i < elements.length ; i++)
	{
		var input     = elements[i];
		var value     = input.getAttribute("value")     ? input.getAttribute("value").toString()     : "";
		var des	      = input.getAttribute("des")        ? input.getAttribute("des").toString()       : "";
		var desType   = input.getAttribute("desType")    ? input.getAttribute("desType").toString()   : "";
		var minLength = input.getAttribute("minLength")  ? input.getAttribute("minLength").toString() : "0";
		var maxLength = input.getAttribute("maxLength")  ? input.getAttribute("maxLength").toString() : "";
		
		if( this.isNeed(input) && this.isEmpty(value) )
		{
			window.alert(des + "必须填写！");
			//input.focus();
			return false;
		}
		
		/*  长度检查 */
		if( !this.isEmpty(maxLength) && !this.checkLength(value , minLength , maxLength) )
		{
			window.alert(des + "长度不正确!长度限制 [最小长度 = " + minLength + " ]   [最大长度= " + maxLength + " ]");
			input.focus();
			return false;
		}
		
		if( !this.isEmpty(desType) && !this.isEmpty(value) )
		{
			if( desType == "DATE" && !this.isDate(value))
			{
				window.alert(des + "格式不正确! 正确的格式为：YYYY-MM-DD (2008-01-01)");
				input.focus();
				return false;
			}
            else if( desType == "TimeStamp" && !this.isTimestamp(value))
			{
				window.alert(des + "格式不正确! 正确的格式为：yyyy-MM-dd hh:mm:ss (2008-01-01 00:00:00)");
				input.focus();
				return false;
			}
            else if( desType == "NUMBER" && !this.isNumber(value) )
			{
				window.alert(des + "格式不正确!");
				input.focus();
				return false;
			}
			else if( desType == "INT" && !this.isInt(value) )
			{
				window.alert(des + "格式不正确!请输入整数");
				input.focus();
				return false;
			}
			else if( desType == "EMAIL" && !this.isEmail(value))
			{
				window.alert(des + "格式不正确! 正确的格式为：webmaster@forlink.com");
				input.focus();
				return false;
			}
			else if( desType == "IP" && !this.isIP(value) )
			{
				window.alert(des + "格式不正确!");
				input.focus();
				return false;
			}
		}	
	}
	return true;
}

Checker.isTimestamp = function ( key )
{
	var regex = /([0-9]{4})-([0-9]{2})-([0-9]{2})\s([0-9]{2}):([0-9]{2}):([0-9]{2})/;
	var year  = key.replace(regex , "$1");
	var month = key.replace(regex , "$2");
	var day   = key.replace(regex , "$3");
	var time   = key.replace(regex , "$4");
	var minute   = key.replace(regex , "$5");
	var second   = key.replace(regex , "$6");
	return (regex.test(key) && (year < "3000" && year > "1900") && ( month >= "01" && month <= "12" ) && (day >= "01" && day <= "31")&&(time >= "00" && time <= "23")&&(minute >= "00" && minute <= "59")&&(second >= "00" && second <= "59"));
}
Checker.isDate = function ( key )
{
	var regex = /([0-9]{4})-([0-9]{2})-([0-9]{2})/;
	var year  = key.replace(regex , "$1");
	var month = key.replace(regex , "$2");
	var day   = key.replace(regex , "$3");
	return (regex.test(key) && (year < "3000" && year > "1900") && ( month >= "01" && month <= "12" ) && (day >= "01" && day <= "31"));
}
Checker.isInt = function ( key )
{
	var re=/-?\d+/g;
  	var res=re.exec(key);
  	return res!=null&&key==res[0];
}

Checker.isIP = function ( key )
{
	var regex = /(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/;
	var A = parseInt(key.replace(regex,"$1"));
	var B = parseInt(key.replace(regex,"$2"));
	var C = parseInt(key.replace(regex,"$3"));
	var D = parseInt(key.replace(regex,"$4"));
	return (regex.test(key) && A <= 255 && B <= 255 && C <= 255 && D <=255);
}

Checker.isNumber = function ( key ) 
{
	return !isNaN(key);
}

Checker.isEmail = function ( key )
{
	var regex = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/;
	return regex.test(key);
}

Checker.isEmpty = function ( key )
{
	
	return key.trim().length == 0 ;
}

Checker.checkLength = function ( key , minLength , maxLength)
{
	/** 取得绝对长度 一个汉字2个字节 **/
	var length = key.trim().size();
	return (length >= minLength && length <= maxLength);
}	

/** Private Method **/
Checker.isNeed = function ( element )
{
	var isNeed = element.getAttribute("isNeed");
	return  isNeed == "1" ;
}

Checker.putAll = function ( array , elements)
{
	if(elements != null && elements.length > 0 )
	{
		for ( var i = 0 ; i < elements.length ; i++)
		{
			if(elements[i].getAttribute("tagName") == "INPUT")
			{
				var type = elements[i].getAttribute("type");
				if( type == "text" || type == "password")
				{
					array.push( elements[i] );
				}
			}
			else
			{
				array.push( elements[i] );
			}
		}
	}
}

/**
** 比较两个日期
** 返回值:0:BDate = EDate ;1:BDate < EDate; 2:BDate > EDate;-1:非法
**/
function compareDate(BDate,EDate){
	var d1 = new Date(BDate.replace(/-/g, "/")); 
  var d2 = new Date(EDate.replace(/-/g, "/")); 
  if (Date.parse(d1) - Date.parse(d2) == 0) { 
  		return 0;
  }else if(Date.parse(d1) - Date.parse(d2) < 0){
  		return 1;
  }else if(Date.parse(d1) - Date.parse(d2) > 0){
  	return 2;
  }else{
  	return -1;
  }
}

function verifyDate(BDate,EDate){

	if(BDate.length == 0 || EDate.length == 0){
		return true;
	}
	
	var values =compareDate(BDate,EDate);
	if( values == 2){
		alert("开始日期不能大于结束日期.如:2008-01-01 至 2008-01-18");
		return false;
	}else if(values == -1){
		alert("日期信息非法.");
		return false;
	}
	
	return true;
}


//清空所有
function clearAll(doc)
{
	var tags=doc.all;
	for (var i=0;i<tags.length;i++ )
	{
		if ((tags[i].tagName=="INPUT"&&tags[i].type=="text")||tags[i].tagName=="TEXTAREA")
		{
			tags[i].value = "";
		}
	}
}

//全选
function selectAll(check,isTF)
{
		if(check != null)
		{
			if(check.length !=null)
			{
				for (var i=0;i<check.length ;i++ )
				{
					check[i].checked = isTF
				}
			}
			else
			{
				check.checked = isTF
			}
		}
		return true;
}

