var whitespace = " \t\n\r";

function fnVoid(){
  
}

function fnExtract(sString, sSpliter, nElement){
var sArray = null;
  sArray = sString.split(sSpliter);
  return sArray[nElement];
}

function fnIsEmpty(sString){
  return ((sString == null) || (sString.length == 0))
}

function fnIsWhitespace (sString){
var nLoop, sCharacter;
  if (fnIsEmpty(sString)) return true;
  for (nLoop = 0; nLoop < sString.length; nLoop++) {   
    sCharacter = sString.charAt(nLoop);
    if (whitespace.indexOf(sCharacter) == -1) return false;
  }
  return true;
}

function fnIsLetterName (sCharacter) {
  if ( ((sCharacter >= "a") && (sCharacter <= "z")) || ((sCharacter >= "A") && (sCharacter <= "Z")) || (sCharacter == "-") || (sCharacter == " ") || (sCharacter == "'") || (sCharacter == ".") || (sCharacter == "`")) return true;
  return false;
}

function fnIsAlphabeticName (sString) {
var nLoop, sCharacter;
  for (nLoop = 0; nLoop < sString.length; nLoop++) {   
    sCharacter = sString.charAt(nLoop);
    if (!fnIsLetterName (sCharacter)) return false;
  }
  return true;
}

function fnIsNumeric (sString) {
var nLoop, sCharacter;
  for (nLoop = 0; nLoop < sString.length; nLoop++) {   
    sCharacter = sString.charAt(nLoop);
    if (!fnIsDigit(sCharacter)) return false;
  }
  return true;
}

function fnIsDigit (sCharacter) {
  return ((sCharacter >= "0") && (sCharacter <= "9"));
}

function fnSingleQuote (sString) {
var nLoop, sCharacter, sReturnString='';
  for (nLoop = 0; nLoop < sString.length; nLoop++) {   
    sCharacter = sString.charAt(nLoop);
    if (sCharacter=="'") sCharacter="`";
      sReturnString=sReturnString+sCharacter;
  }
  return sReturnString;
}

function fnTrim (sString) {
var nLoop, sCharacter, sReturnString='', bNoneWhitespace=false;
  for (nLoop = sString.length-1; nLoop >= 0; nLoop--) {
    sCharacter = sString.charAt(nLoop)
    if(bNoneWhitespace)
      sReturnString=sReturnString+sCharacter;
    else
      if(sCharacter!=" ") {
        sReturnString=sReturnString+sCharacter;
        bNoneWhitespace = true;
      }
  }
  sString=sReturnString;
  sReturnString='';
  bNoneWhitespace=false;
  for (nLoop = sString.length-1; nLoop >= 0; nLoop--) {
    sCharacter = sString.charAt(nLoop)
    if(bNoneWhitespace)
      sReturnString=sReturnString+sCharacter;
    else
      if(sCharacter!=" ") {
        sReturnString=sReturnString+sCharacter;
        bNoneWhitespace = true;
      }
  }
  return sReturnString;
}

function fnReplace (sString, sSeek, sReplace){
var sReturnString=sString;
  while(sReturnString.search(sSeek)!=-1)
    sReturnString = sReturnString.replace(sSeek, sReplace);
  return sReturnString;
}

function fnEmailCheck (s) {
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var firstChars=validChars
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom="(" + firstChars + validChars + "*" + ")"
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

	// Check character pieces
	var matchArray=s.match(emailPat)
	if (matchArray==null) {
		alert("E-mail address seems incorrect (check @ and .'s)")
		return false
	}

	// Check user is valid
	var user=matchArray[1]
	var domain=matchArray[2]
	if (user.match(userPat)==null) {
        alert("The E-mail username doesn't seem to be valid.")
    	return false
	}

	// If address is at an IP address make sure IP address is valid
	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) {
    	for (var i=1;i<=4;i++) {
	    	if (IPArray[i]>255) {
	    	    alert("Email destination IP address is invalid!")
			return false
		    }
	    }
    	return true
	}

	// Check domain name
	var domainArray=domain.match(domainPat)
	if (domainArray==null) {
		alert("The E-mail domain name doesn't seem to be valid.")
	    return false
	}

	// Make sure end of domain name ends in a three-letter word (like com, edu, gov)
	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) {
		alert("The E-mail address must end in a three or four letter domain, or a two letter country.")
	   return false
	}

	// If domain is a country, insure there are at least 2 atoms preceding it (i.e. com, gov, etc.)
	if (domArr[domArr.length-1].length==2 && len<3) {
	   var errStr="This E-mail address ends in two characters, which is a country"
	   errStr+=" code.  Country codes must be preceded by "
	   errStr+="a hostname and category (like com, co, pub, pu, etc.)"
	   alert(errStr)
	   return false
	}

	// If domain is not a country, insure there a host name
	if (domArr[domArr.length-1].length==3 && len<2) {
	   var errStr="This E-mail address is missing a hostname!"
	   alert(errStr)
	   return false
	}

	// Return valid address
	return true;
}