function toggleContactForm(inProgress) {
    if (inProgress) {
        $("#contact-loader").show();
        $("#contactForm button").text("Sending...").attr('disabled', 'disabled');
    } else {
        $("#contact-loader").hide();
        $("#contactForm button").text("Send Message").removeAttr('disabled');
    }
}

function toggleAboutForm(inProgress) {
    if (inProgress) {
        $("#about-loader").show();
        $("#aboutForm button").text("Processing...").attr('disabled', 'disabled');
    } else {
        $("#about-loader").hide();
        $("#aboutForm button").text("View Résumé").removeAttr('disabled');
    }
}

function initAjaxMode() {

    var tabs = $("#menu a").each(function() {
        var tabsHref = $(this).attr("href").replace("/", "#");
        if (tabsHref == "#") tabsHref = "#home";
        $(this).attr("href", tabsHref);
    });

    $("#menu").tabs({
        selected: 2,
        select: function(event, ui) {
            if ($("#thanks").size()) {
                $("#thanks").remove();
                $("#contact").removeAttr("style").find(':input').each(function() {
                    $(this).val('');
                });
            }
        }
    });

    $("#contact form").append('<div id="contact-loader"><img src="../../content/images/loader.gif" alt="loading..." /></div>')
                              .children().last().css({ width: "43px", position: "relative", top: "-29px", left: "160px", height: "0px" })
                              .hide();

    $("#about form").append('<div id="about-loader"><img src="../../content/images/loader.gif" alt="loading..." /></div>')
                            .children().last().css({ width: "43px", position: "relative", top: "-29px", left: "160px", height: "0px" })
                            .hide();

    $("#contactForm").validate({
        errorElement: "span",
        errorClass: "field-validation-error",
        errorPlacement: function(error, element) {
            var id = element.attr('id');
            error.appendTo($("label[for='" + id + "']"));
        },
        rules: {
            "message.Name": { required: true },
            "message.Email": { required: true, email: true },
            "message.Text": { required: true }
        },
        messages: {
            "message.Name": { required: "* required" },
            "message.Email": { required: "* required", email: "* invalid" },
            "message.Text": { required: "* required" }
        },
        submitHandler: function(form) {
            $.ajax({
                type: "POST",
                url: $(form).attr("action"),
                data: $(form).serialize(),
                dataType: "html",
                beforeSend: function(req) {
                    toggleContactForm(true);
                },
                success: function(html) {
                    $("#contact-loader").hide();
                    $("#contact").fadeOut('slow', function() {
                        $(this).after(html);
                        $("#thanks").hide().slideDown('slow');
                        toggleContactForm(false);
                    });
                },
                error: function(req, status, err) {
                    toggleContactForm(false);
                    alert("Unable to process your request at this time.  Please try again later.");
                }
            });
            return false;

        }
    })

    $("#aboutForm").validate({
        errorElement: "span",
        errorClass: "field-validation-error",
        errorPlacement: function(error, element) {
            var id = element.attr('id');
            error.appendTo($("label[for='" + id + "']"));
        },
        rules: {
            "contact.Name": { required: true },
            "contact.Email": { required: true, email: true }
        },
        messages: {
            "contact.Name": { required: "* required" },
            "contact.Email": { required: "* required", email: "* invalid" }
        },
        submitHandler: function(form) {
            $.ajax({
                type: "POST",
                url: $(form).attr("action"),
                data: $(form).serialize(),
                dataType: "html",
                beforeSend: function(req) {
                    toggleAboutForm(true);
                },
                success: function(link) {
                    window.location.replace(link);
                },
                error: function(req, status, err) {
                    toggleAboutForm(false);
                    alert("Unable to process your request at this time.  Please try again later.");
                }
            });
            return false;

        }
    })
}