﻿/* Applies standard classes and so forth onto elements of every page */
var Salomon = Salomon || {};

Salomon.Standard = {

    bindDefaultFormEvents: function(form) {        

        form.find(".form_submit").click(function() {
            form.submit();
            return false;
        });

        form.find(".input_submit").keypress(function(e) {
            if (e.which == 13) { /* enter */
                form.submit();
                return false;
            }
        });

        form.find(".row").each(function() {
            var invalidInputs = $(this).find(".input-validation-error, .field-validation-error");
            if (invalidInputs.length) {
                /* push the class up to the whole row and remove it from the form element */
                $(this).addClass("input-validation-error");
                invalidInputs.removeClass("input-validation-error");
            }
        });
    }
    
}

$(function() {
    $("ul, ol").each(function() {
        $(this).find("li:first").addClass("first");
        $(this).find("li:last").addClass("last");
    });

    $("tr").each(function() {
        $(this).find("th:first, td:first").addClass("first");
        $(this).find("th:last, td:last").addClass("last");
    });

    $("form").each(function() {
        var form = $(this);
        Salomon.Standard.bindDefaultFormEvents(form);
    });

    $("#region_switch form select").change(function() {
        $("#region_switch form").submit();
    });
    
    var highlightActiveMenuItem = function() {
        var path = window.location.pathname;
        
        var addActiveToMatchingNavLinks = function(filter) {
            return $("#main_nav li").filter(function() {
                return $(this).find("a").filter(function() {
                    return filter($(this));
                }).size();
            }).addClass("active");            
        }
        
        /* try a straight match first */
        var directMatch = addActiveToMatchingNavLinks(function(link) {
            return link.attr("href") == path;
        });        
        if (directMatch.size()) {            
            return;
        }

        /* try matching on the page's breadcrumb next (category is second element) */        
        var breadcrumbLink = $("#breadcrumb li:nth-child(2) a").attr("href");        
        if (breadcrumbLink) {
            var breadcrumbMatch = addActiveToMatchingNavLinks(function(link) {
                return link.attr("href") == breadcrumbLink;
            });
            
            if (breadcrumbMatch.size()) {            
                return;
            }
        }

        /* try matching to the controller and id using regex (allows action to be different) */
        var pathFormat = new RegExp("^\/([a-zA-Z]+)\/[a-zA-Z]+\/([0-9]+)", "i")

        if (!pathFormat.test(path)) {
            return;
        }
        
        var match = path.match(pathFormat);
        var controller = match[1];
        var categoryId = match[2];
        
        var pathMatchFormat = new RegExp("^\/" + controller + "\/[a-zA-Z]+\/" + categoryId, "i");
        
        addActiveToMatchingNavLinks(function(link) {
            return pathMatchFormat.test(link.attr("href"));
        });
    }
    
    highlightActiveMenuItem();
});
