/**********************************************************************************************************************
Function:		replace
Purpose:		Replaces all occurances of one substring with another substring in a string.
Parameters:		string		(string)		The string which is having its text replaced
				text		(string)		The text to search for, which is being replaced
				by			(string)		The string that is replacing the search text
**********************************************************************************************************************/
function replace(string, text, by) {
	// Replaces all occurances of text with by in string
    
	var strLength = string.length;
	var txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) {
		return string;
	}
    
	var i = string.indexOf(text);
	if ((!i) && (text != string.substring(0,txtLength))) {
		return string;
	}
    if (i == -1) {
		return string;
	}
    
	var newstr = string.substring(0,i) + by;
    if (i+txtLength < strLength) {
        newstr += replace(string.substring(i+txtLength,strLength),text,by);
	}

    return newstr;
}


/**********************************************************************************************************************
Function:		getObj
Purpose:		Assuming a version 5 browser or higher, will return a reference to an object of the specified name
Parameters:		targetName	(string)		Name of the target object
**********************************************************************************************************************/
function getObj(targetName)
{
	var target = null;
	if (document.getElementById) { // NS6+
		target = document.getElementById(targetName);
	} else if (document.all) { // IE4+
		target = document.all[targetName];
	}
	
	return target;
}


function popUp(URL) {
	var args = popUp.arguments;
	var wideness = "810";
	var highness = "700";
	var leftness = "188";
	var topness = "252";
	if (args[1]) {
		wideness = args[1];
	}
	if (args[2]) {
		highness = args[2];
	}
	if (args[3]) {
		leftness = args[3];
	}
	if (args[4]) {
		topness = args[4];
	}
	day = new Date();
	id = day.getTime();
	eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=1,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=" + wideness + ",height=" + highness + ",left=" + leftness + ",top=" + topness + "');"); 
} 




function emailCheck (emailStr)
{

	/* The following pattern is used to check if the entered e-mail address
	   fits the user@domain format.  It also is used to separate the username
	   from the domain. */
	var emailPat = /^(.+)@(.+)$/
	/* The following string represents the pattern for matching all special
	   characters.  We don't want to allow special characters in the address. 
	   These characters include ( ) < > @ , ; : \ " . [ ]    */
	var specialChars = "\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	/* The following string represents the range of characters allowed in a 
	   username or domainname.  It really states which chars aren't allowed. */
	var validChars = "\[^\\s" + specialChars + "\]"
	/* The following pattern applies if the "user" is a quoted string (in
	   which case, there are no rules about which characters are allowed
	   and which aren't; anything goes).  E.g. "jiminy cricket"@disney.com
	   is a legal e-mail address. */
	var quotedUser = "(\"[^\"]*\")"
	/* The following pattern applies for domains that are IP addresses,
	   rather than symbolic names.  E.g. joe@[123.124.233.4] is a legal
	   e-mail address. NOTE: The square brackets are required. */
	var ipDomainPat = /^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	/* The following string represents an atom (basically a series of
	   non-special characters.) */
	var atom = validChars + '+'
	/* The following string represents one word in the typical username.
	   For example, in john.doe@somewhere.com, john and doe are words.
	   Basically, a word is either an atom or quoted string. */
	var word = "(" + atom + "|" + quotedUser + ")"
	// The following pattern describes the structure of the user
	var userPat = new RegExp("^" + word + "(\\." + word + ")*$")
	/* The following pattern describes the structure of a normal symbolic
	   domain, as opposed to ipDomainPat, shown above. */
	var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$")


	/*
	Finally, let's start trying to figure out if the supplied address is
	valid.
	*/
	
	/*
	Begin with the coarse pattern to simply break up user@domain into
	different pieces that are easy to analyze.
	*/
	var matchArray = emailStr.match(emailPat)
	if (matchArray == null) {
	  /* Too many/few @'s or something; basically, this address doesn't
	     even fit the general mould of a valid e-mail address. */
		//alert("Email address seems incorrect (check @ and .'s)")
		//return false
		return("* Email address seems incorrect (check @ and .'s)")
	}
	var user = matchArray[1]
	var domain = matchArray[2]
	
	// See if "user" is valid 
	if (user.match(userPat) == null) {
	    // user is not valid
	    //alert("The username doesn't seem to be valid.")
	    //return false
		return("* The username doesn't seem to be valid.")			
	}

	/* if the e-mail address is at an IP address (as opposed to a symbolic
	   host name) make sure the IP address is valid. */
	var IPArray = domain.match(ipDomainPat)
	if (IPArray != null) {
	    // this is an IP address
		  for (var i=1; i<=4; i++) {
		    if (IPArray[i]>255) {
		        //alert("Destination IP address is invalid!")
				//return false
				return("* Destination IP address is invalid!")
		    }
	    }
	    return('');
	}
	
	// Domain is symbolic name
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		//alert("The domain name doesn't seem to be valid.")
	    //return false
		return("* Your e-mail address is not complete, please verify and re-enter.")
	}
	
	/* domain name seems valid, but now make sure that it ends in a
	   three-letter word (like com, edu, gov) or a two-letter word,
	   representing country (uk, nl), and that there's a hostname preceding 
	   the domain or country. */
	
	/* Now we need to break up the domain to get a count of how many atoms
	   it consists of. */
	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) {
	   // the address must end in a two letter or three letter word.
	   //alert("The address must end in a three-letter domain, or two letter country.")
	   //return false
	   return("* Email address must end in a three-letter, four-letter domain, or two letter country.")
	}
	
	// Make sure there's a host name preceding the domain.
	if (len<2) {
	   //var errStr = "This address is missing a hostname!"
	   //alert(errStr)
	   //return false
	   return("* Email address is missing a hostname!")
	}
	
	// If we've gotten this far, everything's valid!
	//return true;
	return('');
}

