/**
         * Chiamata asincrona per inserire all'interno della mappa i pushpin
         * dei PoI, ottenuti tramite l'API <code>poi_update</code>.
         */
        private async void PrintPoi()
        {
            // chiamata alla webapi per la lista PoI
            string json = await WebAPI.poi_update("2", false);

            List <PoI> poiList = new List <PoI>();

            // recupera la lista dei PoI
            poiList = Utils.DeserializeJSONArray <PoI>(json);

            // chiamata alla webapi per la lista categorie
            json = await WebAPI.categories_update("1", false);

            List <Categoria> catList = new List <Categoria>();

            // recupera la lista delle categorie
            catList = Utils.DeserializeJSONArray <Categoria>(json);

            if (poiList.Count != 0)
            {
                Image catImage;
                // creo un array di PoIonTap contenente dati che mi servirà passare nel Tap del PoI
                PoIonTap[] poiTap = new PoIonTap[poiList.Count];
                for (int i = 0; i < poiList.Count; ++i)
                {
                    poiTap[i] = new PoIonTap();
                }

                poiLayer = new MapLayer();
                // per ogni poi aggiunge il pushpin alla mappa
                for (int i = 0; i < poiList.Count; ++i)
                {
                    MapOverlay myOverlay = new MapOverlay();
                    // estraggo l'immagine della categoria a cui il PoI appartiene
                    catImage = catList[poiList[i].idcategory - 1].GetNormImage();
                    // riempio il poiTap con i dati che mi serve passare nella imm_Tap
                    poiTap[i].id   = poiList[i].idpoi;
                    poiTap[i].imm  = catImage;
                    poiTap[i].name = poiList[i].short_description;

                    // setto l'immagine della categoria come pushpin
                    myOverlay.Content = poiTap[i].imm;
                    // setto il DataContext da passare nella funzione imm_Tap
                    poiTap[i].imm.DataContext = poiTap[i];
                    poiTap[i].imm.Tap        += imm_Tap;

                    myOverlay.GeoCoordinate = poiList[i].GetCoordinate();
                    poiLayer.Add(myOverlay);
                }
                poiMap.Layers.Add(poiLayer);
            }
        }
        /*
         * Funzione che si attiva al tap di un pushpin
         */
        void imm_Tap(object sender, System.Windows.Input.GestureEventArgs e)
        {
            // ottengo i parametri che ho passsato e li metto nell'item
            PoIonTap item = ((FrameworkElement)e.OriginalSource).DataContext as PoIonTap;

            // creo l'hyperlink button per passare alla pagina dei dettagli
            HyperlinkButton button = new HyperlinkButton();

            button.Content = "more details >>>";
            // crea la querystring
            string qString = "poi_id=" + item.id;

            // imposto la qString come DataContext che verrà poi passata alla button_Tap
            button.DataContext = qString;
            button.Tap        += button_Tap;

            // creo una CustomMessaBox per visualizzare il nome del PoI su cui clicco
            CustomMessageBox cmb = new CustomMessageBox()
            {
                Caption            = item.name,
                Content            = button,
                LeftButtonContent  = "Close",
                RightButtonContent = "Add CheckIn",
            };

            cmb.Dismissed += (s1, e1) =>
            {
                switch (e1.Result)
                {
                case CustomMessageBoxResult.RightButton:

                    if ((!IsolatedStorageSettings.ApplicationSettings.Contains("userPK")) ||
                        (int)IsolatedStorageSettings.ApplicationSettings["userPK"] == 0)
                    {
                        MessageBox.Show("Non puoi aggiungere un Checkin se non sei registrato!");
                    }
                    else
                    {
                        int userPK = (int)IsolatedStorageSettings.ApplicationSettings["userPK"];
                        //Se l'utente clicca il righbutton allora invoco la funzione per aggiungere il checkin
                        addCheckIn("1", item.id.ToString(), "manual", userPK.ToString());
                    }
                    break;
                }
            };
            cmb.Show();
        }