var MIN_ZOOM = 9;
var WLW_PATH_IMAGE = '../image/common'; 

var map; /* Globale Variable für die IWMap */
var measuringTool; /* Tool der Entfernungsmessung */

/*
 * das Firmenobjekt fuer die Map 
 */
function Firma(coordLcc, icon, firmaid, name, plzort, marker) {
	this.coordLcc = coordLcc;
	this.icon = icon;
	this.firmaid = firmaid;
	this.name = name;
	this.plzort = plzort;
	this.marker = marker;
}

/*
 * der WLW Marker
 */
function WlwMarker(map, coordinate, name, firmaid, plzort) {
	IWMarker.call(this, map, coordinate);
	var _self=this;
	this.name = name;
	this.firmaid = firmaid;
	this.plzort = plzort;
}

/*
 * liefert den Mittelpunkt bei der Variante "ohne Standort"
 */
function getCenterCoordinateOS(myFirmen) {
	// ohne Firmen wird das Zentrum angezeigt
	if (myFirmen.length == 0) {
		return myPosition
	}
	
	var xmin = xmax = ymin = ymax = 0;
	for (var i=0; i<myFirmen.length; i++) {
		//alert(myFirmen[i]);
		if (i==0) {
			xmin = xmax = myFirmen[i].coordLcc.getX();
			ymin = ymax = myFirmen[i].coordLcc.getY();
		} else {
			if (xmin > myFirmen[i].coordLcc.getX()) xmin = myFirmen[i].coordLcc.getX();
			if (xmax < myFirmen[i].coordLcc.getX()) xmax = myFirmen[i].coordLcc.getX();
			if (ymin > myFirmen[i].coordLcc.getY()) ymin = myFirmen[i].coordLcc.getY();
			if (ymax < myFirmen[i].coordLcc.getY()) ymax = myFirmen[i].coordLcc.getY();
		}
	}
	var x = xmin + (xmax - xmin) / 2;
	var y = ymin + (ymax - ymin) / 2;
	return new IWCoordinate(x, y);
}

/*
 * liefert den Zoomfaktor bei der Variante "ohne Standort"
 */
function getZoomOS(map, myFirmen) {
	var xmin = xmax = ymin = ymax = 0;
	var ratio = map.getOptions().getSize().getWidth() / map.getOptions().getSize().getHeight();
	for (var i=0; i<myFirmen.length; i++) {
		if (i==0) {
			xmin = xmax = myFirmen[i].coordLcc.getX();
			ymin = ymax = myFirmen[i].coordLcc.getY();
		} else {
			if (xmin > myFirmen[i].coordLcc.getX()) xmin = myFirmen[i].coordLcc.getX();
			if (xmax < myFirmen[i].coordLcc.getX()) xmax = myFirmen[i].coordLcc.getX();
			if (ymin > myFirmen[i].coordLcc.getY()) ymin = myFirmen[i].coordLcc.getY();
			if (ymax < myFirmen[i].coordLcc.getY()) ymax = myFirmen[i].coordLcc.getY();
		}
	}
	var distX = new IWCoordinate(xmax, 0).distanceFrom(new IWCoordinate(xmin, 0));
	var distY = ratio * new IWCoordinate(0, ymax).distanceFrom(new IWCoordinate(0, ymin));
	var zoomlevel = distX > distY ? 1 + map.getZoomByMeter(distX) :  1 + map.getZoomByMeter(distY);
	return zoomlevel < MIN_ZOOM ? MIN_ZOOM : zoomlevel; 
}

function showLegende() {
	// firmen.length == Seitenanzahl
	for (var i=1; i<=firmen.length; i++) {
		var legende = 'legende' + i;
		if (i == mapSeite) {
			document.getElementById(legende).style.display = 'block';
		} else {
			document.getElementById(legende).style.display = 'none';
		}
	}
}

function zeigeSeite(neueSeite) {
	// Marker entfernen
	map.getOverlayManager().getLayer(0).removeAllOverlays();
	for (var i=0; i<firmen[neueSeite-1].length; i++) {
		map.getOverlayManager().getLayer(0).addOverlay(firmen[neueSeite-1][i].marker);
	}
	mapSeite = neueSeite;
	showLegende();
	setCenter();
}

