public string ceaserShiftTable(string lines)                                  //Method for displaying the ceaser cipther table.
        {
            DateTime begin    = DateTime.UtcNow;                                      //Start of timer.
            string   saveFile = " ";                                                  //Defines saveFile string.

            int    maxLength = 15;                                                    //Defines the max length of the first line.
            string textInput = lines.Substring(0, Math.Min(lines.Length, maxLength)); //Defines the textInput as the maxLength of the input string so that only the first line is displayed in the table.

            encryptDecrypt c = new encryptDecrypt();                                  //Makes an instance of the encryptDecrypt class.

            Console.WriteLine("\nDecryption shift (left)\t\tCandidate plaintext:\n"); //Table header

            for (int count = 1; count <= 26; count++)                                 //Loops through each letter in the "letterArray" array
            {
                Console.WriteLine("\t" + count + "\t\t\t" + c.letterShift(textInput, count));
            }

            int shiftKey = 0;

            while (shiftKey >= 0)
            {                                                                                  //Start of While loop.
                Console.WriteLine("\nPlease enter the correct key shift or press q to quit."); //Gets the user to enter the correct key shift.
                string temp = Console.ReadLine();



                if (temp == "q")
                {
                    break;             //breaks out of the while loop if q is entered.
                }
                int.TryParse(temp, out shiftKey);

                if (shiftKey >= 1 && shiftKey <= 26)
                //Checks to see if a correct key shift option has been choosen.
                {
                    Console.WriteLine("\nShift Key = {0}", shiftKey); //Displays user's choosen key shift.
                    string output = lines;
                    output   = output.Replace(" ", string.Empty);     //Removes all the spaces out of the string.
                    output   = output.Replace("\n", string.Empty);    //Removes all the new lines out the string.
                    output   = output.Replace("\r", string.Empty);    //Removes al the carridge returns out of the string
                    saveFile = c.letterShift(output, shiftKey);       //Calls the letterShift and parses the message with the keyshift to be decryoted.



                    break;//Breaks out of the loop when a valid entry has been entered.
                }

                else
                //Displays this message if any input outside of 1-26 is entered.
                {
                    Console.WriteLine("Sorry that entry wasn't a valid Shift Key option.");
                }
            }//End of While loop.


            DateTime end = DateTime.UtcNow;                                                                                                 //End of timer

            Console.WriteLine("\nMeasured time taken to decrpyt the message using shift key: " + (end - begin).TotalMilliseconds + " ms."); //Outputs the time taken to decrypt
            return(saveFile);
        }
        }//End of letterShift method.

        public string frequencyAnalysis(string message)
        {
            DateTime begin = DateTime.UtcNow;//Start of timer.

            //Start of code for finding the most common letter.
            int  commonCharNumber = 0;
            char commonChar       = ' ';

            foreach (char findChar in message)
            {//Start of code to find the most commonn letter.
                int charCount = 0;

                foreach (char matchingChars in message)
                {
                    if (findChar == matchingChars)
                    {
                        charCount++;
                    }
                }

                if (commonCharNumber < charCount)
                {
                    commonChar       = findChar;
                    commonCharNumber = charCount;
                }
            }//End of code to find the most common letter.


            Console.WriteLine("\n\nMost occuring letter = " + commonChar + "/" + ((char)commonChar - 0) + "\n\n");//Displays the most occuring letter and its char value


            int keyShift = (69 - (char)(commonChar));//Key shift negative value is calculated by taking the char value of E (69) then minusing the most occurring Char


            Console.WriteLine("Key shift =  +" + (26 + keyShift) + " or " + keyShift + "\n\n");//Displays the positive value key shift and the negative value of the key shift.



            encryptDecrypt c = new encryptDecrypt();//Makes an instance of the encryptDecrypt class.


            string newMessage = c.letterShift(message, keyShift);//Calls the letterShift method and parses the encrypted message plus the keyShift.


            Console.WriteLine(userInterface.yellowLine(newMessage));//Displays the Decrypted message.
            Console.ForegroundColor = ConsoleColor.Green;

            DateTime end = DateTime.UtcNow;                                                                                               //End of timer

            Console.WriteLine("Measured time taken to decrpyt the message using shift key: " + (end - begin).TotalMilliseconds + " ms."); //Outputs the time taken to decrypt

            return(message);
        }
        static void Main(string[] args)//Main method contains the user interface.
        {
            int mainMenu = 1;

            while (mainMenu <= 1)
            {
                Console.Clear();
                Console.ForegroundColor = ConsoleColor.Green;
                string gretting     = "Morning";
                int    firstChoice  = 0;
                int    secondChoice = 0;
                int    thirdChoice  = 0;
                int    forthChoice  = 0;
                int    fifthChoice  = 0;

                if (DateTime.Now.ToString("tt") == "PM")//Checks to see if it is the afternoon or not.
                {
                    gretting = "Afternoon";
                }

                while (firstChoice >= 0)
                {
                    try
                    {
                        Console.ForegroundColor = ConsoleColor.White;
                        Console.WriteLine("\n*****MAIN MENU*******");
                        Console.ForegroundColor = ConsoleColor.Green;



                        Console.WriteLine("\nGood {0}, please choose an option:(or press q to quit the program.) \n1. Decrypt a message. \n2. Encrypt a message.", gretting);///Gets the user to enter an option.

                        string temp = Console.ReadLine();

                        if (temp == "q")
                        {
                            mainMenu = 2;
                            break;
                        }

                        int.TryParse(temp, out firstChoice);

                        if (firstChoice >= 1 && firstChoice <= 2) //Checks if a valid option has been entered (1/2)
                        {
                            break;                                //Breaks out of while loop if conditions are met.
                        }
                        else
                        {
                            throw new FormatException();
                        }
                    }//End of try statement.

                    catch (FormatException)//Catches the errors.
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("\nSorry that wasn't a valid option.");//Displays a red warning if an invalid entry is made.
                        Console.ResetColor();
                        Console.ForegroundColor = ConsoleColor.Green;
                    } //End of catch statement.
                }     //End of while loop.



                switch (firstChoice) //Encrypt or Decrypt option.
                {
                case 1:              //Decrypt a message option.
                    while (secondChoice >= 0)
                    {
                        try
                        {
                            Console.WriteLine("Please choose an option to Decrypt your message (or type 'm' to go back to the main menu) :\n1. Ceaser Cipher Table.  \n2. Frequency Analysis.");
                            string temp = Console.ReadLine();

                            if (temp == "m")
                            {
                                break;
                            }
                            int.TryParse(temp, out secondChoice);

                            if (secondChoice >= 1 && secondChoice <= 2)
                            {
                                break;
                            }
                            else
                            {
                                throw new FormatException();
                            }
                        }

                        catch (FormatException)
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.Beep();
                            Console.WriteLine("\nSorry that wasn't a valid option.");
                            Console.ResetColor();
                            Console.ForegroundColor = ConsoleColor.Green;
                        }
                    }

                    break; //Break of case 1

                case 2:    //Encrypt a message option.


                    while (thirdChoice >= 0)
                    {
                        try
                        {
                            Console.WriteLine("Please choose an option:(or type 'm' to go back to the main menu) \n1. Encrypt your own message \n2. The message in a .txt file");

                            string temp = Console.ReadLine();

                            if (temp == "m")
                            {
                                break;
                            }

                            int.TryParse(temp, out thirdChoice);


                            if (thirdChoice >= 1 && thirdChoice <= 2)
                            {
                                break;
                            }
                            else
                            {
                                throw new FormatException();
                            }
                        }

                        catch (FormatException)
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nSorry that wasn't a valid option.");
                            Console.ResetColor();
                            Console.ForegroundColor = ConsoleColor.Green;
                        }
                    }      //End of while loop.
                    break; //Break for end of case 2
                }//End of switch statement.



                switch (secondChoice) //Decrypt using Caeser cipher table/ frequency analysis.
                {
                case 1:               //Decrypt using the Caeser cipher table option.

                    while (forthChoice >= 0)
                    {
                        try
                        {
                            Console.WriteLine("Please choose what you would like to Decrypt using the Caeser Cipher Table:(or type 'm' to go back to the main menu) \n1. The caesarShiftEncoded.txt file \n2. Your own message.");
                            string temp = Console.ReadLine();

                            if (temp == "m")
                            {
                                break;
                            }

                            int.TryParse(temp, out forthChoice);

                            if (forthChoice >= 1 && forthChoice <= 2)
                            {
                                break;
                            }
                            else
                            {
                                throw new FormatException();
                            }
                        }

                        catch (FormatException)
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nSorry that wasn't a valid option.");
                            Console.ResetColor();
                            Console.ForegroundColor = ConsoleColor.Green;
                        }
                    }      //End of while loop.

                    break; //Break for end of case 1

                case 2:    //Decrypt using the Ceaser Cipher frequency analysis option.

                    while (fifthChoice >= 0)
                    {
                        try
                        {
                            Console.WriteLine("Please choose what you would like to preform frequency analysis on:(or type 'm' to go back to the main menu) \n1. The caesarShiftEncoded.txt file \n2. Your own message.");
                            string temp = Console.ReadLine();

                            if (temp == "m")
                            {
                                break;
                            }

                            int.TryParse(temp, out fifthChoice);


                            if (fifthChoice >= 1 && fifthChoice <= 2)
                            {
                                break;
                            }
                            else
                            {
                                throw new FormatException();
                            }
                        }

                        catch (FormatException)
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nSorry that wasn't a valid option.");
                            Console.ResetColor();
                            Console.ForegroundColor = ConsoleColor.Green;
                        }
                    }      //End of while loop.
                    break; //Break that ends case 2
                }

                switch (thirdChoice)                                                                                          //Encrypt own message or .txt file.
                {
                case 1:                                                                                                       //Own message option.
                {
                    encryptDecrypt c = new encryptDecrypt();                                                                  //Makes an instance of the encryptDecrypt class.
                    Console.WriteLine("Please enter the message you would like to encrypt with the Caeser cipher encoding."); //Gets the user to enter their message for encryption.
                    string messageToEncrypt = Console.ReadLine();                                                             //Gets the users message

                    string messageToEncryptUpper = messageToEncrypt.ToUpper();                                                //Converts the message to all upper case.
                    messageToEncryptUpper = messageToEncryptUpper.Replace(" ", string.Empty);                                 //Removes all the spaces out of the string.
                    Console.WriteLine("Please enter the key shift you want to apply to your message.");                       //Gets the user to enter a key shift to apply to their message.
                    int    keyShift = int.Parse(Console.ReadLine());                                                          //Gets the key shift value.
                    string saveFile = c.letterShift(messageToEncryptUpper, keyShift);                                         //Calls the letterShift method and parses the user's message with their intended keyShift.
                    Console.WriteLine("Your now encrypted message with a keyshift of " + keyShift + " applied:");             //Displays a message with the useres inputed keyshift value.
                    Console.WriteLine("\n" + yellowLine(saveFile));                                                           //Displays the new encrypted message with a differnt colour.
                    Console.ForegroundColor = ConsoleColor.Green;                                                             //Changes the console colour back to green.
                    Console.WriteLine("Press any key to return to main menu");
                    Console.ReadLine();
                }        //End of case 1

                break;   //break of switch case 1.


                case 2:    //.txt file option.TODO
                {
                    int start = 0;
                    //string newPath = "";
                    Console.WriteLine("Please enter the full file name you want to load to apply a ceaser cipher encoding to.");
                    string newPath = Console.ReadLine();



                    while (start >= 0)
                    {
                        try
                        {
                            Console.WriteLine("\nLoading....");
                            string lines = File.ReadAllText(newPath);
                            Console.WriteLine("Load succseful!");
                            encryptDecrypt c = new encryptDecrypt();

                            string messageToEncryptUpper = lines.ToUpper();                                                 //Converts the message to all upper case.
                            messageToEncryptUpper = messageToEncryptUpper.Replace(" ", string.Empty);                       //Removes all the spaces out of the string.
                            Console.WriteLine("Please enter the key shift you want to apply to your message.");             //Gets the user to enter a key shift to apply to their message.
                            int    keyShift = int.Parse(Console.ReadLine());                                                //Gets the key shift value.
                            string saveFile = c.letterShift(messageToEncryptUpper, keyShift);                               //Calls the letterShift method and parses the user's message with their intended keyShift.
                            Console.WriteLine("\nYour now encrypted message with a keyshift of " + keyShift + " applied:"); //Displays a message with the useres inputed keyshift value.

                            Console.WriteLine("\n" + yellowLine(saveFile));                                                 //Displays the new encrypted message with a differnt colour.
                            Console.ForegroundColor = ConsoleColor.Green;                                                   //Changes the console colour back to green.
                            Console.WriteLine("Presss any key to return to main menu");
                            Console.ReadLine();
                            break;
                        }

                        catch
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nSorry file could not be Loaded!");
                            Console.ForegroundColor = ConsoleColor.Green;

                            Console.WriteLine("\nPlease enter a new path to load from or press m to go to main menu.\n\n"); //Gets the user to enter a new location for the save.
                            newPath = Console.ReadLine();                                                                   //Gets the user's new file location to save to.
                            if (newPath == "m")                                                                             //option to quit to main menu.
                            {
                                break;
                            }
                        } //End of catch
                    }     //End of while
                }         //End of case 1
                break;
                }//End of switch thirdChoice

                switch (forthChoice)
                {
                case 1:

                    //Descrypts using caeser cipher table on "caeserShiftEncodedText.txt" file
                    string lines = "";
                    try
                    {
                        lines = File.ReadAllText(@"\\srv124\students$\309219\my documents\visual studio 2010\Projects\ConsoleApplication126\ConsoleApplication126\TextFile1.txt");
                        //@"z:\\C# programs\\Assessment 1\\caesarShiftEncodedText.txt");//Reads in the encrypted message.
                    }

                    catch    //(FileNotFoundException)
                    {
                        Console.WriteLine("Sorry file could not be found");
                        break;
                    }


                    encryptDecrypt c = new encryptDecrypt();      //Makes an instance of the encryptDecrypt class.
                    Console.WriteLine("\nThe decrypted message:");
                    string saveFile = c.ceaserShiftTable(lines);  //Defines saveFile as the return of the caeaserShiftTable method
                    Console.WriteLine("\nYour decoded message:\n");
                    Console.WriteLine(yellowLine(saveFile));      //Displays the decrypted message.
                    Console.ForegroundColor = ConsoleColor.Green; //Changes the console foreground colour back to green.

                    string newPath = "z:\\C# programs\\Assessment 1\\HaydensCaesarShiftDecodedText.txt";

                    int start = 0;

                    while (start >= 0)    //while loop to repeat codeonce a new location has been entered.
                    {
                        try
                        {
                            File.WriteAllText(newPath, saveFile);    //Saves decrypted message to a .txt file.
                            Console.WriteLine("\n**Decrypted message file saved!**");
                            Console.WriteLine("\nPress any key to return to main menu.");
                            Console.ReadLine();
                            break;
                        }

                        catch    //If the file to save to can't be found the error is caught.
                        {
                            Console.ForegroundColor = ConsoleColor.Red;
                            Console.WriteLine("\nSorry file could not be Saved!");
                            Console.ForegroundColor = ConsoleColor.Green;

                            Console.WriteLine("\nPlease enter a new path to save to or press m to go to main menu.\n\n"); //Gets the user to enter a new location for the save.
                            newPath = Console.ReadLine();                                                                 //Gets the user's new file location to save to.
                            if (newPath == "m")                                                                           //option to quit to main menu.
                            {
                                break;
                            }
                        }
                    }

                    break;    //Break for case 1.

                case 2:
                    //Decrypts using caeser cipher table on own message option.
                    Console.WriteLine("Please enter your message.");          //Gets the user to  enter their message to be decrypted.
                    string         lower       = Console.ReadLine();          //Gets the user's encrypted message.
                    string         myLines     = lower.ToUpper();             //Changes all inputed text to uppercase.
                    encryptDecrypt b           = new encryptDecrypt();        //Makes an instance of the encrypDecrypt class.
                    string         newSaveFile = b.ceaserShiftTable(myLines); //Calls the caeserShiftTable method parses the message then defines the newSaveFile as the return.
                    Console.WriteLine("\nYour decoded message:\n");
                    Console.WriteLine(yellowLine(newSaveFile));               //Calls the different colour method.
                    Console.ForegroundColor = ConsoleColor.Green;             //Changes the console colour back to green.
                    break;
                }

                switch (fifthChoice)
                {
                case 1:    //Calls frequency analysis on caserShiftEncoded.txt

                    Console.WriteLine("Encrypted message:\n\n");
                    string lowerCase = System.IO.File.ReadAllText(@"z:\\C# programs\\Assessment 1\\caesarShiftEncodedText.txt");


                    string lines = lowerCase.ToUpper();
                    Console.WriteLine(lines);                  //Displays the encrypted message.
                    lines = lines.Replace(" ", string.Empty);  //Removes all the spaces out of the string.
                    lines = lines.Replace("\r", string.Empty); //Removes all the carridge returns out of the string
                    lines = lines.Replace("\n", string.Empty); //Removes all the new lines out of the string
                    encryptDecrypt b = new encryptDecrypt();   //Makes an instance of the encryptDecrypt class.
                    b.frequencyAnalysis(lines);
                    break;

                case 2:    //Calls frequency analysis for own message.

                    Console.WriteLine("Please enter your message to preform a caeser shift frequency analysis on.");
                    string ownMessage      = Console.ReadLine();
                    string ownMessageUpper = ownMessage.ToUpper();
                    ownMessageUpper = ownMessageUpper.Replace(" ", string.Empty);
                    encryptDecrypt c = new encryptDecrypt();
                    c.frequencyAnalysis(ownMessageUpper);
                    break;
                }
            } //End of switch statement.
        }     //End of mainMenu while loop.