(function($) {

    $(document).ready(function() {

        $("form#contact input[type='button'][value='Clear']").click(function() {
            $("form#contact").get(0).reset();
        });

        var charCount = $("form#contact").find("input.charCount").val();
        $("form#contact").find("textarea").bind("keyup", function() {
            var val = $(this).val();
            if (val.length > charCount) {
                $(this).val(val.substring(0, charCount));
            }
        }).bind("keyup", function() {
            var charCountElem = $("form#contact").find("input.charCount");
            var count = charCount - $(this).val().length;
            charCountElem.val(count);
        });

        // For the phone number inputs, move cursor to next number block
        // when the user fills the current one
        $("form#contact input[name='phoneNumberChunks']").keyup(function() {
            var val = $(this).val();
            if (val.length >= $(this).attr("maxlength")) {
                $(this).next("input[name='phoneNumberChunks']").focus();
            }
        });

        var validator = new Gorilla.AjaxValidator();

        validator.attachValidator($("form#contact :text").get(), "/ajax/contact-form-ajax", function(fieldErrors, allErrors) {

            var field = this;
            var val = $(this).val();
            if ($(this).attr("name").indexOf("phoneNumberChunks") != -1) {
                fieldErrors = allErrors["phoneNumber"];
                field = $(this).parent().find("input:last");
                val = "";
                $(this).parent().find("input").each(function() {
                    val = val + $(this).val();
                });
            }
            if (val == "") {
                Sterling.Contact.hideFieldErrorOrSuccess(this);
                return;
            }

            if (fieldErrors == undefined || fieldErrors == null || fieldErrors.length == 0) {
                Sterling.Contact.showFieldSuccess(field);
            } else {
                Sterling.Contact.showFieldError(field, fieldErrors[0]);
            }
        });

        validator.attachValidator($("form#contact select, form#contact textarea"), "/ajax/contact-form-ajax", function(fieldErrors, allErrors) {
            var field = this;
            if (fieldErrors.length == 0) {
              Sterling.Contact.hideFieldErrorOrSuccess(field);
            }
        });

        validator.attachValidator($("form#contact :radio"), "/ajax/contact-form-ajax", function(fieldErrors, allErrors) {
            var field = this;
            if (fieldErrors.length == 0) {
                Sterling.Contact.hideFieldErrorOrSuccess(field);
                var fieldDiv = $(this).parents(".contact-radioGroup");
                fieldDiv.removeClass("error");
                fieldDiv.find(".contact-errorMessage").remove();
            }
        });

        //validator.validate();
    });


})(jQuery);