/*
 * initialisiert die Map der Firmenuebersicht - wird durch ein body-onload aufgerufen
 */
function initMapFU(mapID, sprache, pathImage)
{
	if(pathImage){
		WLW_PATH_IMAGE = pathImage;
	}
	map = new IWMap(document.getElementById(mapID));

    showLegende();

    var options = map.getOptions();
	options.setLeftMouseAction(IWMapOptions.CONTROL_MOVE);
	options.setRightMouseAction(IWMapOptions.CONTROL_ZOOM);
	options.setLanguage(sprache);
  	
	for (var i=0; i<firmen.length; i++) {
		for (var j=0; j<firmen[i].length; j++) {
			marker = new WlwMarker(map, firmen[i][j].coordLcc, firmen[i][j].name, firmen[i][j].firmenid, firmen[i][j].plzort);
			marker.setDefaultIcon(firmen[i][j].icon);
			firmen[i][j].marker = marker; 
		}
	}

	IWEventManager.addListener(map, 'afterinitialized', 
		function() {  
			// add controller
			map.getLayoutManager().getLayer(0).setBorder(0, 0);                                                                   
			map.getLayoutManager().getLayer(0).addControl(new IWScalarControl(map), IWAlignment.LEFT, IWAlignment.BOTTOM, 0, 0);  
			map.getLayoutManager().getLayer(0).addControl(new WlwNavigationControl(map), IWAlignment.RIGHT, IWAlignment.TOP, 0, 0);  
			map.getLayoutManager().getLayer(0).addControl(new WlwZoomControl(map), IWAlignment.RIGHT, IWAlignment.TOP, 0, 0);
			measuringTool = new WlwMeasuringControl(map);
			map.getLayoutManager().getLayer(2).addControl(measuringTool, IWAlignment.CENTER, IWAlignment.CENTER, 0, 0);
			map.getLayoutManager().getLayer(2).addControl(measuringTool.getInfoWindow(), IWAlignment.TOP, IWAlignment.RIGHT, 33, 84);
			map.getLayoutManager().getLayer(0).addControl(new WlwToolbar(map, measuringTool), IWAlignment.TOP, IWAlignment.RIGHT, 0, 0);
			
			// map.getLayoutManager().getLayer(1).addControl(new IWOverviewMapControl(map, 'roadmap'), IWAlignment.LEFT, IWAlignment.TOP, 0, 0);
			
			// add marker
			for (var i=0; i<firmen.length; i++) {
				for (var j=0; j< firmen[i].length; j++) {
					if (i == 0) { // die Firmen der ersten Seite anzeigen
						map.getOverlayManager().getLayer(0).addOverlay(firmen[i][j].marker);
						//alert(firmen[i][j].marker);
					}
					IWEventManager.addListener(firmen[i][j].marker, 'onclick', 
							function(event) {
								var txt = "";
								// fuer jeden Marker auf der Seite das Tooltipp bauen
								for (var k=0; k< firmen[mapSeite-1].length; k++) {
									var x = this.getCoordinate().distanceFrom(firmen[mapSeite-1][k].marker.getCoordinate());
									if (x / map.getMeterPerPixel() < 10) { // falls Pixelabstand kleiner 10
										txt += "<p style='font-size:1.0em; color:#254E9B'><strong>" + firmen[mapSeite-1][k].marker.name + "</strong><br/>"+ firmen[mapSeite-1][k].marker.plzort + "</p>";
									}
								}
								map.openInfoBalloon(this.getCoordinate(), txt); 
							}.iwclosure(firmen[i][j].marker)
					);
				}
			}
		}.iwclosure(this)
	);
	// Kartenmittelpunkt setzen
	setCenter();			
}

/*
 * initialisiert die Map der Firmeninformation - wird durch ein body-onload aufgerufen
 */
