/// <summary>
        ///		Obtiene la colección de páginas relacionadas
        /// </summary>
        internal FileTargetModelCollection GetPagesRelated(FileTargetModel file, DocumentModel document)
        {
            FileTargetModelCollection files = new FileTargetModelCollection(Processor);

            // Si el archivo tiene páginas relacionadas, las añade, si no, busca las páginas más cercanas
            // de la categoría
            if (document.ChildPages != null && document.ChildPages.Count > 0)
            {
                foreach (FileModel child in document.ChildPages)
                {
                    foreach (FileTargetModel target in this)
                    {
                        if (child.FullFileName == target.File.FullFileName)
                        {
                            files.Add(target);
                        }
                    }
                }
            }
            else
            {
                // Añade los documentos de la categoría
                files = GetSiblings(file, true);
                // Quita archivos hasta quedarse con los más cercanos en fecha
                files = files.SliceByDate(file.DateUpdate, 10);
            }
            // Elimina los duplicados
            files.RemoveDuplicates();
            // Devuelve la colección de archivos
            return(files);
        }
        /// <summary>
        ///		Obtiene los archivos hijo de una etiqueta
        /// </summary>
        internal FileTargetModelCollection GetChildsTag(FileTargetModel file, DocumentModel document)
        {
            FileTargetModelCollection files = new FileTargetModelCollection(Processor);

            Application.Bussiness.Documents.DocumentBussiness bussiness = new Application.Bussiness.Documents.DocumentBussiness();

            // Obtiene los documentos que tengan la etiqueta asociada
            foreach (FileTargetModel child in this)
            {
                if (child.File.FileType == FileModel.DocumentType.Document)
                {
                    DocumentModel documentChild = bussiness.Load(Processor.Project,
                                                                 child.GetFullFileNameCompiledShort(Processor));
                    bool found = false;

                    // Recorre las etiquetas comprobando si se asocian a esta etiqueta
                    foreach (FileModel tagDocument in documentChild.Tags)
                    {
                        if (tagDocument.Path.EqualsIgnoreCase(file.File.Path))
                        {
                            found = true;
                        }
                    }
                    // Si pertenece a esta etiqueta, se añade
                    if (found)
                    {
                        files.Add(child);
                    }
                }
            }
            // Elimina los duplicados
            files.RemoveDuplicates();
            // Devuelve la colección
            return(files);
        }
        /// <summary>
        ///		Obtiene los archivos hijo de una colección
        /// </summary>
        internal FileTargetModelCollection GetChilds(FilesModelCollection files, bool isRecursive, bool onlyRss)
        {
            FileTargetModelCollection childs = new FileTargetModelCollection(Processor);

            // Recorre los archivos añadiendo los hijos
            foreach (FileModel file in files)
            {
                childs.AddRange(GetChilds(file, isRecursive, onlyRss));
            }
            // Elimina los duplicados
            childs.RemoveDuplicates();
            // Devuelve la colección
            return(childs);
        }
        /// <summary>
        ///		Obtiene una colección con una "rodaja" de elementos
        /// </summary>
        internal FileTargetModelCollection Slice(int start, int intNumber)
        {
            FileTargetModelCollection files = new FileTargetModelCollection(Processor);

            // Añade los archivos
            for (int index = start; index < start + intNumber; index++)
            {
                if (index < Count)
                {
                    files.Add(this [index]);
                }
            }
            // Devuelve la colección de archivos
            return(files);
        }
        /// <summary>
        ///		Obtiene los hijos de un documento de mapa de sitio
        /// </summary>
        internal FileTargetModelCollection GetChildsSitemap(FileTargetModel file, DocumentModel document)
        {
            FileTargetModelCollection files = GetChilds(document.ChildPages, true, false);

            // Elimina las páginas internas de categoría
            for (int index = files.Count - 1; index >= 0; index--)
            {
                if (files [index].Page > 0)
                {
                    files.RemoveAt(index);
                }
            }
            // Elimina los duplicados
            files.RemoveDuplicates();
            // Devuelve la colección de archivos
            return(files);
        }
        /// <summary>
        ///		Obtiene los archivos hijos de un directorio
        /// </summary>
        internal FileTargetModelCollection GetChildsCategory(FileTargetModel category, bool isRecursive)
        {
            FileTargetModelCollection files = new FileTargetModelCollection(Processor);

            // Recorre los archivos buscando los hijos de un directorio
            foreach (FileTargetModel file in this)
            {
                if (file.File.FileType == FileModel.DocumentType.Document &&
                    IsChild(category.File, file.File, isRecursive) &&
                    file.Page == 0)
                {
                    files.Add(file);
                }
            }
            // Elimina los duplicados
            files.RemoveDuplicates();
            // Devuelve la colección de archivos
            return(files);
        }
        /// <summary>
        ///		Obtiene los hermanos de un archivo
        /// </summary>
        internal FileTargetModelCollection GetSiblings(FileTargetModel file, bool onlyRss)
        {
            FileTargetModelCollection files = new FileTargetModelCollection(Processor);

            // Recorre los archivos buscando los que se encuentren en el mismo directorio
            foreach (FileTargetModel sibling in this)
            {
                if (sibling.File.FileType == FileModel.DocumentType.Document)
                {
                    if (IsSibling(sibling, file))
                    {
                        files.Add(sibling);
                    }
                }
            }
            // Elimina los duplicados
            files.RemoveDuplicates();
            // Devuelve la colección de archivos
            return(files);
        }
        /// <summary>
        ///		Obtiene la colección de padres de un archivo
        /// </summary>
        internal FileTargetModelCollection GetParents(FileTargetModel file)
        {
            FileTargetModelCollection parents = new FileTargetModelCollection(Processor);

            // Añade los padres
            foreach (FileTargetModel parent in this)
            {
                if (parent.File.FileType == FileModel.DocumentType.Document &&
                    IsChild(parent.File, file.File, true) &&
                    parent.Page == 0)
                {
                    parents.Add(parent);
                }
            }
            // Ordena por nombres
            parents.SortByPath(true);
            // Elimina los duplicados
            parents.RemoveDuplicates();
            // Devuelve la colección de padres
            return(parents);
        }