﻿// Archivo JScript

function OuterNode(Id) {

    this.Id = Id;
    this.Next = null;
    this.List = new OuterList();
}

function OuterList() {

    var startOuterList = null;
    
    this.insert = function insertOuterList(Id) {
    
        var newOuterNode = new OuterNode(Id);
        var aliasStart = startOuterList;
        
        // Iterates through the list:
        while(aliasStart != null && aliasStart.Next != null)
            aliasStart = aliasStart.Next;
            
        if(aliasStart == null)
            startOuterList = newOuterNode;
            
        else
            aliasStart.Next = newOuterNode;
    };
    
    this.deleteAll = function deleteOuterList() {
    
        while(startOuterList != null) {
        
            var tempStart = startOuterList;
            
            startOuterList = startOuterList.Next;
            tempStart.List.deleteAll();
            this.getDisplayContext().document.getElementById(tempStart.Id).style.display = "none";
            tempStart.List = null;
            tempStart = null;
        }
    }
    
    this.deleteElement = function deleteOuterNode(Id) {
    
        var previous = null;
        var current = startOuterList;

        while(current != null && current.Id != Id) {
        
            previous = current;
            current = current.Next;
        }
        
        // The target element is the first one:
        if(previous == null && current != null) {
        
            startOuterList = current.Next;
            current.List.deleteAll();
            this.getDisplayContext().document.getElementById(current.Id).style.display = "none";
            current.List = null;
            current = null;
        }
        else if(previous != null && current != null) {
        
            previous.Next = current.Next;
            current.List.deleteAll();
            this.getDisplayContext().document.getElementById(current.Id).style.display = "none";
            current.List = null;
            current = null; 
        }
    };
   
    this.findNode = function findOuterNode(Id) {
    
        var aliasStart = startOuterList;
        
        while(aliasStart != null && aliasStart.Id != Id) {
        
            var foundOuterNode = aliasStart.List.findNode(Id);
            
            if(foundOuterNode != null)
                return foundOuterNode;
            
            aliasStart = aliasStart.Next;
        }
            
        return aliasStart;
    };
    
    this.display = function displayOuterList() {
    
        var aliasStart = startOuterList;
        
        while(aliasStart != null) {
        
            this.getDisplayContext().document.getElementById(aliasStart.Id).style.display = "block";
            aliasStart.List.display();
            
            aliasStart = aliasStart.Next;
        }
    };
    
    this.getDisplayContext = function getContainer() {
    
        //return parent.main.document.getElementById(containerId);
        return parent.output.document.getElementById(containerId);
    };
}

function initializeATC() {
    
    //debugger;
    if(parent.document.getElementById(mainFrameSetId).ATCTree == null)
        parent.document.getElementById(mainFrameSetId).ATCTree = new OuterList(); 
}

function findParent(currentElement, tagName) {

    var parentElement = currentElement.parentElement;
    
    while(parentElement != null && parentElement.tagName != tagName)
        parentElement = parentElement.parentElement;

    return parentElement;
}

function guardElement(Id) {

    //debugger;
    var objATCTree = parent.frameElement.ATCTree;
    var objContainer = objATCTree.getDisplayContext();
    var parentRootNodeId = null;
    
    var parentElement = findParent(objContainer.document.getElementById(Id), "DIV");
   
    if(parentElement != null)
        parentRootNodeId = parentElement.Id;
   
    // The node is a rootNode:
    if(parentRootNodeId == null) {
    
        // The element does not exist, so insert it:
        if(objATCTree.findNode(Id) == null)
            objATCTree.insert(Id);
    }
    else {
    
        // The node is a child node or inner list node, so find the parent node:
        var foundOuterNode = objATCTree.findNode(parentRootNodeId);
        
        // Insert the child:
        if(foundOuterNode != null) {
        
            // The inner list node does not exist, so insert it:
            if(foundOuterNode.List.findNode(Id) == null)
                foundOuterNode.List.insert(Id);
        }
    }
}

function quitElement(Id) {

    //debugger;
    var objATCTree = parent.frameElement.ATCTree;
    var objContainer = objATCTree.getDisplayContext();
    var parentRootNodeId = null;
    
    var parentElement = findParent(objContainer.document.getElementById(Id), "DIV");
   
    if(parentElement != null)
        parentRootNodeId = parentElement.Id;
   
    // The node is a rootNode:
    if(parentRootNodeId == null) {
      
        // The element exist, so delete it:
        if(objATCTree.findNode(Id) != null)
            objATCTree.deleteElement(Id);
    }
    else {
    
        // The node is a child node or inner list node, so find the parent node:
        var foundOuterNode = objATCTree.findNode(parentRootNodeId);
        
        // Look for the child:
        if(foundOuterNode != null) {
            foundOuterNode.List.deleteElement(Id);
        }
    }
}

function guardSearch(Id, addOrDelete) {
    
    // Add an element:
    if(addOrDelete > 0)
        guardElement(Id);
    
    else
        quitElement(Id);
}

function displaySearch() {

    //debugger;    
    if(output.location.href.indexOf(ATCBodyId, 0) >= 0) {
    
        var mainFrame = parent.document.getElementById(mainFrameSetId);
        mainFrame.ATCTree.display();    
    
    }
}

var mainFrameSetId = 'output'
var containerId = 'Accion'
var ATCBodyId   = 'indsus.htm'
