// Google Maps
var arrMapData = [];
var markerManager;
var directions;
var truckPosition, markerTruck;
var showTruck = false;
var truckLocked = false;
var iconMarkers, iconTruck;
var zoomLevel, mapType, mapControl;
var centerLat, centerLong;
var points = new Array();
var dir;
var geoXmlSource;
var arrMarkers = new Array();
// DEBUG
// var _console = (console) ? console : null;
// -----

function initIcons() {
	var dayNow = parseInt((new Date()).getTime() / 86400000);
	var dayMarker, day, month, label, status;
	iconMarkers = [];	
	
	for (var i in arrMarkers) {
		var iconMarker = new GIcon();
		
		dayMarker = parseInt(arrMarkers[i].date.getTime() / 86400000);
		month = arrMarkers[i].date.getMonth()+1;
		month = (month<10) ? "0"+month : month;
		day = arrMarkers[i].date.getDate();
		day = (day<10) ? "0"+day : day;
		//_console.log("day: "+day+" | month: "+month);
		if (dayMarker < dayNow) {
			status = "past";
		} else if (dayMarker == dayNow) {
			status = "present";
		} else {
			status = "future";
		}
		status = month.toString()+day.toString()+"_"+status.toString();
		//_console.log(arrMarkers[i].name+": "+arrMarkers[i].date);
		iconMarker.image = "/images/common/xmas/2008/tour/"+status+".png";
		// iconMarker.shadow = null;
		iconMarker.iconSize = new GSize(42, 50);
		// iconMarker.shadowSize = new GSize(91, 84);
		iconMarker.iconAnchor = new GPoint(2, 45);
		iconMarker.infoWindowAnchor = new GPoint(17, 21);
		iconMarkers.push(iconMarker);
	}
	
	iconTruck = new GIcon();	
	iconTruck.image = "/images/common/xmas/2008/iconTruck_marker.png";
	//iconTruck.shadow = "/images/common/xmas/2008/iconTruck_shadow.png";
	iconTruck.iconSize = new GSize(52, 63);
	//iconTruck.shadowSize = new GSize(91, 84);
	iconTruck.iconAnchor = new GPoint(6, 58);
	iconTruck.infoWindowAnchor = new GPoint(30, 10);	
}

// Call this function when the page has been loaded
function initMap() {
	// displayStatusMessage("Karte wird erstellt...");
	
	for (var i=0; i<arrMapData.length; i++) {
		var map = new google.maps.Map2(document.getElementById(arrMapData[i].container));
		switch (arrMapData[i].mapControls) {
			case "small": 
				map.addControl(new GSmallMapControl());
				break;
			case "large": 
				map.addControl(new GLargeMapControl());
				break;
			default:
				break;
		}
		// map.addControl(new GMapTypeControl());
		map.setCenter(new GLatLng(arrMapData[i].centerLat, arrMapData[i].centerLong), arrMapData[i].zoomLevel);
		var mapGType;
		switch (arrMapData[i].mapType) {
			case "normal":
				mapGType = G_NORMAL_MAP;
				break;
			case "satellite":
				mapGType = G_SATELLITE_MAP;
				break;
			case "hybrid":
				mapGType = G_HYBRID_MAP;
				break;
			default:
				mapGType = G_PHYSICAL_MAP;
				break;
		}	
		map.setMapType(mapGType);
		
		loadKML(map, arrMapData[i].geoXmlSource);
	}
}

function loadKML(map, geoXmlSource) {	
	var geoXml = new GGeoXml(geoXmlSource+"?r="+Math.random()*1000, onGeoXmlLoaded);
	function onGeoXmlLoaded() {
    	map.addOverlay(geoXml);
	}
}

