function stripSpaces(myStr) {
    
    while (myStr.substring(0,1) == ' ') mnStr = myStr.substring(1);
    while (myStr.substring(myStr.length-1,myStr.length) == ' ') myStr = myStr.substring(0,myStr.length-1);
    return(myStr);
}

function isEmail(str) {
  var inStr=stripSpaces(str);
  str=inStr;
  // are regular expressions supported?
  var supported = 0;
  if (window.RegExp) {
    var tempStr = "a";
    var tempReg = new RegExp(tempStr);
    if (tempReg.test(tempStr)) supported = 1;
  }
  if (!supported) 
    return (str.indexOf(".") > 2) && (str.indexOf("@") > 0);
  //regular expressions are supported
  var atIndex = str.lastIndexOf("@");
  if (atIndex < 0) {
	  return false;
  }
  var domain = str.substr(atIndex + 1);
  var local = str.substr(0, atIndex);
  var localLength = local.length;
  var localNoBackSlash = local.replace(/\\/i, "");
  var domainLength = domain.length;
  if ((localLength < 1) || (localLength > 64)) {
	  return false;
  }
  if ((domainLength < 1) || (domainLength > 255)) {
	  return false;
  }
  if ((local.substr(0,1) == ".") || (local.substr((localLength - 1), 1) == '.')) {
	  return false;
  }
  var rpattern = /\.\./;
  if (rpattern.test(local)) {	//local part has two consecutive dots
	  return false;
  }
  rpattern = /^(\\.|[A-Za-z0-9!#%&`_=\/$\'*+?^{}|~.-])+$/;
  if (!rpattern.test(localNoBackSlash)) {
	  // character not valid in local part unless 
	  // local part is quoted
	  rpattern = /^"(\\"|[^"])+"$/;
	  if (!rpattern.test(localNoBackSlash)) {
		  return false;
	  }
  }
  rpattern = /^\[?[0-9\.]+\]?$/;
  if (!rpattern.test(domain)) { // Check if domain is IP. If not, it should be valid domain name
	  var domainArray = domain.split(".");
  	  if (domainArray.length < 2) {
  		  return false; // Not enough parts to domain
  	  }
  	  for (var ctr = 0; ctr < domainArray.length; ctr++) {
  		  rpattern = /^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$/;
  		  if (!rpattern.test(domainArray[ctr])) {
  			  return false;
  		  }
  	  }
  }
  //made it through so valid
  return true;
}