var NODES_CREATE_LOCK=1
var NODES_CREATE_COPY=2

var currentNode=null;
var groupCurrentNode=null;
var markerCurrentNode=null;
var polygonCurrentNode=null;
var overlayCurrentNode=null;
var mapNodes={};
var mapNodesTree={};

var nodeCheckDblClickTimer=null;
var nodeNameCheckDblClickTimer=null;
var nodeNameEdit=false;
var virtualRoot='root'	

var groupPreset=null;
var markerPreset=null;
var polygonPreset=null;
var overlayPreset=null;
var groupPresets=null;
var markerPresets=null;
var polygonPresets=null;
var overlayPresets=null;

var markerPresetCreate=NODES_CREATE_COPY
var polygonPresetCreate=NODES_CREATE_COPY
var overlayPresetCreate=NODES_CREATE_COPY
var groupPresetCreate=NODES_CREATE_COPY

var markerPresetCreateSelect=null
var polygonPresetCreateSelect=null
var overlayPresetCreateSelect=null
var groupPresetCreateSelect=null

var storedNodes={}



function nodeGetObj(node)
{
	if(!node)node=markerCurrentNode
	var nodeObj=mapNodes[node]
	if(window[nodeObj.type+'PresetActive'])node=window[nodeObj.type+'Preset']
	return mapNodes[node]
}

	
function nodesTreeSetup()
{
	mapNodesTree=new NodesTree('mapNodes','mapTreeNodes')
	mapNodesTree.setRoot(new Group('Root'))


	markerPresets=new Group('Marker Presets')
	markerPresets.isPresetRoot=true;
	markerPresets.presetType='marker';
	var uid=mapNodesTree.addFirstChild('root',markerPresets)
	markerPreset=new Marker('Marker Preset')
	var uid2=mapNodesTree.addFirstChild(uid,markerPreset)
	markerCurrentNode=uid2
	markerSetPreset(uid2)

	polygonPreset=new Polygon('Polygon Preset')
	polygonPresets=new Group('Polygon Presets')
	polygonPresets.isPresetRoot=true;
	polygonPresets.presetType='polygon';
	uid=mapNodesTree.addNext(uid,polygonPresets)
	uid2=mapNodesTree.addFirstChild(uid,polygonPreset)
	polygonCurrentNode=uid2
	polygonSetPreset(uid2)

	overlayPreset=new Overlay('Overlay Preset')
	overlayPresets=new Group('Overlay Presets')
	overlayPresets.isPresetRoot=true;
	overlayPresets.presetType='overlay';
	uid=mapNodesTree.addNext(uid,overlayPresets)
	uid2=mapNodesTree.addFirstChild(uid,overlayPreset)
	overlayCurrentNode=uid2
	overlaySetPreset(uid2)

	groupPreset=new Group('Group Preset')
	groupPresets=new Group('Group Presets')
	groupPresets.isPresetRoot=true;
	groupPresets.presetType='group';
	uid=mapNodesTree.addNext(uid,groupPresets)
	uid2=mapNodesTree.addFirstChild(uid,groupPreset)
	groupSetPreset(uid2)

	rootGroup=new Group('Root')
	mapNodesTree.addNext(uid,rootGroup)
	rootGroup.presetSelect=groupPresetUid
	groupCopyFromPreset(rootGroup.uid,groupPreset)

	rootGroup.selected=true;
	groupCurrentNode=currentNode=rootGroup.uid
	groupPresetActive=false
}


/*function setRootGroup()
{
	if(!gmap) setTimeout('setRootGroup()',10)
	else markerSetManager(rootGroup.uid)		
}*/


function nodesSetup()
{
	groupPutPresetCreateSelect()
	markerPutPresetCreateSelect()
	polygonPutPresetCreateSelect()
	overlayPutPresetCreateSelect()
	groupPutPresetsSelect()
	markerPutPresetsSelect()
	polygonPutPresetsSelect()
	overlayPutPresetsSelect()
	putNodes('root')
	//virtualRoot=mapNodesTree.setVirtualRoot(rootGroup.uid)
	nodesSetRoot(rootGroup.uid)
	//setRootGroup()
}

function nodeSetCurrent(node)
{
	var nodeObj,element;
	if(element=document.getElementById('nodeName_'+currentNode))element.className='nodeName';
	if(nodeObj=mapNodes[currentNode])nodeObj.selected=false;
	
	nodeObj=mapNodes[node]

	if(element=document.getElementById('nodeName_'+node))
	{
		element.className='nodeNameSelected';
		nodeObj.selected=true;
	}

	currentNode=node
	if(nodeObj.isPreset || nodeObj.isPresetRoot)
	{
		markerPresetsSelect.setDisabled(true)
		polygonPresetsSelect.setDisabled(true)
		overlayPresetsSelect.setDisabled(true)
		groupPresetsSelect.setDisabled(true)
		markerPresetCreateSelect.setDisabled(true)
		overlayPresetCreateSelect.setDisabled(true)
		polygonPresetCreateSelect.setDisabled(true)
		groupPresetCreateSelect.setDisabled(true)
		var type=((nodeObj.type=='group')?nodeObj.presetType:nodeObj.type)
		document.getElementById('markerAdd').disabled=(type!='marker')
		document.getElementById('addPolygon').disabled=(type!='polygon')
		document.getElementById('overlayAdd').disabled=(type!='overlay')
		document.getElementById('addGroup').disabled=(type!='group')

	}
	else 
	{
		markerPresetsSelect.setDisabled(false)
		polygonPresetsSelect.setDisabled(false)
		overlayPresetsSelect.setDisabled(false)
		groupPresetsSelect.setDisabled(false)
		markerPresetCreateSelect.setDisabled(false)
		overlayPresetCreateSelect.setDisabled(false)
		polygonPresetCreateSelect.setDisabled(false)
		groupPresetCreateSelect.setDisabled(false)
		document.getElementById('markerAdd').disabled=false;
		document.getElementById('addPolygon').disabled=false;
		document.getElementById('overlayAdd').disabled=false;
		document.getElementById('addGroup').disabled=false;
	}
	switch(nodeObj.type)
	{
		case 'marker':
			//if(!sections.marker.sectionOpen)sections.marker.showSection()
			markerPresetActive=nodeObj.isPreset
			markerCurrentNode=node
			markerPutNode(markerCurrentNode)
			if(nodeObj.parent.isPresetRoot || nodeObj.parent.uid=='root')
			{
				groupPresetActive=true;
				groupCurrentNode=groupPresetUid
			}
			else
			{
				groupCurrentNode=nodeObj.parent.uid
				groupPresetActive=false;
			}
			groupPutNode(groupCurrentNode)
			if(!polygonPresetActive)
			{
				polygonCurrentNode=polygonPresetUid
				polygonPresetActive=true
				polygonPutNode(polygonCurrentNode)
				break;
			}
			if(!overlayPresetActive)
			{
				overlayCurrentNode=overlayPresetUid
				overlayPresetActive=true;
				overlayPutNode(overlayCurrentNode)
				break;
			}
		break;
		case 'polygon':
			//if(!sections.polygon.sectionOpen)sections.polygon.showSection()
			polygonPresetActive=nodeObj.isPreset
			polygonCurrentNode=node
			polygonPutNode(polygonCurrentNode)
			if(nodeObj.parent.isPresetRoot || nodeObj.parent.uid=='root')
			{
				groupPresetActive=true;
				groupCurrentNode=groupPresetUid
			}
			else
			{
				groupCurrentNode=nodeObj.parent.uid
				groupPresetActive=false;
			}
			groupPutNode(groupCurrentNode)

			if(!overlayPresetActive)
			{
				overlayCurrentNode=overlayPresetUid
				overlayPresetActive=true;
				overlayPutNode(overlayCurrentNode)
				break;
			}
			if(!markerPresetActive)
			{
				markerCurrentNode=markerPresetUid
				markerPresetActive=true
				markerPutNode(markerCurrentNode)
				break;
			}
		break;
		case 'overlay':
			//if(!sections.overlay.sectionOpen)sections.overlay.showSection()
			overlayPresetActive=nodeObj.isPreset
			overlayCurrentNode=node
			overlayPutNode(overlayCurrentNode)
			if(nodeObj.parent.isPresetRoot || nodeObj.parent.uid=='root')
			{
				groupPresetActive=true;
				groupCurrentNode=groupPresetUid
			}
			else
			{
				groupCurrentNode=nodeObj.parent.uid
				groupPresetActive=false;
			}
			groupPutNode(groupCurrentNode)

			if(!markerPresetActive)
			{
				markerCurrentNode=markerPresetUid
				markerPresetActive=true
				markerPutNode(markerCurrentNode)
				break;
			}
			if(!polygonPresetActive)
			{
				polygonCurrentNode=polygonPresetUid
				polygonPresetActive=true
				polygonPutNode(polygonCurrentNode)
				break;
			}
		break;
		case 'group':
			//if(!sections.group.sectionOpen)sections.group.showSection()
			groupPresetActive=(nodeObj.isPreset || nodeObj.isPresetRoot)
			groupCurrentNode=node
			var presetType=nodeObj.presetType
			if(nodeObj.isPresetRoot)
			{
				window[presetType+'CurrentNode']=window[presetType+'PresetUid']
			}
			window[presetType+'PutNode'](window[presetType+'CurrentNode'])
			if(!overlayPresetActive)
			{
				overlayCurrentNode=overlayPresetUid
				overlayPresetActive=true;
				overlayPutNode(overlayCurrentNode)
				break;
			}
			if(!markerPresetActive)
			{
				markerCurrentNode=markerPresetUid
				markerPresetActive=true
				markerPutNode(markerCurrentNode)
				break;
			}
			if(!polygonPresetActive)
			{
				polygonCurrentNode=polygonPresetUid
				polygonPresetActive=true
				polygonPutNode(polygonCurrentNode)
				break;
			}
		break;
	}
	
}

