var polygonPresetActive=true;
var polygonPresetSelect=null
var polygonNodeZoomSelect=null
function Polygon(name,address,zoom,latLng)
{
		if(name)this.name=name;
		if(latLng)this.latLng=latLng;
		if(zoom)this.zoom=zoom;
		if(address)this.address=address;
		this.own=new PolygonOwn(zoom);
		this.polygon=this.own;
}

Polygon.prototype.name='Unnamed Polygon'
Polygon.prototype.zoom=null;
Polygon.prototype.latLng=null;
Polygon.prototype.xAL=null;
Polygon.prototype.geoCoderAddress=null;
Polygon.prototype.response=null;

Polygon.prototype.parent=null;
Polygon.prototype.isPreset=false
Polygon.prototype.isPresetRoot=false
Polygon.prototype.presetType='polygon'
Polygon.prototype.type='polygon'
Polygon.prototype.selected=false;
//Polygon.prototype.preset='';
Polygon.prototype.presetSelect='';
Polygon.prototype.inherit='';

function PolygonOwn(zoom)
{	
}

function nodePolygonSetup(node)
{
	polygonPutPresetSelect()
	polygonPutNodeZoomSelect(node)
}

function polygonSetName(name,node)
{
	if(!node)node=polygonCurrentNode
	var nodeObj=mapNodes[node]

	var element;
	nodeObj.name=name
	if(element=document.getElementById('nodeName_'+node))
	{
		element.innerHTML=name;
	}
	if(nodeObj.isPreset)
	{
		window[nodeObj.type+'PresetSelect'].setOptionValue(node,{value:node,text:'<SPAN CLASS="nodeIcon" ID="nodeIcon_'+node+'" NAME="nodeIcon_'+node+'">'+nodeGetIcon(node)+'</SPAN>'+name})
		window[nodeObj.type+'PresetsSelect'].setOptionValue(node,{value:node,text:'<SPAN CLASS="nodeIcon" ID="nodeIcon_'+node+'" NAME="nodeIcon_'+node+'">'+nodeGetIcon(node)+'</SPAN>'+name})
	}
	if(element=document.getElementById('polygonName'))element.value=name;
}

function polygonPutNodeZoomSelect(node)
{
	if(!node)node=polygonCurrentNode
	var nodeObj=mapNodes[node]
	var x;
	if(!polygonNodeZoomSelect)
	{
		polygonNodeZoomSelect=new SelectBox('polygonNodeZoom','polygon',function(option){polygonSetZoom(option.value,polygonCurrentNode)})
		polygonNodeZoomSelect.setOptions(optionsZoomNode)
		polygonNodeZoomSelect.selectedIndex=0;
	}
	polygonNodeZoomSelect.draw()
}

function polygonPutNodeZoom(node)
{
	if(!node)node=polygonCurrentNode
	var nodeObj=mapNodes[node]
	polygonNodeZoomSelect.selectIndex(nodeObj.zoom)
	nodePutZoomIcon(node)
}

function polygonSetZoom(zoom,node)
{
	if(!node)node=polygonCurrentNode
	var nodeObj=mapNodes[node]
	if((typeof zoom!='object') && !nodeObj.isPreset && (nodeObj.parent.uid!='root'))
	{
		var group=nodeObj.parent.group
		if(zoom<group.minZoom)zoom=group.minZoom
		if(zoom>group.maxZoom)zoom=group.maxZoom
	}
	nodeObj.zoom=zoom;
	polygonPutNodeZoom(node)
}


function polygonPutNode(node)
{
	if(!node)node=polygonCurrentNode
	var nodeObj=mapNodes[node]
	if(nodeObj)
	{
		polygonPutPreset()
		var element=document.getElementById('polygonName')
		element.value=nodeObj.name
		element.disabled=(nodeObj.isPresetRoot);
		element=document.getElementById('polygonAddress')
		element.value=(nodeObj.address)?nodeObj.address:'';
		element.disabled=(nodeObj.isPresetRoot);
		nodePutXAL(node)
		if(innerHTMLFix)
		{
			polygonPutPresetSelect()
			polygonPutNodeZoomSelect(node)
		}
		polygonNodeZoomSelect.selectValue(nodeObj.zoom)
		polygonPresetSelect.selectValue(nodeObj.presetSelect)
		
		nodePutLatLng(node)
		
		sections.polygon.showSectionContent()
	}
	else
	{
		sections.polygon.hideSectionContent()
	}	
}

function polygonPutPreset()
{
	var elements=document.getElementsByName('polygonPreset')
	for(var x=0;x<elements.length;x++)
	{
		elements[x].checked=polygonPresetActive;
		elements[x].disabled=!mapNodes[currentNode].presetSelect
	}
	document.getElementById('polygonLockPreset').checked=mapNodes[polygonCurrentNode].inherit
	document.getElementById('polygonCopyFromPreset').disabled=(polygonPresetActive || mapNodes[currentNode].inherit || !mapNodes[currentNode].presetSelect)
	document.getElementById('polygonCopyToPreset').disabled=(polygonPresetActive || mapNodes[currentNode].inherit || !mapNodes[currentNode].presetSelect)
	document.getElementById('polygonNodePreset').disabled=polygonPresetActive
	document.getElementById('polygonLockPreset').disabled=(polygonPresetActive || mapNodes[currentNode].isPreset || !mapNodes[currentNode].presetSelect)
	if(innerHTMLFix)polygonPutPresetSelect()
	if(polygonPresetSelect)polygonPresetSelect.setDisabled(polygonPresetActive)
}

