var markerMap = new Array();
var map = null;
var geoCoder = null;
var directionsService = null;
var directionDisplay = null;
var currentActiveWindow = null;
var routeOID = null;
var zindex = 1000;
var mapLoaded = false;

function refreshIndex(){
	zindex = 1000;
}

function initializeMap(id) {
	
	var latlng = new google.maps.LatLng(-34.397, 150.644);
	var myOptions = {
		      zoom: 13,
		      noClear: true,
		      center: latlng,
		      mapTypeId: google.maps.MapTypeId.ROADMAP
		   };
	var markerOptions =
	{
		icon: "/images/locator.png",
		clickable:false
	}; 
	var directionOptions =
	{
		markerOptions: markerOptions
	}; 
	map = new google.maps.Map(document.getElementById(id), myOptions);
	google.maps.event.addListener(map, 'tilesloaded', function () {
		if (!mapLoaded) {
			changeToDetails();
			mapLoaded = true;
		}
		refreshIndex();
	});
	geocoder = new google.maps.Geocoder();
	directionService = new google.maps.DirectionsService();
	directionsDisplay = new google.maps.DirectionsRenderer(directionOptions);
	directionsDisplay.setMap(map);
}

function changeToDetails(){
	
	document.getElementById("radoMap").style.opacity = "100";
	document.getElementById("radoMap").style.filter = "";
	document.getElementById("radoMap").style.visibility = "";
	document.getElementById("theTab1").setAttribute("class", "active");
	document.getElementById("theTab2").setAttribute("class", "first");				
	
	document.getElementById("visibleManager").style.display = '';
	document.getElementById("mapPreviewer").style.display = 'none';
	
	$("ul.tabs li").removeClass("active"); //Remove any "active" class
	$("#theTab1").addClass("active"); //Add "active" class to selected tab
	$(".tab_content").hide(); //Hide all tab content
	var activeTab = $("#theTab1").find("a").attr("href"); //Find the href attribute value to identify the active tab + content
	$(activeTab).fadeIn(); //Fade in the active ID content
}
function clickMarker(oid, iconPath, changeTab){
	openMarkerAndCreateText(oid, iconPath, changeTab);
}

function openRouteInWindow(oid, targetPlace){
	var partnerObj = markerMap[oid];
	var fromCoordinate = partnerObj["coordinate"];
	geocoder.geocode( { 'address': targetPlace}, function(results, status) {
		 if (status == google.maps.GeocoderStatus.OK) {
			 var myResult = results[0].geometry.location;
			 fromCoordinate = "" + fromCoordinate;
			 fromCoordinate = fromCoordinate.replace("(", "");
			 fromCoordinate = fromCoordinate.replace(")", "");
			 var toCords = "" + myResult;
			 toCords = toCords.replace("(", "");
			 toCords = toCords.replace(")", "");
			 var marker = partnerObj["marker"];
			 marker.setVisible(false);
			 routeOID = oid;
			 currentActiveWindow.close();
			 calculateRoute(fromCoordinate, toCords, targetPlace, partnerObj["streetNNumber"] + partnerObj["plzOrt"]);
		 }
	});
}

function openMarkerAndCreateText(oid, iconPath, changeTab){
	var partnerObj = markerMap[oid];
	var marker = partnerObj["marker"];
	var cord = partnerObj["coordinate"];
	$.get(pathPrefix + '/boxalino/public/storeLocator/marker.html?client_request_ajaxcutid=markerContent&view_Partner_OID=' + oid, function(data) {
		if (changeTab){
			$("ul.tabs li").removeClass("active"); //Remove any "active" class
			$("#theTab2").addClass("active"); //Add "active" class to selected tab
			$(".tab_content").hide(); //Hide all tab content
			var activeTab = $("#theTab2").find("a").attr("href"); //Find the href attribute value to identify the active tab + content
			$(activeTab).fadeIn(); //Fade in the active ID content
		}
		var infoWindow = new google.maps.InfoWindow 
		(
			{ 
				content:data,
				disableAutoPan: true,
				size: new google.maps.Size(200,200)
			}
		);
		if (currentActiveWindow) {
			currentActiveWindow.close();
		}
		//ULTRA SKILLED
		var lati = marker.getPosition().lat();
		lati = lati+0.015;
		var newCenter = new google.maps.LatLng(lati, marker.getPosition().lng());
		map.setCenter(newCenter);
		currentActiveWindow = infoWindow;
		currentActiveWindow.setPosition(marker.getPosition());
		currentActiveWindow.open(map,marker);
	});
}

