function removeFromAccordionCookie(number) {
    var cookie = jQuery.cookie("accordion");

    if (cookie == null)
        cookie = "";
    var current_cookies = cookie.split(',', 100);
    cookie = "";
    var first = true;
    for ( var i = 0; i < current_cookies.length; i++)
        if (current_cookies[i] != number) {
            if (first)
                first = false;
            else
                cookie += ',';
            cookie += current_cookies[i];
        }

    jQuery.cookie("accordion", cookie, {
        path : '/',
        expires : 100
    });
}

function addToAccordionCookie(number) {
    var cookie = jQuery.cookie("accordion");

    if (cookie == null)
        cookie = '';
    var current_cookies = cookie.split(',', 100);
    var found = false;
    for ( var i = 0; i < current_cookies.length; i++)
        if (current_cookies[i] == number)
            return;
    if (cookie != '')
        cookie += ',';
    cookie += number;

    jQuery.cookie("accordion", cookie, {
        path : '/',
        expires : 100
    });
}

function isInAccordionCookie(number) {
    var cookie = jQuery.cookie("accordion");
    if (cookie == null)
        cookie = '';
    var current_cookies = cookie.split(',', 100);
    var found = false;
    for ( var i = 0; i < current_cookies.length; i++)
        if (current_cookies[i] == number)
            return true;
    return false;
}

jQuery(document).ready( function() {

    /* which accordion is currently selected? */
    var selectedAccordion = jQuery.cookie("accordion_selected");
    if (selectedAccordion == null)
        selectedAccordion = "";
    if (selectedAccordion == "") {
        selectedAccordion = jQuery("div.inexharmoniky>form>input[name='accordion']:checked").val();
        if (selectedAccordion === undefined)
            selectedAccordion = "";
    }
    var accordions = jQuery("ul.inexaccordion");
    if (accordions.size() > 1) {
        if (selectedAccordion != "") {
            /* check if such accordion exists */
            if (jQuery("ul.inexaccordion[name='" + selectedAccordion + "']").size() == 0) {
                /* TODO getting here most likely means, that XML configuration file does not have default accordion set. */
                selectedAccordion = jQuery("ul.inexaccordion:first").attr("name");
            }
        }
    } else {
        /* when we have only one accordion */
        selectedAccordion = "";
        accordions.removeAttr("name");
    }
    jQuery.cookie("accordion_selected", selectedAccordion, {
        path : '/',
        expires : 100
    });

    /* set handler for radio button clicks */
    jQuery("div.inexharmoniky>form>input[name='accordion']").click( function() {
        selectedAccordion = jQuery(this).val();
        jQuery.cookie("accordion_selected", selectedAccordion, {
            path : '/',
            expires : 100
        });
        jQuery("ul.inexaccordion").hide();
        jQuery("ul.inexaccordion[name='" + selectedAccordion + "']").show();
    });

    jQuery('ul.inexaccordion ul').hide(); /* close all the submenus ... */
    /* ... and then show the whole menu (hidden by HTML) */
    if (selectedAccordion == "")
        jQuery('ul.inexaccordion').show();
    else
        jQuery("div.inexharmoniky>form>input[name='accordion'][value='" + selectedAccordion + "']").click();

    var cookie = jQuery.cookie("accordion");
    if (cookie == null)
        cookie = "";
    /* and if some ul's are marked as open ... */
    cks = cookie.split(',', 100);
    for ( var i = 0; i < cks.length; i++) {
        jQuery('ul.inexaccordion ul[nr=' + cks[i] + ']').show();
    }

    jQuery('ul.inexaccordion li>a').click( function() {

        var thisElement = jQuery(this);
        var checkElement = thisElement.next(); /* take the next sibling of the clicked element */
        var parentN = thisElement.parent().parent(); /* <ul> above the <a> */
        var otherAccordions = thisElement.parents(".inexharmoniky").find("ul.inexaccordion[name!='" + selectedAccordion + "']");

        if (checkElement.is('ul')) {
            if (checkElement.is(':visible')) {
                /* if there is a ul (ie another level of menu) under the accordion and this lower level menu is open ... */
                /* remove the number from cookie */
                var nr = checkElement.attr('nr');
                removeFromAccordionCookie(nr);
                otherAccordions.find("ul[nr=" + nr + "]").hide();
                checkElement.slideUp('normal'); /* I close it */
            } else {
                /*  if there is a lower level menu and it is closed then I close whatever has been open before on the same level ... */
                var elementsToClose = parentN.children('li').children('ul:visible');
                elementsToClose.each( function() {
                    removeFromAccordionCookie(jQuery(this).attr('nr'));
                });

                var nr = checkElement.attr('nr');
                addToAccordionCookie(nr);

                elementsToClose.slideUp('normal');
                checkElement.slideDown('normal'); /* and I open the one that has been clicked */

                /* now hide all items at the same level in the other accordions */
                var parentNR = parentN.attr('nr');
                if (parentNR == "root") {
                    submenusToHide = otherAccordions.find("li>ul"); /* FIXME potrebujeme JEN prime potomky od other options */
                    submenusToHide.hide();
                    submenusToHide.each( function() {
                        nnn = jQuery(this).attr('nr');
                        if (nnn != nr)
                            removeFromAccordionCookie(nnn);
                    });
                }

                otherAccordions.find("ul[nr=" + nr + "]").show();
            }

            return false;
        }
    });

});

