var overlayPresetActive=true;
var overlayPresetSelect=null
var overlayZoomSelect=null;
var overlayPaneSelect=null;
var overlayOverflowSelect=null;
var overlayOffsetSelect=null;
var overlayBorderTypeSelect=null;
var overlayTypeSelect=null;
var overlayDragging=''

function Overlay(name,address,zoom,latLng,HTML)
{
		if(name)this.name=name;
		if(latLng)this.latLng=latLng;
		if(address)this.address=address;
		if(zoom)this.zoom=zoom;
		this.own=new OverlayOwn(HTML);
		this.overlay=this.own;
}

Overlay.prototype.name='Unnamed Overlay'
Overlay.prototype.address='';
Overlay.prototype.xAL=null;
Overlay.prototype.geoCoderAddress=null;
Overlay.prototype.response=null;

Overlay.prototype.zoom=0;
Overlay.prototype.latLng=null;

Overlay.prototype.gOverlay=null;
Overlay.prototype.overlayVisible=false;
Overlay.prototype.overlayZoomVisible=true;

Overlay.prototype.parent=null;
Overlay.prototype.isPreset=false
Overlay.prototype.isPresetRoot=false
Overlay.prototype.presetType='overlay'
Overlay.prototype.type='overlay'
Overlay.prototype.selected=false;
//Overlay.prototype.preset='';
Overlay.prototype.presetSelect='';
Overlay.prototype.inherit='';

Overlay.prototype.dragOffsetX=0;
Overlay.prototype.dragOffsetY=0;
Overlay.prototype.dragEndHandler

function OverlayOwn(HTML)
{	
	if(HTML)this.HTML=HTML;
}

var F_OFFSET_CUSTOM=0
var F_OFFSET_LEFT=1
var F_OFFSET_TOP=2
var F_OFFSET_RIGHT=4
var F_OFFSET_BOTTOM=8
var F_OFFSET_CENTERHORZ=F_OFFSET_LEFT | F_OFFSET_RIGHT
var F_OFFSET_CENTERVERT=F_OFFSET_TOP | F_OFFSET_BOTTOM
var F_OFFSET_CENTERMIDDLE=F_OFFSET_CENTERHORZ | F_OFFSET_CENTERVERT

OverlayOwn.prototype.type='html';

OverlayOwn.prototype.offset=F_OFFSET_CENTERMIDDLE;
OverlayOwn.prototype.offsetX=0
OverlayOwn.prototype.offsetY=0

OverlayOwn.prototype.opacity=100;
OverlayOwn.prototype.borderSize=1;
OverlayOwn.prototype.borderType='solid';
OverlayOwn.prototype.borderColor='black';
OverlayOwn.prototype.backgroundColor='white';
OverlayOwn.prototype.padding=2;

OverlayOwn.prototype.overflow='auto';
OverlayOwn.prototype.HTML='New Overlay';
OverlayOwn.prototype.HTMLWrap='';
OverlayOwn.prototype.HTMLSize=null;

OverlayOwn.prototype.imageSrc='gfx/overlayImg.jpg';
OverlayOwn.prototype.imageWidth=300;
OverlayOwn.prototype.imageHeight=200;
OverlayOwn.prototype.imageOffsetX=0
OverlayOwn.prototype.imageOffsetY=0
OverlayOwn.prototype.imageOriginalWidth=300;
OverlayOwn.prototype.imageOriginalHeight=200;

OverlayOwn.prototype.imageLatLngSW=null
OverlayOwn.prototype.imageLatLngNE=null


OverlayOwn.prototype.imageAspect=true;
OverlayOwn.prototype.imageSize=null;
OverlayOwn.prototype.imageLatLngBounds=null;


OverlayOwn.prototype.pane=G_MAP_MAP_PANE;
OverlayOwn.prototype.maxWidth=0;
OverlayOwn.prototype.minWidth=0;
OverlayOwn.prototype.maxHeight=0;
OverlayOwn.prototype.minHeight=0;


function gOverlay(parent)
{
	if(parent)
	{
		this.parent=parent;
		this.uid=parent.uid;
	}
}

gOverlay.prototype=new GOverlay();
gOverlay.prototype.parent=null;	
gOverlay.prototype.pixelPos=null;	
gOverlay.prototype.uid=''	
gOverlay.prototype.type='html'
gOverlay.prototype.overlay=null;
gOverlay.prototype.map=null;

gOverlay.prototype.initialize=function(map)
{
	this.map=map;
	
	switch(this.parent.overlay.type)
	{
		case 'html':
			this.overlay = document.createElement('DIV');
		break;
		case 'img':
			this.overlay = document.createElement('IMG');
		break;
	}
	//this.overlay.id='overlayContainer_'+this.uid 
	//this.overlay.className='overlayContainer'
	
	this.overlay.id='overlay_'+this.uid 
	this.overlay.className='overlay'
	this.overlay.style.position='absolute';
	this.overlay.style.overflow=this.parent.overlay.overflow
	this.overlay.style.cursor='hand'
	if(this.overlay.addEventListener)this.overlay.addEventListener("dragstart",new Function('event','overlayPreventDrag(\''+this.uid+'\',event)'),false);
	else if(this.overlay.attachEvent)this.overlay.attachEvent("ondragstart",new Function('event','overlayPreventDrag(\''+this.uid+'\',event)'));
	if(this.overlay.addEventListener)this.overlay.addEventListener("mousedown",new Function('event','overlayDragStart(\''+this.uid+'\',event)'),false);
	else if(this.overlay.attachEvent)this.overlay.attachEvent("onmousedown",new Function('event','overlayDragStart(\''+this.uid+'\',event)'));
	if(this.overlay.addEventListener)this.overlay.addEventListener("click",new Function('event','overlayClick(\''+this.uid+'\',event)'),false);
	else if(this.overlay.attachEvent)this.overlay.attachEvent("onclick",new Function('event','overlayClick(\''+this.uid+'\',event)'));
	map.getPane(this.parent.overlay.pane).appendChild(this.overlay);
}

gOverlay.prototype.remove = function()
{
	
	if(this.overlay.removeEventListener)this.overlay.addEventListener("dragstart",new Function('event','overlayPreventDrag(\''+this.uid+'\',event)'),false);
	else if(this.overlay.detachEvent)this.overlay.attachEvent("ondragstart",new Function('event','overlayPreventDrag(\''+this.uid+'\',event)'));
	if(this.overlay.removeEventListener)this.overlay.removeEventListener("mousedown",new Function('event','overlayDragStart(\''+this.uid+'\',event)'),false);
	else if(this.overlay.detachEvent)this.overlay.detachEvent("onmousedown",new Function('event','overlayDragStart(\''+this.uid+'\',event)'));
	if(this.overlay.removeEventListener)this.overlay.removeEventListener("mouseup",new Function('event','overlayClick(\''+this.uid+'\',event)'),false);
	else if(this.overlay.detachEvent)this.overlay.detachEvent("onmouseup",new Function('event','overlayClick(\''+this.uid+'\',event)'));
	this.overlay.parentNode.removeChild(this.overlay);
}

