
/**
 * Provides suggestions for state names (USA).
 * @class
 * @scope public
 */
function StateSuggestions() {
    this.states = [
		"'s-Gravenhage", "'s-Hertogenbosch", "'s-Hertogenbosch Oost", "'t Harde", "Aalten", "Abcoude", "Akkrum", "Alkmaar", "Alkmaar Noord", "Almelo", "Almelo de Riet", "Almere", "Almere Buiten", "Almere Centrum", "Almere Muziekwijk", "Almere Oostvaarders", "Almere Parkwijk", "Alphen a/d Rijn", "Alphen aan den Rijn", "Amersfoort", "Amersfoort Schothorst", "Amersfoort Vathorst", "Amsterdam Amstel", "Amsterdam Bijlmer", "Amsterdam Centraal", "Amsterdam Lelylaan", "Amsterdam Muiderpoort", "Amsterdam RAI", "Amsterdam Sloterdijk", "Amsterdam Zuid WTC", "Anna Paulowna", "Apeldoorn", "Apeldoorn De Maten", "Apeldoorn Osseveld", "Appingedam", "Arkel", "Arnemuiden", "Arnhem", "Arnhem Presikhaaf", "Arnhem Velperpoort", "Arnhem Zuid", "Assen", "Baarn", "Baflo", "Barendrecht", "Barneveld Centrum", "Barneveld Noord", "Bedum", "Beek-Elsloo", "Beesd", "Beilen", "Bergen op Zoom", "Berkel en Rodenrijs", "Best", "Beverwijk", "Bilthoven", "Blerick", "Bloemendaal", "Bodegraven", "Borne", "Boskoop", "Bovenkarspel Flora", "Bovenkarspel-Grootebroek", "Boxmeer", "Boxtel", "Breda", "Breda-Prinsenbeek", "Breukelen", "Brummen", "Buitenpost", "Bunde", "Bunnik", "Bussum Zuid", "Capelle Schollevaar", "Castricum", "Chevremont", "Coevorden", "Cuijk", "Culemborg", "Daarlerveen", "Dalen", "Dalfsen", "De Eschmarke", "De Vink", "Deinum", "Delden", "Delft", "Delft Zuid", "Delfzijl", "Delfzijl West", "Den Bosch", "Den Bosch Oost", "Den Dolder", "Den Haag Centraal", "Den Haag HS", "Den Haag Laan v NOI", "Den Haag Mariahoeve", "Den Haag Moerwijk", "Den Haag Ypenburg", "Den Helder", "Den Helder Zuid", "Deurne", "Deventer", "Deventer Colmschate", "Didam", "Diemen", "Diemen Zuid", "Dieren", "Doetinchem", "Doetinchem-De Huet", "Dordrecht", "Dordrecht Stadspolders", "Dordrecht Zuid", "Driebergen-Zeist", "Driehuis", "Driemanspolder", "Dronrijp", "Duiven", "Duivendrecht", "Echt", "Ede Centrum", "Ede-Wageningen", "Eijsden", "Eindhoven", "Eindhoven Beukenlaan", "Elst", "Emmen", "Emmen Bargeres", "Enkhuizen", "Enschede", "Enschede Drienerlo", "Ermelo", "Etten-Leur", "Eygelshoven", "Franeker", "Gaanderen", "Geerdijk", "Geldermalsen", "Geldrop", "Geleen Oost", "Geleen-Lutterade", "Gilze-Rijen", "Glanerbrug", "Goes", "Goor", "Gorinchem", "Gouda", "Gouda Goverwelle", "Gramsbergen", "Grijpskerk", "Groningen", "Groningen Noord", "Grou-Jirnsum", "Haarlem", "Haarlem Spaarnwoude", "Harde ('t)", "Hardenberg", "Harderwijk", "Hardinxveld-Giessendam", "Haren", "Harlingen", "Harlingen Haven", "Heemskerk", "Heemstede-Aerdenhout", "Heerenveen", "Heerhugowaard", "Heerlen", "Heeze", "Heiloo", "Heino", "Helmond", "Helmond 't Hout", "Helmond Brandevoort", "Helmond Brouwhuis", "Hemmen-Dodewaard", "Hengelo", "Hengelo Oost", "Hertogenb ('s) Oost", "Hertogenbosch ('s)", "Hillegom", "Hilversum", "Hilversum Noord", "Hilversum Sportpark", "Hindeloopen", "Hoek van Holland Haven", "Hoek van Holland Strand", "Hoensbroek", "Hollandsche Rading", "Holten", "Hoofddorp", "Hoogeveen", "Hoogezand-Sappemeer", "Hoogkarspel", "Hoorn", "Hoorn Kersenboogerd", "Horst-Sevenum", "Houten", "Houten Castellum", "Houthem-St Gerlach", "Hurdegaryp", "IJlst", "Kampen", "Kapelle-Biezelinge", "Kerkrade Centrum", "Kesteren", "Klarenbeek", "Klimmen-Ransdaal", "Koog Bloemwijk", "Koog-Zaandijk", "Koudum-Molkwerum", "Krabbendijke", "Krommenie-Assendelft", "Kropswolde", "Kruiningen-Yerseke", "Lage Zwaluwe", "Landgraaf", "Leerdam", "Leeuwarden", "Leeuwarden Camminghaburen", "Leiden Centraal", "Leiden Lammenschans", "Leidschendam-Voorburg", "Lelystad Centrum", "Lichtenvoorde-Groenlo", "Lochem", "Loppersum", "Lunteren", "Maarn", "Maarssen", "Maassluis", "Maassluis West", "Maastricht", "Maastricht Randwyck", "Mantgum", "Marienberg", "Martenshoek", "Meerssen", "Meppel", "Middelburg", "Naarden-Bussum", "Nieuw Amsterdam", "Nieuw Vennep", "Nieuwerkerk ad IJssel", "Nieuweschans", "Nijkerk", "Nijmegen", "Nijmegen Dukenburg", "Nijmegen Heyendaal", "Nijmegen Lent", "Nijverdal", "Nunspeet", "Nuth", "Obdam", "Oisterwijk", "Oldenzaal", "Olst", "Ommen", "Onze Lieve Vrouwe ter Nood", "Oosterbeek", "Opheusden", "Oss", "Oss West", "Oudenbosch", "Overveen", "Pijnacker", "Purmerend", "Purmerend Overwhere", "Putten", "Raalte", "Ravenstein", "Reuver", "Rheden", "Rhenen", "Rijssen", "Rijswijk", "Rilland-Bath", "Roermond", "Roodeschool", "Roosendaal", "Rosmalen", "Rotterdam Alexander", "Rotterdam Blaak", "Rotterdam Centraal", "Rotterdam Hofplein", "Rotterdam Kleiweg", "Rotterdam Lombardijen", "Rotterdam Noord", "Rotterdam Stadion", "Rotterdam Wilgenplas", "Rotterdam Zuid", "Ruurlo", "Santpoort Noord", "Santpoort Zuid", "Sappemeer Oost", "Sauwerd", "Schagen", "Scheemda", "Schiedam Centrum", "Schiedam Nieuwland", "Schin op Geul", "Schinnen", "Schiphol", "Sittard", "Sliedrecht", "Sneek", "Sneek Noord", "Soest", "Soest Zuid", "Soestdijk", "Spaubeek", "Stavoren", "Stedum", "Steenwijk", "Susteren", "Swalmen", "Tegelen", "Terborg", "Tiel", "Tiel Passewaaij", "Tilburg", "Tilburg Reeshof", "Tilburg West", "Twello", "Uitgeest", "Uithuizen", "Uithuizermeeden", "Usquert", "Utrecht Centraal", "Utrecht Lunetten", "Utrecht Maliebaan", "Utrecht Overvecht", "Utrecht Terwijde", "Valkenburg", "Varsseveld", "Veenendaal Centrum", "Veenendaal West", "Veenendaal-de Klomp", "Veenwouden", "Velp", "Venlo", "Venray", "Vierlingsbeek", "Vlaardingen Centrum", "Vlaardingen Oost", "Vlaardingen West", "Vleuten", "Vlissingen", "Vlissingen Souburg", "Voerendaal", "Voorburg", "Voorburg t Loo", "Voorhout", "Voorschoten", "Voorst-Empe", "Vorden", "Vriezenveen", "Vroomshoop", "Vught", "Waddinxveen", "Waddinxveen Noord", "Warffum", "Weert", "Weesp", "Wehl", "Wezep", "Wierden", "Wijchen", "Wijhe", "Winschoten", "Winsum", "Winterswijk", "Winterswijk West", "Woerden", "Wolfheze", "Wolvega", "Workum", "Wormerveer", "Zaandam", "Zaandam Kogerveld", "Zaltbommel", "Zandvoort aan Zee", "Zetten-Andelst", "Zevenaar", "Zevenbergen", "Zoetermeer", "Zoetermeer Buytenwegh", "Zoetermeer Centrum West", "Zoetermeer De Leyens", "Zoetermeer Delftsewallen", "Zoetermeer Dorp", "Zoetermeer Leidsewallen", "Zoetermeer Meerzicht", "Zoetermeer Oost", "Zoetermeer Palenstein", "Zoetermeer Seghwaert", "Zoetermeer Stadhuis", "Zoetermeer Voorweg", "Zuidbroek", "Zuidhorn", "Zutphen", "Zwaagwesteinde", "Zwijndrecht", "Zwolle"
	];
}

/**
 * Request suggestions for the given autosuggest control. 
 * @scope protected
 * @param oAutoSuggestControl The autosuggest control to provide suggestions for.
 */
StateSuggestions.prototype.requestSuggestions = function (oAutoSuggestControl /*:AutoSuggestControl*/,
                                                          bTypeAhead /*:boolean*/) {
    var aSuggestions = [];
    var sTextboxValue = oAutoSuggestControl.textbox.value;
    
    if (sTextboxValue.length > 0){
    
        //convert value in textbox to lowercase
        var sTextboxValueLC = sTextboxValue.toLowerCase();

        //search for matching states
        for (var i=0; i < this.states.length && aSuggestions.length < 9; i++) { 

            //convert state name to lowercase
            var sStateLC = this.states[i].toLowerCase();
           
            //compare the lowercase versions for case-insensitive comparison
            if (sStateLC.indexOf(sTextboxValueLC) == 0) {

                //add a suggestion using what's already in the textbox to begin it                
                aSuggestions.push(this.states[i]);
            } 
        }
    }

    //provide suggestions to the control
    oAutoSuggestControl.autosuggest(aSuggestions, bTypeAhead);
};