function nodeGetDetailAddress(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	geocoder.getLocations(nodeObj.address, new Function('response','nodeSetDetailAddress(\''+node+'\',response);'));
}


function nodeSetDetailAddress(node,response)
{
	if(response && response.Status.code == 200)
	{
		if(!node)node=currentNode
		var nodeObj=mapNodes[node]
		
		nodeObj.response=response.Placemark[0]
		nodeObj.address=(nodeObj.geoCoderAddress=new GeoCoderAddress(response));
		//putNodes()
	}
	else
	{
		alert(getGeoCoderError(response.Status.code))
	}
}

function nodeNameCheckDblClick(node,e)
{
	if(!nodeNameCheckDblClickTimer)
	{
		nodeNameCheckDblClickTimer=setTimeout('nodeNameClick(\''+node+'\')',200)
	}
	//if(e.stopPropagation)e.stopPropagation();
	//else e.cancelBubble=true;
}

function nodeNameDblClick(node)
{
	if(nodeNameCheckDblClickTimer)
	{
		clearTimeout(nodeNameCheckDblClickTimer)
		nodeNameCheckDblClickTimer=null	
	}
}

function nodeNameClick(node,e)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	nodeNameCheckDblClickTimer=null
	
	if(nodeObj.selected && !nodeObj.isPresetRoot && !nodeNameEdit)
	{
		var element=document.getElementById('nodeName_'+node)
		element.className='nodeName'
		element.innerHTML='<INPUT TYPE="text" CLASS="text" id="nodeNameInput_'+node+'"'
		+' UNSELECTABLE="off"'
		+' value="'+nodeObj.name+'"'
		+' size='+nodeObj.name.length
		+' onBlur="nodeNameEdit=false;setNodeName(this.value,\''+node+'\')"'
		+' onKeyPress="if((typeof e)==\'undefined\'){var e=event};if(e.keyCode==13)this.blur()"'  
		+'>'
		nodeNameEdit=true;
		element=document.getElementById('nodeNameInput_'+node)
		element.focus()
		element.select()
	}
	/*if(e)
	{
		if(e.stopPropagation)e.stopPropagation();
		else e.cancelBubble=true;
	}*/
}

function nodeClick(node,e)
{
	nodeCheckDblClickTimer=null;
	if(currentNode!=node)
	{
		if(!node)node=currentNode
		var nodeObj=mapNodes[node]
		nodeSetCurrent(node)
		nodeShowStatus('nodeName',node)
	}
	//if(e)
	//{
	//	if(e.stopPropagation)e.stopPropagation();
	//	else e.cancelBubble=true;
	//}
}

function nodeCheckDblClick(node,e)
{
	if(!nodeCheckDblClickTimer)
	{
		nodeCheckDblClickTimer=setTimeout('nodeClick(\''+node+'\')',200)
	}
	//if(e.stopPropagation)e.stopPropagation();
	//else e.cancelBubble=true;
}

function nodeDblClick(node,e)
{
	if(window.getSelection)window.getSelection().removeAllRanges();
	else if(document.selection)document.selection.empty();
	
	if(nodeCheckDblClickTimer)
	{
		clearTimeout(nodeCheckDblClickTimer)
		nodeCheckDblClickTimer=null;
	}
	
	/*
	applyNodeZoom(node)
	centerNodeLatLng(node)
	
	if(e.preventDefault)e.preventDefault();
	else e.returnValue=false;
	
	if(e.stopPropagation)e.stopPropagation();
	else e.cancelBubble=true;*/
}


function nodePutAddressIcon(node)
{
	if(!node)node=currentNode
	var element,nodeObj=mapNodes[node]
	if(element=document.getElementById('nodeAddress_'+node))element.innerHTML=((nodeObj.address)?nodeGetAddressIcon(node):'');
}

function nodeGetAddressIcon(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	var out='';
	if(nodeObj.address)
	{
		out+='<IMG CLASS="nodeAddressIcon" ID="nodeAddressIcon_'+node+'"'
		+' onMouseOver="nodeShowInfo(\'address\',\''+node+'\',event)"'
		+' onMouseMove="moveInfo(event)"'
		+' onMouseOut="nodeHideInfo()"'
		+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'
		+'&nbsp;'
	}
	return out;
}


function nodePutLockIcon(node)
{
	if(!node)node=currentNode
	var element,nodeObj=mapNodes[node]
	if(element=document.getElementById('nodeLock_'+node))element.innerHTML=nodeGetLockIcon(node);
}

function nodeGetLockIcon(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	var out='';
	if(!nodeObj.isPreset && (nodeObj.inherit || nodeObj.presetSelect))
	{
		out+='<IMG CLASS="node'+((nodeObj.inherit)?'Lock':'Unlock')+'Icon" ID="nodeLockIcon_'+node+'"'
		+' onClick="nodeLockIconClick(\''+node+'\',event)"'
		+' onMouseOver="nodeShowInfo(\'lock\',\''+node+'\',event)"'
		+' onMouseMove="moveInfo(event)"'
		+' onMouseOut="nodeHideInfo()"'
		+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'
		+'&nbsp;'
	}
	return out;
}

function nodeLockIconClick(node,e)
{
	
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	nodeToggleLockPreset(node)
	window[nodeObj.type+'PutPreset']()
	
	switch(nodeObj.type)
	{
		case 'group':
		break;
		case 'polygon':
		break;
		case 'marker':
			marker_Set(node)
		break;
		case 'overlay':
			overlayRebuild(node)
			_overlaySet(node,true)
		break;
	}
	window[nodeObj.type+'PutNode']();
	if(e.stopPropagation)e.stopPropagation();
	else e.cancelBubble=true;
}

function nodePutMinMaxZoomIcon(node)
{
	if(!node)node=groupCurrentNode
	var inherit,nodeObj=mapNodes[node]
	if(inherit=(nodeObj.isPreset?node:nodeObj.inherit))
	{
		var inherits=presets.groupInherit[inherit]
		for(x in inherits)
		{
			node_PutMinMaxZoomIcon(x)
		}
	}
	node_PutMinMaxZoomIcon(node)
}

function node_PutMinMaxZoomIcon(node)
{
	if(!node)node=currentNode
	var element,nodeObj=mapNodes[node]
	if(element=document.getElementById('nodeMinMaxZoom_'+node))element.innerHTML=(((nodeObj.group.borderPadding!=borderPadding || nodeObj.group.minZoom!=minZoom) || (nodeObj.group.maxZoom!=maxZoom))?nodeGetMinMaxZoomIcon(node):'');
}

function nodeGetMinMaxZoomIcon(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	var out='';
	if(nodeObj.group.borderPadding!=borderPadding || nodeObj.group.minZoom!=minZoom || nodeObj.group.maxZoom!=maxZoom)
	{
		switch(nodeObj.type)
		{
			case 'group':
				out+='<IMG CLASS="nodeMinMaxZoomIcon" ID="nodeMinMaxZoomIcon_'+node+'"'
				+' onClick="nodeMinMaxZoomIconClick(\''+node+'\',event)"'
				+' onMouseOver="nodeShowInfo(\'minMaxZoom\',\''+node+'\',event)"'
				+' onMouseMove="moveInfo(event)"'
				+' onMouseOut="nodeHideInfo()"'
				+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'
				+'&nbsp;'
			break;
			case 'marker':
			break;
			case 'polygon':
			break;
			case 'group':
			break;
		}
	}
	return out;
}


function nodeMinMaxZoomIconClick(node,e)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	
	
	if(e.stopPropagation)e.stopPropagation();
	else e.cancelBubble=true;
}




function nodePutDragIcon(node)
{
	if(!node)node=markerCurrentNode
	var inherit,nodeObj=mapNodes[node]
	if(inherit=(nodeObj.isPreset?node:nodeObj.inherit))
	{
		var inherits=presets.markerInherit[inherit]
		for(x in inherits)
		{
			node_PutDragIcon(x)
		}
	}
	node_PutDragIcon(node)
}



function node_PutDragIcon(node)
{
	if(!node)node=currentNode
	var element,nodeObj=mapNodes[node]
	if(element=document.getElementById('nodeDrag_'+node))element.innerHTML=nodeGetDragIcon(node);
}

function nodeGetDragIcon(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	var out='';
	switch(nodeObj.type)
	{
		case 'marker':
			out+='<IMG CLASS="'+((nodeObj.marker.drag)?'nodeDragIcon':'nodeNoDragIcon')+'" ID="nodeDragIcon_'+node+'"'
			+' onClick="nodeDragIconClick(\''+node+'\',event)"'
			+' onMouseOver="nodeShowInfo(\'drag\',\''+node+'\',event)"'
			+' onMouseMove="moveInfo(event)"'
			+' onMouseOut="nodeHideInfo()"'
			+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'
			+'&nbsp;'
		break;
		case 'polygon':
		break;
		case 'group':
		break;
	}
	return out;
}

function nodeDragIconClick(node,e)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	
	setNodeMarkerDrag(!nodeObj.marker.drag,node)
	
	if(e.stopPropagation)e.stopPropagation();
	else e.cancelBubble=true;
}



