var UHSU = window.UHSU || {};

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

            // append errorMsg to document
            this.$form.prepend($errorHTML.get(0));
            
            return false;
        }
        else {
            // remove error message
            this.$form.find(".formErrors").remove();
            this.$form.find(".formField").removeClass("error");
            return true;
        }         
    }
};
	
UHSU.search = {
    searchInputSelector     : ".searchBox",
    defaultSearchValue      : "Find tickets for an event",
    
    init: function() {
        var $inputElement = $(UHSU.search.searchInputSelector);
        var cleared = false;
        
        if ($inputElement.length > 0) {
            // add in default search text
            if ($inputElement.get(0).value.length === 0) {
                $inputElement.get(0).value = UHSU.search.defaultSearchValue;
            }
            
            // add event handler to clear default text on first click
            $inputElement.click(function() {
                if (!cleared) {
                    this.value = "";
                    cleared = true;
                }
            });
        }
    }
};

UHSU.courserep = {
    inputSelector       : ".crSelect",
    fieldsetSelector    : ".crDetails",
    
    init: function() {
        var $inputElement = $(UHSU.courserep.inputSelector);
        
        if ($inputElement.length > 0) {
            // hide course rep details
            $details = $(UHSU.courserep.fieldsetSelector).hide();
            
            // add event handling for show/hide of course rep details
            $inputElement.change(function() {
                // remove old error state
                $('.formErrors').remove();
                $('.formField').removeClass('error');
                
                // show/hide course rep details, and add/remove validation as required
                if (this.value === "Y") {
                    $details.show();
                    $details.find('input, select').addClass('required');
                }
                else {
                    $details.hide();
                    $details.find('input, select').removeClass('required');
                }
            });
        }
    }
};

UHSU.nusOptin = {
    inputSelector       : ".nusCard",
    fieldsetSelector    : ".nusOptinDetails",
    
    init: function() {
        var $inputElement = $(UHSU.nusOptin.inputSelector);
        
        if ($inputElement.length > 0) {
            // hide optin details
            $details = $(UHSU.nusOptin.fieldsetSelector).hide();
            
            // add event handling for show/hide of optin details
            $inputElement.change(function() {
                // remove old error state
                $('.formErrors').remove();
                $('.formField').removeClass('error');
                
                // show/hide optin details
                if (this.value === "Y") {
                    $details.show();
                }
                else {
                    $details.hide();
                }
            });
        }
    }
};

UHSU.datePicker = {
    init: function() {
        $('.calendar').datepicker({
            showOn          : 'button',
            buttonImage     : '/assets/images/calendar.gif',
            dateFormat      : 'dd/mm/yy',
            defaultDate     : new Date(1985,0,1)
        });
    }
};

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