function isEmailAddr(email)
{
  var result = false;
  var theStr = new String(email);
  var index = theStr.indexOf("@");
  if (index > 0)
  {
    var pindex = theStr.indexOf(".",index);
    if ((pindex > index+1) && (theStr.length > pindex+1))
	result = true;
  }
  return result;
}

function validRequired(formField,fieldLabel)
{
	var result = true;
	var formElementID = document.getElementById(formField);
	
	if (formElementID.value == "")
	{
		alert('Please enter a value for "' + fieldLabel +'".');
		formElementID.focus();
		result = false;
		formElementID.className='FormError';
	}
	else {formElementID.className='';}
	return result;
}

function inValidCharSet(str,charset)
{
	var result = true;
	// Note: doesn't use regular expressions to avoid early Mac browser bugs	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}	
	return result;
}

function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

function validEmail(formField,fieldLabel,required)
{
	var result = true;
	var formElementID = document.getElementById(formField);
	
	if (required && !validRequired(formField,fieldLabel))
		result = false;

	if (result && ((formElementID.value.length < 3) || !isEmailAddr(formElementID.value)) )
	{
		alert("Please enter an e-mail address in the form: yourname@yourdomain.com");
		formElementID.focus();
		result = false;
		formElementID.className='FormError';
	}
	else {formElementID.className='';}
  return result;

}

function validNumCharacters(formfield,fieldLabel,minChar,maxChar) 
{
	var result = true;

	if (formfield.value.length < minChar) {
	alert('Help! Please re-enter a value for "' + fieldLabel +'". It must have "' + minChar +'" characters or more.');
	result = false;
	formField.className='FormError';
	}
	
	if (formfield.value.length > maxChar) {
	alert('Help! Please re-enter a value for "' + fieldLabel +'". It must have "' + maxChar +'" characters or less.');
	result = false;
	formField.className='FormError';
	}

return result;
}

function validNum(formField,fieldLabel,required)
{
	var result = true;
	
	if (required && !validRequired(formField,fieldLabel))
		result = false;
		formField.className='FormError';
		
   var ValidChars = "0123456789.";   
   var Char;
 
   for (i = 0; i < formField.value.length && result == true; i++) 
      { 
      Char = formField.value.charAt(i); 
      if (ValidChars.indexOf(Char) == -1) 
         {
		 alert('Please enter a number for the "' + fieldLabel +'" field.');
		 formField.focus();		
         result = false;
		 formField.className='FormError';
         }
      }
   return result;
}

function validNumRange(formField,fieldLabel,minValue,maxValue)
{
	var result = true;
	
	if (formField.value < minValue) {
	alert('The value for "' + fieldLabel +'" must be greater then or equal to ' + minValue +'.');
	result = false;
	formField.className='FormError';
	}
	
	if (formField.value > maxValue) {
	alert('The value for "' + fieldLabel +'" must be less then or equal to ' + maxValue +'.');
	result = false;
	formField.className='FormError';
	}

   return result;
}

function validInt(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
		formField.className='FormError';
  
 	if (result)
 	{
		var digits = "0123456789"+Intl_DecimalChar;
		var origstr = formField.value;
		var crunchedstr = "";
		var i;
		
		for (i=0;i<origstr.length;i++) 
			if (digits.indexOf(origstr.charAt(i))>=0)
				crunchedstr += origstr.charAt(i);
 		var num = parseInt(crunchedstr,10);
 		if (isNaN(num))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
			formField.className='FormError';
		} else {
			if (num != formField.value) {
				formField.value = num;
			}
		}
	} 	
	return result;
}

function round2(num)
{
//	alert("round2("+num+")");
	if (isNaN(num))
		return ("0.00");
	var newnum = Math.round(num*100)/100;
	var s = ""+newnum; // converts to string
	if (s.indexOf(Intl_DecimalChar) < 0) {
		s = s+Intl_DecimalChar+"00";
	} else {
		if (s.length - s.indexOf(Intl_DecimalChar) < 3) {
			s=s+"0";
		}
	}
//	alert("round2("+num+") = "+s+" len:"+s.length+" s.Dot:"+s.indexOf(Intl_DecimalChar));
	return(s);
}

function extractFloat(str)
{
//	alert("extractFloat("+str+")");
	var digits = "0123456789"+Intl_DecimalChar;
	var crunchedstr = "";
	var i;
	
	for (i=0;i<str.length;i++) 
		if (digits.indexOf(str.charAt(i))>=0)
			crunchedstr += str.charAt(i);
//	alert("extractFloat("+str+") = :"+crunchedstr+":");
	if (crunchedstr.len < 1)
		return(0.0);
	return(parseFloat(crunchedstr));
}

function validFloat(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
		formField.className='FormError';
 	if (result) {
		var digits = "0123456789"+Intl_DecimalChar;
		var origstr = formField.value;
		var crunchedstr = "";
		var i;
		
		for (i=0;i<origstr.length;i++) 
			if (digits.indexOf(origstr.charAt(i))>=0)
				crunchedstr += origstr.charAt(i);
 		var num = parseFloat(crunchedstr);
 		if (isNaN(num)) {
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
			formField.className='FormError';
		} else 
			if (num != formField.value) 
				formField.value = num;
	} 	
	return result;
}

function validDate(formField,fieldLabel,required)
{
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;
		formField.className='FormError';
  
 	if (result)
 	{
 		var elems = formField.value.split("/");
  		result = (elems.length == 3); // should be three components
 		
 		if (result)
 		{
			var month, day, year;
 			month = parseInt(parseFloat(elems[0]));
  			day = parseInt(parseFloat(elems[1]));
 			year = parseInt(parseFloat(elems[2]));
			
			result = allDigits(month) && (month > 0) && (month < 13);
					 allDigits(day) && (day > 0) && (day < 32);
					 allDigits(year) && ((year.length == 2)||(year.length == 4));					 
 		}
 		
  		if (!result)
 		{
	 		alert('Please enter a date in the format MM/DD/YYYY for "' + fieldLabel +'".');
 			formField.focus();
			result = false;	
			formField.className='FormError';
		}
	} 	
	return result;
}

function confirmMatch(formField1, formField2, fieldLabel1, fieldLabel2)
{
	var result = true;
	
	if (formField1.value != formField2.value)
	{
		alert('Your entries for "' + fieldLabel1 +'" and "' + fieldLabel2 +'" must match.');
		formField1.value = "";
		formField2.value = "";
		formField1.focus();
		result = false;
		formField1.className='FormError';
	}	
	return result;
}

function MM_openBrWindow(theURL,winName,features) { //v2.0
  window.open(theURL,winName,features);
  if (MM_openBrWindow.opener == null) MM_openBrWindow.opener = self;
}
