function isBlank(value) {
	var s = trim(value);
	return s.length==0;
}

function isAlphaNumber(value) {
	if (isBlank(value)) return true;
	var foo = value.match("^\\w+$");
	return foo!=null;
}

function isNumber(value) {
	if (isBlank(value)) return true;
	return value.match("^-?\\d*\\.?\\d*$")!=null;
}

function isUnsignedNumber(value) {
	if (isBlank(value)) return true;
	return value.match("^\\d*\\.?\\d*$")!=null
}

function isInt(value) {
	if (isBlank(value)) return true;
	return value.match("^-?\\d+$")!=null
}

function isUnsignedInt(value) {
	if (isBlank(value)) return true;
	return value.match("^\\d+$")!=null
}

function isNumberLE(value1, value2) {
	if (isBlank(value1)) return true;
	var i1 = parseFloat(value1);
	var i2 = parseFloat(value2);
	return value1<=value2;
}

function isNumberGE(value1, value2) {
	if (isBlank(value1)) return true;
	var i1 = parseFloat(value1);
	var i2 = parseFloat(value2);
	return value1>=value2;
}

function isNumberLT(value1, value2) {
	if (isBlank(value1)) return true;
	var i1 = parseFloat(value1);
	var i2 = parseFloat(value2);
	return value1<value2;
}

function isNumberGT(value1, value2) {
	if (isBlank(value1)) return true;
	var i1 = parseFloat(value1);
	var i2 = parseFloat(value2);
	return value1>value2;
}

function isNumberScope(value, min, max) {
	if (isBlank(value)) return true;
	var i = parseFloat(value);
	var mi = parseFloat(min);
	var ma = parseFloat(max);
	return i>=mi && i<=ma;
}

function isLengthScope(value, min, max) {
	if (isBlank(value)) return true;
	return value.length>=min && value.length<=max;
}

function lengthGE(value, n) {
	if (isBlank(value)) return true;
	var s = trim(value);
	return s.length>=n;
}

function lengthLE(value, n) {
	if (isBlank(value)) return true;
	var s = trim(value);
	return s.length<=n;
}

function isEmail(value) {
	if (isBlank(value)) return true;
	var regTextEmail = /^([a-zA-Z0-9_\-\.])+@([a-zA-Z0-9_])+((\.[a-zA-Z0-9_]+){1,3})$/;
	return regTextEmail.test(value);
}

function trim(value) {
	if( value == undefined ) return "";
	return value.replace( /^\s*/, "").replace( /\s*$/, "");
}


//----------------------一个javascript对象----------------------------
function isDateFormat( value, format )
{
	if( isBlank( value ) ) return true;	
	
	this.YEAR_FOUR_DIG = 1;
	this.YEAR_TWO_DIG = 2;
	this.MONTH = 3;
	this.DATE = 4;
	this.HOUR_OF_DAY = 5;
	this.HOUR = 6;
	this.MINUTE = 7;
	this.SECOND = 8;

	this._dateStr = value;
	this._format = format;

	this._formatRegex = "";

	this.fieldOrder = new Array();

	this.parsedDate = {
		year : 2000,
		month : 1,
		date : 1,
		hour : 0,
		minute : 0,
		second : 0
	}

	this.parseFormat = function(){
		//alert( this._format );
		var reg = /(yyyy|yy|MM|dd|HH|hh|mm|ss)(-|\/|:| )?/g;

		//拼装正则表达式。并获取将要被提取出来的时间域。		
		var matchGroup = "";    
		while(matchGroup = reg.exec(this._format)) {
			//alert(matchGroup[1]+" "+matchGroup[2]);
			if( matchGroup[1] == "yyyy" ){
				fieldOrder.push( this.YEAR_FOUR_DIG );
				_formatRegex += "(\\d{1,4})"+(matchGroup[2]==undefined?"":matchGroup[2]);
			}
			else if( matchGroup[1] == "yy" ){
				fieldOrder.push( this.YEAR_TWO_DIG );
				_formatRegex += "(\\d{1,2})"+(matchGroup[2]==undefined?"":matchGroup[2]);
			}
			else if( matchGroup[1] == "MM" ){
				fieldOrder.push( this.MONTH );
				_formatRegex += "(\\d{1,2})"+(matchGroup[2]==undefined?"":matchGroup[2]);
			}
			else if( matchGroup[1] == "dd" ){
				fieldOrder.push( this.DATE );
				_formatRegex += "(\\d{1,2})"+(matchGroup[2]==undefined?"":matchGroup[2]);
			}
			else if( matchGroup[1] == "HH" ){
				fieldOrder.push( this.HOUR_OF_DAY );
				_formatRegex += "(\\d{1,2})"+(matchGroup[2]==undefined?"":matchGroup[2]);
			}
			else if( matchGroup[1] == "hh" ){
				fieldOrder.push( this.HOUR );
				_formatRegex += "(\\d{1,2})"+(matchGroup[2]==undefined?"":matchGroup[2]);
			}
			else if( matchGroup[1] == "mm" ){
				fieldOrder.push( this.MINUTE );
				_formatRegex += "(\\d{1,2})"+(matchGroup[2]==undefined?"":matchGroup[2]);
			}
			else if( matchGroup[1] == "ss" ){
				fieldOrder.push( this.SECOND );
				_formatRegex += "(\\d{1,2})"+(matchGroup[2]==undefined?"":matchGroup[2]);
			}
		}
		_formatRegex = "^" + _formatRegex + "$";

		//document.write ( _formatRegex );
		//alert( _formatRegex );
		//alert( fieldOrder );
		
		var matcher = this._dateStr.match( new RegExp( _formatRegex ) ); 

		if( matcher==null ) return false;

		for( var i=1;i<=matcher.length;i++ ){
			//alert( matcher[i] );
			switch( fieldOrder[i-1] ){
			case 1:
				this.parsedDate.year = parseInt( matcher[i], 10 );
				break;
			case 2:
				this.parsedDate.year = 2000+parseInt( matcher[i], 10 );
				break;
			case 3:
				this.parsedDate.month = parseInt( matcher[i], 10 );
				break;
			case 4:
				this.parsedDate.date = parseInt( matcher[i], 10 );
				break;
			case 5:
			case 6:
				this.parsedDate.hour = parseInt( matcher[i], 10 );
				break;
			case 7:
				this.parsedDate.minute = parseInt( matcher[i], 10 );
				break;
			case 8:
				this.parsedDate.second = parseInt( matcher[i], 10 );
				break;			
			}
		}

		//for( var i in this.parsedDate ){
		//	alert( "The "+i+" is: "+ this.parsedDate[i] );
		//}

		var date = new Date(this.parsedDate.year,
							this.parsedDate.month-1,
							this.parsedDate.date,
							this.parsedDate.hour,
							this.parsedDate.minute,
							this.parsedDate.second);
		//alert( date.getTime() );

		var cyear = date.getFullYear();
		var cmonth = date.getMonth()+1;
		var cdate = date.getDate();
		var chour = date.getHours();
		var cminute = date.getMinutes();
		var csecond = date.getSeconds();

		//alert( [cyear, cmonth, cdate, chour, cminute, csecond] );

		if( cyear != this.parsedDate.year ) return false;
		if( cmonth != this.parsedDate.month ) return false;
		if( cdate != this.parsedDate.date ) return false;
		if( chour != this.parsedDate.hour ) return false;
		if( cminute != this.parsedDate.minute ) return false;
		if( csecond != this.parsedDate.second ) return false;

		return true;
	}

	return parseFormat();
}