var nCurMouseXPos = -1;
var nCurMouseYPos = -1;
var nMouseXStartPos = -1;
var nMouseYStartPos = -1;
var nMouseXLastPos = -1;
var nMouseYLastPos = -1;

var nMainMapOffsetPixelX = 0;
var nMainMapOffsetPixelY = 0;

var nShowAddress = 0;
var nAddressXMeter = new Array();
var nAddressYMeter = new Array();
var nAddressPicOffset = 10;

var bControlsBlocked = false;
var bMousePressed = false;

var szMapProjection = "lcc_europe";
var szRoutePrefix = "";
var szExtraUrlParm = "";

var sCopyrightMap = '&copy; 2006 <a href="http://www.infoware.de" target="_blank">infoware</a> & Tele Atlas';
var sCopyrightAir = '&copy; 2006 <a href="http://www.infoware.de" target="_blank">infoware</a> & Geo Content';

var mapSlider = null;

var arScalar = [ 20, 100, 200, 500, 1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000, 1000000 ];
var arScalarText = [ '20 m', '100 m', '200 m', '500 m', '1 km', '2 km', '5 km', '10 km', '20 km', '50 km', '100 km', '200 km', '500 km', '1000 km' ];

var	divControl	= null;
 	
var tmpOnMouseMove	= null;
var tmpOnMouseDown	= null;
var tmpOnMouseUp	= null;

function FalseFunc() // used to block cascading events
{
	return false;
} // End FalseFunc

function SetMapProjection(szPrj)
{
  szMapProjection = szPrj;
} // End SetMapProjection

function SetExtraUrlParam(szParm)
{
  szExtraUrlParm = szParm;
} // End SetExtraUrlParam

function SetRoutePrefix(szRtPrefix)
{
  szRoutePrefix = szRtPrefix;
} // End SetRoutePrefix

function SetCurrentSliderPos()
{
	if (mapSlider)
	{
		mapSlider.setValue(Math.log(oTileset.nTilesizeMeter/nMaxZoomValue)/Math.log(2), true);
	}
} // End SetCurrentSliderPos

function CreateMapScalar(nTop, nLeft)
{
	// create a element node for the scalar
	var divScalar = document.createElement('div');
	divScalar.id = "divScalar";
	divScalar.style.position = "absolute";
	divScalar.style.top = nTop + "px";
	divScalar.style.left = nLeft + "px";
	divScalar.style.width = "120";
	divScalar.style.height = "25";
	divScalar.style.zIndex = "4";
	
	// create the div for the background
	var divScalarBack = document.createElement('div');
	divScalarBack.id = "divScalarBack";
	divScalarBack.style.position = "absolute";
	divScalarBack.style.top = " 4px";
	divScalarBack.style.left = " 5px";
	divScalarBack.style.width = " 120";
	divScalarBack.style.height = " 25";
	divScalarBack.style.zIndex = "3";
	divScalarBack.style.backgroundColor = "#ffffff";
	divScalarBack.style.opacity = "0.7";
	divScalarBack.style.mozOpacity = "0.7";
	divScalarBack.style.filter = "alpha(opacity=70)";
	divScalar.insertBefore(divScalarBack, null);
	
	// create the div for the foreground
	var divScalarFront = document.createElement('div');
	divScalarFront.id = "divScalarFront";
	divScalarFront.style.position = "absolute";
	divScalarFront.style.top = "0px";
	divScalarFront.style.left = "6px";
	divScalarFront.style.zIndex = "3";
	divScalarFront.innerHTML = 		'	<table class="scalar_table">'
															+	'		<tr>'
															+ '			<td align="center">'
															+ ' 			<div id="ScalarBar">'
															+ '				</div>'
															+ '			</td>'
															+ '		</tr>'
															+ '	</table>';
	divScalar.insertBefore(divScalarFront, null);
	
	document.getElementById("divClipping").insertBefore(divScalar, null);
}

