var jsWindows = {};
jsWindows.data = {};
jsWindows.zIndex = {};
jsWindows.top = function(id)
{
    var layer = document.getElementById(id);
    if(document.body.lastMoved)
        document.body.lastMoved.style.zIndex = layer.style.zIndex;
    layer.style.zIndex = 9999;
    document.body.lastMoved = layer;    
};
jsWindows.sticky = function(id,store)
{
    var THIS = this;
    var layer = document.getElementById(id);
    var offsetTop = layer.offsetTop-this.scrollY();
    var offsetLeft = layer.offsetLeft-this.scrollX();
    layer.sticky = true;
    adjust();

    function adjust()
    {
	if(!layer.move)
	{
            layer.style.top = offsetTop + THIS.scrollY() + 'px';
            layer.style.left = offsetLeft + THIS.scrollX() + 'px';
	    if(store) THIS.store(id);
	    setTimeout(adjust,50)    
	}
    }
};
jsWindows.move = function(evt,id,store)
{
    evt = evt || window.event;
    var THIS = this;
    var layer = document.getElementById(id);
    var offsetX = this.mouseX(evt)-layer.offsetLeft;
    var offsetY = this.mouseY(evt)-layer.offsetTop;
    this.top(id);
    layer.move = true;
    document.onselectstart = function(){return false};
    document.onmousemove = mouseMove;
    document.onmouseup = mouseUp;
    return false;
    
    function mouseMove(e)
    {
        e = e || window.event;
        layer.style.left = THIS.mouseX(e)-offsetX + 'px';
        layer.style.top = THIS.mouseY(e)-offsetY + 'px';
    }
    function mouseUp()
    {
        document.onselectstart = null;
        document.onmousemove = null;
        document.onmouseup = null;
	layer.move = null;
        if(store) THIS.store(id)
	if(layer.sticky) THIS.sticky(id,store)
    }
    
};
jsWindows.size = function(evt,id)
{
    evt = evt || window.event;
    var panel = evt.target || evt.srcElement
    while(panel.tagName!='DIV')
        panel = panel.parentNode;
    var THIS = this;
    var layer = document.getElementById(id);
    var layer = panel;
    var offsetX = this.mouseX(evt)-layer.offsetWidth;
    var offsetY = this.mouseY(evt)-layer.offsetHeight;
    this.top(id);
    layer.ondragstart = function(){return false};
    document.onselectstart = function(){return false};
    document.onmousemove = mouseMove;
    document.onmouseup = mouseUp;
    return false;

    function mouseMove(e)
    {
        e = e || window.event;
        layer.style.width = THIS.mouseX(e)-offsetX + 'px';
        layer.style.height = THIS.mouseY(e)-offsetY + 'px';
    }
    function mouseUp(e)
    {
    	layer.ondragstart = null;
        document.body.onselectstart = null;
        document.onmousemove = null;
        document.onmouseup = null
    }    
    
};
jsWindows.mouseX = function(e)
{
    return e.pageX || e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft
};
jsWindows.mouseY = function(e)
{
    return e.pageY || e.clientY + document.body.scrollTop + document.documentElement.scrollTop
};
jsWindows.scrollX = function(x)
{
    return document.documentElement.scrollLeft || document.body.scrollLeft
};
jsWindows.scrollY = function(y)
{
    return document.documentElement.scrollTop || document.body.scrollTop
};
jsWindows.store = function(id)
{
    var layer = document.getElementById(id);
    if(layer)
    {
	this.data[id] = {};
	this.data[id].top = layer.style.top;
	this.data[id].left = layer.style.left;
	this.data[id].width = layer.style.width;
	this.data[id].height = layer.style.height;
	if(layer.sticky)
	{
	    this.data[0] = {};
	    this.data[0].scrollX = this.scrollX();
	    this.data[0].scrollY = this.scrollY();
	}
    }
};
jsWindows.restore = function(id)
{
    if(this.data[0])
	window.scrollTo(this.data[0].scrollX,this.data[0].scrollY)
    var layer = document.getElementById(id);
    if(layer && this.data[id])
    {
	layer.style.top = this.data[id].top;
	layer.style.left = this.data[id].left;
	layer.style.width = this.data[id].width;
	layer.style.height = this.data[id].height;
    }	
};
jsWindows.addEvent = function(elem,name,call)
{
    if(window.attachEvent)
        elem.attachEvent('on' + name,call);
    else if(window.addEventListener)
    {
    	elem.addEventListener(name,call,false);
        if(elem.parentNode && elem.tagName!='BODY') //Fix NN7
            elem.parentNode.replaceChild(elem,elem)
    }
    else // Very old browsers
    {
        var old = elem['on'+name]; 
        if(typeof old == 'function')
            elem['on'+name] = function(){old();call()}; 
        else
            elem['on'+name] = call; 
    }
}
