function getCookie( name ) {    var start = document.cookie.indexOf( name + "=" );    var len = start + name.length + 1;    if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {        return null;    }    if ( start == -1 ) return null;    var end = document.cookie.indexOf( ';', len );    if ( end == -1 ) end = document.cookie.length;    return unescape( document.cookie.substring( len, end ) );} function setCookie( name, value, expires, path, domain, secure ) {    var today = new Date();    today.setTime( today.getTime() );    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' : '' );}/* // настройки хранить в Cookies 1 деньfunction setCookie(name, value){ var DAY = 24 * 60 * 60 * 1000; var date = new Date(); date.setTime(date.getTime() + (1 * DAY)); // 1 день $.cookie(name, value, {expires: date}); // alert("Cookie set: "+name+"="+value);} */function deleteCookie( name, path, domain ) {    if ( getCookie( name ) ) document.cookie = name + '=' +            ( ( path ) ? ';path=' + path : '') +            ( ( domain ) ? ';domain=' + domain : '' ) +            ';expires=Thu, 01-Jan-1970 00:00:01 GMT';}// подготовка информации о сосотояниях узлов// (возвращает строку с ИД открытых узлов через ",") function GetOpenedNodes(items){ var str = []; $(items).each(function() {  var res = $(this).attr('id');  var state = $(this).hasClass('ExpandOpen') ? 1 : '';  if(res && state){   str.push(res);  } }); return str.join(',');}function tree(id, url) {		var element = document.getElementById(id)	function hasClass(elem, className) {		return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className)	}	function toggleNode(node) {		// определить новый класс для узла		var newClass = hasClass(node, 'ExpandOpen') ? 'ExpandClosed' : 'ExpandOpen'		// заменить текущий класс на newClass		// регексп находит отдельно стоящий open|close и меняет на newClass		var re =  /(^|\s)(ExpandOpen|ExpandClosed)(\s|$)/		node.className = node.className.replace(re, '$1'+newClass+'$3')				// после переключения запишем все открытые узлы в строку и сохраним в куки		var open_id = GetOpenedNodes($('#tree li')) || null;				setCookie('open_id', open_id);	}	function load(node) {		function showLoading(on) {			var expand = node.getElementsByTagName('DIV')[0]			expand.className = on ? 'ExpandLoading' : 'Expand'		}		function onSuccess(data) {			if (!data.errcode) {				onLoaded(data)				showLoading(false)			} else {				showLoading(false)				onLoadError(data)			}		}		function onAjaxError(xhr, status){			showLoading(false)			var errinfo = { errcode: status }			if (xhr.status != 200) {				// может быть статус 200, а ошибка				// из-за некорректного JSON				errinfo.message = xhr.statusText			} else {				errinfo.message = 'Некорректные данные с сервера'			}			onLoadError(errinfo)		}		function onLoaded(data) {			for(var i=0; i<data.length; i++) {								var child = data[i]				var li = document.createElement('LI')				li.id = child.id				li.className = "Node Expand" + (child.isFolder ? 'Closed' : 'Leaf')				if (i == data.length-1) li.className += ' IsLast'				li.innerHTML = '<div class="Expand"></div><div class="Content"><a href="./index.php?menu_id=2&group_id='+child.id+'">'+child.title+'</a></div>'				if (child.isFolder) {					li.innerHTML += '<ul class="Container"></ul>'				}				node.getElementsByTagName('UL')[0].appendChild(li)			}			node.isLoaded = true			toggleNode(node)		}		function onLoadError(error) {			var msg = "Ошибка "+error.errcode			if (error.message) msg = msg + ' :'+error.message			alert(msg)		}		showLoading(true)		$.ajax({			url: url + '?id=' + node.id,			data: node.id,			dataType: "json",			success: onSuccess,			error: onAjaxError,			cache: true		})	}	element.onclick = function(event) {						event = event || window.event		var clickedElem = event.target || event.srcElement		if (!hasClass(clickedElem, 'Expand')) {			return // клик не там		}		// Node, на который кликнули		var node = clickedElem.parentNode		if (hasClass(node, 'ExpandLeaf')) {			return // клик на листе		}				if (node.isLoaded || node.getElementsByTagName('LI').length) {			// Узел уже загружен через AJAX(возможно он пуст)			toggleNode(node)			return		}		if (node.getElementsByTagName('LI').length) {			// Узел не был загружен при помощи AJAX, но у него почему-то есть потомки			// Например, эти узлы были в DOM дерева до вызова tree()			// Как правило, это "структурные" узлы			// ничего подгружать не надо			toggleNode(node)			return		}				// загрузить узел		load(node)	}}function openNodes(){  // читаем куки и открываем узлы var open_nodes = getCookie("open_id");//$.cookie("open_id");//getCookie("open_id");  if(open_nodes) {  var nodes = open_nodes.split(',');    if(nodes[0]){   for(var node in nodes){    nodes[node] = '#' + nodes[node];    }      var ids = nodes.join(',');   $(ids).each(function() {	 	 newClass = 'ExpandOpen';	 var re =  /(^|\s)(ExpandOpen|ExpandClosed)(\s|$)/	 this.className = this.className.replace(re, '$1'+newClass+'$3')   });  } }  return false;}