/*
 * © Doroshenko Alexey, 2010


 */

/*
В меню не допускается 2 одинаковых линка: если 2 или более одинаковых, выделяются сразу все с одинаковыми линками

Что и как ?
$.cookie(‘the_cookie’); // получить значение cookie
$.cookie(‘the_cookie’, ‘the_value’); //установить значение cookie
$.cookie(‘the_cookie’, ‘the_value’, { expires: 7 }); //установить куки с временем жизни 7 дней
$.cookie(‘the_cookie’, ”, { expires: -1 }); // удалить cookie
$.cookie(‘the_cookie’, null); // удалить cookie
*/
// ----------------------------------------------------------------------------
// этот код выполняется при загрузке страницы
$(document).ready(function(){

    var cookie_name = 'jr-menu'; // имя куки для хранения состояния меню

    // получаем адрес текущей страницы от последнего слэша до конца (с переданными параметрами методом GET)
    var current_url = location.href;
    // находим последний слэш и удаляем всё что до него
    var indexslash = current_url.lastIndexOf("/");
    var ln = current_url.length;
    current_url = current_url.substring(indexslash+1, ln);

    // current_url_without_params - адрес страницы без параметров
    var current_url_without_params = current_url;
    // ищем вопрос (параметры get) и удаляем все что после него если он есть
    var indexget = current_url_without_params.indexOf("?");
    if (indexget != -1) {
        current_url_without_params = current_url_without_params.substr(0, indexget);
    }

    //alert('Адрес без параметров: '+current_url_without_params);
    //alert('Адрес с параметрами: '+current_url);

    // выделяем соответствующий текущей открытой странице пункт меню
    $('div.menu ul li:not(:has(ul))').each(function(index) { // выбираем все кроме разворачивающихся
        //alert($('a', this).attr("href"));
        var href_link = $('a', this).attr("href").toLowerCase();
        if ( (href_link == current_url.toLowerCase()) || (href_link == current_url_without_params.toLowerCase()) ) { // пункт выделен
            if ($(this).parent().parent().is('li')) { // если это подпункт
                $(this).removeClass().addClass('mstopactive');
            } else {
                $(this).removeClass().addClass('stopactive');
            }
        } else { // пункт не выделен
            if ($(this).parent().parent().is('li')) { // если это подпункт
                $(this).removeClass().addClass('mstop');
            } else {
                $(this).removeClass().addClass('stop');
            }
        }
    });


    if ($.cookie(cookie_name)!=null){ /*getCookie(cookie_name)*/
        // Cookie найден
        //alert('Cookie найден');

        var cookieReadedValue = $.cookie(cookie_name);
        var arr = cookieReadedValue.split('|'); // парсим и сохраняем состояние меню в массив
        // TODO: проверка на длину массива

        var nameAndVal;
        $('div.menu>ul>li:has(ul)').each(function(index) { // для каждого из раскрывающихся

            nameAndVal = arr[index].split('=');

            // не восстанавливаем из кукисов тот пункт, который является парентом выделенного подпункта, а явно присваиваем
            if ($('ul>li',this).hasClass('mstopactive') == false) { // не содержит в себе выделенного подпункта
                switch (nameAndVal[1]) {
                    case 'openactive':
                        $(this).removeClass().addClass('open');
                        break;
                    case 'closeactive':
                        $(this).removeClass().addClass('close');
                        break;
                    case 'close':
                        $(this).removeClass().addClass('close');
                        break;
                    case 'open':
                        $(this).removeClass().addClass('open');
                        break;
                    default:
                        break;
                }
            } else {
                $(this).removeClass().addClass('openactive');
            }


            if (($(this).attr('class') == 'close') || ($(this).attr('class') == 'closeactive')) {
                $('ul', this).hide();
            }
            if (($(this).attr('class') == 'open') || ($(this).attr('class') == 'openactive')) {
                $('ul', this).show();
            }
        });
    } else {
        // Cookie не найден
        //alert('Cookie не найден');
        $('div.menu>ul>li:has(ul)').each(function(index) { // для каждого из раскрывающихся
            if ($('ul>li',this).hasClass('mstopactive') == false) { // не содержит в себе выделенного подпункта
                $(this).removeClass().addClass('close');
            } else { // содержит выделенный подпункт
                $(this).removeClass().addClass('openactive');
            }


            if (($(this).attr('class') == 'close') || ($(this).attr('class') == 'closeactive')) {
                $('ul', this).hide();
            }
            if (($(this).attr('class') == 'open') || ($(this).attr('class') == 'openactive')) {
                $('ul', this).show();
            }
        });
        /* var firstItem = $('div.menu>ul>li:first'); // первый пункт меню
        var firstSubmenu = $('div.menu>ul>li:first>ul'); // первое подменю

        if (firstSubmenu.length == 0) { // проверяем существует ли подменю у первого пункта меню
            // подменю не существует
            firstItem.removeClass().addClass('stopactive');
        } else {
            // подменю существует
            firstItem.removeClass().addClass('openactive');

            if (firstSubmenu.is(':hidden')) { // если подменю скрыто, то отобразим его (по умолчанию оно не скрыто, но вдруг?)
                // если подменю скрыто
                firstSubmenu.show(); // отобразим подменю
            }

            var firstItemSubmenu = $('div.menu>ul>li:first>ul>li:first'); // первый пункт подменю
            firstItemSubmenu.removeClass().addClass('mstopactive'); // устанавливаем класс

            // находим все оставшиеся пункты подменю кроме первого
            var allSubitemsWithoutFirst = $('div.menu>ul>li:first>ul>li:not(:first)');
            allSubitemsWithoutFirst.removeClass().addClass('mstop'); // устанавливаем классы
        }

        // РАБОТАЕТ! находим все пункты подменю (кроме тех, которые находятся в первом пункте меню)
        var allSubmenuItemsWithoutFirst = $('div.menu>ul>li:not(:first)>ul>li');
        allSubmenuItemsWithoutFirst.removeClass().addClass('mstop');
        //--------------------------------------------------------------------------------

        // РАБОТАЕТ! находим все пункты меню кроме первого, которые содержат подменю------
        allItemsWithSubmenuWithoutFirst = $('div.menu>ul>li:not(:first):has(ul)');
        allItemsWithSubmenuWithoutFirst.removeClass().addClass('close');
        //--------------------------------------------------------------------------------

        // РАБОТАЕТ! закрываем все подменю кроме первого----------------------------------
        var submenuWithoutFirst = $('div.menu>ul>li:not(:first)>ul');
        submenuWithoutFirst.hide();
        //--------------------------------------------------------------------------------

        // РАБОТАЕТ! находим все пункты меню кроме первого, которые не содержат подменю---
        var itemsWithoutULinside = $('div.menu>ul>li:not(:first):not(:has(ul))');
        itemsWithoutULinside.removeClass().addClass('stop');
        //--------------------------------------------------------------------------------

        //.each(function(index) {alert(index + ': ' + $(this).text());});
        */
    }

    function saveMenuToCookie(thisItem) {
        // alert(thisItem.parent().parent().text());
        // снимаем выделение со всех пунктов кроме нажатого и его родителя
        $('div.menu ul li').not(thisItem).not(thisItem.parent().parent()).each(function(index) {
            //alert($(this).text());
            if ($(this).hasClass('closeactive'))
                $(this).removeClass().addClass('close');
            if ($(this).hasClass('openactive'))
                $(this).removeClass().addClass('open');
            if ($(this).hasClass('stopactive'))
                $(this).removeClass().addClass('stop');
            if ($(this).hasClass('mstopactive'))
                $(this).removeClass().addClass('mstop');
        });

        // запоминаем в cookie состояния открывающихся пунктов меню
        var cookieValue = '';
        $('div.menu>ul>li:has(ul)').each(function(index) {
            cookieValue = cookieValue + index + '=' + $(this).attr('class') + '|';
            //alert(cookieValue);
        });
        $.cookie(cookie_name, cookieValue); //установить значение cookie
    }

    // вешаем событие на клик по ссылке
    //-----------------------------------
    $('div.menu a').click(function () {
        var thisItem = $(this.parentNode); // нажатый пункт меню (li)
        //alert(thisItem.attr('class'));

        // устанавливаем класс нажатого элемента
        switch (thisItem.attr('class')) {
            case 'close':
                thisItem.removeClass().addClass('openactive');
                $('ul',thisItem).slideToggle(100);
                saveMenuToCookie(thisItem);
                return false;
                break;
            case 'closeactive':
                thisItem.removeClass().addClass('openactive');
                $('ul',thisItem).slideToggle(100);
                saveMenuToCookie(thisItem);
                return false;
                break;
            case 'open':
                thisItem.removeClass().addClass('closeactive');
                $('ul',thisItem).slideToggle(100);
                saveMenuToCookie(thisItem);
                return false;
                break;
            case 'openactive':
                thisItem.removeClass().addClass('closeactive');
                $('ul',thisItem).slideToggle(100);
                saveMenuToCookie(thisItem);
                return false;
                break;
            case 'stop':
                thisItem.removeClass().addClass('stopactive');
                saveMenuToCookie(thisItem);
                return true;
                break;
            case 'mstop': // нажат пункт подменю
                thisItem.removeClass().addClass('mstopactive');
                // выделим родителя подпункта, но не будем выделяеть его если он уже openactive
                // alert(thisItem.text());
                // alert(thisItem.parent().parent().text());
                if (thisItem.parent().parent().hasClass('openactive') == false){ // если родительский элемент меню не активен
                    thisItem.parent().parent().removeClass().addClass('openactive');
                }
                saveMenuToCookie(thisItem);
                return true;
                break;
            default:
                //alert('Класс не определён');
                return true; // для mstopactive
                break;
        }
    });

});
// ----------------------------------------------------------------------------
