/*
   Copyright 2010 Hanov Solutions Inc. All Rights Reserved

   steve.hanov@gmail.com
 */

function Loader( s )
{
    var node;
    // Node was renamed, and ImageNode is no longer available because it wasn't
    // well thought out.
    if ( s["type"] === "Node" || s["type"] === "ImageNode" ) {
        s["type"] = "BaseNode";
    }
    try {
        node = new window[s.type]();
    } catch( e ) {
        alert(s.type + ": " + e);
    }
    node.load( s );
    return node;
}

/**
 The document simply contains the root node.
 @constructor
 */
function DrawDoc()
{
    this.root = new BaseNode();
}

DrawDoc.prototype = {
    collapseGroups: function( nodes )
    {
        var result = [];
        var added = {};

        // for each node,
        for ( var i = 0; i < nodes.length; i++ ) {
            var node = nodes[i];
            // if it's a group member,
            if ( node.isGroupMember() ) {
                // set node to group parent.
                node = node.parent;
            }

            // if node has not yet been added,
            if ( !(node.id in added) ) {
                // add node to result.
                added[node.id] = true;
                result.push( node );
            }
        }

        return result;
    }
};

