
/**
*	Click a un bloc. Tanquem tots i despleguem el clickat.
*/
function treeBlockClick(blockNum) {

	try {
		// posem tots els blocs a no visible excepte el que han obert
		for (var i=0;i<treeContent.childrenArrayCount ;i++ ) {

			treeContent.getContentNode("node_"+i).setOpen(blockNum==(""+i));
			
			//DebugOut("treeBlockClick:"+treeContent.childrenArray[4].open+"  "+treeContent.childrenArray[i].open,INFO);
		}
		
	
	}
	catch (e) {
		alert("Error a treeBlockClick()\n"+e.message);
	}
	
}

/**
*	event de click a expandir / contraure carpeta.
*	@param {String} divId L'id del div que s'ha activat o desactivat
*/
function treeNodeClick(divId) {
	var imgOpen = document.getElementById(divId + "_open");
	var imgImage = document.getElementById(divId + "_image");
	var imgVisible = document.getElementById(divId + "_visible");
	var divContent = document.getElementById(divId + "_content");

	if (divContent.style.display=="inline") {
		divContent.style.display="none";
		if (imgOpen.src.indexOf("empty.gif")==-1) imgOpen.src="img/treeview/collapsed.gif";
		treeContent.getContentNode(divId).setOpen(false);
	} else {
		divContent.style.display="inline";
		if (imgOpen.src.indexOf("empty.gif")==-1) imgOpen.src="img/treeview/expanded.gif";
		treeContent.getContentNode(divId).setOpen(true);
	}


}

/**
*	Event de click a activar o desactivar visibilitat de la capa. Pot ser un layer o una carpeta/group.
*
*	@param {String} divId L'id del div que s'ha activat o desactivat
*	@param {boolean} disableRefresh Permet deshabilitar el refresh del mapa. Només modificarà el valor de la interfície.
*/
function treeVisibleClick(divId,disableRefresh) {
	try{
		// look if this block is multivalue
		var blockNode=treeContent.getBlockNode(divId);

		if (!blockNode.isMultiValue()) {// més d'un layer actiu a la vegada.
			treeVisibleClick_multivalue(blockNode,divId);
		} else {// només un layer actiu a la vegada.
			treeVisibleClick_monovalue(divId);
		}

		var cnode = treeContent.getContentNode(divId);
		if (cnode.type==="layer"){ // només cal que refresquem el layerOL d'aquest layerTOC
			var id=cnode.getLayerService();
			if (map.getLayersByName(id).length===0){
				alert("Revisa la llegenda:\nEl layer te un service='"+id+"' que no s'ha trobat a la llista de services.");
				return;
			}
			var mapLayer=map.getLayersByName(id)[0];
			var layers=treeContent.getVisibleLayersNames(id);
			mapLayer.params.LAYERS=layers;
			mapLayer.params.FORMAT=treeContent.getBestFormat(id);
			mapLayer.setVisibility(layers.length>0);// el setvisibility ja fa redibuixar el layer quan passa d'inactiu a actiu
			mapLayer.redraw();
		} else if (cnode.type==="group"){ // hem de refrescar els services dels fills. També pot ser que no tinguin service i que l'heredin del del block
			var servicesToRefreshArray=new Array();
			// busquem quin és el service del block actual. Si trobem layers sense service, seràn del que marca el block.
			var blockServiceId=cnode.getLayerService();
			if (blockServiceId===""){
				blockServiceId=null;
			} else servicesToRefreshArray.push(blockServiceId);

			// busquem els services de tots els services del group.
			var servicesToRefresh=cnode.getLayerValueByAttributeValue(null,"service" ,"#",null,null);
			if (servicesToRefresh.length>0) servicesToRefreshArray=servicesToRefreshArray.concat(servicesToRefresh.split("#"));

			// refresquem layers OL
			for (var i=0;i<servicesToRefreshArray.length ;i++ ){
				var id=servicesToRefreshArray[i];
				var mapLayer=map.getLayersByName(id)[0];
				var layers=treeContent.getVisibleLayersNames(id);
				mapLayer.params.LAYERS=layers;
				mapLayer.params.FORMAT=treeContent.getBestFormat(id);
				mapLayer.setVisibility(layers.length>0);
				mapLayer.redraw();
			}
		}

		
		
		
		/*var numberOfLayers=treeContent.getServiceCount();
		for (var i=0; i<numberOfLayers; i++) {
			var id=treeContent.services[i].id;
			
			if (treeContent.services[i].type == "wms") {
				//alert("treeVisibleClick: "+divId+"      id: "+treeContent.services[i].id);
				var mapLayer=map.getLayersByName(id)[0];
				var layers=treeContent.getVisibleLayersNames(id);
				mapLayer.setVisibility(layers.length>0);
				mapLayer.params.LAYERS=layers;
				mapLayer.params.FORMAT=treeContent.getBestFormat(id);
				//mapLayer.format=treeContent.getBestFormat(id);
			} else if (treeContent.services[i].type == "wfs") {

				// Capes WFS
				var wfsArray = treeContent.getWFSConfigArray(id);
				for (var j=0; j<wfsArray.length; j++){
					var wfsLayerID = wfsArray[j].pop();
					var mapLayer=map.getLayersByName(wfsLayerID)[0];
					
					// Si la capa no està activa no la mostrem 
					if (!treeContent.isLayerVisible(treeContent.getVisibleLayersNames(id), wfsLayerID)){
						mapLayer.setVisibility(false);
					} else {
						mapLayer.setVisibility(true);
					}
				}

			}
			if (disableRefresh!=true) mapLayer.redraw();
		}*/
		//if (disableRefresh!=true) refresh();
	}catch(e) {
		alert("Error a treeVisibleClick()\n"+e.message);
	}
}

