/**
 * @author Rober
 */

var map_api_key = "ABQIAAAACXbUqpqI2ajf_2IJAaBKexQrc1cwbRLNL-LIejJogPQizTL-YhQc9ube84FvsNQw6Q9YgtZnwKFqkQ";
var map = null;
var marker_upload = null;

JMWmap = {
	INIT_MAP_POINT : [40.416741,-3.70325],
	INIT_ZOOM : 13,
	MAP_ELEMENT_NAME : 'map_visor',
	IMAGE_LOCATE_ELEMENT_NAME : 'image_locate',
	IMAGE_LOCATE_SELECTED_ELEMENT_NAME : 'image_locate_selected',
	LOCATION_LIST_ELEMENT_NAME : 'location_list',
	IMAGE_COORDX_ELEMENT_NAME : 'image_coord_x',
	IMAGE_COORDY_ELEMENT_NAME : 'image_coord_y',
	MAP_DRAGGABLE : true,
	
	loadMap : function (coord) {
		if (GBrowserIsCompatible()) {
			var point = null;
			if (coord) {
				if (coord.constructor.toString().indexOf('Array') != -1) {
					point = new GLatLng(coord[0],coord[1]);
				} else {
					point = coord;
				}
			}
			if (point == null){
				point = new GLatLng(JMWmap.INIT_MAP_POINT[0],JMWmap.INIT_MAP_POINT[1]);
			}
			
			map = new GMap2(document.getElementById(JMWmap.MAP_ELEMENT_NAME));
			map.setCenter(point, JMWmap.INIT_ZOOM);
			map.setMapType(G_HYBRID_MAP);
			map.disableInfoWindow();
			map.disableGoogleBar();
			
			if (this.MAP_DRAGGABLE) {
				map.enableScrollWheelZoom();
				map.addControl(new GSmallMapControl());
				map.addControl(new GScaleControl());
				map.addControl(new GMapTypeControl());
			}
		}
	},
	
	searchPlace: function (nombreSitio){
		var geocoder = new GClientGeocoder();
		geocoder.getLocations(nombreSitio, JMWmap.actionSearchResponse);
	},
	
	actionSearchResponse : function (response) {
	
		if (!response || response.Status.code != 200) {
			JMWmap.cleanLocationList();
			JMWmap.showLocationList(false);
		} else {
			if (document.getElementById(JMWmap.IMAGE_LOCATE_ELEMENT_NAME).value == response.name) {
				JMWmap.cleanLocationList();
				for (var i = 0; i < response.Placemark.length; i++) {
					var place = response.Placemark[i];
					JMWmap.appendElementToLocationList(place);
				}
				JMWmap.showLocationList(true);
			}
		}
	},
	
	goToPlace : function (point, text) {
		if (JMWmap.__loadMap && !map) {
			JMWmap.loadMap(point);
		}
		if (JMWmap.__loadMarkerUpload && !marker_upload) {
			JMWmap.loadMarkerUpload()
		}
		if (map) {
			map.setCenter(point, JMWmap.INIT_ZOOM);
			if (marker_upload) {
				marker_upload.setLatLng(point);
			}
		}
		document.getElementById(JMWmap.IMAGE_LOCATE_ELEMENT_NAME).value = text;
		document.getElementById(JMWmap.IMAGE_LOCATE_SELECTED_ELEMENT_NAME).value = text;
		JMWmap.showLocationList(false);
		JMWmap.showMarkerUploadInfo(point);
	},
	
	onlySearchPlace : function (point, text) {
		document.getElementById(JMWmap.IMAGE_LOCATE_ELEMENT_NAME).value = text;
		document.getElementById(JMWmap.IMAGE_LOCATE_SELECTED_ELEMENT_NAME).value = text;
		JMWmap.showLocationList(false);
		JMWmap.showMarkerUploadInfo(point);
	},
	
	showLocationList : function (bool) {
		document.getElementById(JMWmap.LOCATION_LIST_ELEMENT_NAME).style.display = bool ? '' : 'none';
	},
	
	cleanLocationList : function () {
		var cl = document.getElementById(JMWmap.LOCATION_LIST_ELEMENT_NAME);
		var ul = cl.getElementsByTagName('ul')[0];
		ul.innerHTML = '';
	},
	
	appendElementToLocationList : function (place) {
		var address = place.address;
		var coord = place.Point.coordinates;
		var point = new GLatLng(coord[1],coord[0]);
	
		var elem = document.createElement('li');
		var a_elem = document.createElement('a');
		elem.appendChild(a_elem);
		a_elem.innerHTML = address;
		a_elem.onclick = function() {JMWmap.goToPlace(point,this.innerHTML)}
		document.getElementById(JMWmap.LOCATION_LIST_ELEMENT_NAME).getElementsByTagName('ul')[0].appendChild(elem);
		document.getElementById(JMWmap.IMAGE_LOCATE_SELECTED_ELEMENT_NAME).value = '';
	},
	
	showMarkerUploadInfo : function (point) {
		try{
			try {
				var coord = marker_upload.getLatLng().toUrlValue().split(',');
			} catch(e) {
				var coord = point.toUrlValue().split(',');
			}
			document.getElementById(JMWmap.IMAGE_COORDX_ELEMENT_NAME).value = coord[0];
			document.getElementById(JMWmap.IMAGE_COORDY_ELEMENT_NAME).value = coord[1];
		}catch(e) {}
	},
	
	loadMarkerUpload : function () {
		if (marker_upload) {
			return;
		}
		if (map) {
			var point = map.getCenter();
		} else {
			var point = new GLatLng(JMWmap.INIT_MAP_POINT[0],JMWmap.INIT_MAP_POINT[1]);
		}
		marker_upload = new GMarker(point, {icon:G_DEFAULT_ICON, draggable: true});
		marker_upload.enableDragging();
		map.addOverlay(marker_upload);
		
		// eventos
		GEvent.addListener(map,"click",function(m,point){
			marker_upload.setLatLng(point);
			JMWmap.showMarkerUploadInfo();
		});
		GEvent.addListener(marker_upload, "dragend",function(m,point){
			JMWmap.showMarkerUploadInfo();
		});
	},
	
	loadAjaxEvents : function () {
		GEvent.addListener(map, "moveend", JMWmap.getImagesFromCoord);
		window.onresize = function () {
			JMWmap.getImagesFromCoord();
		}
	},
	
	getImagesFromCoord : function (pag) {
		var b = map.getBounds();
		var sw = b.getSouthWest().toUrlValue().split(',');
		var ne = b.getNorthEast().toUrlValue().split(',');
		
		var x = '[' + String(sw[0]) + ',' + String(ne[0]) + ']';
		var y = '[' + String(sw[1]) + ',' + String(ne[1]) + ']';
		
		var cad = "from_coord=1&amp;coord_x=" + x + "&amp;coord_y=" + y;
		if (document.getElementById('image_tags_selected')) {
			cad += "&amp;image_tags=" + document.getElementById('image_tags_selected').value;
		}
		if (pag) {
			cad += '&amp;pag='+pag
		}
		if (JMWphotos.imgSelectedId) {
			cad += '&amp;img_id='+JMWphotos.imgSelectedId;
		}
		
		new Ajax('/search',cad, JMWmap.actionGetImagesResponse);
	},
	
	getImagesFromCuadrantes : function () {
		var b = map.getBounds();
		var sw = b.getSouthWest().toUrlValue().split(',');
		var ne = b.getNorthEast().toUrlValue().split(',');
		
		var n_filas = 5;
		var n_columnas = 5;
		
		// coordenadas a sumar segun el numero de cuadrantes
		var l1 = (new Number(ne[0]) - new Number(sw[0])) / n_columnas;
		var l2 = (new Number(ne[1]) - new Number(sw[1])) / n_filas;
		
		var x = 0;
		var y = 0;
		var c1 = [0,0];
		var c2 = [0,0];
		
		c1[1] = new Number(sw[1]);
		for (var i=0; i<n_columnas; i++) {
			
			c2[1] = c1[1] + l2;
			c1[0] = new Number(sw[0]);
			for (var j=0; j<n_filas; j++) {
				
				c2[0] = c1[0] + l1;
				
				//c1 = [x1,y1];
				//c2 = [x2,y2];
				
				var x = '[' + String(c1[0]) + ',' + String(c2[0]) + ']';
				var y = '[' + String(c1[1]) + ',' + String(c2[1]) + ']';
				
				var cad = "from_coord=1&amp;coord_x=" + x + "&amp;coord_y=" + y + "&amp;pocas=1";
				if (document.getElementById('image_tags_selected')) {
					cad += "&amp;image_tags=" + document.getElementById('image_tags_selected').value;
				}
				if (JMWphotos.imgSelectedId) {
					cad += '&amp;img_id='+JMWphotos.imgSelectedId;
				}
				
				new Ajax('/search',cad, JMWmap.actionGetImagesResponse);
				
				
				c1[0] = c2[0];
			}
			
			c1[1] = c2[1];
		}
		
		
	},
	
	actionGetImagesResponse : function (req) {
		JMWphotos.init(req);
	}
	
}
