/// <summary>
        /// Gets all scores for each users which has played in given parameter as GroupName
        /// </summary>
        /// <param name="GroupName">Name of group which want to get user scores from</param>
        /// <returns>Scores containing information about user scores.</returns>
        public Scores GetAllScores(string GroupName)
        {
            Scores scores = new Scores();

            DataTable dt = TableMethods.GetTable(BaseMethod.DbPath, "UserValues",
                "GroupName", "=", new object[] { GroupName });

            if (dt != null && dt.Rows.Count > 0)
            {
                Dictionary<int, string> AllFields = new Dictionary<int, string>();
                FieldsManager fm = new FieldsManager();
                UserValuesManager userFieldsManager = new UserValuesManager();
                ValidItems validItems = new ValidItems();
                var allFields = fm.GetAllFields();
                foreach (var field in allFields)
                    AllFields.Add(field.ID, field.Title);
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    int FieldID = (int)dt.Rows[i]["FieldID"];
                    string UserNick = (string)dt.Rows[i]["UserNick"];
                    string FieldValue = (string)dt.Rows[i]["FieldValue"];
                    if (!AllFields.ContainsKey(FieldID))
                        continue;
                    string FieldTitle = AllFields[FieldID];

                    int score = 0;
                    bool isValidValue = validItems.IsValidValue(FieldID, FieldValue);
                    if (isValidValue)
                    {
                        if (userFieldsManager.IsValueDuplicate(FieldID, GroupName, FieldValue))
                            score = 5;
                        else score = 10;
                    }

                    UserScores us = scores.GetUserScores(UserNick);
                    ScoreItem si = new ScoreItem()
                    {
                        ID = FieldID,
                        Value = FieldValue,
                        Title = FieldTitle,
                        Score = score
                    };
                    us.AddNewScoreItem(si);
                }
            }
            return scores;
        }
        /// <summary>
        /// Read all items in for given items in file per each line and sync with 
        /// database.
        /// </summary>
        /// <param name="field">field to sync it's valid items with database</param>
        void _SyncItems(Field field)
        {
            using (StreamReader sr = new StreamReader(field.ValidItemsFilePath))
            {
                long n = 0;
                DbMan.ValidItems vi = new DbMan.ValidItems();
                if (field.ID < 1)
                    field.ID = new FieldsManager().GetFieldID(field);

                List<string> words = null;
                try
                {
                    words = new Crawler.Crawler().GetAllWords(field.URL);
                }
                catch { }
                if (words != null)
                {
                    foreach (var word in words)
                    {
                        vi.AddNewValidItem(field.ID, word);
                        if (OnProgress != null)
                            OnProgress(field.Title, ++n);
                    }
                }

                vi.DeleteValidItems(field.ID);
                while (!sr.EndOfStream)
                {
                    string line = sr.ReadLine();
                    vi.AddNewValidItem(field.ID, line);
                    // notify to UI
                    if (OnProgress != null)
                        OnProgress(field.Title, ++n);
                }
            }
            if (OnFinish != null)
                OnFinish(this);
        }