
var dictCache = new Array();

function dictionary(dictId, trigger)
{
	if(trigger.dict) // been here before
	{
		// if xmlhttp is still busy it will open automatically when done
		if(!trigger.dict.ajax || (trigger.dict.ajax.readyState == 0) || (trigger.dict.ajax.readyState == 4))
		{
			trigger.dict.isopen = true;
			trigger.dict.open(trigger.dict);
		}
		return;
	}
	var cls = this;
	trigger.dict = this;
	this.trigger = trigger;
	this.dictId = dictId;
	this.isopen = true; // tooltip is supposed to be open

	this.open = function(cls)
	{
		if(typeof(cls) != 'object')
			cls = this;
		if(!cls.isopen) // prevents tooltips to open when supposed to be closed (e.g. when ajax request finishes)
			return;
		//if(!cls.tooltip.parentNode)
		//	document.body.appendChild(cls.tooltip);
		cls.tooltip.style.display = 'block';
		this.setPosition();
		cls.tooltip.tween.fade(1, 200);
		cls.tooltip.tween.onfadefinish = undefined;
	}

	this.close = function(cls)
	{
		if(typeof(cls) != 'object')
			cls = this;
		cls.isopen = false;
		if(cls.tooltip && cls.tooltip.parentNode)
		{
			cls.tooltip.tween.fade(0, 200);
			//cls.tooltip.tween.onfadefinish = function(){cls.tooltip.parentNode.removeChild(cls.tooltip);};
			cls.tooltip.tween.onfadefinish = function(){cls.tooltip.style.display='none';};
		}
	}

	this.setPosition = function(cls)
	{
		if(typeof(cls) != 'object')
			cls = this;
		if(!cls.tooltip)
			return;
		var dims = cls.tooltip.tween.getDimensions();
		var xpos = mouseXpos + 10 - Math.round(dims.width/2);
		var ypos = mouseYpos + 10;
		cls.tooltip.tween.setPosition(xpos, ypos);
	}

	this.tooltip = document.body.appendChild(document.createElement('DIV'));
	this.tooltip.className = 'dictTooltip';

	new tween(this.tooltip);
	this.tooltip.tween.setOpacity(0);
	this.ajax = null;

	if(dictCache[this.dictId] != undefined)
	{
		var desc = dictCache[this.dictId];
		cls.tooltip.innerHTML = desc;
		cls.open();
	}
	else
	{
		cls.ajax = xmlHttp();
		cls.ajax.open('GET', 'http://www.youcontent.nl/dictAjax.php?q=' + cls.dictId);
		cls.ajax.onreadystatechange = function()
		{
			if(cls.ajax.readyState == 4)
			{
				if(cls.ajax.status == 200)
				{
					var desc = cls.ajax.responseText;
					dictCache[cls.dictId] = desc;
				}
				else
					var desc = cls.ajax.status + ' ' + cls.ajax.statusText;
				cls.tooltip.innerHTML = desc;
				cls.open();
			}
		};
		cls.ajax.send(null);
	}

	listen(document, 'mousemove', function(){cls.setPosition(cls);});
	listen(trigger, 'mouseout', function(){cls.close(cls);});
}
