
var MapLoader = new function()
{
    var m_Map;
	this.MapManager = null;
    this.Markers = new Array();
	
	this.OnLoad = function(){
        if (GBrowserIsCompatible()) {
            // slänger upp kartan och sätter dit zoom-kontroll och knappar för att byta typ av karta
            m_Map = new GMap2(document.getElementById("map"));

            m_Map.addControl(new GSmallMapControl());
            m_Map.addControl(new GMapTypeControl());
            
            //create a point from cookie which is the current depot
            
             var lat = MapLoader.readCookie("currentdepot", "lat", 15);
             var lng = MapLoader.readCookie("currentdepot", "lng", 15);
             var zoom = MapLoader.readCookie("currentdepot", "lvl", 6);
             
             var point = new GLatLng(lat, lng); 
            
            // Center current depot and zoom
            m_Map.setCenter(point, parseInt(zoom));
			
			MapLoader.MapManager = new GMarkerManager(m_Map);
			
	   		//GLog.write("Manager created");
			GDownloadUrl(mapFile, MapLoader.AddMarkers);
			
        }
	}
	
	this.readCookie = function (name, value, offset) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) { 
		    var mycookie = c.substring(nameEQ.length,c.length);
		    var pos = mycookie.indexOf(value);
		    
		    var resultPos = mycookie.substring(pos + 4, pos + offset);
		    
		    var removeValue = (resultPos.indexOf('&'));
		    
		    if (removeValue != -1){
		        resultPos = resultPos.substring(0, removeValue);
		    }
		    return resultPos;
		}
	}
	return null;
}
		            
	this.AddMarkers = function(data){

		//GLog.write("Download url");
		//GLog.write("Open xml" + data );
		var xml = GXml.parse(data);
		//GLog.write("Get marker element from xml");
		var markers = xml.documentElement.getElementsByTagName("marker");
		for (var i = 0; i < markers.length; i++) {
		
		var point = new GLatLng(parseFloat(markers[i].getAttribute("lat")),
									parseFloat(markers[i].getAttribute("lng")));
			//GLog.write("point created");						
			
			var contentHtml;
			var tooltip;
			var iconcolor;
			//GLog.write("begin looping child nodes");
			for(var x = 0; x < markers[i].childNodes.length; x++){
				//GLog.write("looping child nodes");
				//GLog.write("node: " + markers[i].childNodes[x].nodeName);
				var node = markers[i].childNodes[x];
				switch(node.nodeName){
					case "content":
						contentHtml = node.childNodes[0].nodeValue;
						//GLog.write("contentHtml: " + contentHtml);
						break;
						
					case "tooltip":
						tooltip = node.childNodes[0].nodeValue;
						//GLog.write("tooltip: " + tooltip);
						break;
						
					case "iconcolor":
						iconcolor = node.childNodes[0].nodeValue;
						//GLog.write("iconcolor" + iconcolor);
						break;
				}
			}

			//GLog.write("create marker");
			//GLog.write("point: " + point + " content: " + contentHtml + " tooltip: " + tooltip);
			var gmarker = new CMarker(point, contentHtml, tooltip, CreateIcon(iconcolor));
			//GLog.write("CMarker created");
			//GLog.write("gmarker content html:" + gmarker.contentHtml);

			gmarker.clickEventListener = GEvent.addListener(gmarker, "click", function() {
				this.openInfoWindowHtml(this.contentHtml);
			});

			//GLog.write("Listener created");

			MapLoader.Markers.push(gmarker);
			//GLog.write("Marker pushed (length)" + MapLoader.Markers.length);
		}
		//GLog.write("done parse data");

		//GLog.write("add markers");
		//GLog.write("count " + MapLoader.Markers.length + " markers");
		//GLog.write("mapmanager = " + MapLoader.MapManager);
		MapLoader.MapManager.addMarkers(MapLoader.Markers, 0);
		//GLog.write("markers added");
		//GLog.write("markers added count: " + MapLoader.Markers.length);
		MapLoader.MapManager.refresh();
	}
}

CMarker = function(position, contentHtml, tooltip, markerIcon) {
	//GLog.write("Create cmarker");
    this.inheritFrom = GMarker;
	if (typeof markerIcon == "undefined"){
	    var cMarkerColor = new CMarkerColor();
		this.markerIcon = CreateIcon(cMarkerColor.getColor(cMarkerColor.Random));
    } else
        this.markerIcon = markerIcon;
    
    //GLog.write("Icon added");
    
	if (typeof tooltip != "undefined")
	    this.title = tooltip;
	else
		this.title = "";
		
    this.inheritFrom(position, {icon: this.markerIcon, title: this.title});

    this.clickEventListener = null;
	if (typeof contentHtml != "undefined")
	    this.contentHtml = contentHtml;
	else
		this.contentHtml = "";
	//GLog.write("CMarker created");
}

CMarker.prototype = new GMarker(new GLatLng(0,0));

// Create the icon for a marker
CreateIcon = function(iconcolor, smallMarker, specialMarker) {
    var icon = new GIcon();
	//GLog.write("Create icon");
    if(typeof iconcolor == "undefined" || iconcolor == null)
        iconcolor = "red";
    icon.color = iconcolor;
    
    if(typeof smallMarker == "undefined")
        smallMarker = true;
    
    if(smallMarker == true) {
        icon.image = "http://labs.google.com/ridefinder/images/mm_20_" + iconcolor + ".png";
        icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
        icon.iconSize = new GSize(12,22);
        icon.shadowSize = new GSize(22,20);
        icon.iconAnchor = new GPoint(6,20);
        icon.infoWindowAnchor = new GPoint(6,1);
        icon.infoShadowAnchor = new GPoint(13,13);
    } else {
        icon.shadow = "http://localhost/Web/Core/UI/Images/Markers/shadow50.png";
        icon.iconSize = new GSize(20, 34); 
        icon.shadowSize = new GSize(37, 34);
        icon.iconAnchor = new GPoint(9, 34); 
        icon.infoWindowAnchor = new GPoint(9, 2); 
        icon.infoShadowAnchor = new GPoint(18, 25);
        if(iconcolor == "yellow")
            iconcolor = "blue";
        icon.image = "http://localhost/Web/Core/UI/Images/Markers/marker-" + iconcolor;
        if(typeof specialMarker == "undefined" || specialMarker == null)
            specialMarker = false;
        if(specialMarker == true)
            icon.image += "star.png";
        else icon.image += ".png";
    }
    //GLog.write("Icon created");
    return icon;
};

