function isEmail(fieldValue) 
{
   var newString = fieldValue.match(/\b(^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\..{2,2}))$)\b/gi);
   if (!newString) 
   	return false;
   else
   	return true;
}

function isEmpty(fieldValue)
{
	var regEx = /\S+/i;
	if(regEx.test(fieldValue))
		return false;
	else
		return true;
}

function isInteger(fieldValue)
{	var regEx=/^\d+$/;
	if (regEx.test(fieldValue))
		return true;
	else
		return false;
}

function isDecimal(fieldValue)
{
	return isFloat(fieldValue);
}

function isFloat(fieldValue)
{	
	var regEx=/(^\d+$)|(^\d+\.\d+$)|(^-\d+$)|(^-\d+\.\d+$)/;
	if (regEx.test(fieldValue))
		return true;
	else
		return false;
}

function chkDateFmt(fieldValue, aFormat)
{	var regEx=/^\d?\d\/\d?\d\/\d\d\d\d$/;
	if (regEx.test(fieldValue))
	{
		var dmy;
		var dd;
		var mm;
		var yy;
		
		dmy = fieldValue.split("/");
		if(dmy[0].charAt(0) == '0')
		{	dmy[0] = dmy[0].substring(1, 2);
		}

		if(dmy[1].charAt(0) == '0')
		{	dmy[1] = dmy[1].substring(1, 2);
		}
			
		if(parseInt(aFormat) == 1)
		{	// check for this format "MM/DD/YYYY"			
			
			dd = parseInt(dmy[1]);
			mm = parseInt(dmy[0])-1;
			yy = parseInt(dmy[2]);			
		}		
		else if(parseInt(aFormat) == 2)
		{	// check for this format "MM/DD/YYYY"
			dd = parseInt(dmy[0]);
			mm = parseInt(dmy[1])-1;			
			yy = parseInt(dmy[2]);				
		}

		var aDate = new Date(yy, mm, dd);
		if(aDate.getMonth() != mm)
		{	return false;
		}
		else if(yy < 1980 || yy > 2100)
		{	return false;
		}
		return true;
	}
	else
	{
		return false;		
	}
}

function isDate(fieldValue)
{	/* check for this format "YYYY/MM/DD"*/	

	var regEx=/^\d\d\d\d\/\d?\d\/\d?\d$/;
	if (regEx.test(fieldValue))
	{
		var dmy = fieldValue.split("/");
		if(dmy[1].charAt(0) == '0')
		{	dmy[1] = dmy[1].substring(1, 2);
		}

		if(dmy[2].charAt(0) == '0')
		{	dmy[2] = dmy[2].substring(1, 2);
		}
		
		var dd = parseInt(dmy[2]);
		var mm = parseInt(dmy[1])-1;
		var yy = parseInt(dmy[0]);
		
		var aDate = new Date(yy, mm, dd);		
		if(aDate.getMonth() != mm)
		{
			return false;
		}
		else if(yy < 1980 || yy > 2100)
		{	
			return false;
		}
		return true;
	}
	else
		return false;
}

function validateFieldNoMessage(fieldRef, criteria)		/*** USAGE NOT RECOMMENDED ***/
{	/* Requires: listUtil.js */
	/* This function assumes the criteria format "|CRITERIA_ONE||CRITERIA_TWO||CRITERIA_THREE|*/
	/*
		The checking will be "AND" based.
		Currently supported Criteria:
		DATE, NOT_EMPTY, INTEGER, FLOAT:9, MAX_LENGTH:123
	*/
	var tempArray;
	tempArray = listToArray(criteria);
	if(tempArray == null)		//No validation required.
		return true;
		
	for(var i=0; i<tempArray.length; i++)
	{	var tempIndex = tempArray[i].indexOf(":");
	
		if(tempIndex > 0)
		{	//Complex validation
			var tempCriteria = tempArray[i].substring(0, tempIndex);
			switch(tempCriteria)
			{
				case "MAX_LENGTH":
					var tempMaxLength = Number(tempArray[i].substring(tempIndex+1, tempArray[i].length));
					if(fieldRef.value.length > tempMaxLength)
						return false;
					break;
				
				case "FLOAT":					
					if(!isEmpty(fieldRef.value) && !isFloat(fieldRef.value))
						return false;
					else
					{	//check precision					
						var tempPrecision = tempArray[i].substring(tempIndex+1, tempArray[i].length);						
						var tempLength = fieldRef.value.length;
												
						var dotPos = fieldRef.value.indexOf(".");
						if(dotPos > 0) //dot found
						{	tempLength = dotPos;
						}
						if(Number(tempLength) > Number(tempPrecision))
							return false;
					}
					break;
					
				default:					
					alert("System error, validation type " + tempArray[i] + " not supported.\n Validation on this type is ignored." );
			}
		}
		else
		{	//Simple validation
			switch(tempArray[i])
			{
				case "DATE":
					if(!isEmpty(fieldRef.value) && !isDate(fieldRef.value))
						return false;
					break;
					
				case "NOT_EMPTY":
					if(isEmpty(fieldRef.value))
						return false;
					break;
				
				case "INTEGER":
					if(!isEmpty(fieldRef.value) && !isInteger(fieldRef.value))
						return false;
					break;
					
				case "FLOAT":
					if(!isEmpty(fieldRef.value) && !isFloat(fieldRef.value))
						return false;
					break;
				
				default:
					alert("System error, validation type " + tempArray[i] + " not supported.\n Validation on this type is ignored." );
			}
		}
	}
	return true;
}

