﻿var dpop_state = new Array();
var dpop_closedelayms = 500;
var dpop_opendelayms = 250;
var dpop_debug = false;

// 0: divID
// 1: isOpen
// 2: closerID
// 3: openerLock
// 4: openerID

function dbg(msg)
{
	if (dpop_debug) document.getElementById("debug").innerHTML += msg + "<br/>";
}

function DPop_FindOrCreateState(divID)
{
	for (i=0; i < dpop_state.length; i++)
	{
		if (dpop_state[i][0] == divID)
			return dpop_state[i];
	}
	
	var state = new Array();

	dpop_state[dpop_state.length] = state;

	state[0] = divID;
	state[1] = false;
	state[2] = 0;
	state[3] = false;
	state[4] = 0;

	dbg("created: " + divID);
	return state;
}

function DPop_Lock(divID)
{
	var state = DPop_FindOrCreateState(divID);
	state[3] = true;
	dbg("lock");
}

function DPop_Unlock(divID)
{
	var state = DPop_FindOrCreateState(divID);
	state[3] = false;
	dbg("unlock");
}

function DPop_BeginOpen(x, y, divID)
{
//alert("x:"+x+",y:"+y);
	var divobj = document.getElementById(divID);

	if (divobj == null) { alert ('Object "'+divID+'" not found"');return; }

	var state = DPop_FindOrCreateState(divID);
	
	dbg("beginopen (" + x + "," + y + ","+state[1]+","+state[3]+")");
	if (state[1] || state[3]) return;

	if (state[4] == 0)
	{
		state[4] = setTimeout("DPop_Open(" + x + "," + y + ",'"+divID+"');", dpop_opendelayms );
		dbg ("new opener timer");
	}
}

function DPop_Open(x, y, divID)
{
	var divobj = document.getElementById(divID);

	if (divobj == null) { alert ('Object "'+divID+'" not found"');return; }

	var state = DPop_FindOrCreateState(divID);
	
	dbg("open ("+state[1]+","+state[3]+")");
	DPop_CancelClose(divobj);
	DPop_CancelOpen(divobj);
	
	if (state[1] || state[3]) return;
	
	state[4] = 0;
	
	for (i = 0; i < dpop_state.length; i++)
	{
		if (dpop_state[i][1])
		{
			dpop_state[i][1] = false;
			document.getElementById(dpop_state[i][0]).style.visibility = "hidden";
		}
	}
	
	state[1] = true;

	divobj.style.left = x+"px";
	divobj.style.top = y+"px";
	divobj.style.visibility = "visible";
	
}

function DPop_BeginClose(divID)
{
	var state = DPop_FindOrCreateState(divID);

	if (!state[1]) return;

	dbg("begin close");

	if ( state[2] == 0 )
	{
		state[2] = setTimeout ( "DPop_Close('"+divID+"');", dpop_closedelayms );
		dbg("new timer");
	}
}

function DPop_Close(divID)
{
	var state = DPop_FindOrCreateState(divID);
	var divobj = document.getElementById(state[0]);
	DPop_CancelClose(divobj);
	DPop_CancelOpen(divobj);	
	state[1] = false;
	divobj.style.visibility = "hidden";
	dbg("close");
}

function DPop_CancelClose (divObject)
{
	var state = DPop_FindOrCreateState(divObject.id);

	if (state[2] != 0)
	{
		clearTimeout ( state[2] );
		state[2] = 0;
		dbg("canceled close");
	}
}

function DPop_CancelOpen (divObject)
{
	var state = DPop_FindOrCreateState(divObject.id);

	if (state[4] != 0)
	{
		clearTimeout ( state[4] );
		state[4] = 0;
		dbg("canceled open");
	}
}
