// Vars per la gestione della scrollbar
var totalHeight;
var visibleHeight;
var currentOffset = 0;

$(document).ready(function(){

    //-- Gestione dello scorrimento laterale --//
    
    eSliderMask = $('#map_nav');
    eSlider = $('#map_nav_slider');
    totalHeight = eSlider.height();
    visibleHeight = eSliderMask.height();
    btnUpLink = $('#btnUp a');
    btnDownLink = $('#btnDown a');
    
    if (totalHeight < visibleHeight) {
        $('#updown').fadeTo('slow', 0.33);
        btnDownLink.click(function(event){
            messageNoScroll(event);
        });
        btnUpLink.click(function(event){
            messageNoScroll(event);
        });
    }
    else {
        btnDownLink.click(function(event){
            currentOffset -= 440;
            var minOffset = -(totalHeight - visibleHeight);
            if (currentOffset < minOffset) 
                currentOffset = minOffset; // Limite
            animateSlider();
            event.preventDefault();
        });
        btnUpLink.click(function(event){
            currentOffset += 440;
            var maxOffset = 0;
            if (currentOffset > maxOffset) 
                currentOffset = maxOffset; // Limite
            animateSlider();
            event.preventDefault();
        });
    }
    
    function animateSlider(){
        eSlider.animate({
            marginTop: currentOffset + 'px'
        }, {
            queue: false,
            duration: 600
        });
    };
    
    function messageNoScroll(event){
        alert('I risultati sono già tutti visibili.');
        event.preventDefault();
    }
    
    //-- Gestione della barra di ricerca, localita --//
    
    eLocalita = $('#localita');
    localitaOriginalVal = eLocalita.val();
    
	if (localitaOriginalVal != sSearchInsertLocation) {
		eLocalita.css('color', '#000');
	}
	
    eLocalita.focus(function(){
        if (eLocalita.val() == sSearchInsertLocation) {
            eLocalita.css('color', '#000');
            eLocalita.val('');
        }
    });
    
    eLocalita.blur(function(){
        eLocalita.val($.trim(eLocalita.val()));
        if (eLocalita.val() == '') {
            eLocalita.css('color', '#999');
            eLocalita.val(sSearchInsertLocation);
        }
    });
    
    //-- Gestione della barra di ricerca, raggio --//
    
    eRaggio = $('#raggio');
    
    eRaggio.focus(function(){
        eRaggio.select();
    });
    
    eRaggio.blur(function(){
        eRaggio.val($.trim(eRaggio.val()));
        var initialValue = eRaggio.val();
        if (eRaggio.val() < 1) {
            eRaggio.val(1);
        }
        if (eRaggio.val() > 99) {
            eRaggio.val(99);
        }
        if (isNaN(eRaggio.val())) {
            eRaggio.val(25);
        }
        if (eRaggio.val() != initialValue) 
            alert('Il raggio è stato reimpostato al valore ' + eRaggio.val());
    });
    
    //-- Submit --//
    
	automatedSubmit = false;
    $('#frmSearch').submit(function(event){
		// Se submit non è lanciato dal computer, non submitto veramente
		if (!automatedSubmit)
			event.preventDefault();
		// Se non è settata la località, non faccio nulla	
		if (eLocalita.val() == sSearchInsertLocation || eLocalita.val() == '') {
            alert('Inserire una località');
            return;
        }
		// Faccio il geocode del punto, se riesce imposto lat e lng e submitto davvero il form
		if (!automatedSubmit)
			myGeocodeAndSubmitSearch({
				address:eLocalita.val(),
				lng:'lng',
				lat:'lat',
				form:'frmSearch'
			});
    });
    
});


/** Funzione che geocodifica l'indirizzo e submitta il form
 * Il parametro options deve contenere:
 * - form (id del form),
 * - lat (id del lat),
 * - lng (id del lng),
 * - address (indirizzo da ricercare)
 * @param {Object} options -
 */
function myGeocodeAndSubmitSearch(options){

    myCreateGeocoderIfShould();
    gGeocoder.geocode ({address:options.address, region:'it'}, function(results, status) 
    {
        if (status == google.maps.GeocoderStatus.OK) {
            
            var place = results[0].geometry.location;

            // Inserisce i dati del geocode nei campi
            $('#'+options.lat).val(place.lat());
            $('#'+options.lng).val(place.lng());

            // Serve a far capire al submit che è stato lanciato da qui
            automatedSubmit = true;

            // Submitta il form
            $('#'+options.form).submit();
        } else {
            // Mostra alert
            alert("Spiacenti, non siamo riusciti a trovare l'indirizzo specificato.");
        }
        
    });
        
}

