/*******************************************************************/
/***                                                             ***/
/***   Tokenizer.js - JavaScript String Tokenizer Function       ***/
/***                                                             ***/
/***   Version   : 0.2                                           ***/
/***   Date      : 01.05.2005                                    ***/
/***   Copyright : 2005 Adrian Zentner                           ***/
/***   Website   : http://www.adrian.zentner.name/               ***/
/***                                                             ***/
/***   This library is free software. It can be freely used as   ***/
/***   long as this this copyright notice is not removed.        ***/
/***                                                             ***/
/*******************************************************************/

String.prototype.tokenize = tokenize;

function tokenize()
  {
     var input             = "";
     var separator         = " ";
     var trim              = "";
     var ignoreEmptyTokens = true;

     try {
       String(this.toLowerCase());
     }
     catch(e) {
       window.alert("Tokenizer Usage: string myTokens[] = myString.tokenize(string separator, string trim, boolean ignoreEmptyTokens);");
       return;
     }

     if(typeof(this) != "undefined")
       {
          input = String(this);
       }

     if(typeof(tokenize.arguments[0]) != "undefined")
       {
          separator = String(tokenize.arguments[0]);
       }

     if(typeof(tokenize.arguments[1]) != "undefined")
       {
          trim = String(tokenize.arguments[1]);
       }

     if(typeof(tokenize.arguments[2]) != "undefined")
       {
          if(!tokenize.arguments[2])
            ignoreEmptyTokens = false;
       }

     var array = input.split(separator);

     if(trim)
       for(var i=0; i<array.length; i++)
         {
           while(array[i].slice(0, trim.length) == trim)
             array[i] = array[i].slice(trim.length);
           while(array[i].slice(array[i].length-trim.length) == trim)
             array[i] = array[i].slice(0, array[i].length-trim.length);
         }

     var token = new Array();
     if(ignoreEmptyTokens)
       {
          for(var i=0; i<array.length; i++)
            if(array[i] != "")
              token.push(array[i]);
       }
     else
       {
          token = array;
       }

     return token;
  }
  
  function ValidateEmailAddress(field)
  {
      //var emailStr = document.forms['rdonate'].elements['email'].value;
      var emailStr = field.value;
  
  	// Validates the email address
  	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 false;
  	}
  
  	var user=matchArray[1]
  	var domain=matchArray[2]
  
  	// See if "user" is valid
  	if (user.match(userPat)==null)
  	{
  		return false;
  	}
  
  	// if the e-mail address is at an IP address
  	var IPArray=domain.match(ipDomainPat)
  	if (IPArray!=null)
  	{
  		for (var i=1;i<=4;i++)
  		{
  			if (IPArray[i]>255)
  			{
  				return false;
  			}
  		}
  		return true
  	}
  
  	// Domain is symbolic name
  	var domainArray=domain.match(domainPat)
  	if (domainArray==null)
  	{
  		return false;
  	}
  
  	// Make sure that it ends in a three-letter word or a two-letter word, and that hostname preceding domain or country.
  	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)
  	{
  		return false;
  	}
  
  	// Make sure there's a host name preceding the domain.
  	if (len<2)
  	{
  		return false;
  	}
  
  	// If we've gotten this far, everything's valid!
  	return true;
}