gOverlay.prototype.copy = function()
{
	return new gOverlay(this.parent);
}

gOverlay.prototype.redraw=function(force)
{
	//if(!force)return
	var overlay=this.parent.overlay;
	var style=this.overlay.style;
	switch(overlay.type)
	{
		case 'img':
			
			this.overlay.src=overlay.imageSrc;
			var size=overlay.imageSize;
			var wrapWidth=map.mapType.getProjection().getWrapWidth(gmap.getZoom())
			var _pixelRightBottom=this.map.fromLatLngToDivPixel(size.latLngRightBottom)	
			this.pixelPos=this.map.fromLatLngToDivPixel(this.parent.latLng)
			
			var _pixelTopLeft=this.map.fromLatLngToDivPixel(size.latLngTopLeft)	
			
			var _left=_pixelTopLeft.x
			var _top=_pixelTopLeft.y
			var _right=_pixelRightBottom.x
			var _bottom=_pixelRightBottom.y
			if(_right<_left)_left=_left-wrapWidth
			var _width=_right-_left
			var _height=_bottom-_top
			var offsetAspectX=overlay.imageWidth/_width
			var offsetAspectY=overlay.imageHeight/_height
			
			if(overlay.imageWidth>size.wrapWidth)
			{
				offsetAspectY=offsetAspectX=offsetAspectY	
				_height=overlay.imageHeight/offsetAspectY	
				_width=overlay.imageWidth/offsetAspectY	
			}
			var _offsetX=Math.floor(overlay.offsetX/offsetAspectX)
			var _offsetY=Math.floor(overlay.offsetY/offsetAspectY)
			overlay.imageOffsetX=_offsetX
			overlay.imageOffsetY=_offsetY
			
			_left=this.pixelPos.x-_offsetX
			_top=this.pixelPos.y-_offsetY
			
			style.width=_width+"px";
			style.height=_height+"px";
			style.left=_left-size.add+"px";
			style.top=_top-size.add+"px";
		break;
		case 'html':	
			this.pixelPos=this.map.fromLatLngToDivPixel(this.parent.latLng);
			if(overlay.HTMLSize)
			{
				var size=overlay.HTMLSize;
				style.width=(size.width)?size.width+"px":'';
				style.height=(size.height)?size.height+"px":'';
			}
			style.left=(this.pixelPos.x-overlay.offsetX)+"px";
			style.top=(this.pixelPos.y-overlay.offsetY)+"px";
			this.overlay.innerHTML=getOverlay(this.uid)
		break;
	}

	if(typeof style.filter=='string')style.filter=(overlay.opacity!=100)?'progid:DXImageTransform.Microsoft.Alpha(Opacity='+overlay.opacity+')':'';
	else if(typeof style.KHTMLOpacity=='string')style.KHTMLOpacity=(overlay.opacity!=100)?overlay.opacity/100:'';
	else if(typeof style.MozOpacity=='string')style.MozOpacity=(overlay.opacity!=100)?overlay.opacity/100:'';
	else if(typeof style.opacity=='string')style.opacity=(overlay.opacity!=100)?overlay.opacity/100:'';
	style.border=(overlay.borderSize)?overlay.borderSize+'px '+overlay.borderType+' '+overlay.borderColor:''
	style.backgroundColor=(overlay.backgroundColor)?overlay.backgroundColor:'';
	style.padding=(overlay.padding)?overlay.padding+'px':'';
	
}

function overlayClick(node,e)
{
	if(window.getSelection)window.getSelection().removeAllRanges();
	else if(document.selection)document.selection.empty();
	
	var nodeObj=mapNodes[node]
	var element=((typeof e.srcElement!='undefined')?e.srcElement:e.target)
	if(!e.shiftKey && !nodeObj.isDragging)//element.className=='overlay' && 
	{
		var nodeObj=mapNodes[node]
		if(!nodeObj.isDragging)nodeSetCurrent(node)
		if(e.stopPropagation)e.stopPropagation();
		else e.cancelBubble=true;
		//if(e.preventDefault)e.preventDefault();
		//else e.returnValue=false;	
	}
}

function overlayPreventDrag(node,e)
{
	if(e.shiftKey)
	{
		if(e.stopPropagation)e.stopPropagation();
		else e.cancelBubble=true;
		if(e.preventDefault)e.preventDefault();
		else e.returnValue=false;	
	}
}

function overlayPreventScroll(node,e)
{
	if(e.shiftKey)
	{
		if(e.stopPropagation)e.stopPropagation();
		else e.cancelBubble=true;
		if(e.preventDefault)e.preventDefault();
		else e.returnValue=false;	
	}
}


function overlayDragStart(node,e)
{
	if(window.getSelection)window.getSelection().removeAllRanges();
	else if(document.selection)document.selection.empty();
	var element=((typeof e.srcElement!='undefined')?e.srcElement:e.target)
	var nodeObj=mapNodes[node]
	if(e.shiftKey && !nodeObj.isDragging) //element.className=='overlay' &&
	{
		document.getElementById('overlay_'+node).style.overflow='hidden';
		nodeObj.gOverlay.overlay.style.cursor='move'
		//nodeObj.dragPreventScrollHandler=events.addListener('scroll',new Function('e','overlayPreventScroll(\''+node+'\',e)'))
		//nodeObj.dragPreventDragHandler=events.addListener('dragstart',new Function('e','overlayPreventDrag(\''+node+'\',e)'))
		nodeObj.dragEndHandler=events.addListener('mouseup',new Function('e','overlayDragEnd(\''+node+'\',e)'))
		overlayDragging=node;
		if(e.preventDefault)e.preventDefault();
		else e.returnValue=false;
	}
	
	if(e.stopPropagation)e.stopPropagation();
	else e.cancelBubble=true;
}

