/**
 * InlineHelp
 * @author Markus Köller
 * @version 0.9
 * @since 2007-08-14
 */

var Helpcall   		= '';
var Helpevent  		= '';
var Helploader 		= '';
var Helploadertext  = '';
var Helpfade   		= '';

function addInlineHelp()
{
	$$('.inlineHelp').forEach(function(child) {
		child.setStyle('cursor', 'pointer');
		child.addEvent('mouseover', function() {
			Helpfade.stop();
			HelpfadeIn(child);
			showHelp(child);
		});
		child.addEvent('mouseout', function(event) {
			var eventStop = new Event(event);
			delayedClose(eventStop);
		});
	});
}

function HelpfadeIn(el)
{
	Helpfade.stop();
	Helpfade.start(0,1);
}

function delayedClose(eventStop)
{
	Helpfade.stop();
	window.clearTimeout(Helpevent);

	Helpfade.start(1,0);

	if (eventStop.target.className == 'inlineHelp')
		Helpevent = window.setTimeout("hideHelp()", 1500);
}

function hideHelp()
{
	$('InlineHelpDiv').setStyle('visibility', 'hidden');
}

function showHelp(elem)
{
	var offsets = {'x': 20, 'y': 20};
	var pos  = $(elem).getPosition();
	var adel = $('InlineHelpDiv');
	var code = $(elem).getProperty('rel');

	window.clearTimeout(Helpevent);

	if (adel.style.display == 'block' || adel.style.display == 'inline')
		return;

	if (code == '' || code == 'undefined')
		code = $(elem).getProperty('name');

	var win    = {'x': window.getWidth(), 	   'y': window.getHeight()};
	var scroll = {'x': window.getScrollLeft(), 'y': window.getScrollTop()};
	var inAd   = $(elem).getSize();

	if ((pos.x+250+offsets.x-scroll.x) > win.x)
		pos.x = pos.x - 250 - offsets.x;

	if ((pos.y + 150 - scroll.y) > win.y)
		pos.y = pos.y - inAd.size.y - 50;

	adel.setStyles({'top': pos.y+offsets.y+'px', 'left': pos.x+offsets.x+'px', 'visibility': 'visible'});

  	if (Helpcall.running == true)
		Helpcall.cancel();

	var helpFound = allreadyLoaded(code);

	if ($('Helploader'))
		$('Helploader').remove();

	if (helpFound == false)
	{
		Helploader = new Element('img').injectInside('InlineHelpDiv');
 		Helploader.setProperties({id: 'Helploader', title: 'loading', alt: 'loading...', src: '/img/throbber.gif'});
 		Helploader.setStyle('padding', '25px');
 		Helploader.setStyle('float', 'left');

 		Helploadertext   = new Element('div').injectAfter(Helploader);
 		Helploader.setProperties({id: 'Helploadertext'});
 		Helploadertext.setStyle('padding', '25px');
 		Helploadertext.setHTML('Lade Hilfe..');

		Helpcall = new Ajax('/httpRequest/?remote_call=getHelp&msg='+code, {autoCancel: true, method: 'get', onComplete: injectMessage}).request();
	}
}

function allreadyLoaded(code)
{
	$('InlineHelpDiv').getChildren().forEach(function(child) {
			if (child.id != 'Helploader')
				child.style.display = 'none';
		});

	var found = false;

	if ($('Helptitle_'+code))
	{
		found = true;
		$('Helptitle_'+code).style.display = 'block';
		$('Helptext_'+code).style.display = 'block';
	}

	return found;
}

function injectMessage(messageObj)
{
	HelpTitle = new Element('div').addClass('InlineHelpDiv-title');
	HelpText  = new Element('div').addClass('InlineHelpDiv-text');

	var res = messageObj.search(/::/);

	if (Helploader != '') {
		Helploadertext.remove();
		Helploader.remove();
	}

	if (res != -1)
	{
		ret = messageObj.split('::');
		HelpTitle.innerHTML = ret[0];
		HelpText.innerHTML  = ret[1];

		HelpTitle.id = 'Helptitle_'+ret[2];
		HelpText.id = 'Helptext_'+ret[2];

		HelpTitle.injectInside($('InlineHelpDiv'));
		HelpText.injectAfter(HelpTitle);
	}
	else
	{
		HelpText.innerHTML  = messageObj;
		HelpText.injectTop($('InlineHelpDiv'));
	}
}

function injectHelp()
{
	help = new Element('div').addClass('InlineHelpDiv').setStyles({
			'position': 'absolute',
			'top': '0',
			'left': '0',
			'visibility': 'hidden'
		});

	help.id = 'InlineHelpDiv';
	help.injectInside(document.body);

	Helpfade = $('InlineHelpDiv').effect('opacity', {duration: 700, fps: 30, transition: Fx.Transitions.linear});
	Helpfade.set(0);
}

window.addEvent('domready', function() {
	injectHelp();
	addInlineHelp();
});
