var Routing = {
    ALIASES: {
        'create': 'new',
        'update': 'edit'
    },
    
    logger: function() {
        try {
            if (!location.href.match(/^http:\/\/(localhost|127.0.0.1)/) || !window.console) {
                return;
            }

            var args = arguments;
            var type = args.shift();
            console[type].apply(window, args);
        } catch (e) {
            null;
        }
    },
    
    dispatcher: function() {
        var controller_name = $('head meta[name=controller]').attr('content');
        var action_name = $('head meta[name=action]').attr('content');
        
        action_name = Routing.ALIASES[action_name] || action_name;
        
        try {
            Routing.before();
        } catch (e) {
            Routing.logger('debug', 'Routing#before', e.message);
        }
        
        try {
            Routing[controller_name].before();
        } catch (e) {
            Routing.logger('debug', 'Routing#' + controller_name + '#before', e.message);
        }
        
        try {
            Routing[controller_name][action_name].call();
        } catch (e) {
            Routing.logger('debug', 'Routing#' + controller_name + '#' + action_name, e.message);
        }
    }
};

$(document).ready(Routing.dispatcher);