function overlayDrag(node,pos)
{
	if(window.getSelection)window.getSelection().removeAllRanges();
	else if(document.selection)document.selection.empty();
	
	var nodeObj=mapNodes[node]
	if(nodeObj.isDragging)
	{
		var overlay=nodeObj.overlay;
		switch(nodeObj.overlay.type)
		{
			case 'html':
				//nodeObj.latLng=gmap.fromDivPixelToLatLng(new GPoint(pos.x-nodeObj.dragOffsetX,pos.y-nodeObj.dragOffsetY))
				nodeObj.latLng=gmap.fromDivPixelToLatLng(nodeObj.gOverlay.pixelPos=new GPoint(pos.x-nodeObj.dragOffsetX,pos.y-nodeObj.dragOffsetY))
				nodeObj.gOverlay.overlay.style.left=pos.x-nodeObj.dragOffsetX-overlay.offsetX+'px';
				nodeObj.gOverlay.overlay.style.top=pos.y-nodeObj.dragOffsetY-overlay.offsetY+'px';
				nodePutLatLng(node)
			break;
			case 'img':
				//nodeObj.latLng=gmap.fromDivPixelToLatLng(new GPoint(pos.x-nodeObj.dragOffsetX,pos.y-nodeObj.dragOffsetY))
				nodeObj.latLng=gmap.fromDivPixelToLatLng(nodeObj.gOverlay.pixelPos=new GPoint(pos.x-nodeObj.dragOffsetX,pos.y-nodeObj.dragOffsetY))
				nodeObj.gOverlay.overlay.style.left=pos.x-nodeObj.dragOffsetX-overlay.imageOffsetX-overlay.imageSize.add+'px';
				nodeObj.gOverlay.overlay.style.top=pos.y-nodeObj.dragOffsetY-overlay.imageOffsetY-overlay.imageSize.add+'px';
				nodePutLatLng(node)
				_overlayRebuild(node)
			break;
		}
	}
	else
	{
		switch(nodeObj.overlay.type)
		{
			case 'html':
				nodeObj.dragOffsetX=pos.x-nodeObj.gOverlay.pixelPos.x;
				nodeObj.dragOffsetY=pos.y-nodeObj.gOverlay.pixelPos.y;
			break;
			case 'img':
				nodeObj.dragOffsetX=pos.x-nodeObj.gOverlay.pixelPos.x;
				nodeObj.dragOffsetY=pos.y-nodeObj.gOverlay.pixelPos.y;
			break;
		}
		nodeObj.isDragging=true;
	}
}


function overlayDragEnd(node,e)
{

	if(window.getSelection)window.getSelection().removeAllRanges();
	else if(document.selection)document.selection.empty();
	var nodeObj=mapNodes[node]
	if(nodeObj.dragEndHandler)nodeObj.dragEndHandler.remove()
	nodeObj.dragEndHandler=null
	//if(nodeObj.dragPreventDragHandler)nodeObj.dragPreventDragHandler.remove()
	//nodeObj.dragPreventDragHandler=null
	//if(nodeObj.dragPreventScrollHandler)nodeObj.dragPreventScrollHandler.remove()
	//nodeObj.dragPreventScrollHandler=null
	overlayDragging='';
	nodeObj.isDragging=false;
	nodeObj.gOverlay.redraw()
	nodeObj.gOverlay.overlay.style.cursor='hand'
	document.getElementById('overlay_'+node).style.overflow=nodeObj.overlay.overflow;
	if(e.stopPropagation)e.stopPropagation();
	else e.cancelBubble=true;
}


function overlaySetup(node)
{
	overlayPutPresetSelect()
	overlayPutNodeZoomSelect()
	overlayPutOverflowSelect()
	overlayPutBorderTypeSelect()
	overlayPutPaneSelect()
	overlayPutOffsetSelect()
	overlayPutTypeSelect()
	editPutBlockformats('overlay')
}


function overlayPutOffsetSelect(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]

	var x,event;
	if(!overlayOffsetSelect)
	{
		overlayOffsetSelect=new SelectBox('overlayOffset','overlay',function(option){overlaySetOffset(option.value,overlayCurrentNode)})
		overlayOffsetSelect.setOptions(optionsOffset)
		overlayOffsetSelect.selectedIndex=0
	}
	overlayOffsetSelect.draw()
}

function overlayPutBorderTypeSelect(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]

	var x,event;
	if(!overlayBorderTypeSelect)
	{
		overlayBorderTypeSelect=new SelectBox('overlayBorderType','overlay',function(option){overlaySetBorderType(option.value,overlayCurrentNode)})
		overlayBorderTypeSelect.setOptions(optionsBorderType)
		overlayBorderTypeSelect.selectedIndex=0
	}
	overlayBorderTypeSelect.draw()
}

function overlayPutTypeSelect(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]

	var x,event;
	if(!overlayTypeSelect)
	{
		overlayTypeSelect=new SelectBox('overlayType','overlay',function(option){overlaySetType(option.value,overlayCurrentNode)})
		overlayTypeSelect.setOptions(optionsOverlayType)
		overlayTypeSelect.selectedIndex=0
	}
	overlayTypeSelect.draw()
}


function overlayPutPaneSelect(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]

	var x,event;
	if(!overlayPaneSelect)
	{
		overlayPaneSelect=new SelectBox('overlayPane','overlay',function(option){overlaySetPane(option.value,overlayCurrentNode)})
		overlayPaneSelect.setOptions(optionsPane)
		overlayPaneSelect.selectedIndex=0
	}
	overlayPaneSelect.draw()
}

function overlayPutOverflowSelect(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]

	var x,event;
	if(!overlayOverflowSelect)
	{
		overlayOverflowSelect=new SelectBox('overlayOverflow','overlay',function(option){overlaySetOverflow(option.value)})
		overlayOverflowSelect.setOptions(optionsOverflow)
		overlayOverflowSelect.selectedIndex=0//nodeObj.marker.infoSimpleOverflow;
	}
	overlayOverflowSelect.draw()
}



function overlaySetName(name,node)
{
	if(!node)node=overlayCurrentNode
	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('overlayName'))element.value=name;
}

function overlayPutNodeZoomSelect(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	var x;
	if(!overlayZoomSelect)
	{
		overlayZoomSelect=new SelectBox('overlayNodeZoom','overlay',function(option){overlaySetZoom(option.value,overlayCurrentNode)})
		overlayZoomSelect.setOptions(optionsZoomNode)
		overlayZoomSelect.selectedIndex=0;
	}
	overlayZoomSelect.draw()
}


function overlayPutZoom(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	overlayZoomSelect.selectValue(nodeObj.zoom)
	nodePutZoomIcon(node)
}

function overlaySetZoom(zoom,node)
{
	if(!node)node=overlayCurrentNode
	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;
	overlayPutZoom(node)
	if(nodeObj.overlay.type=='img')
	{
		overlayRebuild(node)
		overlaySet(node,true)
	}
}

function overlayPutHTML(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	var doc=editDoc['overlay']
	if(doc)
	{
		if(!doc && ((isIE)?doc.readyState!='complete':true))
		{
			setTimeout('overlayPutHTML(\''+node+'\')',10)
			return
		}
		doc.body.innerHTML=nodeObj.overlay.HTML
		//if(isIE)doc.selection.empty();
	}
}