function addPoints() {
	var mgrOptions = { borderPadding: 30, maxZoom: 15, trackMarkers: false };
	markerManager = new MarkerManager(map);
	
	for(var i = 0; i < arrMarkers.length; i++) {
		var latlng = new GLatLng(arrMarkers[i].lat, arrMarkers[i].lng);
		var point = new GPoint(arrMarkers[i].lng, arrMarkers[i].lat);
		// console.log(point);
		var popuphtml = arrMarkers[i].htmlInfo;
		var href = arrMarkers[i].href;
		// var icon = (arrMarkers[i].icon) ? arrMarkers[i].icon : G_DEFAULT_ICON;
		var marker = createMarker(point, iconMarkers[i], popuphtml, href);
		markerManager.addMarker(marker, 0);
	}
	// add truck marker
	if (showTruck) {
		markerTruck = createMarker(new GPoint(truckPosition.lng, truckPosition.lat), {icon: iconTruck, zIndexProcess:function(){return 99;}});
		markerManager.addMarker(markerTruck, 0);
	}
	// add truck route so far
	if (directions != "") {
		dir = new google.maps.Directions(map);
		dir.load(directions, {preserveViewport:true});
		GEvent.addListener(dir,"load", OnLoadDirection); 
		GEvent.addListener(dir,"addoverlay", OnAddOverlayDirection); 
	}
	// display markers
	markerManager.refresh();	
}

function OnLoadDirection(direction) {
	var poly = direction.getPolyline();
	poly.setStrokeStyle({"color":"#A41022", "weight":4, "opacity":0.4});
	//poly.redraw(true);
}
function OnAddOverlayDirection(direction) {
	for(var i=0; i<direction.getNumGeocodes(); i++) {
		map.removeOverlay(direction.getMarker(i));
	}
} 

function createMarker(point, icon, popuphtml, href) {
	var popuphtml = (popuphtml) ? "<div class=\"ga_markerinfo\">" + popuphtml + "<\/div>" : null;
	var marker = new GMarker(point, icon);
	GEvent.addListener(marker, "click", function() {
		if (marker.getIcon() == iconTruck) {
			map.setCenter(marker.getLatLng(), 14, G_PHYSICAL_MAP);
		} else { 
			map.panTo(marker.getLatLng());
			if (popuphtml) {
				marker.openInfoWindowHtml(popuphtml);
			} else if (href) {
				location.href = href;
			}
		}
	});
	return marker;
}

function displayStatusMessage(str) {
	try {
		document.getElementById("status_message").innerHTML = str;
	} catch(e) {
		throw(e);
	}
}

function loadMaps() {
	google.load("maps", "2", {"callback" : initMap});
}

function parseDate(str) {
	var year, month, day, hours, minutes;
	var arrDate, arrTime;
	arrDate = str.split("T")[0].split("-");
	arrTime = str.split("T")[1].split(":");
	year = parseInt(arrDate[0], 10);
	month = parseInt(arrDate[1], 10)-1;
	day = parseInt(arrDate[2], 10);
	hours = parseInt(arrTime[0], 10);
	minutes = parseInt(arrTime[1], 10);
	
	return new Date(year, month, day, hours, minutes);
}

function loader() {	
	displayStatusMessage("Karte wird geladen...");
	
	/*
	var script2 = document.createElement("script");
	script2.type = "text/javascript";
	script2.src = "/scripts/googleMaps/markermanager.js";
	document.getElementsByTagName("head")[0].appendChild(script2);
	*/
	
	var script = document.createElement("script");
	var key = "ABQIAAAAB-c5GLDW0lLYkOsLJW4jSxTf9ZcHOE2FIdr9ax08S1-YotctERQ-bSNvZIerH0OsLspLepExWFh1PQ"; // PROD
	// var key = "ABQIAAAAB-c5GLDW0lLYkOsLJW4jSxQAB6kbwoNtNPW6izUpLnh6erasXhQnXg8xJqifGnE997FUY76hxB0Xdw"; // DEV
	var callback = "loadMaps";
	script.src = "http://www.google.com/jsapi?key="+key+"&callback="+callback;
	script.type = "text/javascript";
	document.getElementsByTagName("head")[0].appendChild(script);
}
function initLoader() {	
	//addLoadListener(loader);
	
	var yuiloader = new YAHOO.util.YUILoader({ 
		require: ["dom", "event", "connection", "json"], 
		base: '/scripts/yui/',
		loadOptional: false, 
		onSuccess: function() {
			// YAHOO.util.Event.onDOMReady(loader);
			YAHOO.util.Event.onAvailable("footer", loader, o);
		},
		timeout: 10000,
		combine: false 
	}); 
	yuiloader.insert(); 
}
