var groupPresetsSelect=null;
var markerPresetsSelect=null;
var polygonPresetsSelect=null;
var overlayPresetsSelect=null;

var groupPresetUid='';
var markerPresetUid='';
var polygonPresetUid='';
var overlayPresetUid='';


var presets={
	marker:{}
	,markerPreset:null
	,markerCount:0
	,markerUsedCount:{}
	,markerInherit:{}
	,polygon:{}
	,polygonCount:0
	,polygonUsedCount:{}
	,polygonInherit:{}
	,polygonPreset:null
	,group:{}
	,groupPreset:null
	,groupCount:0
	,groupUsedCount:{}
	,groupInherit:{}
	,overlay:{}
	,overlayPreset:null
	,overlayCount:0
	,overlayUsedCount:{}
	,overlayInherit:{}
}


function presetsSetup()
{
	nodeAddPreset(groupPresetUid)
	nodeAddPreset(markerPresetUid)
	nodeAddPreset(polygonPresetUid)
	nodeAddPreset(overlayPresetUid)
}


function nodeAddPreset(node)
{
	var nodeObj=mapNodes[node]
	presets[nodeObj.type][node]=nodeObj
	presets[nodeObj.type+'UsedCount'][node]=0
	presets[nodeObj.type+'Count']++
	presets[nodeObj.type+'Inherit'][node]={}
	
	nodeObj.isPreset=true;
	var select=null;
	if(select=window[nodeObj.type+'PresetsSelect'])
	{
		var options=[optionNoPreset]
		var treeObj=mapNodesTree.getFirstChild(window[nodeObj.type+'Presets'].uid,true)
		var uid;
		do
		{
			uid=treeObj.uid
			options.push({value:uid,text:'<SPAN CLASS="nodeIcon" ID="nodeIcon_'+uid+'" NAME="nodeIcon_'+uid+'">'+nodeGetIcon(uid)+'</SPAN>'+mapNodes[uid].name})
		}
		while(treeObj=mapNodesTree.getNext(uid,true))
		select.setOptions(options)
		select.draw()
		select.selectValue(window[nodeObj.type+'PresetUid']);
	}
	if(select=window[nodeObj.type+'PresetSelect'])
	{
		var treeObj=mapNodesTree.getFirstChild(window[nodeObj.type+'Presets'].uid,true)
		var options=[optionNoPreset]
		var uid;
		do
		{
			uid=treeObj.uid
			options.push({value:uid,text:'<SPAN CLASS="nodeIcon" ID="nodeIcon_'+uid+'" NAME="nodeIcon_'+uid+'">'+nodeGetIcon(uid)+'</SPAN>'+mapNodes[uid].name})
		}
		while(treeObj=mapNodesTree.getNext(uid,true))
		select.setOptions(options)
		select.draw()
		select.selectValue(window[nodeObj.type+'PresetUid']);
	}
	return node
}

function nodeRemovePreset(node,replace)
{
	var x,nodeObj=mapNodes[node]
	var type=nodeObj.type;

	if(!replace)replace=''
	if(!presets[type+'Inherit'][replace])presets[type+'Inherit'][replace]={}
	var inherits=presets[type+'Inherit'][node]
	var node_Obj

	for(x in mapNodes)
	{
		node_Obj=mapNodes[x]
		if(node_Obj.presetSelect==node)node_Obj.presetSelect=replace
		if(inherits[x])
		{
			node_Obj.inherit=replace
			if(replace)
			{
				presets[type+'Inherit'][replace][x]=node_Obj
				node_Obj[type]=mapNodes[replace][type]
			}
			else
			{
				node_Obj[type]=node_Obj.own
			}
			
			if(node_Obj.infoOpen)
			{
				if((node_Obj.marker.infoSimpleOpenOn && node_Obj.infoOpen==1)
				|| (node_Obj.marker.infoTabbedOpenOn && node_Obj.infoOpen==2)
				|| (node_Obj.marker.infoBlowupOpenOn && node_Obj.infoOpen==3))
				{
					openMarkerInfoWindow(x,null,node_Obj.infoOpen)	
				}
				else
				{
					closeMarkerInfoWindow(x,null,node_Obj.infoOpen)
				}
			}
		}
		if(x!=node)nodePut(x)
	}
	
	switch(nodeObj.type)
	{
		case 'marker':
			markerSet(node)
		break;
		case 'overlay':
			overlayRebuild(node)
			overlaySet(node,true)
		break;
		case 'polygon':
		break;
		case 'group':
			nodesShowHideOnZoom(map.zoom)
			//to do was effizentes um die Zoomwerte zu korrigieren 
		break;
	}
	

	delete presets[type+'Inherit'][node]
	presets[type+'Count']--
	delete presets[type+'UsedCount'][node]
	delete presets[type][node];
	//

	if(window[type+'CurrentNode']==node)window[type+'CurrentNode']='';
	if(window[type+'PresetUid']==node)
	{
		window[type+'Preset']=null;
		window[type+'PresetUid']='';
	}
	window[type+'PutNode'](window[type+'CurrentNode'])
	
	var select=null;
	if(select=window[type+'PresetsSelect'])
	{
		select.removeOptionValue(node)
	}
	if(select=window[type+'PresetSelect'])
	{
		select.removeOptionValue(node)
	}
}