function overlayPutNode(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(nodeObj)
	{
		overlayPutPreset()
		var element=document.getElementById('overlayName')
		element.value=nodeObj.name
		element.disabled=(nodeObj.isPresetRoot);
		element=document.getElementById('overlayAddress')
		element.value=(nodeObj.address)?nodeObj.address:'';
		element.disabled=(nodeObj.isPresetRoot);
		nodePutXAL(node)

		
		
		if(innerHTMLFix)
		{
			overlayPutPresetSelect()
			overlayPutNodeZoomSelect()
			overlayPutOverflowSelect()
			overlayPutBorderTypeSelect()
		}
		overlayPresetSelect.selectValue(nodeObj.presetSelect)
		overlayZoomSelect.selectValue(nodeObj.zoom)
		overlayOverflowSelect.selectValue(nodeObj.overlay.overflow)
		overlayBorderTypeSelect.selectValue(nodeObj.overlay.borderType)
		overlayTypeSelect.selectValue(nodeObj.overlay.type)
		overlayOffsetSelect.selectValue(nodeObj.overlay.offset)

		nodePutLatLng(node)
		overlayPutLatLngSW(node)
		overlayPutLatLngNE(node)
		
		document.getElementById('overlayHTMLEdit').onload=null
		document.getElementById('overlayOpacity').value=nodeObj.overlay.opacity;
		document.getElementById('overlayBorderSize').value=nodeObj.overlay.borderSize;
		document.getElementById('overlayBorderColor').value=nodeObj.overlay.borderColor;
		document.getElementById('overlayBackgroundColor').value=nodeObj.overlay.backgroundColor;
		document.getElementById('overlayPadding').value=nodeObj.overlay.padding;
		
		document.getElementById('overlayOffsetX').value=nodeObj.overlay.offsetX;
		document.getElementById('overlayOffsetY').value=nodeObj.overlay.offsetY;
		document.getElementById('overlayOffsetX').disabled=nodeObj.overlay.offset;
		document.getElementById('overlayOffsetY').disabled=nodeObj.overlay.offset;
		document.getElementById('overlayMaxWidth').value=(nodeObj.overlay.maxWidth)?nodeObj.overlay.maxWidth:'n/a'
		document.getElementById('overlayMinWidth').value=(nodeObj.overlay.minWidth)?nodeObj.overlay.minWidth:'n/a'
		document.getElementById("overlayMaxHeight").value=(nodeObj.overlay.maxHeight)?nodeObj.overlay.maxHeight:'n/a'
		document.getElementById("overlayMinHeight").value=(nodeObj.overlay.minHeight)?nodeObj.overlay.minHeight:'n/a'

		document.getElementById('overlayImageSrc').value=nodeObj.overlay.imageSrc;
		document.getElementById('overlayImageWidth').value=nodeObj.overlay.imageWidth;
		document.getElementById('overlayImageHeight').value=nodeObj.overlay.imageHeight;
		document.getElementById('overlayImageAspect').value=nodeObj.overlay.imageAspect;
		

		if(innerHTMLFix)
		{
			//overlayPutOpenOn(node)
			//overlayPutCloseOn(node)
			overlayPutPaneSelect(node)
		}
		//overlayOpenOnSelect.selectValue(nodeObj.overlay.HTMLOpenOn)
		//overlayCloseOnSelect.selectValue(nodeObj.overlay.HTMLCloseOn)
		overlayPaneSelect.selectValue(nodeObj.overlay.pane)
		

		if(sections.overlay.sectionOpen)
		{
			editWin['overlay']=document.getElementById('overlayHTMLEdit').contentWindow
			editDoc['overlay']=editWin['overlay'].document
			editDoc['overlay'].designMode='On'
			editSetEvents(editDoc['overlay'],'overlay');
			setTimeout('overlayPutHTML(\''+node+'\')',0)
			if(document.createTreeWalker)textTreeWalker['overlay']=document.createTreeWalker(editDoc['overlay'],NodeFilter.SHOW_ALL,editTextFilter,false)
			editWin['overlay'].focus();
		}
		document.getElementById('overlayHTMLEdit').onload=function onload(event){overlayPutNode()}
		document.getElementById('overlayHTMLEdit').style.visibility='visible';
		sections.overlay.showSectionContent()
	}
	else
	{
		if(isIE)
		{
			if(editDoc.overlay)
			{
				if(editDoc.overlay.selection)editDoc.overlay.selection.empty();
				editDoc.overlay.designMode='off'
			}
			document.getElementById('overlayHTMLEdit').style.visibility='hidden';
		}
		sections.overlay.hideSectionContent()
	}	
}

function overlayPutHTML(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	
	if(editDoc['overlay'])
	{
		if(innerHTMLFix)editPutBlockformats('overlay')
		if(!editDoc['overlay'].body)
		{
			setTimeout('overlayPutHTML(\''+node+'\')',10)
			return
		}
		editDoc['overlay'].body.innerHTML=nodeObj.overlay.HTML
		editDoc['overlay'].body.style.backgroundColor=nodeObj.overlay.backgroundColor
	}
}


function overlayBuildImage(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	var overlay=nodeObj.overlay;
	var width=overlay.imageWidth;
	var height=overlay.imageHeight;
	
	
	if(!nodeObj.latLng)
	{
		nodeObj.latLng=map.center
		nodePutLatLngIcon(node)
		nodePutLatLng(node)
	}
	
	
	if(!overlay.offset)
	{
		var offsetX=overlay.offsetX
		var offsetY=overlay.offsetY
	}
	else
	{
		if(overlay.offset & F_OFFSET_RIGHT)var offsetX=width
		else var offsetX=0
		if(overlay.offset & F_OFFSET_BOTTOM)var offsetY=height
		else var offsetY=0
		if((overlay.offset & F_OFFSET_CENTERHORZ) == F_OFFSET_CENTERHORZ)offsetX=Math.floor(offsetX/2)
		if((overlay.offset & F_OFFSET_CENTERVERT) == F_OFFSET_CENTERVERT)offsetY=Math.floor(offsetY/2)
	}

	document.getElementById('overlayOffsetX').value=overlay.offsetX=offsetX
	document.getElementById('overlayOffsetY').value=overlay.offsetY=offsetY
	
	var projection=map.mapType.getProjection()
	var pixelPos=projection.fromLatLngToPixel(nodeObj.latLng,nodeObj.zoom);
	var left=pixelPos.x-overlay.offsetX
	var top=pixelPos.y-overlay.offsetY
	
	var latLngRightBottom=projection.fromPixelToLatLng(new GPoint(left+overlay.imageWidth,top+overlay.imageHeight),nodeObj.zoom)
	var latLngTopLeft=projection.fromPixelToLatLng(new GPoint(left,top),nodeObj.zoom)

	nodeObj.imageLatLngSW=new GLatLng(latLngRightBottom.lat(),latLngTopLeft.lng())
	nodeObj.imageLatLngNE=new GLatLng(latLngTopLeft.lat(),latLngRightBottom.lng())
	overlayPutLatLngSW(node)
	overlayPutLatLngNE(node)

	//width=width+((overlay.padding+overlay.borderSize)*2)
	//height=height+((overlay.padding+overlay.borderSize)*2)

	return {
		add:overlay.padding+overlay.borderSize
		,wrapWidth:projection.getWrapWidth(nodeObj.zoom)
		,latLngRightBottom:latLngRightBottom
		,latLngTopLeft:latLngTopLeft
	}
}

