// -------------------------------------------------------------------------------------------------
// Global JavaScript for AFD public pages.
// -------------------------------------------------------------------------------------------------

/**
 * Toggles the group clicked on and sets a cookie with it's visible state.
 */

function toggleGroup () {
    
    // IE chokes on an animated toggle for groups    
    if ($.browser.msie) {
        $(this).next().toggle();
    }
    // Decent browsers get smooth transition
    else {
        $(this).next().toggle(); // Fix threading issue here
    }

    // Remove all highlights
    $("li.highlight").removeClass("highlight");

    // Persist and highlight this group
    var group = $(this).children("a").attr("href");
    
    if ($(this).next().is(":visible")) {
        $(this).parent().parent().addClass("highlight");
        addOpenGroup(group);
    }
    else {
        removeOpenGroup(group);
    }

    return false;

}

/**
 * Adds the specified group to the list of open groups
 */

function addOpenGroup (group) {

    var groups = readCookie("groups");
    var key    = group + ",";
    
    if (groups) {
        if (groups.indexOf(key) == -1) {
            groups += key;
        }
    }
    else {
        groups = key;
    }
    
    createCookie("groups", groups, 1);

}

/**
 * Removes the specified group from the list of open groups.
 */

function removeOpenGroup (group) {

    var groups = readCookie("groups");
    
    if (groups) {
        groups = groups.replace(group + ",", "");
        createCookie("groups", groups, 1);
    }

}

/**
 * Retrieves the list of open groups as an array.
 */

function getOpenGroups () {

    var groupsCookie = readCookie("groups");
    
    if (groupsCookie) {
        if (groupsCookie.indexOf(",") > -1) {
            return groupsCookie.split(",");
        }
        else {  
            return [groupsCookie];
        }
    }

    return null;

}

/**
 * Create cookie function from quirksmore.org.
 */

function createCookie(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
}

/**
 * Read cookie function from quirksmode.org.
 */

function readCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
}

/**
 * Erase cookie.
 */

function eraseCookie(name) {
    createCookie(name,"",-1);
}

// -- Global initialisation ------------------------------------------------------------------------

$(document).ready(function () {

    //-- Groups page only --------------------------------------------------------------------------
    
    if ($("#afdGroups").size() > 0) {
    
        // Hide all sub groups
        $(".subGroups").hide();
        
        // Bind toggle click to open sub groups
        $(".openGroup").click(toggleGroup);
        //$(".parentGroup").click(function () { $(this).next().click(); return false; });        
        
        // Open any open groups by default
        var openGroups = getOpenGroups();
        
        if (openGroups) {
            for (var i = 0; i < openGroups.length; i++) {
                if (openGroups[i]) {
                    // Open groups which match jquery pattern
                    $(".openGroup a[href='" + openGroups[i] + "']").parent().click();
                }
            }
        }

    }
    
    //-- Advanced search page only  ----------------------------------------------------------------
    
    if ($("#afdAdvancedSearch").size() > 0) {
    
        // If there are search results hide the form and bind the control link to show/hide
        if ($("#advancedSearchResults").size() > 0) {
        
            $("#advancedSearchForm").hide();

            $("#advancedSearchControl").show().find("a").click(function () {
                if ($("#advancedSearchForm").is(":visible")) {
                    $("#advancedSearchForm").hide();
                    $("#advancedSearchControl").removeClass("open").addClass("closed").addClass("highlight");
                    $(this).html("Show search criteria &raquo;");
                }
                else {
                    $("#advancedSearchForm").show();
                    $("#advancedSearchControl").removeClass("closed").addClass("open").removeClass("highlight");                    
                    $(this).html("Hide search criteria &raquo;");
                }
            });

        }

    }

});