var nome_nazione;
var map;
var markers = new Array();
var image = skinUrl+'/images/GMaps/w.png';
var geocoder = new google.maps.Geocoder();
var store_list = $("#stores-list");
var FindCorrectZoom = false;

var result_token = ''

function newSearch(){
	searchAddress('');
	return false;
}

function oldSearch(){
	if($('#provincia_stores').val()=='' || $('#provincia_stores').val().toUpperCase()==$('#nazione_stores').val().toUpperCase()){}
	else{
		var provincia_stores = $('#provincia_stores').val();
		$.post(skinUrl+'/ajaxStores.jsp?loadSubs=true&nazione='+$('#nazione_stores').val()+'&idNazione='+$('#idNazione').val()+'&provincia='+provincia_stores,function(data){
			var x = data.split("|");
			if((x[0]=="1" || x[0]=="2")){
				location.href = searchUrl+x[2]+"/";
			}
			else{
				geocoder.geocode( {'address': $('#provincia_stores').val()+' '+$('#nazione_stores').val()}, function(results,status) {
					if (status == google.maps.GeocoderStatus.OK) {
				    	result_token = results[0].address_components[1].long_name;
				    	$('#provincia_stores').val(result_token);
				    } 
					$('#lista-province-wrapper').html('<img src="'+skinUrl+'/img/ajax-loader.gif"/>');
					$('.title-noresult').html(_noresult);
					$('.title-noresult-string').html($('#provincia_stores').val()+"...");
					Cufon.replace('.title-noresult-string',{fontFamily:'Helvetica'});
					window.setTimeout("location.href = '"+skinUrl+searchUrl+$('#provincia_stores').val()+"/'",4000);
				});
			}
		});
	}
	return false;
}
function search(){
	if($('#provincia_stores').val()=='' || $('#provincia_stores').val().toUpperCase()==$('#nazione_stores').val().toUpperCase()) {}
	else{
		$('#stores-list').html('<img src="'+skinUrl+'/img/ajax-loader.gif" class="loader"/>');
		var provincia_stores = $('#provincia_stores').val();
		var nazione_stores = $('#nazione_stores').val();
		
		var query = '?idNazione='+$('#idNazione').val();
		if($('#provincia_stores').val()==''){}
		else{
			query += '&provincia='+provincia_stores;
		}
		$.post(skinUrl+'/ajaxStores.jsp'+query,function(data){
			$('.loader').remove();
			$('.provinceCrumb').html(provincia_stores);
			Cufon.replace('.provinceCrumb',{fontFamily:'ITC Avant Garde Gothic'});
			createOverlay(data,provincia_stores+' '+nazione_stores);
		});
		return false;
	}
}

function searchAddress(string){
	if($('#provincia_stores').val()=='' && string=='') return false;
	var address = $('#provincia_stores').val();
	var country = $('#nazione_stores').val();
	if(string!=''){
		address = string;
	}
	$.post(skinUrl+'/ajaxStores.jsp?loadSubs=true&nazione='+country+'&idNazione='+$('#idNazione').val()+'&provincia='+address,function(data){
		var x = data.split("|");
		if(string=='' && (x[0]=="1" || x[0]=="2"))
			location.href = searchUrl+x[2]+"/";
		else if(string!='' && (x[0]=="1" || x[0]=="2")){
			$('#provincia_stores').val(x[1]);
			$('.title-noresult').html(_noresult);
			$('.title-noresult-string').html(x[1]);
			Cufon.replace('.title-noresult-string',{fontFamily:'Helvetica'});
			location.href = searchUrl+x[2]+"/";
		}
		else{
			$('#provincia_stores').val(x[1]);
			$('.title-noresult').html(_noresult);
			$('.title-noresult-string').html(x[1]);
			Cufon.replace('.title-noresult-string',{fontFamily:'Helvetica'});
			geocoder.geocode( {'address': address+' '+country}, function(results,status) {
			    if (status == google.maps.GeocoderStatus.OK) {
			    	result_token = results[0].address_components[1].long_name;
			    	if(result_token=='') 
			    		result_token = $('#provincia_stores').val();
			    } else {
			    	result_token = $('#provincia_stores').val();
			    }
			    
			    searchAddress(result_token);
			});
		}
	});
}