/**
*	Tracta click de visible a un layer que forma part d'un block que permet més d'un layer actiu a la vegada.
*/
function treeVisibleClick_multivalue(blockNode,divId) {
	
	var imgVisible = document.getElementById(divId + "_visible");
	var isVisible = !((imgVisible.src.indexOf("_off") > -1 ));
	if (isVisible) {
		var cnode = treeContent.getContentNode(divId);
		cnode.setVisible(false);
		imgVisible.src=imgVisible.src.replace("_on","_off");

		

	} else {
		// set all to not visible
		blockNode.setVisible(false);
		var cnode = treeContent.getContentNode(divId);
		cnode.setVisible(true);

		// recreate interface
		var blockNodeId=divId.split("_")[1];
		setBlockVisibility(blockNodeId,false);
		imgVisible.src=imgVisible.src.replace("_off","_on");
	}

}


/**
*	Event de click a activar o desactivar identify de la capa
*
*	@param {boolean} obj l'element img que ha generat l'event
*	@param {String} divId L'id del div que s'ha activat o desactivat
*/
function treeIdentifyClick(obj,divId) {
	try {
		var isVisible = !((obj.src.indexOf("_off") > -1 ));
		var cnode = treeContent.getContentNode(divId);

		if (isVisible) {
			obj.src=obj.src.replace("_on","_off");
			cnode.queryable="1";
		} else {
			obj.src=obj.src.replace("_off","_on");
			cnode.queryable="2";
			
			if (cnode.getVisibility()=="0") {// quan activen info i la capa no es visible, la posem a visible
				treeVisibleClick(divId,false);
			}
		}

		
		
	}
	catch (e) {
		alert("Error a treeIdentifyClick()\n"+e.message);
	}
}

/**
*	sets the interface visibility check box value
*/
function setBlockVisibility(blockId,isVisible) {
	//DebugOut("setBlockVisibility:"+blockId+"   " +isVisible  ,DEBUG);
	setBlockVisibilityRecursive("node_"+blockId,isVisible);
}

/**
*	sets the interface visibility check box value. Recursive call.
*/
function setBlockVisibilityRecursive(partialId,isVisible) {
	//DebugOut("setBlockVisibilityRecursive:"+partialId+"   " +isVisible ,DEBUG);
	var imgVisible=document.getElementById(partialId + "_visible");
	if (imgVisible!=null) {
		if (imgVisible.src.indexOf("checked_disabled.gif") > -1 ) imgVisible.src="img/treeview/checked_disabled.gif";
		else if (isVisible) imgVisible.src=imgVisible.src.replace("_off","_on");
		else imgVisible.src=imgVisible.src.replace("_on","_off");
	}

	//children
	var i=0;
	while (imgVisible=document.getElementById(partialId+"_"+i+"_visible")) {
		imgVisible.src=imgVisible.src.replace("_on","_off");
		setBlockVisibilityRecursive(partialId+"_"+i, isVisible);
		i++;
	}
}

