/*
function validEmail2(emailStr) {
  var result = false;

  //var filter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

  //Check that multiple emails (string) are valid
  var filter  = /^[A-Z0-9\._%-]+@[A-Z0-9\.-]+\.[A-Z]{2,4}(?:[,;][A-Z0-9\._%-]+@[A-Z0-9\.-]+\.[A-Z]{2,4})*$/i;
	if (filter.test(emailStr)) {
	  result = true;
	}

	return result;
}
*/

function validEmail2(emailStr) {
  var result = false;

  // remove whitespaces from email address before the check
  emailStr = emailStr.replace(/(\s)/g,'');

  //Check that multiple emails (string) are valid
  var filter  = /^[A-Z0-9\._%-]+@[A-Z0-9\.-]+\.[A-Z]{2,4}(?:[,;][A-Z0-9\._%-]+@[A-Z0-9\.-]+\.[A-Z]{2,4})*$/i;
  if (filter.test(emailStr)) {
	  result = true;
  }

	return result;
}

function validRequired(formField,fieldLabel) {
  var result = true;

	if (formField.value == "") {
		alert('Please enter a value for the "' + fieldLabel +'" field.');
		formField.focus();
		formField.scrollIntoView(true);
		result = false;
	}

	return result;
}

function allDigits(str) {
	return inValidCharSet(str,"0123456789");
}

function onlyDigits(str, strict) {
  if (strict) {
	  return inValidCharSet(str,"0123456789");
  } else {
    return inValidCharSet(str,"0123456789- ");
  }
}

function onlyChars(str, strict) {
  if (strict) {
    return inValidCharSet(str,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz");
  } else {
    return inValidCharSet(str,"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz- ");
  }
}

function inValidCharSet(str,charset) {
	var result = true;

	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0) {
			result = false;
			break;
		}

	return result;
}

function validOnlyChars(formField,fieldLabel,required,strict) {
  var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result) {
 		if (!onlyChars(formField.value, strict)) {
 			alert('Only characters are allowed for the "' + fieldLabel +'" field.');
			formField.focus();
			formField.scrollIntoView(true);
			result = false;
		}
	}

	return result;
}

function validOnlyDigits(formField,fieldLabel,required,strict) {
  var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result) {
 		if (!onlyDigits(formField.value, strict)) {
 			alert('Only digits are allowed for the "' + fieldLabel +'" field.');
			formField.focus();
			formField.scrollIntoView(true);
			result = false;
		}
	}

	return result;
}

function validEmail(formField,fieldLabel,required) {
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

	if (result && !validEmail2(formField.value)) {
		alert("Please enter a complete email address in the form: yourname@yourdomain.com");
		formField.focus();
		formField.scrollIntoView(true);
		result = false;
	}

  return result;
}

function validNum(formField,fieldLabel,required) {
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result) {
 		if (!allDigits(formField.value)) {
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();
			formField.scrollIntoView(true);
			result = false;
		}
	}

	return result;
}

function validInt(formField,fieldLabel,required) {
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result) {
 		var num = parseInt(formField.value,10);
 		if (isNaN(num)) {
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();
			formField.scrollIntoView(true);
			result = false;
		}
	}

	return result;
}

function validDate(formField,fieldLabel,required) {
  // expects date in DD-MMM-YYYY format, e.g. 21-Jan-1975
	var result = true;

	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result) {
 		var elems = formField.value.split("-");

 		result = (elems.length == 3); // should be three components

 		if (result) {
 			var day = parseInt(elems[0],10);
			var month = elems[1];
 			var year = parseInt(elems[2],10);
			result = allDigits(elems[0]) && (day > 0) && (day < 32) && (elems[1].length == 3) && allDigits(elems[2]) && (elems[2].length == 4);
 		}

 		if (!result) {
 			alert('Please enter a date in the format DD-MMM-YYYY for the "' + fieldLabel +'" field.');
			formField.focus();
			formField.scrollIntoView(true);
		}
	}

	return result;
}

function matchConfirm(formFieldA, fieldLabelA, formFieldB, fieldLabelB, required) {
  var result = true;

  if (required && !validRequired(formFieldA,fieldLabelA))
		result = false;

	if (required && !validRequired(formFieldB,fieldLabelB))
		result = false;

	if (formFieldA.value!=formFieldB.value) {
	  alert('The value of the ' + fieldLabelB + ' field must match the value of the ' + fieldLabelA + ' field.');
		formFieldB.focus();
		formField.scrollIntoView(true);
	  result = false;
	}

	return result;
}