//
        // Helper Function
        //
        private bool GetModelStrings(long nameID, long sknID, long sklID, 
            long textureID, ref ModelDefinition m)
        {
            bool result = false;

            // Sometimes the first skin is named by the root directory.
            if (properties.ContainsKey(nameID))
            {
                m.name = (String)properties[nameID];
            }

            if (properties.ContainsKey(sknID) &&
                properties.ContainsKey(sklID) &&
                properties.ContainsKey(textureID))
            {
                m.skn = (String)properties[sknID];
                m.skn = m.skn.ToLower();
                m.skl = (String)properties[sklID];
                m.skl = m.skl.ToLower();
                m.tex = (String)properties[textureID];
                m.tex = m.tex.ToLower();

                result = true;
            }

            return result;
        }
        public List<ModelDefinition> GetModelStrings()
        {
            List<ModelDefinition> result = new List<ModelDefinition>();

            // Read in model 1
            ModelDefinition def = new ModelDefinition();
            def.anmListKey = GetAnimationList(directory);

            bool modelStringsResult = GetModelStrings((long)InibinHashID.SKIN_ONE_NAME,
                    (long)InibinHashID.SKIN_ONE_SKN,
                    (long)InibinHashID.SKIN_ONE_SKL,
                    (long)InibinHashID.SKIN_ONE_TEXTURE, ref def);

            if (modelStringsResult == true)
            {
                def.skin = 1;
                result.Add(def);
            }

            // Read in model 2
            def = new ModelDefinition();
            def.anmListKey = directory.Name;
            modelStringsResult = GetModelStrings((long)InibinHashID.SKIN_TWO_NAME,
                (long)InibinHashID.SKIN_TWO_SKN,
                (long)InibinHashID.SKIN_TWO_SKL,
                (long)InibinHashID.SKIN_TWO_TEXTURE, ref def);

            if (modelStringsResult == true)
            {
                def.skin = 2;
                result.Add(def);
            }

            // Read in model 3
            def = new ModelDefinition();
            def.anmListKey = directory.Name;
            modelStringsResult = GetModelStrings((long)InibinHashID.SKIN_THREE_NAME,
                (long)InibinHashID.SKIN_THREE_SKN,
                (long)InibinHashID.SKIN_THREE_SKL,
                (long)InibinHashID.SKIN_THREE_TEXTURE, ref def);

            if (modelStringsResult == true)
            {
                def.skin = 3;
                result.Add(def);
            }

            // Read in model 4
            def = new ModelDefinition();
            def.anmListKey = directory.Name;
            modelStringsResult = GetModelStrings((long)InibinHashID.SKIN_FOUR_NAME,
                (long)InibinHashID.SKIN_FOUR_SKN,
                (long)InibinHashID.SKIN_FOUR_SKL,
                (long)InibinHashID.SKIN_FOUR_TEXTURE, ref def);

            if (modelStringsResult == true)
            {
                def.skin = 4;
                result.Add(def);
            }

            // Read in model 5
            def = new ModelDefinition();
            def.anmListKey = directory.Name;
            modelStringsResult = GetModelStrings((long)InibinHashID.SKIN_FIVE_NAME,
                (long)InibinHashID.SKIN_FIVE_SKN,
                (long)InibinHashID.SKIN_FIVE_SKL,
                (long)InibinHashID.SKIN_FIVE_TEXTURE, ref def);

            if (modelStringsResult == true)
            {
                def.skin = 5;
                result.Add(def);
            }

            // Read in model 6
            def = new ModelDefinition();
            def.anmListKey = directory.Name;
            modelStringsResult = GetModelStrings((long)InibinHashID.SKIN_SIX_NAME,
                (long)InibinHashID.SKIN_SIX_SKN,
                (long)InibinHashID.SKIN_SIX_SKL,
                (long)InibinHashID.SKIN_SIX_TEXTURE, ref def);

            if (modelStringsResult == true)
            {
                def.skin = 6;
                result.Add(def);
            }

            // Read in model 7
            def = new ModelDefinition();
            def.anmListKey = directory.Name;
            modelStringsResult = GetModelStrings((long)InibinHashID.SKIN_SEVEN_NAME,
                (long)InibinHashID.SKIN_SEVEN_SKN,
                (long)InibinHashID.SKIN_SEVEN_SKL,
                (long)InibinHashID.SKIN_SEVEN_TEXTURE, ref def);

            if (modelStringsResult == true)
            {
                def.skin = 7;
                result.Add(def);
            }

            // Read in model 8
            def = new ModelDefinition();
            def.anmListKey = directory.Name;
            modelStringsResult = GetModelStrings((long)InibinHashID.SKIN_EIGHT_NAME,
                (long)InibinHashID.SKIN_EIGHT_SKN,
                (long)InibinHashID.SKIN_EIGHT_SKL,
                (long)InibinHashID.SKIN_EIGHT_TEXTURE, ref def);

            if (modelStringsResult == true)
            {
                def.skin = 8;
                result.Add(def);
            }

            return result;
        }
        private bool StoreModel(ModelDefinition def, out LOLModel model, Logger logger)
        {
            model = new LOLModel();
            model.skinNumber = def.skin;
            model.animationList = def.anmListKey.ToLower();

            // Find the skn.
            if (skns.ContainsKey(def.skn))
            {
                model.skn = skns[def.skn];
            }
            else
            {
                logger.Error("Unable to find skn file: " + def.skn);
                return false;
            }

            // Find the skl.
            if (skls.ContainsKey(def.skl))
            {
                model.skl = skls[def.skl];
            }
            else
            {
                logger.Error("Unable to find skl file: " + def.skl);
                return false;
            }

            // Find the texture.
            if (textures.ContainsKey(def.tex))
            {
                model.texture = textures[def.tex];
            }
            else
            {
                logger.Error("Unable to find texture file: " + def.tex);
                return false;
            }

            return true;
        }