/// <summary>
        ///     Saves the server settings when clicked
        /// </summary>
        /// 
        /// <param name="sender">The object that sent the event</param>
        /// <param name="e">Arguments for the event</param>
        private void generateClick(object sender, RoutedEventArgs e)
        {
            List<String> errors = validate();
            if(errors.Count > 0)
            {
                String error = "";

                foreach(String err in errors)
                {
                    error += err + "\n";
                }

                MessageBox.Show(error);
            }
            else
            {
                // Ensure server is installed
                String serverExe = Reference.serversDirectory + serverName.Text + Reference.serverExePath;
                if (!File.Exists(serverExe))
                {
                    updateServer();
                }

                // Save ini files
                List<String> game;
                List<String> gameUser;

                game = generateGameIni();
                gameUser = generateGameUserIni();

                GameIni.saveFile(serverName.Text, game);
                GameUserIni.saveFile(serverName.Text, gameUser);

                // Save congifuration file
                String[] configKeys =
                {
                    "serverName",
                    "mods",
                    "map"
                };

                String[] values =
                {
                    serverName.Text,
                    modList.Text,
                    serverMap.Text
                };

                ConfigData serverConfig = new ConfigData("serverData", Reference.serversDirectory + serverName.Text);

                List<String> settings = new List<String>();

                for (int i = 0; i < configKeys.Length; i++)
                {
                    settings.Add(configKeys[i] + "=" + values[i]);
                }

                serverConfig.write(settings);
            }
        }
        /// <summary>
        ///     Saves the settings file
        /// </summary>
        /// 
        /// <param name="keys">The array of keys to use for values</param>
        /// <param name="values">the values to write to file</param>
        private void saveConfig(String[] keys, String[] values)
        {
            ConfigData settings = new ConfigData("settings", "ArkConfigurationTool\\");

            List<String> options = new List<String>();

            // Create server list string
            String serverList = "";

            for (int i = 0; i < serverNames.Count; i++)
            {
                serverList += serverNames[i];

                if (i != serverNames.Count - 1)
                {
                    serverList += ",";
                }
            }

            // create options list
            for (int i = 0; i < keys.Length; i++)
            {
                options.Add(keys[i] + "=" + values[i]);
            }

            // Write to file
            settings.write(options);
        }
        /// <summary>
        ///     Sets up the environment for the configuration tool
        /// </summary>
        public void performSetup()
        {
            ConfigData settings = new ConfigData("settings", "ArkConfigurationTool\\");

            List<String> options = new List<String>();

            String[] keys =
            {
                "isFirstRun",
                "isDebugMode",
                "serverList"
            };

            String[] values =
            {
                "0",
                "0",
                ""
            };

            if (!File.Exists("ArkConfigurationTool\\settings.act"))
            {
                // Create Directories
                String[] dirs =
                {
                    Reference.serversDirectory,
                    Reference.steamCmdDirectory
                };

                foreach(String directory in dirs)
                {
                    if (!Directory.Exists(directory))
                    {
                        Directory.CreateDirectory(directory);
                    }
                }

                // Install SteamCMD
                if(!File.Exists(Reference.steamCmdDirectory + "steamcmd.exe"))
                {
                    // Download
                    List<String> lines = new List<String>();

                    lines.Add("");
                    lines.Add("=====================================");
                    lines.Add("        Downloading SteamCMD         ");
                    lines.Add("=====================================");
                    lines.Add("");

                    foreach (String line in lines)
                    {
                        handleOutput(line);
                    }

                    String fileUrl = Reference.steamCmdUrl;
                    String destination = Reference.steamCmdDirectory + "steamCMD.zip";
                    download(fileUrl, destination);
                }
            }
            else
            {
                // load settings
                options = settings.read();

                for(int i = 0; i < options.Count; i++)
                {
                    String[] option = options[i].Split('=');

                    String key = option[0];
                    String value = option[1];

                    switch(options[i])
                    {
                        case "isFirstRun":
                            values[0] = value;
                            break;
                        case "isDebugMode":
                            values[1] = value;
                            break;
                        case "serverList":
                            values[2] = value;
                            break;
                    }
                }
            }

            // set variables
            isFirstRun = values[0] == "1";
            isDebugMode = values[1] == "1";
            serverNames.AddRange(values[2].Split(','));

            // save changes
            saveConfig(keys, values);
        }