
function DynEl(window, id, body, left, top, width) {

    this.window = window;
    this.id = id;
	this.body = body;
    
    var d = window.document;
    
    d.writeln('<STYLE TYPE="text/css">');
    d.write('#' + id + ' {position:absolute;');
    if (left) d.write('left:' + left + ';');
    if (top) d.write('top:' + top + ';');
    if (width) d.write('width:' + width + ';');
	if (navigator.appName.indexOf("Netscape") != -1) {
		d.write('visibility:hide;');
	} else {
		d.write('visibility:none;');
	}
    d.writeln('}');
    d.writeln('</STYLE>');
}

if (navigator.appName.indexOf("Netscape") != -1) {


    DynEl.prototype.output = function() {
        var d = this.window.document;

        d.writeln('<DIV ID="' + this.id + '">');
        d.writeln(this.body);
        d.writeln("</DIV>");

        this.layer = d[this.id];
    }

    DynEl.prototype.moveTo = function(x,y) { this.layer.moveTo(x,y); }
    DynEl.prototype.moveBy = function(x,y) { this.layer.moveBy(x,y); }
    DynEl.prototype.show = function() { this.layer.visibility = "show"; }
    DynEl.prototype.hide = function() { this.layer.visibility = "hide"; }
    DynEl.prototype.setStackingOrder = function(z) { this.layer.zIndex = z; }
    DynEl.prototype.setBgColor = function(color) {
        this.layer.bgColor = color; 
    }
    DynEl.prototype.setBgImage = function(image) { 
        this.layer.background.src = image;
    }

    DynEl.prototype.getX = function() { return this.layer.left; }
    DynEl.prototype.getY = function() { return this.layer.right; }
    DynEl.prototype.getWidth = function() { return this.layer.width; }
    DynEl.prototype.getHeight = function() { return this.layer.height; }
    DynEl.prototype.getStackingOrder = function() { return this.layer.zIndex; }
    DynEl.prototype.isVisible = function() { 
        return this.layer.visibility == "show"; 
    }

    DynEl.prototype.setBody = function() {
        for(var i = 0; i < arguments.length; i++)
            this.layer.document.writeln(arguments[i]);
        this.layer.document.close();
    }


    DynEl.prototype.addEventHandler = function(eventname, handler) {

        this.layer.captureEvents(DynEl._eventmasks[eventname]);
        var dynel = this;  // Current DynEl for use in the nested function.

        this.layer[eventname] = function(event) { 
            return handler(dynel, event.type, event.x, event.y, 
                           event.which, event.which,
                           ((event.modifiers & Event.SHIFT_MASK) != 0),
                           ((event.modifiers & Event.CTRL_MASK) != 0),
                           ((event.modifiers & Event.ALT_MASK) != 0));
        }
    }

    DynEl.prototype.removeEventHandler = function(eventname) {
        this.layer.releaseEvents(DynEl._eventmasks[eventname]);
        delete this.layer[eventname];
    }

    DynEl._eventmasks = {
      onabort:Event.ABORT, onblur:Event.BLUR, onchange:Event.CHANGE,
      onclick:Event.CLICK, ondblclick:Event.DBLCLICK, 
      ondragdrop:Event.DRAGDROP, onerror:Event.ERROR, 
      onfocus:Event.FOCUS, onkeydown:Event.KEYDOWN,
      onkeypress:Event.KEYPRESS, onkeyup:Event.KEYUP, onload:Event.LOAD,
      onmousedown:Event.MOUSEDOWN, onmousemove:Event.MOUSEMOVE, 
      onmouseout:Event.MOUSEOUT, onmouseover:Event.MOUSEOVER, 
      onmouseup:Event.MOUSEUP, onmove:Event.MOVE, onreset:Event.RESET,
      onresize:Event.RESIZE, onselect:Event.SELECT, onsubmit:Event.SUBMIT,
      onunload:Event.UNLOAD
    };
}

if (navigator.appName.indexOf("Microsoft") != -1) {

    DynEl.prototype.output = function() {
        var d = this.window.document;

        d.writeln('<DIV ID="' + this.id + '">');
        d.writeln(this.body);
        d.writeln("</DIV>");

        this.element = d.all[this.id];
        this.style = this.element.style;
    }

    DynEl.prototype.moveTo = function(x,y) {
        this.style.pixelLeft = x;
        this.style.pixelTop = y;
    }
    DynEl.prototype.moveBy = function(x,y) {
        this.style.pixelLeft += x;
        this.style.pixelTop += y;
    }

    DynEl.prototype.show = function() { this.style.visibility = "visible"; }
    DynEl.prototype.hide = function() { this.style.visibility = "hidden"; }
    DynEl.prototype.setStackingOrder = function(z) { this.style.zIndex = z; }
    DynEl.prototype.setBgColor = function(color) { 
        this.style.backgroundColor = color; 
    }
    DynEl.prototype.setBgImage = function(image) { 
        this.style.backgroundImage = image;
    }

    DynEl.prototype.getX = function() { return this.style.pixelLeft; }
    DynEl.prototype.getY = function() { return this.style.pixelRight; }
    DynEl.prototype.getWidth = function() { return this.style.width; }
    DynEl.prototype.getHeight = function() { return this.style.height; }
    DynEl.prototype.getStackingOrder = function() { return this.style.zIndex; }
    DynEl.prototype.isVisible = function() { 
        return this.style.visibility == "visible"; 
    }

    DynEl.prototype.setBody = function() {
        var body = "";
        for(var i = 0; i < arguments.length; i++) {
            body += arguments[i] + "\n";
        }
        this.element.innerHTML = body;
    }

    DynEl.prototype.addEventHandler = function(eventname, handler) {
        var dynel = this;

        this.element[eventname] = function() { 
            var e = dynel.window.event;
            e.cancelBubble = true;
            return handler(dynel, e.type, e.x, e.y, 
                           e.button, e.keyCode, 
                           e.shiftKey, e.ctrlKey, e.altKey); 
        }
    }

    DynEl.prototype.removeEventHandler = function(eventname) {
        delete this.element[eventname];
    }
}