function setMarkerForExisting(coordinate, iconPath, name, streetNNumber, plzOrt, oid, tel, email, link){
	coordinate = coordinate.replace("(", "");
	coordinate = coordinate.replace(")", "");
	var pos = coordinate.indexOf(",");
	var lng = coordinate.substring(pos+2, coordinate.length);
	var lat = coordinate.substring(0, pos);
	var myLatlng = new google.maps.LatLng(lat,lng);
	var marker = new google.maps.Marker({
	      position: myLatlng, 
	      map: map,
	      icon: iconPath
	  });
	 marker.setZIndex(zindex);
     zindex = zindex - 1;
	 google.maps.event.addListener(marker, 'click', function() {
		 openMarkerAndCreateText(oid, iconPath, false);
	 });
	
	 map.setCenter(myLatlng);
	 var partnerMap = new Array();
	 partnerMap["marker"] = marker;
	 partnerMap["name"] = name;
	 partnerMap["streetNNumber"] = streetNNumber;
	 partnerMap["plzOrt"] = plzOrt;
	 partnerMap["oid"] = oid;
	 partnerMap["tel"] = tel;
	 partnerMap["email"] = email;
	 partnerMap["link"] = link;
	 partnerMap["coordinate"] = coordinate;
	 markerMap[oid]=partnerMap;
}

function calculateRoute(fromSource, toSource, addrTo, addrFrom){
	var urlToGoogle = "http://maps.google.com/maps";
	var linkParms = "?f=d&source=s_d&saddr=" + addrTo + "&daddr=" + addrFrom + "@" + fromSource + "&hl=de&mra=ls&ie=UTF8&t=h&z=9&pw=2";
	document.getElementById("directionOptions").innerHTML = "<div class='printDirection'><a href='" + urlToGoogle + linkParms + "' target='_blank'>" + printRouteText + "</a></div>";
	document.getElementById("directionOptions").innerHTML = document.getElementById("directionOptions").innerHTML + "<div class='removeDirection'><a href='' onClick='removeDirection();return false;'>" + removeRouteText + "</a></div>"; 
	var request = {
		      origin: fromSource,
		      destination: toSource,
		      travelMode: google.maps.DirectionsTravelMode.DRIVING
		  };
	directionService.route(request, function(response, status) {
		if (status == google.maps.DirectionsStatus.OK) {
			directionsDisplay.setDirections(response);
			directionsDisplay.setMap(map);
		}
	});


}

function removeDirection(){
	document.getElementById("directionOptions").innerHTML = "";
	directionsDisplay.setMap(null);
	var currentRouteObj = markerMap[routeOID];
	if (currentRouteObj) {
		var pos = currentRouteObj["marker"].getPosition();
		var marker = new google.maps.Marker({
	         map: map, 
	         icon: "/images/locator.png",
	         position: pos
	     });
		 google.maps.event.addListener(marker, 'click', function() {
     		 openMarkerAndCreateText(routeOID, "/images/locator.png", false);
     	 });
	}
}

function setCoordinateAndCreateMarker(address, iconPath, objName, OID, name, streetNNumber, plzOrt, tel, email, link) {
	geocoder.geocode( { 'address': address}, function(results, status) {
		 if (status == google.maps.GeocoderStatus.OK) {
			 var myResult = results[0].geometry.location;
			 var escaped = escape(myResult); 
			 ajaxReplace('saver' , pathPrefix + '/jquery/boxalino/coordinateSave.html?client_request_objName=Partner&client_request_OID='+OID + '&client_request_coordinate=' + escaped);
			 map.setCenter(results[0].geometry.location);
	          var marker = new google.maps.Marker({
	              map: map, 
	              icon: iconPath,
	              position: results[0].geometry.location
	          });
	          marker.setZIndex(zindex);
	          zindex = zindex - 1;
	          var partnerMap = new Array();
	          partnerMap["marker"] = marker;
	          partnerMap["name"] = name;
	          partnerMap["streetNNumber"] = streetNNumber;
	          partnerMap["plzOrt"] = plzOrt;
	          partnerMap["oid"] = OID;
	          partnerMap["tel"] = tel;
	          partnerMap["email"] = email;
	          partnerMap["link"] = link;
	          partnerMap["coordinate"] = myResult;
	          markerMap[OID]=partnerMap;
	          google.maps.event.addListener(marker, 'click', function() {
	     		 openMarkerAndCreateText(OID, iconPath, false);
	     	 });
		 }
    });
}
