
var map = null;
var mStore = null;

function in_array( what, where ){
	var a=false;
	for(var i=0;i<where.length;i++){
	  if(what == where[i]){
	    a=true;
        break;
	  }
	}
	return a;
}

function initGMap()
{
	if (GBrowserIsCompatible()) {
		map = new GMap2(document.getElementById("map"));
		mStore = new MarkerStore(map);
		
		map.setCenter(new GLatLng(49.8153,15.45), 7);
		map.addControl(new GLargeMapControl());	
		map.addControl(new GMapTypeControl());
		map.enableScrollWheelZoom();
		
		GRefresh();
		GEvent.addListener(map, "dragend", function() {
			GRefresh();
		});
		GEvent.addListener(map, "zoomend", function() {
			GRefresh();
		});		
		return map;
	}
	return false;
}

function MarkerStore(map)
{
	this.map = map;
	this.length = 0;
	this.items = new Array();
	this.queue = new Array();

	this.add = function(data)
	{
		var mId = data.getAttribute('id');
		this.queue.push(mId);
		if(this.items[mId]!==undefined) {
			//(this.map).addOverlay(this.items[mId]);
			return;
		}
		
		var point = new GLatLng(parseFloat(data.getAttribute("lat")),parseFloat(data.getAttribute("lng"))); 
		var	style = data.getAttribute('style');
		var marker = new GMarker(point, { icon: getGIcon(style) });
		
		GEvent.addListener(marker, 'click', function(){
			//content = data.getElementsByTagName('content')[0].firstChild.nodeValue;
			ajaxUrl = base_web_dir+sectionUrl+"navigator/?ajx=1&point="+mId;
			//marker.openInfoWindowHtml('<span style="color:black;">'+content+'</span>');
	        marker.openExtInfoWindow(
	          map,
	          "gmaps-point-window",
			  "<p>Loading...</p>",
	          {beakOffset: 10, paddingX: 40, paddingY: 20, ajaxUrl: ajaxUrl }
	        ); 
			
		}); 
		
		(this.map).addOverlay(marker);
		this.items[mId] = marker;
		this.length = this.length + 1;
	}
	
	this.removeAll = function() 
	{
		this.length = 0;
		(this.map).clearOverlays();
	}
	
	this.clean = function()
	{
/*		var qt = this.queue;	
		test = qt.length; // == 0
		alert(qt.length); // == 0		
		alert(in_array('fsfd',qt));
		return;*/
		
		var newItems = new Array();
		for (var i in this.items) {
			if(in_array(i,this.queue)==true) {
				newItems[i] = this.items[i];
			} else {
				this.map.removeOverlay(this.items[i]);
			}
		}
		this.items = newItems;
		this.queue = new Array();
	}
}

function GRefresh() {
		
		$('div.map-loader').show();		

		var bounds = map.getBounds();
		var request = GXmlHttp.create();
		
		var selected = new Array();
		$('form.mapsearch input[type="checkbox"]:checked').not('*[name="sports"]').each( function() {
			selected.push($(this).attr('name'));
		});
		var selectedSports = new Array();
		$('form.mapsearch input[name="sports"]:checked').each( function() {
			selectedSports.push($(this).val());
		});
				
		url = base_web_dir+sectionUrl+"navigator/xml/?s="+selected.join(',')+"&sports="+selectedSports.join(',')+"&bounds="+bounds.getSouthWest().lat()+","+bounds.getSouthWest().lng()+","+bounds.getNorthEast().lat()+","+bounds.getNorthEast().lng();

		GDownloadUrl(url, function(data) {
			var xml = GXml.parse(data);
			var markers = xml.getElementsByTagName("point");
			for (var i = 0; i < markers.length; i++) {
				mStore.add( markers[i] );
			};
			$('div.map-loader').hide();
			mStore.clean();
		});
}	

$(document).ready( function() {
	$('form.mapsearch input[type="checkbox"]').change( function() {
		GRefresh();
	});
	$('form.mapsearch').submit( function() {
		var input = $('input[name=mapsearch_input]',this);
		var text = input.val();
		
		var geocoder = new GClientGeocoder();
		geocoder.getLatLng( text, function(point) {
			if (!point) {
	        	alert( "'" + text + "' nenalezen");
			} else {
				map.setCenter(point, 10);
				input.val('');
				GRefresh();
			}
		});
		return false;
	});
});

$('div#map').ready( function() {
	initGMap();
});
$('div#map').unload( GUnload() );

