// aggiunge la classe "current" al nodo di nome oSuggestionNode e toglie la classe al nodo vecchio
AutoSuggestControl.prototype.highlightSuggestion = function (oSuggestionNode) {

    for (var i=0; i < this.layer.childNodes.length; i++) {
        var oNode = this.layer.childNodes[i];
        if (oNode == oSuggestionNode) {
            oNode.className = "current"
        } else if (oNode.className == "current") {
            oNode.className = "";
        }
    }
};
      
// cambia lo stile del layer a "hidden"
AutoSuggestControl.prototype.hideSuggestions = function () {
    this.layer.style.visibility = "hidden";
};   


// funzione che crea un elemento div nel document di classe "suggestion" e lo crea "hidden" e della stessa larghezza della textBox
// inoltre gestisce gli eventi del mouse sulla lista
AutoSuggestControl.prototype.createDropDown = function () {

    this.layer = document.createElement("div");
    this.layer.className = "suggestions";
    this.layer.style.visibility = "hidden";
    this.layer.style.width = this.textbox.offsetWidth;
    document.body.appendChild(this.layer);

    // gestione mouse
    var oThis = this;

    this.layer.onmousedown = this.layer.onmouseup =
    this.layer.onmouseover = function (oEvent) {
        oEvent = oEvent || window.event;
        oTarget = oEvent.target || oEvent.srcElement;

        if (oEvent.type == "mousedown") {
            oThis.textbox.value = oTarget.firstChild.nodeValue;
            oThis.hideSuggestions();
        } else if (oEvent.type == "mouseover") {
            oThis.highlightSuggestion(oTarget);
        } else { // mouseup
            oThis.textbox.focus();
        }
    };
};

// funzione che calcola la distanza dal bordo sinistro della pagina del textBox, prendendo per ogni nodo della pagina, la distanza dal nodo padre, fino al nodo body
AutoSuggestControl.prototype.getLeft = function () {

    var oNode = this.textbox;
    var iLeft = 0;

    while(oNode.tagName != "HTML" && oNode.tagName != "BODY") {
        iLeft += oNode.offsetLeft;
        oNode = oNode.offsetParent;
    }

    return iLeft;
};

// idem come sopra
AutoSuggestControl.prototype.getTop = function () {

    var oNode = this.textbox;
    var iTop = 0;

    while(oNode.tagName != "HTML" && oNode.tagName != "BODY") {
        iTop += oNode.offsetTop;
        oNode = oNode.offsetParent;
    }

    return iTop;
};

// funzione che accetta una lista di suggerimenti e li mostra nel layer, in pratica crea un div dentro a layer per ogni suggerimento e ci scrive dentro la parola
AutoSuggestControl.prototype.showSuggestions = function (aSuggestions) {
    var oDiv = null;
    this.layer.innerHTML = "";
	
    for (var i=0; i < aSuggestions.length; i++) {
	
        oDiv = document.createElement("div");
        oDiv.appendChild(document.createTextNode(aSuggestions[i]));
        this.layer.appendChild(oDiv);
    }

    this.layer.style.left = this.getLeft() + "px";
    this.layer.style.top = (this.getTop()+this.textbox.offsetHeight) + "px";
    this.layer.style.visibility = "visible";
};

AutoSuggestControl.prototype.nextSuggestion = function () {
    var cSuggestionNodes = this.layer.childNodes;

    if (cSuggestionNodes.length > 0 && this.cur < cSuggestionNodes.length-1) {
        var oNode = cSuggestionNodes[++this.cur];
        this.highlightSuggestion(oNode);
        this.textbox.value = oNode.firstChild.nodeValue;
    }
};

AutoSuggestControl.prototype.previousSuggestion = function () {
    var cSuggestionNodes = this.layer.childNodes;

    if (cSuggestionNodes.length > 0 && this.cur > 0) {
        var oNode = cSuggestionNodes[--this.cur];
        this.highlightSuggestion(oNode);
        this.textbox.value = oNode.firstChild.nodeValue;
    }
};

// funzione che verrà bindata per gestire gli eventi key arrow
AutoSuggestControl.prototype.handleKeyDown = function (oEvent) {
    switch(oEvent.keyCode) {
        case 38: //up arrow
            this.previousSuggestion();
            break;
        case 40: //down arrow
            this.nextSuggestion();
            break;
        case 13: //enter
            this.hideSuggestions();
            break;
    }
};

       
//Definizione della classe AutoSuggestControl
function AutoSuggestControl(oTextbox, oProvider) {
    this.cur = -1;
    this.layer = null;
    this.provider = oProvider;
    this.textbox = oTextbox;
    this.init(); // assegno la gestione del onkeyup del textbox alla funzione handleKeyUp
}

// creo il metodo selectRange della classe AutoSuggestControl
// questa funzione seleziona la stringa del textbox a partire da iStart per iLength caratteri
AutoSuggestControl.prototype.selectRange = function (iStart, iLength) {
    if (this.textbox.createTextRange) { // explorer
        var oRange = this.textbox.createTextRange();
        oRange.moveStart("character", iStart);
        oRange.moveEnd("character", iLength - this.textbox.value.length);
        oRange.select();
    } else if (this.textbox.setSelectionRange) { // mozilla
        this.textbox.setSelectionRange(iStart, iLength);
    }

    this.textbox.focus();
};

