$(document).ready(function(){
	//vars
	var map;
	var panel=$("#panel");
	var allMarkers=new Array();
	
	//var baseAddrForMarkers="http://localhost/googlemap_hotels/markers.php";
	var baseAddrForMarkers="http://www.termini.it/markers.php";
	
	GMarker.prototype.id=0;
	GMarker.prototype.nome='';
	GMarker.prototype.indirizzo='';
	GMarker.prototype.numero='';
	GMarker.prototype.cap='';
	GMarker.prototype.citta='';
	GMarker.prototype.municipio='';
	GMarker.prototype.zona='';
	GMarker.prototype.telefono='';
	GMarker.prototype.fax='';
	GMarker.prototype.cellulare='';
	GMarker.prototype.email='';
	
	//load map
	if(GBrowserIsCompatible()){
		//load map
		map = new GMap2(document.getElementById("map"));
		map.setCenter(new GLatLng(41.89537735883387, 12.500381469726562), 15);
		//add controls
		map.addControl(new GSmallMapControl());
		map.addControl(new GMapTypeControl());
		//send request
		$.post(baseAddrForMarkers,{},showMarkers);
	}
	
	//focus search filed
	$("input#search").focus(function(){
		if(this.value=="cerchi b&b in via...")
			this.value="";
	});
	
	//enter search field
	$("input#search").keypress(function(e){
		if(e.which==13)
		{
			var geocoder=new GClientGeocoder();
			geocoder.getLatLng("Roma, " + $("input#search").val(),function(data){
				if(data)
					map.panTo(data);
			});
		}
	});
	
	//go button click
	$("#go").click(function(){		
		var geocoder=new GClientGeocoder();
		geocoder.getLatLng("Roma, " + $("input#search").val(),function(data){
			if(data)
				map.panTo(data);
		});
	});
	
	//response handler
	function showMarkers(data)
	{
		var markers = JSON.parse(data);
		map.clearOverlays();
		for(i=0,size=markers.length;i<size;i++)
		{
			//marker
			marker = markerToGmarker(markers[i]);
			//add marker to array
			allMarkers[marker.id] = marker;
			//add marker to overlay
			map.addOverlay(createMarker(marker));
			//add item to panel
			var item = $("<div class='item' marker_id='"+ marker.id + "'>" + marker.nome + "</div>");
			panel.append(item);
		}
		$('.item').click(function(obj){
			var marker = allMarkers[$(this).attr('marker_id')];
			map.panTo(marker.getLatLng());
			showMarkerInfo(marker);
		});
	}
	
	//marker to gmarker
	function markerToGmarker(marker)
	{
		//create marker obj
		var gmarker=new GMarker(new GLatLng(marker.lat, marker.lng));
		gmarker.id=marker.id;
		gmarker.nome=marker.nome;
		gmarker.indirizzo=marker.indirizzo;
		gmarker.numero=marker.numero;
		gmarker.cap=marker.cap;
		gmarker.citta=marker.citta;
		gmarker.municipio=marker.municipio;
		gmarker.zona=marker.zona;
		gmarker.telefono=marker.telefono;
		gmarker.fax=marker.fax;
		gmarker.cellulare=marker.cellulare;
		gmarker.email=marker.email;
		return gmarker;
	}
	
	//add custom marker on map
	function createMarker(gmarker)
	{
		//get marker info
		GEvent.addListener(gmarker, "click", function(){
			showMarkerInfo(gmarker);
		});
		return gmarker;
	}
	
	//show marker info
	function showMarkerInfo(marker)
	{
		//build marker info
		var info = "<div>";
		info += "<h2>" + marker.nome + "</h2>";
		if(marker.indirizzo.length > 0 && marker.numero.length > 0)
			info += "<b>Indirizzo: </b>" + marker.indirizzo + ", " + marker.numero + "<br/>";
		if(marker.zona.length > 0)
			info += "<b>Zona: </b>" + marker.zona + "<br/>";
		if(marker.telefono.length > 0)
			info += "<b>Telefono: </b>+390" + marker.telefono + "<br/>";
		if(marker.fax.length > 0)
			info += "<b>Fax: </b>+390" + marker.fax + "<br/>";
		if(marker.cellulare.length > 0)
			info += "<b>Cellulare: </b>" + marker.cellulare + "<br/>";
		if(marker.email.length > 0)
			info += "<b>Email: </b><a href='mailto:" + marker.email + "'>" + marker.email + "<br/>";
		info += "<br/>";
		info += "<div id='streetview'><div id='ajax-loader'></div></div>";
		info += "</div>";
		//handle panorama
		GEvent.addListener(marker,"infowindowopen",function(marker){
			//get panorama
			var svClient = new GStreetviewClient();
			svClient.getNearestPanorama(marker.getPoint(), function(pano_info){
				//if panorama found
				if(pano_info.code == 200){
					//pano container
					var container = document.getElementById('streetview');
					//add pano
					var pano = new GStreetviewPanorama(container);
					GEvent.addListener(pano, "error", function(errorCode){
						if (errorCode == FLASH_UNAVAILABLE) {
							container.innerHTML = 'StreetView requires flash plugin. Click <a href="http://get.adobe.com/flashplayer/" target="_blank"> here</a> to download';
							return;
						}
					});
					pano.setLocationAndPOV(pano_info.location.latlng, pano_info.location.pov);
				}else{
					//inform no panorama
					$('#streetview').html('No panorama found.');
				}
			});
		});
		//show info window
		marker.openInfoWindowHtml(info);
	}
	
	//debug
	function debug(obj)
	{
		var text="";
		for(att in obj){text+=att+' = '+obj[att]+'<br>';}
		var win=window.open('','_blank');
		win.document.write(text);
	}
});
