var selected_node = null;

function unSelectedNode(){ 
	if (selected_node != null) {
		if (!hasClass(selected_node, 'MenuLeftAct')) {
			selected_node.getElementsByTagName("div")[1].className = 'NodeContent';
		} else {
			selected_node.className = 'MenuLeft';
		}
		selected_node = null;
	}
}

function SelectedNode(n){ 
	selected_node = n;
	if (selected_node.id.indexOf("cen") == -1) {
		selected_node.getElementsByTagName("div")[1].className = 'NodeContentAct';
	} else {
		selected_node.className = 'MenuLeftAct';
	}
}

treeview = {
	firstload		:false,
	showLoad		:true,
	node			:null,
	root			:null,
	url				:null,
	
	init			:function(r, u) {
		this.root = r;
		this.url = u;
		this.root.onclick = function(event) {event = event || window.event;treeview.mouseclick(event)}
	},
	
	mouseclick		:function(e) {
		var clickedElem = e.target || e.srcElement;
		if (hasClass(clickedElem, 'NodeContent')) {
			center("Center",clickedElem.parentNode.id,0,0, "data.php");
			$('html,body').animate({scrollTop: $("#TDTopLogo").offset().top},'slow');
			return // клик на листе
		}

		if (!hasClass(clickedElem, 'Expand')) {
			return // клик не там
		}

		// Node, на который кликнули
		var node = clickedElem.parentNode
		if (hasClass(node, 'ExpandLeaf')) {
			return // клик на листе
		}

		if (node.isLoaded || node.getElementsByTagName('LI').length) {
			// Узел уже загружен через AJAX(возможно он пуст)
			treeview.toggleNode(node)
			return
		}


		if (node.getElementsByTagName('LI').length) {
			// Узел не был загружен при помощи AJAX, но у него почему-то есть потомки
			// Например, эти узлы были в DOM дерева до вызова tree()
			// Как правило, это "структурные" узлы
			// ничего подгружать не надо
			treeview.toggleNode(node)
			return
		}



		// загрузить узел
		treeview.load("id="+node.id,node,true,false)


	},
	
	hasClass		:function(elem, className) {
		return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className)
	},
	toggleNode		:function(n) {
		// определить новый класс для узла
		var newClass = treeview.hasClass(n, 'ExpandOpen') ? 'ExpandClosed' : 'ExpandOpen';
		// заменить текущий класс на newClass
		// регексп находит отдельно стоящий open|close и меняет на newClass
		var re =  /(^|\s)(ExpandOpen|ExpandClosed)(\s|$)/
		n.className = n.className.replace(re, '$1'+newClass+'$3')
	},
	showLoading		:function (on) {
		if (this.showLoad) {
			var expand = this.node.getElementsByTagName('DIV')[0]
			expand.className = on ? 'ExpandLoading' : 'Expand'
		}
	},
	
	onLoaded		:function (data) {
		for(var i=0; i<data.length; i++) {
			var child = data[i]
			var li = document.createElement('LI')
			li.id = child.id

			if (this.firstload) 
				li.className = "Node IsRoot"
			else
				li.className = "Node Expand" + (child.isFolder ? 'Closed' : 'Leaf')
			if (i == data.length-1) li.className += ' IsLast'

			if (this.firstload) {
				if (!child.isFolder) li.className += ' ExpandLeaf';
				li.className += ' ExpandClosed';
			}
				
			li.innerHTML = '<div class="Expand"></div><div class="NodeContent">'+child.title+'</div>';
			if (child.isFolder) {
				li.innerHTML += '<ul class="Container"></ul>'
			}
			if (this.firstload) 
				this.node.appendChild(li)
			else
				this.node.getElementsByTagName('UL')[0].appendChild(li);
		}
		this.node.isLoaded = true;
		treeview.toggleNode(this.node);
	},

	onSuccess		:function (data) {
		if (!data.errcode) {
			treeview.onLoaded(data);
			treeview.showLoading(false,this.showLoad);
		} else {
			treeview.showLoading(false,this.showLoad)
			treeview.onLoadError(data)
		}
	},
	
	onAjaxError		:function (xhr, status){
		showLoading(false,showLoad)
		var errinfo = { errcode: status }
		if (xhr.status != 200) {
			// может быть статус 200, а ошибка
			// из-за некорректного JSON
			errinfo.message = xhr.statusText
		} else {
			errinfo.message = 'Некорректные данные с сервера'
		}
		onLoadError(errinfo)
	},
	
	onLoadError		:function (error) {
		var msg = "Ошибка "+error.errcode
		if (error.message) msg = msg + ' :'+error.message
		alert(msg)
	},
	
	load			:function(par,n,show,first) {
		this.firstload = first;
		this.showLoad = show;
		this.node = n;
		treeview.showLoading(true);
		$.ajax({
			url: this.url,
			data: par,
			async: false,
			dataType: "json",
			success: this.onSuccess,
			error: this.onAjaxError,
			cache: false
		})
	}
}


