var map;
var poiCoords = [];
var mapOverlays = [];
var gmapTooltip;
var boxText = document.createElement("div");
boxText.style.cssText = "margin-top: 0; background: url(/static/img/card/box_bg.png) no-repeat; padding: 5px 5px 5px 20px;";
var category = "";
var title = "";
var icon = "";



function ClearOverlays() {
	if (mapOverlays) {
		for (var i = 0; i < mapOverlays.length; i++) {
			mapOverlays[i].setMap(null);
		}
		mapOverlays = [];
	}
}

function RefreshPOIs() {
	ClearOverlays();
	var poiCoords = [];
	var markers = [];
	var objectcount = $("#results").children().length;
	
	var bounds = new google.maps.LatLngBounds();
	
	for (var i = 0; i < objectcount; i++) {
		var thistitle = $(".title",".result:eq("+i+")").attr("class");
		var thiscolor = thistitle.substr(6);
		var currlat = $(".lat",".result:eq("+i+")").text();
		var currlng = $(".lng",".result:eq("+i+")").text();
		var latlan_array_item = new google.maps.LatLng(currlat,currlng);
		var category = $(".category",".result:eq("+i+")").text();
		var icon = $(".icon",".result:eq("+i+")").attr("class");
		var title = $(".title",".result:eq("+i+")").text();
		var href = $("a.button.details",".result:eq("+i+")").attr("href");
		var category = $(".category",".result:eq("+i+")").text();
		poiCoords.push(latlan_array_item);
		markers.push(getMarker(latlan_array_item, i+1, thiscolor, category, icon, title, href));			
		bounds.extend(latlan_array_item);
	}	
	map.fitBounds(bounds);
	var mcOptions = {gridSize: 50, maxZoom: 15};
	var mc = new MarkerClusterer(map, markers, mcOptions);	
	
	
}

function RefreshBasketPOIs() {
	ClearOverlays();
	var poiCoords = [];
	var markers = [];
	var objectcount = $("#results").children().length;
	
	var bounds = new google.maps.LatLngBounds();
	
	for (var i = 0; i < objectcount; i++) {
		var thistitle = $(".title",".result:eq("+i+")").attr("class");
		var thiscolor = thistitle.substr(6);
		var currlat = $(".lat",".result:eq("+i+")").text();
		var currlng = $(".lng",".result:eq("+i+")").text();
		var latlan_array_item = new google.maps.LatLng(currlat,currlng);
		var category = $(".category",".result:eq("+i+")").text();
		var icon = $(".icon",".result:eq("+i+")").attr("class");
		var title = $(".title",".result:eq("+i+")").text();
		var href = $("a.button.details",".result:eq("+i+")").attr("href");
		var category = $(".category",".result:eq("+i+")").text();
		poiCoords.push(latlan_array_item);
		markers.push(getMarker(latlan_array_item, i+1, thiscolor, category, icon, title, href));			
		bounds.extend(latlan_array_item);
	}
	map.fitBounds(bounds);
}

// SET START POSITION

if ( $("#map_canvas").length > 0 ) {
	var startpos = new google.maps.LatLng(47.458349, 13.984158);
}

function initialize() {

	// INITIALIZE GMAPS
		var mapDiv = $("#map_canvas");
		mapDiv = mapDiv[0];

	// MYOPTIONS FOR INITIAL MAP
		var myOptions_init = {
			zoom: 10,
			center: startpos,
			disableDefaultUI: true,
			mapTypeId: google.maps.MapTypeId.HYBRID
		}
		map = new google.maps.Map(mapDiv, myOptions_init);
		RefreshPOIs();
}

function initializeBasket() {

	// INITIALIZE GMAPS
		var mapDiv = $("#map_canvas");
		mapDiv = mapDiv[0];

	// MYOPTIONS FOR INITIAL MAP
		var myOptions_init = {
			zoom: 11,
			center: startpos,
			disableDefaultUI: true,
			mapTypeId: google.maps.MapTypeId.HYBRID
		}
		map = new google.maps.Map(mapDiv, myOptions_init);
		RefreshBasketPOIs();
}

function initializeDetail() {

	// INITIALIZE GMAPS
		var mapDiv = $("#map_canvas");
		mapDiv = mapDiv[0];
		var markerLatlng = new google.maps.LatLng(singlepoilat,singlepoilan);

	// MYOPTIONS FOR INITIAL MAP
		var myOptions_init = {
			zoom: 11,
			center: markerLatlng,
			disableDefaultUI: true,
			mapTypeId: google.maps.MapTypeId.HYBRID
		}
		map = new google.maps.Map(mapDiv, myOptions_init);
		switch (catcolor) {
			case "blue":
			var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
			new google.maps.Size(41,53), new google.maps.Point(0,597), new google.maps.Point(21,53));
			break;
			case "brown":
			var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
			new google.maps.Size(41,53), new google.maps.Point(41,597), new google.maps.Point(21,53));
			break;
			case "yellow":
			var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
			new google.maps.Size(41,53), new google.maps.Point(82,597), new google.maps.Point(21,53));
			break;
			case "coffee":
			var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
			new google.maps.Size(41,53), new google.maps.Point(123,597), new google.maps.Point(21,53));
			break;
			case "pink":
			var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
			new google.maps.Size(41,53), new google.maps.Point(164,597), new google.maps.Point(21,53));
			break;
			case "violet":
			var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
			new google.maps.Size(41,53), new google.maps.Point(205,597), new google.maps.Point(21,53));
			break;
			case "red":
			var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
			new google.maps.Size(41,53), new google.maps.Point(246,597), new google.maps.Point(21,53));
			break;
			case "green":
			var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
			new google.maps.Size(41,53), new google.maps.Point(287,597), new google.maps.Point(21,53));
			break;
			case "marine":
			var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
			new google.maps.Size(41,53), new google.maps.Point(328,597), new google.maps.Point(21,53));
			break;
			case "cyan":
			var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
			new google.maps.Size(41,53), new google.maps.Point(369,597), new google.maps.Point(21,53));
			break;
		}		
		var marker = new google.maps.Marker({
			position: markerLatlng,
			icon: image,
			map: map
		});	
}