function nodePutZoomIcon(node)
{
	if(!node)node=markerCurrentNode
	var inherit,nodeObj=mapNodes[node]
	if(inherit=(nodeObj.isPreset?node:nodeObj.inherit))
	{
		var inherits=presets.markerInherit[inherit]
		for(x in inherits)
		{
			node_PutZoomIcon(x)
		}
	}
	node_PutZoomIcon(node)
}

function node_PutZoomIcon(node)
{
	if(!node)node=currentNode
	var element,nodeObj=mapNodes[node]
	if(element=document.getElementById('nodeZoom_'+node))element.innerHTML=((nodeObj.zoom)?nodeGetZoomIcon(node):'');
}

function nodeGetZoomIcon(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	var out='';
	if(nodeObj.zoom)
	{
		out+='<IMG CLASS="nodeZoomIcon" ID="nodeZoomIcon_'+node+'"'
		+' onClick="nodeZoomIconClick(\''+node+'\',event)"'
		+' onMouseOver="nodeShowInfo(\'zoom\',\''+node+'\',event)"'
		+' onMouseMove="moveInfo(event)"'
		+' onMouseOut="nodeHideInfo()"'
		+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'
		+'&nbsp;'
	}
	return out;
}

function nodeZoomIconClick(node,e)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	
	applyNodeZoom(node)
	
	if(e.stopPropagation)e.stopPropagation();
	else e.cancelBubble=true;
}

function nodePutLatLngIcon(node)
{
	if(!node)node=currentNode
	var element,nodeObj=mapNodes[node]
	if(element=document.getElementById('nodeLatLng_'+node))element.innerHTML=((nodeObj.latLng)?nodeGetLatLngIcon(node):'');
}

function nodeGetLatLngIcon(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	var out='';
	if(nodeObj.latLng)
	{
		out+='<IMG CLASS="nodeLatLngIcon" ID="nodeLatLngIcon_'+node+'"'
		+' onClick="nodeLatLngIconClick(\''+node+'\',event)"'
		+' onMouseOver="nodeShowInfo(\'latLng\',\''+node+'\',event)"'
		+' onMouseMove="moveInfo(event)"'
		+' onMouseOut="nodeHideInfo()"'
		+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'
		+'&nbsp;'
	}
	return out;
}

function nodeLatLngIconClick(node,e)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	
	centerNodeLatLng(node)
	
	if(e.stopPropagation)e.stopPropagation();
	else e.cancelBubble=true;
}
	
function nodePutInfoSimpleIcon(node)
{
	if(!node)node=markerCurrentNode
	var inherit,nodeObj=mapNodes[node]
	if(inherit=(nodeObj.isPreset?node:nodeObj.inherit))
	{
		var inherits=presets.markerInherit[inherit]
		for(x in inherits)
		{
			node_PutInfoSimpleIcon(x)
		}
	}
	node_PutInfoSimpleIcon(node)
}

function node_PutInfoSimpleIcon(node)
{
	if(!node)node=markerCurrentNode
	var element,nodeObj=mapNodes[node]
	if(element=document.getElementById('nodeInfoSimple_'+node))element.innerHTML=((nodeObj.marker.infoSimpleOpenOn || nodeObj.marker.infoSimpleCloseOn)?nodeGetInfoSimpleIcon(node):'');
}


function nodeGetInfoSimpleIcon(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	var out='';
	if(nodeObj.marker.infoSimpleOpenOn)
	{
		switch(nodeObj.type)
		{
			case 'marker':
				out+='<IMG CLASS="nodeInfoSimpleIcon" ID="nodeInfoSimpleIcon_'+node+'"'
				+' onClick="nodeInfoSimpleIconClick(\''+node+'\',event)"'
				+' onMouseOver="nodeShowInfo(\'infoSimple\',\''+node+'\',event)"'
				+' onMouseMove="moveInfo(event)"'
				+' onMouseOut="nodeHideInfo()"'
				+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'
				+'&nbsp;'
			break;
			case 'polygon':
			break;
			case 'group':
			break;
		}
	}
	return out;
}

function nodeInfoSimpleIconClick(node,e)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	if(!sections.infoWindowSimple.sectionOpen)sections.infoWindowSimple.showSection();
	if(nodeObj.gMarker && nodeObj.marker.infoSimpleOpenOn)openMarkerInfoWindow(node,nodeObj.marker.infoSimpleOpenOn,1);
}

function nodePutInfoTabbedIcon(node)
{
	if(!node)node=markerCurrentNode
	var inherit,nodeObj=mapNodes[node]
	if(inherit=(nodeObj.isPreset?node:nodeObj.inherit))
	{
		var inherits=presets.markerInherit[inherit]
		for(x in inherits)
		{
			node_PutInfoTabbedIcon(x)
		}
	}
	node_PutInfoTabbedIcon(node)
}

function node_PutInfoTabbedIcon(node)
{
	if(!node)node=markerCurrentNode
	var element,nodeObj=mapNodes[node]
	if(element=document.getElementById('nodeInfoTabbed_'+node))element.innerHTML=((nodeObj.marker.infoTabbedOpenOn || nodeObj.marker.infoTabbedCloseOn)?nodeGetInfoTabbedIcon(node):'');
}

function nodeGetInfoTabbedIcon(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	var out='';
	if(nodeObj.marker.infoTabbedOpenOn)
	{
		switch(nodeObj.type)
		{
			case 'marker':
				out+='<IMG CLASS="nodeInfoTabbedIcon" ID="nodeInfoTabbedIcon_'+node+'"'
				+' onClick="nodeInfoTabbedIconClick(\''+node+'\',event)"'
				+' onMouseOver="nodeShowInfo(\'infoTabbed\',\''+node+'\',event)"'
				+' onMouseMove="moveInfo(event)"'
				+' onMouseOut="nodeHideInfo()"'
				+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'
				+'&nbsp;'
			break;
			case 'polygon':
			break;
			case 'group':
			break;
		}
	}
	return out;
}

function nodeInfoTabbedIconClick(node,e)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	if(!sections.infoWindowTabbed.sectionOpen)sections.infoWindowTabbed.showSection();
	if(nodeObj.gMarker && nodeObj.marker.infoTabbedOpenOn)openMarkerInfoWindow(node,nodeObj.marker.infoTabbedOpenOn,2);
}

function nodePutInfoBlowupIcon(node)
{
	if(!node)node=markerCurrentNode
	var inherit,nodeObj=mapNodes[node]
	if(inherit=(nodeObj.isPreset?node:nodeObj.inherit))
	{
		var inherits=presets.markerInherit[inherit]
		for(x in inherits)
		{
			node_PutInfoBlowupIcon(x)
		}
	}
	node_PutInfoBlowupIcon(node)
}

function node_PutInfoBlowupIcon(node)
{
	if(!node)node=markerCurrentNode
	var element,nodeObj=mapNodes[node]
	if(element=document.getElementById('nodeInfoBlowup_'+node))
	element.innerHTML=((nodeObj.marker.infoBlowupOpenOn || nodeObj.marker.infoBlowupCloseOn)?nodeGetInfoBlowupIcon(node):'');
}

function nodeGetInfoBlowupIcon(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	var out='';
	if(nodeObj.marker.infoBlowupOpenOn)
	{
		switch(nodeObj.type)
		{
			case 'marker':
				out+='<IMG CLASS="nodeInfoBlowupIcon" ID="nodeInfoBlowupIcon_'+node+'"'
				+' onClick="nodeInfoBlowupIconClick(\''+node+'\',event)"'
				+' onMouseOver="nodeShowInfo(\'infoBlowup\',\''+node+'\',event)"'
				+' onMouseMove="moveInfo(event)"'
				+' onMouseOut="nodeHideInfo()"'
				+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'
				+'&nbsp;'
			break;
			case 'polygon':
			break;
			case 'group':
			break;
		}		
	}
	return out;
}


function nodeInfoBlowupIconClick(node,e)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	if(!sections.infoWindowBlowup.sectionOpen)sections.infoWindowBlowup.showSection();
	if(nodeObj.gMarker && nodeObj.marker.infoBlowupOpenOn)openMarkerInfoWindow(node,nodeObj.marker.infoBlowupOpenOn,3);
}



function nodePutIcon(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	var elements
	if(elements=document.getElementsByName('nodeIcon_'+node))
	{
		for(var x=0;x<elements.length;x++)
		{
			elements[x].innerHTML=nodeGetIcon(node)
		}
	}
	if(nodeObj.isPreset)
	{
		window[nodeObj.type+'PresetSelect'].setOptionValue(node,{value:node,text:'<SPAN CLASS="nodeIcon" ID="nodeIcon_'+node+'" NAME="nodeIcon_'+node+'">'+nodeGetIcon(node)+'</SPAN>'+nodeObj.name})
		window[nodeObj.type+'PresetsSelect'].setOptionValue(node,{value:node,text:'<SPAN CLASS="nodeIcon" ID="nodeIcon_'+node+'" NAME="nodeIcon_'+node+'">'+nodeGetIcon(node)+'</SPAN>'+nodeObj.name})
	}
}