// funzione che seleziona scrive il Suggerimento sSuggestion nel textField e seleziona la parte rimanente da scrivere
// accetta come parametro la stringa suggerita sSuggestion e fa uso della funzione selectRange appena vista
AutoSuggestControl.prototype.typeAhead = function (sSuggestion) {
    if (this.textbox.createTextRange || this.textbox.setSelectionRange) {
        var iLen = this.textbox.value.length;
        this.textbox.value = sSuggestion;
        this.selectRange(iLen, sSuggestion.length);
    }
};

//funzione che controlla che i suggerimenti aSuggestions (ci possono essere + diuna parola che comincia per xxx) ci siano e seleziona la prima
// il secondo parametro serve per il dropDown menu, ed è un booleano che indica se fare o no il typeAhead, e se è false, nasconde la tendina
AutoSuggestControl.prototype.autosuggest = function (aSuggestions,  bTypeAhead) {
	
    if (aSuggestions.length > 0) {
	    if (bTypeAhead) {
	    
		    this.typeAhead(aSuggestions[0]);
		}
		this.showSuggestions(aSuggestions);
	    } else {
		this.hideSuggestions();
    }
};

// questa funzione controlla quale tasto è stato premuto e se è il caso di procedere con l'autosuggest
AutoSuggestControl.prototype.handleKeyUp = function (oEvent) {
    var iKeyCode = oEvent.keyCode;
    
    if (iKeyCode == 8 || iKeyCode == 46) {
        sFlagParolaSuccessiva = "";
        this.provider.requestSuggestions(this, false);
    } else if (iKeyCode < 32 || (iKeyCode >= 33 && iKeyCode <= 46) || (iKeyCode >= 112 && iKeyCode <= 123)) {
        sFlagParolaSuccessiva = "";
        //ignore
    //Modifica Giuseppe x più parole. Quando si digita spazio si suggerisce la parola successiva
    } else if (iKeyCode == 32) { //spazio
        sTextboxValueSalva = "";
        this.provider.requestSuggestions1(this, false);
    } else if (sFlagParolaSuccessiva == "S") {
        this.provider.requestSuggestions1(this, false);
    //Fine Modifica 
    } else {
        //this.provider.requestSuggestions(this);
				this.provider.requestSuggestions(this, true);
    }
};

// funzione per far gestire alla funzione handleKeyUp l'evento keyUp del controllo textbox della classe AutoSuggestControl
AutoSuggestControl.prototype.init = function () {
    var oThis = this;
    this.textbox.onkeyup = function (oEvent) { // quando si verifica un evento onkeyup, esegui questa funzione passandogli l'oggetto oEvent che è una cosa propria del DOM
        if (!oEvent) { // può essere che con Explorer non ci sia l'oggett oEvent, al suo posto viene utilizzato l'oggetto event della classe window
            oEvent = window.event;
        }
	
        oThis.handleKeyUp(oEvent); // assegno a handleKeyUp la gestione dell'evento onkeyUp
    };
    
    
    // per gestire le freccie e l'enter per il menu a tendina
    this.textbox.onkeydown = function (oEvent) {

        if (!oEvent) {
            oEvent = window.event;
        }

        oThis.handleKeyDown(oEvent);
    };
    
    // per gestire la perdita del focus, dovrò nascondere la tendina
     this.textbox.onblur = function () {
        oThis.hideSuggestions();
    };

    this.createDropDown();
};

