/*
 * GroupCollection - jQuery plugin 1.0.0
 *
 * Copyright (c) 2009 Squins
 */
;
( function($) {
    $.fn.extend( {
        handleTab : function() {
            return this.each( function() {
                new $.TabHandler(this);
            });
        },
        disableTab : function() {
            return this.trigger("disableTab");
        },
        enableTab : function() {
            return this.trigger("enableTab");
        },
        selectTab : function() {
            return this.trigger("selectTab");
        }
    });

    $.TabHandler = function(element) {
        // Parents and siblings
        var element;
        var groupCollection = element.parentNode.parentNode;
        var tabBar = $("div.tabs", $(groupCollection))[0];

        // Local variables
        var groupName = $("fieldset legend span", $(element)).html();
        var myTab = createTab(groupName);

        // If none of the tabs is set, the first tab can be selected
        if ($("div.tab", $(tabBar)).length == 0) {
            selectTab();
        }

        // Append the tab
        $(tabBar).append(myTab);

        // Add a click function
        $("div:last", $(tabBar)).click( function() {
            selectTab();
        });

        $(element).bind("disableTab", function() {
            disableTab();
        });

        $(element).bind("enableTab", function() {
            enableTab();
        });

        $(element).bind("selectTab", function() {
            selectTab();
        });

        function createTab(aName) {
            var myTab = document.createElement("div");
            var myTabSpan = document.createElement("span");
            var myTabSpanText = document.createTextNode(aName);
            myTabSpan.appendChild(myTabSpanText);
            myTab.appendChild(myTabSpan);
            $(myTab).addClass("tab");
            return myTab;
        }

        function enableTab() {
            $(myTab).css("display", "block");
            $(myTab).removeClass("disabled");
        }

        function disableTab() {
            $(myTab).css("display", "none");
            $(element).css("display", "none");
            $(myTab).addClass("disabled");
        }

        function selectTab() {
            // Hide all div.groups
            $("div.group:not(.oneLine)", $(groupCollection)).each( function() {
                $(this).css("display", "none");
            });

            // Show this group
            $(element).css("display", "block");

            // Remove the tab CSS-classes
            $("div.tabs div.tab", $(groupCollection)).each( function() {
                $(this).removeClass("selected");
            });

            // Update the tabs CSS-class
            $(myTab).addClass("selected");
        }
    }
})(jQuery);

/**
 * SQUINS Find all fields with the class autocomplete and initialize it
 */
$(document).ready( function() {
    function addGroupCollectionTabs(context) {
        $("div.group_collection:not(.tab-enabled)", context.getElement()).each( function() {
            // Add a class to prevent duplicate execution
            $(this).addClass("tab-enabled");
        
            $("div.group:not(.oneLine)", $(this)).each( function() {
                $(this).handleTab();
            });
        });
    }
    PageRequest.addOnPageStructureChangeEvent(addGroupCollectionTabs);
});

