/// -----------------------------------------------------------------------------
        /// <summary>
        /// Page_Load runs when the Page loads
        /// </summary>
        /// <remarks>
        /// </remarks>
        /// <history>
        /// 	[cnurse]	02/09/2007	Created
        /// </history>
        /// -----------------------------------------------------------------------------
        protected override void OnLoad(EventArgs e)
        {
            SetBrowserLanguage();
            LocalizePage();
            
            base.OnLoad(e);
            visitSite.Click += VisitSiteClick;           

            //Create Status Files
            if (!File.Exists(StatusFile)) File.CreateText(StatusFile).Close();

            // Hide Licensing Step if no License Info is available
            LicenseActivation.Visible = IsProOrEnterprise && !String.IsNullOrEmpty(_installConfig.License.AccountEmail) && !String.IsNullOrEmpty(_installConfig.License.InvoiceNumber);

            if ((!IsProOrEnterprise) && templateList.Items.FindItemByValue("Mobile Website.template") != null)
            {
                templateList.Items.Remove(templateList.Items.FindItemByValue("Mobile Website.template"));
            }

            if (HttpContext.Current.Request.RawUrl.EndsWith("&initiateinstall"))
            {
                var synchConnectionString = new SynchConnectionStringStep();
                synchConnectionString.Execute();
                Response.Redirect(HttpContext.Current.Request.RawUrl.Replace("&initiateinstall", "&executeinstall"), true);
            }
            else if (HttpContext.Current.Request.RawUrl.EndsWith("&executeinstall"))
            {
                try
                {
                    _installerRunning = true;
                    LaunchAutoInstall();
                }
                catch(Exception)
                {
                    //Redirect back to first page
                    Response.Redirect(HttpContext.Current.Request.RawUrl.Replace("&executeinstall", ""), true);
                }
            }
            else if (!Page.IsPostBack)
            {
                if (_installerRunning)
                {
                    LaunchAutoInstall();
                }
                else
                {
                    SetupDatabaseInfo();
                    BindLanguageList();
                    
                    if (CheckDatabaseConnection())
                    {
                        Initialise();
                    }
                    else
                    {
                        //Install but connection string not configured to point at a valid SQL Server
                        UpdateMachineKey();
                    }

                    if (!Regex.IsMatch(Request.Url.Host, "^([a-zA-Z0-9.-]+)$", RegexOptions.IgnoreCase))
                    {
                        lblError.Visible = true;
                        lblError.Text = Localization.Localization.GetString("HostWarning", LocalResourceFile);
                    }

                    //ensure web.config is not read-only
                    var configPath = Server.MapPath("~/web.config");
                    try
                    {
                        var attributes = File.GetAttributes(configPath);
                        //file is read only
                        if ((attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly)
                        {
                            attributes = attributes & ~FileAttributes.ReadOnly;
                            File.SetAttributes(configPath, attributes);
                        }
                    }
                    catch (Exception ex)
                    {
                        lblError.Visible = true;
                        lblError.Text = ex.ToString();
                        return;
                    }

                    //Adding ClientDependency Resources config to web.config                    
                    if (!ClientResourceManager.IsInstalled() && ValidatePermissions().Item1)
                    {
                        ClientResourceManager.AddConfiguration();
                        Response.Redirect(Request.RawUrl);
                        //TODO - this may cause infinite loop
                    }

                    //Ensure connection strings are in synch
                    var synchConnectionString = new SynchConnectionStringStep();
                    synchConnectionString.Execute();
                    if (synchConnectionString.Status == StepStatus.AppRestart) Response.Redirect(HttpContext.Current.Request.RawUrl, true);

                    txtUsername.Text = _installConfig.SuperUser.UserName;
                    if (_installConfig.Portals.Count > 0)
                    {
                        txtWebsiteName.Text = _installConfig.Portals[0].PortalName;
                        //TODO Language and Template
                    }
                }
            }

        }
        private void InstallApplication()
        {
            //the application uses a two step installation process. The first step is used to update 
            //the Web.config with any configuration settings - which forces an application restart. 
            //The second step finishes the installation process and provisions the site.

            string installationDate = Config.GetSetting("InstallationDate");

            if (installationDate == null || String.IsNullOrEmpty(installationDate))
            {
                string strError = Config.UpdateMachineKey();
                if (String.IsNullOrEmpty(strError))
                {
                    //send a new request to the application to initiate step 2
                    Response.Redirect(HttpContext.Current.Request.RawUrl, true);
                }
                else
                {
                    //403-3 Error - Redirect to ErrorPage
                    //403.3 means directory permissions issue
                    string strURL = "~/ErrorPage.aspx?status=403_3&error=" + strError;
                    HttpContext.Current.Response.Clear();
                    HttpContext.Current.Server.Transfer(strURL);
                }
            }
            else
            {
                var synchConnectionString = new SynchConnectionStringStep();
                synchConnectionString.Execute();
                if (synchConnectionString.Status == StepStatus.AppRestart)
                {
                    //send a new request to the application to initiate step 2
                    Response.Redirect(HttpContext.Current.Request.RawUrl, true);
                }

                //Start Timer
                Upgrade.Upgrade.StartTimer();

                //Write out Header
                HtmlUtils.WriteHeader(Response, "install");

                //get path to script files
                string strProviderPath = DataProvider.Instance().GetProviderPath();
                if (!strProviderPath.StartsWith("ERROR:"))
                {
                    Response.Write("<h2>Version: " + Globals.FormatVersion(DotNetNukeContext.Current.Application.Version) + "</h2>");
                    Response.Flush();

                    Response.Write("<br><br>");
                    Response.Write("<h2>Installation Status Report</h2>");
                    Response.Flush();

                    if (!CheckPermissions())
                    {
                        return;
                    }

                    var installConfig = InstallController.Instance.GetInstallConfig();

                    Upgrade.Upgrade.InstallDNN(strProviderPath);
                    //remove en-US from portal if installing in a different language
                    if (!installConfig.InstallCulture.Equals("en-us", StringComparison.InvariantCultureIgnoreCase))
                    {
                        var locale = LocaleController.Instance.GetLocale("en-US");
                        Localization.Localization.RemoveLanguageFromPortal(0, locale.LanguageId);
                    }


                    var licenseConfig = (installConfig != null) ? installConfig.License : null;
                    bool IsProOrEnterprise = (File.Exists(HttpContext.Current.Server.MapPath("~\\bin\\DotNetNuke.Professional.dll")) || File.Exists(HttpContext.Current.Server.MapPath("~\\bin\\DotNetNuke.Enterprise.dll")));
                    if (IsProOrEnterprise && licenseConfig != null && !String.IsNullOrEmpty(licenseConfig.AccountEmail) && !String.IsNullOrEmpty(licenseConfig.InvoiceNumber))
                    {
                        Upgrade.Upgrade.ActivateLicense();
                    }

                    //Adding ClientDependency Resources config to web.config                    
                    if (!ClientResourceManager.IsInstalled())
                    {
                        ClientResourceManager.AddConfiguration();
                    }

                    var installVersion = DataProvider.Instance().GetInstallVersion();
                    string strError = Config.UpdateInstallVersion(installVersion);
                    if (!string.IsNullOrEmpty(strError))
                    {
                        Logger.Error(strError);
                    }

                    Response.Write("<h2>Installation Complete</h2>");
                    Response.Write("<br><br><h2><a href='../Default.aspx'>Click Here To Access Your Site</a></h2><br><br>");
                    Response.Flush();

                    //remove installwizard files
                    Upgrade.Upgrade.DeleteInstallerFiles();

                    //log APPLICATION_START event
                    Initialize.LogStart();

                    //Start Scheduler
                    Initialize.StartScheduler();
                }
                else
                {
                    //upgrade error
                    Response.Write("<h2>Upgrade Error: " + strProviderPath + "</h2>");
                    Response.Flush();
                }

                //Write out Footer
                HtmlUtils.WriteFooter(Response);
            }
        }