var UHSU = window.UHSU || {};

UHSU.validation = {
    formSelector    : '.validate',
    errorHTML       : "<div class=\"formErrors\"><p></p><ul></ul></div>",
    
    /** Initialise form validation */
    init: function() {
        var $forms = $(UHSU.validation.formSelector);
        
        // apply event handler to forms
        $forms.each(function() {
            $(this).submit(function() {
                 return UHSU.validation.checkRequired($(this));
            });
        });
    },
    
    checkRequired: function($form) {
        // check for required fields
        var required = $form.find('.required'),
            errors = [],
            errorMsg = "The form contains missing values:",
            $errorHTML = $(UHSU.validation.errorHTML),
            isValid = false;
            
        // loop through and check values
        required.each(function() {
            var parent = $(this).parent('.formField'),
                label = parent.children('label:first');
            if (this.value.length === 0 || this.value === "-") {
                var labelText = label.html().replace(':','');
                errors.push(labelText + ' is incomplete');
                parent.addClass('error');
            }
        });
        
       if (errors.length > 0) {
            // remove any existing error message
            $form.find(".formErrors").remove();
            
            // add initial error message
            $errorHTML.find("p").html(errorMsg);
            
            // assemble list of errors
            $.each(errors, function() {
                $errorHTML.find("ul").append("<li>" + this + "</li>");
            });

            // append errorMsg to document
            $form.prepend($errorHTML.get(0));
        }
        else {
            isValid = true;
            // remove error message
            $form.find(".formErrors").remove();
            $form.find(".formField").removeClass("error");
        }        
        return isValid;
    }
};

UHSU.courserep = {
    init: function() {
        var $crFieldset = $('.courseRepDetails');
        var $crSelect = $('#courserep');
        
        if ($crSelect.length > 0) {
            // add event handler
            $crSelect.change(function() {
                UHSU.courserep.updateInfoVisibility(this, $crFieldset);
            });
            
            if ($crSelect.val() !== "Y") {
                $crFieldset.hide();
            }
        }
    },
    
    updateInfoVisibility: function(input, $fieldset) {
        if (input.value === "N" || input.value === "-") {
            $fieldset.hide();
            // remove validation
            $fieldset.find(':input').removeClass('required');
        }
        else if (input.value === "Y") {
            $fieldset.show();
            // add validation
            $fieldset.find(':input').addClass('required');
        }
    }
};

$(document).ready(function() {
	UHSU.validation.init();
	UHSU.courserep.init();
});