function overMap(img, imageObject){
	document.images[img].src = imageObject;
}

function showLoadingCont(on) {
	if (on) {
		var w, h; // Объявляем переменные, w - длина, h - высота
		w = (window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth));
		h = (window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight));
		ctrl = document.getElementById("loadcont");
		ctrl.style.top=Math.round(h / 2 + 50 + document.documentElement.scrollTop)+"px";
		ctrl.style.left = Math.round(w / 2	+ 100 + document.documentElement.scrollLeft)+"px";
		ctrl.style.visibility='visible';
	} else {
		ctrl = document.getElementById("loadcont");
		ctrl.style.visibility='hidden';
	}
}

function hasClass(elem, className) {
	return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className)
}

function center(id, cat, page, good, url) {
	var element = document.getElementById(id)

	function load() {

		function onSuccess(data) {

			if (!data.errcode) {
				onLoaded(data)
				showLoadingCont(false)
			} else {
				showLoadingCont(false)
				onLoadError(data)
			}
		}


		function onAjaxError(xhr, status){
			showLoadingCont(false)
			var errinfo = { errcode: status }
			if (xhr.status != 200) {
				// может быть статус 200, а ошибка
				// из-за некорректного JSON
				errinfo.message = xhr.statusText
			} else {
				errinfo.message = 'Некорректные данные с сервера'
			}
			onLoadError(errinfo)
		}


		function onLoaded(data) {
//			document.getElementById("Navigation").innerHTML = nav[1];
			document.getElementById("answer").innerHTML = data;
			document.getElementById("Navigation").innerHTML = document.getElementById("__nav__").innerHTML;
			document.getElementById("PageActB1").innerHTML = document.getElementById("__zag__").innerHTML;
			tr = document.getElementById("__tree__").innerHTML;
			selected = document.getElementById("__sel__").innerHTML;
			if (tr != '') {
				var reg = /\d+/g;
				for (i=0;i<tr.match(reg).length;i++) {
//					alert(tr.match(reg)[i]);
					// загрузить узел
					var node = document.getElementById(tr.match(reg)[i]);
					if (!node.getElementsByTagName('LI').length) 
						treeview.load("id="+tr.match(reg)[i],node,true,false)
//					document.getElementById(tr.match(reg)[i]).getElementsByTagName("div")[0].dispatchEvent(clickEvent);
//					document.getElementById(tr.match(reg)[i]).getElementsByTagName("div")[0].click;
//					$("div:first","#"+tr.match(reg)[i]).click();
				}
			}
			if (selected != '') {
				unSelectedNode();
				SelectedNode(document.getElementById(selected));
//				$("div:first.NodeContent","#"+selected).addClass("NodeContentAct");
//				$("div:first.NodeContent","#"+selected).removeClass("NodeContent");
			}
			element.innerHTML = document.getElementById("__cont__").innerHTML;
			pages = document.getElementById("pages");
			if (pages) document.getElementById("pagesup").innerHTML = pages.innerHTML;
		}

		function onLoadError(error) {
			var msg = "Ошибка "+error.errcode
			if (error.message) msg = msg + ' :'+error.message
			alert(msg)
		}
		showLoadingCont(true)
		par = "";
		if (cat != 0) par = par + "cen="+cat;
		if (page != 0) par = par + "&page="+page;
		if (good != 0) par = par + "&good="+good;
		$.ajax({
			url: url,
			data: par,
			async: false,
			dataType: "html",
			success: onSuccess,
			error: onAjaxError,
			cache: false
		})
	}
	element.onclick = function(event) {
		event = event || window.event;
		var clickedElem = event.target || event.srcElement;
		if (hasClass(clickedElem, 'GoodsPage')) {
			page = clickedElem.innerHTML;
			$('html,body').animate({scrollTop: $("#TDTopLogo").offset().top},'slow');
			center("Center", cat, page, good, "data.php");
			return // клик на листе
		}

		if (!hasClass(clickedElem, 'Expand')) {
			return // клик не там
		}

		// Node, на который кликнули
		if (hasClass(node, 'ExpandLeaf')) {
			return // клик на листе
		}

	}
//	alert(id+","+cat+","+page+","+good);
	load();

}
function Navigation(id) {
	var element = document.getElementById(id)

	element.onclick = function(event) {
		event = event || window.event;
		var clickedElem = event.target || event.srcElement;
		if (hasClass(clickedElem, 'tree_nav')) {
/*			alert(selected_node);
			unSelectedNode();
			alert(selected_node);
			SelectedNode(document.getElementById(id_c));*/
			id_c = clickedElem.id.match(/\d+/g);
			center("Center",id_c, 0, 0, "data.php");
			$('html,body').animate({scrollTop: $("#TDTopLogo").offset().top},'slow');
			
			return // клик на листе
		}
	}
}

