window.addEvent('domready', function(){
    new overTextField('address', 'Esempio: Via Borgo San Rocco, 15');
    new overTextField('zip', 'CAP');
	new overTextField('commune', 'Comune/Provincia');
    new overTextField('phone', 'Esempio: 061234567');
    if(isGuest) {
        new overTextField('cellnumber', 'Esempio: 331234567');
        new overTextField('fullname', 'Esempio: Marco Rossi');
    }
    google_init();
    initMap(lat, lng, zoom);
    //$$('#province').addEvent('change', onLocationChange);

	var commune = $('commune');
	//commune.addEvent('change', onLocationChange);

	// Our instance for the element with id "demo-word"
	new Autocompleter.Request.JSON(commune, '/get-communes', {
		'onSelection': onLocationChange,
		'selectMode':false
	});


	//var inputWord2 = $('demo-words');

	// An element as indicator, shown during background request
	//var indicator = inputWord2.getPrevious().getElement('.autocompleter-loading');
	//indicator.setStyle('display', 'none');


});

var map;
var geocoder;
var marker;
var lat = 42;
var lng = 13;
var zoom = 5;
var isGuest = 1;
var resp = [];

var overTextField = new Class ({
    overclass: 'over-text',
    initialize: function(el, text) {
        this.el = $(el);
        this.isPassword = (this.el.type === 'password');
        if(this.isPassword && Browser.Engine.trident)
            return;
        this.text = text;
        this.el.addEvents({
            'focus': this.focus.bindWithEvent(this),
            'blur': this.blur.bindWithEvent(this)
        });
        this.el.fireEvent('blur');
    },
    focus: function() {
        if(this.el.value.trim() === this.text) {
            if(this.isPassword)
                this.el.type = 'password';
            this.el.set('value', '').removeClass(this.overclass);
        }
    },
    blur: function() {
        if(this.el.value.trim() === '' || this.el.value.trim() === this.text) {
            if(this.isPassword)
                this.el.type = 'text';
            this.el.set('value', this.text).addClass(this.overclass);
        }
    }
});

function google_init() {
    if (GBrowserIsCompatible()) {
        window.onunload = GUnload;
        geocoder = new GClientGeocoder();
        geocoder.setBaseCountryCode('it');
    }
    else
        alert('Browser is incompaible with Google Maps!');
}

function initMap(lat, lng, zoom) {
    map = new GMap2($('map'));
    map.addControl(new GMapTypeControl());
    map.addControl(new GSmallMapControl());
    GEvent.addListener(map, 'zoomend', function(oldVal, newVal) {
        $('zoom').value = newVal;
    });
    lat = lat ? lat : 42;
    lng = lng ? lng : 13;
    var center = new GLatLng(lat, lng);
    map.setCenter(center, zoom);
    if((lat != 42) && (lng != 13))
        addMarker(center);
}

function onLocationChange(v) {
	//alert(v);
    var address = $('address');
    //var zip = $('zip');
    var commune = $('commune');
    if(address.hasClass('over-text'))
        return;
    //if(zip.hasClass('over-text'))
        //return;
    if(commune.value === '')
        return;
    if(address.value.trim().length < 0)
        return;
    //if(!zip.value.trim().test(/^\d{5}$/))
        //return;
    var geoQuery = [address.value, /*zip.value, */commune.value, 'Italy'].clean().join(' ');
    //alert(geoQuery);
    geocoder.getLocations(geoQuery, geocodingComplete);
}

function geocodingComplete(response) {
    if(!response || (response.Status.code != 200) || (response.Placemark[0].AddressDetails.Country.CountryNameCode != 'IT')) {
        alert('Geocoding failed!');
        return false;
    }
    if(response.Placemark.length > 1) {
        resp = response;
        $(document.body).mask({id:'overlay', onHide:function(){$('addresses').setStyle('visibility', 'hidden')}});
        var size = $(window).getSize();
        var scroll = $(window).getScroll();
        var content = 'Seleziona una opzione:<br/><form name="addresses" onsubmit="return false;"><table>';
        for(var i = 0; i < response.Placemark.length; i++) {
            content += '<tr><td><input type="radio" name="_address" value="'+i+'" '+((i==0) ? 'checked' : '')+'></td><td>' + response.Placemark[i].address.replace(', Repubblica Italiana', '') + '</td></tr>';
        }
        content += '</table>';
        content += '<br/><table align="center"><tr><td><a class="apple" onclick="chooseAddress()"><span>Continua</span></a></td></tr></table></form>';

        $('addresses').set('html', content);
        var asize = $('addresses').getSize();
        $('addresses').inject(document.body).setStyles({left: parseInt((size.x-asize.x)/2), top: parseInt((size.y-asize.y)/2) + scroll.y}).setStyle('visibility', 'visible');
        return;
    }
    var place = response.Placemark[0];
    var zip = '';
    if($defined(place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality)) {
        var locality = place.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality;
        if($defined(locality.DependentLocality)) {
            if($defined(locality.DependentLocality.PostalCode))
                zip = locality.DependentLocality.PostalCode.PostalCodeNumber;
        }
        else if($defined(locality.PostalCode)) {
            zip = locality.PostalCode.PostalCodeNumber;
        }
    }
    //alert(zip);
    $('zip').set('value', zip).removeClass('over-text');
    var center = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);
    map.setCenter(center, 16);
    if(marker)
        marker.setLatLng(center);
    else
        addMarker(center);
    marker.openInfoWindowHtml('Verifica la posizione del tuo<br/>ristorante sulla mappa.<br/>Se la posizione non è corretta,<br/>puoi trascinare l\'indicatore nella<br/>posizione esatta.');
    $('lat').value = place.Point.coordinates[1];
    $('lng').value = place.Point.coordinates[0];
}

function addMarker(center) {
    marker = new GMarker(center, {draggable: true});
    marker.setLatLng(center);
    map.addOverlay(marker);
    GEvent.addListener(marker, 'dragstart', function() {
        marker.closeInfoWindow();
    });
    GEvent.addListener(marker, 'dragend', function() {
        var coords = marker.getLatLng();
        $('lat').value = coords.lat();
        $('lng').value = coords.lng();
        marker.openInfoWindowHtml('Le coordinate del tuo ristorante<br/>è stato modificato.');
    });
}

function formSubmit() {
    $('address').value = $('address').value.replace('Esempio: Via Borgo San Rocco, 15', '');
    $('zip').value = $('zip').value.replace('CAP', '');
    $('phone').value = $('phone').value.replace('Esempio: 061234567', '');
    if(isGuest) {
        $('cellnumber').value = $('cellnumber').value.replace('Esempio: 331234567', '');
        $('fullname').value = $('fullname').value.replace('Esempio: Marco Rossi', '');
    }
    document.f.submit();

}

function chooseAddress() {

    var len = document.addresses.elements.length;
    for(var i = 0; i < len; i++)
        if(document.addresses.elements[i].checked)
            break;
    resp.Placemark[0] = resp.Placemark[i];
    var len = resp.Placemark.length;
    for(var i = 1; i < len; i++)
        resp.Placemark.pop();
    geocodingComplete(resp);
    $(document.body).unmask();
}





