var MapController = new function(){
	
	// map setup
	this.map = null;
	
	this.initializeMap = function(mapID, lat, lng, zoom){
		Util.log("Initializing map");
		
		this.map = new GoogleMap(mapID);
		this.map.setHomePos(lat, lng);
		this.map.homeZoom = zoom;
		this.map.initialize();
		
		this.loadMarkerManagers();
		this.loadData();
	};

	// get data from server and load into map
	this.loadData = function(){
        try {
            if(jsonData == undefined || jsonData.length<1){
                Util.log("MapController: Map data not found");
                return;
            }
            
            for(var i=0; i<jsonData.length; i++)
                this.addMapElementObject(jsonData[i]);
        } catch(e) {}
	};

	this.loadMarkerManagers = function(){
		this.map.addManager('track-tur');
		this.map.addManager('track-ski');
		this.map.addManager('track-top');
		this.map.addManager('track-cycle');
		
		this.map.addManager('article-general');
		this.map.addManager('article-culture');
		this.map.addManager('article-nature');
		this.map.addManager('article-travel');
		this.map.addManager('article-hunting');
		this.map.addManager('article-water');
		
		this.map.addManager('bilde');
		
		this.map.addManager('showOnMap');
		
		//this.map.hideManager('track-ski');
	}
	
	// adds a element to the map
	this.addMapElementObject = function(obj){
	
		if(obj.lat<1 || obj.lng<1)
			return;
			
		Util.log("Adding mapelement: " + obj.title + " " + obj.lat + " " + obj.lng + " " + obj.type);
			
		var manager = 'general';
		var callback = null;
		var pos = new GLatLng(parseFloat(obj.lat), parseFloat(obj.lng));
		var icon = null;
		var zoom = obj.zoom < 1 ? 1 : obj.zoom;
		
		if(obj.type == 1) {
			manager = 'turstig';		
			callback = function(){
				PageController.showPage(obj.url);
			};
			
			var move = 0.0;	// if the track should be moved some pixels
			
			if(obj.options2 == 1){
				icon = GoogleMapIcon.getIcon("trip");
				manager = 'track-tur';
			} else if(obj.options2 == 2){
				icon = GoogleMapIcon.getIcon("skiing");
				manager = 'track-ski';
			} else if(obj.options2 == 5){
				icon = GoogleMapIcon.getIcon("top");
				manager = 'track-tur';
			} else if(obj.options2 == 7){
				icon = GoogleMapIcon.getIcon("cycling");	
				manager = 'track-cycle';		
			}
				
			if(obj.gpx){
				GPX.parseGpxFile(obj.gpx, function(gpxobj){ 
					MapController.map.addPolyline(GPX.parseTrack(gpxobj.rte, true, move), callback, obj.color, obj.title, manager, zoom);
				});
			}
			
		} else if(obj.type == 2) {	
			callback = function(){
				PageController.showPage(obj.url);
			};
			icon = GoogleMapIcon.getIcon("article");
			manager = 'article-general';
			if(obj.options2 == 2){
				manager = 'article-culture';	
				icon = GoogleMapIcon.getIcon("culture");
			} else if(obj.options2 == 3){
				manager = 'article-nature';
				icon = GoogleMapIcon.getIcon("nature");
			} else if(obj.options2 == 4){
				manager = 'article-travel';
				icon = GoogleMapIcon.getIcon("travel");
			} else if(obj.options2 == 5){
				manager = 'article-hunting';
				icon = GoogleMapIcon.getIcon("hunting");
			} else if(obj.options2 == 6){
				manager = 'article-water';
				icon = GoogleMapIcon.getIcon("water");
			}
		} else if(obj.type == 3) {
			if(obj.image == undefined || obj.image == null || obj.image == ""){
				Util.log("image is broken: " + obj.id);
				return;
			}
			
			manager = 'bilde';		
			callback = function(){
				eval(obj.url.replace(/\r\n/g, ""));
				//ViewController.popupImage(obj.data.images[0], pos, obj.title, obj.content, obj.date, obj.author);
			};
			icon = GoogleMapIcon.getImageIcon(obj.image, 30);
		} else
			return;

		//parseInt(obj.zoom)
		this.map.addMarker(pos, zoom, callback, manager, null, icon, obj.title);

	};

	this.pointPicker = function(latElementID, lngElementID, clickCallback){
		this.map.activatePositionPicker(latElementID, lngElementID, clickCallback);
		
	}
}