function polygonSetLockPreset(onOff,node)
{
	if(!node)node=polygonCurrentNode
	var nodeObj=mapNodes[node]
	if(nodeObj.presetSelect)
	{
		if(onOff)nodeLockPreset(node)
		else nodeUnlockPreset(node)
		nodePut(node);
		polygonPutNode(node);
	}
	polygonPutPreset()
}


function polygonSetPresetActive(onOff)
{
	if(mapNodes[currentNode].type!='polygon' || mapNodes[currentNode].isPreset)
	{
		polygonPresetActive=onOff=true;
	}
	else if(!mapNodes[polygonCurrentNode].presetSelect && !polygonPresetActive)onOff=false;
	else
	{
		if(polygonPresetActive=onOff)polygonCurrentNode=mapNodes[polygonCurrentNode].presetSelect
		else polygonCurrentNode=currentNode
		polygonPutNode(polygonCurrentNode)
	}
	polygonPutPreset()
}

function polygonSetPresetSelect(toNode,node)
{
	if(!node)node=polygonCurrentNode
	var nodeObj=mapNodes[node]
	if(nodeObj.inherit)
	{
		if(toNode)nodeSetLockPreset(node,toNode)
		else nodeUnlockPreset(node)
	}
	nodeObj.presetSelect=toNode
	if(!toNode)nodePut(node)
	polygonPutNode(node)

}


function polygonPutPresetSelect()
{
	if(!polygonPresetSelect)
	{
		polygonPresetSelect=new SelectBox('polygonNodePreset','polygon',function(option){polygonSetPresetSelect(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>'+presets.polygon[uid].name})
		}
		while(treeObj=mapNodesTree.getNext(uid))
		polygonPresetSelect.setOptions(options)
		polygonPresetSelect.selectedIndex=0;
	}
	polygonPresetSelect.draw()
}


function polygonAddToPresets(node,event)
{
	if(event.shiftKey)var preset=mapNodesTree.addLastChild(polygonPresets.uid,new Polygon(mapNodes[node].name))
	else var preset=mapNodesTree.addFirstChild(polygonPresets.uid,new Polygon(mapNodes[node].name))
	polygonCopyToPreset(node,mapNodes[preset])
	nodeAddPreset(preset)
	nodePut(preset)
	//if(virtualRoot=='root' || virtualRoot==polygonPresets.uid)putNodes(polygonPresets.uid)
	return node
}


function polygonCopyPutFromPreset(node,preset)
{
	polygonCopyFromPreset(node,preset)
	nodePut(node)
	_setPolygon(node)
	polygonPutNode(node)
}

function polygonCopyPutToPreset(node,preset)
{
	polygonCopyToPreset(node,preset)
	nodePut(polygonPresetUid)
	setPolygon(polygonPresetUid)
	polygonPutNode(polygonPresetUid)
}

function polygonCopyFromPreset(node,preset)
{
	if(!node)node=polygonCurrentNode
	var nodeObj=mapNodes[node]
	if(!preset)
	{
		if(nodeObj.presetSelect)preset=mapNodes[nodeObj.presetSelect]
		else return
	}
	var x
	for(x in nodeObj.polygon)
	{
		if(preset.polygon.hasOwnProperty(x))
		{
			switch(x)
			{
				case '':
				break;
				default:
					nodeObj.polygon[x]=preset.polygon[x]
				break;
			}
		}
		else delete(nodeObj.polygon[x])
	}
	nodePut(node)
	
	if(!polygonPresetActive && polygonCurrentNode==node)
	{
		polygonPutNode(node)
	}
}



function polygonCopyToPreset(node,preset)
{
	if(!node)node=polygonCurrentNode
	var nodeObj=mapNodes[node]
	if(!preset)
	{
		if(nodeObj.presetSelect)preset=mapNodes[nodeObj.presetSelect]
		else return
	}
	
	var x
	for(x in nodeObj.polygon)
	{
		if(nodeObj.polygon.hasOwnProperty(x))
		{
			switch(x)
			{
				case '':
				break;
				default:
					preset.polygon[x]=nodeObj.polygon[x]
				break;
			}
		}
		else delete(preset.polygon[x])

	}

	nodePut(polygonPresetUid)
	
	if(polygonPresetActive)
	{
		polygonPutNode(polygonPresetUid)
	}
}

function polygonGetPresetInfo(node)
{
	var out='';
	if(node)var polygonPreset=mapNodes[node]
	else var polygonPreset=window.polygonPreset
	if(polygonPreset)
	{
		if(polygonPreset.isPreset)var polygon=polygonPreset.polygon;
		else var polygon=polygonPreset.own;
		out+='<U>Name:</U> '+polygonPreset.name+'<BR>'
	}
	return out
}