// è la classe provider
function StateSuggestions(stati) {
this.states = stati;
//    this.states = [
//"name","Abano Terme","Abbadia di Naro","Abbadia San Salvatore","Abbasanta","Abbiadori","Abetone","Acconia","Aci Castello","Acireale","Acitrezza","Acqualagna","Acquappesa","Acquasparta","Acquaviva","Acqui Terme","Affi","Agerola","Aglientu","Agrigento","Agropoli","Alagna Valsesia","Alassio","Alba","Alba Adriatica","Albavilla","Albenga","Alberese","Alberobello","Albinia","Albisola Marina","Alcamo","Alessandria","Alfiano Natta","Alghero","Alice Bel Colle","Alleghe","Alliste","Almenno San Bartolomeo","Altavilla Milicia","Altavilla Vicentina","Altomonte","Altopascio","Amalfi","Amantea","Ameglia","Amendolara","Ameno","Anacapri","Anagni","Ancona","Andria","Anguillara Sabazia","Antagnod","Anterselva di Mezzo","Anticoli Corrado","Antignano","Anzio","Anzola dell'Emilia","Aosta","Appiano Gentile","Appiano sulla Strada del Vino","Aprilia","Ã€rbatax","Arcevia","Arcidosso","Arco","Arcore","Arcugnano","Arena Metato","Arenzano","Arezzo","Argegno","Ariano Irpino","Ariccia","Aritzo","Armeno","Arnesano","Arona","Arosio","Arpino","Arzachena","Arzana","Arzano","Ascea","Asciano","Ascoli Piceno","Asiago","Asolo","Assago","Assemini","Assenza di Brenzone","Assisi","Asti","Atena Lucana","Atessa","Atri","Attigliano","Auer","Avesa","Aviano","Avigliana","Avola","Ayas","Azzano","Azzano Decimo","Azzate","Bacoli","Badesi","Badolato","Badolato Stazione","Bagheria","Baglio Oneto","Bagnaia","Bagnara di Romagna","Bagnatica","Bagni di Lucca","Bagno a Ripoli","Bagno di Romagna","Bagno Vignoni","Baia Domizia","Baja Sardinia","Balestrate","Banchette","Bannia","Barano d'Ischia","Barberino di Val d'Elsa","Bardino Vecchio","Bardolino","Bardonecchia","Bareggio","Barga","Barge","Bari","Bari Sardo","Barletta","Baronissi","Barùmini","Barzanò","Baselga di Pinè","Bassano del Grappa","Bastia","Battipaglia","Baveno","Bazzano","bedizzol","Beinasco","Bellagio","Bellaria","Bellona","Belluno","Belmonte Calabro","Belvedere Marittimo","Belvi","Bene Vagienna","Benevento","Bentivoglio","Berbenno","Bergamo","Bernate Ticino","Bettolle","Bettona","Bevagna","Bezzecca","Biancade","Bibbiena","Bibbona","Bibione","Biella","Bientina","Binasco","Bisceglie","Bitti","Bocenago","Bolgheri","Bologna","Bolotana","Bolsena","Boltiere","Bolzano","Bonarcado","Bonassola","Bonate di Sopra","Borca di Cadore","Bordighera","Borello","Borgaro Torinese","Borgo San Lorenzo","Borgomale","Bormio","Borno","Borrello","Borzonasca","Bosa","Bosa Marina","Bossico","Bovalino Marina","Bovolenta","Bra","Breguzzo","Brentonico","Brenzone","Brescello","Brescia","Bressanone","Breuil-Cervinia","Briatico","Brindisi","Brucoli","Brufa","Brugnera","Brunate","Brunico","Brusaporto","Brusimpiano","Bruzolo","Buddusò","Budoni","Burago di Molgora","Buscate","Buseto Superiore","Bussolengo","Butera","Ca di Sola","Cadelbosco di Sopra","Cadeo","Cagliari","Cala Gonone","Cala Liberotto","Calamandrana","Calasetta","Calatabiano","Calatafimi","Calcinaia","Calco","Calderara di Reno","CALDIERO","Caldogno","Calenzano","Caltagirone","Caluso","Calvagese della Riviera","Calzolaro","Camaiore","Cambiago","Cambiano","Camerino","Camigliatello Silano","Camogli","Campalto","Campegine","Campertogno","Campi Bisenzio","Campiglia","Campiglia Marittima","Campitello di Fassa","Campo nell'Elba","Campo Tures","Campobasso","Campodarsego","Campofelice di Roccella","Campogalliano","Campomarino","Campora San Giovanni","Camposampiero","Camucia","Canalicchio","Canazei","Candiolo","Caneva","Canino","Cannigione","Cannobio","Cantello","Cantù","Caorle","Capaccio-paestum","Capalbio","Capannoli","Capannori","Capo Coda Cavallo","Capo d'Orlando","Capo Vaticano","Capodrise","Capoliveri","Caponago","Capoterra","Capraia","Capri","Cardano al Campo","Cardedu","Carezza al Lago","Carimate","Carini","Carlentini","Carloforte","Carmagnola","Carmignano","Carnago","Caronia","Carpegna","Carpenedolo","Carpi","Carteria di Sesto Rastignano","Carunchio","Casa Maccari","Casacce","Casal Palocco","Casal Velino","Casalabate","Casale Monferrato","Casale sul Sile","Casalmaggiore","Casalnuovo di Napoli","Casamassima","Casamicciola Terme","Casarsa della Delizia","Cascia","Casciana Terme","Cascina","Caselle di Sommacampagna","Caselle Torinese","Caserta","Casetta","Casirile","Casole d'Elsa","Casorate Sempione","Casoria","Cassibile","Cassine","Castagneto Po","Castagnito","Castagnole Lanze","Castegnato","Castel d'Ario","Castel del Piano","Castel di Guido","Castel di Lama","Castel di Sangro","Castel di Tusa","Castel Gandolfo","Castel Giorgio","Castel Maggiore","Castel Rigone","Castel San Gimignano","Castel San Pietro Terme","Castel Volturno","Castelbuono","Castelfiorentino","Castelfranco Emilia","Castelfranco Veneto","Castellabate","Castellammare del Golfo","Castellammare di Stabia","Castellana Grotte","Castelleone","Castelletto di Brenzone","Castelletto sopra Ticino",
//"Castellina in Chianti","Castellina Marittima","Castello del Matese","Castello di Cisterna","Castello di Godego","Castelmola","Castelnovo di Sotto","Castelnuovo Berardenga","Castelnuovo Cilento","Castelnuovo del Garda","Castelnuovo di Garfagnana","Castelnuovo di Magra","Castelraimondo","Castelrotto","Castelsardo","Casteltermini","Castelvetere sul Calore","Castelvetrano","Castelvetro di Modena","Castenaso","Castiadas","Castiglion Fiorentino","Castiglioncello","Castiglione d'Intelvi","Castiglione d'Orcia","Castiglione del Lago","Castiglione della Pescaia","Castiglione della Pescaia","Castiglione delle Stiviere","Castiglione di Sicilia","Castiglione Tinella","Castione della Presolana","Castrocaro Terme","Castrovillari","Catania","Cattolica","Cava de' Tirreni","Cava Manara","Cavaglià","Cavaion Veronese","Cavalese","Cavallino","Cavaso del Tomba","Cavedago","Cavenago di Brianza","Cavernago","Cavi","Cavi di Lavagna","Cavriglia","Cazzago di Pianiga","Cefalù","Celano","Celle Ligure","Cento","Ceprano","Cercola","Cerda","Cernobbio","Cerro Maggiore","Certaldo","Certosa di Pavia","Cervia","Cesana Torinese","Cesano Maderno","Cesena","Cesenatico","Cetona","Cetraro","Chamois","Champoluc","Cherasco","Chia","Chianciano Terme","Chiaramonte Gulfi","Chiarano","Chiassa Superiore","Chiavari","Chienes","Chieri","Chiesa in Valmalenco","Chioano","Chioggia","Chiusa","Chiusdino","Chiusi","Chivasso","Ciampino","Ciggiano","Cima","Cinigiano","Cinisello Balsamo","Cinisi","Cinquale","Cioccaro","Ciriè","Cirò Marina","Cison di Valmarino","Cisternino","Città della Pieve","Città di Castello","Citta' Sant'Angelo","Cittadella","Cittanova","Civate","Civenna","Civita Castellana","Civitavecchia","Civitella d'Agliano","Civitella del Tronto","Civitella in Val di Chiana","Civitella Marittima","Clanezzo","Claviere","Clusane sul Lago","Codognè","Codrongianos","Cogne","Cognola","Cogolo","Coldrano","Colfosco","Colle Val D'Elsa","Collecchio","Collegno","Collelungo","Collesano","Colliano","Cologno al Serio","Cologno Monzese","Colonnella","Comano","Comano Terme","Comerio","Como","Conca dei Marini","Concei","Concorezzo","Conegliano","Conselve","Contursi","Conversano","Corato","Corciano","Corgeno","Coriano","Corinaldo","Corleone","Cornaredo","Correggio","Corsico","Corte Franca","Cortina d'Ampezzo","Cortona","Corvara in Badia","Cosenza","Costa Coralina","Costa Sant' Abramo","Costermano","Costigliole d'Asti","Costigliole Saluzzo","Courmayeur","Creazzo","Cremona","Crespellano","Crone","Cropani","Crotone","Cuneo","Cupra Marittima","Cusago","Custonaci","Cutigliano","Deiva Marina","Deruta","Dese","Desenzano del Garda","Desio","Diano Marina","Dobbiaco","Dogato","Dogliani","Dolo","Domaso","Domus de Maria","Donnalucata","Donnini","Donoratico","Dorgali","Dormelletto","Dossobuono","Dozza","Dronero","Druento","Duino","Eboli","Empoli","Entrèves","Eraclea Mare","Ercolano","Erice","Etroubles","Fabriano","Faedo","Faenza","Faiti","Falconara Marittima","Fano","Farneta","Farra di Soligo","Fasano","Fattoria Mocaio","Favaro Veneto","Favignana","Fener","Fenis","Ferentillo","Ferrara","Fertilia","Fiano Romano","Fiascherino","Fiè","Fiera di Primiero","Fiesole","Fiesso d'Artico","Figline Valdarno","Finale Ligure","Fino del Monte","Fiorano Modenese","Fiorenzuola d'Arda","Firenze","Firenzuola","Fiuggi","Fiumicino","Fobello","Foce","Foggia","Fogliano RedipÃºglia","Folgarids","Folignano","Foligno","Follina","Fondachello","Fondi","Fontane Bianche","Fontanellato","Fonte","Fonteblanda","Fontevivo","Fordongianus","Forino","Forio di Ischia","Forlì","Forlimpopoli","Fort Village","Forte dei Marmi","Fossano","Fossò","Francavilla al Mare","Francavilla di Sicilia","Frascati","Fratta Todina","Frattocchie","Fucecchio","Fuipiano Valle Imagna","Fumane","Furnari","Furore","Gabiano","Gabicce","Gaeta","Gagliano del Capo","Gaiola","Gaiole in Chianti","Galatina","Gallarate","Gallipoli","Galzignano","Gambassi","Garbagnate Milanese","Garda","Gardone Riviera","Gargnano","Gavi","Gavoi","Gavorrano","Genova","Gerace","Gerenzano","Ghirano","Giardini Naxos","Giarre","Giaveno","Ginestra","Ginosa","Gioia del Colle","Gioiosa Marea","Giovinazzo","Girasole","Giugliano in Campania","Giulianova","Giurdignano","Giussano","Golfo Aranci","Gorgo al Monticano","Gorgonzola","Gorizia","Gozzano","Gradara","Gradisca d'Isonzo","Grado","Gragnano","Gravedona","Gravina in Puglia","Gressan","Gressoney-la-TrinitÃ©","Greve","Griante","Grosio","Grosseto","Grottaferrata","Grugliasco","Grutti","Guardamiglio","Guardavalle","Guardia Piemontese Terme","Guarrato","Gubbio","Guidonia","Guspini","Igea Marina","Iglesias","Imola","Imperia","Impruneta","Incisa in Valdarno","Induno Olona","Inverigo","Invorio Inferiore","Ischia","Ischia Porto","Ischitella","Iseo","Isernia","Isola della Certosa","Isola delle Femmine",
//"Isola di Procida","Isola Rossa","Ispica","Ispra","Issengo","Istrana","Ivrea","Jerzu","L'Aquila","La Maddalena","La Morra","La Rustica","La Salle","La Spezia","Lacco Ameno","Ladispoli","Laglio","Lagosanto","Lagundo","Laigueglia","Lainate","Laives","Lallio","Lamezia Terme","Lammari","Lampedusa","Lamporecchio","Lana","Lanusei","Lastra a Signa","Laterina","Latina","Lauro","Lavadina","Lavagna","Lavis","Lazise","Lazzaro","Lecce","Lecco","Leffe","Legnano","Leinì","Leni","Lenno","Lenzumo di Concei","Leporano","Lerchi","Lerici","Lesa","Letoianni","Lettere","Leuca","Levanto","Levanzo","Levico Terme","Lezzeno","Licata","Licola","Lido di Camaiore","Lido di Jesolo","Lido di Mondello","Lido di Ostia","Lido Marini","Lignano Pineta","Lignano Riviera","Lignano Sabbiadoro","Limbiate","Limena","Limito di Pioltello","Limone Piemonte","Limone sul Garda","Lingua","Linguaglossa","Lipari","Liscia di Vacca","Lissone","Livigno","Livorno","Loano","Locorotondo","Lodi","Lomazzo","Lonate Pozzolo","Longa","Longiano","Lonigo","Loreto Aprutino","Loro Ciuffenna","Lotzorai","Lovere","Lucca","Lucera","Lucino","Lugagnano","Lugo","Luino","Lunamatrona","Luogo Santo","Luzzara","Macerata","Macugnaga","Madonna dell'Acqua","Madonna di Campiglio","Magenta","Magione","Maglie","Maiori","Malcesine","Malcontenta","Malfa","Malgrate","Malles Venosta","Manciano","Manerba","Manfredonia","Maniago","Manocalzati","Mantova","Maranello","Maratea","Marausa","Marciaga","Marciana","Marciana Marina","Marco Simone","Marcon","Marebbe","Marettimo","Marghera","Marigliano","Marilleva","Marina di Bibbona","Marina di Camerota","Marina di Campo","Marina di Castagneto","Marina di Cecina","Marina di Gioiosa Ionica","Marina di Grosseto","Marina di Mancaversa","Marina di Massa","Marina di Montemarciano","Marina di Montenero","Marina di Pietrasanta","Marina di Pisa","Marina di portisco","Marina di Ragusa","Marina di Sibari","Marina di Varcaturo","Marina Romea","Marinella","Marino","Marittima","Marostica","Marotta","Marsala","Marsciano","Marta","Martano","Martina Franca","Martinsicuro","Mascali","Maserà di Padova","Mason Vicento","Massa","Massa Lubrense","Massa Marittima","Massino Visconti","Mastiano","Matera","Mattarana","Mattinata","Mazara del Vallo","Medesano","Medicina","Medolago","Melendugno","Meleto","Melito di Napoli","Menaggio","Menfi","Meolo","Merano","Mercogliano","Mergozzo","Merone","Mesagne","Messina","Mestre","Mestrino","Meta","Mezzana","Mezzegra","Migliarino","Milano","Milano Marittima","Milazzo","Milo","Minori","Minucciano","Mira","Mirano","Misano Adriatico","Misterbianco","Moconesi","Modena","Modica","Modolo","Moena","Mogliano","Mogliano Veneto","Molina di Ledro","Molino del Piano","Moltrasio","Mombaruzzo","Monastier di Treviso","Moncalieri","Mondello","Mondovì","Mondragone","Moneglia","Monguelfo","Moniga","Monleale","Monopoli","Monreale","Monsagrati","Monsampolo del Tronto","Monselice","Monsummano","Montaione","Montalbano di Elicona","Montalcino","Montalto di Castro","Montasola","Monte Argentario","Monte Nai","Monte Porzio Catone","Monte Roberto","Monte San Pietro","Monte Sant'Angelo","Montebello Vicentino","Montebelluna","Montecalvo in Foglia","Montecatini","Montecatini Terme","Montecchio Emilia","Montecchio Maggiore","Montecilfone","Montefalco","Montefiascone","Montefiridolfi","Montegridolfo","Montegrosso d'Asti","Montegrotto Terme","Montella","Montelupo Albese","Montelupo Fiorentino","Montemaggiore al Metauro","Montepaone","Montepulciano","Montereale Valcellina","Monteriggioni","Monteroni d'Arbia","Monteroni di Lecce","Monterosso al Mare","Monterotondo","Montesilvano","Montespertoli","Montevarchi","Monteveglio","Monteverdi Marittimo","Monti","Monticelli Terme","Montichiari","Monticiano","Montieri","Montignoso","Montone","Montopoli in Val d'Arno","Monza","Monzuno","Mordano","Morimondo","Motta Camastra","Motta Sant'Anastasia","Mottola","Mozzate","Mozzo","MÃºggia","Mugnano di Napoli","Mulazzo","Muravera","Murlo","Murta Maria","Musso","Nago","Napoli","Narbolia","Narni","Naturno","Neive","Nembro","Nemi","Nerola","Nervi","Nerviano","Nettuno","Neviano","Nichelino","Nicolosi","Nizza di Sicilia","Nizza Monferrato","Nocera Superiore","Nocera Umbra","Noceto","Noci","Nogara","Nogarole Rocca","Nola","Norcia","Noto","Nova Ponente","Nova Siri Marina","Novara","Noventa","Noventa di Piave","Numana","Nuoro","Nus","Nusco","Occhiobello","Oderzo","Oggebbio","Ognina","Olbia","Olda","Oleggio","Oleggio Castello","Oliena","Oliveto Citra","Olmedo","Omegna","Orbetello","Oriago Di Mira","Orio al Serio","Oristano","Orosei","Orroli","Orta San Giulio","Orte","Orvieto","Orvieto Scalo","Osio Sotto","Ospedaletti","Ospedaletto d'Alpinolo","Ospedaletto Euganeo","Ospedaletto Lodigiano","Ossuccio","Ostellato","Ostia Antica","Ostuni","Otranto","Otricoli","Ottaviano","Oulx",
//"Oviglio","Ozzano dell Emilia","Paceco","Paciano","Padenghe sul Garda","Paderno","Padova","Paese","Paestum","Paganico","Pai","Palagiano","Palaia","Palau","Palazzolo dello Stella","Palermo","Palinuro","Pallanza","Pallazzolo sull'Oglio","Palmadula","Palmi","Panarea","Panicale","Pantelleria","Panzano","Paola","Parabiago","Parabita","Paratico","Parghelia","Pari","Parma","Parrano","Pasiano","Passignano sul Trasimeno","Passo del Tonale","Patti","Pavona","Pavone Canavese","Peccioli","Pecetto","Pedara","Pegli","Peio","Pellio Inferiore","Pergine Valdarno","Pergo di Cortona","Pergusa","Perledo","Pero","Perugia","Pesaro","Pescantina","Pescara","Pescasseroli","Peschici","Peschiera","Peschiera del Garda","Pescia","Petersberg","Petralia Sottana","Petrignano","Pettenasco","Piacenza","Pian di Scò","Piancavallo","Pianella","Pianello Vallesina","Piani","Piano di Sorrento","Pianoro","Piazza Armerina","Picerno","Piegaro","Pienza","Pietradefusi","Pietralunga","Pietrasanta","Pieve di Cadore","Pieve di Cento","Pieve Di Ledro","Pieve Fosciana","Pieve Santo Stefano","Pignone","Pimonte","Pinarella","Pinerolo","Pineto","Pinzolo","Piove di Sacco","Piraino","Pisa","Pisogne","Pistoia","Pitigliano","Pizzolungo","Plesio","Poggiardo","Poggibonsi","Poggio","Poggio alla Malva","Poiano","Policastro Bussentino","Policoro","Polignano a Mare","Pomaia","Pomezia","Pompei","Ponsacco","Pontassieve","Ponte di Piave","Ponte Nuovo","Ponte Pattoli","Ponte San Marco","Ponte Tresa","Pontecagnano","Pontecchio","Pontecurone","Pontedera","Pontenure","Ponteranica","Ponti Sul Mincio","Ponza","Ponzano","Popoli","Poppi","Porcari","Porcia","Pordenone","Porlezza","Porretta Terme","Porto Azzurro","Porto Cervo","Porto Cesareo","Porto Conte Torre Nuova","Porto Empedocle","Porto Ercole","Porto Recanati","Porto San Paolo","Porto Santo Stefano","Porto Taverna","Porto Tolle","Portobuffolè","Portoferraio","Portofino","Portopalo","Portoscuso","Portovenere","Positano","Potenza","Potenza Picena","Pove del Grappa","Pozza","Pozzallo","Pozzolengo","Pozzuoli","Praia a Mare","Praiano","Prata di Pordenone","Prato","Prato allo Stelvio","PrÃ©-Saint-Didier","Predazzo","Predore","Preganziol","Pregnana Milanese","Presezzo","Principina Terra","Procchio","Procida","Provaglio d'Iseo","Pula","Pulsano","Punta Ala","Punta Braccetto","Puos d'Alpago","Putignano","Quarrata","Quart","Quarto d'Altino","Quarto Inferiore","Quartu Sant'Elena","Quercegrossa","Quinto di Treviso","Quinto Vicentino","Rablà","Racconigi","Radda in Chianti","Radicofani","Radicondoli","Raffa","Ragusa","Ranco","Randazzo","Rapallo","Rapolano Terme","Rapolla","Rasun di Sopra","Ravello","Ravenna","Recanati","Reggello","Reggio di Calabria","Reggio Emilia","Reggiolo","Regnano","Rende","Renon","Revine Lago","Rezzato","Rho","Riace Marina","Ribera","Ricadi","Riccione","Rieti","Rigolizia","Rigomagno","Rigutino","Rimini","Rio Marina","Riola Sardo","Riolo Terme","Riomaggiore","Riotorto","Riparbella","Ripatransone","Riva del Garda","Riva Valdobbia","Rivalta di Torino","Rivarolo Canavese","Rivisondoli","Rivoli","Rivoltella","Robecchetto con Induno","Rocca di Papa","Rocca Pia","Rocca Priora","Rocca San Giovanni","Roccacasale","Roccalumera","Roccastrada","Roccatederighi","Roccella Ionica","Rocchetta Nervina","Rodi Garganico","Rodigo","Roe","Roma","Romano Canavese","Roncade","Roncadelle","Ronchi dei Legionari","Ronciglione","Roncofreddo","Roncola","Rondissone","Roseto degli Abruzzi","Rosia","Rosolina","Rosta","Rota d'Imagna","Roveleto","Rovereto","Rovigo","Ruà","Rubano","Rubiera","Rufina","Russi","Ruta","Rutigliano","Ruvo di Puglia","Sabaudia","Sacrofano","Saint Vincent","Saint-Pierre","Sala Baganza","Sale Marasino","Salemi","Salerno","Salgareda","Salice Terme","Salò","Salsomaggiore Terme","Saluzzo","Salve","Sammichele di Bari","San Baronto","San Bartolomeo al Mare","San Benedetto del Tronto","San Biase","San Bonifacio","San Candido","San Casciano in Val di Pesa","San Cipriano Picentino","San Cono","San Corrado di Fuori","San Daniele del Friuli","San Domino","San Donà di Piave","San Donato","San Donato Milanese","San Donato Val di Comino","San Felice Circeo","San Felice del Benaco","San Foca","San Francesco al Campo","San Gimignano","San Giorgio Canavese","San Giorgio Di Mantova","San Giovanni a Piro","San Giovanni d'Asso","San Giovanni in Fiore","San Giovanni in Persiceto","San Giovanni la Punta","San Giovanni Lupatoto","San Giovanni Rotondo","San Giovanni Suèrgiu","San Giovanni Valdarno","San Giuliano","San Giuliano Milanese","San Giuliano Terme","San Giustino Valdarno","San Giusto Canavese","San Lazzaro di Savena","San Leonardo in Passiria","San Liberale","San Lorenzo di Sebato","San Lorenzo in Banale","San Macario In Piano","San Marco Argentano","San Martino Buon Albergo","San Martino di Castrozza",
//"San Mauro Torinese","San Miniato","San Momme","San Nicola Arcella","San Nicola La Strada","San Nicolas","San Nicolò","San Nicolò d'Ultimo","San Pantaleo","San Paolo","San Paolo D'Argon","San Pasquale","San Pellegrino Terme","San Priamo","San Quirico d'Orcia","San Rocco a Pilli","San Rocco di Piegara","San Siro","San Teodoro","San Venanzo","San Vendemiano","San Vincenzo","San Vitaliano","San Vito","San Vito","San Vito al Tagliamento","San Vito Chietino","San Vito dei Normanni","San Vito di Cadore","San Vito lo Capo","San Vittore Olona","San Zeno di Montagna","Sandra","Sandrigo","Sangano","Sanguinetto","Sannicandro di Bari","Sanremo","Sansepolcro","Sant Andrea Bagni","Sant Antonio Di Gallura","Sant'Agata di Militello","Sant'Agata sui Due Golfi","Sant'Agnello","Sant'Alessio Siculo","Sant'Ambrogio di Valpolicella","Sant'Andrea","Sant'Andrea Apostolo dello Ionio","Sant'Anna Arresi","Sant'Antimo","Sant'Antìoco","Sant'Antonio Abate","Sant'Antonio de Santadi","Sant'Arcangelo di Romagna","Sant'Ilario d'Enza","Sant'Olcese","Sant'Omobono Imagna","Santa Caterina","Santa Caterina Valfurva","Santa Cesarea Terme","Santa Croce Camerina","Santa Domenica","Santa Domenica Vittoria","Santa Flavia","Santa Luce","Santa Margherita di Pula","Santa Margherita Ligure","Santa Maria","Santa Maria a Monte","Santa Maria degli Angeli","Santa Maria del Giudice","Santa Maria di Castellabate","Santa Maria di Galeria","Santa Maria di Sala","Santa Maria Navarrese","Santa Marinella","Santa Severina","Santa Tecla","Santa Teresa  di Gallura","Santo Stefano al Mare","Santo Stefano di Cadore","Santo Stefano di Sessanio","Santo Stino di Livenza","Sapri","Sardara","Sarnano","Sarnico","Sarnonico","Saronno","Sarteano","Sassari","Sassetta","Sasso d'Ombrone","Sasso Marconi","Sassuolo","Saturnia","Sauze d'Oulx","Savelletri","Savelli","Savigliano","Savignone","Savona","Scalea","Scandicci","Scanzano","Scanzorosciate","Scario","Scarmagno","Scarperia","Scauri","Scena","Scena","Scerni","Scheggino","Schignano (Como)","Sciacca","Scicli","Scoglitti","Scopello","Scorzè","Seggiano","Segonzano","Segrate","Selargius","Sellia Marina","Selva di Fasano","Selva di Val Gardena","Selvino","Semproniano","Senago","Senale-San Felice","Senales","Senigallia","Senise","Sennariolo","Seregno","Serino","Serra de' Conti","Serra San Bruno","Serrada","Serrano","Serrara Fontana","Serravalle Scrivia","Serre di Rapolano","Sesto Fiorentino","Sesto San Giovanni","Sestri Levante","Sestri Ponente","Sestriere","Settala","Settefrati","Siculiana","Siena","Signa","Silea","Silvi Marina","Simeri","Siniscola","Siracusa","Sirmione","Soave","Soiano del Lago","Solarino","Solbiate Olona","Solignano Nuovo","Solofra","Somma Lombardo","Sommacampagna","Sona","Soncino","Sondrio","Soragna","Sorano","Sorbo San Basile","Soriano nel Cimino","Sorrento","Sottomarina","Sovana","Soverato Marina","Sovicille","Specchia","Spello","Spercenigo","Spergolaia","Sperlonga","Spigno Monferrato","Spilamberto","Spilimbergo","Spinetta","Spoleto","Spoltore","Spongano","Spotorno","Squillace","St Ulrich in Groden","Stalettì","Stanghella","Stella Cilento","Stenico","Stezzano","Stia","Stigliano","Stintino","Stra","Stresa","Stromboli","Subbiano","Sulmona","Sulzano","Susa","Susegana","Sutri","Tabiano","Talamone","Taormina","Taranto","Tarquinia","Tavarnelle in Val di Pesa","Tavarnuzze","Teggiano","Telese","Tempio Pausania","Terento","Terme Vigliatore","Termini Imerese","Termoli","Ternate","Terni","Terracina","Terranova di Pollino","Terranuova Bracciolini","Terrasini Favarotta","Tessera","Teulada","Tezze sul Brenta","Thiene","Tignale","Tindari","Tinnura","Tirrenia","Tivoli","Todi","Torbole","Torchiara","Torchiarolo","Tordandrea","Torgiano","Torgnon","Torino","Torre Alfina","Torre Annunziata","Torre Canne","Torre Dei Corsari","Torre del Greco","Torre del Lago Puccini","Torre Pedrera","Torre San Giovanni Ugento","Torrecuso","Torregrotta","Torri del Benaco","Torrita di Siena","Toscolano","Tottubella","Trabia","Trani","Trapani","Trappeto","Trebbiantico","Trecase","Trecastagni","Treia","Tremezzo","Tremosine","Trento","Tresnuraghes","Trevi","Trevignano Romano","Treviolo","Treviso","Trezzano Rosa","Trezzano sul Naviglio","Trezzo sull'Adda","Trieste","Triflisco","Trinitapoli","Trivignano","Tropea","Tuglie","Tuoro sul Trasimeno","Turi","Tuscania","Udine","Ugento","Ulassai","Umbertide","Urbino","Usmate Velate","Ustica","Vada","Vagliagli","Val Della Torre","Valdaora di Sotto","Valderice","Valdidentro","Valeggio sul Mincio","Valledoria","Valles","Vallombrosa","Valmadrera","Valsolda","Valtournanche","Vandoies","Vaprio d'Adda","Varago","Varallo Pombia","Varazze","Varedo","Varenna","Varese","Varigotti","Vasto","Vattaro","Velletri","Velturno","Venetico","Venezia","Venezia Lido","Ventimiglia","Ventotene","Verbania","Vercurago",
//"Vergiate","Vermezzo","Verona","Verrand","Verrès","Verucchio","Vetralla","Vezzano Ligure","Viareggio","Vibo Valentia","Vicchio","Vicenza","Vico del Gargano","Vico Equense","Vieste","Vietri sul Mare","Vigarano Mainarda","Vigasio","Vigevano","Vigo di Fassa","Vigolo Baselga","Vigone","Villa d'Almè","Villa Ottone","Villa San Giovanni","Villa San Pietro","Villabassa","Villacidro","Villafranca di Verona","Villagrande","Villalta","Villammare","Villanova","Villanova","Villar San Costanzo","Villasimius","Villorba","Vimercate","Vimodrone","Vinci","Viterbo","Vitorchiano","Vittoria","Vittorio Veneto","Vitulazio","Vivaro","Vizzola Ticino","Vogogna","Volpiano","Volterra","Vulcano","Zafferana Etnea","Zambrone","Zero Branco","Zevio","Zibello","Zola Predosa","Zone"];
}