function nodeGetIcon(node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	var out='';
	switch(nodeObj.type)
	{
		case 'marker':
			var icon=(nodeObj.marker.icon!=null)?nodeObj.marker.icon:stdIcon
			var factor=sizes.markerIcon.innerWidth/Math.max(icon.iconSize.width,icon.iconSize.height)
			var width=Math.floor(icon.iconSize.width*factor)
			var height=Math.floor(icon.iconSize.height*factor)
			var half=Math.floor((sizes.markerIcon.innerWidth-width)/2)
			if((width<sizes.markerIcon.innerWidth))
			{
				var left='<IMG'
				+' onClick="markerToggleIcon(\''+node+'\',event)"'
				+' onMouseOver="nodeShowInfo(\'marker\',\''+node+'\',event)"'
				+' onMouseMove="moveInfo(event)"'
				+' onMouseOut="nodeHideInfo()"'
				+' ALIGN="absmiddle" SRC="gfx/dummy.gif" WIDTH="'+half+'" HEIGHT="'+sizes.markerIcon.innerHeight+'" BORDER="0">';
				var right='<IMG'
				+' onClick="markerToggleIcon(\''+node+'\',event)"'
				+' onMouseOver="nodeShowInfo(\'marker\',\''+node+'\',event)"'
				+' onMouseMove="moveInfo(event)"'
				+' onMouseOut="nodeHideInfo()"'
				+' ALIGN="absmiddle" SRC="gfx/dummy.gif" WIDTH="'+(half+sizes.markerIcon.innerWidth-width-half*2)+'" HEIGHT="'+sizes.markerIcon.innerHeight+'" BORDER="0">';
			}
			else
			{
				var left='';
				var right='';
			}
			if(natPNG)
			{
				out+='<SPAN CLASS="'+((nodeObj.visible)?'markerIcon':'markerNoIcon')+'">'
				+left+'<IMG'
				+((isIE && !nodeObj.visible)?' STYLE="filter:progid:DXImageTransform.Microsoft.Alpha(Opacity=50);"':'')
				+' onClick="markerToggleIcon(\''+node+'\',event)"'
				+' onMouseOver="nodeShowInfo(\'marker\',\''+node+'\',event)"'
				+' onMouseMove="moveInfo(event)"'
				+' onMouseOut="nodeHideInfo()"'
				+' ALIGN="absmiddle" SRC="'+icon.image+'" WIDTH="'+width+'" HEIGHT="'+height+'" BORDER="0">'
				+right+'</SPAN>'
			}
			else 
			{
				out+='<SPAN CLASS="'+((nodeObj.visible)?'markerIcon':'markerNoIcon')+'">'
				+left+'<IMG'
				+' onClick="markerToggleIcon(\''+node+'\',event)"'
				+' onMouseOver="nodeShowInfo(\'marker\',\''+node+'\',event)"'
				+' onMouseMove="moveInfo(event)"'
				+' onMouseOut="nodeHideInfo()"'
				+' ALIGN="absmiddle" SRC="gfx/dummy.gif" WIDTH="'+width+'" HEIGHT="'+height+'" BORDER="0"' 
				+' STYLE="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+icon.image+'\',sizingMethod=\'scale\')'+((nodeObj.visible)?'':' progid:DXImageTransform.Microsoft.Alpha(Opacity=50);')+';">'
				+right+'</SPAN>'
			}
		break;
		case 'overlay':
			out+='<IMG CLASS="overlay'+((nodeObj.overlayVisible)?'':'Hidden')+'Icon"'
			+' onMouseOver="nodeShowInfo(\'overlay\',\''+node+'\',event)"'
			+' onClick="overlayToggleIcon(\''+node+'\',event)"'
			+' onMouseMove="moveInfo(event)"'
			+' onMouseOut="nodeHideInfo()"'
			+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'	
		break;
		case 'polygon':
			out+='<IMG CLASS="polygonIcon"'
			+' onMouseOver="nodeShowInfo(\'polygon\',\''+node+'\',event)"'
			+' onMouseMove="moveInfo(event)"'
			+' onMouseOut="nodeHideInfo()"'
			+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'	
		break;
		case 'group':
			var treeObj=mapTreeNodes[node]
			out+='<IMG CLASS="group'+((treeObj.childCount && !nodeObj.isPreset && !(node==virtualRoot))?((treeObj.childrenOpen)?'Open':'Closed'):'')+'Icon"' 
			+' onMouseOver="nodeShowInfo(\'group\',\''+node+'\',event)"'
			+' onMouseMove="moveInfo(event)"'
			+' onMouseOut="nodeHideInfo()"'
			+' onClick="nodeToggle(\''+node+'\',event)"'
			+' ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">'	
		
		break;
	}		
	return out+'&nbsp;';
}


function putNodes(node)
{
	//if(!node)node=virtualRoot
	if(node)
	{
	var nodeObj=mapNodes[node]
	var treeNode=mapTreeNodes[node]
	if(treeNode.uid==virtualRoot)
	{
		treeNode.childrenOpen=true;
		document.getElementById("nodeTree").innerHTML='<DIV'
		+' CLASS="nodeChildren" id="nodeChildren_'+virtualRoot+'">'
		+nodeGetTree(virtualRoot);
		+'</DIV>'
		var out=''
		
		if(virtualRoot!='root')
		{
				out+='<DIV'
				+' id="node_'+node+'"'
				+' Class="node"'
				//+' onDblClick="nodeDblClick(\''+node+'\',event);"'
				//+' onClick="nodeCheckDblClick(\''+node+'\',event)"'
				+' onClick="nodeClick(\''+node+'\',event)"'
				+'>'
				+nodeGet(node)
				+'</DIV>'
		}
		document.getElementById('virtualRootName').innerHTML=out;
	}
	else
	{
		var openClose=treeNode.childrenOpen;
		var childCount=treeNode.childCount;
		treeNode.childrenOpen=openClose;
		nodePut(node)
		document.getElementById("nodeChildren_"+node).style.display=((openClose && childCount)?'block':'none');
		document.getElementById("nodeChildren_"+node).innerHTML=nodeGetTree(node);
	}
	//document.getElementById('setParent').disabled=(virtualRoot=='root')

	if(innerHTMLFix)
	{
		groupPutPresetCreateSelect()
		markerPutPresetCreateSelect()
		polygonPutPresetCreateSelect()
		overlayPutPresetCreateSelect()
		groupPutPresetsSelect()
		markerPutPresetsSelect()
		polygonPutPresetsSelect()
		overlayPutPresetsSelect()
	}
	groupPresetCreateSelect.selectValue(groupPresetCreate)
	markerPresetCreateSelect.selectValue(markerPresetCreate)
	polygonPresetCreateSelect.selectValue(polygonPresetCreate)
	overlayPresetCreateSelect.selectValue(overlayPresetCreate)
	
	groupPresetsSelect.selectValue(groupPresetUid)
	markerPresetsSelect.selectValue(markerPresetUid)
	polygonPresetsSelect.selectValue(polygonPresetUid)
	overlayPresetsSelect.selectValue(overlayPresetUid)
	}
}


function nodeGet(uid)
{
	var nodeObj=mapNodes[uid]
	var treeObj=mapTreeNodes[uid]
	var out='<NOBR><SPAN CLASS="nodeIcon" NAME="nodeIcon_'+uid+'" ID="nodeIcon_'+uid+'">'+nodeGetIcon(uid)+'</SPAN>'
	out+='<SPAN CLASS="nodeLock" ID="nodeLock_'+uid+'">'+nodeGetLockIcon(uid)+'</SPAN>'
	switch(nodeObj.type)
	{
		case 'marker':
		out+='<SPAN CLASS="nodeAddress" ID="nodeAddress_'+uid+'">'+nodeGetAddressIcon(uid)+'</SPAN>'
		+'<SPAN CLASS="nodeLatLng" ID="nodeLatLng_'+uid+'">'+nodeGetLatLngIcon(uid)+'</SPAN>'
		+'<SPAN CLASS="nodeZoom" NAME="nodeZoom_'+uid+'" ID="nodeZoom_'+uid+'">'+nodeGetZoomIcon(uid)+'</SPAN>'
		+'<SPAN CLASS="nodeDrag" NAME="nodeDrag_'+uid+'" ID="nodeDrag_'+uid+'">'+nodeGetDragIcon(uid)+'</SPAN>'
		+'<SPAN CLASS="nodeInfoSimple" NAME="nodeInfoSimple_'+uid+'" ID="nodeInfoSimple_'+uid+'">'+nodeGetInfoSimpleIcon(uid)+'</SPAN>'
		+'<SPAN CLASS="nodeInfoTabbed" NAME="nodeInfoTabbed_'+uid+'" ID="nodeInfoTabbed_'+uid+'">'+nodeGetInfoTabbedIcon(uid)+'</SPAN>'
		+'<SPAN CLASS="nodeInfoBlowup" NAME="nodeInfoBlowup_'+uid+'" ID="nodeInfoBlowup_'+uid+'">'+nodeGetInfoBlowupIcon(uid)+'</SPAN>'
		break;
		case 'polygon':
		case 'overlay':
			out+='<SPAN CLASS="nodeAddress" ID="nodeAddress_'+uid+'">'+nodeGetAddressIcon(uid)+'</SPAN>'
			+'<SPAN CLASS="nodeLatLng" ID="nodeLatLng_'+uid+'">'+nodeGetLatLngIcon(uid)+'</SPAN>'
			+'<SPAN CLASS="nodeZoom" NAME="nodeZoom_'+uid+'" ID="nodeZoom_'+uid+'">'+nodeGetZoomIcon(uid)+'</SPAN>'
			break;
		case 'group':
			out+='<SPAN CLASS="nodeAddress" ID="nodeAddress_'+uid+'">'+nodeGetAddressIcon(uid)+'</SPAN>'
			+'<SPAN CLASS="nodeLatLng" ID="nodeLatLng_'+uid+'">'+nodeGetLatLngIcon(uid)+'</SPAN>'
			+'<SPAN CLASS="nodeZoom" NAME="nodeZoom_'+uid+'" ID="nodeZoom_'+uid+'">'+nodeGetZoomIcon(uid)+'</SPAN>'
			+'<SPAN CLASS="nodeMinMaxZoom" NAME="nodeMinMaxZoom_'+uid+'" ID="nodeMinMaxZoom_'+uid+'">'+nodeGetMinMaxZoomIcon(uid)+'</SPAN>'
		break;				
	}
	out+='<SPAN'
	+' Class="'+((nodeObj.selected)?'nodeNameSelected':'nodeName')+'"'
	+' id="nodeName_'+uid+'" name="nodeName_'+uid+'"'
	+' onClick="nodeNameClick(\''+uid+'\',event);"'
	//+' onClick="nodeNameCheckDblClick(\''+uid+'\',event);"'
	//+' onDblClick="nodeNameDblClick(\''+uid+'\',event);"'
	+' onMouseOver="nodeShowInfo(\'nodeName\',\''+uid+'\',event)"'
	+' onMouseMove="moveInfo(event)"'
	+' onMouseOut="nodeHideInfo()"'
	+'>'+nodeObj.name+'</SPAN>'
	if(nodeObj.parent.uid!='root')
	{
		out+='<SPAN CLASS="deleteNode" id="deleteNode_'+uid+'"><IMG CLASS="deleteNodeIcon"'
		+' onClick="nodeDel(\''+uid+'\',event)"'
		+' onMouseOver="nodeShowInfo(\'deleteNode\',\''+uid+'\',event)"'
		+' onMouseMove="moveInfo(event)"'
		+' onMouseOut="nodeHideInfo()"'
		+' id="deleteNode" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0"></SPAN>'
	}
	out+='</NOBR>'
	return out;
}



