var dynamicContent_ajaxObjects = new Array();
var _popupExists=false;

function printDebugInfo( debugString )
{
	document.getElementById('debugDiv').innerHTML = debugString;
}

function ajaxpopup_showContent(relElmId,ajaxIndex)
{   
	html = '<p>Hoe hoe!</p>';
	var relElm = document.getElementById(relElmId);
	var popupelm=create_popup_elm(relElm,'ajax_popup','popup',html);
	_popupExists = true;
	add_eventhandler(popupelm,'mouseover',ajaxpopup_cleartimeout);
	add_eventhandler(popupelm,'mouseout',ajaxpopup_hide);

	popupelm.innerHTML = dynamicContent_ajaxObjects[ajaxIndex].response;
	dynamicContent_ajaxObjects[ajaxIndex] = false;
}
var ajaxpopup_timeout=null;

function ajaxpopup_show(rel_elm,url,ajaxparams,delay)
{
	if( _popupExists )
		ajaxpopup_clear();
	if(!delay)delay=300;
	rel_elm_id=rel_elm.id;
	if(!rel_elm_id)
	{
		return;
	}
	ajaxpopup_cleartimeout();
	ajaxpopup_timeout=window.setTimeout('ajaxpopup("' + rel_elm_id + '","' + url + "\",'" + ajaxparams + "')",delay);
	//ajaxpopup_timeout=window.setTimeout('ajaxpopup(' + rel_elm + ',"' + url + "\",'" + ajaxparams + "')",delay);
}

function ajaxpopup_hide(e,delay)
{
	if(!delay)
		delay=100;
	ajaxpopup_cleartimeout();
	ajaxpopup_timeout=window.setTimeout('ajaxpopup_clear()',delay);
}

function ajaxpopup_clear()
{
	ajaxpopup_cleartimeout();
	if(_popupExists)
	{
		del_elm('ajax_popup');
		_popupExists=false;
	}
}


function ajaxpopup(relElmId,url,ajaxparams)
{

	ajaxpopup_timeout=null;

	var ajaxIndex = dynamicContent_ajaxObjects.length;
	dynamicContent_ajaxObjects[ajaxIndex] = new sack();
	dynamicContent_ajaxObjects[ajaxIndex].requestFile = url;
	dynamicContent_ajaxObjects[ajaxIndex].method = 'GET';
	
	var arrParams = ajaxparams.parseJSON();
	
	for(var vname in arrParams)
	{
		dynamicContent_ajaxObjects[ajaxIndex].setVar(vname, arrParams[vname]);
	}
	
	dynamicContent_ajaxObjects[ajaxIndex].onCompletion = function(){ ajaxpopup_showContent(relElmId,ajaxIndex); };
	dynamicContent_ajaxObjects[ajaxIndex].runAJAX();	
	
}

function ajaxpopup_cleartimeout()
{
	if(ajaxpopup_timeout)
	{
		window.clearTimeout(ajaxpopup_timeout);
		ajaxpopup_timeout=null;
	}
}


function del_elm(id)
{
	var elm=get_obj(id);
	elm.style.visibility='hidden';
	var parent=elm.parentNode;
	parent.removeChild(elm);
}

function get_obj(obj_name)
{
	if(document.all)
	{
		return document.all[obj_name];
	}
	else if(document.getElementById)
	{
		return document.getElementById(obj_name);
	}
}

function create_popup_elm(rel_elm,id,cssClass,html)
{
	var pos=get_pos(rel_elm);
	var h=rel_elm.offsetHeight;
	var w=rel_elm.offsetWidth;
	var elm=document.createElement('div');
	
	elm.id=id;
	elm.className=cssClass;
	elm.innerHTML=html;
	elm.style.top=pos.y+h;
	elm.style.left=pos.x+(h<50 ? h:50);
	insert_elm(elm,rel_elm);
	
	return elm;
}

function show_obj(obj_name,show,dont_expand)
{
	var obj=get_obj(obj_name);
	if(dont_expand)
	{
		obj.style.visibility=(show ? "inherit":"hidden");
	}
	else
	{
		obj.style.display=(show ? "block":"none");
	}
}

function get_ypos(elm)
{
	var y=elm.offsetTop;
	var node=elm;
	while(node.offsetParent&&(node.offsetParent!=document.body))
	{
		node=node.offsetParent;
		y+=node.offsetTop;
	}
	return y;
}

function get_pos(elm)
{
	var x=elm.offsetLeft;
	var y=elm.offsetTop;
	var node=elm;
	while(node.offsetParent&& (node.offsetParent!=document.body))
	{
		node=node.offsetParent;
		x+=node.offsetLeft;
		y+=node.offsetTop;
	}
	return{'x':x,'y':y};
}

function insert_elm(elm,rel_elm,where)
{
	switch(where)
	{
		case 'before':
			rel_elm.parentNode.insertBefore(elm,rel_elm);
			break;
			
		case 'firstChild':
			rel_elm.insertBefore(elm,rel_elm.firstChild);
			break;
			
		case 'lastChild':
			rel_elm.appendChild(elm);
			break;
			
		case 'after':
			if(rel_elm.nextSibling)
				rel_elm.parentNode.insertBefore(elm,rel_elm.nextSibling);
			else
				rel_elm.parentNode.appendChild(elm);
			break;
			
		default:
			rel_elm.appendChild(elm);
			break;
	}
}

function add_eventhandler(elm,evType,fn,useCapture)
{
	if(elm.addEventListener)
	{
		if(evType=='mouseover')useCapture=true;
		if(evType=='mouseout')useCapture=true;
		elm.addEventListener(evType,fn,useCapture);
		return true;
	}
	else if(elm.attachEvent)
	{
		if(evType=='mouseover')evType='mouseenter';
		if(evType=='mouseout')evType='mouseleave';
		var r=elm.attachEvent("on"+evType,fn);
		return r;
	}
	else
		elm["on"+evType]=fn;
}