/* FUNCTION: Match( field, value, equals)
 *  PURPOSE: Returns true if field's value matches/equals the 
 *           value argument otherwise returns false. Setting the
 *           the equal argument to true indicates you wish the
 *           the value argument to equal the field's value. 
 *
 */
  function Match( field, value, equals ) {
  var pattern;
  var r;
  var checked = 0;
  var blank = new RegExp("^[ ]*$");


  if ( equals ) {
     pattern = new RegExp("^"+value+"$");
  } else {
     pattern = new RegExp(value);
  } // if else

  /* Text Fields/Areas/Hidden */
  /* 
	NOTE: DOES NOT SUPPORT MULTIPLE HIDDEN FIELDS 
	WITH THE SAME NAME NOR DOES IT SUPPORT FIELDS
	WITH DIFFERENT TYPES AND USING THE SAME NAME.
	THIS IS A FEATURE TO BE IMPLEMENTED IN THE
	NEXT RELEASE OF THIS LIBRARY!
  */
  
  if ( (field.type == "text") 
		|| 
       (field.type == "textarea") 
		|| 
       (field.type == "hidden") 
     ) 
  {
     return field.value.match(pattern);
  } // if

  /* Select Fields */
  if ( (field.type == "select-one") || ( field.type == "select" ) ) {
     if (field.selectedIndex == -1) {
        return false;
     } // if
     return field.options[field.selectedIndex].value.match(pattern);
  } // if

  /* Radio Button Groups */
  if ( field[0].type == "radio" ) {
     for (r=0; r<field.length; r++) {
        if ( field[r].checked ) {
           checked++;
        } // if 
        if ( (field[r].checked) && (field[r].value.match(pattern)) ) {
           return true;
        } // if
     } // for 
     return false;
  } // if


  } // fn

/*
 * FUNCTION: Equal( field, value )
 *  PURPOSE: Returns true if field's value is equals 
 *           the value argument otherwise returns false.
 *           This function is a wrapper to a Match function
 *           call with the equal argument specified. 
 *
 */
  function Equal( field, value ) {
  return Match(field,value,true);
  } // fn

/*returns true if the value is a integer
// function Number( field ) {
//  return Match(field,'[0-9]+',true);
//  } // fn

/*
 * FUNCTION: Currency( field )
 *  PURPOSE: Returns true if field's value is a currency value 
 *           the value argument otherwise returns false.
 *           This function is a wrapper to a Match function
 *           call with the equal argument specified.
 *
 */
  function Currency( field ) {
  return Match(field,'[$]*([0-9]{1,3}[,])*[0-9]{0,3}\.[0-9]{2}',true);
  } // fn

/*
 * FUNCTION: SSN( field )
 *  PURPOSE: Returns true if field's value is a currency value
 *           the value argument otherwise returns false.
 *           This function is a wrapper to a Match function
 *           call with the equal argument specified.
 *
 */
  function SSN( field ) {
  return Match(field,'[0-9]{3}-[0-9]{2}-[0-9]{4}',true);
  } // fn

/* Phone removed
/* EMAIL removed


/*
 * FUNCTION: Blank( field )
 *  PURPOSE: Returns true if field's value is blank or 
 *           contains spaces otherwise returns false.
 *           This function is a wrapper to a Match function
 *           call with the value argument specified.
 *
 */
  function Blank( field ) {
  var r;

  if ( typeof(field.type) == "undefined" ) { // radio button group
     for (r=0; r<field.length; r++) {
        if (field[r].checked) {
           return false;
        } // if
     } // for
     return true;
  } else {
     return Match(field,"[ ]*",true);
  } // if else

  } // fn

//ADDED BY NATHAN ON 15/01/2002
//To check a unformatted phone number is valid or not

function CheckPhoneNumber(s)
{
    var i;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (IsLetter(c)) return false;
    }
    return true;
}
function Number(s)
{
    var i;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (!IsDigit(c)) return false;
    }
    return true;
}


function IsDigit(c)
{   return ((c >= "0") && (c <= "9"))
}
function IsLetter(c)
{   return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}

/* Email Validation Function added by Nathan on 11/12/2001*/
function CheckEmailAddress (emailStr) {
	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)
	{
		alert("Email address seems incorrect (check @ and .'s)")
		return false
	}

	var user=matchArray[1]
	var domain=matchArray[2]

	if (user.match(userPat)==null)
	{
    	alert("The username doesn't seem to be valid in Email")
		return false
	}

	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null)
	{
		for (var i=1;i<=4;i++)
		{
		    if (IPArray[i]>255)
			{
        		alert("Destination IP address in Email is invalid!")
				return false
	    	}
    	}
    return true
	}

	var domainArray=domain.match(domainPat)
	if (domainArray==null)
	{
		alert("The domain name doesn't seem to be valid.")
		return false
	}

	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>3) 
	{
		alert("The Email address must end in a three-letter domain, or two letter country.")
		return false
	}

	if (len<2)
	{
		var errStr="This Email address is missing a hostname!"
		alert(errStr)
		return false
	}

	return true;
}
/*End of email validation function */