function SetMapScalar(nMapWidthMeter, nMapWidthPixel)
{
	var divScalar = document.getElementById("divScalar");
	if (divScalar)
	{
		var nMeter = Math.round(nMapWidthMeter / 8);
		var nIndex = 0;
		while (nMeter > arScalar[nIndex] && nIndex < 13)
		{
			nIndex++;
		}
		
		var nPixel = Math.round(arScalar[nIndex] * nMapWidthPixel / nMapWidthMeter / 4) - 4;
		var divScalar = document.getElementById("ScalarBar");
		if (divScalar != null)
		{
			var szContent = '<font size=1><b>' + arScalarText[nIndex] + '</b></font><br>';
			szContent += '<img src=\"img/barblack.gif\" width=1 height=8>';
			for (nIndex = 0; nIndex < 2; nIndex++)
			{
				szContent += '<img src=\"img/scalebar_dark.gif\" width=' + nPixel + ' height=5>';
				szContent += '<img src=\"img/scalebar_dark.gif\" width=1 height=8>';
				szContent += '<img src=\"img/scalebar_bright.gif\" width=' + nPixel + ' height=5>';
				szContent += '<img src=\"img/scalebar_dark.gif\" width=1 height=8>';
			}
			divScalar.innerHTML = szContent;
		}		
		document.getElementById("divScalar").style.width = (4 * nPixel + 15);
		document.getElementById("divScalarBack").style.width = (4 * nPixel + 11);
	}
} // End SetMapScalar

function iwShowStatus(event)
{
  if (			nCurMouseXPos >= 0 && nCurMouseXPos < oTileset.nVisibleWidth
      	&&	nCurMouseYPos >= 0 && nCurMouseYPos < oTileset.nVisibleHeight	)
  {
    window.status =  	"(p): "		+ nCurMouseXPos
										+ "/" 			+ nCurMouseYPos
										+ " (m): "	+ Math.round(oTileset.PixelToMeterX(nCurMouseXPos))
										+ "/"				+ Math.round(oTileset.PixelToMeterY(nCurMouseYPos))
										+ "... open requests: " + oTileset.oAsynchroneTransferObject.nOpenRequests;
  }
  else
  {
    window.status = "";
  }
} // End iwShowStatus

function InitAddressLayer(szImg, szLinks, szName, nIndex, nzIndex)
{
  if (szImg.length > 0)
  {
    if (szName.length == 0)
    {
      szName = "gesuchte Adresse";
    }
    
 		var sHTML = "";
    sHTML += '<div id="' + "Address" + nIndex + '" align="center" style="font-size:0; position:absolute; overflow:hidden; left:0; top:0; z-index:' + nzIndex + '; visibility:hidden;">';
    if (szLinks.length == 0)
    {
    	sHTML += '<img src="' + szImg + '"  title="' + szName + '">';
    }
    else
    {
    	sHTML += '<a target=_top href="' + szLinks + '"><img src="' + szImg + '"  title="' + szName + '" border="0"></a>';
    }
    sHTML += '</div>';
    var divClipping = document.getElementById("divClipping");
    divClipping.innerHTML += sHTML;
    //nShowAddress = Math.round(nIndex) + 1;
    if (nShowAddress < (Math.round(nIndex) + 1))
    {
    	nShowAddress = Math.round(nIndex) + 1;
    }
    //nShowAddress = 11;
  }
} // End InitAddressLayer

function SetAddressMeterPosition(nX, nY, nIndex)
{
  nAddressXMeter[nIndex] = nX;
  nAddressYMeter[nIndex] = nY;
} // End SetAddressMeterPosition

function GetAddressPixelPosition(nIndex)
{
	result = [false, 0, 0];
	
	var nPixelX = oTileset.MeterToPixelX(nAddressXMeter[nIndex]);
	var nPixelY = oTileset.MeterToPixelY(nAddressYMeter[nIndex]);
	
  if (nPixelX > 0 && nPixelX < oTileset.nVisibleWidth)
  {
  	if (nPixelY > 0 && nPixelY < oTileset.nVisibleHeight)
	  {
	    result[0] = true;
	    result[1] = nPixelX;// - 32 + 20;
	    result[2] = nPixelY;// - 32 + 20;
	  }
  }
  
  return result;
} // End GetAddressPixelPosition

function ShowAddressLayer(result, nIndex)
{
	var nAddressBildWidth = 0;
	var nAddressBildHeight = 0;
	
	var bIsImage = false;
	
	var AddressLayer = document.getElementById('Address' + nIndex);
	
	if (AddressLayer)
	{
			var oChildNode = AddressLayer.childNodes[0];
			if (oChildNode)
			{
				var oImage = new Image();
				oImage.src = oChildNode.src;
				nAddressBildWidth = oImage.width;
				nAddressBildHeight = oImage.height;
			}

			if (result[0])
			{
				AddressLayer.style.left = result[1] - nAddressBildWidth / 2 + "px";
				AddressLayer.style.top	= result[2] - nAddressBildHeight / 2 + "px";
				AddressLayer.style.visibility = "visible";
			}
    else
    {
      AddressLayer.style.left = "0px";
		  AddressLayer.style.top	= "0px";
      AddressLayer.style.visibility = "hidden";
    }
	}
} // End ShowAddressLayer

