var validateEmail = {
    emailAddress: {
        isEmpty: false,
        noError: true,
        validate: function() {
            // isEmpty validation
            if (validateEmail.isEmpty(yuiDom.get('emailAddress'))) {
                yuiDom.get('emailNotEnteredErrorDiv').style.display = 'block';
                validateEmail.emailAddress.noError = false;
                validateEmail.emailAddress.isEmpty = true;
            } else {
                yuiDom.get('emailNotEnteredErrorDiv').style.display = 'none';
                validateEmail.emailAddress.isEmpty = false;
            }

            // hasValidEmail validation
            if (!validateEmail.emailAddress.isEmpty && !validateEmail.hasValidEmail(yuiDom.get('emailAddress'))) {
                yuiDom.get('emailNotValidErrorDiv').style.display = 'block';
                validateEmail.emailAddress.noError = false;
            } else {
                yuiDom.get('emailNotValidErrorDiv').style.display = 'none';
            }

            // isMatched validation
            if (!validateEmail.emailAddress.isEmpty && !validateEmail.isMatched(yuiDom.get('emailAddress').value, yuiDom.get('retypeEmailAddress').value)) {
                yuiDom.get('emailsDontMatchErrorDiv').style.display = 'block';
                validateEmail.emailAddress.noError = false;
                validateEmail.retypeEmailAddress.noError = false;
            } else {
                yuiDom.get('emailsDontMatchErrorDiv').style.display = 'none';
            }

            // set error display for the label
            if (!validateEmail.emailAddress.noError){
                yuiDom.addClass(yuiDom.get('emailLabel'), 'error');
            } else {
                yuiDom.removeClass(yuiDom.get('emailLabel'),'error');
            }
        }
    },
    retypeEmailAddress: {
        isEmpty: false,
        noError: true,
        validate: function() {
            // isEmpty validation
            if (validateEmail.isEmpty(yuiDom.get('retypeEmailAddress'))) {
                yuiDom.get('reEmailNotEnteredErrorDiv').style.display = 'block';
                validateEmail.retypeEmailAddress.noError = false;
                validateEmail.retypeEmailAddress.isEmpty = true;
            } else {
                yuiDom.get('reEmailNotEnteredErrorDiv').style.display = 'none';
                validateEmail.retypeEmailAddress.isEmpty = false;
            }

            // hasValidEmail validation
            if (!validateEmail.retypeEmailAddress.isEmpty && !validateEmail.hasValidEmail(yuiDom.get('retypeEmailAddress'))) {
                yuiDom.get('reEmailNotValidErrorDiv').style.display = 'block';
                validateEmail.retypeEmailAddress.noError = false;
            } else {
                yuiDom.get('reEmailNotValidErrorDiv').style.display = 'none';
            }

            // set error display for the label
            if (!validateEmail.retypeEmailAddress.noError){
                yuiDom.addClass(yuiDom.get('reEmailLabel'), 'error');
            } else {
                yuiDom.removeClass(yuiDom.get('reEmailLabel'),'error');
            }
        }
    },
    validate: function () {
        validateEmail.resetErrors();
        validateEmail.emailAddress.validate();
        validateEmail.retypeEmailAddress.validate();
        validateEmail.errorDisplay();
        return (validateEmail.emailAddress.noError) && validateEmail.retypeEmailAddress.noError;
    },
    errorDisplay: function() {
        if (!validateEmail.emailAddress.noError || !validateEmail.retypeEmailAddress.noError){
            yuiDom.get('generalErrorBlock').style.display = 'block';
            yuiDom.get('errorBlockContainer').style.display = 'block';
            yuiDom.get('inst').style.display = 'none';
        } else {
            yuiDom.get('generalErrorBlock').style.display = 'none';
            yuiDom.get('errorBlockContainer').style.display = 'none';
            yuiDom.get('inst').style.display = 'block';
        }
    },
    resetErrors: function() {
        validateEmail.emailAddress.noError = true;
        validateEmail.retypeEmailAddress.noError = true;
    },
    isEmpty: function(address) {
        return (address == null || address.value == "");
    },
    hasValidEmail: function(address) {
        if (address != null && address != ''){
            var regEx = /^\w+((-\w+)|(\`\w+)|(\.\w+)|('\w+)|(\+\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/;
            return regEx.test(address.value);
        }
    },
    isMatched: function(address1, address2) {
        if (address1 != null && address2 != null)
            return (address1 == address2);
    }
};