function overlayBuild(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	var overlay=nodeObj.overlay;
	var element=document.getElementById('sizeTest');
	if(overlay.HTML && (overlay.maxWidth || overlay.maxHeight || overlay.minWidth || overlay.minHeight))
	{
		var initWidth=overlay.maxWidth;
		var width=initWidth
		var height=0
		element.innerHTML='';
		element.position='';
		element.style.height='';	
		element.style.width='';	
		element.style.border=(overlay.borderSize)?overlay.borderSize+'px '+overlay.borderType+' '+overlay.borderColor:''
		element.style.padding=(overlay.padding)?overlay.padding+'px':'';
		element.style.overflow=overlay.overflow
		element.position='absolute';
		element.innerHTML=overlay.HTML
		element.style.width=width+'px';
		height=element.offsetHeight;
		do
		{
			if(width>=overlay.minWidth)element.style.width=Math.max(0,--width)+'px';
			else break;
		}
		while(element.offsetHeight==height)
		++width
		width=width+(overlay.padding+overlay.borderSize)*2
		if(!width)width=overlay.maxWidth
		if(overlay.minWidth && (width<overlay.minWidth))width=overlay.minWidth;
		if(overlay.maxWidth && (width>overlay.maxWidth))width=overlay.maxWidth;
		if(overlay.minHeight && (height<overlay.minHeight))height=overlay.minHeight;
		if(overlay.maxHeight && (height>overlay.maxHeight))height=overlay.maxHeight;
	}
	else
	{
		var width=overlay.minWidth;
		var height=overlay.minHeight;
		element.innerHTML='';
		element.position='';
		element.style.height='';	
		element.style.width='';	
		element.style.border=(overlay.borderSize)?overlay.borderSize+'px '+overlay.borderType+' '+overlay.borderColor:''
		element.style.padding=(overlay.padding)?overlay.padding+'px':'';
		element.style.overflow=overlay.overflow
		element.position='absolute';
		element.innerHTML=overlay.HTML
		element.style.height=(height)?height+'px':'';	
		element.style.width=(width)?width+'px':'';
		width=element.offsetWidth;
		height=element.offsetHeight;
	}
	
	if(!overlay.offset)
	{
		var offsetX=overlay.offsetX
		var offsetY=overlay.offsetY
	}
	else
	{
		if(overlay.offset & F_OFFSET_RIGHT)var offsetX=width
		else var offsetX=0
		if(overlay.offset & F_OFFSET_BOTTOM)var offsetY=height
		else var offsetY=0
		if((overlay.offset & F_OFFSET_CENTERHORZ) == F_OFFSET_CENTERHORZ)offsetX=Math.floor(offsetX/2)
		if((overlay.offset & F_OFFSET_CENTERVERT) == F_OFFSET_CENTERVERT)offsetY=Math.floor(offsetY/2)
	}
	

	document.getElementById('overlayOffsetX').value=overlay.offsetX=offsetX
	document.getElementById('overlayOffsetY').value=overlay.offsetY=offsetY
	
	width=Math.max(0,width-(overlay.padding+overlay.borderSize)*2)
	height=Math.max(0,height-(overlay.padding+overlay.borderSize)*2)

	
	element.style.border=''
	element.style.padding='';
	element.style.overflow='';
	
	//return {size:new GSize(width,height),HTML:'<DIV ID="overlay_'+node+'" CLASS="overlay" STYLE="position:absolute;overflow:'+overlay.overflow+';'+((width)?'width:'+width+'px;':'')+((height)?'height:'+height+'px;':'')+'">'+overlay.HTML+'</DIV>'}
	return {size:new GSize(width,height),HTML:overlay.HTML}
}

function overlayToggle(node)
{
	
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(nodeObj.overlayVisible)overlayHide(node)
	else overlayShow(node)
}

function overlayShow(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]

	var parent=nodeObj.parent
	if((map.zoom>=parent.group.minZoom)&&(map.zoom<=parent.group.maxZoom))
	{
		gmap.addOverlay(nodeObj.gOverlay);
		nodeObj.overlayZoomVisible=true;
	}
	else
	{
		alert('Overlay is not visible on map (zoom: '+map.zoom+') due to Min-Zoom ('+parent.group.minZoom+') and Max-Zoom ('+parent.group.maxZoom+') settings of its Group ('+parent.name+')')
		nodeObj.overlayZoomVisible=false;
	}
	nodeObj.overlayVisible=true;
	nodePutIcon(node)
}

function overlayHide(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	
	nodeObj.overlayVisible=false;
	if(nodeObj.overlayZoomVisible)gmap.removeOverlay(nodeObj.gOverlay);
	nodePutIcon(node)
}

function overlayRemove(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(nodeObj.gOverlay)
	{
		//removeOverlayEventHandle(node)
		if(nodeObj.overlayVisible)overlayHide(node)
		nodeObj.gOverlay=null
		nodePutIcon(node)
	}
}

function overlayAdd(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]

	if(!nodeObj.latLng)
	{
		nodeObj.latLng=map.center
		nodePutLatLngIcon(node)
		nodePutLatLng(node)
	}
	if(!nodeObj.gOverlay)
	{
		if(!nodeObj.overlay.HTMLSize)overlayRebuild(node)
		nodeObj.gOverlay=new gOverlay(nodeObj);
		//setOverlayEventHandle(node)
	}
}


function overlaySet(node,change)
{
	if(!node)node=overlayCurrentNode
	var inherit,nodeObj=mapNodes[node]
	if(inherit=(nodeObj.isPreset?node:nodeObj.inherit))
	{
		var inherits=presets.overlayInherit[inherit]
		for(x in inherits)
		{
			_overlaySet(x,change)
		}
	}
	_overlaySet(node,change)
}


function _overlaySet(node,change)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(nodeObj.gOverlay && nodeObj.overlayVisible)
	{
		if(change)
		{
			gmap.removeOverlay(nodeObj.gOverlay)
			gmap.addOverlay(nodeObj.gOverlay)
		}
		nodeObj.gOverlay.redraw(true)
	}
}


function getOverlay(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	switch (nodeObj.overlay.type)
	{
		case 'html':
			return nodeObj.overlay.HTMLWrap 
		break;
		case 'img':
		break;
	}
}