function HideSliderTooltip()
{
	if (mapSlider)
	{
		var layer = document.getElementById("SliderTooltip").style;
	  if (layer != null)
	  {
	    layer.display = "none";
	  }
  }
} // End HideSliderTooltip

function ShowSliderTooltip(nX, nY)
{
	if (mapSlider)
	{
		nCurrentTilesizeMeter = Math.pow(2, mapSlider.getValue()) * A_TILESIZE_METER[nMaxZoomLevel];
	  
		if (nCurrentTilesizeMeter < 1000)
		{
		  szText = Math.round(nCurrentTilesizeMeter) + ' m';
		}
		else
		{
			szText = Math.round(nCurrentTilesizeMeter / 1000) + ' km';
		}
		var layer = document.getElementById("SliderTooltip");
		
	  if (layer != null)
	  {
	  	var sliderlayer = document.getElementById("MapSliderDiv");
	  	if ((nX > (parseInt(sliderlayer.style.left) + 6)) && (nX < parseInt(sliderlayer.style.left) + 56) &&
	  			(nY > (parseInt(sliderlayer.style.top) + 20)) && (nY < parseInt(sliderlayer.style.top) + 190))
	  	{
	    layer.innerHTML = szText;
	    layer.style.left = (nX - 60) + "px";
			layer.style.top = (nY + 0) + "px";
	    layer.style.display = "block";
	    }
	    else{
	    	layer.style.display = "none";
	    }
	  }
  }
}

