/**
 * Contact Us form validation
 * 
 * Uses Zygous.FormValidator to check that there are values in each of the form
 * fields, and that the specified email address looks like an email address,
 * before allowing the form to be submitted.
 * 
 * @author Richard J. Turner
 * @copyright 2008 Richard J. Turner. All rights reserved. 
 */

var Solent     = Solent || {};
Solent.Contact = Solent.Contact || {};

var aValidators = {
    name: {
        presence:   'required',
        allowEmpty: false
    },
    email: {
        presence:   'required',
        allowEmpty: false,
        validator:  new Zygous.Validate.EmailAddress()
    },
    subject: {
        presence:   'required',
        allowEmpty: false
    },
    message: {
        presence:   'required',
        allowEmpty: false
    }
};

YAHOO.util.Event.onDOMReady(
    function () {
        // Set-up a form validator
        Solent.Contact.FormValidator = new Zygous.FormValidator.Validator(
            "contact_us_form",
            aValidators
        );
        
        // Listen for form submission and clear error statuses when that happens
        Solent.Contact.FormValidator.resetError = function (sField) {
            var oWrapperDiv = this.form.elements[sField].parentNode;
            YAHOO.util.Dom.removeClass(oWrapperDiv, 'error');
            
            var oErrorDiv = YAHOO.util.Dom.get('error_' + sField);
            if (null !== oErrorDiv) {
                oErrorDiv.parentNode.removeChild(oErrorDiv);
            }
        };
        
        Solent.Contact.FormValidator.handleError = function (sField, sError) {
            var oWrapperDiv = this.form.elements[sField].parentNode;
            YAHOO.util.Dom.addClass(oWrapperDiv, 'error');
            
            var oErrorDiv = YAHOO.util.Dom.get('error_' + sField);
            if (null === oErrorDiv) {
                var oErrorDiv       = document.createElement('div');
                oErrorDiv.id        = 'error_' + sField;
                oErrorDiv.className = 'form_row error';
                oWrapperDiv.parentNode.parentNode.insertBefore(
                    oErrorDiv,
                    oWrapperDiv.parentNode.nextSibling
                );
            }
            else {
                oErrorDiv.appendChild(document.createElement('br'));
            }
            oErrorDiv.appendChild(document.createTextNode(sError));
        }
    }
);
