/**<summary>Constructs the base variable.</summary>*/
 public Variable(VarInfo info, object value)
 {
     this.Info  = info;
     this.Value = value;
 }
        //=========== LOADING ============
        #region Loading

        /**<summary>Loads the item modification from xml.</summary>*/
        public void LoadXml(XmlNode node)
        {
            List <string> unrecognized   = new List <string>();
            List <string> parsingErrors  = new List <string>();
            List <string> alreadyDefined = new List <string>();
            bool          looseText      = false;

            // Read all variables
            XmlNodeList nodeList = node.ChildNodes;

            foreach (XmlNode varNode in nodeList)
            {
                string varName = varNode.Name;
                if (varName == "#comment")
                {
                    continue;
                }
                else if (varName == "#text")
                {
                    looseText = true;
                }
                try {
                    if (VarInfoList.ContainsKey(varName))
                    {
                        VarInfo varInfo = VarInfoList[varName];
                        object  value   = ParseVariable(varInfo.Type, varNode.InnerText);
                        if (value is Exception)
                        {
                            parsingErrors.Add(varInfo.Type.ToString() + " " + varName + ": " + ((Exception)value).Message);
                        }
                        else
                        {
                            VarList.Add(varName, new Variable(varInfo, value));
                        }
                    }
                    else
                    {
                        unrecognized.Add(varName);
                    }
                }
                catch (KeyNotFoundException) {
                    unrecognized.Add(varName);
                }
                catch (ArgumentException) {
                    alreadyDefined.Add(varName);
                }
            }

            // Log errors
            if (unrecognized.Count > 0 || parsingErrors.Count > 0 || alreadyDefined.Count > 0)
            {
                if (!ErrorLogger.IsOpen)
                {
                    ErrorLogger.Open();
                }
                ErrorLogger.WriteErrorHeader();
                ErrorLogger.WriteLine("There were errors when reading ItemID: " + ID.ToString() + ".");
                if (looseText)
                {
                    ErrorLogger.WriteLine("Loose text is present inside the element.");
                }
                if (unrecognized.Count > 0)
                {
                    ErrorLogger.WriteLine();
                    ErrorLogger.WriteLine("Unrecognized Variables:");
                    foreach (string s in unrecognized)
                    {
                        ErrorLogger.WriteLine("- " + s);
                    }
                }
                if (parsingErrors.Count > 0)
                {
                    ErrorLogger.WriteLine();
                    ErrorLogger.WriteLine("Parsing Errors:");
                    foreach (string s in parsingErrors)
                    {
                        ErrorLogger.WriteLine("- " + s);
                    }
                }
                if (alreadyDefined.Count > 0)
                {
                    ErrorLogger.WriteLine();
                    ErrorLogger.WriteLine("Already Defined:");
                    foreach (string s in alreadyDefined)
                    {
                        ErrorLogger.WriteLine("- " + s);
                    }
                }
                ErrorLogger.WriteLine();
            }
        }