/**********************************************************************
*   Description: functions to verify email address, found on LAN, code author unknown
*   Who/When:   Denis Zenkovich 27 June 2006, dzen@scand.com
*   Version:    1.0
*   Copyright:  Copyright (c) 2005 TWL, Inc.
**********************************************************************/
/**
 *  What:       check wether email address is valid
 *  Who/When:   Denis Zenkovich, 27 June 2006, dzen@scand.com
**/
function isEmailValid(email)
{//AGC:: Start of command block
	if(email == null){ //if no email entered ->
		return false; //exit with FALSE
	}
	var atPos = email.indexOf("@"); //get position of AT char
	if( atPos < 1 || email.indexOf(".", atPos) == -1 ){ //if "@" is first, or "." is before "@"
		return false //exit with FALSE
	}
	var login = email.substring(0, atPos); //get lagin name
	var domain = email.substring(atPos + 1, email.length); //get domain
	var atom = "\[^\\s\\(\\)<>@',;:\\\\\\\"\\.\\[\\]\]+"; //login pattern
	var word = "(" + atom + '(|-("[^\"]*")))'; //finish pattern
	var loginRE = new RegExp('^' + word + '(\\.' + word + ')*$'); //create regexp object
	for (var i = 0; i < login.length; i++){ //for all characters ->
		if (login.charCodeAt(i) > 127){ //if not latin ->
			return false; //exit with FALSE
		}
	}//AGC:: End of command block
	if (!login.match(loginRE)){ //if login not valid ->
		return false; //exit with FALSE
	}
	return isDomainValid(domain); //check domain and return result
}
/**
 *  What:       check wether domain address is valid
 *  Who/When:   Denis Zenkovich, 27 June 2006, dzen@scand.com
**/
function isDomainValid(domain)
{//AGC:: Start of command block
    if(typeof(domain) != 'string'){ //if no a string ->
        return false; //exit with FALSE
    }
    for (var i = 0; i < domain.length; i++){ //for all characters ->
        if (domain.charCodeAt(i) > 127){ //if not latin ->
            return false; //exit with FALSE
        }
    }//AGC:: End of command block
    var ipDigit = "(0?0?\\d|[01]?\\d\\d|2[0-4]\\d|25[0-6])"; //domain pattern
    var ipRE = new RegExp("^" + ipDigit + "\\." + ipDigit + "\\." + ipDigit + "\\." + ipDigit + "$"); //create regex object
    if (ipRE.test(domain)) { //if pattern match ->
        return true; //exit with TRUE
    }
    var domains = domain.split("."); //get domain parts
    if (domains.length < 2) { //if only 1 part ->
        return false; //exit with FALSE
    }
    for (var i = 0; i < domains.length - 1; i++) { //for domain name ->
        if (!(/^[a-zA-Z0-9\-]+$/).test(domains[i])) { //if name not match word pattern ->
            return false; //exit with FALSE
        }
    }//AGC:: End of command block
    if(domains[domains.length-2].length < 2){ //if subdomain lenth is less than 2 chars ->
        return false; //exit with FALSE
    }
    if (!(/^[a-zA-Z]{2,}$/).test(domains[domains.length-1])){ //if domain ext not match word ->
        return false; //exit with FALSE
    }
    return true; //exit with TRUE
}