function nodeGetTree(node)
{
	var child,out=''
	node=mapTreeNodes[node];
	
	if(node.childrenOpen && node.childCount)
	{
		var uid=node.firstChild
		do 
		{
			nodeObj=mapNodes[uid]
			child=mapTreeNodes[uid]
			if(uid==node.firstChild)
			{
				out+='<DIV CLASS="dropNode" ID="_next_'+uid+'"></DIV>'
			}
			out+='<DIV id="nodeContainer_'+uid+'" Class="nodeContainer">'
				out+='<DIV id="node_'+uid+'" Class="node"'
				//+' onDblClick="nodeDblClick(\''+uid+'\',event);"'
				//+' onClick="nodeCheckDblClick(\''+uid+'\',event)"'
				+' onClick="nodeClick(\''+uid+'\',event)"'
				+'>'
				+nodeGet(uid)
				+'</DIV>'
				if(nodeObj.type=='group')
				{
					out+='<DIV' 
					+' CLASS="nodeChildren"'
					//+' STYLE="display:'+((child.childrenOpen)?'block':'none')+'"'
					+' id="nodeChildren_'+uid+'"'
					+'>'
					if(child.childCount && child.childrenOpen)
					{
						out+=nodeGetTree(uid)
					}
					out+='</DIV>'
				}
			out+='</DIV>'
			out+='<DIV CLASS="dropNode" ID="_previous_'+uid+'"></DIV>'
		}
		while(uid=child.next)
	}
	return out;
}

function nodeShowInfo(topic,node,e)
{
	var nodeObj=mapNodes[node]
	var out='';
	switch(topic)
	{
		case 'latLngSearch':
			out='<IMG CLASS="nodeLatLngIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Latitude:</U> '+formatLat(currentSearch.addresses[node].parts.Point.lat())+'<BR>'
			+'<IMG CLASS="nodeDummyIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Longitude:</U> '+formatLng(currentSearch.addresses[node].parts.Point.lng())
		break;
		case 'latLng':
			out='<IMG CLASS="nodeLatLngIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Latitude:</U> '+formatLat(nodeObj.latLng.lat())+'<BR>'
			+'<IMG CLASS="nodeDummyIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Longitude:</U> '+formatLng(nodeObj.latLng.lng())
		break;
		case 'minMaxZoom':
			out='<IMG CLASS="nodeMinMaxZoomIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Min Zoom:</U>'+nodeObj[nodeObj.type].minZoom+'<BR>'
			+'<IMG CLASS="nodeDummyIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Max Zoom:</U>'+nodeObj[nodeObj.type].maxZoom+'<BR>'
			+'<IMG CLASS="nodeDummyIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Border Padding:</U>'+nodeObj[nodeObj.type].borderPadding+'<BR>'
		break;
		case 'drag':
			out='<IMG CLASS="node'+((nodeObj[nodeObj.type].drag)?'':'No')+'DragIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Drag:</U> '+((nodeObj[nodeObj.type].drag)?'enabled':'disabled')
		break;
		case 'zoom':
			out='<IMG CLASS="nodeZoomIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Zoom:</U>'+nodeObj.zoom
		break;
		case 'address':
			out='<IMG CLASS="nodeAddressIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Address:</U> '+nodeObj.address
		break;
		case 'marker':
			var icon=icon=(nodeObj.marker.icon!=null)?nodeObj.marker.icon:stdIcon;
			out+='<IMG STYLE="position:absolute;z-index:1;'
			+((natPNG)?'':'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+icon.image+'\');')
			+'"'
			+' WIDTH="'+icon.iconSize.width+'" HEIGHT="'+icon.iconSize.height+'"'
			+' SRC="'+((natPNG)?icon.image:'gfx/dummy.gif')+'" BORDER="0">'
			+'<IMG STYLE="position:relative;z-index:0;'
			+((natPNG)?'':'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\''+icon.shadow+'\');')
			+'"'
			+' WIDTH="'+icon.shadowSize.width+'" HEIGHT="'+icon.shadowSize.height+'"'
			+' SRC="'+((natPNG)?icon.shadow:'gfx/dummy.gif')+'" BORDER="0">'
		break;
		case 'group':
		break;
		case 'polygon':
		break;
		case 'overlay':
		break;
		case 'infoSimple':
			out='<IMG CLASS="nodeInfoSimpleIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Open on:</U> '+eventStr[nodeObj.marker.infoSimpleOpenOn]+'<BR>'
			+'<IMG CLASS="nodeDummyIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Close on:</U> '+eventStr[nodeObj.marker.infoSimpleCloseOn]+'<BR>'
		break;
		case 'infoTabbed':
			out='<IMG CLASS="nodeInfoTabbedIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Open on:</U> '+eventStr[nodeObj.marker.infoTabbedOpenOn]+'<BR>'
			+'<IMG CLASS="nodeDummyIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Close on:</U> '+eventStr[nodeObj.marker.infoTabbedCloseOn]+'<BR>'
		break;
		case 'infoBlowup':
			out='<IMG CLASS="nodeInfoBlowupIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Open on:</U> '+eventStr[nodeObj.marker.infoBlowupOpenOn]+'<BR>'
			+'<IMG CLASS="nodeDummyIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<U>Close on:</U> '+eventStr[nodeObj.marker.infoBlowupCloseOn]+'<BR>'
		break;
		case 'nodeName':
		break;
		case 'deleteNode':
		break;
		case 'lock':
			if(nodeObj.inherit)
			{
				switch(nodeObj.type)
				{
					case 'marker':
						out='<IMG CLASS="nodeLockIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<B>Preset settings:</B><BR>'
						+markerGetPresetInfo(nodeObj.inherit)
						out+='<IMG CLASS="nodeUnlockIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<B>Own hidden settings:</B><BR>'
						+markerGetPresetInfo(node)
					break;
					case 'group':
						out='<IMG CLASS="nodeLockIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<B>Preset settings:</B><BR>'
						+groupGetPresetInfo(nodeObj.inherit)
						out+='<IMG CLASS="nodeUnlockIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<B>Own hidden settings:</B><BR>'
						+groupGetPresetInfo(node)
					break;						
					case 'polygon':
						out='<IMG CLASS="nodeLockIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<B>Preset settings:</B><BR>'
						+polygonGetPresetInfo(nodeObj.inherit)
						out+='<IMG CLASS="nodeUnlockIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<B>Own hidden settings:</B><BR>'
						+polygonGetPresetInfo(node)
					break;						
					case 'overlay':
						out='<IMG CLASS="nodeLockIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<B>Preset settings:</B><BR>'
						+overlayGetPresetInfo(nodeObj.inherit)
						out+='<IMG CLASS="nodeUnlockIcon" ALIGN="absmiddle" SRC="gfx/dummy.gif" BORDER="0">&nbsp;<B>Own hidden settings:</B><BR>'
						+overlayGetPresetInfo(node)
					break;						
				}
			}
		break;
		case 'nodesAddMarkerNode':
			if(markerPreset)
			{
				out='<B>Preset settings:</B><BR>'
				+markerGetPresetInfo()
			}
		break;
		case 'nodesAddOverlayNode':
			if(overlayPreset)
			{
				out='<B>Preset settings:</B><BR>'
				+overlayGetPresetInfo()
			}
		break;
		case 'nodesAddGroupNode':
			if(groupPreset)
			{
				out='<B>Preset settings:</B><BR>'
				+groupGetPresetInfo()
			}
		break;
		case 'nodesAddPolygonNode':
			if(polygonPreset)
			{
				out='<B>Preset settings:</B><BR>'
				+polygonGetPresetInfo()
			}
		break;
	}
	var info=document.getElementById('info')
	if(out)
	{
		info.innerHTML=out;
		moveInfo(e)
		info.style.zIndex=sectionGroupsCount+1
		info.style.visibility='visible';
	}
	else info.style.visibility='hidden';
	nodeShowStatus(topic,node)
}