function getMarker(coords, nr, color, category, icon, title, href) {
	var nrstr = String(nr);
	var strlength = nrstr.length;
	switch (color) {
		case "blue":
		var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
		new google.maps.Size(41,53), new google.maps.Point(0,597), new google.maps.Point(21,53));
		break;
		case "brown":
		var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
		new google.maps.Size(41,53), new google.maps.Point(41,597), new google.maps.Point(21,53));
		break;
		case "yellow":
		var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
		new google.maps.Size(41,53), new google.maps.Point(82,597), new google.maps.Point(21,53));
		break;
		case "coffee":
		var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
		new google.maps.Size(41,53), new google.maps.Point(123,597), new google.maps.Point(21,53));
		break;
		case "pink":
		var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
		new google.maps.Size(41,53), new google.maps.Point(164,597), new google.maps.Point(21,53));
		break;
		case "violet":
		var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
		new google.maps.Size(41,53), new google.maps.Point(205,597), new google.maps.Point(21,53));
		break;
		case "red":
		var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
		new google.maps.Size(41,53), new google.maps.Point(246,597), new google.maps.Point(21,53));
		break;
		case "green":
		var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
		new google.maps.Size(41,53), new google.maps.Point(287,597), new google.maps.Point(21,53));
		break;
		case "marine":
		var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
		new google.maps.Size(41,53), new google.maps.Point(328,597), new google.maps.Point(21,53));
		break;
		case "cyan":
		var image = new google.maps.MarkerImage("/static/img/card/sprite_24.png",
		new google.maps.Size(41,53), new google.maps.Point(369,597), new google.maps.Point(21,53));
		break;
	}

	if (strlength == "1") {
		var marker = new MarkerWithLabel({
			position: coords,
			icon: image,
			draggable: false,
			map: map,
			labelContent: nr,
			labelAnchor: new google.maps.Point(3, 41),
			labelClass: "maplabels"
		});
	}
	if (strlength == "2") {
		var marker = new MarkerWithLabel({
			position: coords,
			icon: image,
			draggable: false,
			map: map,
			labelContent: nr,
			labelAnchor: new google.maps.Point(7, 41),
			labelClass: "maplabels"
		});
	}
	if (strlength == "3") {
		var marker = new MarkerWithLabel({
			position: coords,
			icon: image,
			draggable: false,
			map: map,
			labelContent: nr,
			labelAnchor: new google.maps.Point(11, 41),
			labelClass: "maplabels"
		});
	}

	/* Tooltip */

	var pagelang = $("head").attr("lang");

	if ( pagelang == "de" ) {
		var closetext = "Schliessen";
		var closeboxurl = "/static/img/card/tooltip_close.png";
		var closeboxurlhover = "/static/img/card/tooltip_close_hover.png";
	}
	else {
		var closetext = "Close";
		var closeboxurl = "/static/img/card/tooltip_close_en.png";
		var closeboxurlhover = "/static/img/card/tooltip_close_en_hover.png";
	}

	boxwidth = 228;
	var boxText = '<span class="category">'+category+'</span><span class="title '+color+'">'+title+'</span><span class="'+icon+'"></span><a class="button small details" href="'+href+'">Details<span></span></a>';


	var myOptions = {
		content: boxText,
        disableAutoPan: false,
        maxWidth: 0,
        pixelOffset: new google.maps.Size(-114, -140),
        zIndex: 200,
        boxStyle: {
            background: "none",
            opacity: 1,
            width: boxwidth
        },
        closeBoxURL: closeboxurl,
        infoBoxClearance: new google.maps.Size(1, 1),
        isHidden: false,
        pane: "floatPane",
        enableEventPropagation: false
	};

	google.maps.event.addListener(marker, "click", function (e) {
		if(gmapTooltip) {
			gmapTooltip.close();
		}
		gmapTooltip = ib;
		ib.open(map, this);
    });

	var ib = new InfoBox(myOptions);

	/* Tooltip End */
	marker.setMap(map);
	mapOverlays.push(marker);
	return marker;

}

// MAP TYPE BUTTONS

$("#type .map").click(
	function() {
		map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
		$(this).parent().find(".active").removeClass("active");
		$(this).addClass("active");
	}
);

$("#type .satellite").click(
	function() {
		map.setMapTypeId(google.maps.MapTypeId.HYBRID);
		$(this).parent().find(".active").removeClass("active");
		$(this).addClass("active");
	}
);

$("#type .earth").click(
	function() {
		map.setMapTypeId(google.maps.MapTypeId.TERRAIN);
		$(this).parent().find(".active").removeClass("active");
		$(this).addClass("active");
	}
);

// NAVIGATION BUTTONS

$("#pan .top").click(
	function() {
		map.panBy(0, -100);
	}
);

$("#pan .right").click(
	function() {
		map.panBy(100, 0);
	}
);

$("#pan .bottom").click(
	function() {
		map.panBy(0, 100);
	}
);

$("#pan .left").click(
	function() {
		map.panBy(-100, 0);
	}
);

// ZOOM BUTTONS

$("#zoom .minus").click(
	function() {
		map.setZoom(parseInt(map.getZoom())+1);
	}
);

$("#zoom .plus").click(
	function() {
		map.setZoom(parseInt(map.getZoom())-1);
	}
);