function iwResizeMap()
{
	iwShowLabels(false);
	oTileset.oAsynchroneTransferObject.AbortAllRequests();
	
	// get the new size and correct the aspect ratio
	var aSize = GetFrameSize();
	var nVisibleWidth = aSize[0];
	var nVisibleHeight = aSize[1];
	
	// Anpassung an GS CityMap
	if (document.getElementById("divBorderCM"))
	{	
		nVisibleWidth -= 60;
		nVisibleHeight -= 210;
	}

	// Anpassung an GS ListMap
	if (document.getElementById("divBorderLM"))
	{
		nVisibleWidth -= 300;
		nVisibleHeight -= 190;
	}
	
	//only for GS RouteMap
	if (document.getElementById("divBorderRE"))
	{
		nVisibleWidth -= 60;
		nVisibleHeight -= 260;	
	}
	
	if (nVisibleHeight < 300) nVisibleHeight = 300; //not short than Slider
	if (nVisibleWidth < 375) nVisibleWidth = 375; //not short than Slider + Scalar
	
	// resize the clipping and labelling layer
	var sClipping = "rect(0px, " + nVisibleWidth + "px, " + nVisibleHeight + "px, 0px)";
	document.getElementById("divClipping").style.clip = sClipping;
	document.getElementById("divClipping").style.width = nVisibleWidth;
	document.getElementById("divClipping").style.height = nVisibleHeight;
	document.getElementById("divLabels").style.width = nVisibleWidth;
	document.getElementById("divLabels").style.height = nVisibleHeight;
	document.getElementById("imgLabels").width = nVisibleWidth;
	document.getElementById("imgLabels").height = nVisibleHeight;
	document.getElementById("divControl").width = nVisibleWidth;
	document.getElementById("divControl").height = nVisibleHeight;
	document.getElementById("imgControl").width = nVisibleWidth;
	document.getElementById("imgControl").height = nVisibleHeight;	
	
	// reposition the scalar, slider etc.
	var divScalar = document.getElementById("divScalar");
	if (divScalar)
		divScalar.style.top	= (nVisibleHeight - 34);
	var MapSliderDiv = document.getElementById("MapSliderDiv");
	if (MapSliderDiv)
		MapSliderDiv.style.left	= nVisibleWidth - 68;
	var divNaviCross = document.getElementById("divNaviCross");
	if (divNaviCross)
		divNaviCross.style.left	= nVisibleWidth - 68;
	var divMapMode = document.getElementById("divMapMode");
	if (divMapMode)
		divMapMode.style.left	= nVisibleWidth - 68;
		
	// reposition the copyright, overview map and other elements
	for (var nElement = 0; nElement < oTileset.aMapElements.length; nElement++)
	{
		var sElementId = oTileset.aMapElements[nElement][0];
		var element = document.getElementById(sElementId);
		if (element)
		{
			var nPositionX = oTileset.aMapElements[nElement][1];
			var nPositionY = oTileset.aMapElements[nElement][2];
			
			var nLeft;
			if (nPositionX >= 0)
				nLeft = nPositionX;
			else
				nLeft = nVisibleWidth + nPositionX;
			
			var nTop;
			if (nPositionY >= 0)
				nTop = nPositionY;
			else
				nTop = nVisibleHeight + nPositionY;
			
			element.style.left	= nLeft;
			element.style.top		= nTop;
		}
	}
	
	// get the tileset parameters
	var nTilesize				= oTileset.nTilesize;
	var nCenterMeterX		= oTileset.nCenterMeterX;
	var nCenterMeterY		= oTileset.nCenterMeterY;
	var nControlLeft		= oTileset.nControlLeft;
	var nControlRight		= oTileset.nControlRight;
	var nControlClick		= oTileset.nControlClick;
	var nMapMode				= oTileset.nMapMode;
	var nOverviewFactor	= oTileset.nOverviewFactor;
	var nOverviewSize		= oTileset.nOverviewSize;
	var bHasOverview		= oTileset.bHasOverview;
	var aMapElements				= oTileset.aMapElements;
	
	// compute the number of tiles in the new set
	var nTilesOutside = oTileset.nTotalTilesX - Math.ceil(oTileset.nVisibleWidth / nTilesize);
	var nTotalTilesX = Math.ceil(nVisibleWidth / nTilesize) + nTilesOutside;
	var nTotalTilesY = Math.ceil(nVisibleHeight / nTilesize) + nTilesOutside;
	
	// compute the new tilesize in meters
	var nVisibleSizeMeterX = oTileset.nVisibleWidth  / nTilesize * oTileset.nTilesizeMeter;	
	var nTilesizeMeter = nVisibleSizeMeterX / (nVisibleWidth / nTilesize);
	
	// remove the tileset node from the document tree
	var divTileMap = document.getElementById("divTileMap");
	divTileMap.parentNode.removeChild(divTileMap);
	
	delete oTileset;
	oTileset = new iwTileset(	nVisibleWidth, nVisibleHeight,
														nTotalTilesX, nTotalTilesY,
														nCenterMeterX, nCenterMeterY,
														nTilesize, nTilesizeMeter);
	oTileset.nMapMode = nMapMode;
	oTileset.LoadWholeMap();
	
	// restore the parameters which are reset by the constructor
	oTileset.nControlLeft					= nControlLeft;
	oTileset.nControlRight				= nControlRight;
	oTileset.nControlClick				= nControlClick;
	oTileset.nOverviewFactor			= nOverviewFactor;
	oTileset.nOverviewSize				= nOverviewSize;
	oTileset.bHasOverview					= bHasOverview;
	oTileset.aMapElements					= aMapElements;
	
	// reposition the scalar, slider etc.
	document.getElementById("divScalar").style.top = eval(nVisibleHeight - 34);

	if (document.getElementById("divBorderLM"))
	{
		document.getElementById("MapSliderDiv").style.left = eval(nVisibleWidth - 68);
	}
	else
	{
		document.getElementById("MapSliderDiv").style.left = eval(nVisibleWidth - 28);
	}

	if (document.getElementById("divBorderLM"))
	{
		document.getElementById("divNaviCross").style.left = eval(nVisibleWidth - 69);
	}
	else
	{
		document.getElementById("divNaviCross").style.left = eval(nVisibleWidth - 28);
	}
	
	if (document.getElementById("divCopyright"))
	{
		document.getElementById("divCopyright").style.left = eval(nVisibleWidth - 192);
		document.getElementById("divCopyright").style.top = eval(nVisibleHeight - 26);
	}
	
	//only for GS CityMap
	if (document.getElementById("divBorderCM"))
	{
		if (navigator.appName != "Microsoft Internet Explorer")
		{
			document.getElementById("divBorderCM").style.width = nVisibleWidth;
			document.getElementById("divBorderCM").style.height = nVisibleHeight;
		}
		else
		{
			document.getElementById("divBorderCM").style.width = nVisibleWidth + 2;
			document.getElementById("divBorderCM").style.height = nVisibleHeight + 2;			
		}
		
		document.getElementById("divBackGround").style.height = eval(nVisibleHeight + 90 + 30);
		document.getElementById("CopyRight").style.top = eval(nVisibleHeight + 170 + 24);
	}

	//only for GS ListMap
	if (document.getElementById("divBorderLM"))
	{
		if (navigator.appName == "Microsoft Internet Explorer")
		{
			document.getElementById("divBorderLM").style.width = eval(nVisibleWidth + 4);
			document.getElementById("divBorderLM").style.height = eval(nVisibleHeight + 4);
		}
		else
		{
			document.getElementById("divBorderLM").style.width = eval(nVisibleWidth + 2);
			document.getElementById("divBorderLM").style.height = eval(nVisibleHeight + 2);		
		}
		
		if (document.getElementById("ListMap"))
			document.getElementById("ListMap").style.height = eval(nVisibleHeight);
		
		if (document.getElementById("divSpecialContent"))
			document.getElementById("divSpecialContent").style.left = eval(nVisibleWidth + 50);

		if (document.getElementById("RightTitle"))	
			document.getElementById("RightTitle").style.left = eval(nVisibleWidth + 50);
		
		if (document.getElementById("divSpecialContent"))
		{	
			if (document.getElementById("divBackground"))
			{
				var nTableHeight = parseInt(document.getElementById("divSpecialContent").offsetHeight);
				if (nTableHeight > nVisibleHeight)
				{
					if (navigator.appName == "Microsoft Internet Explorer")
					{
						document.getElementById("divBackground").style.height = parseInt(document.getElementById("divSpecialContent").offsetHeight) + 90;
						document.getElementById("CopyRight").style.top = parseInt(document.getElementById("divSpecialContent").offsetHeight) + 150;
					}
					else
					{
						document.getElementById("divBackground").style.height = parseInt(document.getElementById("divSpecialContent").offsetHeight) + 70;
						document.getElementById("CopyRight").style.top = parseInt(document.getElementById("divSpecialContent").offsetHeight) + 150;					
					}
				}
				else
				{
					if (navigator.appName == "Microsoft Internet Explorer")
					{
						document.getElementById("divBackground").style.height = nVisibleHeight + 90;
						document.getElementById("CopyRight").style.top = nVisibleHeight + 150;
					}
					else
					{
						document.getElementById("divBackground").style.height = nVisibleHeight + 70;
						document.getElementById("CopyRight").style.top = nVisibleHeight + 150;					
					}
				}
			}
				
		}
	}

	//only for GS RouteMap
	if (document.getElementById("divBorderRE"))
	{
		document.getElementById("RouteMap").style.height = eval(nVisibleHeight + 50);
		
		if (navigator.appName == "Microsoft Internet Explorer")
		{
			document.getElementById("divBorderRE").style.width = eval(nVisibleWidth + 2);
			document.getElementById("divBorderRE").style.height = eval(nVisibleHeight + 2);
		}
		else
		{
			document.getElementById("divBorderRE").style.width = eval(nVisibleWidth);
			document.getElementById("divBorderRE").style.height = eval(nVisibleHeight);
		}
		
		document.getElementById("RouteFrame").style.width = eval(nVisibleWidth + 6);
		document.getElementById("divSeitenButton").style.left = eval(nVisibleWidth - 120);
	}
	
	//document.getElementById("CheckBoxRow").width = nVisibleWidth;
	//document.getElementById("MapRow").width = nVisibleWidth;
	//document.getElementById("RightTitle").style.left = eval(nVisibleWidth + 10);
	
	iwShowLabels(true);
	iwReleaseControls();
}