function overlayRebuild(node,change)
{
	if(!node)node=overlayCurrentNode
	var inherit,nodeObj=mapNodes[node]
	if(inherit=(nodeObj.isPreset?node:nodeObj.inherit))
	{
		var inherits=presets.overlayInherit[inherit]
		for(x in inherits)
		{
			_overlayRebuild(x)
		}
	}
	_overlayRebuild(node)
}



function _overlayRebuild(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	
	switch(nodeObj.overlay.type)
	{
		case 'html':
			var build=overlayBuild(node)
			nodeObj.overlay.HTMLWrap=build.HTML
			nodeObj.overlay.HTMLSize=build.size
		break
		case 'img':
			nodeObj.overlay.imageSize=overlayBuildImage(node)
			//nodeObj.overlay.imageLatLngBounds=build.latLngBounds
		break;
	}
}

function overlaySetPane(pane,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]

	nodeObj.overlay.pane=pane
	
	overlayRebuild(node)
	overlaySet(node,true)
}

function overlaySetOffset(offset,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	nodeObj.overlay.offset=offset
	document.getElementById('overlayOffsetX').disabled=offset;
	document.getElementById('overlayOffsetY').disabled=offset;
	overlayRebuild(node)
	overlaySet(node)
}

function overlaySetBorderSize(borderSize,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(parseInt(borderSize)!=borderSize)
	{
		alert('illegal border-size value, use size>0, 0 will remove the border ')
		var element=document.getElementById('overlayBorderSize')
		element.focus()
		element.select()
		return
	}
	borderSize=parseInt(borderSize)
	if(borderSize<0)
	{
		document.getElementById('overlayBorderSize').value=borderSize=0
	}
	nodeObj.overlay.borderSize=borderSize
	overlayRebuild(node)
	overlaySet(node)
}

function overlaySetBorderColor(borderColor,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(borderColor=='' || parseColor(borderColor))
	{
		nodeObj.overlay.borderColor=borderColor
		overlaySet(node)
	}
	else
	{
		alert('illegal color value')
	}
	
}

function overlaySetOpacity(opacity,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(parseInt(opacity)!=opacity)
	{
		alert('illegal opacity value, use 0-100')
		var element=document.getElementById('overlayOpacity')
		element.focus()
		element.select()
		return
	}
	opacity=parseInt(opacity)
	if(opacity>100)
	{
		document.getElementById('overlayOpacity').value=opacity=100
	}
	if(opacity<0)
	{
		document.getElementById('overlayOpacity').value=opacity=0
	}
	nodeObj.overlay.opacity=opacity
	overlaySet(node)
}

function overlaySetBackgroundColor(backgroundColor,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(backgroundColor=='' || parseColor(backgroundColor))
	{
		nodeObj.overlay.backgroundColor=backgroundColor
		if(editDoc['overlay'])editDoc['overlay'].body.style.backgroundColor=nodeObj.overlay.backgroundColor
		overlaySet(node)
	}
	else
	{
		alert('illegal color value')
		var element=document.getElementById('overlayBackgroundColor')
		element.focus()
		element.select()
	}
}

function overlaySetBorderType(borderType,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	nodeObj.overlay.borderType=borderType
	overlayRebuild(node)
	overlaySet(node)
}

function overlaySetType(type,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	nodeObj.overlay.type=type
	overlayRebuild(node)
	overlaySet(node,true)
}

function overlaySetImageSrc(src,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	nodeObj.overlay.imageSrc=src
	overlayRebuild(node)
	overlaySet(node)
}

function overlaySetPadding(padding,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(parseInt(padding)!=padding)
	{
		alert('illegal padding value, use padding >= 0')
		var element=document.getElementById('overlayPadding')
		element.focus()
		element.select()
		return
	}
	padding=parseInt(padding)
	if(padding<0)
	{
		document.getElementById('overlayPadding').value=padding=0
	}
	nodeObj.overlay.padding=padding
	overlayRebuild(node)
	overlaySet(node,true)
}


function overlayPutLatLngSW(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	document.getElementById('overlayLatSW').value=(nodeObj.imageLatLngSW)?formatLat(nodeObj.imageLatLngSW.lat()):'n/a';
	document.getElementById('overlayLngSW').value=(nodeObj.imageLatLngSW)?formatLng(nodeObj.imageLatLngSW.lng()):'n/a';
}

function overlayPutLatLngNE(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	document.getElementById('overlayLatNE').value=(nodeObj.imageLatLngNE)?formatLat(nodeObj.imageLatLngNE.lat()):'n/a';
	document.getElementById('overlayLngNE').value=(nodeObj.imageLatLngNE)?formatLng(nodeObj.imageLatLngNE.lng()):'n/a';
}

function overlaySetLatLngSW(lat,lng,node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	
	if(!nodeObj.imageLatLngSW)
	{
		nodeObj.imageLatLngSW=new GLatLng(0,0)
	}
	if(typeof lat!='object' && typeof lat!='undefined' && isNaN(lat=parseLatLng(lat)))
	{
		alert('Ivalid Latitude Value!');
		return
	}
	if(typeof lng!='object' && typeof lng!='undefined' && isNaN(lng=parseLatLng(lng)))
	{
		alert('Ivalid Longitude Value!');
		return
	}
	if(typeof lat=='object' || typeof lat=='undefined')lat=nodeObj.imageLatLngSW.lat()
	if(typeof lng=='object' || typeof lng=='undefined')lng=nodeObj.imageLatLngSW.lng()
	
	
	
	var overlay
	if((overlay=nodeObj.overlay).type=='img')
	{
		overlay.imageSize.latLngRightBottom=new GLatLng(lat,overlay.imageSize.latLngRightBottom.lng())
		overlay.imageSize.latLngTopLeft=new GLatLng(overlay.imageSize.latLngTopLeft.lat(),lng)
		var projection=map.mapType.getProjection()
		var rb=projection.fromLatLngToPixel(overlay.imageSize.latLngRightBottom,nodeObj.zoom)
		var tl=projection.fromLatLngToPixel(overlay.imageSize.latLngTopLeft,nodeObj.zoom)
		document.getElementById('overlayImageWidth').value=nodeObj.overlay.imageWidth=rb.x-tl.x
		document.getElementById('overlayImageHeight').value=nodeObj.overlay.imageHeight=rb.y-tl.y
		
		overlaySet(node)
	}
	nodeObj.imageLatLngSW=new GLatLng(lat,lng)
	overlayPutLatLngSW(node)
}