// funzione che richiede i suggerimenti passandogli un AutoSuggestControl
StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,  bTypeAhead) {
    var aSuggestions = [];
    var sTextboxValue = oAutoSuggestControl.textbox.value;
    
	// MODIFICA Giuseppe imposto a > 2 per visualizzare la lista dei suggerimenti a partire della terza lettera digitata 
    if (sTextboxValue.length > 2){
    
	// trasformo tutto in minuscolo
	var sTextboxValueLC = sTextboxValue.toLowerCase();
    
        //search for matching states
        for (var i=0; i < this.states.length; i++) { 
	   
	   // trasformo anche i suggerimenti in minuscolo
	   var sStateLC = this.states[i].toLowerCase();
	    
            if (sStateLC.indexOf(sTextboxValueLC) == 0) {
                
		//aSuggestions.push(this.states[i]);
		//suggerisco la stringa già presente, quindi con i caratteri maiuscoli e minuscoli, più la stringa rimanente suggerita
		aSuggestions.push(sTextboxValue + this.states[i].substring(sTextboxValue.length));
            } 
        }
    }

    //provide suggestions to the control
    //oAutoSuggestControl.autosuggest(aSuggestions);
    oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
};

//Modifica Giuseppe x più parole. Quando si digita spazio si suggerisce la parola successiva
StateSuggestions.prototype.requestSuggestions1 = function (oAutoSuggestControl /*:AutoSuggestControl*/,  bTypeAhead) {
    sFlagParolaSuccessiva = "S";
    var aSuggestions = [];
    var sTextboxValue = oAutoSuggestControl.textbox.value;
    if (sTextboxValueSalva.length == 0){
    	sTextboxValueSalva = sTextboxValue.substring(0,sTextboxValue.length);
    }

   	sTextboxValue = sTextboxValue.substring(sTextboxValueSalva.length);
    //alert(sTextboxValue)
    //alert(sTextboxValue.length)
     
	// MODIFICA Giuseppe imposto a > 2 per visualizzare la lista dei suggerimenti a partire della terza lettera digitata 
    if (sTextboxValue.length > 2){
			// trasformo tutto in minuscolo
			var sTextboxValueLC = sTextboxValue.toLowerCase();
    
      //search for matching states
      for (var i=0; i < this.states.length; i++) { 
	   
			   // trasformo anche i suggerimenti in minuscolo
			   var sStateLC = this.states[i].toLowerCase();
	    
        if (sStateLC.indexOf(sTextboxValueLC) == 0) {
                
					//aSuggestions.push(this.states[i]);
					//suggerisco la stringa già presente, quindi con i caratteri maiuscoli e minuscoli, più la stringa rimanente suggerita
					aSuggestions.push(sTextboxValueSalva + " " + sTextboxValue + this.states[i].substring(sTextboxValue.length));
        } 
      }

    }

    //provide suggestions to the control
    //oAutoSuggestControl.autosuggest(aSuggestions);
    oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
};
// Fine Modifica Giuseppe 
