+var manipulate = function(e, params, action) {
+ var dom;
+ if(params instanceof DocumentElement) {
+ dom = params.dom()
+ } else {
+ dom = DocumentNodeElement.createDOM(params);
+ }
+ e.$element[action](dom);
+ return documentElementFromHTMLElement(dom);
+};
+
+$.extend(DocumentNodeElement.prototype, {
+ append: function(params) {
+ manipulate(this, params, 'append');
+ },
+ before: function(params) {
+ manipulate(this, params, 'before');
+
+ },
+ after: function(params) {
+ manipulate(this, params, 'after');
+ }
+});
+
+DocumentNodeElement.createDOM = function(params) {
+ var dom;
+ if(params.text) {
+ dom = $(document.createTextNode(params.text));
+ } else {
+ dom = $('<' + params.tag + '>');
+ if(params.klass)
+ dom.attr('class', params.klass);
+ }
+ return dom;
+};
+
+$.extend(DocumentTextElement.prototype, {
+ setText: function(text) {
+ this.$element[0].data = text;
+ },
+ getText: function() {
+ return this.$element.text();
+ }
+});
+