
/**
*	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
*
*	@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) {
	// 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);
	}

	if (disableRefresh!=true) refresh();
}

/**
*	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");
	}

}

/**
*	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.

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

	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");
			} 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.getLayerById(serviceId);
		if (typeof(mapLayer)!="undefined") {
			mapLayer.setTransparency(percent);
		}

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


/**
*	event de click a sobre el text: mostrar el tooltip
*/
function showTooltipGroup(evt,divId) {
	try {

		return false;
			
		DebugOut("showTooltipGroup: " + divId ,DEBUG);

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

		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++;
		str+=getContextMenuItem("Moure amunt",divId,"menu_up.gif","moveItemUp"); itemCount++;
		str+=getContextMenuItem("Moure avall",divId,"menu_down.gif","moveItemDown"); itemCount++;
		if (parentIsGroup) {
			str+=getContextMenuItem("Treure fora",divId,"menu_out.gif","moveItemOutsideGroup"); itemCount++;
		} else if (precedingIsGroup && !nodeIsGroup) {
			str+=getContextMenuItem("Afegir al grup",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("Filtre",divId,"menu_filter.gif","modifyFilter"); itemCount++;
			}
			str+=getContextMenuSeparador(120); sepCount++;
			str+=getContextMenuItem("Propietats",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);
	}
}


/**
*	tooltip: click a obrir propietats
*
*	@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="";
	
	alert("TODO");
}

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);
}



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);
	}
//--------------------------------------------------------------------------




/**
*
*/
function modalConfirm(titol,text,width,height,retFunc,b1text,b1on,b2text,b2on,b3text,b3on) {
	url="modalConfirm.html?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 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);
	changeLayersZ(target);
}

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

	var target=document.getElementById("configDiv_sel");
	move(target,+1);
	changeLayersZ(target);
}

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;
		

		for (var i=0; i<target.options.length; i++ ) {
			var id=target.options[i].value;
			var mapLayer=map.getLayerById(id);
			if (selectedId==id) {
				mapLayer.targetDiv.style.display="block";
				mapLayer.setTransparency(0);
			} else {
				map.getLayerById(id).targetDiv.style.display="none";
			}

		}
	}
	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;

		for (var i=0; i<target.options.length; i++ ) {
			var id=target.options[i].value;
			var mapLayer=map.getLayerById(id);
			mapLayer.targetDiv.style.display="block";
			mapLayer.setTransparency(treeContent.getServiceById(id).transparency);
		}
	}
	catch (e) {
		alert("Error a layerConfigHide()\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);
	}
}
