/// <summary>
        /// Method to get available trips for given provider
        /// </summary>
        /// <param name="ProviderName"></param>
        /// <param name="objClientAPIDetails"></param>
        /// <returns>Returns JSON string with list of available trips</returns>
        private SeatsInfo GetTripDetailsByProviderName(ClientAPIDetails objClientAPIDetails, BusesSearchFilter objBusesSearchFilter, String tripId, String markUpFare, String SeatLayoutId)
        {
            SeatsInfo objSeatsInfo = new SeatsInfo();
            try
            {
                switch (objClientAPIDetails.ProviderName)
                {

                    case "ABHIBUS":
                    case "SVR":
                    case "KALLADA":
                    case "KAVERI":
                    case "RAJESH":
                    case "SAIANJANA":
                        AbhibusAPI clsAbhibusAPI = new AbhibusAPI();
                        objSeatsInfo = clsAbhibusAPI.getBusSeatLayout(objBusesSearchFilter.SourceID
                                            , objBusesSearchFilter.DestinationID
                                            , objBusesSearchFilter.JourneyDate
                                            , tripId
                                            , "0"
                                            , objClientAPIDetails.APIURL
                                            , objClientAPIDetails.ConsumerKey);
                        break;
                    case "BITLA":
                    case "MORNINGSTAR":
                        BitlaAPI clsBitlaAPI = new BitlaAPI();
                        objSeatsInfo = clsBitlaAPI.getServiceDetails(tripId
                                            , objClientAPIDetails.APIURL
                                            , objClientAPIDetails.ConsumerKey);

                        break;
                    case "TICKETGOOSE":
                        TicketGooseAPI clsTicketGooseAPI = new TicketGooseAPI();
                        objSeatsInfo = clsTicketGooseAPI.getTripDetailsV2(objBusesSearchFilter.SourceID
                                            , objBusesSearchFilter.DestinationID
                                            , objBusesSearchFilter.JourneyDate
                                            , tripId
                                            , objClientAPIDetails.APIURL
                                            , objClientAPIDetails.ConsumerKey
                                            , objClientAPIDetails.ConsumerSecret);
                        break;
                    //easy bus 18-05-2013
                    case "EASYBUS":
                        EasybusAPI clsEasyBusAPI = new EasybusAPI();
                        objSeatsInfo = clsEasyBusAPI.getLayoutDetails(objBusesSearchFilter.SourceID
                                            , objBusesSearchFilter.DestinationID
                                            , objBusesSearchFilter.JourneyDate
                                            , tripId
                                            , SeatLayoutId
                                            , markUpFare
                                            , "0"
                                            , objClientAPIDetails.APIURL
                                            , objClientAPIDetails.ConsumerKey);
                        break;
                    default:
                        break;
                }
                objSeatsInfo.providerName = objClientAPIDetails.ProviderName;
            }
            catch (Exception ex)
            {
                //to do
                //Log Exception
            }
            return objSeatsInfo;
        }
        private BusesSearchFilter GetCityIDsOfProviders(BusesSearchFilter objBusesSearchFilter, ClientAPIDetails objClientAPIDetails,
            int sourceId, int destinationId, String dateofjourney)
        {
            DataSet dsProviders = new DataSet();
            if (objClientAPIDetails.ProviderName != "MORNINGSTAR")
            {
                ClsBAL bal = new ClsBAL();
                bal.ProviderID = objClientAPIDetails.ProviderID;
                bal.sourceId = sourceId;
                bal.destionationId = destinationId;
                dsProviders = bal.GetAPIID();

                //DataTable DtRSources = new DataTable();
                //DataSet DsRSources = new DataSet();
                //DsRSources.ReadXml(System.Web.HttpContext.Current.Server.MapPath("~/App_Data/" + "SourcesAPI.xml"));
                //IEnumerable<DataRow> API_Source_ID = from i in DsRSources.Tables[0].AsEnumerable()
                //                                     where i.Field<string>("Source_ID") == sourceId.ToString() && i.Field<string>("Provider_Id") == objClientAPIDetails.ProviderID.ToString()
                //                                     select i;
                //if (API_Source_ID.Count() > 0)
                //{
                //    DtRSources = API_Source_ID.CopyToDataTable();
                //    DataSet ds = new DataSet();
                //    ds.Tables.Add(DtRSources);

                //}

            }
            else
            {
                ClsBAL bal = new ClsBAL();
                bal.ProviderID = 102;
                bal.sourceId = sourceId;
                bal.destionationId = destinationId;
                dsProviders = bal.GetAPIID();
            }

            //DataSet dsProviders = ExecuteDataSet("SELECT " + objClientAPIDetails.ProviderName + " FROM dbo.tbl_Sources WHERE Source_ID = '" + sourceId + "' " +
            //                                       "SELECT " + objClientAPIDetails.ProviderName + " FROM dbo.tbl_Sources WHERE Source_ID = '" + destinationId + "'");

            if (dsProviders.Tables[0].Rows.Count > 0 && dsProviders.Tables[1].Rows.Count > 0)
            {
            if (objClientAPIDetails.ProviderName == "BITLA")
            {
                foreach (DataRow bsdr in dsProviders.Tables[0].Rows)
                {
                    if (source_ids.ToString() == "")
                    {
                        source_ids = bsdr[0].ToString();
                    }
                    else
                    {
                        source_ids = source_ids + "," + bsdr[0].ToString();
                    }
                }
                foreach (DataRow bddr in dsProviders.Tables[1].Rows)
                {
                    if (Destination_Ids.ToString() == "")
                    {
                        Destination_Ids = bddr[0].ToString();
                    }
                    else
                    {
                        Destination_Ids = Destination_Ids + "," + bddr[0].ToString();
                    }
                }
            }
            else if (objClientAPIDetails.ProviderName == "TICKETGOOSE")
            {
                foreach (DataRow tsdr in dsProviders.Tables[0].Rows)
                {
                    if (Tsource_ids.ToString() == "")
                    {
                        Tsource_ids = tsdr[0].ToString();
                    }
                    else
                    {
                        Tsource_ids = Tsource_ids + "," + tsdr[0].ToString();
                    }
                }
                foreach (DataRow tddr in dsProviders.Tables[1].Rows)
                {
                    if (TDestination_Ids.ToString() == "")
                    {
                        TDestination_Ids = tddr[0].ToString();
                    }
                    else
                    {
                        TDestination_Ids = TDestination_Ids + "," + tddr[0].ToString();
                    }
                }
            }
            else if (objClientAPIDetails.ProviderName == "MORNINGSTAR")
            {
                foreach (DataRow msdr in dsProviders.Tables[0].Rows)
                {
                    if (Msource_ids.ToString() == "")
                    {
                        Msource_ids = msdr[0].ToString();
                    }
                    else
                    {
                        Msource_ids = Msource_ids + "," + msdr[0].ToString();
                    }
                }
                foreach (DataRow mddr in dsProviders.Tables[1].Rows)
                {
                    if (MDestination_Ids.ToString() == "")
                    {
                        MDestination_Ids = mddr[0].ToString();
                    }
                    else
                    {
                        MDestination_Ids = MDestination_Ids + "," + mddr[0].ToString();
                    }
                }
            }
            else if (objClientAPIDetails.ProviderName == "RAJESH")
            {
                foreach (DataRow rsdr in dsProviders.Tables[0].Rows)
                {
                    if (Rsource_ids.ToString() == "")
                    {
                        Rsource_ids = rsdr[0].ToString();
                    }
                    else
                    {
                        Rsource_ids = Rsource_ids + "," + rsdr[0].ToString();
                    }
                }
                foreach (DataRow rddr in dsProviders.Tables[1].Rows)
                {
                    if (RDestination_Ids.ToString() == "")
                    {
                        RDestination_Ids = rddr[0].ToString();
                    }
                    else
                    {
                        RDestination_Ids = RDestination_Ids + "," + rddr[0].ToString();
                    }
                }
            }
            else if (objClientAPIDetails.ProviderName == "KALLADA")
            {
                foreach (DataRow kdsdr in dsProviders.Tables[0].Rows)
                {
                    if (KDsource_ids.ToString() == "")
                    {
                        KDsource_ids = kdsdr[0].ToString();
                    }
                    else
                    {
                        KDsource_ids = KDsource_ids + "," + kdsdr[0].ToString();
                    }
                }
                foreach (DataRow kdddr in dsProviders.Tables[1].Rows)
                {
                    if (KDDestination_Ids.ToString() == "")
                    {
                        KDDestination_Ids = kdddr[0].ToString();
                    }
                    else
                    {
                        KDDestination_Ids = KDDestination_Ids + "," + kdddr[0].ToString();
                    }
                }
            }
            else if (objClientAPIDetails.ProviderName == "KAVERI")
            {
                foreach (DataRow ksdr in dsProviders.Tables[0].Rows)
                {
                    if (Ksource_ids.ToString() == "")
                    {
                        Ksource_ids = ksdr[0].ToString();
                    }
                    else
                    {
                        Ksource_ids = Ksource_ids + "," + ksdr[0].ToString();
                    }
                }
                foreach (DataRow kddr in dsProviders.Tables[1].Rows)
                {
                    if (KDestination_Ids.ToString() == "")
                    {
                        KDestination_Ids = kddr[0].ToString();
                    }
                    else
                    {
                        KDestination_Ids = KDestination_Ids + "," + kddr[0].ToString();
                    }
                }
            }
            else if (objClientAPIDetails.ProviderName == "SAIANJANA")
            {
                foreach (DataRow ssdr in dsProviders.Tables[0].Rows)
                {
                    if (SSsource_ids.ToString() == "")
                    {
                        SSsource_ids = ssdr[0].ToString();
                    }
                    else
                    {
                        SSsource_ids = SSsource_ids + "," + ssdr[0].ToString();
                    }
                }
                foreach (DataRow ssddr in dsProviders.Tables[1].Rows)
                {
                    if (SSDestination_Ids.ToString() == "")
                    {
                        SSDestination_Ids = ssddr[0].ToString();
                    }
                    else
                    {
                        SSDestination_Ids = SSDestination_Ids + "," + ssddr[0].ToString();
                    }
                }
            }
            else if (objClientAPIDetails.ProviderName == "SVR")
            {
                foreach (DataRow sdr in dsProviders.Tables[0].Rows)
                {
                    if (Ssource_ids.ToString() == "")
                    {
                        Ssource_ids = sdr[0].ToString();
                    }
                    else
                    {
                        Ssource_ids = Ssource_ids + "," + sdr[0].ToString();
                    }
                }
                foreach (DataRow sddr in dsProviders.Tables[1].Rows)
                {
                    if (SDestination_Ids.ToString() == "")
                    {
                        SDestination_Ids = sddr[0].ToString();
                    }
                    else
                    {
                        SDestination_Ids = SDestination_Ids + "," + sddr[0].ToString();
                    }
                }
            }
            //easybus
            else if (objClientAPIDetails.ProviderName == "EASYBUS")
            {
                foreach (DataRow Edr in dsProviders.Tables[0].Rows)
                {
                    if (Esource_ids.ToString() == "")
                    {
                        Esource_ids = Edr[0].ToString();
                        //Esource_ids = "38";
                    }
                    else
                    {
                        Esource_ids = Esource_ids + "," + Edr[0].ToString();
                    }
                }
                foreach (DataRow Eddr in dsProviders.Tables[1].Rows)
                {
                    if (EDestination_Ids.ToString() == "")
                    {
                        EDestination_Ids = Eddr[0].ToString();
                       // EDestination_Ids = "32";
                    }
                    else
                    {
                        EDestination_Ids = EDestination_Ids + "," + Eddr[0].ToString();
                    }
                }
                //EDestination_Ids=38+","+32;
            }

            objBusesSearchFilter.SourceID = 0;
            // objBusesSearchFilter.DestinationID = int.Parse(dsProviders.Tables[1].Rows[0][0].ToString());
            objBusesSearchFilter.DestinationID = 0;
            objBusesSearchFilter.JourneyDate = dateofjourney;
            }
            dsProviders.Dispose();
            return objBusesSearchFilter;
        }
        /// <summary>
        /// Method to get available trips for given provider
        /// </summary>
        /// <param name="ProviderName"></param>
        /// <param name="objClientAPIDetails"></param>
        /// <returns>Returns JSON string with list of available trips</returns>
        private AvailableTrips GetAvailableTripsByProviderName(ClientAPIDetails objClientAPIDetails, BusesSearchFilter objBusesSearchFilter)
        {
            AvailableTrips objAvailableTrips = new AvailableTrips();
            List<object> objlist = new List<object>();
            switch (objClientAPIDetails.ProviderName)
            {

                case "ABHIBUS":
                case "SVR":
                case "KALLADA":
                case "KAVERI":
                case "RAJESH":
                case "SAIANJANA":
                    AbhibusAPI clsAbhibusAPI = new AbhibusAPI();
                    objAvailableTrips = clsAbhibusAPI.getBusAvailability(objBusesSearchFilter.SourceID
                                        , objBusesSearchFilter.DestinationID
                                        , objBusesSearchFilter.JourneyDate
                                        , 6
                                        , "0"
                                        , objClientAPIDetails.APIURL
                                        , objClientAPIDetails.ConsumerKey
                                        , objClientAPIDetails.ProviderName);
                    break;
                case "BITLA":
                case "MORNINGSTAR":
                    BitlaAPI clsBitlaAPI = new BitlaAPI();
                    objAvailableTrips = clsBitlaAPI.getAvailableRoutes(objBusesSearchFilter.SourceID
                                        , objBusesSearchFilter.DestinationID
                                        , objBusesSearchFilter.JourneyDate
                                        , objClientAPIDetails.APIURL
                                        , objClientAPIDetails.ConsumerKey, objClientAPIDetails.ProviderID);
                    break;
                case "TICKETGOOSE":
                    TicketGooseAPI clsTicketGooseAPI = new TicketGooseAPI();
                    objAvailableTrips = clsTicketGooseAPI.getTripListV2(objBusesSearchFilter.SourceID
                                        , objBusesSearchFilter.DestinationID
                                        , objBusesSearchFilter.JourneyDate
                                        , objClientAPIDetails.APIURL
                                        , objClientAPIDetails.ConsumerKey
                                        , objClientAPIDetails.ConsumerSecret, objClientAPIDetails.ProviderID);
                    break;
                //easybus
                case "EASYBUS":
                    EasybusAPI clsEasyBusAPI = new EasybusAPI();

                    break;
                default:
                    break;

            }

            return objAvailableTrips;
        }
        private AvailableTrips GETBITLROUTES(BusesSearchFilter objBusesSearchFilter, ClientAPIDetails objClientAPIDetails,
           int sourceId, int destinationId, String dateofjourney)
        {
            ClsBAL bal = new ClsBAL();
            bal.ProviderID = objClientAPIDetails.ProviderID;
            bal.sourceId = sourceId;
            bal.destionationId = destinationId;
            DataSet dsProviders = bal.GetAPIID();

            //DataSet dsProviders = ExecuteDataSet("SELECT " + objClientAPIDetails.ProviderName + " FROM dbo.tbl_Sources WHERE Source_ID = '" + sourceId + "' " +
            //                                       "SELECT " + objClientAPIDetails.ProviderName + " FROM dbo.tbl_Sources WHERE Source_ID = '" + destinationId + "'");

            if (dsProviders.Tables[0].Rows.Count > 0 && dsProviders.Tables[1].Rows.Count > 0)
            {
                if (objClientAPIDetails.ProviderName == "BITLA")
                {
                    for (int k = 0; k < dsProviders.Tables.Count; k++)
                    {

                        BSID = dsProviders.Tables[0].Rows[k][0].ToString() == "" ? 0 : int.Parse(dsProviders.Tables[0].Rows[k][0].ToString());
                        BDID = dsProviders.Tables[1].Rows[k][0].ToString() == "" ? 0 : Convert.ToInt32(dsProviders.Tables[1].Rows[k][0]);
                        if (BSID > 0 && BDID > 0)
                        {
                            BDate = dateofjourney;
                            BURL = objClientAPIDetails.APIURL + "/";
                            BConsumerKey = objClientAPIDetails.ConsumerKey;
                            BCOnsumerSecretKey = objClientAPIDetails.ConsumerSecret;
                            BPID = objClientAPIDetails.ProviderID;
                            BProviderName = objClientAPIDetails.ProviderName;
                            Tbus = BITLA(BURL, BConsumerKey, BCOnsumerSecretKey, BPID, BProviderName, BSID, BDID, BDate);
                            bus = trips(Tbus);
                        }
                    }
                }
            }

            dsProviders.Dispose();
            return bus;
        }
        /// <summary>
        /// Method to get API providers list for given client credentials
        /// </summary>
        /// <param name="ConsumerKey"></param>
        /// <param name="ConsumerSecret"></param>
        private void GetAPIProvidersList(String ConsumerKey, String ConsumerSecret)
        {
            ClientAPIList objClientAPIList = new ClientAPIList();
            DataSet dsProviders = new DataSet();
            Connection = new SqlConnection(ConnectionString);
            command = new SqlCommand();
            command.CommandType = CommandType.StoredProcedure;
            command.CommandText = "SP_WebAPI_GetProviders";
            command.Parameters.Add("@ConsumerKey", SqlDbType.VarChar).Value = ConsumerKey;
            command.Parameters.Add("@ConsumerSecret", SqlDbType.VarChar).Value = ConsumerSecret;
            command.Connection = Connection;
            Connection.Open();
            SqlDataAdapter da = new SqlDataAdapter(command);
            da.Fill(dsProviders);
            Connection.Close();

            //Check if atleast one provider is accessible
            if (dsProviders != null && dsProviders.Tables.Count > 0 && dsProviders.Tables[0].Rows.Count > 0)
            {
                //Loop each record, get the provider api details and add to objClientAPIList
                foreach (DataRow drProvider in dsProviders.Tables[0].Rows)
                {
                    ClientAPIDetails objClientAPIDetails = new ClientAPIDetails();
                    objClientAPIDetails.ClientID = int.Parse(drProvider["Client_ID"].ToString());
                    objClientAPIDetails.ProviderID = int.Parse(drProvider["Provider_ID"].ToString());
                    objClientAPIDetails.APIURL = drProvider["API_URL"].ToString();
                    objClientAPIDetails.ConsumerKey = drProvider["API_ConsumerKey"].ToString();
                    objClientAPIDetails.ConsumerSecret = drProvider["API_ConsumerSecret"].ToString();
                    objClientAPIDetails.DomainIP = drProvider["Domain_IP"].ToString();
                    objClientAPIDetails.ProviderName = drProvider["Provider_Name"].ToString();
                    objClientAPIList.Add(objClientAPIDetails);
                }
                //Set cache to expire after 20 minutes,i.e., the object expires
                //  and is removed from the cache 20 minutes after it is last accessed.
                HttpContext.Current.Cache.Add("ClientAPI-" + ConsumerKey, objClientAPIList, null, System.Web.Caching.Cache.NoAbsoluteExpiration,
                        new TimeSpan(0, 10, 0), System.Web.Caching.CacheItemPriority.Default, null);
                //HttpContext.Current.Cache["ClientAPI-" + ConsumerKey] = objClientAPIList;
            }
        }