/// <summary>
        /// Starts authorization process. Opens and requests for access if VK App is installed.
        /// Otherwise SDK will navigate current app to SDK navigation page and start OAuth in WebBrowser.
        /// </summary>
        /// <param name="scopeList">List of permissions for your app</param>
        /// <param name="revoke">If true user will be allowed to logout and change user</param>
        /// <param name="forceOAuth">SDK will use only OAuth authorization via WebBrowser</param>
        public static void Authorize(List <String> scopeList, bool revoke = false, bool forceOAuth = false,
                                     LoginType loginType = LoginType.WebView)
        {
            try
            {
                CheckConditions();
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.ToString());
                return;
            }

            if (scopeList == null)
            {
                scopeList = new List <string>();
            }

            // Force OFFLINE scope using
            if (!scopeList.Contains(VKScope.OFFLINE))
            {
                scopeList.Add(VKScope.OFFLINE);
            }


            switch (loginType)
            {
            case LoginType.VKApp:
#if SILVERLIGHT
#if DEBUG
                MessageBox.Show("Currently only the webview authentication is supported for Silverlight apps.");
#endif

                // do not currently support vk app authorization
                RootFrame.Navigate(new Uri(string.Format(VK_NAVIGATE_STR_FRM, string.Join(",", scopeList), revoke), UriKind.Relative));
#else
                AuthorizeVKApp(scopeList, revoke);
#endif
                break;

            default:
#if SILVERLIGHT
                RootFrame.Navigate(new Uri(string.Format(VK_NAVIGATE_STR_FRM, string.Join(",", scopeList), revoke), UriKind.Relative));
#else
                var loginUserControl = new VKLoginUserControl();

                loginUserControl.Scopes = scopeList;
                loginUserControl.Revoke = revoke;

                loginUserControl.ShowInPopup(Windows.UI.Xaml.Window.Current.Bounds.Width,
                                             Windows.UI.Xaml.Window.Current.Bounds.Height);
#endif
                break;
            }
        }
        internal static void InvokeValidationRequest(VKValidationRequest request, Action <VKValidationResponse> callback)
        {
            VKExecute.ExecuteOnUIThread(() =>
            {
#if SILVERLIGHT
                VKParametersRepository.SetParameterForId("ValidationCallback", callback);
                RootFrame.Navigate(new Uri(string.Format("/VK.WindowsPhone.SDK;component/Pages/VKLoginPage.xaml?ValidationUri={0}", HttpUtility.UrlEncode(request.ValidationUri)), UriKind.Relative));
#else
                var loginUserControl = new VKLoginUserControl();

                loginUserControl.ValidationUri      = request.ValidationUri;
                loginUserControl.ValidationCallback = callback;

                loginUserControl.ShowInPopup(Windows.UI.Xaml.Window.Current.Bounds.Width,
                                             Windows.UI.Xaml.Window.Current.Bounds.Height);
#endif
            });
        }