function IsNumericValueValid(control, size, isOptional)
{
	if (isOptional && control.value == "") return true;
	
	var PRECISION = 0, SCALE = 1;
	var sizeArray = size.split(",");
	var precision = NaN;
	var scale			= NaN;
	if (sizeArray.length > 0)
		precision = parseInt(sizeArray[PRECISION]);
	if (sizeArray.length > 1)
		scale			= parseInt(sizeArray[SCALE]);
	
	if (isNaN(precision))
		precision = 0;
	if (isNaN(scale))
		scale			= 0;
	
	var pattern = "(-)?\\d{1," + (precision - scale) + "}(\\.\\d{0," + scale + "})?";
	
	var isValid = IsMatch(pattern, control.value);
	if (!isValid)
	{
		var format = "";
		for (i=0; i<precision-scale; i++) format += "9";
		if (scale > 0) format += ".";
		for (i=0; i<scale; i++) format += "9";
		alert("Invalid value! Allowed format: " + format);
		control.focus();
	}
	return isValid;
}
function IsMatch(pattern, value)
{
	var regExp = new RegExp(pattern);
	var matches = regExp.exec(value);
	return (matches != null && matches[0] == value);
}
function IsSizeValid(control, maxLength){
	if (control.value.length > maxLength){
		alert("Entered data too long. Max length is: " + maxLength);
		return false;
	}
	return true;
}
function IsRangeValid(control, minRange, maxRange){
	var controlValue = parseFloat(control.value);
	if (isNaN(controlValue)){
		alert("Entered value is not numeric");
		control.focus();
		return false;
	}
	minRange = parseFloat(minRange);
	if (isNaN(minRange)){
		alert("Min Range is invalid");
		control.focus();
		return false;
	}
	maxRange = parseFloat(maxRange);
	if (isNaN(maxRange)){
		alert("Max Range is invalid");
		control.focus();
		return false;
	}
	if (controlValue < minRange || controlValue > maxRange){
		alert("Entered value is not within the allowed range: " + minRange + " - " + maxRange);
		control.focus();
		return false;
	}
	return true;
}

