$(document).ready(function() {

    // To use, simple do: Get_Cookie('cookie_name');
    // replace cookie_name with the real cookie name, '' are required
    function getCookie(check_name) {
        // first we'll split this cookie up into name/value pairs
        // note: document.cookie only returns name=value, not the other components
        var a_all_cookies = document.cookie.split(';');
        var a_temp_cookie = '';
        var cookie_name = '';
        var cookie_value = '';

        for (i = 0; i < a_all_cookies.length; i++)
        {
            // now we'll split apart each name=value pair
            a_temp_cookie = a_all_cookies[i].split('=');

            // and trim left/right whitespace while we're at it
            cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');

            // if the extracted name matches passed check_name
            if (cookie_name == check_name)
            {
                // we need to handle case where cookie has no value but exists (no = sign, that is):
                if (a_temp_cookie.length > 1)
                {
                    cookie_value = unescape(a_temp_cookie[1].replace(/^\s+|\s+$/g, ''));
                }
                // note that in cases where cookie is initialized but no value, null is returned
                return cookie_value;
            }
            a_temp_cookie = null;
            cookie_name = '';
        }
        return null;
    }

    /*
    only the first 2 parameters are required, the cookie name, the cookie
    value. Cookie time is in milliseconds, so the below expires will make the
    number you pass in the Set_Cookie function call the number of days the cookie
    lasts, if you want it to be hours or minutes, just get rid of 24 and 60.

    Generally you don't need to worry about domain, path or secure for most applications
    so unless you need that, leave those parameters blank in the function call.
    */
    function setCookie(name, value, expires, path, domain, secure) {
        // set time, it's in milliseconds
        var today = new Date();
        // if the expires variable is set, make the correct expires time, the
        // current script below will set it for x number of days, to make it
        // for hours, delete * 24, for minutes, delete * 60 * 24
        if (expires)
        {
            expires = expires * 1000 * 60 * 60 * 24;
        }
        var expires_date = new Date(today.getTime() + (expires));

        document.cookie = name + "=" + escape(value) +
                          ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + //expires.toGMTString()
                          ( ( path ) ? ";path=" + path : "" ) +
                          ( ( domain ) ? ";domain=" + domain : "" ) +
                          ( ( secure ) ? ";secure" : "" );
    }

    function changeState(el, state) {
        var container = el.siblings(".body");
        var cookie = getCookie(container.attr("id"));

        var showPanleContent = function() {
            el.parents(".collapseBox").removeClass("collapsed")
            container.show();
            setCookie(container.attr("id"), "visible");
        }

        var hidePanleContent = function() {
            el.parents(".collapseBox").addClass("collapsed")
            container.hide();
            setCookie(container.attr("id"), "hidden");
        }

        if (cookie) {
            if (cookie == state) {
                showPanleContent();
            } else {
                hidePanleContent();
            }
        } else {
            if (container.is(":" + state)) {
                showPanleContent();
            } else {
                hidePanleContent();
            }
        }
    }

    $(".collapseBox h3").each(function(){
        changeState($(this), "visible");
    })

    $(".collapseBox h3").click(function() {
        changeState($(this), "hidden");
    });

});