var Parser = require(“./Parser.js”),

DomHandler = require("domhandler");

function defineProp(name, value){

delete module.exports[name];
module.exports[name] = value;
return value;

}

module.exports = {

Parser: Parser,
Tokenizer: require("./Tokenizer.js"),
ElementType: require("domelementtype"),
DomHandler: DomHandler,
get FeedHandler(){
        return defineProp("FeedHandler", require("./FeedHandler.js"));
},
get Stream(){
        return defineProp("Stream", require("./Stream.js"));
},
get WritableStream(){
        return defineProp("WritableStream", require("./WritableStream.js"));
},
get ProxyHandler(){
        return defineProp("ProxyHandler", require("./ProxyHandler.js"));
},
get DomUtils(){
        return defineProp("DomUtils", require("domutils"));
},
get CollectingHandler(){
        return defineProp("CollectingHandler", require("./CollectingHandler.js"));
},
// For legacy support
DefaultHandler: DomHandler,
get RssHandler(){
        return defineProp("RssHandler", this.FeedHandler);
},
//helper methods
parseDOM: function(data, options){
        var handler = new DomHandler(options);
        new Parser(handler, options).end(data);
        return handler.dom;
},
parseFeed: function(feed, options){
        var handler = new module.exports.FeedHandler(options);
        new Parser(handler, options).end(feed);
        return handler.dom;
},
createDomStream: function(cb, options, elementCb){
        var handler = new DomHandler(cb, options, elementCb);
        return new Parser(handler, options);
},
// List of all events that the parser emits
EVENTS: { /* Format: eventname: number of arguments */
        attribute: 2,
        cdatastart: 0,
        cdataend: 0,
        text: 1,
        processinginstruction: 2,
        comment: 1,
        commentend: 0,
        closetag: 1,
        opentag: 2,
        opentagname: 1,
        error: 1,
        end: 0
}

};