var nCatchTimer = 0;

function CatchResizeMap()
{
  if (nCatchTimer != 0)
  {
    clearTimeout(nCatchTimer);
    nCatchTimer = 0;
  }
  
  nCatchTimer = setTimeout('iwResizeMap()', 500);
} // End CatchResizeWindow

function GetFrameSize()
{
  result = [0, 0];
  if (document.body)
  {
	  frameWidth = document.body.clientWidth;
	  frameHeight = document.body.clientHeight;
  }
  else if (self.innerWidth)
  {
	  frameWidth = self.innerWidth;
	  frameHeight = self.innerHeight;
  }
  else if (document.documentElement && document.documentElement.clientWidth)
  {
	  frameWidth = document.documentElement.clientWidth;
	  frameHeight = document.documentElement.clientHeight;
  }
  result = [frameWidth, frameHeight];
  return result;
} // End GetFrameSize

function SetCopyrightTexts(sTextMap, sTextAir)
{
	sCopyrightMap = sTextMap;
	sCopyrightAir = sTextAir;
}

function ChangeCopyright(bTeleAtlas)
{
	var divCopyright = document.getElementById("divCopyright");
	
	if (divCopyright)
	{
		if (bTeleAtlas == true)
		{
			divCopyright.innerHTML = sCopyrightMap;
		}
		else
		{
			divCopyright.innerHTML = sCopyrightAir;
		}
	}
}