function nodeShowStatus(topic,node)
{
	var nodeObj=mapNodes[node]
	var out='';
	switch(topic)
	{
		case 'latLng':
		case 'latLngSearch':
			out='<U>Click:</U> Center on map'
			//currentSearch.addresses[x]
		break;
		case 'lock':
			out='<U>Click:</U> '
			+((nodeObj.inherit)?'Unlock Preset.':'Lock Preset.')
		break;
		case 'drag':
			out='<U>Click:</U> '+((nodeObj[nodeObj.type].drag)?'Disable':'Enable')+' Dragging.'
		break;
		case 'zoom':
			out='<U>Click:</U> Set map-zoom'
		break;
		case 'address':
		break;
		case 'marker':
			out='<U>Click:</U> '
			+((nodeObj.visible)?'Hide Marker.':'Show Marker.')
		break;
		case 'overlay':
			out='<U>Click:</U> '
			+((nodeObj.overlayVisible)?'Hide Overlay.':'Show Overlay.')
		break;
		case 'group':
		break;
		case 'polygon':
		break;
		case 'infoSimple':
			out='<U>Click:</U>'+((nodeObj.gMarker && nodeObj.marker.infoSimpleOpenOn)?' Open info-window,':'')+' open info-window edit.'
		break;
		case 'infoTabbed':
			out='<U>Click:</U>'+((nodeObj.gMarker && nodeObj.marker.infoTabbedOpenOn)?' Open info-window,':'')+' open info-window edit.'
		break;
		case 'infoBlowup':
			out='<U>Click:</U>'+((nodeObj.gMarker && nodeObj.marker.infoBlowupOpenOn)?' Open info-window,':'')+' open info-window edit.'
		break;
		case 'deleteNode':
			out='<U>Click:</U> Delete node'
		break;
		case 'nodeName':
			out='<U>Click:</U> '
			+((nodeObj.selected)?'Edit name.':'Select node.')
			//+' <U>Double-Click</U>: Center on map, set map-zoom.'
		break;
		case 'nodesAddMarkerNode':
			out='<U>Click:</U> '
			+((nodeObj.type=='group' && !nodeObj.isPreset)?'Add first child.':'Add next.')
			+' <U>Shift-Click:</U> '
			+((nodeObj.type=='group' && !nodeObj.isPreset)?'Add last child.':'Add previous.')
		break;
		case 'nodesAddGroupNode':
			out='<U>Click:</U> '
			+((nodeObj.type=='group' && !nodeObj.isPreset)?'Add first child.':'Add next.')
			+' <U>Shift-Click:</U> '
			+((nodeObj.type=='group' && !nodeObj.isPreset)?'Add last child.':'Add previous.')
		break;
		case 'nodesAddOverlayNode':
			out='<U>Click:</U> '
			+((nodeObj.type=='group' && !nodeObj.isPreset)?'Add first child.':'Add next.')
			+' <U>Shift-Click:</U> '
			+((nodeObj.type=='group' && !nodeObj.isPreset)?'Add last child.':'Add previous.')
		break;
		case 'nodesAddPolygonNode':
			out='<U>Click:</U> '
			+((nodeObj.type=='group' && !nodeObj.isPreset)?'Add first child.':'Add next.')
			+' <U>Shift-Click:</U> '
			+((nodeObj.type=='group' && !nodeObj.isPreset)?'Add last child.':'Add previous.')
		break;
	}
	if(out)
	{
		sections.nodeList.putStatusText(out,0)			
	}
}

function moveInfo(e)
{
	var x=parseInt((typeof e.x!='undefined')?e.x:e.pageX)
	var y=parseInt((typeof e.y!='undefined')?e.y:e.pageY)
	var info=document.getElementById('info')
	info.style.top=y+'px';
	info.style.left=(x+18)+'px';
}


function nodeHideInfo(section)
{
	document.getElementById('info').style.visibility='hidden'
	sections.nodeList.clearStatusText()
}

function markerToggleIcon(node,e)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	
	if(nodeObj.gMarker)
	{
		markerToggle(node)
	}
	else
	{
		markerAdd(node);
		markerShow(node);
	}
	if(e.stopPropagation)e.stopPropagation();
	else e.cancelBubble=true;
}

function overlayToggleIcon(node,e)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	
	if(nodeObj.gOverlay)
	{
		overlayToggle(node)
	}
	else
	{
		overlayAdd(node);
		overlayShow(node);
	}
	if(e.stopPropagation)e.stopPropagation();
	else e.cancelBubble=true;
}

function nodeToggle(node,e)
{
	var treeNode=mapTreeNodes[node]
	if(treeNode.childCount)
	{
		var openClose=treeNode.childrenOpen;
		treeNode.childrenOpen=!openClose;
		document.getElementById("nodeChildren_"+node).style.display=((openClose)?'none':'block');
		nodePut(node)
	}
	if(e.stopPropagation)e.stopPropagation();
	else e.cancelBubble=true;
}

function nodeDel(node,e)
{
	if(((e.srcElement)?e.srcElement.id:e.target.id)=='deleteNode')
	{
		if(!node)node=currentNode
		var nodeObj=mapNodes[node]
		switch(nodeObj.type)
		{
			case 'marker':
				markerRemove(node)
			break;
			case 'overlay':			
				overlayRemove(node)
			break;
		}
		
		nodeCut(node)
		if(nodeObj.isPreset)nodeRemovePreset(node)
		if(nodeObj.inherit)nodeRemoveLockPreset(node)
		
		mapNodesTree.remove(node)

		
		var parent
		if(!mapTreeNodes[parent=nodeObj.parent.uid].childrenOpen && (parent!=virtualRoot))
		{
			document.getElementById('nodeChildren_'+parent).style.display='none';
		}
		else mapTreeNodes[parent].childrenOpen=true;
		nodePut(parent)
		if(node==currentNode)nodeSetCurrent(parent)
	}
	if(e)
	{
		if(e.stopPropagation)e.stopPropagation();
		else e.cancelBubble=true;
	}
}

function nodesSetRoot()
{
	if(currentNode!=virtualRoot)
	{
		var nodeObj=mapNodes[currentNode]
		if(nodeObj.type=='group' && !nodeObj.isPreset)
		{
			nodesMoveRootNodeToStore(virtualRoot)
			virtualRoot=mapNodesTree.setVirtualRoot(currentNode)
		}
		else 
		{
			if(nodeObj.parent.uid!=virtualRoot)
			{
				nodesMoveRootNodeToStore(virtualRoot)
				virtualRoot=mapNodesTree.setVirtualRoot(nodeObj.parent.uid)
			}
			else return
		}
		
		var childrenNode=document.getElementById('nodeChildren_'+virtualRoot)
		document.getElementById('nodeTree').appendChild(childrenNode)
		childrenNode.style.display='block'
					
		var element=document.getElementById('nodeContainer_'+virtualRoot)
		if(element.removeEventListener)element.removeEventListener("click",new Function('event','nodeClick(\''+virtualRoot+'\',event)'),false);
		else if(element.detachEvent)element.detachEvent("onclick",new Function('event','nodeClick(\''+virtualRoot+'\',event)'));
		element.parentNode.removeChild(element)
		
		if(element=document.getElementById('_next_'+virtualRoot))element.parentNode.removeChild(element)
		element=document.getElementById('_previous_'+virtualRoot)
		element.parentNode.removeChild(element)

		element=document.getElementById('virtualRootName')
		mapTreeNodes[virtualRoot].childrenOpen=true;
		element.innerHTML='<DIV id="node_'+virtualRoot+'" Class="node"'
		//+' onDblClick="nodeDblClick(\''+virtualRoot+'\',event);"'
		//+' onClick="nodeCheckDblClick(\''+virtualRoot+'\',event)"'
		+' onClick="nodeClick(\''+virtualRoot+'\',event)"'
		+'>'+nodeGet(virtualRoot)+'</DIV>'
	}
}

function nodesSetParent()
{
	if(virtualRoot!='root')
	{
		var treeObj=mapTreeNodes[virtualRoot]
		virtualRoot=mapNodesTree.setVirtualRootParent(virtualRoot)
		var uid=treeObj.uid

		var nodeElement=document.createElement('DIV')
		nodeElement.id='node_'+uid;
		nodeElement.className='node';
		
		if(nodeElement.addEventListener)nodeElement.addEventListener("click",new Function('event','nodeClick(\''+uid+'\',event)'),false);
		else if(nodeElement.attachEvent)nodeElement.attachEvent("onclick",new Function('event','nodeClick(\''+uid+'\',event)'));
		else if(nodeElement.setAttribute)nodeElement.setAttribute('onClick','nodeClick(\''+uid+'\',event);');
		else alert('not supported')
		nodeElement.innerHTML=nodeGet(uid)
		
		var childrenNode=document.getElementById('nodeChildren_'+uid)

		var nodeContainer=document.createElement('DIV')
		nodeContainer.id='nodeContainer_'+uid;
		nodeContainer.className='nodeContainer';
		nodeContainer.appendChild(nodeElement)
		if(childrenNode)nodeContainer.appendChild(childrenNode)

		var dropNodePrevious=document.createElement('DIV')
		dropNodePrevious.id='_previous_'+uid;
		dropNodePrevious.className='dropNode';
		var parentNode=document.getElementById('nodeChildren_'+virtualRoot)

		if(treeObj.next)
		{
			var relElement=document.getElementById('nodeContainer_'+treeObj.next)
			if(!treeObj.previous)
			{
				var dropNodeNext=document.createElement('DIV')
				dropNodeNext.id='_next_'+uid;
				dropNodeNext.className='dropNode';
				parentNode.insertBefore(dropNodeNext,relElement)
			}
			parentNode.insertBefore(nodeContainer,relElement)
			parentNode.insertBefore(dropNodePrevious,relElement)
		}
		else
		{
			if(!treeObj.previous)
			{
				var dropNodeNext=document.createElement('DIV')
				dropNodeNext.id='_next_'+uid;
				dropNodeNext.className='dropNode';
				parentNode.appendChild(dropNodeNext)
			}
			parentNode.appendChild(nodeContainer)
			parentNode.appendChild(dropNodePrevious)
		}
		
		
		childrenNode=document.getElementById('nodeChildren_'+virtualRoot)
		document.getElementById('nodeTree').appendChild(childrenNode)
		childrenNode.style.display='block'
		
		element=document.getElementById('virtualRootName')
		if(virtualRoot=='root')
		{
			element.innerHTML=''
			nodesRemoveNodeFromStore(virtualRoot)
		}
		else 
		{
			mapTreeNodes[virtualRoot].childrenOpen=true;
			element.innerHTML='<DIV id="node_'+virtualRoot+'" Class="node"'
				//+' onDblClick="nodeDblClick(\''+virtualRoot+'\',event);"'
				//+' onClick="nodeCheckDblClick(\''+virtualRoot+'\',event)"'
				+' onClick="nodeClick(\''+virtualRoot+'\',event)"'
				+'>'+nodeGet(virtualRoot)+'</DIV>'
			nodeCut(virtualRoot)
		}
	}
}

