var map = null;
var geocoder = null;

function loadMap(id,x,y) {	
	var minMapScale = 10;
	var maxMapScale = 18;
	var allowedBounds = new GLatLngBounds(new GLatLng(45.75,14.039), new GLatLng(46.34,14.972));
	
	map = new GMap2(document.getElementById(id));
  	map.setCenter(new GLatLng(y, x), 10);
  	map.setMapType(G_HYBRID_MAP);
		
	geocoder = new GClientGeocoder();
	map.addControl(new GLargeMapControl());
	map.addControl(new GMenuMapTypeControl());
	map.enableScrollWheelZoom();
	map.enableContinuousZoom();

	center = map.getCenter();
	var mapTypes = map.getMapTypes();
	for (var i=0; i<mapTypes.length; i++) {
		mapTypes[i].getMinimumResolution = function() {return minMapScale;}
		mapTypes[i].getMaximumResolution = function() {return maxMapScale;}
	}
	
	if (id == "mapContainer_w") {
		
		GEvent.addListener(map, "zoomend", function(oldLevel, newLevel) {
			getLocations(limit,$('.from_p_c').attr("id"),$('.sel_hidden').attr("id"));
		});
		
		GEvent.addListener(map, "moveend", function() {
			var bounds = map.getBounds();
			if(bounds.containsLatLng(center) == false) {
				center = map.getCenter();
				getLocations(limit,$('.from_p_c').attr("id"),$('.sel_hidden').attr("id"));
			}
			checkBounds(map,allowedBounds);
	    });
	}			
	return map;
}


function setupMarkers(data, marked) {
	var batch = []; 
	var locations = data.split("|");
	map.clearOverlays();
	var firstItem;
	
	
	for (var i in locations) {
		
		var location = locations[i].split(",");
		
	    point = new GLatLng(location[2],location[1]);
	    
	    var title = location[0];
	    if(marked) {
	    	if (marked==title) {
	    		var marker = new GMarker(point,{title:title,icon:createIcon(12,12,"orange")});
	    		firstItem = marked;
	    	} else {
	    		var marker = new GMarker(point,{title:title,icon:createIcon(10,10,"blue")});
	    	}
	    } else {
	    	
	    	if (i == 0) {var marker = new GMarker(point,{title:title,icon:createIcon(12,12,"orange")}) } else {var marker = new GMarker(point,{title:title,icon:createIcon(10,10,"blue")});}
	    	if (i == 0) {firstItem = location[0]}
	    }
	    
	    GEvent.addListener(marker, "click", function(id) {
	    	setupMarkers(data,this.getTitle());
	    	loadLocationData(this.getTitle(),true);
	    });	    
	    	    
	    map.addOverlay(marker);
	} 
	var show;
	if($("#second").hasClass('sel')) {show = false;} else {show = true}
	loadLocationData(firstItem, show);
}

function setupMarker(location,count) {
	
	point = new GLatLng(location[2],location[1]);
	var title = location[0];
	
	var marker = new GMarker(point,{title:title,icon:createIcon(10,10,"blue")});
	
	
	var first = location[3].split(':');
	
	var fYear = parseInt(first[0]);
	var fMonth = first[1];
	
	if (fMonth.substring(0,1) == 0) {
		fMonth = fMonth.substring(1,2);
	}
	
	
	var elementHeight = parseInt($('#tower_'+fMonth+'_'+fYear).height());
	if (elementHeight <= 160) {var newHeight = elementHeight + 1;} else {var newHeight = elementHeight;}
	
	$('#tower_'+fMonth+'_'+fYear).css({height:newHeight});
	
	var colors = new Array(	"rgb(165,42,42)",
							"rgb(210,105,30)",
							"rgb(139,90,43)",
							"rgb(92,64,51)",
							"rgb(47,79,47)",
							"rgb(74,118,110)",
							"rgb(162,205,90)",
							"rgb(99,184,255)",
							"rgb(131,139,139)",
							"rgb(36,24,130)");
		
	$('#tower_'+fMonth+'_'+fYear).append('<div style="width:12px; height: 1px; background-color: '+colors[count]+'; font-size: 0em;"></div>');
    map.addOverlay(marker);
}


function createIcon (mwidth,mheight,color) {
	var icon = new GIcon();
	icon.image = "../uploads/google_maps/marker_" + color + "_" + mwidth + "_" + mheight + ".gif";
	icon.iconSize = new GSize(mwidth, mheight);
	icon.iconAnchor = new GPoint(6, mheight);
	icon.infoWindowAnchor = new GPoint(5, 1);
	
	return icon;
}


function generateRandomLocations (map,number) {
	var batch = [];
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	
	var lngSpan = northEast.lng() - southWest.lng();
	var latSpan = northEast.lat() - southWest.lat();
	for (var i = 0; i < number; i++) {
		var point = new GLatLng(southWest.lat() + latSpan * Math.random(), southWest.lng() + lngSpan * Math.random());
		batch.push(new GMarker(point, {icon:createIcon(12,20,"blue",22,20)}));
	}
	
	return batch;
}

function showAddress(address) {
	if (geocoder) {
		geocoder.getLatLng(address, function(point) {
			
			if (point) { 
				outputCoordinates(point);
				var marker;
				marker = new GMarker(point, {draggable: true}); 
				
				GEvent.addListener(marker, "dragend", function(point) {
					outputCoordinates(point);
				});
				
	        	map.setCenter(point, 17);
	        	map.clearOverlays();
	        	map.addOverlay(marker);
	        }
		});
	}
}


function checkBounds(map,allowedBounds) {

    if (allowedBounds.contains(map.getCenter())) {
      return;
    }

    var C = map.getCenter();
    var X = C.lng();
    var Y = C.lat();

    var AmaxX = allowedBounds.getNorthEast().lng();
    var AmaxY = allowedBounds.getNorthEast().lat();
    var AminX = allowedBounds.getSouthWest().lng();
    var AminY = allowedBounds.getSouthWest().lat();

    if (X < AminX) {X = AminX;}
    if (X > AmaxX) {X = AmaxX;}
    if (Y < AminY) {Y = AminY;}
    if (Y > AmaxY) {Y = AmaxY;}

    map.setCenter(new GLatLng(Y,X));
}







