// FORMLIB.JS ~ Library of standard functions to validate input fields in HTML forms 
// Copyright 2000-2002, Network for Grateful Living, www.gratefulness.org

function _FL_alert_focus(obj, message) {
	alert(message);
	obj.focus();
	obj.select();
	return false;
}
// Checks for value in a TEXT or PASSWORD input field objects.
function _FL_hasValue(obj, msg) {
	if (obj.value.length == 0) return _FL_alert_focus(obj, msg);
  	return true;
}

// Is an option selected from a pulldown? obj: select object
// non-select option is blank: <option value="" selected>-- Please Select One --
function _FL_isSelected(obj, msg) {
	for (i=0; i < obj.length; i++) {
		if (obj.options[i].selected & obj.options[i].value.length != 0) return true;
	}
	alert(msg);	return false;
}

// Is box checked in a CHECKBOX or is a button selected in RADIO input field
function _FL_isChecked(obj, msg) {
	for (i=0; i < obj.length; i++){
		if (obj[i].checked) return true;
	}
	alert(msg); return false;
}

// Textarea limit (use onKeyDown and onKeyUp events to call)
// Usage  onKeyDown="_FL_limitText(this, 200)" onKeyUp="_FL_limitText(this, 200)"
function _FL_limitText(field, maxChars) {
   if (field.value.length >= maxChars) 
   		field.value = field.value.substring(0, maxChars);
}

// Check is a input is an email. Derrived by DU from 
// NOTE: need to trim string before inserting
// a public script at http://javascript.internet.com/forms/check-email.html
// This script and many more are available free online at -->
// The JavaScript Source!! http://javascript.internet.com -->
function _FL_isEmail (obj) {
var emailStr=trim(obj.value); // see trim function below
var emailPat=/^(.+)@(.+)$/
var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
var validChars="\[^\\s" + specialChars + "\]"
var quotedUser="(\"[^\"]*\")"
var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
var atom=validChars + '+'
var word="(" + atom + "|" + quotedUser + ")"
var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")
var matchArray=emailStr.match(emailPat)
if (matchArray==null) {
	return _FL_alert_focus(obj, "Email address \"" + emailStr + "\" doesn't seem to be valid.\r Please check @ and .'s and then try again.");
}
var user=matchArray[1]
var domain=matchArray[2]
if (user.match(userPat)==null) {
	return _FL_alert_focus(obj, "The username in \"" + emailStr + "\" doesn't seem to be valid.\r Please check and try again.");
}
var IPArray=domain.match(ipDomainPat)
if (IPArray!=null) {
	  for (var i=1;i<=4;i++) {
	    if (IPArray[i]>255) {
	        alert("Destination IP address in \"" + emailStr + "\" is invalid!")
		return false
	    }
    }
    return true
}
var domainArray=domain.match(domainPat)
if (domainArray==null) {
   return _FL_alert_focus(obj, "The domain name in \"" + emailStr + "\" doesn't seem to be valid.\r Please check and try again.");
}
var atomPat=new RegExp(atom,"g")
var domArr=domain.match(atomPat)
var len=domArr.length
if (domArr[domArr.length-1].length<2 || 
    domArr[domArr.length-1].length>4) {
   	return _FL_alert_focus(obj, "The address \"" + emailStr + "\" doesn't seem to be valid. An email address must end in a three-letter domain, or two letter country.\r Please check and try again.")
   return false
}
if (len<2) {
   return _FL_alert_focus(obj, "The address \"" + emailStr + "\" doesn't seem to be valid; it's missing a hostname!\r Please check and try again.")
}
return true;
}
//  End email validation -->
//===================================
function trim(str) { // Trims left and right spaces
//===================================
	var start_index=0;
	var end_index= str.length - 1;
	if (str == '') return '';
	while (str.charAt(start_index) == ' ') 
			start_index++;
	while (str.charAt(end_index) == ' ') 
			end_index= end_index -1;
	if (start_index >= end_index) return '' // all spaces
	return str.substring(start_index,end_index + 1);
}