/**
*	Tracta click de visible a un layer que forma part d'un block que només permet un layer actiu a la vegada.
*	@return {void}
*/
function treeVisibleClick_monovalue(divId) {
	var imgVisible = document.getElementById(divId + "_visible");
	var isVisible = !((imgVisible.src.indexOf("_off") > -1 ));
	if (isVisible) {
		imgVisible.src=imgVisible.src.replace("_on","_off");
		imgVisible.src=imgVisible.src.replace("_mid","_off");//per quan es un grup
	} else {
		imgVisible.src=imgVisible.src.replace("_off","_on");
		imgVisible.src=imgVisible.src.replace("_mid","_off");//per quan es un grup
	}

	// tree data
	var cnode = treeContent.getContentNode(divId);
	cnode.setVisible(!isVisible);//sets visibility to descending nodes. Si es desactiva tb canvia identify.

	var imgOpen = document.getElementById(divId + "_open");
	var isGroup = ((imgOpen.src.indexOf("collapsed.gif") > -1 ) || (imgOpen.src.indexOf("expanded.gif") > -1 ));

	
	if (isVisible && cnode.queryable=="2") {
		cnode.queryable="1";
		var identifyVisible = document.getElementById(divId + "_identify");
		identifyVisible.src=identifyVisible.src.replace("_on","_off");
		identifyVisible.src=identifyVisible.src.replace("_mid","_off");//per quan es un grup
		
	}

	if (isGroup) {
		// if is a group: recusivelly set the same visibility to the children
		var nodes = document.getElementById(divId + "_content").childNodes;
		for (var i=0;i<nodes.length;i++){
			var node=nodes[i];
			var imgVisible=document.getElementById(node.id + "_visible");
			if (isVisible) {
				imgVisible.src=imgVisible.src.replace("_on","_off");
				
				var imgIdentify=document.getElementById(node.id + "_identify");
				if (imgIdentify!=null) imgIdentify.src=imgIdentify.src.replace("_on","_off");
				
			} else {
				imgVisible.src=imgVisible.src.replace("_off","_on");
				
			}
		}
	} else {
		// Is a layer. Need to refresh button for group
		var thisDiv=document.getElementById(divId);
		var tmpId=thisDiv.parentNode.id;// node_1_content
		var parentId=tmpId.substr(0,tmpId.indexOf("_content"));
		if(parentId!="") {//only if has a parent
			var parentImgVisible = document.getElementById(parentId + "_visible");
			var cnode = treeContent.getContentNode(parentId);
			
			switch (cnode.getVisibility()) {
				case "on": parentImgVisible.src="img/treeview/checked_on.gif"; break;
				case "mid": parentImgVisible.src="img/treeview/checked_mid.gif"; break;
				case "off": parentImgVisible.src="img/treeview/checked_off.gif"; break;
				default: parentImgVisible.src="img/treeview/checked_off.gif"; break;
			}
			
		}
	}
}

/**
*	modifica la transparencia del mapa i guarda el valor a l'objecte del bloc.
*/
function serviceTranspChange(serviceId,percent) {
	try {
		
		treeContent.getServiceById(serviceId).transparency=""+percent;
		var mapLayer=map.getLayersByName(serviceId)[0];
		if (typeof(mapLayer)!="undefined") {
			//alert("asdf: "+percent);
			mapLayer.setOpacity(1-percent/100);
		}

	} catch (e) {
		alert("Error a serviceTranspChange()\n"+e.message);
	}
}


/**
*	event de click a sobre el text: mostrar el tooltip
*/
function showTooltipGroup(evt,divId) {
	try {
			
		DebugOut("showTooltipGroup: " + divId ,DEBUG);
		
		if (userLevel<=LEVEL_CONVIDAT) return; // l'usuari convidat no pot ni veure el menu contextual

		if (!evt && window.event) evt=event;
		if (!evt) return alert("ERROR: showTooltipGroup() Can't find an event object");

		// si forma part d'un bloc no dinamic no mostrem el menu contextual.
		if(treeContent.getBlockNode(divId).getAttributeValue("dynamic")!="1") return false;

		var cnode=treeContent.getContentNode(divId);
		var nodeIsGroup=cnode.getAttributeValue("type")=="group";
		var parentIsGroup=cnode.parentNode().getAttributeValue("type")=="group";

		// mirem si el de dalt/predecessor es un grup. Servirà per decidir si posar boto de afegir/treure al grup.
		var arr=divId.split("_");
		var lastLevel=parseInt(arr[arr.length-1]);
		arr[arr.length-1]=arr[arr.length-1]-1;
		if (lastLevel>0) {
			var precedingNode=treeContent.getContentNode(arr.join("_"));
			var precedingIsGroup=precedingNode.getAttributeValue("type")=="group";
		} else {
			var precedingIsGroup=false;
		}

		var top=evt.clientY-8;
		var left=evt.clientX-8;
		var itemCount=0;
		var sepCount=0;//separadors

		var str='';
		str+='<table style="cursor:pointer; width:100%;padding:0px;" cellpadding="0" cellspacing="0" onmouseout="tableMouseOut(event);">';
		//str+=getContextMenuItem("Zoom a la capa",divId,"menu_zoom.gif","zoomToLayerBBox"); itemCount++;
		//str+=getContextMenuSeparador(120); sepCount++;
		var prevNode=treeContent.getPreviousSiblingBlockNode(divId);
		var nextNode=treeContent.getNextSiblingBlockNode(divId);
		str+=getContextMenuItem(langArr.MOVER_ARRIBA,divId,"menu_up.gif","moveItemUp"); itemCount++;
		str+=getContextMenuItem(langArr.MOVER_ABAJO,divId,"menu_down.gif","moveItemDown"); itemCount++;
		if (parentIsGroup) {
			str+=getContextMenuItem(langArr.SACAR_FUERA,divId,"menu_out.gif","moveItemOutsideGroup"); itemCount++;
		} else if (precedingIsGroup && !nodeIsGroup) {
			str+=getContextMenuItem(langArr.ANADIR_GRUPO,divId,"menu_in.gif","moveItemInsideGroup"); itemCount++;
		}
		//str+=getContextMenuSeparador(120); sepCount++;
		//str+=getContextMenuItem("Afegir a sota",divId,"menu_add.gif","alert"); itemCount++;
		//str+=getContextMenuItem("Eliminar",divId,"menu_delete.gif","deleteItem"); itemCount++;
		if (cnode.getAttributeValue("type")=="layer") {// només si es un layer
			str+=getContextMenuSeparador(120); sepCount++;
			if(Number(cnode.getAttributeValueNotUndefined("filtercolumns"))>0){ // si no te columnes filtradores ni mostrem l'item
				str+=getContextMenuItem(langArr.FILTRO,divId,"menu_filter.gif","modifyFilter"); itemCount++;
			}
			str+=getContextMenuSeparador(120); sepCount++;
			str+=getContextMenuItem(langArr.PROPIEDADES,divId,"menu_config.gif","openProperties"); itemCount++;
		}
		str+='</table>';

		var tDiv=document.getElementById("nodeTooltip");
		tDiv.style.display="block";
		tDiv.style.width="120px";
		tDiv.style.height= ((itemCount*20)+(sepCount*9))+"px";
		tDiv.style.top=top+"px";
		tDiv.style.left=left+"px";

		tDiv.innerHTML=str;
		tDiv.onmouseout=hideTooltip;

		contador=0;
		setTimeout('timerCheck()',2000);
		
	}
	catch (e) {
		alert("Error a showTooltipGroup()\n"+e.message);
	}
}

