/** funcionalidad del buscador de destinos, ojo con cambiar nombres de clases o Id's **/

/** START SEARCHER **/
document.observe('dom:loaded',function () {
	$$('div.buscador-destinos select').each(function (element) {
		element.observe("change", function (event) {
			runSearch(element);
		})
	});
	
	if ($('buscador-avanzado')) {
		$('buscador-avanzado').hide();
		$('advan-search').observe("click", function (event) {
			event.stop();
			$('buscador-avanzado').toggle();
		})
	}
	
	if ($('buscador-destinos')) {
		$$('div#buscador-destinos form').each(function (element) {
			element.observe("submit", function (event) {
				updateMarkers(false);
				event.stop();
			})
		});
	}
});
	
wp_geo_wpgep_url = wp_geo_wpgep_url_get();

function runSearch(element){
	var value = element.getValue();
	
	if (value > 0){
		if(element.id == 'porpais'){
		
			url = wp_geo_wpgep_url + '/wp-geo-ajax.php?action=getProvincias&pais=' + parseInt(value);
			
			$('porprovincia').options.length = 0;
			$('porlocalidad').options.length = 0;
			
			var targetSelect = 'porprovincia';
		}else if(element.id == 'porprovincia'){
			url = wp_geo_wpgep_url + '/wp-geo-ajax.php?action=getLocalidades&prov=' + parseInt(value);
			
			$('porlocalidad').options.length = 0;
			var targetSelect = 'porlocalidad';
		}else{
			return false;
		}
		
		new Ajax.Request(url, {
			method: 'get',
			
			onCreate: function(){
				if ($('loadBkg')) $('loadBkg').addClassName('loading');
			},
			onComplete: function(){
				if ($('loadBkg').hasClassName('loading')) $('loadBkg').removeClassName('loading');
			},
			onSuccess: function(transport){
				value = '';
				var json = transport.responseText.evalJSON();
				var tS = $(targetSelect);
				for (var i = 0; i < json.length; i++) {
					tS.options[i] = new Option(json[i].text,json[i].id);
				}
				
				if(json[1].text == '--' && json.length == 2 && element.id == 'porpais'){
					$('porprovincia').selectedIndex = 1;
					runSearch($('porprovincia'));
				}
				
				return true;
			}
		});
	}
}
/** END  SEARCHER**/


/** START MAPS**/
var map = null;
var geocoder = null;
var marker = null;

var request_tag = 0;    // Track the most recent tag sent to the server
var pendingRequest;     // Formulated request
var checkDelay = 1000;  // Experiment with this value

function createMarker(latlng, icon, info, post_id) {
	var marker = new GMarker(latlng, icon);
	
	marker.post_id = post_id;
	
	GEvent.addListener(marker, "click", function() {
		marker.openInfoWindowHtml(info)
		iw = map.getInfoWindow();
		iw.post_id = post_id;
	});
	
	return marker;
}