function overlaySetLatLngNE(lat,lng,node)
{
	if(!node)node=currentNode
	var nodeObj=mapNodes[node]
	
	if(!nodeObj.imageLatLngNE)
	{
		nodeObj.imageLatLngNE=new GLatLng(0,0)
	}
	if(typeof lat!='object' && typeof lat!='undefined' && isNaN(lat=parseLatLng(lat)))
	{
		alert('Ivalid Latitude Value!');
		return
	}
	if(typeof lng!='object' && typeof lng!='undefined' && isNaN(lng=parseLatLng(lng)))
	{
		alert('Ivalid Longitude Value!');
		return
	}
	if(typeof lat=='object' || typeof lat=='undefined')lat=nodeObj.imageLatLngNE.lat()
	if(typeof lng=='object' || typeof lng=='undefined')lng=nodeObj.imageLatLngNE.lng()
	
	
	var overlay
	if((overlay=nodeObj.overlay).type=='img')
	{
		
		overlay.imageSize.latLngRightBottom=new GLatLng(overlay.imageSize.latLngRightBottom.lat(),lng)
		overlay.imageSize.latLngTopLeft=new GLatLng(lat,overlay.imageSize.latLngTopLeft.lng())

		var projection=map.mapType.getProjection()
		var rb=projection.fromLatLngToPixel(overlay.imageSize.latLngRightBottom,nodeObj.zoom)
		var tl=projection.fromLatLngToPixel(overlay.imageSize.latLngTopLeft,nodeObj.zoom)
		document.getElementById('overlayImageWidth').value=nodeObj.overlay.imageWidth=rb.x-tl.x
		document.getElementById('overlayImageHeight').value=nodeObj.overlay.imageHeight=rb.y-tl.y

		overlaySet(node)
	}
	nodeObj.imageLatLngNE=new GLatLng(lat,lng)
	overlayPutLatLngNE(node)

}


function overlayImageResetSize(node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	document.getElementById('overlayImageWidth').value=nodeObj.overlay.imageWidth=nodeObj.overlay.imageOriginalWidth
	document.getElementById('overlayImageHeight').value=nodeObj.overlay.imageHeight=nodeObj.overlay.imageOriginalHeight
	overlayRebuild(node)
	overlaySet(node)
}


function overlaySetImageWidth(width,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	
	if(parseInt(width)!=width)
	{
		alert('illegal width value, use width >= 0')
		var element=document.getElementById('overlayImageWidth')
		element.focus()
		element.select()
		return
	}
	width=parseInt(width)
	if(width<0)
	{
		document.getElementById('overlayImageWidth').value=width=0
	}
	
	if(nodeObj.overlay.imageAspect)
	{
		var aspect=width/nodeObj.overlay.imageWidth
		document.getElementById('overlayImageHeight').value=nodeObj.overlay.imageHeight=Math.floor(nodeObj.overlay.imageHeight*aspect)
	}
	
	nodeObj.overlay.imageWidth=width
	overlayRebuild(node)
	overlaySet(node)
}

function overlaySetImageHeight(height,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(parseInt(height)!=height)
	{
		alert('illegal height value, use height >= 0')
		var element=document.getElementById('overlayImageHeight')
		element.focus()
		element.select()
		return
	}
	height=parseInt(height)
	if(height<0)
	{
		document.getElementById('overlayImageHeight').value=height=0
	}
	if(nodeObj.overlay.imageAspect)
	{
		var aspect=height/nodeObj.overlay.imageHeight
		document.getElementById('overlayImageWidth').value=nodeObj.overlay.imageWidth=Math.floor(nodeObj.overlay.imageWidth*aspect)
	}
	nodeObj.overlay.imageHeight=height
	overlayRebuild(node)
	overlaySet(node)
}

function overlaySetImageAspect(onOff,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	nodeObj.overlay.imageAspect=onOff
}


function overlaySetOffsetX(offsetX,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	
	if(parseInt(offsetX)!=offsetX)
	{
		alert('illegal offset value')
		var element=document.getElementById('overlayOffsetX')
		element.focus()
		element.select()
		return
	}
	offsetX=parseInt(offsetX)
	
	
	nodeObj.overlay.offsetX=offsetX
	overlayRebuild(node)
	overlaySet(node)
}

function overlaySetOffsetY(offsetY,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(parseInt(offsetY)!=offsetY)
	{
		alert('illegal offset value')
		var element=document.getElementById('overlayOffsetY')
		element.focus()
		element.select()
		return
	}
	offsetY=parseInt(offsetY)
	nodeObj.overlay.offsetY=offsetY
	overlayRebuild(node)
	overlaySet(node)
}

function overlaySetOverflow(overflow,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]

	nodeObj.overlay.overflow=overflow
	
	overlayRebuild(node)
	overlaySet(node,true)
}


function overlaySetMinWidth(width,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	
	if(width=='n/a')width=0;
	else if(parseInt(width)!=width)
	{
		alert('illegal min-width value')
		var element=document.getElementById('overlayMinWidth')
		element.focus()
		element.select()
		return
	}
	width=(parseInt(width))?parseInt(width):0
	
	if(width<0)width=0
	else if(width>nodeObj.overlay.maxWidth)
	{
		nodeObj.overlay.maxWidth=width
		document.getElementById("overlayMaxWidth").value=(nodeObj.overlay.maxWidth)?nodeObj.overlay.maxWidth:'n/a'
	}
	
	nodeObj.overlay.minWidth=width
	document.getElementById("overlayMinWidth").value=(nodeObj.overlay.minWidth)?nodeObj.overlay.minWidth:'n/a'
	
	overlayRebuild(node)
	overlaySet(node,true)
}


function overlaySetMaxWidth(width,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]

	if(width=='n/a')width=0;
	else if(parseInt(width)!=width)
	{
		alert('illegal max-width value')
		var element=document.getElementById('overlayMaxWidth')
		element.focus()
		element.select()
		return
	}
	width=(parseInt(width))?parseInt(width):0

	if(width<0)width=0
	if(width<nodeObj.overlay.minWidth)
	{
		nodeObj.overlay.minWidth=width
		document.getElementById("overlayMinWidth").value=(nodeObj.overlay.minWidth)?nodeObj.overlay.minWidth:'n/a'
	}
	nodeObj.overlay.maxWidth=width
	document.getElementById("overlayMaxWidth").value=(nodeObj.overlay.maxWidth)?nodeObj.overlay.maxWidth:'n/a'
	overlayRebuild(node)
	overlaySet(node,true)
}


function overlaySetMinHeight(height,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]

	if(height=='n/a')height=0;
	else if(parseInt(height)!=height)
	{
		alert('illegal min-height value')
		var element=document.getElementById('overlayMinHeight')
		element.focus()
		element.select()
		return
	}
	height=(parseInt(height))?parseInt(height):0
	if(height<0)height=0
	else if(height>nodeObj.overlay.maxHeight)
	{
		nodeObj.overlay.maxHeight=height
		document.getElementById("overlayMaxHeight").value=(nodeObj.overlay.maxHeight)?nodeObj.overlay.maxHeight:'n/a'
	}
	nodeObj.overlay.minHeight=height
	document.getElementById("overlayMinHeight").value=(nodeObj.overlay.minHeight)?nodeObj.overlay.minHeight:'n/a'
	overlayRebuild(node)
	overlaySet(node,true)
}