/**
*	Moves the node one position up
*/
function moveItemUp(divId) {
	
	var arr=divId.split("_");
	var lastLevel=parseInt(arr[arr.length-1]);
	var secondToLastLevel=parseInt(arr[arr.length-2]);
	arr[arr.length-1]=arr[arr.length-1]-1;
	DebugOut("moveItemUp() divId:" + divId ,DEBUG);

	if (lastLevel>0) {
		DebugOut("moveItemUp with lastLevel>0 " ,DEBUG);
		// pujem una posicio dins del nivell
		itemA=treeContent.getContentNode(divId);
		itemB=treeContent.getContentNode(arr.join("_")); // preceding node
		DebugOut("moveItemUp ITEM_SELECTED: " +itemA,DEBUG);
		DebugOut("moveItemUp ITEM_TARGET : " +itemB,DEBUG);
		itemAux=itemA.clone();
		itemA.replace(itemB);
		itemB.replace(itemAux);

	} else {
/* PARAT
		itemA=treeContent.getContentNode(divId);
		itemAux=itemA.clone(); // fem una copia de l'element
		var parent=itemA.parentNode(); // guardem referencia del pare de l'element a moure
		itemA.remove();	// eliminem l'element
		parent.addSiblingBefore(itemAux); // afegim la copia al node anterior
*/
	}
	saveIdFromModifiedBlock(divId);
	refreshTree();
	hideTooltip();
}

/**
*	Moves the node one position down
*/
function moveItemDown(divId) {
	var arr=divId.split("_");
	var lastLevel=parseInt(arr[arr.length-1]);
	var secondToLastLevel=parseInt(arr[arr.length-2]);
	arr[arr.length-1]=parseInt(arr[arr.length-1])+1;
	DebugOut("moveItemDown() divId:" + divId ,DEBUG);

	var followingId = arr.join("_");
	DebugOut("moveItemDown followingId " + followingId ,DEBUG);

	if (document.getElementById(followingId)!=null) {
		// pujem una posicio dins del nivell
		itemA=treeContent.getContentNode(divId);
		itemB=treeContent.getContentNode(followingId); // following node
		itemAux=itemA.clone();
		itemA.replace(itemB);
		itemB.replace(itemAux);

	} else {}

	saveIdFromModifiedBlock(divId);
	refreshTree();
	hideTooltip();
}

function moveItemOutsideGroup(divId) {

	itemA=treeContent.getContentNode(divId);
	itemAux=itemA.clone(); // fem una copia de l'element
	var parent=itemA.parentNode(); // guardem referencia del pare de l'element a moure
	itemA.remove();	// eliminem l'element
	parent.addSiblingAfter(itemAux); // afegim la copia al node anterior

	saveIdFromModifiedBlock(divId);
	refreshTree();
	hideTooltip();
}

