var map = null;
var processingAjax = false;

// FILTER TABS
function setActiveTab(tab)
{
	$('type').value = tab;

	$$('li:[rel=tab]').each(function(tab)
	{
		tab.removeClassName('active');
		$(tab.readAttribute('id') + '_content').hide();
	});

	$(tab).addClassName('active');
	$(tab + '_content').show();
}

function toggleFilters(id)
{
	$$('input[type="checkbox"]' + (Object.isUndefined(id)?'[parent!=""]':'[parent="'+id+'"]')).each(function(child)
	{
		var parent = child.readAttribute('parent');

		if (($(parent).checked) || ($(parent).disabled))
		{
			$(child).disable();
		}
		else
		{
			$(child).enable();
		}

		if ((!Object.isUndefined(id)) || ($(parent).checked && Object.isUndefined(id)))
		{
			$(child).checked = $(parent).checked;
		}
	});
}

function initialize()
{
	if (GBrowserIsCompatible())
	{
		map = new GMap2(document.getElementById("map"));
		map.setCenter(new GLatLng(38.919353, 1.591644), 11);

		// Zoom progresivo
		map.enableContinuousZoom();
		map.enableScrollWheelZoom();
		// Controles
		map.addControl(new GLargeMapControl3D());
		map.addControl(new GOverviewMapControl());

		return true;
	}

	return false;
}

// Download the data in data.xml and load it on the map.
function getElements()
{
	if(processingAjax) return;

	// Limpiamos mapa y procesamos
	map.clearOverlays();
	$('filter').update(str_loading);

	processingAjax = true;

	new Ajax.Request
	(
		'/elements',
		{
			parameters : $('searchForm').serialize(),
			onSuccess : function(transport)
			{
				updateMap(transport.responseJSON);
			}
		}
	);
}

function updateMap(elements)
{
	if (!elements) return;

	var baseIcon = new GIcon();
    baseIcon.iconSize = new GSize(36, 40);
    baseIcon.iconAnchor = new GPoint(10, 20);
    baseIcon.infoWindowAnchor = new GPoint(18, 42);

	elements.each(function(element)
	{
		var point = new GLatLng(element.lat, element.lng);
		baseIcon.image = "/static/img/icons/"+element.icon;
		var marker = new GMarker(point, {icon:baseIcon});

		GEvent.addListener(marker, "click", function()
		{
			var imgstr = "";
			var divstr = "<div>";

			if(!element.thumb.blank())
			{
				imgstr = "<img src='" + www_domain + element.thumb + "' />";
				divstr = "<div style='height:100px'>";
			}

			var myHtml = divstr + "<b><a href='" + www_domain + "/" + element.url + "' target='_blank'>" + element.name + "</a></b>" + imgstr + "</div>";

			map.openInfoWindowHtml(marker.getPoint(), myHtml);
		});

	    map.addOverlay(marker);

	});

	processingAjax = false;
	$('filter').update(str_filter);
}

// INIT
document.observe('dom:loaded', function()
{
	if(initialize())
	{
		$('type').value = $$('div.search li[class="active"]').first().id;

		setActiveTab($('type').value);

		toggleFilters(this.id);

		$$('input[type="checkbox"]').each(function(box)
		{
			if ((box.readAttribute('parent') != null) && box.readAttribute('parent').empty())
			{
				box.observe('click', function(e)
				{
					toggleFilters(this.id);
				});
			}
		});

		$('filter').observe('click', function(e)
		{
			getElements();
		});

		$('gnormal', 'ghybrid', 'gsatellite', 'gterrain').invoke('observe', 'click', function()
		{
			map.setMapType(eval(this.rel));
			$$('div.ver-mapa a[class="active"]')[0].removeClassName('active');
			$(this).addClassName('active');

		});

		// Llamada inicial
		getElements();
	}
});