var myRegExp001 = / /gi;

function textareaLimit (el, textLimit, counterField) 
{
	if (el.value.length > textLimit) // if too long...trim it!
	{
		el.value = el.value.substring(0, textLimit);
	}
	else if (counterField != null) // if defined, update character counter
	{
		counterField.value = el.value.length;
	}
}
function dateInRange(targetDate,rangeFrom,rangeTo){
	var target_date = new Date(FormatDate(targetDate));
	var isOK = true;
	var from_date = NaN;
	var to_date = NaN;
	
	if(rangeFrom!=null){
		var fromGT = rangeFrom.charAt(0)=='>';
		if(fromGT) rangeFrom = rangeFrom.substr(1,100);
		from_date = new Date(rangeFrom);
	}
	if(!isNaN(from_date)){
		if(fromGT) isOK = target_date > from_date
		else isOK = target_date >= from_date;
	}
	
	if(rangeTo!=null){
		var toGT = rangeTo.charAt(0)=='<';
		if(toGT) rangeTo = rangeTo.substr(1,100);
		to_date = new Date(rangeTo);
	}
	if(!isNaN(to_date)){
		if(toGT) isOK = isOK && target_date < to_date
		else isOK = isOK && target_date <= to_date;
	}
	
	return isOK;
}

function numInRange(targetNum,rangeFrom,rangeTo){
	var target_num = new Number(targetNum.replace(/[\$\%\,]/g,''));
	var isOK = true;
	var from_num = NaN;
	var to_num = NaN;
	
	if(rangeFrom!=null){
		var fromGT = rangeFrom.charAt(0)=='>';
		if(fromGT) rangeFrom = rangeFrom.substr(1,100);
		from_num = new Number(rangeFrom.replace(/[\$\%\,]/g,''));
	}
	if(!isNaN(from_num)){
		if(fromGT) isOK = target_num > from_num
		else isOK = target_num >= from_num;
	}
	
	if(rangeTo!=null){
		var toGT = rangeTo.charAt(0)=='<';
		if(toGT) rangeTo = rangeTo.substr(1,100);
		to_num = new Number(rangeTo.replace(/[\$\%\,]/g,''));
	}
	if(!isNaN(to_num)){
		if(toGT) isOK = isOK && target_num < to_num
		else isOK = isOK && target_num <= to_num;
	}
	
 	
	return isOK;
}

function getDisplayName(el){
	var displayName = el.name;
	if(el.getAttribute("displayname")!=null) displayName = el.getAttribute("displayname");
	return displayName;
}

function getStatus(el, form){
	var status = "";
	if(el.getAttribute("statusfieldname")!=null) {
    status = eval("form." + el.getAttribute("statusfieldname") + ".value");
  }
	return status;
}

function getRangeMessage(el){
	var rangeFrom = el.getAttribute("rangefrom");
	var rangeTo = el.getAttribute("rangeto");
	var doFrom = rangeFrom != null;
	var doTo = rangeTo != null;
	
	//check for < or >
	if(doFrom){
		var fromGT = rangeFrom.charAt(0)=='>';
		if(fromGT) rangeFrom = rangeFrom.substr(1,100);
	}
	if(doTo){
		var toGT = rangeTo.charAt(0)=='<';
		if(toGT) rangeTo = rangeTo.substr(1,100);
	}
	
	strMessage = '';
	if(doFrom && doTo){
		strMessage = 'Greater than ';
		if(!fromGT) strMessage += 'or equal to ';
		strMessage += rangeFrom + ' and less than ';
		if(!toGT) strMessage += 'or equal to ';
		strMessage += rangeTo;
		}
	else if(doFrom && !doTo){
		strMessage += 'Greater than ';
		if(!fromGT) strMessage += 'or equal to ';
		strMessage += rangeFrom;
		}
	else if(!doFrom && doTo){
		strMessage += 'Less than ';
		if(!toGT) strMessage += 'or equal to ';
		strMessage += rangeTo;
	}
	
	return strMessage;
}

