(function($, undefined){

$(function(){
    var $content = $('#content'),
        $sidebar = $('#sidebar'),
        $background = $('#background-overlay'),
        $document = $(document),
        $window = $(window),
        navigation = {
            duration: 750,
            fading: 300,
            backgroundTransition: false,
            click: function(e) {
                var $this = $(this);
                
                console.log($this.attr('href'));
                if ($this.attr('href').indexOf('http://blog.rodneyrehm.de') == 0) {
                    return;
                }
                
                e.preventDefault();
                e.stopImmediatePropagation();
                
                // load the page
                navigation.load($this.attr('href'), true, $this.parent().attr('id'));
            },
            // init background change
            start: function(e, element) {
                var $this = $(element);
                navigation.backgroundTransition = true;
                
                setTimeout(function() {
                    // handle background
                    document.documentElement.className = $this.data('bg');

                    // tell others when we're ready for action
                    setTimeout(function() {
                        $window.trigger('background:stop', $this);
                    }, navigation.duration);
                }, 100);

            },
            // complete background change
            stop: function(e, element) {
                navigation.backgroundTransition = false;
                $content.children().fadeIn(navigation.fading * 3);
                $sidebar.fadeIn(navigation.fading * 3);
            },
            load: function(url, historize, id) {
                var $item = $('#' + id),
                    $link = $item.find('a');
                    
                // inform systems about background change
                if (document.documentElement.className != $link.data('bg')) {
                    $window.trigger('background:start', $link);
                }

                // handle navigation
                $('#navigation > ul > li').removeClass('active');
                $item.addClass('active');
                
                // remove old content
                $content.children().fadeOut(navigation.fading);
                $sidebar.fadeOut(navigation.fading);

                var $tmp = $('<div></div>');
                $tmp.load(url.replace('.html', '') + ".ajax", function() {
                    var $__content = $tmp.find('#content'),
                        $_content = $__content.children(),
                        $_sidebar = $tmp.find('#sidebar');
                    
                    $content.promise().done(function() {
                        $content.empty();
                        $_content.hide().appendTo($content);
                        $content.prop('className', $__content.prop('className'));
                        if (!navigation.backgroundTransition) {
                            $_content.fadeIn(navigation.fading * 3);
                        }
                    });
                    
                    $sidebar.promise().done(function() {
                        $sidebar.remove();
                        $sidebar = $_sidebar.hide().insertAfter($content);
                        if (!navigation.backgroundTransition) {
                            $sidebar.fadeIn(navigation.fading * 3);
                        }
                    });

                });

                if (historize !== false) {
                    history.pushState({url:url, id:id}, "", url);
                }
            },
            popstate: function(e) {
                e.preventDefault();
                if (e.originalEvent.state && e.originalEvent.state.url) {
                    navigation.load(e.originalEvent.state.url, false, e.originalEvent.state.id);
                }
            }
        };
    
    if (history.pushState) {
        $document
            .delegate('#navigation > ul > li > a', 'click', navigation.click);
    
        $window
            .bind('popstate', navigation.popstate)
            .bind('background:start', navigation.start)
            .bind('background:stop', navigation.stop);
            
        $(function(){
            history.replaceState({url:location.href, id:$('#navigation .active').attr('id')}, "", location.href);
        });
    }
});

$(function(){
    $(document).delegate('a[data-analytics-event]', 'click', function(e) {
        if (!window._gaq || !window._gaq.push) {
            return;
        }
        
        var data = $(this).data('analyticsEvent');
        window._gaq.push(['_trackEvent', data.event, data.action]);
    });
});

})(jQuery);
