
$(document).ready(
    function() {
        function enableHashChangeEventHandler() {
            $(window).bind( 'hashchange', function(e) {
                fragmentChanged();
            });
        }

        function disableHashChangeEventHandler() {
            $(window).unbind( 'hashchange');
        }

        function getActiveTab(apiRequest) {
            switch ( apiRequest.endpoint ) {
                case "/search" :
                    return searchTab;
                case "/tags" :
                    return tagTab;
                case "/sections" :
                    return sectionTab;
                case "/folders" :
                    return folderTab;
                default:
                    return itemTab;
            }
        }

        function fragmentChanged() {
            var apiRequest = new ApiQuery();
            apiRequest.updateFromPath($.param.fragment());


            var activeTab = getActiveTab(apiRequest);
            $("#endpoint-tabs").tabs("select", activeTab.element.attr("id"));

            activeTab.updateFieldsFromRequest(apiRequest);

            //this handles the fact that format may not be specifed in the fragment, this sets the format to the
            //default value in the form. Disable hashchanged event, otherwise the event can be fired twice
            activeTab.fieldChanged();


            disableHashChangeEventHandler();
            activeTab.updateFragmentFromFields();
            enableHashChangeEventHandler();

            apiRequest = new ApiQuery();
            apiRequest.updateFromPath($.param.fragment());
        }

        $("#endpoint-tabs").tabs();

        var searchTab = new SearchTab($('#search-endpoint-tab'), new Results($('#search-results')));
        var itemTab = new ItemTab($('#item-endpoint-tab'), new Results($('#item-results')));
        var tagTab = new TagTab($('#tag-endpoint-tab'), new Results($('#tag-results')));
        var sectionTab = new SectionTab($('#section-endpoint-tab'), new Results($('#section-results')));
        var folderTab = new FolderTab($('#folder-endpoint-tab'), new Results($('#folder-results')));

        
        $('#api-key-input').keyup(function () {
            searchTab.fieldChanged();
        });

        $('span.help').tooltip({delay:0, showBody:" - "});

        fragmentChanged();
   }
);