function nodesMoveRootNodeToStore(node)
{
	var treeNode=mapTreeNodes[node];

	var element=document.getElementById('virtualRootName')
	element.innerHTML=''
	
	var rootNode=document.createElement('DIV')
	rootNode.innerHTML=nodeGet(node)
	rootNode.id='node_'+node;
	rootNode.className='node';

	var nodeContainer=document.createElement('DIV')
	nodeContainer.id='nodeContainer_'+node;
	nodeContainer.className='nodeContainer';
	
	var childrenNode=document.getElementById('nodeChildren_'+node)
	childrenNode=childrenNode.parentNode.removeChild(childrenNode)

	nodeContainer.appendChild(rootNode)
	nodeContainer.appendChild(childrenNode)

	storedNodes[node]=nodeContainer
	var store=document.getElementById('nodeStore')
	store.appendChild(nodeContainer)	
	return 	nodeContainer	
}

function nodesMoveNodeToStore(node)
{
	var cut=storedNodes[node]=nodeCut(node)
	var store=document.getElementById('nodeStore')
	store.appendChild(cut)	
	return 		
}

function nodesRemoveNodeFromStore(node)
{
	if(storedNodes[node])
	{
		delete storedNodes[node]
		return nodeCut(node)
	}
}

function nodeCut(node)
{
	var element;
	var nodeRemoved=null;
	var treeObj=mapTreeNodes[node]
	if(element=document.getElementById('nodeContainer_'+node))
	{
		nodeRemoved=element.parentNode.removeChild(element)
		if(element=document.getElementById('_next_'+node))
		{
			if(treeObj.next)
			{
				var dropNodeNext=document.createElement('DIV')
				dropNodeNext.id='_next_'+treeObj.next;
				dropNodeNext.className='dropNode';
				element.parentNode.replaceChild(dropNodeNext,element)
			}
			else 
			{
				element.parentNode.removeChild(element)
			}
		}
		if(element=document.getElementById('_previous_'+node))element.parentNode.removeChild(element)
	}
	return nodeRemoved
}

function nodePut(node)
{
	var element;
	if(element=document.getElementById('node_'+node))element.innerHTML=nodeGet(node)
	else if(node!=virtualRoot) 
	{
		var nodeObj=mapNodes[node]
		if(element=document.getElementById('nodeChildren_'+nodeObj.parent.uid))	
		{
			mapTreeNodes[nodeObj.parent.uid].childrenOpen=true;
			element.style.display='block';
			
			var dropNodeNext=null;
			var childrenNode=null;
			var nodeElement=document.createElement('DIV')
			nodeElement.id='node_'+node;
			nodeElement.className='node';
			
			if(nodeElement.addEventListener)nodeElement.addEventListener("click",new Function('event','nodeClick(\''+node+'\',event)'),false);
			else if(nodeElement.attachEvent)nodeElement.attachEvent("onclick",new Function('event','nodeClick(\''+node+'\',event)'));
			else if(nodeElement.setAttribute)nodeElement.setAttribute('onClick','nodeClick(\''+node+'\',event);');
			else alert('not supported')

			nodeElement.innerHTML=nodeGet(node)
			var dropNodePrevious=document.createElement('DIV')
			dropNodePrevious.id='_previous_'+node;
			dropNodePrevious.className='dropNode';
			
			if(nodeObj.type=='group')
			{
				childrenNode=document.createElement('DIV')
				childrenNode.id='nodeChildren_'+node;
				childrenNode.className='nodeChildren';
			}

			var treeObj=mapTreeNodes[node]
			var parentObj=mapTreeNodes[treeObj.parent]
			
			if(treeObj.next)
			{
				var relElement
				if(relElement=document.getElementById('_next_'+treeObj.next))
				{
					dropNodeNext=document.createElement('DIV')
					dropNodeNext.id='_next_'+node;
					dropNodeNext.className='dropNode';
					element.replaceChild(dropNodeNext,relElement)
					relElement=dropNodeNext
				}
				
				if(relElement=document.getElementById('nodeContainer_'+treeObj.next))
				{
					var nodeContainer=document.createElement('DIV')
					nodeContainer.id='nodeContainer_'+node;
					nodeContainer.className='nodeContainer';
					nodeContainer.appendChild(nodeElement)
					if(childrenNode)nodeContainer.appendChild(childrenNode)
					
					element.insertBefore(nodeContainer,relElement)
					element.insertBefore(dropNodePrevious,relElement)
				}
			}
			else
			{
				if(!treeObj.previous)
				{	
					dropNodeNext=document.createElement('DIV')
					dropNodeNext.id='_next_'+node;
					dropNodeNext.className='dropNode';
					parentObj.childrenOpen=true;
					element.appendChild(dropNodeNext)
				}
				
				var nodeContainer=document.createElement('DIV')
				nodeContainer.id='nodeContainer_'+node;
				nodeContainer.className='nodeContainer';
				nodeContainer.appendChild(nodeElement)
				if(childrenNode)nodeContainer.appendChild(childrenNode)
					
				element.appendChild(nodeContainer)
				element.appendChild(dropNodePrevious)
			}
			if(parentObj.uid!=virtualRoot)nodePut(parentObj.uid)
		}
	}
}



function nodesAddMarkerNode(event,name,address,zoom,latLng)
{	
	name=(name)?name:''
	address=(address)?address:'';
	latLng=(latLng)?latLng:null;
	zoom=(zoom)?zoom:0;

	var node
	var nodeObj=mapNodes[currentNode]
	if(nodeObj.isPreset || nodeObj.isPresetRoot)
	{
		if(nodeObj.isPresetRoot)
		{
			if(event.shiftKey)node=mapNodesTree.addLastChild(currentNode,new Marker('Marker Preset',address,zoom,latLng))
			else node=mapNodesTree.addFirstChild(currentNode,new Marker('Marker Preset',address,zoom,latLng))
			nodeAddPreset(node)
			mapTreeNodes[currentNode].childrenOpen=true;
			nodePut(node)
			return node
		}
		else
		{
			if(event.shiftKey)node=mapNodesTree.addPrevious(currentNode,new Marker('Marker Preset',address,zoom,latLng))
			else node=mapNodesTree.addNext(currentNode,new Marker('Marker Preset',address,zoom,latLng))
			nodeAddPreset(node)
			nodePut(node)
			return node
		}
	}
	else
	{
		switch(nodeObj.type)
		{
			case 'group':
				if(event.shiftKey)node=mapNodesTree.addLastChild(currentNode,new Marker(name,address,zoom,latLng))
				else node=mapNodesTree.addFirstChild(currentNode,new Marker(name,address,zoom,latLng))
				mapTreeNodes[currentNode].childrenOpen=true;
				if(markerPresetCreate & NODES_CREATE_COPY)
				{
					if(markerPresetUid)
					{
						mapNodes[node].presetSelect=markerPresetUid
						markerCopyFromPreset(node,markerPreset)
					}
				}
				if(markerPresetCreate & NODES_CREATE_LOCK)
				{
					if(markerPresetUid)nodeLockPreset(node,markerPresetUid)
				}
				markerAdd(node)
				markerShow(node)
				nodePut(node)
				return node
			break;
			case 'overlay':
			case 'polygon':
			case 'marker':
					if(event.shiftKey)node=mapNodesTree.addPrevious(currentNode,new Marker(name,address,zoom,latLng))
					else node=mapNodesTree.addNext(currentNode,new Marker(name,address,zoom,latLng))
					if(markerPresetUid)
					{
						mapNodes[node].presetSelect=markerPresetUid
						markerCopyFromPreset(node,markerPreset)
					}
					if(markerPresetCreate & NODES_CREATE_LOCK)
					{
						if(markerPresetUid)nodeLockPreset(node,markerPresetUid)
					}
					markerAdd(node)
					markerShow(node)
					nodePut(node)
					return node
			break;
		}
	}
}