function moveItemInsideGroup(divId) {
	
	var arr=divId.split("_");
	var lastLevel=parseInt(arr[arr.length-1]);
	arr[arr.length-1]=parseInt(arr[arr.length-1])-1;
	if (lastLevel>0) {
		var precedingNode=treeContent.getContentNode(arr.join("_"));
	}
	itemA=treeContent.getContentNode(divId);
	itemAux=itemA.clone(); // fem una copia de l'element
	itemA.remove();	// eliminem l'element
	precedingNode.addChild(itemAux);

	saveIdFromModifiedBlock(divId);
	refreshTree();
	hideTooltip();
}

/**
*	Obrir configurador de temes
*	@param {String} divId Valor de l'atribut id d'aquest layer
*/
function openProperties(divId) {
	var cnode=treeContent.getContentNode(divId);

	var temaId=cnode.getAttributeValue("name");

	var personal=cnode.getAttributeValue("personal");
	if (personal=="enabled") var persona_id=treeContent.getUserId();
	else persona_id="";
	
	openMantTema(userId,temaId,"");// demanem sense persona_id pq el config. decideixi si ha de carregar el comu o el personal.

}

function refreshTree() {
	var openBlock=getOpenBlockId();
	DebugOut("refreshTree() openBlock:"+openBlock ,DEBUG);
	document.getElementById("treeviewDiv").innerHTML = treeContent.getHTMLTree(1,null,openBlock);
}

/**
*	Returns the position of the opened block id
*/
function getOpenBlockId() {
	// node dd with display:none
	var i=0;
	var ddColection=document.getElementsByTagName("dd");
	while (i<ddColection.length) {
		if ( ddColection[i].style.display == "block" ) return i;
		i++;
	}
	return -1;
}

function zoomToLayerBBox(divId) {
	alert("TODO");
	return;
	var item=treeContent.getContentNode(divId);
	
}

function deleteItem(divId) {
	//alert(treeContent.getContentNode(divId).toStringTree());
	alert("TODO desc:\n"+treeContent.getContentNode(divId).desc);
}

// Saves the block that has been modified to an array
function saveIdFromModifiedBlock(divId) {
	//alert("saveIdFromModifiedBlock: "+divId);
	var arr=divId.split("_");
	var blockId=arr[0]+"_"+arr[1];
	var block=treeContent.getContentNode(blockId);
	var p=legendModifiedBlockIds.length;

	legendModifiedBlockIds[p]=new Array(2);
	legendModifiedBlockIds[p][0]=blockId;
	legendModifiedBlockIds[p][1]=block.priv;
	legendModifiedBlockIds[p][2]=block.title;
}


var contador=0;

function timerCheck() {
	//window.status=">> timerCheck!!!!!!";
	if (contador<=0) {
		contador=0;
		hideTooltip();
		//window.status=">> eliminat!";
	} else {
		setTimeout('timerCheck()',1000);
	}
}

function getContextMenuSeparador(width){
	var str='';
	str+='<tr>';
	str+='	<td colspan="2" style="height:9px;" onmouseover="contador++;" onmouseout="contador--;" bgcolor="#D4D0C8" align="center" valign="middle"><img src="img/treeview/separador.gif" alt="" width="'+(width-10)+'px" height="2px"/></td>';
	str+='</tr>';
	return str;
}

function getContextMenuItem(text,divId,imgSrc,func){
	var str='';
	str+='<tr width="16px" bgcolor="#D4D0C8" color="#000000" onclick="javascript:'+func+'(\''+divId+'\');" onmouseover="elementOver(this);" onmouseout="elementOut(this);">';
	str+='<td><img hspace="3" src="img/treeview/'+imgSrc+'" alt=""></td>';
	str+='<td height="20px">';
	str+='<font class="contextMenuText">'+text+'</font>';
	str+='</td>';
	str+='</tr>';
	return str;
}



function elementOver(obj) {
	obj.bgColor='#0A246A';//blue
	obj.style.color='#FFFFFF';//text
	contador++;
}

function elementOut(obj) {
	obj.bgColor='#D4D0C8';//grey
	obj.style.color='#000000';//text
	contador--;
}

function tableMouseOut(evt) {
	//alert("mouseout table");
	if (!evt && window.event) evt=event;
	if (!evt) return alert("ERROR: Can't find an event object for Start Drag!");
	//evt.returnValue=false;
	//window.status=">> " + evt;
	evt.cancelBubble=true;
}

function hideTooltip(evt)  {
		//alert("mouseout div");
		var tDiv=document.getElementById("nodeTooltip");
		//tDiv.style.visibility="hidden";
		tDiv.style.display="none";
		//alert(evt.target.srcElement);
	}