function resetMapToCountry(){
	map.clearMarkers ();
	if (geocoder) {
		geocoder.geocode( { 'address': nome_nazione}, function(results, status) { 
	    	  if (status == google.maps.GeocoderStatus.OK) {
	    		  map.setCenter(results[0].geometry.location);
	    		  var bounds_value = results[0].geometry.bounds;
	    		  map.fitBounds(bounds_value);
	    	  } else {
	    		  alert("Geocode was not successful for the following reason: " + status);
	    	  }
	      });
	}
}
function initialize() {
	
    var latlng = new google.maps.LatLng(45.734281,11.6632455);
    var myOptions = {
      zoom: 1,
      center: latlng,
      disableDefaultUI: true,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

    var mappaControlDiv = document.createElement('DIV');
    var mappaControl = new mappa(mappaControlDiv, map);
    var satelliteControl = new satellite(mappaControlDiv, map);
    var terrainControl = new terreno(mappaControlDiv, map);

    mappaControlDiv.index = 1;
    map.controls[google.maps.ControlPosition.TOP_RIGHT].push(mappaControlDiv);
    
}

google.maps.Map.prototype.markers = new Array();

google.maps.Map.prototype.getMarkers = function() {
    return this.markers
};

google.maps.Map.prototype.clearMarkers = function() {
    for(var i=0; i<this.markers.length; i++){
        this.markers[i].setMap(null);
    }
    this.markers = new Array();
};

google.maps.Marker.prototype._setMap = google.maps.Marker.prototype.setMap;

google.maps.Marker.prototype.setMap = function(map) {
    if (map) {
        map.markers[map.markers.length] = this;
    }
    this._setMap(map);
}

function mappa(controlDiv, map) {

  var controlUI = document.createElement('DIV');
  controlUI.style.cursor = 'pointer';
  controlUI.style.width = '54px';
  controlUI.id='mappa';
  controlUI.className = 'control';
  controlUI.innerHTML = '<img id="bott_mappa" src="'+skinUrl+'/images/GMaps/mappa.png">';
  controlDiv.appendChild(controlUI);

  google.maps.event.addDomListener(controlUI, 'click', function() {
	  map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
  });
}

function satellite(controlDiv, map) {

	  var controlUI = document.createElement('DIV');
	  controlUI.style.cursor = 'pointer';
	  controlUI.style.width = '59px';
	  controlUI.id = 'satellite';
	  controlUI.className = 'control';
	  controlUI.innerHTML = '<img id="bott_satellite" src="'+skinUrl+'/images/GMaps/satellite.png">';
	  controlDiv.appendChild(controlUI);

	  google.maps.event.addDomListener(controlUI, 'click', function() {
		 map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
	  });
	}

function terreno(controlDiv, map) {

	  var controlUI = document.createElement('DIV');
	  controlUI.style.cursor = 'pointer';
	  controlUI.style.width = '58px';
	  controlUI.id = 'terreno';
	  controlUI.className = 'control';
	  controlUI.innerHTML = '<img id="bott_satellite" src="'+skinUrl+'/images/GMaps/terreno.png">';
	  controlDiv.appendChild(controlUI);

	  google.maps.event.addDomListener(controlUI, 'click', function() {
		 map.setMapTypeId(google.maps.MapTypeId.TERRAIN);
	  });
	}

function goCountry(country,layer){
	this.country = country;
	this.layer = layer;
	if(layer!=''){
		showAddress(country);
	}else{
		showAddress(country,layer);
	}
}

function showAddress(address){	
	if(layer==2){
		
		$('#main-column-stores').hide();
		
		$('#main-column-stores-detail').fadeIn();
		$('#stores-list').css({height:'465px'});
		map.clearMarkers ();
		if (geocoder) {
		      geocoder.geocode( { 'address': address}, function(results, status) { 
		    	  if (status == google.maps.GeocoderStatus.OK) {
		    		  map.setCenter(results[0].geometry.location);
		
		    		  var bounds_value = results[0].geometry.bounds;
		    		  map.fitBounds(bounds_value);
		
		    		  $('#nazione-result').html(results[0].address_components[0].long_name);
		    		  Cufon.replace('#nazione-result',{fontFamily:'Helvetica'});
		
		    		  var marker = new google.maps.Marker({
		    			  map: map, 
		    			  position: results[0].geometry.location
		    		  });
		    	  } else {
		    		  alert("Geocode was not successful for the following reason: " + status);
		    	  }
		      });
		}
	}else{
		map.clearMarkers ();
		 if (geocoder) {
		      geocoder.geocode( { 'address': address}, function(results, status) { 
		        if (status == google.maps.GeocoderStatus.OK) {
		        map.setCenter(results[0].geometry.location);
		        
		        var bounds_value = results[0].geometry.bounds;
		        map.fitBounds(bounds_value);
		        /*
		        $('#nazione-result').html(results[0].address_components[0].long_name);
		        Cufon.replace('#nazione-result',{fontFamily:'Helvetica'});
		        */
		        var marker = new google.maps.Marker({
		        	map: map, 
		        	position: results[0].geometry.location
		          });
		        } else {
		          alert("Geocode was not successful for the following reason: " + status);
		        }
		      });
		    }
	}
}
var timeoutPopulate;
function populateWithDelay(){
	if(_i<_a.length) {
		$(_a[_i++]).appendTo($('#stores-list')).click(function(){
			var rel_marker = $(this).find('p.lookAt').attr('rel');
			var getLatLng = rel_marker.split('_');
			centerMarker(getLatLng[0],getLatLng[1]);
			
		});
		if(_i==_a.length-1) {
			$('#stores-list').jScrollPane();
			window.clearInterval(timeoutPopulate);
		}
	}
}


var _a = [];
var _i = 0;

function renderScroller(){
	$('div#stores-list').jScrollPane({scrollbarWidth:8});
}

function createOverlay(data,provincia_stores){
	var $dom = $.xmlDOM(data, function(error) {
	    alert('A parse error occurred! ' + error);
	});
	
	_a = [];
	var i = 0;
	
	$dom.find("marker").each(function(){
		var _marker = $(this);
		var dati = [_marker.attr('lat'),//0
		            _marker.attr('lng'),//1
		            _marker.find('ragionesociale').text(),//2
		            _marker.find('indirizzo').text(),//3
		            _marker.find('citta').text(),//4
		            _marker.find('telefono').text(),//5
		            _marker.find('email').text(),//6
					_marker.find('web').text()//7
		           ];
		
		var point = new google.maps.LatLng(dati[0],dati[1]);
		var marker = null;
		
		//var elemento = '<div class="stores-data-wrapper"><img class="ico-wilier" src="'+skinUrl+'/images/GMaps/marker.gif"/><div class="store-data-wrapper"><h2>'+dati[2]+'</h2><p>'+dati[3]+'</p><p>'+dati[4]+'</p><p>e-mail: </p><p>web site:</p><p class="lookAt" rel="'+dati[0]+'-'+dati[1]+'">vedi nella mappa</p></div><br class="clear"/></div>';
		var elemento = '<div class="stores-data-wrapper"><img class="ico-wilier" src="'+skinUrl+'/images/GMaps/marker.gif"/><div class="store-data-wrapper"><h2>'+dati[2]+'</h2><p>'+dati[3]+'</p><p>'+dati[4]+'</p>';
		if(dati[5]!=''){
			elemento += '<p>'+dati[5]+'</p>';
		}
		if(dati[6]!=''){
			elemento += '<p>e-mail: <a class="link-web-store" href="mailto:'+dati[6]+'">'+dati[6]+'</a></p>';
		}
		if(dati[7]!=''){
			elemento += '<p>website: <a class="link-web-store" href="'+dati[7]+'" target="_blank">'+dati[7]+'</a></p>';
		}
		
		elemento += '<p class="lookAt" rel="'+dati[0]+'_'+dati[1]+'">vedi nella mappa</p></div><br class="clear"/></div>';
		
	    _a[i++] = elemento;
	    
	});
	
	_i = 0;
	window.setInterval('populateWithDelay()',100);
	
	$dom.find("marker").each(function(){
		var _marker = $(this);
		var dati = [_marker.attr('lat'),//0
		            _marker.attr('lng'),//1
		            _marker.find('ragionesociale').text(),//2
		            _marker.find('indirizzo').text(),//3
		            _marker.find('citta').text(),//4
		            _marker.find('telefono').text(),//5
		            _marker.find('email').text(),//6
					_marker.find('url').text()//7
		           ];
		
		var point = new google.maps.LatLng(dati[0],dati[1]);
		var marker = null;
		
		var contentWindow = '<div id="info-window"><div class="title-info-window">'+dati[2]+'</div><div class="data-info-window">'+dati[3]+'</div></div>';
		
		var infowindow = new google.maps.InfoWindow({
		    content: contentWindow
		});
		
	    marker = new google.maps.Marker({
	        position: point,
	        map: map,
	        icon: image,
	        title: dati[2]
	    });
	    
	    google.maps.event.addListener(marker, 'click', function() {
    	  infowindow.open(map,marker);
    	});
	    
	});
	
	if(provincia_stores!=''){
		var goTo = provincia_stores;
		zoomZone(goTo);	
	}
	//window.setTimeout("$('#stores-list').jScrollPane();",3000);
}

function zoomZone(geoData){
	if (geocoder) {
      geocoder.geocode( { 'address': geoData}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) {
	        map.setCenter(results[0].geometry.location);
	        
	        var bounds_value = results[0].geometry.bounds;
	        map.fitBounds(bounds_value);
        }
      });
    }
}

