function checkEmail(value){
//	var re = new RegExp("^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|cn)$", "i");
	var re = new RegExp("^\\w+((-\\w+)|(\\.\\w+))*\\@([_a-z0-9\-]+.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel|cn)$", "i");
	return re.test(value);
}
/*function checkUrl(url){
	var re = new RegExp("^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$", "i");
	return re.test(url);
}*/
function checkUrl(url){
	var re = new RegExp("^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$", "i");
	return re.test(encodeURI(url));
}
function checkNum(num){
	var patn = "^[0-9]+(\.[0-9]{1,2})?$";
	var re = new RegExp(patn, "i");
	return re.test(num);
}
function checkInt(value){
	var re = new RegExp("^\\d+$", "i");
	//var re = new RegExp("^([+]?)\\d+$", "i");
	return re.test(value);
}
function checkPhone(value){
//	var re = new RegExp("/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/", "i");
//	return re.test(value);
	return true;
}
function checkMobile(value){
//	var re = new RegExp("/^((\(\d{3}\))|(\d{3}\-))?13\d{9}$/", "i");
//	return re.test(value);
    return true;
}
function checkZip(value){
	patn = /^[0-9]+$/;
	return patn.test(value);
}
function checkIdCard(value){
	var re = new RegExp("/^\d{15}(\d{2}[A-Za-z0-9])?$/", "i");
	return re.test(value);
}
function checkRequired(value){
	if(value==""){
		return false;
	}else{
		return true;
	}
}



//台湾身份证 验证
function checkId(s) { //查核身分證號
   var c, n, i;
   var t= "ABCDEFGHJKLMNPQRSTUVXYWZIO";
   c= s.substring(0,1);
   c= t.indexOf(c.toUpperCase());
   if((s.length!= 10) || (c<0)) return false;
   n= parseInt(c/10)+ c%10*9+ 1;
   for(i=1; i<9; i++) n= n+ parseInt(s.substring(i,i+1))* (9-i);
   n= (10- (n% 10))% 10;
   if(n!= parseInt(s.substring(9,10))) return false;
   return true;
}


//台湾营利事业统编号 验证
function checkRfno(rfno_obj){//查核營利事業統一編號
    var rfno = rfno_obj.value;
    var multiplicator = '12121241';
    var ArrayOfValue = new Array(8);
    var isum = 0;
    if( rfno.length != 8 ) return false;
    for( var i=0; i<8; i++){
       if( rfno.charAt(i) < "0" || rfno.charAt(i) > "9" ) return false;
    }
    for( var i=0; i<8; i++){
       ArrayOfValue[i] = rfno.charAt(i) * multiplicator.charAt(i);
       isum = isum + Math.floor(ArrayOfValue[i] / 10);
       isum = isum + ( ArrayOfValue[i] % 10 );
    }
    if( isum % 10 == 9 ){
       if( rfno.charAt(6) != "7" ) return false;
    }else if( isum % 10 != 0 ){
       return false;
    }
    return true;
}

//表单验证 输入参数 为需要验证的id 数组，msg 为alert的文字，class 为验证类型
function checkFormAll(array){
	var hasWrongEl=true;
	for(var i=0;i<array.length;i++){
		var elStr=array[i];
		if(!checkElement(elStr)){
			hasWrongEl=false;
			alert($(elStr).getAttribute("msg"));
			$(elStr).focus();
		}
		if(!hasWrongEl){
			return hasWrongEl;
			break;
		}
	}
	return true;
}
//需要与propertype.js公用
function checkElement(elStr){
	var checkEl=$(elStr);
	var value=$(elStr).value;
	var isAvailable=true;
	if(checkEl.getAttribute("class")){
		var checkType=checkEl.getAttribute("class");
	}else if(checkEl.getAttribute("className")){
		var checkType=checkEl.getAttribute("className");
	}
	
	switch (checkType) {
		case "checkEmail":
			if(!checkEmail(value)){
				isAvailable=false;			
			}
			break;
		case "checkUrl":
			if(!checkUrl(value)){
				isAvailable=false;			
			}
		 	break;
		case "checkNum":
			if(!checkNum(value)){
				isAvailable=false;			
			}
		 	break;
		case "checkNum":
			if(!checkType(value)){
				isAvailable=false;			
			}
		 	break;
		case "checkPhone":
			if(!checkPhone(value)){
				isAvailable=false;			
			}
		 	break;
		case "checkMobile":
			if(!checkMobile(value)){
				isAvailable=false;			
			}
		 	break;
		case "checkZip":
			if(!checkZip(value)){
				isAvailable=false;			
			}
		 	break;
		case "checkIdCard":
			if(!checkIdCard(value)){
				isAvailable=false;			
			}
		 	break;
		case "checkRequired":
			if(!isText(value, {minlength: 1})){
				isAvailable=false;			
			}
		 	break;
		case "checkId":
			if(!checkId(value)){
				isAvailable=false;			
			}
		 	break;
		case "checkRfno":
			if(!checkRfno(value)){
				isAvailable=false;			
			}
		 	break;
		case "checkSelect":
			if(value==""||value==-1){
				isAvailable=false;			
			}
		 	break;
		 case "checkDate":
		 	if(!checkDate(value,"YYYY-MM-DD")){
				isAvailable=false;			
			}
		 	break;
		 case "checkPassword":
		 	if(!isText(value,{minlength: 6,maxlength: 16})){
		 		isAvailable=false;		
		 	}
		 	break;
		 case "checkInt":
		 	if(!checkInt(value)){
		 		isAvailable=false;			
		 	}
		 	break;
		default:
			alert("Not have check method:"+checkType);
			break;
	}
	return isAvailable;
}

