var WNDSTATE_NOTHING = 0;
var WNDSTATE_MOVING = 1;
var WNDSTATE_SIZING_ALL = 6;
var WNDSTATE_SIZING_HORZ = 2;
var WNDSTATE_SIZING_VERT = 4;

var wndstate = WNDSTATE_NOTHING;
var wndstate_target = null;
var wndstate_startpos_x = 0;
var wndstate_startpos_y = 0;
var wndstate_orig_x = 0;
var wndstate_orig_y = 0;
var wndstate_min_x = 0; 
var wndstate_min_y = 0; 

var wnd_prop_changed = false;

var wnd_persistency_timer = 0;

var wnds = new Array();
var wndcnt = 0;

function RegWnd(wndid)
{
	wnd = $(wndid);
	$(wndid + "_handle").wndelem = wnd;
	//$(wndid + "_sizer_all").wndelem = wnd;
	//$(wndid + "_sizer_horz").wndelem = wnd;
	//$(wndid + "_sizer_vert").wndelem = wnd;
	wndcnt++;
	wnds[wndcnt] = wnd;
	//log(wndid + " window registered");
}

wndtoreg = new Array();

function newWnd(wndid)
{
	wndtoreg.push(wndid);
}

function WindowInit(event)
{
	for(i = 0; i < wndtoreg.length; i++)
	{
		RegWnd(wndtoreg[i]);
	}
	LoadWindowsState();
	
	wnd_prop_changed = false;
	wnd_persistency_timer = setInterval("SaveWindowsState();", 1000);		
}

addToBodyOnLoad(WindowInit);


function WindowMouseMoving(event)
{
	if(wndstate == WNDSTATE_NOTHING) return true;

	dx = mouse_pos_x - wndstate_startpos_x;
	dy = mouse_pos_y - wndstate_startpos_y;
	
	if(wndstate == WNDSTATE_MOVING)
	{
		trgleft = (wndstate_orig_x + dx);
		trgtop = (wndstate_orig_y + dy);
		trgleft = (trgleft >= 0)? trgleft : 0;
		trgtop = (trgtop >= 0)? trgtop : 0;
		wndstate_target.style.left = trgleft + 'px';
		wndstate_target.style.top = trgtop + 'px';
		wnd_prop_changed = true;
		//window.status=wndstate_target + 'px';
		return false; 
	}

	if((wndstate == WNDSTATE_SIZING_ALL) || (wndstate == WNDSTATE_SIZING_HORZ) ||
		(wndstate == WNDSTATE_SIZING_VERT) )
	{

		if((wndstate == WNDSTATE_SIZING_HORZ) || (wndstate == WNDSTATE_SIZING_ALL))
		{
			trgwid = wndstate_orig_x + dx;
			if(trgwid < wndstate_min_x) trgwid = wndstate_min_x;
			wndstate_target.style.width = trgwid + 'px';
			wnd_prop_changed = true;
		}
		
		if((wndstate & WNDSTATE_SIZING_VERT) || (wndstate == WNDSTATE_SIZING_VERT))
		{
			trghei = wndstate_orig_y + dy;
			if(trghei < wndstate_min_y) trghei = wndstate_min_y;
			wndstate_target.style.height = trghei + 'px';			
			wnd_prop_changed = true;
		}

		return false;
	}
}
addToBodyMouseMove(WindowMouseMoving);

function WindowMouseUp(event)
{
	wndstate = WNDSTATE_NOTHING;
}
addToBodyMouseUp(WindowMouseUp);


function init_wndstate_pos(event)
{
	updateMousePos(event)
	wndstate_startpos_x = mouse_pos_x;
	wndstate_startpos_y = mouse_pos_y;	
}

function handle_OnClick(e)
{
	if(!doc_loaded) return;
	if(e.button < 2)
	{
		trg = getEventTarget(e);
				
		wndstate = WNDSTATE_MOVING;
		wndstate_target = trg.wndelem;
				
		init_wndstate_pos(e);
		wndstate_orig_x = wndstate_target.offsetLeft;
		wndstate_orig_y = wndstate_target.offsetTop;
		ElementToFront(wndstate_target);
	}
}

function sizer_OnClick(e, sizer_kind)
{
	if(!doc_loaded) return;
	if(e.button < 2)
	{
		trg = getEventTarget(e);
		wndstate = sizer_kind;
		wndstate_target = trg.wndelem;
		
		wndstate_orig_x = wndstate_target.offsetWidth;
		wndstate_orig_y = wndstate_target.offsetHeight;
		wndstate_min_x = 200;
		wndstate_min_y = 250;
		ElementToFront(wndstate_target);		
		
	}
}

function SaveWndState(wnd)
{
	SaveCompState(wnd.id, "left", wnd.offsetLeft);
	SaveCompState(wnd.id, "top", wnd.offsetTop);
	//SaveCompState(wnd.id, "width", wnd.offsetWidth);
	//SaveCompState(wnd.id, "height", wnd.offsetHeight);
}

function Max(a, b)
{
	return (a>b)? a:b;
}

function LoadWndState(wnd)
{
	wnd.style.left = Max(0,LoadCompState(wnd.id, "left", wnd.offsetLeft)) + "px";
	wnd.style.top = Max(30,LoadCompState(wnd.id, "top", wnd.offsetTop)) + "px";
	//wnd.style.width = LoadCompState(wnd.id, "width", wnd.offsetWidth) + "px";
	//wnd.style.height = LoadCompState(wnd.id, "height", wnd.offsetHeight) + "px";
}


function SaveWindowsState()
{
	if(!wnd_prop_changed) return;
	for(i = 1; i < wnds.length; i++)
	{
		SaveWndState(wnds[i]);
	}
	wnd_prop_changed = false;
}

function LoadWindowsState()
{
	for(i = 1; i < wnds.length; i++)
	{
		LoadWndState(wnds[i]);
	}
	wnd_prop_changed = false;
}