function getLocationBounds(geoData){
	if (geocoder) {
      if($('#provincia_stores').val()!='' && $('#provincia_stores').val()!=$('#nazione_stores').val()){
			geoData = geoData + ' ' + $('#nazione_stores').val();
		}
      geocoder.geocode( { 'address': geoData, 'country': $('#nazione_stores').val()}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) {
	        map.setCenter(results[0].geometry.location);
	        
	        var bounds_value = results[0].geometry.bounds;
	        var sw = bounds_value.getSouthWest();
	        var _sw = [sw.lat(),sw.lng()];
	        var ne = bounds_value.getNorthEast();
	        var _ne = [ne.lat(),ne.lng()];
	        map.fitBounds(bounds_value);
	        map.setZoom(map.getZoom()-1);

	        $('.stores-data-wrapper').each(function(){
	        	
			var y = $(this).find('.lookAt');
				
			var rel = y.attr('rel').split("_");
			
			if(rel[0]<=_ne[0]+0.2 && rel[0]>=_sw[0]-0.2 && rel[1]<=_ne[1]+0.2 && rel[1]>=_sw[1]-0.2){
				$(this).show();
			}else{
				$(this).hide();
			}
		});
	       $('#stores-list').jScrollPane();
	       return bounds_value;
        }
      });
    }
}
function zoom_changed_listener() {
	if(FindCorrectZoom) {
		FindCorrectZoom = false;
		processFitBoundsZoomChanged(this.getZoom());
	}
}
function processFitBoundsZoomChanged(currentZoom) {
	map.setZoom(currentZoom+1);
}

function zoomZoneCountry(geoData){
	//google.maps.event.addListener(map, 'zoom_changed',zoom_changed_listener);

	if (geocoder) {
      geocoder.geocode( { 'address': geoData}, function(results, status) { 
        if (status == google.maps.GeocoderStatus.OK) {
	        map.setCenter(results[0].geometry.location);
	        
	        var bounds_value = results[0].geometry.bounds;
	        FindCorrectZoom = true;
	        map.fitBounds(bounds_value);
	        map.setZoom(map.getZoom()+1);
        }
      });
    }
}

function centerMarker(latitudine,longitudine){
	this.latitudine = latitudine;
	this.longitudine = longitudine;
	var store = new google.maps.LatLng(latitudine,longitudine);
	map.setCenter(store);
	map.setZoom(14);
	
}