

var $dom = {
    tag: function(name) {
        var res = document.createElement(name);
        for(var i=1; i<arguments.length; i++)
            $dom.add(res, arguments[i]);
        return res;
    },
    add: function add(tag) {
        for(var j=1; j<arguments.length; j++) {
            var el = arguments[j];
            if(!el)
                continue;
            if(el.constructor==Array) {
                for(var i=0; i<el.length; i++) {
                    if(el[i])
                        $dom.add(tag, el[i]);
                }
            } else {
                if(el.isEvent) {
                    el.element = tag;
                    if(tag.attachEvent)
                        tag.attachEvent(el.type, el.i_handler);
                    else
                        tag[el.type] = el.i_handler;
                } else if(el.isStyle)
                	tag.style[el.name] = el.value;
                else if(el.isAttr) {
                    if(el.name!="class")
                        tag.setAttribute(el.name, el.value);
                    else
                        tag.className = el.value;
                } else
                    tag.appendChild(el);
            }
        }
        return tag;
    },
    attr: function(nm, val) {
        return {
            isAttr: true,
            name: nm,
            value: val
        };
    },
    text: function(text) {
        return document.createTextNode(text);
    },
    event: function(type, handler) {
        var internal_handler = function(ev) {
            return arguments.callee.data.handler.call(arguments.callee.data.element, ev);
        }
        internal_handler.data = {
            isEvent: true,
            type: "on" + type,
            handler: handler,
            i_handler: internal_handler
        }
        return internal_handler.data;
    },
    style: function(nm, val) {
    	return {
    		isStyle: true,
    		name: nm,
    		value: val
    	}
    }
}