function nodeSetLockPreset(node,preset)
{
	var nodeObj=mapNodes[node]
	if(!preset)preset=nodeObj.presetSelect
	if(preset)
	{
		nodeObj.presetSelect=preset
		var presetObj=mapNodes[preset]
		delete presets[nodeObj.type+'Inherit'][nodeObj.inherit][node]
		nodeObj[nodeObj.type]=mapNodes[preset].marker;
		presets[nodeObj.type+'Inherit'][preset][node]=mapNodes[node]
		if(nodeObj.infoOpen)
		{
			if((nodeObj.marker.infoSimpleOpenOn && nodeObj.infoOpen==1)
			|| (nodeObj.marker.infoTabbedOpenOn && nodeObj.infoOpen==2)
			|| (nodeObj.marker.infoBlowupOpenOn && nodeObj.infoOpen==3))
			{
				openMarkerInfoWindow(nodeObj.uid,null,nodeObj.infoOpen)	
			}
			else
			{
				closeMarkerInfoWindow(nodeObj.uid,null,nodeObj.infoOpen)
			}
		}
	}
	nodePut(node)
}


function nodeLockPreset(node,preset)
{
	var nodeObj=mapNodes[node]
	if(!preset)preset=nodeObj.presetSelect
	
	if(preset)
	{
		nodeObj.presetSelect=preset
		nodeObj[nodeObj.type]=mapNodes[preset][nodeObj.type];
		var presetObj=mapNodes[preset]
		presets[nodeObj.type+'Inherit'][preset][node]=mapNodes[node]
		nodeObj.inherit=preset
		if(nodeObj.infoOpen)
		{
			if((nodeObj.marker.infoSimpleOpenOn && nodeObj.infoOpen==1)
			|| (nodeObj.marker.infoTabbedOpenOn && nodeObj.infoOpen==2)
			|| (nodeObj.marker.infoBlowupOpenOn && nodeObj.infoOpen==3))
			{
				openMarkerInfoWindow(nodeObj.uid,null,nodeObj.infoOpen)	
			}
			else
			{
				closeMarkerInfoWindow(nodeObj.uid,null,nodeObj.infoOpen)
			}
		}
	}
	nodePut(node)
}

function nodeUnlockPreset(node)
{
	var nodeObj=mapNodes[node]
	delete presets[nodeObj.type+'Inherit'][nodeObj.inherit][node]
	nodeObj[nodeObj.type]=nodeObj.own;
	nodeObj.inherit=''
	//nodeObj.presetSelect=''
	if(nodeObj.infoOpen)
	{
		if((nodeObj.marker.infoSimpleOpenOn && nodeObj.infoOpen==1)
		|| (nodeObj.marker.infoTabbedOpenOn && nodeObj.infoOpen==2)
		|| (nodeObj.marker.infoBlowupOpenOn && nodeObj.infoOpen==3))
		{
			openMarkerInfoWindow(nodeObj.uid,null,nodeObj.infoOpen)	
		}
		else
		{
			closeMarkerInfoWindow(nodeObj.uid,null,nodeObj.infoOpen)
		}
	}
	nodePut(node)
}

function nodeToggleLockPreset(node)
{
	var nodeObj=mapNodes[node]
	if(nodeObj.inherit)nodeUnlockPreset(node)
	else nodeLockPreset(node)
}



function nodeRemoveLockPreset(node)
{
	var nodeObj=mapNodes[node]
	delete presets[nodeObj.type+'Inherit'][nodeObj.inherit][node]
}

