/*Функция hasClass проверяет наличие свойства у элемента*/
function hasClass(elem, className) {
	if (typeof(elem)=='object') {
	    if (typeof(className)!='undefined') {
		return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className);
	    }
	}
	else {
		alert('hasClass. Element error '+typeof(elem));
	}
}/*hasClass*/
/* object for goods tree */
var mds_GoodsGroupTree = new Object();
/*Определение свойств объекта*/
mds_GoodsGroupTree.element='';
mds_GoodsGroupTree.elementID='';
mds_GoodsGroupTree.rootEl='';
mds_GoodsGroupTree.rootElID='mdsTreeRootEl';
/*Определение методов объекта*/
mds_GoodsGroupTree.setTargetEl=function (id) {
	mds_GoodsGroupTree.elementID = id;
	mds_GoodsGroupTree.element = document.getElementById(mds_GoodsGroupTree.elementID);
	/*mds_GoodsGroupTree.rootElID='mdsTreeRootEl';*/
	mds_GoodsGroupTree.rootEl = document.getElementById(mds_GoodsGroupTree.rootElID);
	/*Код конструктора*/
	if (typeof(mds_GoodsGroupTree.element)==='object'){
		/*Назначим обработчик события*/
		var el=document.getElementById(mds_GoodsGroupTree.elementID);
		mds_GoodsGroupTree.element.onclick = mds_GoodsGroupTree.onEvent;
	}
	else {
		alert('Target element not found! '+'Type of el = '+typeof(mds_GoodsGroupTree.element));
	}
}
mds_GoodsGroupTree.getLevel=function (inId) {
	if (!isNaN(inId)) {
		/*Ищем узел*/
		node=mds_GoodsGroupTree.element.getElementById(inId);
	}
	else {
	    if (typeof(inId)=='object'){
		node=inId;
	    }
	}
	if (typeof(node)=='object') {
	}
}; /*getLevel*/
mds_GoodsGroupTree.getElem=function(elId) {
	/*Найти элемент по идентификатору
	Если элемент в дереве отсутствует, то он будет загружен*/
	var res=false;
	if (mds_goodsID_correct(elId)) {
		/*Ищем в дереве*/
		var existEl=document.getElementById(elId);
		if (typeof(existEl)=='object') {
			if (existEl.id==elId){
				res=existEl;
			}
		}
		if (!res) {
			/*Требуется загрузка*/
		}
	}
	return res;
}
mds_GoodsGroupTree.addElem=function(elId, elName, parentId, isFolder, isLast) {
	var res=false;
	var newElem=false;
  if (mds_goodsID_correct(elId)) {
	/*Проверяем наличие элемента*/
	newElem=document.getElementById(elId);
	if (typeof(newElem)=='object') {
	    try {
		if (typeof(newElem.id)!='undefined') {
			if (newElem.id==elId) {
				/*Элемент уже существует*/
				return(newElem);
			}
		}
	    }
	    catch (e) {
	    }
	}
    if (!elName|!parentId) {
      /*We have to load element and branch*/
      
    }
	if (!mds_goodsID_correct(parentId)) {
		/*Если нет корректного ID для родительского элемента, то добавляем на первый уровень*/
		var parentEl=mds_GoodsGroupTree.rootEl;
	}
	else {
		var parentEl=document.getElementById(parentId);
	}
    if (parentEl){
		var parentContainer=parentEl.getElementsByTagName('ul');
		var li = document.createElement('LI');
		li.id=elId;
			li.isFolder=isFolder;
			li.parentId=parentId;
			li.className = "Node Expand" + (li.isFolder ? 'Closed' : 'Leaf');
		if (isLast){
			li.className += ' IsLast';
		}
		if (parentEl==mds_GoodsGroupTree.rootEl) {
		  /*First level*/
		  li.className += ' FirstLevel';
		}
		li.innerHTML = '<div class="Expand"></div><div class="Content" onclick="showTreeContent('+elId+')">'+elName+'</div>';
		if (li.isFolder) {
			li.innerHTML += '<ul class="Container"></ul>';
		}    
		parentEl.isFolder=1;
			parentContainer[0].appendChild(li);
	}
  }
  return res;
}
mds_GoodsGroupTree.toggleNode=function(node) {
	if (!isNaN(node)) {
        	/*Ищем узел*/
        	if (typeof(mds_GoodsGroupTree.element)!='object') mds_GoodsGroupTree.setTargetEl(mds_GoodsGroupTree.elementID);
        	if (typeof(mds_GoodsGroupTree.element)!='object') alert('Cannot work with ');
        	/*else alert(this.element.id);*/
		node=document.getElementById(node);
	}
	if (typeof(node)=='object') {
    	    // определить новый класс для узла
		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')
	}
	else {
		alert('mds_GoodsGroupTree.toggleNode. Node error '+typeof(node)+' Value='+trim(node));
	}
}
mds_GoodsGroupTree.openNode=function(node) {
  if (!node){
    if (typeof(currentGoods)!='undefined'){
      node=currentGoods;
    }
  }
	if (!isNaN(node)) {
		var goodsID=node;
		if (mds_GoodsGroupTree.rootElID==goodsID) {
		  node=mds_GoodsGroupTree.rootEl;
		}
		else {
		if (mds_goodsID_correct(goodsID)) {
        	/*Ищем узел*/
		node=document.getElementById(goodsID);
		if (!node){
		  /*We have to add element*/
		  mds_GoodsGroupTree.addNode(goodsID, 'loading', false, false, false);
		}
		}
		}
	}
	if (typeof(node)!='object') {
	    node=mds_GoodsGroupTree.rootEl;
	}
	if (typeof(node)=='object') {
	    
	    if (mds_goodsID_correct(node.id)){
    	    // определить новый класс для узла
    	    if (typeof(node.className)!='undefined') {
		var newClass = 'ExpandOpen';
		// заменить текущий класс на newClass
		// регексп находит отдельно стоящий open|close и меняет на newClass
		var re =  /(^|\s)(ExpandOpen|ExpandClosed)(\s|$)/
		node.className = node.className.replace(re, '$1'+newClass+'$3');
	    }
	    }
	    if (typeof(node.parentNode)=='object') {
		if (node.id!=mds_GoodsGroupTree.rootElID){
	    	    mds_GoodsGroupTree.openNode(node.parentNode);
	    	}
	    }
	    mds_GoodsGroupTree.rootEl=document.getElementById(mds_GoodsGroupTree.rootElID);
	    mds_GoodsGroupTree.rootEl.className=mds_GoodsGroupTree.rootEl.className.replace(re, '$1'+newClass+'$3');
	}
	else {
		alert('mds_GoodsGroupTree.openNode. Node error '+typeof(node)+'. ');
	}
}
mds_GoodsGroupTree.load=function (node) {
	if (!isNaN(node)) {
    	    /*Ищем узел*/
	    node=document.getElementById(node);
	}
	else {
	    if (typeof(node)!='object') {
	        node=mds_GoodsGroupTree.rootEl;
		/*mdsShowClocks(mds_GoodsGroupTree.rootEl,'Goods tree now loading...');*/
	    }
	}
	if (typeof(node)!=='undefined') {
		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 = ' Некорректные данные с сервера. Код запроса: '+node.id;
			}
			onLoadError(errinfo)
		}
		function onLoadedold(data) {
			var msg='Data length = '+data.length+' content : ';
			for(var i=0; i<data.length; i++) {
				var child = data[i]
				msg=msg+'id='+child.id+' name='+child.title+' ';
				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" onclick="showTreeContent('+child.id+')">'+"("+child.id+") "+child.title+'</div>';
				if (child.isFolder) {
					li.innerHTML += '<ul class="Container"></ul>'
				}
				node.getElementsByTagName('UL')[0].appendChild(li)
			}
			//alert(msg);
			node.isLoaded = true;
			mds_GoodsGroupTree.toggleNode(node);
		}
		function onLoaded(data) {
			for(var i=0; i<data.length; i++) {
				var child = data[i];
				var isLast = false;
				if (i == data.length-1) isLast=true;
				mds_GoodsGroupTree.addElem(child.id, child.title, node.id,  child.isFolder, isLast);
			}
			node.isLoaded = true;
			mds_GoodsGroupTree.toggleNode(node);
		}
		function onLoadError(error) {
			var msg = "Ошибка "+error.errcode
			if (error.message) msg = msg + ' :'+error.message
			alert(msg)
		}
		/*Загрузка элемента*/
		showLoading(true);
		var reqData= {mdsAction: 'getGoodsGroup', id: parseInt(node.id), includeGoods: 0, cntxObjID: getCntxID()}
		jQuery.ajax({
			url: mds_parserURL,
			data: reqData,
			dataType: "json",
			success: onSuccess,
			error: onAjaxError,
			cache: false
		})
	}
	else {
		alert('mds_GoodsGroupTree.load. Node error '+typeof(node)+' Value '+trim(node));
	}
}
mds_GoodsGroupTree.onEvent=function(ev) {
	var clickedElem;
	ev = ev || window.event;
	if (typeof(ev)=='object'){
		/*alert('Event target type is '+typeof(ev));*/
		if (typeof(ev.srcElement)=="object"){
			clickedElem = ev.srcElement;
		}
		else {
			if (typeof(ev.target)=='object'){
				clickedElem = ev.target;
			}
			else {
				alert('Unknown event target!');
			}
		}
		if (!hasClass(clickedElem, 'Expand')) {
			return; // клик не там
		}
		// Node, на который кликнули
		var node = clickedElem.parentNode
		if (hasClass(node, 'ExpandLeaf')) {
			return; // клик на листе
		}
		if (node.isLoaded || node.getElementsByTagName('LI').length) {
			// Узел уже загружен через AJAX(возможно он пуст)
			mds_GoodsGroupTree.toggleNode(node);
			return;
		}
		if (node.getElementsByTagName('LI').length) {
			// Узел не был загружен при помощи AJAX, но у него почему-то есть потомки
			// Например, эти узлы были в DOM дерева до вызова tree()
			// Как правило, это "структурные" узлы
			// ничего подгружать не надо
			mds_GoodsGroupTree.toggleNode(node);
			return;
		}
		// загрузить узел
		/*if (typeof(this.load)!='undefined'){*/
			mds_GoodsGroupTree.load(node);
		/*}
		else {
			alert('Method load is '+typeof(this.load)+' Target element for tree is '+this.elementID);
		}*/
		}
	}