function addMarkers(map, markers) {
	if (markers == undefined) {
		markers = [];
		
		/*
		//GLog.write("MARKERS UNDEFINED");
		
		map.clearOverlays();
		map.overlays = [];
		return;
		*/
	}
	
	var icon = new GIcon();
	icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
	icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
	icon.iconSize = new GSize(12, 20);
	icon.shadowSize = new GSize(22, 20);
	icon.iconAnchor = new GPoint(6, 20);
	icon.infoWindowAnchor = new GPoint(6,20);
	
	//GLog.write("MARKERS: "+markers.length);
	
	// en map.overlays están los markers anteriores
	// y en markers está el nuevo conjunto de markers
	
	overlays2 = [];
	
	current = "";
	for (i = 0; i < markers.length; i++) {
		o = markers[i]; current = current + "," + o.post_id;
	}
	
	//console.log("Antes: "+map.overlays.length+", Ahora: "+markers.length);
	
	lng = 0;
	lat = 0;
	removed = 0;
	added = 0;
	maintain = 0;
	pos = 0;
	prev = "";
	
	for (i = 0; i < map.overlays.length; i++) {
		o = map.overlays[i];
		if (current.indexOf(','+o.post_id) < 0) {
			map.removeOverlay(o);
			removed++;
		} else {
			prev = prev + ',' + o.post_id;
			overlays2.push(o);
			lng = lng + parseInt(o.lng);
			lat = lat + parseInt(o.lat);
			pos++;
			maintain++;
		}
	}
	
	/*
	map.clearOverlays();
	
	iwe = false;
	iw_post = null;
	
	if (map.infoWindowEnabled()) {
		iw = map.getInfoWindow();
		iwe = true;
		iw_post = iw.post_id;
	}
	*/
	
	//alert('p '+prev+' c '+current);
	
	/*
	if (markers.length != 1)
		write('Posts en el mapa: '+markers.length);
	else if (markers.length == 1)
		GLog.write('Post en el mapa en '+markers[0].lat+', '+markers[0].lng);
	*/
	
	for (i = 0; i < markers.length; i++) {
		m = markers[i];
		
		if (prev.indexOf(','+m.post_id) < 0) {
			html = "<div style='width: 315px; '><strong>"+m.title+"</strong><br />Autor: "+m.author+"<br />Publicado: "+m.date+"<br /><br />"+m.post_content+ "<br /><a href='"+m.url+"'>Leer más...</a></div>";
			
			var point = new GLatLng(m.lat, m.lng);
			
			marker = createMarker(point, icon, html, m.post_id);
			map.addOverlay(marker);
			overlays2.push(marker);
			
			lng = lng + parseInt(m.lng);
			lat = lat + parseInt(m.lat);
			
			pos++;
			added++;
		}
	}
	
	lng = lng/pos;
	lat = lat/pos;
	
	/*
	var center = new GLatLng(lat, lng);
	map.setCenter(center, 2);
	*/
	
	map.overlays = overlays2;
	
	//GLog.write('Removed: '+removed+', Maintained: '+maintain+', Added: '+added);
}


function mapmoved(p1) {
	//GLog.write('moved');
	updateMarkers(p1);
}


function mapzoomed(p1) {
	//GLog.write('zoomed');
	updateMarkers(p1);
}


function updateMarkers(do_now) {
	if (typeof(do_now) == "undefined")  do_now = false;
	
	var currRequestTag = (new Date()).valueOf();
	
	// this saves the current state of the google map if we want to go
	// with it later
	//pendingRequest = {tag: currRequestTag, bounds: map.getBounds()};
	
	$('map_working').show();
	
	if (do_now) {
		finishUpdatingMarkers(currRequestTag);
	} else {
		setTimeout(finishUpdatingMarkers, checkDelay, currRequestTag);
	}
}


function finishUpdatingMarkers(expectedTag) {
	/*
	if (pendingRequest.tag != expectedTag) {
		//GLog.write("tossing tag " + expectedTag);
		return;
	}
	*/
	
	var bounds = map.getBounds();
	var north = bounds.getNorthEast().lat();
	var east = bounds.getNorthEast().lng();
	var south = bounds.getSouthWest().lat();
	var west = bounds.getSouthWest().lng();
	
	form_data = $("search_form").serialize();
	
	request_tag = expectedTag;  //update the global to check ajax results
	
	var url = ( wp_geo_wpgep_url + "/wp-geo-ajax.php?action=queryLocations&minlat="+south+"&maxlat="+north+"&maxlon="+east+"&minlon="+west+"&"+form_data);
	
	//retrieve the points using Ajax
	var request = GXmlHttp.create();
	// ... rest is the same as above
	request.open("GET", url, true);
	request.onreadystatechange = function() {
		newPostList = '';
		if (request.readyState == 4 && request.status == 200) {
			var edata = eval("(" + request.responseText + ")");
			addMarkers(map, edata);
			for (postC=0; postC < edata.length; postC++) {
				newPostList += '<li><a href="' + edata[postC]['url'] + '">' + edata[postC]['title'] + '</a></li>';
			}
			$('map_working').hide();
		}
		
		if ( newPostList != '' && $("wp_geo_map_listresults") ) {
			$('wp_geo_map_listresults').update('<h4 class="wp-geo-map-listresults-title">Resultados</h4><ul>' + newPostList + '</ul>');
			$('wp_geo_map_listresults').innerHTML;
			
		}else{
			$('wp_geo_map_listresults').update();
			$('wp_geo_map_listresults').innerHTML;
		}
			
	}
	request.send(null);
}
/** END MAPS**/