function groupSetPreset(node)
{
	groupPreset=presets.groupPreset=mapNodes[node];
	groupPresetUid=node
	if(!groupPreset)groupPresetCreateSelect.selectValue(groupPresetCreate=0);
	return node
}

function groupPutPresetsSelect()
{
	if(!groupPresetsSelect)
	{
		groupPresetsSelect=new SelectBox('groupPresets','nodeList',function(option){groupSetPreset(option.value)})
		var options=[optionNoPreset]
		var treeObj=mapNodesTree.getFirstChild(groupPresets.uid,true)
		var uid;
		do
		{
			uid=treeObj.uid
			options.push({value:uid,text:'<SPAN CLASS="nodeIcon" ID="nodeIcon_'+uid+'" NAME="nodeIcon_'+uid+'">'+nodeGetIcon(uid)+'</SPAN>'+mapNodes[uid].name})
		}
		while(treeObj=mapNodesTree.getNext(uid))
		groupPresetsSelect.setOptions(options)
		groupPresetsSelect.selectedIndex=1;
	}
	groupPresetsSelect.draw()
}

function markerSetPreset(node)
{
	markerPreset=presets.markerPreset=mapNodes[node];;
	markerPresetUid=node
	if(!markerPreset)markerPresetCreateSelect.selectValue(markerPresetCreate=0);
	return node
}

function markerPutPresetsSelect()
{
	if(!markerPresetsSelect)
	{
		markerPresetsSelect=new SelectBox('markerPresets','nodeList',function(option){markerSetPreset(option.value)})
		var options=[optionNoPreset]
		var treeObj=mapNodesTree.getFirstChild(markerPresets.uid,true)
		var uid;
		do
		{
			uid=treeObj.uid
			options.push({value:uid,text:'<SPAN CLASS="nodeIcon" ID="nodeIcon_'+uid+'" NAME="nodeIcon_'+uid+'">'+nodeGetIcon(uid)+'</SPAN>'+mapNodes[uid].name})
		}
		while(treeObj=mapNodesTree.getNext(uid))
		markerPresetsSelect.setOptions(options)
		markerPresetsSelect.selectedIndex=1;
	}
	markerPresetsSelect.draw()
}

function polygonSetPreset(node)
{
	polygonPreset=presets.polygonPreset=mapNodes[node];
	polygonPresetUid=node;
	if(!polygonPreset)polygonPresetCreateSelect.selectValue(polygonPresetCreate=0);
	return node
}

function polygonPutPresetsSelect()
{
	if(!polygonPresetsSelect)
	{
		polygonPresetsSelect=new SelectBox('polygonPresets','nodeList',function(option){polygonSetPreset(option.value)})
		var options=[optionNoPreset]
		var treeObj=mapNodesTree.getFirstChild(polygonPresets.uid,true)
		var uid;
		do
		{
			uid=treeObj.uid
			options.push({value:uid,text:'<SPAN CLASS="nodeIcon" ID="nodeIcon_'+uid+'" NAME="nodeIcon_'+uid+'">'+nodeGetIcon(uid)+'</SPAN>'+mapNodes[uid].name})
		}
		while(treeObj=mapNodesTree.getNext(uid))
		polygonPresetsSelect.setOptions(options)
		polygonPresetsSelect.selectedIndex=1;
	}
	polygonPresetsSelect.draw()
}

function overlaySetPreset(node)
{
	overlayPreset=presets.overlayPreset=mapNodes[node];
	overlayPresetUid=node
	if(!overlayPreset)overlayPresetCreateSelect.selectValue(overlayPresetCreate=0);
	return node
}
function overlayPutPresetsSelect()
{
	if(!overlayPresetsSelect)
	{
		overlayPresetsSelect=new SelectBox('overlayPresets','nodeList',function(option){overlaySetPreset(option.value)})
		var options=[optionNoPreset]
		var treeObj=mapNodesTree.getFirstChild(overlayPresets.uid,true)
		var uid;
		do
		{
			uid=treeObj.uid
			options.push({value:uid,text:'<SPAN CLASS="nodeIcon" ID="nodeIcon_'+uid+'" NAME="nodeIcon_'+uid+'">'+nodeGetIcon(uid)+'</SPAN>'+mapNodes[uid].name})
		}
		while(treeObj=mapNodesTree.getNext(uid))
		overlayPresetsSelect.setOptions(options)
		overlayPresetsSelect.selectedIndex=1;
	}
	overlayPresetsSelect.draw()
}