function nodesAddPolygonNode(event,name,address,zoom,latLng)
{	
	var node
	var nodeObj=mapNodes[currentNode]
	if(nodeObj.isPreset || nodeObj.isPresetRoot)
	{
		if(nodeObj.isPresetRoot)
		{
			if(event.shiftKey)node=mapNodesTree.addLastChild(currentNode,new Polygon('Polygon Preset'))
			else node=mapNodesTree.addFirstChild(currentNode,new Polygon('Polygon Preset'))
			nodeAddPreset(node)
			mapTreeNodes[currentNode].childrenOpen=true;
			nodePut(node)
			return node
		}
		else
		{
			if(event.shiftKey)node=mapNodesTree.addPrevious(currentNode,new Polygon('Polygon Preset'))
			else node=mapNodesTree.addNext(currentNode,new Polygon('Polygon Preset'))
			nodeAddPreset(node)
			nodePut(node)
			return node
		}
	}
	else
	{
		switch(nodeObj.type)
		{
			case 'group':
				if(event.shiftKey)node=mapNodesTree.addLastChild(currentNode,new Polygon(name,address,zoom,latLng))
				else node=mapNodesTree.addFirstChild(currentNode,new Polygon(name,address,zoom,latLng))
				mapTreeNodes[currentNode].childrenOpen=true;
				if(polygonPresetCreate & NODES_CREATE_COPY)
				{
					if(polygonPresetUid)
					{
						mapNodes[node].presetSelect=polygonPresetUid
						polygonCopyFromPreset(node)
					}
				}
				if(polygonPresetCreate & NODES_CREATE_LOCK)
				{
					if(polygonPresetUid)
					{
						nodeLockPreset(node,polygonPresetUid)
					}
				}
				nodePut(node)
				return node
			break;
			case 'overlay':
			case 'marker':
			case 'polygon':
				if(event.shiftKey)node=mapNodesTree.addPrevious(currentNode,new Polygon(name,address,zoom,latLng))
				else node=mapNodesTree.addNext(currentNode,new Polygon(name,address,zoom,latLng))
				if(polygonPresetUid)
				{
					mapNodes[node].presetSelect=polygonPresetUid
					polygonCopyFromPreset(node)
				}
				if(polygonPresetCreate & NODES_CREATE_LOCK)
				{
					if(polygonPresetUid)
					{
						nodeLockPreset(node,polygonPresetUid)
					}
				}
				nodePut(node)
				return node
			break;
		}
	}
}

function nodesAddGroupNode(event,name,address,zoom,latLng)
{	
	var node
	var nodeObj=mapNodes[currentNode]
	if(nodeObj.isPreset || nodeObj.isPresetRoot)
	{
		if(nodeObj.isPresetRoot)
		{
			if(event.shiftKey)node=mapNodesTree.addLastChild(currentNode,new Group('Group Preset'))
			else node=mapNodesTree.addFirstChild(currentNode,new Group('Group Preset'))
			nodeAddPreset(node)
			mapTreeNodes[currentNode].childrenOpen=true;
			putNodes(currentNode)
			return node
		}
		else
		{
			if(event.shiftKey)node=mapNodesTree.addPrevious(currentNode,new Group('Group Preset'))
			else node=mapNodesTree.addNext(currentNode,new Group('Group Preset'))
			nodeAddPreset(node)
			nodePut(node)
			return node
		}
	}
	else
	{
		switch(nodeObj.type)
		{
			case 'group':
				if(event.shiftKey)node=mapNodesTree.addLastChild(currentNode,new Group(name,address,zoom,latLng))
				else node=mapNodesTree.addFirstChild(currentNode,new Group(name,address,zoom,latLng))
				mapTreeNodes[currentNode].childrenOpen=true;
				if(groupPresetCreate & NODES_CREATE_COPY)
				{
					if(groupPresetUid)
					{
						mapNodes[node].presetSelect=groupPresetUid
						groupCopyFromPreset(node)
					}
				}
				if(groupPresetCreate & NODES_CREATE_LOCK)
				{
					if(groupPresetUid)
					{
						nodeLockPreset(node,groupPresetUid)
					}
				}
				mapNodes[node].group.minZoom=mapNodes[node].parent.group.minZoom
				mapNodes[node].group.maxZoom=mapNodes[node].parent.group.maxZoom	
				nodePut(node)
				return node
			break;
			case 'overlay':
			case 'polygon':
			case 'marker':
				if(event.shiftKey)node=mapNodesTree.addPrevious(currentNode,new Group(name,address,zoom,latLng))
				else node=mapNodesTree.addNext(currentNode,new Group(name,address,zoom,latLng))
				if(groupPresetCreate & NODES_CREATE_COPY)
				{
					if(groupPresetUid)
					{
						mapNodes[node].presetSelect=groupPresetUid
						groupCopyFromPreset(node)
					}
				}
				if(groupPresetCreate & NODES_CREATE_LOCK)
				{
					if(groupPresetUid)
					{
						nodeLockPreset(node,groupPresetUid)
					}
				}
				mapNodes[node].group.minZoom=mapNodes[node].parent.group.minZoom
				mapNodes[node].group.maxZoom=mapNodes[node].parent.group.maxZoom	
				nodePut(node)
				return node
			break;
		}
	}
}

function nodesAddOverlayNode(event,name,address,zoom,latLng,HTML)
{	
	var node
	var nodeObj=mapNodes[currentNode]
	if(nodeObj.isPreset || nodeObj.isPresetRoot)
	{
		if(nodeObj.isPresetRoot)
		{
			if(event.shiftKey)node=mapNodesTree.addLastChild(currentNode,new Overlay('Overlay Preset'))
			else node=mapNodesTree.addFirstChild(currentNode,new Overlay('Overlay Preset'))
			nodeAddPreset(node)
			mapTreeNodes[currentNode].childrenOpen=true;
			overlayAdd(node)
			nodePut(node)
			return node
		}
		else
		{
			if(event.shiftKey)node=mapNodesTree.addPrevious(currentNode,new Overlay('Overlay Preset'))
			else node=mapNodesTree.addNext(currentNode,new Overlay('Overlay Preset'))
			nodeAddPreset(node)
			overlayAdd(node)
			nodePut(node)
			return node
		}
	}
	else
	{
		switch(nodeObj.type)
		{
			case 'group':
				if(event.shiftKey)node=mapNodesTree.addLastChild(currentNode,new Overlay(name,address,zoom,latLng,HTML))
				else node=mapNodesTree.addFirstChild(currentNode,new Overlay(name,address,zoom,latLng,HTML))
				mapTreeNodes[currentNode].childrenOpen=true;
				if(overlayPresetCreate & NODES_CREATE_COPY)
				{
					if(overlayPresetUid)
					{
						mapNodes[node].presetSelect=overlayPresetUid
						overlayCopyFromPreset(node)
					}
				}
				if(overlayPresetCreate & NODES_CREATE_LOCK)
				{
					if(overlayPresetUid)
					{
						nodeLockPreset(node,overlayPresetUid)
					}
				}
				overlayAdd(node)
				overlayShow(node)
				nodePut(node)
				return node
			break;
			case 'overlay':
			case 'polygon':
			case 'marker':
				if(event.shiftKey)node=mapNodesTree.addPrevious(currentNode,new Overlay(name,address,zoom,latLng,HTML))
				else node=mapNodesTree.addNext(currentNode,new Overlay(name,address,zoom,latLng,HTML))
				if(overlayPresetCreate & NODES_CREATE_COPY)
				{
					if(overlayPresetUid)
					{
						mapNodes[node].presetSelect=overlayPresetUid
						overlayCopyFromPreset(node)
					}
				}
				if(overlayPresetCreate & NODES_CREATE_LOCK)
				{
					if(overlayPresetUid)
					{
						nodeLockPreset(node,overlayPresetUid)
					}
				}
				overlayAdd(node)
				overlayShow(node)
				nodePut(node)
				return node
			break;
		}
	}
}

	

function groupPutPresetCreateSelect()
{
	var x;
	if(!groupPresetCreateSelect)
	{
		groupPresetCreateSelect=new SelectBox('groupPresetCreate','nodeList',function(option){groupPresetCreate=option.value})
		groupPresetCreateSelect.setOptions(optionsPreset)
	}
	groupPresetCreateSelect.selectedIndex=groupPresetCreate;
	groupPresetCreateSelect.draw()
}

function markerPutPresetCreateSelect()
{
	var x;
	if(!markerPresetCreateSelect)
	{
		markerPresetCreateSelect=new SelectBox('markerPresetCreate','nodeList',function(option){markerPresetCreate=option.value})
		markerPresetCreateSelect.setOptions(optionsPreset)
	}
	markerPresetCreateSelect.selectedIndex=markerPresetCreate;
	markerPresetCreateSelect.draw()
}

function polygonPutPresetCreateSelect()
{
	var x;
	if(!polygonPresetCreateSelect)
	{
		polygonPresetCreateSelect=new SelectBox('polygonPresetCreate','nodeList',function(option){polygonPresetCreate=option.value})
		polygonPresetCreateSelect.setOptions(optionsPreset)
	}
	polygonPresetCreateSelect.selectedIndex=polygonPresetCreate;
	polygonPresetCreateSelect.draw()
}

function overlayPutPresetCreateSelect()
{
	var x;
	if(!overlayPresetCreateSelect)
	{
		overlayPresetCreateSelect=new SelectBox('overlayPresetCreate','nodeList',function(option){overlayPresetCreate=option.value})
		overlayPresetCreateSelect.setOptions(optionsPreset)
	}
	overlayPresetCreateSelect.selectedIndex=overlayPresetCreate;
	overlayPresetCreateSelect.draw()
}