//--------------------------------------------------------------------------

/**
*	Add new layer to contents
*/
function treeAddContent() {
	
	openMantTema(userId,"","");
}






function transparencyShow(obj,id) {
	slider.onchange=function() {}
	var d=document.getElementById("transparencySlider");
	var x=findPosX(obj);
	var y=findPosY(obj);

	d.style.visibility="visible";
	d.style.top=y+"px";
	d.style.left=x+"px";

	slider.placeSlider();

	var transpValue=treeContent.getServiceById(id).transparency;
	slider.setValue(transpValue);

	slider.onchange=function() {
		//DebugOut("transparència :  "+slider.getValue(0),INFO);
		serviceTranspChange(id,slider.getValue(0));
	}
	return false;
}

function transparencyHide(blockId) {
	var d=document.getElementById("transparencySlider");
	d.style.visibility="hidden";
	var d=document.getElementById("sliderButton");
	d.style.visibility="hidden";
	
}

/**
*
*/
function deleteConfig() {
	try {
		eraseCookie("extent");
		eraseCookie("services");
		eraseCookie("layers");
	}
	catch (e) {
		alert("Error a deleteConfig()\n"+e.message);
	}
}

/**
*	Carrega la configuració de les galetes
*/
function saveConfig() {
	try {
		// extensió
		var extent=map.getExtent().serialize();
		
		// config capes i capes visibles
		var services="";
		var layers="";
		var target=document.getElementById("configDiv_sel");
		for (var i=0; i<target.options.length; i++ ) {
			var id=target.options[i].value;
			var transpValue=treeContent.getServiceById(id).transparency;

			if (services!="") services+="#";
			services+=id+":"+transpValue;

			if (layers!="") layers+="#";
			layers+=treeContent.getVisibleLayersNames(id,"#");
		}

		createCookie("extent",extent, 7);
		createCookie("services",services, 7);
		createCookie("layers",layers, 7);

	}
	catch (e) {
		alert("Error a saveConfig()\n"+e.message);
	}
}

/**
*	Carrega la configuració de les galetes
*/
function loadConfig() {
	try {
		// config capes
		var services=readCookie("services");
		var layers=readCookie("layers");
		var extent=readCookie("extent");

		if (services!=null) {
			var lArray=services.split("#");
			for (var i=0;i<lArray.length ;i++ ) {
				var one=lArray[i].split(":");
				
				var mapLayer=map.getLayerById(one[0]);
				mapLayer.setZIndex(20+i);
				mapLayer.setTransparency(one[1]);
				treeContent.getServiceById(one[0]).order=i;
				treeContent.getServiceById(one[0]).transparency=one[1];
			}
		}

		// capes visibles
		if (layers!=null) {
			treeContent.setVisibility(layers,"#");
		}

		// extensió
		if (extent!=null) {		
			var e=new NExtent(extent);
			map.centerToExtent(e);
		}

		treeContent.initLayersConfig(treeContent,"configDiv");
	}
	catch (e) {
		alert("Error a loadConfig()\n"+e.message);
	}
}


// mou el servei actual una posicio amunt.
function configMoveUp() {

	var target=document.getElementById("configDiv_sel");
	move(target,-1);
	map.raiseLayer(map.getLayersByName(target.options[target.selectedIndex].value)[0],-1);
	//changeLayersZ(target);
}

// mou el servei actual una posicio amunt.
function configMoveDown() {

	var target=document.getElementById("configDiv_sel");
	move(target,+1);
	//changeLayersZ(target);
	map.raiseLayer(map.getLayersByName(target.options[target.selectedIndex].value)[0],1);
}

function move(selectO,to) {
	var index = selectO.selectedIndex;

	var selectLength  = selectO.length - 1;

	if (index == -1) return false;

	if(to == +1 && index == selectLength){
		return false;
	}
	else if(to == -1 && index == 0){
		return false;
	}

	swap(index,index+to,selectO);
	return true;
}
    
//basic swap
function swap(fIndex,sIndex,selectO){
	//store first
	fText  = selectO.options[fIndex].text;
	fValue = selectO.options[fIndex].value;
	
	
	//make first = second
	selectO.options[fIndex].text  = selectO.options[sIndex].text;
	selectO.options[fIndex].value = selectO.options[sIndex].value;  
	
	//make second = first
	selectO.options[sIndex].text = fText;
	selectO.options[sIndex].value = fValue;
	
	//amke new one be selected
	selectO.options[sIndex].selected = true;    
	
}

/**
*	click a un element de la llista de configuració. Carrega el valor de transp. a l'slider.
*/
function configLayerChange(target) {
	
	if (target.length>0) {
		var id=target.options[target.selectedIndex].value;
		
		configLayerSelectedId=id;
		transparencyShow(document.getElementById("transparencyImgId"),id);

	}
}

