﻿function IsValidEmail(src, args) 
{ 
    args.IsValid = ValidateEmail(args.Value)
}

function ValidateEmail(emailStr) 
{
    try
    { 
	    var emailPat = /^(.+)@(.+)$/ 
        var specialChars = "\\(\\)<>@,;:/\\\\\\\"\\.\\[\\]" 
        var validChars = "\[^\\s" + specialChars + "\]" 
        var quotedUser = "(\"[^\"]*\")" 
        var ipDomainPat = "^(\[0-9]{1,3})\.(\[0-9]{1,3})\.(\[0-9]{1,3})\.(\[0-9]{1,3})$" 
        var ipDomainPat2 = /^(.+)\.(.+)\.(.+)\.(.+)$/ 
        var atom = validChars + '+' 
        var word = "(" + atom + "|" + quotedUser + ")" 
        var userPat = new RegExp("^" + word + "(\\." + word + ")*$") 
        var domainPat = new RegExp("^" + atom + "(\\." + atom +")*$") 
        var emailStrUpper = emailStr.toUpperCase(); 
        var invalidChars = /[ ~`!#$%*()-+={}|;:"<>,?^\\\/]/
        var invalid = emailStr.match(invalidChars);

	    //args.IsValid = false;
		
        if (invalid) {
		    return false;
	    }    

	    //Fail if @marykay.com is in the email address
        invalid = null
        invalid = emailStr.match(/@marykay./i);
        if (invalid) {
            return false;
        }

        invalid = null
        invalid = emailStr.match(/.marykay./i);
        if (invalid) {
            return false;
        }

        if(emailStrUpper == "NONE@NONE.COM")
        {
            return false;
        }

        if(emailStr.toUpperCase() == "INVALIDEMAIL@MARYKAY.COM")
        { 
            return false;
        } 

        var matchArray = emailStr.match(emailPat) 
        if (matchArray == null) 
        { 
            return false;
        } 

        var user = matchArray[1] 
        var domain = matchArray[2] 
        if (user.match(userPat) == null) 
        {
            return false;
        }

        if(domain.charAt(0) == '_')
        {
            return false;
        }

        var IPArray = domain.match(ipDomainPat) 
        if (IPArray != null) 
        {
            if(domain.match(ipDomainPat2) == null)
            {
                return false;
            } 

            if (IPArray[1] == 10){
                            return false;
            }

            if (IPArray[1] == 127){
                            return false;
            }

            if (IPArray[1] == 172){
                            return false;
            }

            if (IPArray[1] == 192){
                            return false;
            }

            for (var i = 1; i <= 4; i++) 
            {
                if (IPArray[i] > 255) 
                { 
                                    return false;
                } 
            } 
            return true;
        }

        var domainArray = domain.match(domainPat) 
        if (domainArray == null) 
        { 
            return false;
        } 

        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 > 6)
        {
            return false;
        }

        if (len < 2) 
        { 
            return false
        } 

	    //Successful
	    return true;
    } 

    catch(o)
    { 
            alert("Error in ValidateEmail, error - " + o.reason)
    } 

}