// called when slider is catched
function createZoomDIV(nX, nY)
{
	//if (bControlsBlocked)
	//	return false;
	if (mutexCounter.getLocks() != 0)
		return false;	

 	divControl	= document.getElementById("divControl");
 	
 	tmpOnMouseMove	= divControl.onmousemove;
 	tmpOnMouseDown	= divControl.onmousedown;
	tmpOnMouseUp	= divControl.onmouseup;

	if (oTileset.fOnZoomStart)
		oTileset.fOnZoomStart();
		
	oTileset.nMovedX = 0;
	oTileset.nMovedY = 0;
	oTileset.oZoomObject.PrepareZoomOnSlider(oTileset.nTilesizeMeter);
	iwShowLabels(false);
	if (oTileset.oZoomObject.bCloneTiles)
	{
		oTileset.Hide();
	}
	ShowSliderTooltip(nX, nY);
	
	if (oTileset.bHasOverview)
	{
		frames["frmOverview"].createZoomDIV(nX, nY);
	}
}

// called when slider is moved
function CatchSliderMouseMove(nX, nY) 
{
	var nMainMapMeterSize = Math.pow(2, mapSlider.getValue()) * A_TILESIZE_METER[nMaxZoomLevel];
	oTileset.oZoomObject.ZoomOnSlider(nMainMapMeterSize);
	
	ShowSliderTooltip(nX, nY);
	
	if (oTileset.bHasOverview)
	{
		var nNewTilesizeMeter = 	nMainMapMeterSize 
														* oTileset.nOverviewFactor 
														* (oTileset.nVisibleWidth / oTileset.nOverviewSize);
		frames["frmOverview"].oTileset.oZoomObject.ZoomOnSlider(nNewTilesizeMeter);
	}
}

// called when slider is released
function loadZoomMap(nX, nY)
{
	if (!oTileset.oZoomObject.bPrepareZoomOnSlider)
		return false;
 	
 	divControl.onmousemove	= iwGetMousePosition;
 	divControl.onmousedown	= tmpOnMouseDown;
 	divControl.onmouseup		= tmpOnMouseUp;
	
	oTileset.oZoomObject.bPrepareZoomOnSlider = false;
	oTileset.oAsynchroneTransferObject.AbortAllRequests();
	
	oTileset.nCenterMeterX	= oTileset.PixelToMeterX(oTileset.oZoomObject.GetZoomCenterPixelX());
	oTileset.nCenterMeterY	= oTileset.PixelToMeterY(oTileset.oZoomObject.GetZoomCenterPixelY());
	oTileset.nTilesizeMeter = oTileset.oZoomObject.GetCurrentTilesizeMeter();
	
	if (!oTileset.oZoomObject.bCloneTiles)
	{
		oTileset.CreateTiles();
		
		nIndex = 0;
		for (var iRow = 0; iRow < oTileset.nTotalTilesY; iRow++)
		{
			for (var iCol = 0; iCol < oTileset.nTotalTilesX; iCol++)
			{
				oTileset.aTiles[nIndex].oDiv = document.getElementById("divTile_" + iCol + "_" + iRow);
				oTileset.aTiles[nIndex].oImg = document.getElementById("imgTile_" + iCol + "_" + iRow);
				nIndex ++;
			}
		}
	}
	oTileset.Hide();
	oTileset.PlaceTiles();
	oTileset.LoadWholeMap();
	HideSliderTooltip();
	
	if (oTileset.bHasOverview)
	{
		frames["frmOverview"].loadZoomMap(nX, nY);
	}
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};

BrowserDetect.init();