function gnFormValidate(form){
	var strMessage = '';
	
	//loop over all form elements
	for(var i=0;i<form.elements.length;i++){
		el = form.elements[i];
		var isOK = false;
		var doFrom = false;
		var doTo = false;
		var datatype = null;
    
		if((getStatus(el, form) != "New") && (getStatus(el, form) != "Delete"))
		{
			if(el.type=='text' || el.type=='password' || el.type=='textarea' || el.type=='select-multiple' || el.type=='file'){
				//check for required value
				var requiredFound = false;
				
				if(el.getAttribute('required')!=null)
				{
						requiredFound = true;
				}
				
				if(el.type=='select-multiple')
				{
					if(!requiredFound)
					{
						isOK = true;
					}
					else
					{
						for(var j=0;j<el.options.length;j++)
						{
							if(el.options[j].selected)
							{
								isOK = true;
								break;
							}
						}
					}
				}
				else
				{
					isOK = !requiredFound || el.value.replace(myRegExp001,'')!='';
				}
				
				if(!isOK){
					alert('Required value missing for ' + getDisplayName(el) + '.');
					el.focus();
					return false;
				}
				
				// Check for text length in textarea controls
				if((el.type=='textarea') && (el.getAttribute('textlimit')!=null))
				{
					textLimit = el.getAttribute('textlimit');
					isOK = (el.value.length <= textLimit);
				}
				
				if(!isOK){
					alert(getDisplayName(el) + ' length greater than ' + textLimit + ' characters. Input has been truncated at ' + textLimit + ' characters.');
					el.value = el.value.substring(0, textLimit);
					el.focus();
					return false;
				}
				
				//check datatype
				datatype = el.getAttribute("datatype");
				if(el.type=='text' && datatype!=null && el.value!=''){
					switch(datatype.toLowerCase()){
						case 'numeric':
							tempNumber = new Number(el.value.replace(/[\$\%\,]/g,''));
							isOK = !isNaN(tempNumber);
							if(!isOK){
								alert('Value entered for ' + getDisplayName(el) + ' is not a number.');
								el.focus();
								el.select();
								return false;
							}
							
							if(el.getAttribute("rangefrom") != null || el.getAttribute("rangeto") != null){
								isOK = numInRange(el.value,el.getAttribute("rangefrom"),el.getAttribute("rangeto"));
								if(!isOK){
									strMessage = 'Value entered for ' + getDisplayName(el) + ' is not within specified range.\r(';
									strMessage += getRangeMessage(el);
									strMessage += ')';
									if (el.getAttribute("message") != null)
									{
										strMessage = el.getAttribute("message");
									}
									if (el.getAttribute("warningonly") != null)
									{
										if (confirm('WARNING: ' + strMessage + '\r\rContinue anyway?'))
										{
											break;
										}
									}
									else
									{
										alert(strMessage);
									}
									el.focus();
									el.select();
									return false;
								}
							}
							break;
						case 'date':
							var tempDate = new Date(el.value);
							isOK = !isNaN(tempDate);
							if (isOK)
							{
								el.value = FormatDate(tempDate);
							}
							else // if(!isOK)
							{
								strMessage = 'Value entered for ' + getDisplayName(el) + ' is not a valid date.';
								strMessage += '\rPlease enter a date in the format mm/dd/yyyy.';
								alert(strMessage);
								el.focus();
								el.select();
								return false;
							}
	
							if(el.getAttribute("rangefrom") || el.getAttribute("rangeto")){
								isOK = dateInRange(el.value,el.getAttribute("rangefrom"),el.getAttribute("rangeto"));
								if(!isOK){
									strMessage = 'Value entered for ' + getDisplayName(el) + ', ' + FormatDate(el.value) + ', is not within specified range.\r(';
									strMessage += getRangeMessage(el);
									strMessage += ')';
									if (el.getAttribute("warningonly") != null)
									{
										if (confirm('WARNING: ' + strMessage + '\r\rContinue anyway?'))
										{
											break;
										}
									}
									else
									{
										alert(strMessage);
									}
									el.focus();
									el.select();
									return false;
								}
							}
							break;
					}
				}
				
				//custom validation
				if(isOK){
					if(el.getAttribute("onvalidate")!=null){
						isOK = eval(el.getAttribute("onvalidate") + '(form,el)');
						if(!isOK){
							el.focus();
							el.select();
							return false;
						}
					}
				}
			}  //if(el.type ...
			else if ((el.type=='select-one') && (el.getAttribute('notDefault')!=null) && (el.options[el.selectedIndex].value == '?'))
			{
				isOK = false;
				alert('You must select ' + getDisplayName(el) + '.');
				el.focus();
				return false;
			}
		} //if((getStatus(el) != "New") && (getStatus(el) != "Delete"))
	}  //for(var i=0 ...
	return true;
} //function validate

function SetDeleteStatus(frm) {
  frm.fuseAction.value = frm.deleteAction.value;
  frm.submit();
}