//取自dojo时间校验
checkDate= function(dateValue, format) {
	// Default is the American format
	if (typeof format == "object" && typeof format.format == "string"){ format = format.format; }
	if (typeof format != "string") { format = "MM/DD/YYYY"; }

	// Create a literal regular expression based on format
	var reLiteral = format.replace(/([$^.*+?=!:|\/\\\(\)\[\]\{\}])/g, "\\$1");

	// Convert all the tokens to RE elements
	reLiteral = reLiteral.replace( "YYYY", "([0-9]{4})" );
	reLiteral = reLiteral.replace( "MM", "(0[1-9]|10|11|12)" );
	reLiteral = reLiteral.replace( "M", "([1-9]|10|11|12)" );
	reLiteral = reLiteral.replace( "DDD", "(00[1-9]|0[1-9][0-9]|[12][0-9][0-9]|3[0-5][0-9]|36[0-6])" );
	reLiteral = reLiteral.replace( "DD", "(0[1-9]|[12][0-9]|30|31)" );
	reLiteral = reLiteral.replace( "D", "([1-9]|[12][0-9]|30|31)" );
	reLiteral = reLiteral.replace( "ww", "(0[1-9]|[1-4][0-9]|5[0-3])" );
	reLiteral = reLiteral.replace( "d", "([1-7])" );

	// Anchor pattern to begining and end of string
	reLiteral = "^" + reLiteral + "$";

	// Dynamic RE that parses the original format given
	var re = new RegExp(reLiteral);
	
	// Test if date is in a valid format
	if (!re.test(dateValue))  return false;

	// Parse date to get elements and check if date is valid
	// Assume valid values for date elements not given.
	var year = 0, month = 1, date = 1, dayofyear = 1, week = 1, day = 1;

	// Capture tokens
	var tokens = format.match( /(YYYY|MM|M|DDD|DD|D|ww|d)/g );

	// Capture date values
	var values = re.exec(dateValue);

	// Match up tokens with date values
	for (var i = 0; i < tokens.length; i++) {
		switch (tokens[i]) {
		case "YYYY":
			year = Number(values[i+1]); break;
		case "M":
		case "MM":
			month = Number(values[i+1]); break;
		case "D":
		case "DD":
			date = Number(values[i+1]); break;
		case "DDD":
			dayofyear = Number(values[i+1]); break;
		case "ww":
			week = Number(values[i+1]); break;
		case "d":
			day = Number(values[i+1]); break;
		}
	}

	// Leap years are divisible by 4, but not by 100, unless by 400
	var leapyear = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));

	// 31st of a month with 30 days
	if (date == 31 && (month == 4 || month == 6 || month == 9 || month == 11)) return false; 

	// February 30th or 31st
	if (date >= 30 && month == 2) return false; 

	// February 29th outside a leap year
	if (date == 29 && month == 2 && !leapyear) return false; 
	if (dayofyear == 366 && !leapyear)  return false;

	return true;
}
//取自dojo text校验
isText = function(/*String*/value, /*Object?*/flags){
// summary:
//	Checks if a string has non whitespace characters. 
//	Parameters allow you to constrain the length.
//
// value: A string
// flags: {length: Number, minlength: Number, maxlength: Number}
//    flags.length  If set, checks if there are exactly flags.length number of characters.
//    flags.minlength  If set, checks if there are at least flags.minlength number of characters.
//    flags.maxlength  If set, checks if there are at most flags.maxlength number of characters.

	flags = (typeof flags == "object") ? flags : {};

	// test for text
	if(/^\s*$/.test(value)){ return false; } // Boolean

	// length tests
	if(typeof flags.length == "number" && flags.length != value.length){ return false; } // Boolean
	if(typeof flags.minlength == "number" && flags.minlength > value.length){ return false; } // Boolean
	if(typeof flags.maxlength == "number" && flags.maxlength < value.length){ return false; } // Boolean
	return true; // Boolean
}






