/**
*
* appendDom - Extremely flexible tool for dynamic dom creation.
*   http://byron-adams.com/projects/jquery/appendDom
*
* Copyright (c) 2007 Byron Adams (byron.adams54@gmail.com)
* Dual licensed under the MIT (MIT-LICENSE.txt)
* and GPL (GPL-LICENSE.txt) licenses.
*
* 11/03/09 - Bugs fixed by Patricio Palladino pato89 (at) gmail (dot)com
*
*/
;(function($) {
$.fn.appendDom = function(template) {
  return this.each(function() {
    for (element in template) {
      var el = (typeof(template[element].tagName) === 'string') ?
        document.createElement(template[element].tagName) :
        document.createTextNode('');
      delete template[element].tagName;
      for (attrib in template[element]){
        if(attrib == 'className'){
          $(el).addClass(template[element][attrib]);
          delete template[element].className;
        }
        switch ( typeof(template[element][attrib]) ) {
          case 'string' :
            if ( typeof(el[attrib]) === 'string' ) {
              el[attrib] = template[element][attrib];
            } else {
              el.setAttribute(attrib, template[element][attrib]);
            }
            break;
          case 'function':
            el[attrib] = template[element][attrib];
            break;
          case 'object' :
            if (attrib === 'childNodes') $(el).appendDom(template[element][attrib]);
            break;
        }
      }
      this.appendChild(el);
    }
  });
};
})(jQuery);
