  var dom = {
    doc:document,
    isReady: false,
    readyBound: false,
    readyList: [],

    append:function(el, name, attrs) {
      var child = this.create(name, attrs);
      el.appendChild(child);
      return child;
    },

    create:function(name, proprieties) {
      var el = this.doc.createElement(name);
      this.setProprieties(el, proprieties);
      return el;
    },

    setProprieties:function(el, proprieties) {
      for (propriety in proprieties) {
        el[propriety] = proprieties[propriety];
      }
    },

    setStyles:function(el, styles) {
      for (oneStyle in styles) {
        el.style[oneStyle] = styles[oneStyle];
      }
    },

    getStyle:function(el, oneStyle) {
      return el.style[oneStyle];
    },

    onReady: function(fn) {
      this.bindReady();
      if (dom.isReady) {
        fn.call( document );
      } else {
        dom.readyList.push( function() { return fn.call(document); } );
      }
    },

    ready: function() {
      if (!dom.isReady) {
        dom.isReady = true;
        if (dom.readyList) {
          for (var fn = 0; fn < dom.readyList.length; fn++) {
            dom.readyList[fn].apply(document);
          }
          dom.readyList = null;
        }
      }
    },

    bindReady: function() {
      if (dom.readyBound) return;
      dom.readyBound = true;

      if (document.addEventListener && !core.isOpera) document.addEventListener( "DOMContentLoaded", dom.ready, false );

      if (core.isIE && window == top) (function() {
        if (dom.isReady) return;
        try {
          document.documentElement.doScroll("left");
        } catch(error) {
          setTimeout( arguments.callee, 0 );
          return;
        }
        dom.ready();
      })();

      if (core.isOpera) document.addEventListener( "DOMContentLoaded", function () {
        if (self.isReady) return;
        dom.ready();
      }, false);

      if (core.isSafari) { (function() {
        if (dom.isReady) return;
        if (document.readyState != "loaded" && document.readyState != "complete") {
          setTimeout( arguments.callee, 0 );
          return;
        }
        dom.ready();
      })();
      }
      if (window.addEventListener) window.addEventListener("load", dom.ready, false);
      else if (window.attachEvent) window.attachEvent("onload", dom.ready);
    }
  }

  function $(id){
    return document.getElementById(id) || window[id];
  }