protected void btnAutoComplete_Click(object sender, EventArgs e)
    {
        MapService.MapServiceSoapClient mapService = new MapService.MapServiceSoapClient();
        XElement xeAutoComplete = mapService.AddressAutoComplete(tbAddress.Text);

        string xml = xeAutoComplete.ToString();

        string xmlFormatted = XDocument.Parse(xml).ToString();

        tbAutoCompleteResults.Text = xmlFormatted;
    }
    private void GetGeoPoints(string address, ref decimal latitude, ref decimal longitude)
    {
        MapService.MapServiceSoapClient mapService = new MapService.MapServiceSoapClient();


        XmlDocument pXML    = new XmlDocument();
        XElement    latlong = mapService.AddressAutoCompleteAndPlaceDetailsCombined(address);
        string      GetLatitudeLongitudeXML = latlong.ToString();

        pXML.LoadXml(GetLatitudeLongitudeXML);
        XmlNode xn = pXML.SelectSingleNode("//geometry/location/lat");

        latitude = Convert.ToDecimal(xn.InnerXml);

        xn        = pXML.SelectSingleNode("//geometry/location/lng");
        longitude = Convert.ToDecimal(xn.InnerXml);
    }
    protected void lbClients_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Place the code to call the PeopleService to GET the specific Client selected
        //      Use XPath to find the City in the first WorkLocation
        //      Use XPath to find the Address in the first Work Location
        //      Use XPath to find the Encounters
        //          Add each encounter into the listbox
        //          Clear out the encounter textbox
        //Place the code to call the Weather Service to obtain the temperature and precipitation based on the city of the client
        //      You will need to use XPath to locate the information in the weather information returned
        //If a Field Rep is also selected, call the DistanceService to obtain the distance between them using the first WorkLocation in each

        string id  = lbClients.SelectedItem.Value;
        string url = @"http://*****:*****@type")?.InnerXml;
            string EncounterDescription = xnEncounter.InnerXml;
            lbClientEncounters.Items.Add(new ListItem(EncounterType + ": " + EncounterDescription));
        }


        tbClientPrecipitation.Text = "";
        tbClientTemperature.Text   = "";
        WeatherService.WeatherServiceSoapClient weather = new WeatherService.WeatherServiceSoapClient();
        try
        {
            XElement xeWeather = weather.GetWeather(ClientCity);
            if (xeWeather != null)
            {
                string xml = xeWeather.ToString();

                XmlDocument xmlWeather = new XmlDocument();
                xmlWeather.LoadXml(xml);

                XmlNode xn             = xmlWeather.SelectSingleNode(@"/current/temperature/@value");
                double  tempKelvin     = Convert.ToDouble(xn.Value);
                double  tempCelcius    = Math.Round(tempKelvin - 273.15, 2);
                double  tempFahrenheit = Math.Round(tempCelcius * 1.8 + 32, 2);
                string  temp           = tempCelcius.ToString() + "C" + "   " + tempFahrenheit.ToString() + "F";
                tbClientTemperature.Text = temp;

                xn = xmlWeather.SelectSingleNode(@"/current/precipitation");
                string precipitation = xn.InnerXml;
                tbClientPrecipitation.Text = precipitation;
            }
        }
        catch (Exception ex)
        { }

        if (tbFieldRepAddress.Text != "") // A field rep has been selected and the address saved off
        {
            string addressClient   = tbClientAddress.Text;
            string addressFieldRep = tbFieldRepAddress.Text;

            MapService.MapServiceSoapClient mapService = new MapService.MapServiceSoapClient();
            XElement    xeAddressAutoComplete          = mapService.AddressAutoComplete(addressClient);
            XmlDocument xmlAddressAutoComplete         = new XmlDocument();
            xmlAddressAutoComplete.LoadXml(xeAddressAutoComplete.ToString());
            XmlNode xnPlaceID      = xmlAddressAutoComplete.SelectSingleNode("//place_id");
            string  sPlaceIDClient = xnPlaceID.InnerXml;

            xeAddressAutoComplete  = mapService.AddressAutoComplete(addressFieldRep);
            xmlAddressAutoComplete = new XmlDocument();
            xmlAddressAutoComplete.LoadXml(xeAddressAutoComplete.ToString());
            xnPlaceID = xmlAddressAutoComplete.SelectSingleNode("//place_id");
            string sPlaceIDFieldRep = xnPlaceID.InnerXml;


            XElement    xePlaceDetails  = mapService.PlaceDetails(sPlaceIDClient);
            XmlDocument xmlPlaceDetails = new XmlDocument();
            xmlPlaceDetails.LoadXml(xePlaceDetails.ToString());
            string ClientLat = xmlPlaceDetails.SelectSingleNode("//geometry/location/lat")?.InnerXml;
            string ClientLng = xmlPlaceDetails.SelectSingleNode("//geometry/location/lng")?.InnerXml;

            xePlaceDetails  = mapService.PlaceDetails(sPlaceIDFieldRep);
            xmlPlaceDetails = new XmlDocument();
            xmlPlaceDetails.LoadXml(xePlaceDetails.ToString());
            string FieldRepLat = xmlPlaceDetails.SelectSingleNode("//geometry/location/lat")?.InnerXml;
            string FieldRepLng = xmlPlaceDetails.SelectSingleNode("//geometry/location/lng")?.InnerXml;


            DistanceService.DistanceServiceClient distanceService = new DistanceService.DistanceServiceClient();
            double dblDistance = distanceService.DistanceBetweenTwoPoints(double.Parse(ClientLat), double.Parse(ClientLng), double.Parse(FieldRepLat), double.Parse(FieldRepLng));
            tbDistance.Text = Math.Round(dblDistance, 2).ToString();
        }
    }
    protected void lbFieldReps_SelectedIndexChanged(object sender, EventArgs e)
    {
        //Place the code to call the PeopleService to GET the specific Field Rep selected
        //      Use XPath to find the City in the first WorkLocation
        //      Use XPath to find the Address in the first Work Location
        //Place the code to call the Weather Service to obtain the temperature and humidity based on the city of the Field Rep
        //      You will need to use XPath to locate the information in the weather information returned
        //If a Client is also selected, call the DistanceService to obtain the distance between them using the first WorkLocation in each

        string id  = lbFieldReps.SelectedItem.Value;
        string url = @"http://*****:*****@"/current/temperature/@value");
                double  tempKelvin     = Convert.ToDouble(xn.Value);
                double  tempCelcius    = Math.Round(tempKelvin - 273.15, 2);
                double  tempFahrenheit = Math.Round(tempCelcius * 1.8 + 32, 2);
                string  temp           = tempCelcius.ToString() + "C" + "   " + tempFahrenheit.ToString() + "F";
                tbFieldRepsTemperature.Text = temp;

                xn = xmlWeather.SelectSingleNode(@"/current/humidity/@value");
                string humidity = xn.InnerXml;
                xn        = xmlWeather.SelectSingleNode(@"/current/humidity/@unit");
                humidity += xn.InnerXml;
                tbFieldRepsHumidity.Text = humidity;
            }
        }
        catch (Exception ex)
        { }

        if (tbClientAddress.Text != "") // A Client has been selected and the address saved off
        {
            string addressClient   = tbClientAddress.Text;
            string addressFieldRep = tbFieldRepAddress.Text;

            MapService.MapServiceSoapClient mapService = new MapService.MapServiceSoapClient();
            XElement    xeAddressAutoComplete          = mapService.AddressAutoComplete(addressClient);
            XmlDocument xmlAddressAutoComplete         = new XmlDocument();
            xmlAddressAutoComplete.LoadXml(xeAddressAutoComplete.ToString());
            XmlNode xnPlaceID      = xmlAddressAutoComplete.SelectSingleNode("//place_id");
            string  sPlaceIDClient = xnPlaceID.InnerXml;

            xeAddressAutoComplete  = mapService.AddressAutoComplete(addressFieldRep);
            xmlAddressAutoComplete = new XmlDocument();
            xmlAddressAutoComplete.LoadXml(xeAddressAutoComplete.ToString());
            xnPlaceID = xmlAddressAutoComplete.SelectSingleNode("//place_id");
            string sPlaceIDFieldRep = xnPlaceID.InnerXml;


            XElement    xePlaceDetails  = mapService.PlaceDetails(sPlaceIDClient);
            XmlDocument xmlPlaceDetails = new XmlDocument();
            xmlPlaceDetails.LoadXml(xePlaceDetails.ToString());
            string ClientLat = xmlPlaceDetails.SelectSingleNode("//geometry/location/lat")?.InnerXml;
            string ClientLng = xmlPlaceDetails.SelectSingleNode("//geometry/location/lng")?.InnerXml;

            xePlaceDetails  = mapService.PlaceDetails(sPlaceIDFieldRep);
            xmlPlaceDetails = new XmlDocument();
            xmlPlaceDetails.LoadXml(xePlaceDetails.ToString());
            string FieldRepLat = xmlPlaceDetails.SelectSingleNode("//geometry/location/lat")?.InnerXml;
            string FieldRepLng = xmlPlaceDetails.SelectSingleNode("//geometry/location/lng")?.InnerXml;


            DistanceService.DistanceServiceClient distanceService = new DistanceService.DistanceServiceClient();
            double dblDistance = distanceService.DistanceBetweenTwoPoints(double.Parse(ClientLat), double.Parse(ClientLng), double.Parse(FieldRepLat), double.Parse(FieldRepLng));
            tbDistance.Text = Math.Round(dblDistance, 2).ToString();
        }
    }
    protected void lbClients_SelectedIndexChanged(object sender, EventArgs e)
    {
        string id = lbClients.SelectedItem.Value;

        if (id.Contains("|"))
        {
            string[] ClientStuff = id.Split('|');
            id = ClientStuff[0];
        }
        string url = @"http://*****:*****@type")?.InnerXml;
            string EncounterDescription = xnEncounter.InnerXml;
            lbClientEncounters.Items.Add(new ListItem(EncounterType + ": " + EncounterDescription));
        }


        tbClientPrecipitation.Text = "";
        tbClientTemperature.Text   = "";

        //**Making the SOAP Weather Service Call**

        WeatherService.WeatherServiceSoapClient weather = new WeatherService.WeatherServiceSoapClient();
        try
        {
            XElement xeWeather = weather.GetWeather(ClientCity);
            if (xeWeather != null)
            {
                string xml = xeWeather.ToString();

                XmlDocument xmlWeather = new XmlDocument();
                xmlWeather.LoadXml(xml);

                XmlNode xn             = xmlWeather.SelectSingleNode(@"/current/temperature/@value");
                double  tempKelvin     = Convert.ToDouble(xn.Value);
                double  tempCelcius    = Math.Round(tempKelvin - 273.15, 2);
                double  tempFahrenheit = Math.Round(tempCelcius * 1.8 + 32, 2);
                string  temp           = tempCelcius.ToString() + "C" + "   " + tempFahrenheit.ToString() + "F";
                tbClientTemperature.Text = temp;

                xn = xmlWeather.SelectSingleNode(@"/current/precipitation");
                string precipitation = xn.InnerXml;
                tbClientPrecipitation.Text = precipitation;
            }
        }
        catch (Exception ex)
        { }

        if (tbFieldRepAddress.Text != "") // A field rep has been selected and the address saved off
        {
            string addressClient   = tbClientAddress.Text;
            string addressFieldRep = tbFieldRepAddress.Text;

            //**Making the SOAP Map Service Call**

            MapService.MapServiceSoapClient mapService = new MapService.MapServiceSoapClient();
            XElement    xeAddressAutoComplete          = mapService.AddressAutoComplete(addressClient);
            XmlDocument xmlAddressAutoComplete         = new XmlDocument();
            xmlAddressAutoComplete.LoadXml(xeAddressAutoComplete.ToString());
            XmlNode xnPlaceID      = xmlAddressAutoComplete.SelectSingleNode("//place_id");
            string  sPlaceIDClient = xnPlaceID.InnerXml;

            xeAddressAutoComplete  = mapService.AddressAutoComplete(addressFieldRep);
            xmlAddressAutoComplete = new XmlDocument();
            xmlAddressAutoComplete.LoadXml(xeAddressAutoComplete.ToString());
            xnPlaceID = xmlAddressAutoComplete.SelectSingleNode("//place_id");
            string sPlaceIDFieldRep = xnPlaceID.InnerXml;


            XElement    xePlaceDetails  = mapService.PlaceDetails(sPlaceIDClient);
            XmlDocument xmlPlaceDetails = new XmlDocument();
            xmlPlaceDetails.LoadXml(xePlaceDetails.ToString());
            string ClientLat = xmlPlaceDetails.SelectSingleNode("//geometry/location/lat")?.InnerXml;
            string ClientLng = xmlPlaceDetails.SelectSingleNode("//geometry/location/lng")?.InnerXml;

            xePlaceDetails  = mapService.PlaceDetails(sPlaceIDFieldRep);
            xmlPlaceDetails = new XmlDocument();
            xmlPlaceDetails.LoadXml(xePlaceDetails.ToString());
            string FieldRepLat = xmlPlaceDetails.SelectSingleNode("//geometry/location/lat")?.InnerXml;
            string FieldRepLng = xmlPlaceDetails.SelectSingleNode("//geometry/location/lng")?.InnerXml;


            DistanceService.DistanceServiceClient distanceService = new DistanceService.DistanceServiceClient();
            double dblDistance = distanceService.DistanceBetweenTwoPoints(double.Parse(ClientLat), double.Parse(ClientLng), double.Parse(FieldRepLat), double.Parse(FieldRepLng));
            tbDistance.Text = Math.Round(dblDistance, 2).ToString();
        }
        FillInClientMarkers();
    }