var map;
var polyLineArray = [];
var photosId = [];

function swfPlayer(swf,w,h)
{
		/* SOLO PER LATLNGGRAPH */
		document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+w+'" height="'+h+'" id="LatLonDistGraph" align="middle">');
		document.write('<param name="movie" value="'+swf+'" />');
		document.write('<param name="allowScriptAccess" value="sameDomain" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />');
		document.write('<embed src="'+swf+'" quality="high" bgcolor="#ffffff" width="'+w+'" height="'+h+'" name="LatLonDistGraph" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
		document.write('</object>');		
}

function swfPlayer2(swf,w,h)
{
		document.write('<object align="left" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="'+w+'" height="'+h+'" align="middle">');
		document.write('<param name="movie" value="'+swf+'" />');
		document.write('<param name="allowScriptAccess" value="sameDomain" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />');
		document.write('<embed align="left" style="padding-right:5px;" src="'+swf+'" quality="high" bgcolor="#ffffff" width="'+w+'" height="'+h+'" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
		document.write('</object>');
}


function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,  NS6 and Mozilla
// By Scott Andrew
{
  if (elm.addEventListener){
    elm.addEventListener(evType, fn, useCapture);
    return true;
  } else if (elm.attachEvent){
    var r = elm.attachEvent("on"+evType, fn);
    return r;
  } else {
    alert("Handler could not be removed");
  }
} 


function showPhotoOnMap(){
	
	var stop = 40;
	var bounds = map.getBounds();
	var southWest = bounds.getSouthWest();
	var northEast = bounds.getNorthEast();
	var maxX = northEast.lng();
	var minX = southWest.lng();
	var maxY = northEast.lat();
	var minY = southWest.lat();
	//var url = "http://www.flickr.com/services/rest/?method=flickr.photos.search&format=json&api_key=2345db5f2a06080207e0a016deb5c71d&per_page="+stop+"&bbox="+minX+","+minY+","+maxX+","+maxY+"&jsoncallback=getPhotosLocationsFlickr";
	//dhtmlLoadScript(url);
	var url = "http://www.panoramio.com/map/get_panoramas.php?order=popularity&set=public&from=0&to="+stop+"&minx="+minX+"&miny="+minY+"&maxx="+maxX+"&maxy="+maxY+"&size=small&callback=showPhotosMaporamio";  
	dhtmlLoadScript(url);
	
}

function showPhotosMaporamio(data){
	var n = data["photos"].length;
	
	// alert(data["photos"].length);
	for(i=0; i<n; i++){
		var id = data["photos"][i]["photo_id"];
		if(!photoAlreadyOnMap(id)){
			addPhotoToMapPanoramio(data["photos"][i]);
		}
	}
}

function photoAlreadyOnMap(id){
	for(j=0; j < photosId.length ; j++){
		if(photosId[j][0]==id){
			return true;
		}
	}
	return false;
}


function getPhotosLocationsFlickr(data){
	var n = data["photos"]["total"];
	var id;
	for(i=0; i<n; i++){
		id = data["photos"]["photo"][i]["id"];
		dhtmlLoadScript("http://www.flickr.com/services/rest/?method=flickr.photos.geo.getLocation&format=json&api_key=2345db5f2a06080207e0a016deb5c71d&id_photo="+id+"&jsoncallback=addPhotoToMapFlickr");
	}
}

function addPhotoToMapPanoramio(pData){
	var point = new GLatLng(pData["latitude"],pData["longitude"]);
	var bIcon = getPhotoIcon();
	var id = pData["photo_id"];
	var titleStr = pData["photo_title"];
	var tempMarker = new GMarker(point,{'icon':bIcon,'title':titleStr});
	
	GEvent.addListener(tempMarker, "click", function() {
		htmlCode = "<div class='infoWindow'><img src='/img/panoramio-logo.png' title='Panoramio.com'/> "+titleStr+"<br/>";
		htmlCode += "<a target='_blank' href='"+pData["photo_url"]+"'><img src='"+pData["photo_file_url"]+"' style='border:none;width:"+pData["width"]+"px;height:"+pData["height"]+"px'/></a><br/>";
		htmlCode += "Photo by <a target='_blank' href='"+pData["owner_url"]+"'>"+pData["owner_name"]+"</a>";
		htmlCode += "</div>";
		tempMarker.openInfoWindowHtml(htmlCode);	
		
	});
	
	map.addOverlay(tempMarker);
	var temp = []
		temp[0] = id;
		temp[1] = tempMarker;
	photosId.push(temp);	
}

function updatePhoto(show){
	if(!show){
		for(j=0; j < photosId.length ; j++){	
			map.removeOverlay(photosId[j][1]);
		}
		photosId = [];
	}
	if(show && !photoOnMap){
		showPhotoOnMap();	
	}
	photoOnMap = show;
}

function addPhotoToMapFlickr(pData){
	var id = pData["id"];
	var point = new GLatLng(pData["latitude"],pData["longitude"]);
	 
  	bIcon = getPhotoIcon();

		titleStr = "Photo by Flickr";
		tempMarker = new GMarker(point,{'icon':bIcon,'title':titleStr});
	map.addOverlay(tempMarker);			
		
}

function getPhotoIcon(){
	var bIcon = new GIcon(); 
		bIcon.image = "/img/polaroid-icon.png";
		bIcon.shadow = "/img/polaroid-icon-shadow.png";
		bIcon.iconSize = new GSize(28, 18);
		bIcon.shadowSize = new GSize(36, 26);
		bIcon.iconAnchor = new GPoint(0, 0);
		bIcon.infoWindowAnchor = new GPoint(9, 9);
		bIcon.infoShadowAnchor = new GPoint(18, 25);

	return bIcon;
}


function dhtmlLoadScript(url)
{
	var e = document.createElement("script");
	e.src = url;
	e.type="text/javascript";
	document.getElementsByTagName("head")[0].appendChild(e);
}



function mapMouseOverHandler(){
	mapMouseIsOver = true;
}

function mapMouseOutHandler(){
	mapMouseIsOver = false;
}



function handle(delta) 
{
	if (delta < 0)
	{
		geoCoderZoom++;
	}
    else
	{
		geoCoderZoom--;
	}
	map.setZoom(geoCoderZoom);
}


function wheelHandler(event)
{
	if(!mapMouseIsOver)
	   return;
	var delta = 0;
	// ie
	if (!event) 
    	event = window.event;
    
	if (event.wheelDelta) 
	{ 
		delta = event.wheelDelta/120;
        if (window.opera)
        	delta = -delta;
	}
	else if (event.detail) 
	{ 
		// DELTA INVERTITO E MULTIPLO DI 3
        delta = -event.detail / 3;
    }
    
	
	if (delta)
		handle(delta);

    // BLOCCA SCROLLING IN PAGINE LUNGHE... 
	if (event.preventDefault)
    	event.preventDefault();
	
	Event.returnValue = false;
}




function setTypePhysical(){
	try{
		if(showPhysicalMap){
			map.setMapType(G_PHYSICAL_MAP);
		}
	}
	catch(exc){  }
}

function onLoad() {
  if (GBrowserIsCompatible()) {
    map = new GMap2(document.getElementById("map"));
    
    map.addMapType(G_PHYSICAL_MAP);
	map.addMapType(G_SATELLITE_3D_MAP);
    map.addControl(new GLargeMapControl());
	map.addControl(new GMapTypeControl());
	map.addControl(new GOverviewMapControl());
	
 
	if(mapCenter){
	    
	    map.setCenter(new GLatLng(mapCenter[0],mapCenter[1]), geoCoderZoom);
		setTypePhysical();
	    addMarkers();
		if(addPolyLine)
			addPolyLine();
	}
	else{
	    geocoder = new GClientGeocoder();        
	    if (geocoder) {
	        geocoder.getLatLng(geoCoderString, function(point) {
	            if (point) {
					map.setCenter(point, geoCoderZoom);
					setTypePhysical();
					var mapCenter = [];
	            	mapCenter[0] = point.lat();
	            	mapCenter[1] = point.lng();
					addMarkers();
			    	if(addPolyLine)
			       		addPolyLine();
	            }
	          } );
	    }
	}
	/*
    GEvent.addListener(map, "moveend", function() {
 		 if(photoOnMap==true){
 			 showPhotoOnMap();
 		}
	});
	*/

    
  }
  
  for(i=0; i< onLoadEventQueue.length ; i++){	
  	eval(onLoadEventQueue[i]+"()");
  }
}




function addMarkers() {
      if (GBrowserIsCompatible()) {
       
        var letter = "";
        
        for (var i = 0; i < mapMarkers.length; i++) {
          var point = new GLatLng(mapMarkers[i][1],mapMarkers[i][2]);
          
		  if(mapMarkers[i][3]=="poi"){
	        letter = String.fromCharCode("A".charCodeAt(0) + i %26);
		  	var bIcon = new GIcon(); 
  				bIcon.image = "http://www.piste-ciclabili.com/img/markers/marker" + letter + "green.png";

				bIcon.shadow = "http://www.google.com/mapfiles/shadow50.png";

				bIcon.iconSize = new GSize(20, 34);
				bIcon.shadowSize = new GSize(37, 34);
				bIcon.iconAnchor = new GPoint(9, 34);
				bIcon.infoWindowAnchor = new GPoint(9, 2);
				bIcon.infoShadowAnchor = new GPoint(18, 25);

				titleStr = mapMarkers[i][4];
				tempMarker = new GMarker(point,{'icon':bIcon,'title':titleStr});
          }
          else{
			tempMarker = createMarker(point, mapMarkers[i][3],mapMarkers[i][4],mapMarkers[i][5],mapMarkers[i][6]);
          }
          map.addOverlay(tempMarker);
        }
      }
}

function getPisteCiclabiliIcon(){
	var baseIcon = new GIcon();
       
	baseIcon.image = "http://www.piste-ciclabili.com/img/marker_pisteciclabili.com.png";
    baseIcon.shadow = "http://www.piste-ciclabili.com/img/marker_pisteciclabili.com_ombra.png";
    baseIcon.iconSize = new GSize(29, 35);
    baseIcon.shadowSize = new GSize(29, 35);
    baseIcon.iconAnchor = new GPoint(21	, 34	);
    baseIcon.infoWindowAnchor = new GPoint(9, 12);
    baseIcon.infoShadowAnchor = new GPoint(18, 25);
    return baseIcon
}


function createMarker(point, tipo, nome, nomeLowerCase, itinerari) {   
	var icon = new GIcon(getPisteCiclabiliIcon());
	var tempStr = 'in';
	if(tipo=='regione' && nomeLowerCase == 'marche')
		tempStr = 'nelle'
          	
	if(tipo=='comune')
		tempStr = 'nel comune di';
          
	var titleStr = 'Itinerari '+tempStr+' '+nome;
	if(tipo=='provincia')
		titleStr = 'Itinerari della provincia di '+nome;
          	
	if(tipo=='poi' || tipo=='poi_itinerari' || tipo=='itinerario'){
		titleStr = nome;
	}
     
    var marker = new GMarker(point, {'icon':icon,'title':titleStr});

	if(tipo=='poi_itinerari'){
		GEvent.addListener(marker, "click", function() {
			if(itinerari){
				if(itinerari.length==1){
					location.href = itinerari[0][2];
				}
				else{
					htmlCode = "<span class='infoWindow'>"+nome+"<br/>";
					for( i=0; i<itinerari.length; i++){
						htmlCode+="- <a href='"+itinerari[i][2]+"'>"+itinerari[i][1]+"</a><br/>";
					}
					htmlCode += "</span>";
					marker.openInfoWindowHtml(htmlCode);	
				}
			}
		});
	}
	else if(tipo=='itinerario'){
		GEvent.addListener(marker, "click", function() {
      		location.href = '/itinerari/'+itinerari+'-'+nomeLowerCase+'';
		});
				
	}
	else if(tipo!='poi'){
		GEvent.addListener(marker, "click", function() {
      		location.href = '/'+tipo+'-'+nomeLowerCase+'';
		});
	}
	return marker;
}
    
    
function addPolyLine(){
	
	polyLineColor = "#ff00ff";
	for(var i=0; i < mapPolyLine.length ; i++){
		var latLngArray = [];
		if(mapPolyLineC[i] != undefined){
			polyLineColor = mapPolyLineC[i];
		}
		for(var j=0; j<mapPolyLine[i].length ;j++){
			latLngArray.push( new GLatLng(mapPolyLine[i][j][0], mapPolyLine[i][j][1]) );
		}
		var tempPoly = new GPolyline(latLngArray, polyLineColor, 4, 0.8);
		
		if(mapPolyLine.length==1){
			var tempSize = map.getSize();
			var tempBounds = tempPoly.getBounds();
			//tempSize.width-=20;
			tempSize.height-=10;
			var tempZoom = map.getBoundsZoomLevel(tempBounds,  tempSize );
			map.setCenter(tempBounds.getCenter(), tempZoom);
			// map.setZoom(tempZoom);
			
		}
		polyLineArray.push(tempPoly);
		map.addOverlay( tempPoly);
		
	}
	if(true){
		var tempPoly;
		for(var i=0; i < mapEPL.length ; i++){
			if(mapPolyLineC[i] != undefined){
				polyLineColor = mapPolyLineC[i];
			}
			
			var tempPoly = new GPolyline.fromEncoded({
				color: polyLineColor,	
				weight: 4,
				points: mapEPL[i],
				levels: mapEPLL[i],
				zoomFactor: 32,
				numLevels: 3,
				opacity: 0.8
			});
			tempPoly.indexId = i;
			/*
			if(mapMarkers && mapMarkers[i]!=undefined){
				tempPoly.marker = mapMarkers[i];
				
				GEvent.addListener(tempPoly, "click", function() {
					var tempMarker = mapMarkers[this.indexId];
					//alert(mapMarkers[this.indexId]);
					
					htmlCode = "erere";
					
					map.openInfoWindowHtml(this.getBounds().getCenter(), htmlCode);
				});
			}
			*/
			polyLineArray.push(tempPoly);
			map.addOverlay( tempPoly);
		}
		if(mapEPL.length==1){
			var tempSize = map.getSize();
			var tempBounds = tempPoly.getBounds();
			//tempSize.width-=20;
			tempSize.height-=10;
			var tempZoom = map.getBoundsZoomLevel(tempBounds,  tempSize );
			map.setCenter(tempBounds.getCenter(), tempZoom);
			// map.setZoom(tempZoom);
			
		}
	}
}





Array.prototype.inArray = function (value){
    var i;
    for (i=0; i < this.length; i++) {
        // Matches identical (===), not just similar (==).
        if (this[i] === value) {
            return true;
        }
    }
    return false;
};