/** 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){

    // Esegue il geocode dell'indirizzo (deve arrivare ben formattato) 
    function setPointAndSubmitForm(response){
    
		if (!response || response.Status.code != 200) {
            // Mostra alert
			$('flash-message').setStyle('opacity', 1);
			$('flash-message').set('text', 'Spiacenti, il sistema di mappe non trova l\'indirizzo specificato.');
			var msgFx = new Fx.Tween($('flash-message'));
			var hideMsg = function() { msgFx.start('opacity', 0); };
			hideMsg.delay(2000);
			//alert("");
        }
        else {
			//alert('E\' arrivata una risposta! :)');
			
			place = response.Placemark[0];
			
			// Inserisce i dati del geocode nei campi
            $(options.lat).set('value', place.Point.coordinates[1]);
            $(options.lng).set('value', place.Point.coordinates[0]);
            
            // Serve a far capire al submit che Ã¨ stato lanciato da qui
			automatedSubmit = true;
			// Submitta il form
            $(options.form).submit();
        }
    }
    
    // Esegue il geocode dell'indirizzo (deve arrivare ben formattato)  
    var geocoder = new GClientGeocoder();
	geocoder.getLocations(options.address, setPointAndSubmitForm); 

}



var sSportHint = 'Inserisci sport o scrivi * per tutti';
var sLocationHint = "Inserisci l'indirizzo completo";
var sStructureName = "Inserisci il nome della struttura";

function addHint(control, hint) {
	if (control.get('value')=='') {
		control.set('value', hint);
		control.setStyle('color', '#666');
	}
}

function removeHint(control, hint) {
	if (control.get('value')==hint) {
		control.set('value', '');
		control.setStyle('color', '#000');
	}
}

function manageHint(control, hint) {
	addHint(control, hint);
	control.addEvent('focus', function() {
		removeHint(this, hint);
	});
	control.addEvent('blur', function() {
		addHint(this, hint);
	});
}

//Aggiungo la gestone del form di ricerca
window.addEvent('domready', function() {
		
	var automatedSubmit = false;
	var eSport = $('sport');
	var eSportSearch = $('sport_search');
	var eLocation = $('location');
	
	manageHint(eLocation, sLocationHint);
	manageHint(eSportSearch, sSportHint);
	
    $('form_search').addEvent('submit', function(event) {
    	/* CONTROLLI, GESTIONE DEL SUBMIT E DEL GEOCODING ASINCRONO */
    	
    	// Se submit non Ã¨ lanciato dal computer, non submitto veramente
		if (!automatedSubmit)
			event.stop();
		// Se non Ã¨ settata la disciplina, non faccio nulla
		if (eSport.get('value') == '' || eSport.get('value') == '0') {
			$('flash-message').setStyle('opacity', 1);
			$('flash-message').set('text', 'Selezionare una disciplina sportiva dall\'elenco');
			var msgFx = new Fx.Tween($('flash-message'));
			var hideMsg = function() { msgFx.start('opacity', 0); };
			hideMsg.delay(2000);
			
			//alert('Selezionare una disciplina sportiva dall\'elenco');
            return;
        }
		// Se non Ã¨ settata la localitÃ , non faccio nulla
		if (eLocation.get('value') == '' || eLocation.get('value') == sLocationHint) {
			$('flash-message').setStyle('opacity', 1);
			$('flash-message').set('text', 'Inserire una localita\'');
			var msgFx = new Fx.Tween($('flash-message'));
			var hideMsg = function() { msgFx.start('opacity', 0); };
			hideMsg.delay(2000);
            //alert('');
            return;
        }
		// Faccio il geocode del punto, se riesce imposto lat e lng e submitto davvero il form
		if (!automatedSubmit)
			myGeocodeAndSubmitSearch({
				address:eLocation.get('value'),
				lng:'lng',
				lat:'lat',
				form:'form_search'
			});
    });

    /* GESTIONE DEL DROPDOWN DEGLI SPORTS */
	new DropDown('sport_search', 'sport_button', 'sport', 'sport_text', 'sport_ul', URL_PATH+'services/sport_service.php?search=');
	
});