function firstload() {
	id = "tree";
	treeview.init(document.getElementById(id),"data.php");
	treeview.load("id="+id,document.getElementById(id),false,true);
	Navigation("Navigation");
	href = document.location.href;
	if (href.indexOf("id=") > -1) {
		good = href.substr(href.indexOf("id=")+3);
		center('Center',0,0,good, 'data.php');
	} else
		center('Center',-1,0,0, 'data.php');

}

var photowind;
              function openphotowindow(dst_url)
              {
                photowind=window.open(dst_url,"photo","resizable=yes, height=500, width=600, location=no, menubar=no, status=no, toolbar=no, scrollbars=yes");
				
                photowind.focus();
              }
var whiteMap = new Image;
whiteMap.src = "/img/map/map22w.gif";
var blueMap = new Image;
blueMap.src = "/img/map/map22.gif";
function overMap(img, imageObject){
	document.images[img].src = imageObject;
}
function outMap(img, imageObject){
	document.images[img].src = imageObject;
}
function findNode(startingNode, tagName)
{
  //
  // on Firefox, the TD node might not be the firstChild node of the TR node
  //
  myElement=startingNode;
  var i=0;
  while (myElement && (!myElement.tagName ||
   (myElement.tagName && myElement.tagName!=tagName)))
  {
    myElement=startingNode.childNodes[i];
    i++;
  }
  if (myElement && myElement.tagName && myElement.tagName==tagName)
  {
    return myElement;
  }
  //
  // on IE, the TD node might be the firstChild node of the TR node
  //
  else if (startingNode.firstChild)
      return findNode(startingNode.firstChild, tagName);
  return 0;
}
function setRowColor(myElement, Color)
{
  while (myElement && (myElement.tagName && myElement.tagName!="TR") ||
  !myElement.tagName)
  {
    myElement=myElement.parentNode;
  }
  //
  // If you don t want a particular row to be highlighted, set it s id to
  // "header"
  //
  if (!myElement || (myElement && myElement.id && myElement.id=="header") )
    return;
  //
  // Highlight every cell on the row
  //
  if (myElement)
  {
    var tableRow=myElement;
    //
    // myElement is a <TR>, then find the first TD
    //
    var tableCell=findNode(myElement, "TD");
    //
    // Loop through every sibling (a sibling of a cell should be a cell)
    // We then highlight every siblings
    //
    while (tableCell)
    {
      //
      // Make sure it s actually a cell (a TD)
      //
      if (tableCell.tagName=="TD")
      {
        //
        // Assign the background color
        //
		if (!hasClass(tableCell,"photo"))
        tableCell.style["backgroundColor"]=Color;
      }
      //
      // Go to the next cell in the row
      //
      tableCell=tableCell.nextSibling;
    }
  }
}

function show_tip(ev,tit,txt,w,h) 
{
MouseX = ev.clientX + document.body.scrollLeft;
MouseY = ev.clientY + document.body.scrollTop;
obj = document.getElementById("tip");
obj2=document.getElementById("intip");
obj2.innerHTML="<h4>"+tit+"</h4>"+txt;
obj.style.width = w;
obj.style.height = h;
obj.style.top = MouseY + 10;
obj.style.left = MouseX + 10;
obj.style.visibility = "visible";
}

function hide_tip()
{
document.getElementById("tip").style.visibility="hidden";
}



