function addEvent(obj, evType, fn){
	if(obj.addEventListener)obj.addEventListener(evType,fn,true)
	if(obj.attachEvent)obj.attachEvent("on"+evType,fn)
}
function getSource(e){
	if(typeof e=='undefined')var e=window.event;
	var source=typeof e.target!='undefined'?e.target:typeof e.srcElement!='undefined'?e.srcElement:true
	if(source.nodeType == 3)source=source.parentNode;
	return source
}

function initList(u){
	var lis=u.childNodes
	for(ii=0;ii<lis.length;ii++)
		if(lis[ii].nodeType==1 && lis[ii].getElementsByTagName("ul").length>0){
			lis[ii].className="node_folder_closed"
			addEvent(lis[ii].getElementsByTagName("span")[0],"click",clicado)
			if(lis[ii].getElementsByTagName("span")[0] && lis[ii].getElementsByTagName("span")[0].className=="root")
			lis[ii].className="node_folder_opened"
		}
  var us=u.getElementsByTagName("ul")
  for(var i=0;i<us.length;i++)
    initList(us[i])
}

function inittree(){
	var sm = $("sitemap")
	if(sm) initList(sm)
}

function clicado(e){
	var li=getSource(e).parentNode
	li.className=li.className=="node_folder_closed"?"node_folder_opened":"node_folder_closed"
	return false
}

addEvent(window,"load",inittree)


function initLinksArvore(){
	var arvore=document.getElementById("arvore");
	var links=arvore.getElementsByTagName("a");
	//Atribui o evento, percorrendo lista de links
	for(var i=0;i<links.length;i++) {
		if(links[i].className == "btexpande" || links[i].className == "btcontrai"){
			links[i].onclick=expandClick;
		}
	}
}

function criaItemArvore(id, contador, tipo) {
	
		var li = document.createElement("li");
		
		li.setAttribute("id", "nivel_" + id + "_" + contador);
		if(tipo=="content" || tipo=="resource" || tipo=="user") {			
			li.setAttribute('class', 'node_content');
			li.setAttribute("id", "nivel_" + id + "_" + contador);
			li.className = "node_content";			
		} else if (tipo=="folder") {
			li.setAttribute("class", "node_folder");
			li.className = "node_folder";
			li.setAttribute("id", "nivel_" + id + "_" + contador);
			li.setAttribute("value", 0);
		}		
		return li;
		alert(id)
	}
	/*cria um link para o objeto da ï¿½rvore*/
	function criaLinkArvore(po, contador, tipo) {
		DWREngine.setAsync(false);
		
		var selectObj = document.createElement("a");
		var parent_id = null;
		if(po.parent != null) {
			parent_id = po.parent.id;
		}
		
		coreService.getFriendlyLinkById(po.id, {
			callback:function(dataFromServer) {
				selectObj.setAttribute("href", dataFromServer);
			}
		});
		
		selectObj.setAttribute("id", "selectObj_" + id + "_" + contador);
		selectObj.className = "linkArvore";
		selectObj.setAttribute("title", po.name);
		selectObj.appendChild(document.createTextNode(po.name));

		DWREngine.setAsync(true);
		
		return selectObj;
	}
	
	/*cria um link para fazer collapse/contract do nï¿½*/
	function criaBotaoExpandir(id, contador, hasChildren) {
		//verifica se o folder tem pelo menos um content ou um folder
		//var totalFilhos = totalConteudos + totalPastas;
		//cria o link do botão +/-
		var a = document.createElement("a");
		a.setAttribute("id", "link_" + id + "_" + contador);
		a.setAttribute("href", "?id=" + id + "_"+ contador + "&contNo=" + contador);
		
		a.className = "btexpande";
		if(!hasChildren)
			a.style.visibility = "hidden";
		return a;
	}

function callbackFunc_folders(objs, ul, contador, li, tmp) {
		var folders = objs;
		//percorre folders
		contadorNos = 1;
		for(i=0; i<folders.length; i++) {
			//incrementa contador
			contadorNos++;
			if(folders[i]) {
				//cria um ramo na árvore
				var liS = criaItemArvore(folders[i].id, contadorNos, "folder");
				//cria um botão para collapse/contract
				var a = criaBotaoExpandir(folders[i].id, contadorNos, folders[i].children);
				//cria um link desse ramo
				var selectObj = criaLinkArvore(folders[i], contadorNos, "folder");
				
				//agrega ao nï¿½ pai
				liS.appendChild(a);
				liS.appendChild(selectObj);
				ul.appendChild(liS);

			}
		}
		//chama função que popularï¿½ com os contents
		getSubContents(id, ul, contador, li, tmp);
	}
	
