static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Backup());
            }
            else
            {
                NativeMethods.AllocConsole();
                if (args[0].ToLower() == "b" || args[0].ToLower() == "/b")
                #region backup
                {
                    Error_Logging Log  = new Error_Logging();
                    Xml_Reader    read = new Xml_Reader();

                    if (!Directory.Exists(Environment.GetEnvironmentVariable("appdata") + "\\returnzork\\") || !File.Exists(Environment.GetEnvironmentVariable("appdata") + "\\returnzork\\Settings.config"))
                    {
                        Log.MakeLog(null, "  Settings do not exist, cannot continue.");
                        Console.WriteLine("The settings file does not exist. Cannot continue without the settings file.");
                        Console.ReadKey();
                        Environment.Exit(0);
                    }



                    string FROM        = read.GetWorld();
                    string TO          = read.GetBackupTo();
                    string Compression = read.UseCompression();
                    string DateNTime   = DateTime.Now.ToString("MM.dd.yyyy  hh-mm-ss");


                    if (!FROM.EndsWith("\\") && FROM != "FTP")
                    {
                        FROM = FROM + "\\";
                    }
                    if (!TO.EndsWith("\\") && TO != "FTP")
                    {
                        TO = TO + "\\";
                    }


                    if (!Directory.Exists(FROM) && FROM != "FTP")
                    {
                        Console.WriteLine("CANNOT RUN WHEN THE WORLD FOLDER DOES NOT EXIST, AND WHEN NOT RUNNING ON FTP.\r\nTest");
                        Console.ReadKey();
                        Environment.Exit(0);
                    }

                    #region copy world
                    #region Non FTP
                    #region not exist
                    if (!Directory.Exists(TO) && TO != "FTP")
                    {
                        Directory.CreateDirectory(TO);

                        if (!Directory.Exists(TO + DateNTime))
                        {
                            Directory.CreateDirectory(TO + DateNTime);
                        }

                        foreach (string dirPath in Directory.GetDirectories(FROM, "*", SearchOption.AllDirectories))
                        {
                            Directory.CreateDirectory(dirPath.Replace(FROM, TO + DateNTime + "\\"));
                        }


                        foreach (string newPath in Directory.GetFiles(FROM, "*.*", SearchOption.AllDirectories))
                        {
                            File.Copy(newPath, newPath.Replace(FROM, TO + DateNTime + "\\"));
                        }

                        Console.WriteLine("Finished copying world.");



                        System.ComponentModel.BackgroundWorker bgworker = new System.ComponentModel.BackgroundWorker();
                        bgworker.DoWork += new System.ComponentModel.DoWorkEventHandler(bgworker_DoWork);
                        bgworker.RunWorkerAsync();

                        Console.ReadKey();
                        Application.Exit();


                        #region compression
                        if (Compression == "yes")
                        {
                            ZipFile zip = new ZipFile();

                            try
                            {
                                zip.AddDirectory(TO + DateNTime);
                                zip.Save(TO + DateNTime + ".zip");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("An error has occurred:r\n\"" + ex);
                                Console.ReadKey();
                                Log.MakeLog(ex, null);
                            }
                        }
                        #endregion
                    }
                    #endregion
                    #region Exists
                    else if (Directory.Exists(TO) && TO != "FTP")
                    {
                        if (!Directory.Exists(TO + DateNTime))
                        {
                            Directory.CreateDirectory(TO + DateNTime);
                        }

                        foreach (string dirPath in Directory.GetDirectories(FROM, "*", SearchOption.AllDirectories))
                        {
                            Directory.CreateDirectory(dirPath.Replace(FROM, TO + DateNTime + "\\"));
                        }


                        foreach (string newPath in Directory.GetFiles(FROM, "*.*", SearchOption.AllDirectories))
                        {
                            File.Copy(newPath, newPath.Replace(FROM, TO + DateNTime + "\\"));
                        }


                        #region compression
                        if (Compression == "yes")
                        {
                            ZipFile zip = new ZipFile();

                            try
                            {
                                zip.AddDirectory(TO + DateNTime);
                                zip.Save(TO + DateNTime + ".zip");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("An error has occurred:r\n\"" + ex);
                                Console.ReadKey();
                                Log.MakeLog(ex, null);
                            }
                        }
                        #endregion


                        System.ComponentModel.BackgroundWorker bgworker = new System.ComponentModel.BackgroundWorker();
                        bgworker.WorkerReportsProgress = false;
                        bgworker.DoWork += new System.ComponentModel.DoWorkEventHandler(bgworker_DoWork);
                        bgworker.RunWorkerAsync();



                        Console.WriteLine("Finished copying world.");
                        Console.ReadKey();
                        Environment.Exit(0);
                    }
                    #endregion
                    #endregion
                    #region FTP
                    #region Upload
                    else if (TO == "FTP")
                    {
                        Ftp_Upload upload = new Ftp_Upload();
                        upload.Upload(DateNTime);

                        System.ComponentModel.BackgroundWorker bgworker = new System.ComponentModel.BackgroundWorker();
                        bgworker.WorkerReportsProgress = false;
                        bgworker.DoWork += new System.ComponentModel.DoWorkEventHandler(bgworker_DoWork);
                        bgworker.RunWorkerAsync();

                        Console.WriteLine("Finished");
                        Console.ReadKey();
                        Environment.Exit(0);
                    }
                    #endregion
                    #region Download
                    else if (FROM == "FTP")
                    {
                        Ftp_Download download = new Ftp_Download();
                        download.main(DateNTime);
                        #region compression
                        if (Compression == "yes")
                        {
                            ZipFile zip = new ZipFile();

                            try
                            {
                                zip.AddDirectory(TO + DateNTime);
                                zip.Save(TO + DateNTime + ".zip");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("An error has occurred:r\n\"" + ex);
                                Console.ReadKey();
                                Log.MakeLog(ex, null);
                            }
                        }
                        #endregion

                        System.ComponentModel.BackgroundWorker bgworker = new System.ComponentModel.BackgroundWorker();
                        bgworker.WorkerReportsProgress = false;
                        bgworker.DoWork += new System.ComponentModel.DoWorkEventHandler(bgworker_DoWork);
                        bgworker.RunWorkerAsync();

                        Console.WriteLine("Finished");
                        Console.ReadKey();
                        Environment.Exit(0);
                    }
                    #endregion
                    #endregion
                    #endregion
                }
                #endregion
                else if (args[0].ToLower() == "r" || args[0].ToLower() == "/r")
                #region reset settings
                {
                    if (Directory.Exists(Environment.GetEnvironmentVariable("APPDATA") + "\\returnzork\\"))
                    {
                        string[] FILES = Directory.GetFiles(Environment.GetEnvironmentVariable("APPDATA") + "\\returnzork\\");
                        foreach (string file in FILES)
                        {
                            File.Delete(file);
                        }
                    }
                    Console.WriteLine("Completed!");
                    Console.WriteLine("");
                    Console.WriteLine("Press any key to exit...");
                    Console.ReadKey();
                }
                #endregion
                else if (args[0].ToLower() == "settings" || args[0].ToLower() == "/s")
                #region Current settings
                {
                    Xml_Reader xml = new Xml_Reader();

                    Console.WriteLine("Current settings are:");
                    Console.WriteLine();
                    Console.WriteLine();



                    Console.WriteLine();
                    Console.WriteLine("Backup time is:  " + xml.GetBackupTime() + " minute(s)");
                    Console.WriteLine();
                    Console.WriteLine();

                    if (xml.GetBackupTo() == "ftp")
                    {
                        Console.WriteLine("Backup to ftp is:  on");
                    }
                    else
                    {
                        Console.WriteLine("Backup to ftp is:  off");
                    }
                    if (xml.GetWorld() == "ftp")
                    {
                        Console.WriteLine("Backup from ftp is:  on");
                    }
                    else
                    {
                        Console.WriteLine("Backup from ftp is:  off");
                    }



                    Console.WriteLine();
                    Console.WriteLine();
                    if (xml.GetWorld() != "ftp")
                    {
                        Console.WriteLine("Backup from directory is:   " + xml.GetWorld());
                    }
                    else
                    {
                        Console.WriteLine("Backup from directory is:   ftp:\\\\" + xml.GetFtpServer() + "\\" + xml.GetFtpFolder() + "\\" + xml.GetFtpFolder2());
                    }

                    if (xml.GetBackupTo() != "ftp")
                    {
                        Console.WriteLine("Backup to directory is:  " + xml.GetBackupTo());
                    }
                    else
                    {
                        Console.WriteLine("Backup to directory is:   ftp:\\\\" + xml.GetFtpServer() + "\\" + xml.GetFtpFolder() + "\\" + xml.GetFtpFolder2());
                    }

                    Console.WriteLine();
                    Console.WriteLine();

                    if (xml.GetUpdateSettings() == "no")
                    {
                        Console.WriteLine("Auto updating is:  " + "off");
                    }
                    else if (xml.GetUpdateSettings() == "yes")
                    {
                        Console.WriteLine("Auto updating is:  " + "on");
                    }
                    else
                    {
                        Console.WriteLine("Auto updating is:  " + "not defined");
                    }

                    Console.WriteLine();
                    Console.ReadLine();
                }
                #endregion
                else
                #region help
                {
                    if (args[0] != "/?")
                    {
                        Console.WriteLine("Invalid argument: " + args[0]);
                        Console.WriteLine("");
                        Console.WriteLine("");
                    }
                    Console.WriteLine("BackupV2.exe usage:");
                    Console.WriteLine("");
                    Console.WriteLine("/?: This help message");
                    Console.WriteLine("/B: Backup using the configuration files");
                    Console.WriteLine("/R: Delete all settings files. Start fresh.");
                    Console.WriteLine("");
                    Console.WriteLine("Press any key to exit...");
                    Console.ReadKey();
                }
                #endregion
            }
        }
        static void Main(string[] args)
        {
            if (args.Length == 0)
            {
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Backup());
            }
            else
            {
                NativeMethods.AllocConsole();
                if (args[0].ToLower() == "b" || args[0].ToLower() == "/b")
                #region backup
                {

                    Error_Logging Log = new Error_Logging();
                    Xml_Reader read = new Xml_Reader();

                    if (!Directory.Exists(Environment.GetEnvironmentVariable("appdata") + "\\returnzork\\") || !File.Exists(Environment.GetEnvironmentVariable("appdata") + "\\returnzork\\Settings.config"))
                    {
                        Log.MakeLog(null, "  Settings do not exist, cannot continue.");
                        Console.WriteLine("The settings file does not exist. Cannot continue without the settings file.");
                        Console.ReadKey();
                        Environment.Exit(0);
                    }

                    string FROM = read.GetWorld();
                    string TO = read.GetBackupTo();
                    string Compression = read.UseCompression();
                    string DateNTime = DateTime.Now.ToString("MM.dd.yyyy  hh-mm-ss");

                    if(!FROM.EndsWith("\\") && FROM != "FTP")
                    {
                        FROM = FROM + "\\";
                    }
                    if (!TO.EndsWith("\\") && TO != "FTP")
                    {
                        TO = TO + "\\";
                    }

                    if (!Directory.Exists(FROM) && FROM != "FTP")
                    {
                        Console.WriteLine("CANNOT RUN WHEN THE WORLD FOLDER DOES NOT EXIST, AND WHEN NOT RUNNING ON FTP.\r\nTest");
                        Console.ReadKey();
                        Environment.Exit(0);
                    }

                    #region copy world
                    #region Non FTP
                    #region not exist
                    if (!Directory.Exists(TO) && TO != "FTP")
                    {
                        Directory.CreateDirectory(TO);

                        if (!Directory.Exists(TO + DateNTime))
                        {
                            Directory.CreateDirectory(TO + DateNTime);
                        }

                        foreach (string dirPath in Directory.GetDirectories(FROM, "*", SearchOption.AllDirectories))
                            Directory.CreateDirectory(dirPath.Replace(FROM, TO + DateNTime + "\\"));

                        foreach (string newPath in Directory.GetFiles(FROM, "*.*", SearchOption.AllDirectories))
                            File.Copy(newPath, newPath.Replace(FROM, TO + DateNTime + "\\"));

                        Console.WriteLine("Finished copying world.");

                        System.ComponentModel.BackgroundWorker bgworker = new System.ComponentModel.BackgroundWorker();
                        bgworker.DoWork +=new System.ComponentModel.DoWorkEventHandler(bgworker_DoWork);
                        bgworker.RunWorkerAsync();

                        Console.ReadKey();
                        Application.Exit();

                        #region compression
                        if (Compression == "yes")
                        {
                            ZipFile zip = new ZipFile();

                            try
                            {
                                zip.AddDirectory(TO + DateNTime);
                                zip.Save(TO + DateNTime + ".zip");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("An error has occurred:r\n\"" + ex);
                                Console.ReadKey();
                                Log.MakeLog(ex, null);
                            }
                        }
                        #endregion
                    }
                    #endregion
                    #region Exists
                    else if (Directory.Exists(TO) && TO != "FTP")
                    {
                        if (!Directory.Exists(TO + DateNTime))
                        {
                            Directory.CreateDirectory(TO + DateNTime);
                        }

                        foreach (string dirPath in Directory.GetDirectories(FROM, "*", SearchOption.AllDirectories))
                            Directory.CreateDirectory(dirPath.Replace(FROM, TO + DateNTime + "\\"));

                        foreach (string newPath in Directory.GetFiles(FROM, "*.*", SearchOption.AllDirectories))
                            File.Copy(newPath, newPath.Replace(FROM, TO + DateNTime + "\\"));

                        #region compression
                        if (Compression == "yes")
                        {
                            ZipFile zip = new ZipFile();

                            try
                            {
                                zip.AddDirectory(TO + DateNTime);
                                zip.Save(TO + DateNTime + ".zip");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("An error has occurred:r\n\"" + ex);
                                Console.ReadKey();
                                Log.MakeLog(ex, null);
                            }
                        }
                        #endregion

                        System.ComponentModel.BackgroundWorker bgworker = new System.ComponentModel.BackgroundWorker();
                        bgworker.WorkerReportsProgress = false;
                        bgworker.DoWork += new System.ComponentModel.DoWorkEventHandler(bgworker_DoWork);
                        bgworker.RunWorkerAsync();

                        Console.WriteLine("Finished copying world.");
                        Console.ReadKey();
                        Environment.Exit(0);
                    }
                    #endregion
                    #endregion
                    #region FTP
                    #region Upload
                    else if (TO == "FTP")
                    {
                        Ftp_Upload upload = new Ftp_Upload();
                        upload.Upload(DateNTime);

                        System.ComponentModel.BackgroundWorker bgworker = new System.ComponentModel.BackgroundWorker();
                        bgworker.WorkerReportsProgress = false;
                        bgworker.DoWork += new System.ComponentModel.DoWorkEventHandler(bgworker_DoWork);
                        bgworker.RunWorkerAsync();

                        Console.WriteLine("Finished");
                        Console.ReadKey();
                        Environment.Exit(0);
                    }
                    #endregion
                    #region Download
                    else if (FROM == "FTP")
                    {
                        Ftp_Download download = new Ftp_Download();
                        download.main(DateNTime);
                        #region compression
                        if (Compression == "yes")
                        {
                            ZipFile zip = new ZipFile();

                            try
                            {
                                zip.AddDirectory(TO + DateNTime);
                                zip.Save(TO + DateNTime + ".zip");
                            }
                            catch (Exception ex)
                            {
                                Console.WriteLine("An error has occurred:r\n\"" + ex);
                                Console.ReadKey();
                                Log.MakeLog(ex, null);
                            }
                        }
                        #endregion

                        System.ComponentModel.BackgroundWorker bgworker = new System.ComponentModel.BackgroundWorker();
                        bgworker.WorkerReportsProgress = false;
                        bgworker.DoWork += new System.ComponentModel.DoWorkEventHandler(bgworker_DoWork);
                        bgworker.RunWorkerAsync();

                        Console.WriteLine("Finished");
                        Console.ReadKey();
                        Environment.Exit(0);
                    }
                    #endregion
                    #endregion
                    #endregion
                }
                #endregion
                else if (args[0].ToLower() == "r" || args[0].ToLower() == "/r")
                #region reset settings
                {
                    if (Directory.Exists(Environment.GetEnvironmentVariable("APPDATA") + "\\returnzork\\"))
                    {
                        string[] FILES = Directory.GetFiles(Environment.GetEnvironmentVariable("APPDATA") + "\\returnzork\\");
                        foreach (string file in FILES)
                        {
                            File.Delete(file);
                        }
                    }
                    Console.WriteLine("Completed!");
                    Console.WriteLine("");
                    Console.WriteLine("Press any key to exit...");
                    Console.ReadKey();
                }
                #endregion
                else if (args[0].ToLower() == "settings" || args[0].ToLower() == "/s")
                #region Current settings
                {
                    Xml_Reader xml = new Xml_Reader();

                    Console.WriteLine("Current settings are:");
                    Console.WriteLine();
                    Console.WriteLine();

                    Console.WriteLine();
                    Console.WriteLine("Backup time is:  " + xml.GetBackupTime() + " minute(s)");
                    Console.WriteLine();
                    Console.WriteLine();

                    if (xml.GetBackupTo() == "ftp")
                    {
                        Console.WriteLine("Backup to ftp is:  on");
                    }
                    else
                    {
                        Console.WriteLine("Backup to ftp is:  off");
                    }
                    if (xml.GetWorld() == "ftp")
                    {
                        Console.WriteLine("Backup from ftp is:  on");
                    }
                    else
                    {
                        Console.WriteLine("Backup from ftp is:  off");
                    }

                    Console.WriteLine();
                    Console.WriteLine();
                    if (xml.GetWorld() != "ftp")
                    {
                        Console.WriteLine("Backup from directory is:   " + xml.GetWorld());
                    }
                    else
                    {
                        Console.WriteLine("Backup from directory is:   ftp:\\\\" + xml.GetFtpServer() + "\\" + xml.GetFtpFolder() + "\\" + xml.GetFtpFolder2());
                    }

                    if (xml.GetBackupTo() != "ftp")
                    {
                        Console.WriteLine("Backup to directory is:  " + xml.GetBackupTo());
                    }
                    else
                    {
                        Console.WriteLine("Backup to directory is:   ftp:\\\\" + xml.GetFtpServer() + "\\" + xml.GetFtpFolder() + "\\" +xml.GetFtpFolder2());
                    }

                    Console.WriteLine();
                    Console.WriteLine();

                    if(xml.GetUpdateSettings() == "no")
                    {
                        Console.WriteLine("Auto updating is:  " + "off");
                    }
                    else if (xml.GetUpdateSettings() == "yes")
                    {
                        Console.WriteLine("Auto updating is:  " + "on");
                    }
                    else
                    {
                        Console.WriteLine("Auto updating is:  " + "not defined");
                    }

                    Console.WriteLine();
                    Console.ReadLine();
                }
                #endregion
                else
                #region help
                {
                    if (args[0] != "/?")
                    {
                        Console.WriteLine("Invalid argument: " + args[0]);
                        Console.WriteLine("");
                        Console.WriteLine("");
                    }
                    Console.WriteLine("BackupV2.exe usage:");
                    Console.WriteLine("");
                    Console.WriteLine("/?: This help message");
                    Console.WriteLine("/B: Backup using the configuration files");
                    Console.WriteLine("/R: Delete all settings files. Start fresh.");
                    Console.WriteLine("");
                    Console.WriteLine("Press any key to exit...");
                    Console.ReadKey();
                }
                #endregion
            }
        }
        private void CountdownThread_DoWork(object sender, DoWorkEventArgs e)
        {
            #region Variables

            string FROM;
            string TO;
            string Compression;
            decimal MAX;
            string MAX1;

            #endregion

            while (CountdownThread.CancellationPending == false)
            {
                FROM = XmlReader.GetWorld();
                TO = XmlReader.GetBackupTo();
                Compression = XmlReader.UseCompression();
                MAX1 = XmlReader.GetBackupTime();
                MAX = Convert.ToDecimal(MAX1);

                #region Do if variables not set

                if (FROM == "" || TO == "" || MAX == 0 || MAX1 == "")
                {
                    while (CountdownThread.CancellationPending == false)
                    {
                        WaitTimer.Stop();
                        Log.MakeLog(null, "required things are blank:  FROM:   " + FROM + "   TO:   " + TO + "  COMPRESSION:" +  Compression + "TIMER:   " + MAX.ToString());
                        this.Invoke((MethodInvoker)delegate() { StartButton.Enabled = true; });
                        this.Invoke((MethodInvoker)delegate() { StopButton.Enabled = false; });
                        CountdownThread.CancelAsync();
                        this.Invoke((MethodInvoker)delegate() { HelpLabel.Visible = true; });
                        e.Cancel = true;
                        return;
                    }
                }

                #endregion

                if (dec != 0.00M && !CountdownThread.CancellationPending)  //reset value when thread runs//
                {
                    dec = 0.00M;
                }

                #region Assign variables

                DirFrom = FROM;
                DirTo = TO;

                if (!DirFrom.EndsWith("\\") && DirFrom != "FTP")
                {
                    DirFrom = DirFrom + "\\";
                }
                if (!DirTo.EndsWith("\\") && DirTo != "FTP")
                {
                    DirTo = DirTo + "\\";
                }

                #endregion

                while (dec < MAX && !CountdownThread.CancellationPending)  //Checks the time left is less than the total time
                {
                    //do nothing//
                }

                DateNTime = DateTime.Now.ToString("MM.dd.yyyy  hh-mm-ss");

                #region Create directory and copy world

                if (Directory.Exists(DirTo) && DirTo != "FTP")
                {
                    if (!Directory.Exists(DirTo + DateNTime))  //create the directory for the current time if it does not exist
                    {
                        Directory.CreateDirectory(DirTo + DateNTime);
                    }

                    if (DirFrom == "FTP")  //if the from directory is FTP, start FTP downloading
                    {
                        Ftp_Download FTP = new Ftp_Download();
                        FTP.main(DateNTime);
                        if (Compression == "yes")
                        {
                            CompressionBackground.RunWorkerAsync();
                        }
                    }
                    else if (DirTo == "FTP")
                    {
                        Ftp_Upload upload = new Ftp_Upload();
                        upload.Upload(DateNTime);
                    }
                    else if (DirFrom != "FTP")  //if the from directory is not FTP, copy the directory.
                    {
                        #region create directories

                        foreach (string dirPath in Directory.GetDirectories(DirFrom, "*", SearchOption.AllDirectories))
                            Directory.CreateDirectory(dirPath.Replace(DirFrom, DirTo + DateNTime + "\\"));

                        foreach (string newPath in Directory.GetFiles(DirFrom, "*.*", SearchOption.AllDirectories))
                            File.Copy(newPath, newPath.Replace(DirFrom, DirTo + DateNTime + "\\"));

                        #endregion

                        if (Compression == "yes")
                        {
                            CompressionBackground.RunWorkerAsync();
                        }
                    }
                    else
                    {
                        //error
                    }
                }
                else if (!Directory.Exists(DirTo) && DirTo != "FTP")
                {
                    Directory.CreateDirectory(DirTo);
                    if (DirFrom == "FTP")
                    {
                        Ftp_Download FTP = new Ftp_Download();
                        FTP.main(DateNTime);
                        if (Compression == "yes")
                        {
                            CompressionBackground.RunWorkerAsync();
                        }
                    }
                    else
                    {
                        foreach (string CreateDir in Directory.GetDirectories(DirFrom, "*", SearchOption.AllDirectories))
                        {
                            Directory.CreateDirectory(CreateDir.Replace(DirFrom, DirTo + DateNTime + "\\"));  //create each sub directory
                        }
                        foreach (string file in Directory.GetFiles(DirFrom, "*", SearchOption.AllDirectories))
                        {
                            File.Copy(file, file.Replace(DirFrom, DirTo + DateNTime + "\\"));  //copy each file in sub directories, and in main directory
                        }

                        if (Compression == "yes")
                        {
                            CompressionBackground.RunWorkerAsync();
                        }
                    }
                }
                else if (DirTo == "FTP")
                {
                    Ftp_Upload Upload = new Ftp_Upload();
                    Upload.Upload(DateNTime);
                }
                else
                {
                    //Error//
                    MessageBox.Show("ERROR");
                }
            #endregion
            }
        }
        private void CountdownThread_DoWork(object sender, DoWorkEventArgs e)
        {
            #region Variables

            string  FROM;
            string  TO;
            string  Compression;
            decimal MAX;
            string  MAX1;

            #endregion

            while (CountdownThread.CancellationPending == false)
            {
                FROM        = XmlReader.GetWorld();
                TO          = XmlReader.GetBackupTo();
                Compression = XmlReader.UseCompression();
                MAX1        = XmlReader.GetBackupTime();
                MAX         = Convert.ToDecimal(MAX1);

                #region Do if variables not set

                if (FROM == "" || TO == "" || MAX == 0 || MAX1 == "")
                {
                    while (CountdownThread.CancellationPending == false)
                    {
                        WaitTimer.Stop();
                        Log.MakeLog(null, "required things are blank:  FROM:   " + FROM + "   TO:   " + TO + "  COMPRESSION:" + Compression + "TIMER:   " + MAX.ToString());
                        this.Invoke((MethodInvoker) delegate() { StartButton.Enabled = true; });
                        this.Invoke((MethodInvoker) delegate() { StopButton.Enabled = false; });
                        CountdownThread.CancelAsync();
                        this.Invoke((MethodInvoker) delegate() { HelpLabel.Visible = true; });
                        e.Cancel = true;
                        return;
                    }
                }

                #endregion

                if (dec != 0.00M && !CountdownThread.CancellationPending)  //reset value when thread runs//
                {
                    dec = 0.00M;
                }

                #region Assign variables


                DirFrom = FROM;
                DirTo   = TO;



                if (!DirFrom.EndsWith("\\") && DirFrom != "FTP")
                {
                    DirFrom = DirFrom + "\\";
                }
                if (!DirTo.EndsWith("\\") && DirTo != "FTP")
                {
                    DirTo = DirTo + "\\";
                }

                #endregion

                while (dec < MAX && !CountdownThread.CancellationPending)  //Checks the time left is less than the total time
                {
                    //do nothing//
                }

                DateNTime = DateTime.Now.ToString("MM.dd.yyyy  hh-mm-ss");

                #region Create directory and copy world

                if (Directory.Exists(DirTo) && DirTo != "FTP")
                {
                    if (!Directory.Exists(DirTo + DateNTime))  //create the directory for the current time if it does not exist
                    {
                        Directory.CreateDirectory(DirTo + DateNTime);
                    }

                    if (DirFrom == "FTP")  //if the from directory is FTP, start FTP downloading
                    {
                        Ftp_Download FTP = new Ftp_Download();
                        FTP.main(DateNTime);
                        if (Compression == "yes")
                        {
                            CompressionBackground.RunWorkerAsync();
                        }
                    }
                    else if (DirTo == "FTP")
                    {
                        Ftp_Upload upload = new Ftp_Upload();
                        upload.Upload(DateNTime);
                    }
                    else if (DirFrom != "FTP")  //if the from directory is not FTP, copy the directory.
                    {
                        #region create directories


                        foreach (string dirPath in Directory.GetDirectories(DirFrom, "*", SearchOption.AllDirectories))
                        {
                            Directory.CreateDirectory(dirPath.Replace(DirFrom, DirTo + DateNTime + "\\"));
                        }


                        foreach (string newPath in Directory.GetFiles(DirFrom, "*.*", SearchOption.AllDirectories))
                        {
                            File.Copy(newPath, newPath.Replace(DirFrom, DirTo + DateNTime + "\\"));
                        }


                        #endregion



                        if (Compression == "yes")
                        {
                            CompressionBackground.RunWorkerAsync();
                        }
                    }
                    else
                    {
                        //error
                    }
                }
                else if (!Directory.Exists(DirTo) && DirTo != "FTP")
                {
                    Directory.CreateDirectory(DirTo);
                    if (DirFrom == "FTP")
                    {
                        Ftp_Download FTP = new Ftp_Download();
                        FTP.main(DateNTime);
                        if (Compression == "yes")
                        {
                            CompressionBackground.RunWorkerAsync();
                        }
                    }
                    else
                    {
                        foreach (string CreateDir in Directory.GetDirectories(DirFrom, "*", SearchOption.AllDirectories))
                        {
                            Directory.CreateDirectory(CreateDir.Replace(DirFrom, DirTo + DateNTime + "\\"));  //create each sub directory
                        }
                        foreach (string file in Directory.GetFiles(DirFrom, "*", SearchOption.AllDirectories))
                        {
                            File.Copy(file, file.Replace(DirFrom, DirTo + DateNTime + "\\"));  //copy each file in sub directories, and in main directory
                        }

                        if (Compression == "yes")
                        {
                            CompressionBackground.RunWorkerAsync();
                        }
                    }
                }
                else if (DirTo == "FTP")
                {
                    Ftp_Upload Upload = new Ftp_Upload();
                    Upload.Upload(DateNTime);
                }
                else
                {
                    //Error//
                    MessageBox.Show("ERROR");
                }
                #endregion
            }
        }