/**
*	modifica la profunditat dels layers del mapa.
*/
/*function changeLayersZ(target) {
	try {
		for (var i=0; i<target.options.length; i++ ) {
			var id=target.options[i].value;
			map.getLayerById(id).setZIndex(20+i);

			treeContent.getServiceById(id).order=i;
		}
	}
	catch (e) {
		alert("Error a changeLayersZ()\n"+e.message);
	}
}*/

/**
*	Oculta tots els layers per deixar només visible l'escollit.
*/
function layerConfigShow() {
	try {
		var target=document.getElementById("configDiv_sel");
		if (target.selectedIndex<0) return;
		var selectedId=target.options[target.selectedIndex].value;
		
		map.baseLayer.display(false);
		for (var i=0; i<target.options.length; i++ ) {
			var id=target.options[i].value;
			var mapLayer=map.getLayersByName(id)[0];
			if (selectedId==id) {
				if(mapLayer.getVisibility()) mapLayer.display(true);
			} else {
				if(mapLayer.getVisibility()) mapLayer.display(false);
			}

		}
	}
	catch (e) {
		alert("Error a layerConfigShow()\n"+e.message);
	}
}

/**
*	Torna a deixar els layers amb la visibilitat que teniem a bans.
*/
function layerConfigHide() {
	try {
		var target=document.getElementById("configDiv_sel");
		if (target.selectedIndex<0) return;

		map.baseLayer.display(true);
		for (var i=0; i<target.options.length; i++ ) {
			var id=target.options[i].value;
			var mapLayer=map.getLayersByName(id)[0];
			if (mapLayer.getVisibility()) mapLayer.display(true);
			mapLayer.setOpacity(100-treeContent.getServiceById(id).transparency);
		}
	}
	catch (e) {
		alert("Error a layerConfigHide()\n"+e.message);
	}
}


/**
*	Save content positions
*/
function treeSaveContent() {
	try {
			
		var userPrivileges=treeContent.getUserType();
		/*var oneBlock=true;
		var oneBlockId="";

		// look if only 1 block has been modified
		var blockId="";
		for (var i=0;i<legendModifiedBlockIds.length ;i++ ) {
			if (blockId=="") blockId=legendModifiedBlockIds[i][0];
			else if (legendModifiedBlockIds[i][0]!=blockId) oneBlock=false;		
		}

		if (oneBlock) oneBlockId=treeContent.getContentNode(legendModifiedBlockIds[0][0]).name;*/

		var oneBlock=false;
		var oneBlockId="";

		if (userPrivileges=="ADM" && !legend_loadOcults) {

			var retFunc=function() {
				if (window.top.modalConfirmOption=="2") treeSaveContentConfirm(urlSetOrdre,userId,desencriptar(unescape(userId)),"");
				if (window.top.modalConfirmOption!="3") guardarExtensioUsuari();
				window.top.modalConfirmOption=null;
			}
			modalConfirm("",langArr.GUARDAR_CONFIGURACION_PERSONAL,400,110,retFunc,langArr.DEFECTO,1,langArr.PERSONAL,2,langArr.CANCELAR,2);
		
		} else if (userPrivileges=="ADM" && legend_loadOcults) {

			var retFunc=function() {
				if (window.top.modalConfirmOption=="1") treeSaveContentConfirm(urlSetOrdre,userId,"*",oneBlockId);
				else if (window.top.modalConfirmOption=="2") treeSaveContentConfirm(urlSetOrdre,userId,desencriptar(unescape(userId)),"");
				if (window.top.modalConfirmOption!="3") guardarExtensioUsuari();
				window.top.modalConfirmOption=null;
			}
			modalConfirm("",langArr.GUARDAR_COMO_CONFIGURACION_POR_DEFECTO,420,100,retFunc,langArr.DEFECTO,2,langArr.PERSONAL,2,langArr.CANCELAR,2);

		}else {
			// guardem com a conf. personal
			var retFunc=function() {
				if (window.top.modalConfirmOption=="2") treeSaveContentConfirm(urlSetOrdre,userId,desencriptar(unescape(userId)),"");
				window.top.modalConfirmOption=null;
				if (window.top.modalConfirmOption!="3") guardarExtensioUsuari();
				window.top.modalConfirmOption=null;
			}
			modalConfirm("",langArr.GUARDAR_CONFIGURACION,400,100,retFunc,"-",0,langArr.CONFIRMAR,2,langArr.CANCELAR,2);
		}
		
	}
	catch (e) {
		alert("Error a treeSaveContent()\n"+e.message);
	}
	
}