function callbackFunc_contents(objs, ul, contador, li, tempHTML) {
		var contents = objs;
		//percorre os contents filhos
		for(i=0; i<contents.length; i++) {
			//incrementa contador
			contadorNos++;
			//cria um ramo na ï¿½rvore
			var liS = criaItemArvore(contents[i].id, contadorNos, "content");
			//cria um link desse ramo
			var selectObj = criaLinkArvore(contents[i], contadorNos, "content");
			//agrega ao nï¿½ pai
			liS.appendChild(selectObj);
			ul.appendChild(liS);
			ul.style.display = "block";
		}
		li.innerHTML = tempHTML;
		li.appendChild(ul);
		initLinksArvore();
	}

function abreArea(idTot, contador) {
	var cont = contador;
	//tira o valor do contador do ID
	id = idTot.substring(0,idTot.search("_"));
	var li = document.getElementById("nivel_" + id + "_" + cont);
	if (li.value==0 || li.value=="0" || li.value==2) {		
		li.setAttribute("value",1);
		document.getElementById("link_" + id + "_" + cont).className = "btcontrai";
		var tmp = li.innerHTML;
		//cria elemento UL que agregarï¿½ as ULs de folders e contents
		var ul = document.createElement("ul"); //cria elemento ul, que vai agregar os subï¿½tens do folder
		//ul.style.display = "none";
		ul.setAttribute("id", "subnivel_" + id + "_" + contador);
		//chama função que popularï¿½ com os folders			
		getSubFolders(id, ul, contador, li, tmp);	
		
	} else if (li.value == 1){ //se o bloco já estiver colapsado
		document.getElementById("link_" + id + "_" + cont).className = "btexpande";
		var subUl = document.getElementById("subnivel_" + id + "_" + contador);
		var links = subUl.getElementsByTagName("a");
		//percorre lista de links na ï¿½rvore de objetos, a partir do nï¿½ selecionado
		li.setAttribute("value",2);
		li.removeChild(subUl); //remove subï¿½tens
		//igualCol();
	}
}

/* funções chamadas pelos listeners */

function arvoresClick(e){
	var source = catchSource(e);
	//Obtï¿½m o nï¿½mero quebrando a url
	n=source.getAttribute("href").replace(/.*=/g,"");
	colapsarArvores(n); //maximiza/minimiza ï¿½rvore
	//Cancela o click (evita a navegaï¿½ï¿½o)
	return false;
}

function abasClick(e){
	var source = catchSource(e);
	var arr = [];
	arr = source.getAttribute("href").substring(1, source.getAttribute("href").length).split("&");
	colapsarAba(arr[0].replace(/.*=/g,""), arr[1].replace(/.*=/g,"")); //maximiza/minimiza aba
	//percorre lista de items das abas e 'limpa' cor das fontes
	restauraCores("lista-abas");
	restauraCores("lista-abas-sub");
	var idSelecionado = "recurso-" + arr[1].replace(/.*=/g,"");
	var field = document.getElementById(idSelecionado);
	//field.style.color = "#FF6600";
	field.className = "aba-selecionada";
	return false;
}

function abasSubClick(e){
	var source = catchSource(e);
	var arr = [];
	arr = source.getAttribute("href").substring(1, source.getAttribute("href").length).split("&");
	colapsarAba(arr[0].replace(/.*=/g,""), arr[1].replace(/.*=/g,""));
	//percorre lista de items das abas e 'limpa' cor das fontes
	restauraCores("lista-abas");
	restauraCores("lista-abas-sub");
	var idSelecionado = "recurso-" + arr[1].replace(/.*=/g,"");
	var field = document.getElementById(idSelecionado);
	//field.style.color = "#FF6600";
	field.className = "aba-selecionada";
	return false;
}

/* ï¿½rvores de navegaï¿½ï¿½o */
/* expandir nï¿½ - objetos*/
function expandClick(e) {
	var source = catchSource(e);
	var arr = [];
	arr = source.getAttribute("href").substring(1, source.getAttribute("href").length).split("&");
	abreArea(arr[0].replace(/.*=/g,""), arr[1].replace(/.*=/g,""));	
	return false;
}

/* pega o source de um link clicado */
function catchSource(e) {
	if(typeof(e)=='undefined')
		var e=window.event;
	source=e.target?e.target:e.srcElement
	if(source.nodeType==3)
		source=source.parentNode;
	return source;
}

function getSubFolders(id, ul, contador, li, tmp) {	
	coreService.getFolders(id, null, false,{		
	  callback:function(dataFromServer) {
		callbackFunc_folders(dataFromServer, ul, contador, li, tmp);		
	  }
	});
}


function getSubContents(id, ul, contador, li, tmp) {
	coreService.getContents(id, null, false, {
	  callback:function(dataFromServer) {
		callbackFunc_contents(dataFromServer, ul, contador, li, tmp);		
	  }
	});
}

function getOtherContents(Name,idContent) {
 coreService.getContents(idContent,{
   callback:function(dataFromServer) {
  callbackFunc_otherContents(dataFromServer, Name);
   }
 });
}