function initMapFI(mapID, sprache, pathImage)  
{
	if(pathImage){
		WLW_PATH_IMAGE = pathImage;
	}
	map = new IWMap(document.getElementById(mapID));
	var options = map.getOptions();
	options.setLeftMouseAction(IWMapOptions.CONTROL_MOVE);
	options.setRightMouseAction(IWMapOptions.CONTROL_ZOOM);
	options.setLanguage(sprache);
  	
	marker = new WlwMarker(map, firmen[0][0].coordLcc);
	marker.setDefaultIcon(firmen[0][0].icon);
	firmen[0][0].marker = marker;
	
	IWEventManager.addListener(map, 'afterinitialized', 
		function() {  
			// add controller
      		map.getLayoutManager().getLayer(0).setBorder(0, 0);                                                                   
			map.getLayoutManager().getLayer(0).addControl(new IWScalarControl(map), IWAlignment.LEFT, IWAlignment.BOTTOM, 0, 0);
			map.getLayoutManager().getLayer(0).addControl(new WlwNavigationControl(map), IWAlignment.RIGHT, IWAlignment.TOP, 0, 0);  
			map.getLayoutManager().getLayer(0).addControl(new WlwZoomControl(map), IWAlignment.RIGHT, IWAlignment.TOP, 0, 0);
			
			map.getLayoutManager().getLayer(1).setBorder(0, 0);
			map.getLayoutManager().getLayer(1).addControl(new IWOverviewMapControl(map, 'roadmap'), IWAlignment.LEFT, IWAlignment.TOP, 0, 0);
			
			measuringTool = new WlwMeasuringControl(map);
			map.getLayoutManager().getLayer(2).addControl(measuringTool, IWAlignment.CENTER, IWAlignment.CENTER, 0, 0);
			map.getLayoutManager().getLayer(2).addControl(measuringTool.getInfoWindow(), IWAlignment.TOP, IWAlignment.RIGHT, 33, 84);
			map.getLayoutManager().getLayer(0).addControl(new WlwToolbar(map, measuringTool), IWAlignment.TOP, IWAlignment.RIGHT, 0, 0);
			
			// add marker
			map.getOverlayManager().getLayer(0).addOverlay(firmen[0][0].marker);
			// keine Maussymbolaenderung bei mouse over
			IWEventManager.addListener(firmen[0][0].marker, 'onmouseover',  
			function(e)  
			{  
				firmen[0][0].marker.getContainer().style.cursor = 'default';
				var listener = IWEventManager.addListener(firmen[0][0].marker.getContainer(), 'onmouseout',  
						function(e)  
						{  
							IWEventManager.removeListener(listener);  
				        }.iwclosure(this)  
					);                            
				}.iwclosure(firmen[0][0].marker)  
			); 
		}.iwclosure(this)
	);
	// Kartenmittelpunkt setzen
	setCenter();			
}

/*
 * setzt den Mittelpunkt der Map
 */
function setCenter() {
	if (mapStandortModus == 'ez') {
		map.setCenter(firmen[0][0].marker.getCoordinate(), MIN_ZOOM);
	} else {
		map.setCenter(getCenterCoordinateOS(firmen[mapSeite-1]), getZoomOS(map, firmen[mapSeite-1]));
	}
}

/*
 * zeigt die Map in der Firmeninfo an
 * @param zustand - sollgeoeffnet oder geschlossen werden
 * @param sprache - optional, setzt die Sprache der Infoware Map
 */
function showMap(zustand, sprache, pathImage) {
	if(zustand == 'open') {
		document.getElementById('theMap').style.display='block';
		document.getElementById('stadtplanclose').style.display='none';
		document.getElementById('stadtplanopen').style.display='block';
		document.getElementById('idMap').style.display='block';
		if (map == null) {
			initMapFI('idMap', sprache, pathImage);
		}
	} else {
		document.getElementById('theMap').style.display='none';
		document.getElementById('stadtplanopen').style.display='none';
		document.getElementById('stadtplanclose').style.display='block';
	}
	/* Der IE6 schiebt den Fuss nicht automatisch ans Ende */
	if (navigator.appVersion.indexOf("MSIE 6")) {
	  /* weiterer Bug: Der Container muss einmal "bewegt" werden */
	  document.getElementById("fussKomplett").style.bottom = 10 + "px";
	  document.getElementById("fussKomplett").style.bottom = 0 + "px";
	}
}