function overlaySetMaxHeight(height,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(height=='n/a')height=0;
	else if(parseInt(height)!=height)
	{
		alert('illegal max-height value')
		var element=document.getElementById('overlayMaxHeight')
		element.focus()
		element.select()
		return
	}
	height=(parseInt(height))?parseInt(height):0
	if(height<0)height=0
	if(height<nodeObj.overlay.minHeight)
	{
		nodeObj.overlay.minHeight=height
		document.getElementById("overlayMinHeight").value=(nodeObj.overlay.minHeight)?nodeObj.overlay.minHeight:'n/a'
	}
	nodeObj.overlay.maxHeight=height
	document.getElementById("overlayMaxHeight").value=(nodeObj.overlay.maxHeight)?nodeObj.overlay.maxHeight:'n/a'
	overlayRebuild(node)
	overlaySet(node,true)
}



function overlayPutPreset()
{
	var elements=document.getElementsByName('overlayPreset')
	for(var x=0;x<elements.length;x++)
	{
		elements[x].checked=overlayPresetActive;
		elements[x].disabled=!mapNodes[currentNode].presetSelect
	}
	document.getElementById('overlayLockPreset').checked=mapNodes[overlayCurrentNode].inherit
	document.getElementById('overlayCopyFromPreset').disabled=(overlayPresetActive || mapNodes[currentNode].inherit || !mapNodes[currentNode].presetSelect)
	document.getElementById('overlayCopyToPreset').disabled=(overlayPresetActive || mapNodes[currentNode].inherit || !mapNodes[currentNode].presetSelect)
	//document.getElementById('overlayAddToPresets').disabled=overlayPresetActive
	document.getElementById('overlayNodePreset').disabled=overlayPresetActive
	document.getElementById('overlayLockPreset').disabled=(overlayPresetActive || mapNodes[currentNode].isPreset || !mapNodes[currentNode].presetSelect)
	if(innerHTMLFix)overlayPutPresetSelect()
	if(overlayPresetSelect)overlayPresetSelect.setDisabled(overlayPresetActive)
}

function overlaySetLockPreset(onOff,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(nodeObj.presetSelect)
	{
		if(onOff)nodeLockPreset(node)
		else nodeUnlockPreset(node)
		nodePut(node);
		overlayRebuild(node)
		overlaySet(node,true)
		overlayPutNode(node);
	}
	overlayPutPreset()
}

function overlaySetPresetActive(onOff)
{
	if(mapNodes[currentNode].type!='overlay' || mapNodes[currentNode].isPreset)
	{
		overlayPresetActive=onOff=true;
	}
	else if(!mapNodes[overlayCurrentNode].presetSelect && !overlayPresetActive)onOff=false;
	else
	{
		if(overlayPresetActive=onOff)overlayCurrentNode=mapNodes[overlayCurrentNode].presetSelect
		else overlayCurrentNode=currentNode
		overlayPutNode(overlayCurrentNode)
	}
	overlayPutPreset()
}

function overlaySetPresetSelect(toNode,node)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(nodeObj.inherit)
	{
		if(toNode)nodeSetLockPreset(node,toNode)
		else nodeUnlockPreset(node)
	}
	nodeObj.presetSelect=toNode
	if(!toNode)nodePut(node)
	overlaySet(node,true)
	overlayPutNode(node)
}


function overlayPutPresetSelect()
{
	var x;
	if(!overlayPresetSelect)
	{
		overlayPresetSelect=new SelectBox('overlayNodePreset','overlay',function(option){overlaySetPresetSelect(option.value)})
		var options=[optionNoPreset]
		var treeObj=mapNodesTree.getFirstChild(overlayPresets,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.overlay[uid].name})
		}
		while(treeObj=mapNodesTree.getNext(uid))
		overlayPresetSelect.setOptions(options)
		overlayPresetSelect.selectedIndex=0;
	}
	overlayPresetSelect.draw()
}


function overlayAddToPresets(node,event)
{
	if(event.shiftKey)var preset=mapNodesTree.addLastChild(overlayPresets.uid,new Overlay(mapNodes[node].name))
	else var preset=mapNodesTree.addFirstChild(overlayPresets.uid,new Overlay(mapNodes[node].name))
	overlayCopyToPreset(node,mapNodes[preset])
	nodeAddPreset(preset)
	nodePut(preset)
	//if(virtualRoot=='root' || virtualRoot==overlayPresets.uid)putNodes(overlayPresets.uid)
	return node
}


function overlayCopyPutFromPreset(node,preset)
{
	overlayCopyFromPreset(node,preset)
	nodePut(node)
	overlayPutNode(node)
}

function overlayCopyPutToPreset(node,preset)
{
	overlayCopyToPreset(node,preset)
	nodePut(overlayPresetUid)
	overlayPutNode(overlayPresetUid)
}



function overlayCopyFromPreset(node,preset)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(!preset)
	{
		if(nodeObj.presetSelect)preset=mapNodes[nodeObj.presetSelect]
		else return
	}
	var x
	for(x in nodeObj.overlay)
	{
		if(preset.overlay.hasOwnProperty(x))
		{
			switch(x)
			{
				case '':
				break;
				default:
					nodeObj.overlay[x]=preset.overlay[x]
				break;
			}
		}
		else delete(nodeObj.overlay[x])

	}
	nodePut(node)
	
	if(!overlayPresetActive && overlayCurrentNode==node)
	{
		overlayPutNode(node)
	}
}



function overlayCopyToPreset(node,preset)
{
	if(!node)node=overlayCurrentNode
	var nodeObj=mapNodes[node]
	if(!preset)
	{
		if(nodeObj.presetSelect)preset=mapNodes[nodeObj.presetSelect]
		else return
	}
	
	var x
	for(x in nodeObj.overlay)
	{
		if(nodeObj.overlay.hasOwnProperty(x))
		{
			switch(x)
			{
				case '':
				break;
				default:
					preset.overlay[x]=nodeObj.overlay[x]
				break;
			}
		}
		else delete(preset.overlay[x])

	}

	nodePut(overlayPresetUid)
	
	if(overlayPresetActive)
	{
		overlayPutNode(overlayPresetUid)
	}
}

function overlayGetPresetInfo(node)
{
	var out='';
	if(node)var overlayPreset=mapNodes[node]
	else var overlayPreset=window.overlayPreset
	if(overlayPreset)
	{
		if(overlayPreset.isPreset)var overlay=overlayPreset.overlay;
		else var overlay=overlayPreset.own;
		out+='<U>Name:</U> '+overlayPreset.name+'<BR>'
	}
	return out
}


