var map = null;
var maptainer = null;
var is_visible = false;

if (typeof(window['txtShowMap']) == "undefined") {
	txtShowMap = 'View map';
}
if (typeof(window['txtHideMap']) == "undefined") {
	txtHideMap = 'Hide map';
}

if (typeof(window['txtMoreInfo']) == "undefined") {
	txtMoreInfo = 'more';
}

var mapEvents = function () {
	var site_id = document.getElementById("site_id");
	var default_type = document.getElementById("default_map_type").value;

	map = Map.init(20, 0, 2, default_type, Map.getMBR());
	getLocations(site_id.value);
}

var getLocations = function(site_id) {
	var lang = document.getElementById("id_lang");
	if (lang != null) {
		id_lang = lang.value;
	} else {
		id_lang = 1;
	}
	
	var url = '/ajax/getgeotaggedimgs.php?siteid='+site_id+"&id_lang="+id_lang;
	
	$.ajax({
		url: url, 
		type: 'get', 
		dataType: "text", 
		// data: _data, 
		success: showLocations
		}
	);
}

var showLocations = function(response) {
	var json = eval(response);
	
	var imglist = json.images;
	// site info
	var site_name = json.site_name;
	var hosting_type = json.hosting_type;
	var domain = json.domain;
	var img_dir = json.img_dir;
	var gallery_id = json.gallery_id;
	
	if (hosting_type == 'domain') {
		var base_url = "/images/";
	} else {
		var base_url = "/"+site_name+"/images/";
	}
	
	for (var i=0; i<imglist.length; i++) {
		var point = new GLatLng(imglist[i].lat, imglist[i].lng);
		var title = imglist[i].title;
		var image = "http://"+domain+img_dir+imglist[i].thumb;
		var link = base_url+imglist[i].id+"/"+gallery_id+"/";
		var desc = imglist[i].desc;
		var marker = createMarker(point, title, desc, image, link);

		map.addOverlay(marker);
	}
}

var toggleMapViz = function (x,y) {
	if (is_visible) {
		hideMap();
	} else {
		showMap(x, y);
	}
}

var imgMapEvents = function() {
	var showmap = $('#showmap');
	if (showmap) {
			showmap.click(function(e) {
				toggleMapViz(e.pageX, e.pageY);
			});
	}
	$('#staticMap').bind('click', Map.makeDynamic);
	var mapbtn = $('#mapbtn');
	if (mapbtn) mapbtn.bind('click', hideMap);
	// dragging the map
	maptainer = $('#maptainer');
	if (maptainer) {
		maptainer.draggable();
		maptainer.resizable();
	}
	return false;
}

var showMap = function (x,y) {
	if (maptainer) {
		var x_pos = parseInt(x) + 10;
		var y_pos = parseInt(y) - parseInt(maptainer.height()) - 20;
		maptainer.css('left', x_pos+"px");
		maptainer.css('top', y_pos+"px");
		maptainer.css('visibility', 'visible');
		Map.makeDynamic();
	}
	is_visible = true;
	var showmap =  $("#showmap");
	if (showmap) {
		showmap.html(txtHideMap);
	}
	
	return false;
}

var hideMap = function () {
	if (maptainer) maptainer.css('visibility', 'hidden');
	is_visible = false;
	var showmap =  $("#showmap");
	if (showmap) {
		showmap.html(txtShowMap);
	}
	return false;
}

function createMarker(point, titulo, desc, image, link) {
  var marker = new GMarker(point);
  GEvent.addListener(marker, "click", function() {
    marker.openInfoWindowHtml("<div class=\"infow\"><h4>"+titulo+"</h4><a href=\""+link+"\"><img src=\""+image+"\" title=\"Ver imagen\" /></a><div class=\"desc\">"+desc+"<a href=\""+link+"\" class=\"more\">"+txtMoreInfo+"</a></div></div>");
  });
  return marker;
}

var Map={
	mgr:null,
	dragmarker:null,
	defaultzoom:1,
	defaultType:'G_PHYSICAL_MAP',
	clean:function() {
		map.clearOverlays();
	},
	init:function(lat, lng, zoom, type, mbr) {
		if (GBrowserIsCompatible()) {
			// crea un  mapa
			var map = new GMap2(document.getElementById("map"));
			map.addControl(new GSmallMapControl());
			map.addControl(new GMapTypeControl());
			map.addMapType(G_PHYSICAL_MAP);
			map.enableScrollWheelZoom();
			
			var center = new GLatLng(lat, lng);
			
			if (type == null) {
				type = Map.defaultType;
			}
			type = eval(type);
			map.setMapType(type);
			if (mbr != null) {
				zoom = parseInt(map.getBoundsZoomLevel(mbr)-1);
				map.setCenter(mbr.getCenter(), zoom);
			} else {
				map.setCenter(center, zoom);
			}
			return map;
		}
	},
	getMBR:function () {
		// coordenadas extremas
		var swlat = document.getElementById("swlat").value;
		var swlng = document.getElementById("swlng").value;
		var nelat = document.getElementById("nelat").value;
		var nelng = document.getElementById("nelng").value;
		
		var sw = new GLatLng(swlat, swlng);
		var ne = new GLatLng(nelat, nelng);
		
		var mbr = new GLatLngBounds(sw,  ne)
		return mbr;
	},
	makeDynamic:function() {
		var img = document.getElementById("staticMap");
		if (img != null) {
			var _parent = img.parentNode;
			_parent.removeChild(img);
		}
		var default_type = document.getElementById("default_map_type");
		if (default_type != null) {
			var type = default_type.value;
		}
		if (type == null) {
			type = Map.defaultType;
		}
		type = eval(type);
		
		
		// coords
		var lat = document.getElementById("lat").value;		
		var lng = document.getElementById("lng").value;
		var zoom = document.getElementById("zoomlevel").value;
		var drag = false;

		if (GBrowserIsCompatible()) {
			// crea un  mapa
			map = new GMap2(document.getElementById("map"));
			map.addControl(new GSmallMapControl());
			map.addControl(new GMapTypeControl());
			map.addMapType(G_PHYSICAL_MAP);
			map.enableScrollWheelZoom();
			map.setMapType(type);
			/*
			var type_field = document.getElementById("default_map_type");
			if (type_field != null) {
				var type = type_field.value;
				if (type == '') {
					type = Map.defaultType;
				}
			}
			type = eval(type);
			map.setMapType(type);
			*/
			GEvent.addListener(map, "zoomend", function () {
				var zoom = document.getElementById("zoomlevel");
				if (zoom != null) {
					zoom.value = this.getZoom();
				}
			});
		
			if (lat != null && lng != null) {
				var center = new GLatLng(lat, lng);
				
				if (zoom == null) {
					var zoom = Map.defaultzoom;
				}
				map.setCenter(center, parseInt(zoom));
				
				var marker = new GMarker(center, {draggable: drag});

				map.addOverlay(marker);
				
				var msg = document.getElementById("staticImgMsg");
				if (msg != null) {
					var _parent = msg.parentNode;
					_parent.removeChild(msg);
				}
			}
		} else {
			alert(msgBrowserNotMapCompatible);
		}
		return false;
	}
}
