public static XMLBuilder.XMLElement[] Remove(XMLBuilder.XMLElement[] arrElements, int iIndex)
 {
     XMLBuilder.XMLElement[] tmparr = new XMLBuilder.XMLElement[512];
     for (int i = 0; i < Array.IndexOf(arrElements, null); i++)
     {
         if (i != iIndex)
         {
             tmparr[Array.IndexOf(tmparr, null)] = arrElements[i];
         }
     }
     return(tmparr);
 }
 public static XMLBuilder.XMLElement[] Add(XMLBuilder.XMLElement[] arrElements, int iIndex, XMLBuilder.XMLElement xmleElement)
 {
     XMLBuilder.XMLElement[] tmparr = new XMLBuilder.XMLElement[512];
     for (int i = 0; i < Array.IndexOf(arrElements, null); i++)
     {
         if (i == iIndex)
         {
             tmparr[Array.IndexOf(tmparr, null)] = xmleElement;
         }
         tmparr[Array.IndexOf(tmparr, null)] = arrElements[i];
     }
     if (tmparr[iIndex] == null)
     {
         tmparr[iIndex] = xmleElement;
     }
     return(tmparr);
 }
        public int addElementAt(string strElement, string[,] arrAttributes, string strAttributes, string strText, int iElemIndex, int iElemLevel)
        {
            if (iElemIndex < 0)
            {
                iElemIndex = (Array.IndexOf(this.elements, null) > 0) ? Array.IndexOf(this.elements, null) - 1 : 0;
            }
            if (iElemLevel < 0)
            {
                iElemLevel = this.elements[iElemIndex - 1].level;
            }
            XMLElement Elem;
            int        iAddIndex = iElemIndex;

            if (iElemIndex > 0)
            {
                for (int i = iElemIndex; i < Array.IndexOf(this.elements, null); i++)
                {
                    Console.WriteLine(this.elements[i].level + " > " + (iElemLevel + 1));
                    if (this.elements[i].level > iElemLevel + 1)
                    {
                        iAddIndex++;
                    }
                    else if (this.elements[i].level <= this.elements[iElemIndex].level)
                    {
                        break;
                    }
                }
                Elem = new XMLBuilder.XMLElement(strElement, strAttributes, arrAttributes, strText, iElemLevel + 1, this);
            }
            else
            {
                Elem = new XMLBuilder.XMLElement(strElement, strAttributes, arrAttributes, strText, 1, this);
            }
            this.elements = XMLUtilities.Add(this.elements, iAddIndex, Elem);
            for (int i = iAddIndex; i < Array.IndexOf(this.elements, null); i++)
            {
                this.elements[i].index = i;
            }
            return(iAddIndex);
        }
        public int moveElement(int iElem1Index, int iElem2Index)
        {
            int i;
            int iNewIndex = -1;

            XMLBuilder.XMLElement[] arrElem1Elements = new XMLBuilder.XMLElement[512];
            arrElem1Elements[0] = this.elements[iElem1Index];
            XMLBuilder.XMLElement[] arrElem2Elements = new XMLBuilder.XMLElement[512];
            arrElem2Elements[0] = this.elements[iElem2Index];
            for (i = iElem1Index; i < Array.IndexOf(this.elements, null); i++)
            {
                if (this.elements[i].level > this.elements[iElem1Index].level)
                {
                    arrElem1Elements[Array.IndexOf(arrElem1Elements, null)] = this.elements[i];
                }
                else if (i > iElem1Index)
                {
                    break;
                }
            }
            for (i = iElem2Index; i < Array.IndexOf(this.elements, null); i++)
            {
                if (this.elements[i].level > this.elements[iElem2Index].level)
                {
                    arrElem2Elements[Array.IndexOf(arrElem2Elements, null)] = this.elements[i];
                }
                else if (i > iElem2Index)
                {
                    break;
                }
            }
            XMLBuilder.XMLElement[] arrMovedElements = new XMLBuilder.XMLElement[512];
            if (iElem1Index < iElem2Index)
            {
                // start to the 1st element
                for (i = 0; i < iElem1Index; i++)
                {
                    arrMovedElements[Array.IndexOf(arrMovedElements, null)] = this.elements[i];
                }
                // end of 1st element to end of 2nd element
                for (i = iElem1Index + Array.IndexOf(arrElem1Elements, null); i < iElem2Index + Array.IndexOf(arrElem2Elements, null); i++)
                {
                    arrMovedElements[Array.IndexOf(arrMovedElements, null)] = this.elements[i];
                }
                // 1st element and all child elements
                iNewIndex = Array.IndexOf(arrMovedElements, null);
                for (i = 0; i < Array.IndexOf(arrElem1Elements, null); i++)
                {
                    arrMovedElements[Array.IndexOf(arrMovedElements, null)] = arrElem1Elements[i];
                }
                // end of 2nd element to end
                for (i = iElem2Index + Array.IndexOf(arrElem2Elements, null); i < Array.IndexOf(this.elements, null); i++)
                {
                    arrMovedElements[Array.IndexOf(arrMovedElements, null)] = this.elements[i];
                }
                this.elements = arrMovedElements;
            }
            else
            {
                // start to the 2nd element
                for (i = 0; i < iElem2Index; i++)
                {
                    arrMovedElements[Array.IndexOf(arrMovedElements, null)] = this.elements[i];
                }
                // 1st element and all child elements
                iNewIndex = Array.IndexOf(arrMovedElements, null);
                for (i = 0; i < Array.IndexOf(arrElem1Elements, null); i++)
                {
                    arrMovedElements[Array.IndexOf(arrMovedElements, null)] = arrElem1Elements[i];
                }
                // 2nd element to 1st element
                for (i = iElem2Index; i < iElem1Index; i++)
                {
                    arrMovedElements[Array.IndexOf(arrMovedElements, null)] = this.elements[i];
                }
                // end of 1st element to end
                for (i = iElem1Index + Array.IndexOf(arrElem1Elements, null); i < Array.IndexOf(this.elements, null); i++)
                {
                    arrMovedElements[Array.IndexOf(arrMovedElements, null)] = this.elements[i];
                }
                this.elements = arrMovedElements;
            }
            for (i = 0; i < Array.IndexOf(this.elements, null); i++)
            {
                this.elements[i].index = i;
            }
            return(iNewIndex);
        }