$(document).ready(function() {

    setupValidationRules();
    setupFormDefaults();

    $("#feedbackform input, #feedbackform textarea").click(removeDefaultValue);
    $("#feedbackform input, #feedbackform select, #feedbackform textarea").focus(setFieldFocusState);
    $("#feedbackform input, #feedbackform select, #feedbackform textarea").blur(setFieldBlurState);

    $("#feedbackform").submit(onFeedBackFormSubmit);
});

function setupValidationRules()
{
    $("#name").addValidationData(fieldRequired, "Please enter your name", "Perfect!");

    $("#emailaddress").addValidationData(fieldRequired, "Please enter your email address", "Perfect!");
    $("#emailaddress").addValidationData(checkEmailAddress, "Invalid email address", "Perfect!");

    $("#comments").addValidationData(fieldRequired, "Please enter your comments", "");
    $("#subject").addValidationData(fieldRequired, "Please enter your subject", "Perfect!");

    $("#feedbacktype").addValidationData(fieldRequired, "Please select your feedback type", "Perfect!");
}

function setupFormDefaults()
{
    $("#name").get(0).defaultValue = "Enter your name";
    $("#emailaddress").get(0).defaultValue = "Enter your email address";
    $("#subject").get(0).defaultValue = "Enter your subject";
    $("#comments").get(0).defaultValue = "Enter your comments";
}

/**
 * focus event handler
 */
function setFieldFocusState()
{
    var field = $(this);
    setFieldState(field, "", true);
}

/**
 * blur event handler
 */
function setFieldBlurState()
{
    var field = $(this);

    resetDefaultValue(field);

    var message = field.validate();

    setFieldState(field, message, false);
}

/**
 * adjust the current state of the field
 */
function setFieldState(field, message, focus)
{
    field.removeClass("state_focused state_focused_perfect state_focused_perfect state_focused_error");

    // set the style for the input fields container
    if (field.hasError()) {
        field.parents(".field").addClass("error");
    } else {
        field.parents(".field").removeClass("error");
    }

    // set the style for the input field
    if (focus == true) {
        if (field.hasError() == true) {
            field.addClass("state_focused_error");
        } else if (field.hasError() == false) {
            field.addClass("state_focused_perfect");
        } else {
            field.addClass("state_focused");
        }
    } else {
        if (field.hasError() == true) {
            field.addClass("state_error");
        } else if (field.hasError() == false) {
            field.addClass("state_perfect");
        }
    }

    // update the message if possible
    if (message && message.length > 0) field.parents(".field").find("span.message").html(message);
}

/**
 * remove default value from the current field
 */
function removeDefaultValue()
{
    var field = $(this);

    // clear out the field value if it still contains the default value
    if (field.val() == field.get(0).defaultValue) {
        $(this).val("");
    }
}

/**
 * reset default value on the current field
 */
function resetDefaultValue(field)
{
    // reset the field to default if no value was entered value
    if (field.val() == "") {
        field.val(field.get(0).defaultValue);
    }
}

/**
 * validates the form once more before submission
 */
function onFeedBackFormSubmit()
{
    var form = $(this);
    var hasError = false;
    $("input, select, textarea", form).each(function() {
        var field = $(this);
        field.blur();
        if(field.hasError()){
			hasError = true;	
		}
    });

    if (hasError) return false;

    return true;
}
