/**
 * Content container class constructor
 * @access public
 * @param DOMNode node The node to create content container from
 */
function ContentContainer(node, uri)
{
    var type = node.getAttribute('type');
    var path = '';
    var page_data = new Array();
    var children = new Array();

    if (type != '') {
        this.type = node.getAttribute('type');
        this.path = uri;
        if (node.nodeType == 1) { // 1 = ELEMENT_NODE
            for (var i = 0; i < node.childNodes.length; i++) {
                childNode = node.childNodes.item(i);
                if (childNode.nodeType == 1) {
                    if (childNode.nodeName.toLowerCase() == 'children') {
                        this.children = getChildrenFromNode(childNode);
                    } else if (childNode.nodeName.toLowerCase() == 'page_data') {
                        this.page_data = getPageDataFromNode(childNode);
                    }
                }
            }
        }
    }
}

/**
 * ContainerChild class constructor
 * @access public
 * @param DOMNode node The node to create content container from
 */
function ContainerChild(node)
{
    var name = '';
    var container_type = '';
    var title = '';
    var menutitle = '';

    this.name = node.getAttribute('name');
    this.container_type = getSubNodeValue(node,'container_type');
    this.title = getSubNodeValue(node,'title');
    this.menutitle = getSubNodeValue(node,'menutitle');

    for (var i = 0; i < node.childNodes.length; i++) {
        this[node.childNodes[i].nodeName] = getNodeContent(node.childNodes[i]);
    }
}

/**
 * Returns array with container children (sections) for a DOM Node
 * @param DOMNode childrenNode The <children> node in response XML
 * @return Array an associative array holding ContainerChild elements. Section name is key.
 */
function getChildrenFromNode(childrenNode)
{
    var children = new Array();
    var name = '';
    for (var i = 0; i < childrenNode.childNodes.length; i++) {
        childNode = childrenNode.childNodes.item(i);
        if ((childNode.nodeType == 1) && (childNode.tagName == 'child')) {
            name = childNode.getAttribute('name');
            children[name] = new ContainerChild(childNode);
        }
    }
    return children;
}

/**
 * Returns array with page data for a DOM Node
 * @param DOMNode pageDataNode The <page_data> node in response XML
 * @return Array an associative array holding page data
 */
function getPageDataFromNode(pageDataNode)
{
    var page_data = new Array();
    for (var i = 0; i < pageDataNode.childNodes.length; i++) {
        childNode = pageDataNode.childNodes.item(i);
        if (childNode.nodeType == 1) {
            name = childNode.tagName;
            page_data[name] = getNodeContent(childNode);
        }
    }
    return page_data;
}

/**
 * Gets CMS_Language text
 * @access public
 * @param string name The text name
 * @return string The translated text in current language
 */
function getText(name)
{
    var textvarname = 'text_' + name;
    var text = '';
    if (window[textvarname]) text = window[textvarname];
    return text;
}

/**
 * Sets CMS_Language text
 * @access public
 * @param string name The text name
 * @param string text The translated text in current language
 */
function setText(name, text)
{
    var textvarname = 'text_' + name;
    window[textvarname] = text;
}