/**
*	treeSaveContentConfirm
*/
function treeSaveContentConfirm(urlSetOrdre,userId,userTarget,blockTarget) {

	treeContent.saveContentPositions(urlSetOrdre,userId,userTarget,blockTarget);
	if (userTarget!="*") setPersonalRepresentationImage("off");

}

/**
*
*/
function modalConfirm(titol,text,width,height,retFunc,b1text,b1on,b2text,b2on,b3text,b3on) {
	url="modalConfirm.jsp?titol="+escape(titol);
	url+="&text="+escape(text);
	url+="&b1text="+escape(b1text);
	url+="&b1on="+escape(b1on);
	url+="&b2text="+escape(b2text);
	url+="&b2on="+escape(b2on);
	url+="&b3text="+escape(b3text);
	url+="&b3on="+escape(b3on);

	showPopWin(url, width, height, retFunc);
}

/**
*
*/
function guardarExtensioUsuari() {
	try {
		var pers=new NPersonalitzacio();
		pers.persona_id=desencriptar(unescape(userId));
		pers.processSendPersonalitzacioOK=function() {
			//no diem res
		}
		pers.processSendPersonalitzacioKO=function(text) {
			alert ('Error guardant extensió:\n'+text);
		}
		
		pers.saveExtensio(map.getExtent(),userId);
	
	}
	catch (e) {
		alert("Error a guardarExtensioUsuari()\n"+e.message);
	}
}

/**
*
*/
function modifyFilter(divId) {
	try {
		
	selectedNodeItem=treeContent.getContentNode(divId);//var global
	var personalValue=selectedNodeItem.getAttributeValue("personal");
	var personalfilter_set=selectedNodeItem.getAttributeValue("personalfilter_set");
	var commonfilter_value=selectedNodeItem.getAttributeValue("commonfilter_value");
	var personalfilter_value=selectedNodeItem.getAttributeValue("personalfilter_value");

	var url="";
	url=urlEditorFiltres+"?";
	url+="titol="+escape(langArr.FILTRO);
	url+="&userid="+userId;
	url+="&personaid=";// sempre passem persona_id buit pq sempres s'edita el filtre personal. encara que estiguem amb rep.comuna.
	url+="&temaid="+escape(selectedNodeItem.name);
//	url+="&filtre="+escape(filtre);
	url+="&submitToPersonalitzacio=1";
	url+="&botorecuperahabilitat="+personalfilter_set;
	url+="&timestamp="+escape(new Date());
	DebugOut("openEditorFiltres:"+url,DEBUG);

	var retFunc= function() {
		try{
			
			// act. flag de filtre personal actiu.
			selectedNodeItem.personalfilter_set=window.top.filtrePersActiu;

			// TODO: actualitzar icona de filtre del tema a la llegenda 
			// no cal actualitzar res, pq si no pot modificar el filtre comu, no pot canviar l'estat de filtre disponible

			// recarreguem el configurl dels services: cal regenerar els .map
			reloadServicesConfigUrl();

		}
		catch (e){
			alert("Error a modifyFilter retFunc()\n"+e.message);
		}

	}
	
	showPopWin(url, 610, 200, retFunc);
	
	}
	catch (e) {
		alert("Error a modifyFilter()\n"+e.message);
	}
}

var anglesArray=[
	[90,"angle_l90.gif"],
	[60,"angle_l60.gif"],
	[45,"angle_l45.gif"],
	[30,"angle_l30.gif"],
	[0,"angle_0.gif"],
	[-30,"angle_r30.gif"],
	[-45,"angle_r45.gif"],
	[-60,"angle_r60.gif"],
	[-90,"angle_r90.gif"]
];
var currentAnglePos=4;

// botons del toc_imprimir per triar l'angle d'impressió
function angleLeftClick() {
	try {
		var imgObj=document.getElementById("angleImg");

		currentAnglePos--;
		if (currentAnglePos<0) currentAnglePos=0;
		imgObj.src="img/angle/"+anglesArray[currentAnglePos][1];

		var targetInput=document.getElementsByName("angle")[0];	
		targetInput.value=anglesArray[currentAnglePos][0];
		previewPrintRadioChange('printPreviewCheckbox');
	}
	catch (e) {
		alert("Error a angleLeftClicks()\n"+e.message);
	}
}

// botons del toc_imprimir per triar l'angle d'impressió
function angleRightClick() {
	try {
		var imgObj=document.getElementById("angleImg");

		currentAnglePos++;
		if (currentAnglePos>anglesArray.length-1) currentAnglePos=anglesArray.length-1;
		imgObj.src="img/angle/"+anglesArray[currentAnglePos][1];

		var targetInput=document.getElementsByName("angle")[0];	
		targetInput.value=anglesArray[currentAnglePos][0];
		previewPrintRadioChange('printPreviewCheckbox');
	}
	catch (e) {
		alert("Error a angleRightClick()\n"+e.message);
	}
}

