private async Task <ActionResult> StartHire(HireBusVm data)
        {
            var HireDeparture   = data.DeparturePoint.ToString();
            var HireDestination = data.DestinationPoint.ToString();

            DistanceDouble DistanceModel = (DistanceDouble)Session["distance"];

            double distanceInKiloMeter = DistanceModel.distanceInKiloMeter;

            if (distanceInKiloMeter == 0)
            {
                // ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
            }
            else
            {
                Session["kilometerdis"] = distanceInKiloMeter;

                var origins      = HireDeparture;
                var destinations = HireDestination;

                Session["origins"]      = HireDeparture;
                Session["destinations"] = HireDestination;

                GetHireVehicleRequest       getHireVehicleRequest       = new GetHireVehicleRequest();
                GetHireVehicleRequestReturn getHireVehicleRequestReturn = new GetHireVehicleRequestReturn();

                getHireVehicleRequest.HiredServiceType = 0;
                if (data.TripType == 2)
                {
                    Session["roundTripHire"] = 1;
                    getHireVehicleRequest.HiredServiceType            = 1;
                    getHireVehicleRequestReturn.HiredServiceType      = 1;
                    getHireVehicleRequestReturn.OnewayDistanceApart   = distanceInKiloMeter.ToString();
                    getHireVehicleRequestReturn.OnewayPickupLocation  = origins;
                    getHireVehicleRequestReturn.OneWayDropoffLocation = destinations;
                    getHireVehicleRequestReturn.OnewayPickupDate      = data.DepartureDate;
                    getHireVehicleRequestReturn.ReturnDistanceApart   = distanceInKiloMeter.ToString();
                    getHireVehicleRequestReturn.ReturnDropoffLocation = origins;
                    getHireVehicleRequestReturn.ReturnPickupDate      = data.ReturnDate;
                    getHireVehicleRequestReturn.ReturnPickupLocation  = destinations;
                    Session["ReturnHireDate"] = data.ReturnDate;

                    if (data.RetainOvernight == true)
                    {
                        getHireVehicleRequest.IsSleepOver       = true;
                        getHireVehicleRequestReturn.IsSleepOver = true;
                        Session["IsSleepOver"] = 1;
                    }
                }
                else
                {
                    Session["roundTripHire"] = 0;
                }

                getHireVehicleRequest.OnewayPickupLocation  = origins;
                getHireVehicleRequest.OneWayDropoffLocation = destinations;
                getHireVehicleRequest.OnewayDistanceApart   = distanceInKiloMeter.ToString();
                getHireVehicleRequest.OnewayPickupDate      = data.DepartureDate;
                Session["DistanceApart"] = distanceInKiloMeter.ToString();

                getVehicleForHireResponse VehicleForHireResponse = new getVehicleForHireResponse();
                if (data.TripType == 2)
                {
                    VehicleForHireResponse = await Logical.GetBusesForHireReturn(getHireVehicleRequestReturn);

                    Session["HireResponse"]   = VehicleForHireResponse;
                    Session["Hiredate"]       = data.DepartureDate;
                    Session["HireReturndate"] = data.ReturnDate;
                    Session["pageTogo"]       = "/Pages/HireResult";
                    return(RedirectToAction("HireResult", "Pages"));
                }
                else
                {
                    VehicleForHireResponse = await Logical.GetBusesForHire(getHireVehicleRequest);

                    Session["HireResponse"] = VehicleForHireResponse;
                    Session["Hiredate"]     = data.DepartureDate;
                    // Response.Redirect("Hire-Result.aspx", false);
                    Session["pageTogo"] = "/Pages/HireResult";
                    return(RedirectToAction("HireResult", "Pages"));
                }

                #region MyRegion

                #endregion
            }

            Session["pageTogo"] = "/Pages/HireResult";
            return(RedirectToAction("HireResult", "Pages"));
        }
        public async Task <JsonResult> processGoogleMap(HireBusVm data)
        {
            var            origins      = data.DeparturePoint;
            var            destinations = data.DestinationPoint;
            DistanceDouble distance     = new DistanceDouble();
            var            departLat    = 0.00;
            var            departLng    = 0.00;
            var            departCord   = "";

            var arriveLat  = 0.00;
            var arriveLng  = 0.00;
            var arriveCord = "";

            string resultxml = string.Empty;

            string urlDepart = "https://maps.googleapis.com/maps/api/geocode/json?address=" + origins + "&key=" + ConfigurationManager.AppSettings["GoogleAPIKey"] + "";
            string urlArrive = "https://maps.googleapis.com/maps/api/geocode/json?address=" + destinations + "&key=" + ConfigurationManager.AppSettings["GoogleAPIKey"] + "";

            try
            {
                mapRootObject MapResponseJsonDepart = await Logical.GetDepartCord(urlDepart);

                List <mapResult> googleResponseElementDepart = MapResponseJsonDepart.results;

                if (googleResponseElementDepart.Count > 0)
                {
                    foreach (mapResult rowDepart in googleResponseElementDepart)
                    {
                        departLat  = rowDepart.geometry.location.lat;
                        departLng  = rowDepart.geometry.location.lng;
                        departCord = departLat + "," + departLng;
                    }
                }


                mapRootObject MapResponseJsonArrive = await Logical.GetArriveCord(urlArrive);

                List <mapResult> googleResponseElementArrive = MapResponseJsonArrive.results;

                if (googleResponseElementArrive.Count > 0)
                {
                    foreach (mapResult rowArrive in googleResponseElementArrive)
                    {
                        arriveLat  = rowArrive.geometry.location.lat;
                        arriveLng  = rowArrive.geometry.location.lng;
                        arriveCord = arriveLat + "," + arriveLng;
                    }
                }
            }
            catch (Exception ex)
            {
                Logical.WriteToLog(ex.Message + "\n" + ex.Source + "\n" + ex.StackTrace);
            }

            try
            {
                string url = "https://maps.googleapis.com/maps/api/distancematrix/json?origins=" + departCord + "&destinations=" + arriveCord + "&mode=driving&key=" + ConfigurationManager.AppSettings["GoogleAPIKey"] + "";

                GoogleRootObject GoogleMapResponseJson = await Logical.GetDistance(url);

                List <Row> googleResponseElement = GoogleMapResponseJson.rows;
                if (googleResponseElement.Count > 0)
                {
                    foreach (Row row in googleResponseElement)
                    {
                        List <Element> elements = row.elements;
                        foreach (Element element in elements)
                        {
                            distance.distanceInKiloMeter = Convert.ToDouble(element.distance.value / 1000.00);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logical.WriteToLog(ex.Message + "\n" + ex.Source + "\n" + ex.StackTrace);
            }

            Session["distance"] = distance;

            await  StartHire(data);

            var hiredResponse = (getVehicleForHireResponse)Session["HireResponse"];

            String page = Session["pageTogo"] as String;

            Tuple <DistanceDouble, String, getVehicleForHireResponse> response = new Tuple <DistanceDouble, String, getVehicleForHireResponse>(distance, page, hiredResponse);

            return(new JsonResult {
                Data = response, JsonRequestBehavior = JsonRequestBehavior.AllowGet
            });
        }