public ActionResult Index()
        {
            #region variables
            string request     = null;
            string redirectUrl = null;
            bool   test        = false;
            #endregion
            #region try
            try
            {
                #region variables setup
                request = ServiceLayer.Utilities.RequestString(Request);
                var    queryString = Request.QueryString;
                string Host        = Request.Url.Host;
                string RawUrl      = Request.RawUrl;
                ViewBag.Host   = Host;
                ViewBag.RawUrl = RawUrl;
                string _host = Host;
                if (RawUrl != "/")
                {
                    _host += RawUrl;
                }
                string fullBaseReturnUrl = @"http://" + Host + BaseReturnUrl + @"/";
                #endregion

                #region ALWAYS ON
                if ((!string.IsNullOrEmpty(Request.UserAgent)) &&
                    (Request.UserAgent.ToLower().Contains("alwayson")))
                {
                    redirectUrl = "Always On: " + Request.UserAgent;
                    return(View());
                }
                #endregion
                #region GOOGLE BOT
                if (Request.UserHostAddress.StartsWith("66."))
                {
                    redirectUrl = "Google BOT: " + Request.UserHostAddress;
                    return(View());
                }
                #endregion

                #region check AJAX call
                if (Request.Headers["X-Requested-With"] != null && Request.Headers["X-Requested-With"] == "XMLHttpRequest")
                {
                    throw new Exception("Ajax call");
                }
                #endregion

                #region ServiceElement
                ServiceElement element = Utilities.GetServiceByDomain(service, Host, RawUrl);
                #endregion

                ////////////////////////////// FORCE TEST //////////////////////////////
                if ((queryString != null) && (queryString["sid"] != null))
                {
                    element = service.get(int.Parse(queryString["sid"].ToString()));
                    test    = true;
                }
                ////////////////////////////// FORCE TEST //////////////////////////////

                ////////////////////////////// FORCE //////////////////////////////
                //if (!test)
                //    return Redirect(element.DigitalGOCatalogue);
                ////////////////////////////// FORCE //////////////////////////////

                #region murp
                string tid = DateTime.Now.Ticks.ToString();
                string id  = element.ServiceID + "_index_" + tid;
                return(Redirect(redirectUrl = endUser.GetMobileRecognitonUrl(element.ServiceID.ToString(), fullBaseReturnUrl + id)));

                #endregion
            }
            #endregion
            #region catch
            catch (Exception ex)
            {
                string error = "Error in function " + this.GetType().Name + "." + MethodBase.GetCurrentMethod().Name + " - " + ex.Message;
                trace.traceError(error);
                ViewBag.message = error;
                return(View("Error"));
            }
            #endregion
            #region finally
            finally
            {
                //DateTime _responseTime = DateTime.Now;
                //LogEntry _logEntry = new LogEntry
                //{
                //    LogName = _LogName,
                //    internal_id = _internal_id,
                //    requestTime = _requestTime,
                //    responseTime = _responseTime,
                //    request = _request,
                //    response = _response,
                //    internal_parameters = JsonConvert.SerializeObject(_internal_parameters)
                //};
                //await log.trackAsync(_logEntry);

                JObject _jobject = new JObject();
                _jobject.Add(new JProperty("header", "Index"));
                _jobject.Add(new JProperty("request", request));
                _jobject.Add(new JProperty("redirectUrl", redirectUrl));
                string message = _jobject.ToString(Formatting.None);
                trace.trace(message);
            }
            #endregion
        }