var ib_classname = 'info';
var ib_container = 'a, .infocontainer'
var ib_wait_time = 500;
var ib_fx_enabled = true;
var ib_fx_step = 10;
var ib_fx_speed = 25;
var ib_fx_max = 90;

function ib_init(parent){
	var containers = ib_container.split(',');
	for (var i = 0; i < containers.length; i ++) {
		if (typeof parent == 'string') {
			containers[i] = '#' + parent + ' ' + containers[i].strip() + ' > .' + ib_classname;
		}
		else {
			containers[i] = containers[i].strip() + ' > .' + ib_classname;
		}
	}
	var mask = containers.join(', ');
	var ibs = $$(mask);

	if (ibs.length == 0) return;

	var i = 0;
	ibs.each(function(ib) {
		i ++;
		var a = ib.up();
		ib.up('body').insert(ib);
		ib.id = 'ib_info_'+i;
		a.writeAttribute('ib_id', ib.id);
		ib.writeAttribute('is_visible', false);
		ib.writeAttribute('ib_timeout', null);

		a.observe('mouseover', function (e){
				window.clearTimeout(ib.ib_timeout);
				if (!ib.is_visible) {
					ib.is_visible = true;
					ib_fadein.delay(ib_wait_time / 1000, ib);
				}
			});

		a.observe('mouseout', function (e){
				ib.ib_timeout = window.setTimeout(function() {
					ib.is_visible = false;
					ib_fadeout(ib);
				}, 100);
			});

		a.observe('mousemove', function (e){
			ib.setStyle({
				left: (e.pointerX() + 10) + 'px',
				top: (e.pointerY() + 5) + 'px'
			});
		});
	});

	function ib_fadein(ib, step){
		if (!ib.is_visible) return;
		if (!ib_fx_enabled) {
			ib.show();
			return;
		}
		if (!step) {
			step = 0;
			ib.setOpacity(0);
			ib.setStyle({'display':'block'});
		}
		step += ib_fx_step;
		if (step > ib_fx_max) step = ib_fx_max;
		ib.setOpacity(step / 100);
		if (step < ib_fx_max) ib_fadein.delay(ib_fx_speed / 1000, ib, step);
	}

	function ib_fadeout(ib, step){
		if (ib.is_visible) return;
		if (!ib_fx_enabled) {
			ib.hide();
			return;
		}
		if (!step) step = ib_fx_max;
		step -= ib_fx_step;
		if (step < 0) step = 0;
		ib.setOpacity(step / 100);
		if (step > 0) ib_fadeout.delay(ib_fx_speed / 1000, ib, step);
		else ib.hide();
	}
}

document.observe('dom:loaded', ib_init);