function validateField(fieldRef, fieldDesc, criteria)
{	/* Requires: listUtil.js */
	/* This function assumes the criteria format "|CRITERIA_ONE||CRITERIA_TWO||CRITERIA_THREE|*/
	/*
		The checking will be "AND" based.
		Currently supported Criteria:
		DATE, NOT_EMPTY, INTEGER, FLOAT:9, MAX_LENGTH:123
	*/	
	var tempArray;
	tempArray = listToArray(criteria);
	
	if(tempArray == null)		//No validation required.
		return true;

	for(var i=0; i<tempArray.length; i++)
	{	var tempIndex = tempArray[i].indexOf(":");
	
		if(tempIndex > 0)
		{	//Complex validation
			var tempCriteria = tempArray[i].substring(0, tempIndex);
			switch(tempCriteria)
			{
				case "MAX_LENGTH":
					var tempMaxLength = Number(tempArray[i].substring(tempIndex+1, tempArray[i].length));
					if(fieldRef.value.length > tempMaxLength)
					{
						//alert("Field value too large, maximum length is " + tempMaxLength + "! " + fieldDesc);
						alert(fieldDesc +" 计び,程" + tempMaxLength + "! ");
						fieldRef.focus();
						return false;
					}					
					break;
				
				case "FLOAT":					
					if(!isEmpty(fieldRef.value) && !isFloat(fieldRef.value))
					{	alert(fieldDesc + " 计礚! ");
						fieldRef.focus();
						return false;
					}
					else
					{	//check precision					
						var tempPrecision = tempArray[i].substring(tempIndex+1, tempArray[i].length);						
						var tempLength = fieldRef.value.length;
												
						var dotPos = fieldRef.value.indexOf(".");
						if(dotPos > 0) //dot found
						{	tempLength = dotPos;
						}
						if(Number(tempLength) > Number(tempPrecision))
						{	alert("Field value too large, maximum precision is " + tempPrecision + "! " + fieldDesc);
							fieldRef.focus();
							return false;
						}
					}
					break;
					
				default:					
					alert("System error, validation type " + tempArray[i] + " not supported.\n Validation on this type is ignored." );
			}
		}
		else
		{	//Simple validation
			switch(tempArray[i])
			{
				case "DATE":
					if(!isEmpty(fieldRef.value) && !isDate(fieldRef.value))
					{	
						alert(fieldDesc + " 礚! ");
						fieldRef.focus();
						return false;
					}
					break;
					
				case "NOT_EMPTY":
					if(isEmpty(fieldRef.value))
					{	alert(fieldDesc + " ゲ斗璶Τ戈! ");
						fieldRef.focus();
						return false;
					}			
					break;
				
				case "INTEGER":
					if(!isEmpty(fieldRef.value) && !isInteger(fieldRef.value))
					{	alert(fieldDesc + " 俱计礚! ");
						fieldRef.focus();
						return false;
					}			
					break;
					
				case "FLOAT":
					if(!isEmpty(fieldRef.value) && !isFloat(fieldRef.value))
					{	alert(fieldDesc + " 计礚! ");
						fieldRef.focus();
						return false;
					}
					break;
				
				default:
					alert("System error, validation type " + tempArray[i] + " not supported.\n Validation on this type is ignored." );
			}
		}
	}
	return true;
}