// This object will be used as the prototype for Nodes when creating a // DOM-Level-1-compliant structure. var NodePrototype = module.exports = {

get firstChild() {
        var children = this.children;
        return children && children[0] || null;
},
get lastChild() {
        var children = this.children;
        return children && children[children.length - 1] || null;
},
get nodeType() {
        return nodeTypes[this.type] || nodeTypes.element;
}

};

var domLvl1 = {

tagName: "name",
childNodes: "children",
parentNode: "parent",
previousSibling: "prev",
nextSibling: "next",
nodeValue: "data"

};

var nodeTypes = {

element: 1,
text: 3,
cdata: 4,
comment: 8

};

Object.keys(domLvl1).forEach(function(key) {

var shorthand = domLvl1[key];
Object.defineProperty(NodePrototype, key, {
        get: function() {
                return this[shorthand] || null;
        },
        set: function(val) {
                this[shorthand] = val;
                return val;
        }
});

});