$(function(){

    // Открытие (загрузка) дочерних элементов дерева
    $('table a.toogle').live('click', function() {
            var row = $(this).parent().parent();
            var id = extractId(row);
            var level = extractLevel(row);

            if(row.hasClass('content-t') ) var url = '/admin/menu/'+id+'/CommonBundle%3AMenu%3Amenu-admin.html.twig/admin/'+(level + 1)+'/';
            else if(row.hasClass('category-t') ) var url = '/admin/category/tree/'+id+'/'+(level + 1)+'/';

            if(row.hasClass("children_visible") ) {
                    removeIdFromCookie(id);
                    // прячем чилдренов
                    row.addClass('children_hidden');
                    row.removeClass('children_visible');
                    $(this).addClass('icon-chevron-right');
                    $(this).removeClass('icon-chevron-down');

                    hideBranch(row);			
            } else {
                    // Отображаем чилдренов
                    addIdToCookie(id);

                    row.addClass('children_visible');
                    row.removeClass('children_hidden');
                    $(this).addClass('icon-chevron-down');				
                    $(this).removeClass('icon-chevron-right');			

                    if(row.next().is(":hidden")) {
                            showBranch(row);	
                    } else {
                            var loadingImage = $(row).find('.loading').show();	
                            $.get(url, function(data) {
                                    $(row).after(data);
                                    loadingImage.hide();
                            });
                    }				
            }
    });
	

    function showBranch(parent) {
            var row = parent.next();
            if(row.attr('type') == 'text/javascript') row = row.next(); 
            var level = extractLevel(parent);
            var expandLevels = [level + 1];		

            while (isRow(row)) {
                    var currentLevel = extractLevel(row);
                    if(currentLevel == undefined) currentLevel = 0; 
                    if (currentLevel <= level) break;

                    row.show();
                    if(row.hasClass("children_hidden")) {
                            row.addClass('children_visible');
                            row.removeClass('children_hidden');			
                            row.find('a.toogle').addClass('icon-chevron-down');
                            row.find('a.toogle').removeClass('icon-chevron-right');
                    }
                    row = row.next();
                    if(row.attr('type') == 'text/javascript') row = row.next(); 
            }
    }

    function hideBranch(parent) {
            var row = parent.next();
            if(row.attr('type') == 'text/javascript') row = row.next(); 
            var level = extractLevel(parent);

            while (isRow(row) && extractLevel(row) > level) {
                    row.hide();
                    removeIdFromCookie(extractId(row));

                    row = row.next();
                    if(row.attr('type') == 'text/javascript') row = row.next(); 
                    //if(row.hasClass("children_visible")) {
                            //removeIdFromCookie(extractId(row));
                            //row.addClass('children_hidden');
                            //row.removeClass('children_visible');

                            //row.find('a.toogle').addClass('icon-chevron-right');
                            //row.find('a.toogle').removeClass('icon-chevron-down');
                    //}
            }
    }

    function extractLevel(row) {
        if ( /level_(\d+)/i.test(row.attr('class')) )
          return parseInt(RegExp.$1);
    }

    function extractId(row) {
        if ( /cat_(\d+)/i.test(row.attr('id')) )
          return parseInt(RegExp.$1);
    }

    function isRow(element) {
            return element && element.has('tr');
    }	

    function addIdToCookie(id) {
            //Попытаемся загрузить существующий массив id из кук
            var ids = $.evalJSON($.cookie('tree_ids'));

            if(ids == null) {
                    ids = $.makeArray([id]);
            } else {
                    // добавив id к существующим
                    if( $.inArray(id, ids) == -1) {
                            ids.push(id);
                    }
            }

            // Сохраним массив в куки
            var idsJSON = $.toJSON(ids);
            $.cookie('tree_ids', idsJSON );
    }
    function removeIdFromCookie(id) {
            //Попытаемся загрузить существующий массив id из кук
            var ids = $.evalJSON($.cookie('tree_ids'));

            if(ids != null) {
                var newIds = [];
                $.each(ids, function(index, value) {
                        if(id != value) newIds.push(value);
                });	
                // Сохраним массив в куки
                var idsJSON = $.toJSON(newIds);
                $.cookie('tree_ids', idsJSON);
            }
    }
	
	/*$('#a_7').trigger('click');
	//$('#a_10').trigger('click');

	setTimeout(function(){
		$('#a_8').trigger('click');
		setTimeout(function(){
			$('#a_11').trigger('click');
		}, 500);
	}, 500);*/


	
	//$('#a_11').trigger('click');
});


