/** *
 * @author Marcin Jedraszczyk
 * Copyright SuperMemo World sp. z o.o., 2003-2008
 */

	var CATEGORY_FORM = "categoryForm";
	
	var categoryData = "";
	var timerInterval = 0;

	function selectTree(selected, unfold)
	{
		var sel2 = getFirstPart(selected);

		var index = findTreeItem(categoryData, selected);
		if(index == -1)
		{
			var index = findTreeItemUnderscore(categoryData, selected);
			if(index != -1) selected = getTreeItem(categoryData, index);
			else selected = "top10";
		}
		buildTree(categoryData, selected, unfold, "categoryPanel-tree", "selectTree");
		
		var c = categoryData[(index * 4) + 2] & 63;

		if(sel2.substring(0, 1) != "-")		// z minusem sa tylko podrozdzialy
		{
			var form = getCategoryForm();
			var input = getInput(form, 'gcid');
			var button = getInput(form, 'button');
			if(input.value != sel2)
			{
				rebuildTree(selected);
				input.value = selected;
				button.click();
			}
		}
		return false;
	}

	function buildAll()
	{
		buildTreeCat(categoryData, "all2", true, "categoryPanel-tree", "selectTree");
	}
	
	function rebuildTree(selected)
	{
		buildTreeCat(categoryData, selected, true, "categoryPanel-tree", "selectTree");
	}

	function findTreeItemUnderscore(data, id)
	{
		var ile = data.length / 4;
		var id2 = getFirstPart(id);

		for(var i = 0; i < ile; i++)
		{
			if(getFirstPart(data[i * 4]) == id2) return i;
		}
		return -1;
	}

	function getTreeItem(data, index)
	{
		return data[index * 4];
	}

	function getFirstPart(text)
	{
		var t = text;
		var pos = text.indexOf("_");
		if(pos > 0) t = text.substring(0, pos);
		return t;
	}
	
	/**
	 * Zwraca formularz obslugujacy drzewo kursu.
	 */
	function getCategoryForm()
	{
		return findForm(CATEGORY_FORM);
	}
	
	/**
	 * Buduje drzewo.
	 * @param treeData - tabela z danymi niezbednymi do zbudowania drzewa
	 * @param selected - zaznaczony wierzcholek drzewa
	 * @param outDivName - obszar, w ktrym ma byc wygenerowane drzewo
	 * @param selectName - nazwa funkcji wywolywanej po kliknieciu na wierzcholek
	 */
	function buildTreeCat(treeData, selected, unfold, outDivName, selectName)
	{
		var element = document.getElementById(outDivName);
		removeChildren(element);
		
		data2 = openBranches(treeData, selected, unfold);

		var imagesUrl = STATIC_URL + '/graphic';
		var ile = treeData.length / 4;
		var history = new Array();
		var oldLevel = 0;
		for(var i = 0; i < ile; i++)
		{
			var a = treeData[i * 4];		// id strony
			var b = treeData[(i * 4) + 1];	// level
			var c2 = treeData[(i * 4) + 2];	// typ ikony
			var c = (c2 & 63);
			var d = treeData[(i * 4) + 3];	// nazwa
			var e = data2[i];
			
			d = decode(d);

			if(selected == a)
			{
				var text = createSpan('treeItemBold', d);
				if(c2 & 4096) text = createSpan('treeItemBoldGrey', d);
				var textOff = createSpan('treeItemBoldOff', d);
				var isSelected = true;
			}
			else
			{
				var text = createSpan('treeItem', d);
				if(c2 & 4096) text = createSpan('treeItemGrey', d);
				var textOff = createSpan('treeItemOff', d);
				var isSelected = false;
//				var text = createSpan('treeItem', d);
//				if(c2 & 4096) text = createSpan('treeItemGrey', d);
//				var textOff = createSpan('treeItemOff', d);
//				var isSelected = false;
			}

			if((b > oldLevel) && (oldLevel > 0))
			{
				if(data2[i - 1] >= 2) history.push(2);
				else history.push(0);
			}
			if(b < oldLevel)
			{
				for(var k = 0; k < (oldLevel - b); k++) history.pop();
			}
			oldLevel = b;

			var l = history.length;
			for(var k = 0; k < l; k++)
			{
				switch(history[k])
				{
					case 0:
						image = createImage('imT', imagesUrl + '/tree/tree_null.gif', '');
						element.appendChild(image);
						break;
					
					case 1:
						image = createImage('imT', imagesUrl + '/tree/tree_branch1.gif', '');
						element.appendChild(image);
						break;
					
					case 5:
					case 2:
						image = createImage('imT', imagesUrl + '/tree/tree_branch2.gif', '');
						element.appendChild(image);
						break;
				}
			}

			switch(c)
			{
				case 40:	// TYPE_FLAG_BRANCH
					if(c == 40)
					{
						var img2 = getImg2('tree/flag', c2, isSelected);
					}
					// kontynuuj*/
					
				case 1:		// TYPE_BRANCH
					if(c == 1)
					{
						var img2 = getImg2('tree/chapter', c2, isSelected);
					}
					// kontynuuj
					
				case 17:	// TYPE_EXAM_GROUP
					if(c == 17)
					{
						var img2 = getImg2('tree/exam', c2, isSelected);
					}
					// kontynuuj

				case 10:	// TYPE_EXAM_BRANCH
					if(c == 10)
					{
						var img2 = getImg2('tree/exam', c2, isSelected);
						
					}
					// kontynuuj

				case 46:	// TYPE_GROUP_BRANCH
					if(c == 46)
					{
						var img2 = getImg2('tree/exam', c2, isSelected);
					}
					// kontynuuj
					
				case 0:		// TYPE_ROOT
					if(c == 0) 
					{
						var img2 = getImg2('tree/plan', c2, isSelected);
						//var img2 = getImg('tree/item_root', c2);
					}
					// kontynuuj

					switch(e)
					{
						default:
							var img1 = 'tree/tree_branch3_close.gif';
							break;

						case 1:
							var img1 = 'tree/tree_branch3_open.gif';
							break;

						case 2:
							var img1 = 'tree/tree_branch1_close.gif';
							break;

						case 3:
							var img1 = 'tree/tree_branch1_open.gif';
							break;
					}
					
					var res = "true";
					if(selected == a)
					{
						if((e == 1) || (e == 3)) res = "false";
					}
					if((c2 & 256) || ((parseInt(a) < 0) && ((e == 1) || (e == 3))))
					{
						if(b > 0) 
						{
							element.appendChild(createImage('imT', imagesUrl + '/' + img1, ''));
						} 
						element.appendChild(createImage('im', imagesUrl + '/' + img2, ''));
						element.appendChild(textOff);
						element.appendChild(createBreak());
					}
					else
					{
						if(b > 0)
						{
							if((e & 1) == 0)
							{
								anchor = createAnchor('aTree', 'http://'+window.location.hostname+'/category/'+a, trimer(d));
//								anchor.onclick = new Function('return ' + selectName + '(\'' + a + '\', ' + res + ');');
								anchor.appendChild(createImage('imT', imagesUrl + '/' + img1, ''));
								element.appendChild(anchor);
							}
							else 
							{
								element.appendChild(createImage('imT', imagesUrl + '/'+ img1, ''));
							}

							if(parseInt(a) < 0)
							{
								l = i;
								do
								{
									l = l + 1;
									if(l < ile) a = treeData[l * 4];
									else break;
								} while(parseInt(a) < 0)
							}
						}
						
						anchor = createAnchor('aTree', 'http://'+window.location.hostname+'/category/'+a, trimer(d));
//						anchor.onclick = new Function('return ' + selectName + '(\'' + a + '\', ' + res + ');');
						anchor.appendChild(createImage('im', imagesUrl + '/' + img2, ''));
						anchor.appendChild(text);
						element.appendChild(anchor);
						element.appendChild(createBreak());
					}
					break;

				case 2:		// TYPE_PRES
					if(c == 2)
					{
						var img2 = getImg2('tree/pres', c2, isSelected);
					}
					// kontynuuj

				case 3:		// TYPE_QA
					if(c == 3)
					{
						var img2 = getImg2('tree/exrep', c2, isSelected);
					}
					// kontynuuj

				case 11:	// TYPE_EXAM_PRES
					if(c == 11)
					{
						var img2 = getImg2('tree/exampres', c2, isSelected);
					}
					// kontynuuj

				case 12:	// TYPE_EXAM_TEST
					if(c == 12)
					{
						var img2 = getImg2('tree/examtest', c2, isSelected);
					}
					// kontynuuj
					
				case TYPE_OLD_DRILL:
					if(c == TYPE_OLD_DRILL)
					{
						var img2 = getImg2('tree/plandrill', c2, isSelected);
					}
					// kontynuuj
					
				case TYPE_DRILL:
					if(c == TYPE_DRILL)
					{
						var img2 = getImg2('tree/plandrill', c2, isSelected);
					}
					// kontynuuj
					
				case TYPE_REPETITIONS:
					if(c == TYPE_REPETITIONS)
					{
						var img2 = getImg2('tree/planreps', c2, isSelected);
					}
					// kontynuuj
					
				case TYPE_NEW_MATERIAL:
					if(c == TYPE_NEW_MATERIAL)
					{
						var img2 = getImg2('tree/plannew', c2, isSelected);
					}
					// kontynuuj
					
				case 41:	// TYPE_FLAG
					if(c == 41)
					{
						var img2 = getImg2('tree/flag', c2, isSelected);
					}
					// kontynuuj
					
				case 20: case 21: case 22: case 23: case 24: case 26: case 28:
					if(c >= 20 && c <= 28) 
					{
						var img2 = getImg2('tree/course', c2, isSelected);
					}

				case 44:	
					if(c == 44)
					{
						var img2 = getImg2('tree/exonce', c2, isSelected);
					}
					// kontynuuj				

					if(e >= 2) var img1 = 'tree/tree_branch1.gif';
					else var img1 = 'tree/tree_branch3.gif';
					element.appendChild(createImage('imT', imagesUrl + '/' + img1, ''));

					
					if (c2 & TYPE_CLICKABLE){
						anchor = createAnchor('aTree', 'http://'+window.location.hostname+'/category/'+a, trimer(d));
//						anchor = createAnchor('aTree', '#', trimer(d));
//						anchor.onclick = new Function('return ' + selectName + '(\'' + a + '\', ' + 'true' + ');');
						anchor.appendChild(createImage('im', imagesUrl + '/' + img2, ''));
						anchor.appendChild(text);
						element.appendChild(anchor);
						element.appendChild(createBreak());
					} 
					else if((c2 & TYPE_NOT_CLICKABLE) || (selected == a)){
						element.appendChild(createImage('im', imagesUrl + '/' + img2, ''));
						element.appendChild(textOff);
						element.appendChild(createBreak());
					}
					else
					{
						anchor = createAnchor('aTree', 'http://'+window.location.hostname+'/category/'+a, trimer(d));
//						anchor = createAnchor('aTree', '#', trimer(d));
//						anchor.onclick = new Function('return ' + selectName + '(\'' + a + '\', ' + res + ');');
						anchor.appendChild(createImage('im', imagesUrl + '/' + img2, ''));
						anchor.appendChild(text);
						element.appendChild(anchor);
						element.appendChild(createBreak());
					}
					break;

				default:
					//alert("Error - TreeRenderer.js: c = "+ c);
					break;
			}
			
			cutText(text, b);
			cutText(textOff, b);
			
			if(((c == 1) || (c == 10) || (c == 40) || (c == 46) || (c == 17) || (c == TYPE_NEW_MATERIAL) || (c == TYPE_REPETITIONS)) &&
			   ((e == 0) || (e == 2)))
			{
				do
				{
					i++;
				} while((treeData[(i * 4) + 1] > b) && (i < ile))
				i--;
			}
		}
		return false;
	}
