UKTV.GalleryFlyout = new function() {	
	this.NS = 'UKTV.GalleryFlyout';
	var _self = this;
	var YD = YAHOO.util.Dom;
	var YE = YAHOO.util.Event;
	var _hideTimer = false;
	var _hideTimeout = 300;
	var _showTimer = false;
	var _showTimeout = 300;
	var _flyout = false;
	var _left_trigger = false;
	var _left_offset = false;

	var _resetTimer = function(timer) {
		if(timer) {
			window.clearTimeout(timer);
			timer = false;
		}				
	}

	var _resetShowTimer = function() {
		_resetTimer(_showTimer);
	};

	var _resetHideTimer = function() {
		_resetTimer(_hideTimer);
	};

	var _hideFlyout = function() {
		YD.removeClass(_flyout, 'gallery-flyout-display');
		YD.removeClass(_flyout, 'orientation-left');
		_flyout.innerHTML = '';
	};	
	
	var _showFlyout = function(li) {
		YD.removeClass(_flyout, 'gallery-flyout-display');
		YD.removeClass(_flyout, 'orientation-left');
		_flyout.innerHTML = li.innerHTML;
		var x = YD.getX(li);
		var y = YD.getY(li);
		YD.addClass(_flyout, 'gallery-flyout-display');
		var ynew = y - 10;
		var xnew = x - 10;
		
		if(_left_trigger && x > _left_trigger) {
			YD.addClass(_flyout, 'orientation-left');
			var xnew = x - _left_offset;
		} else {
			YD.removeClass(_flyout, 'orientation-left');			
		}
		
		YD.setX(_flyout, xnew);
		YD.setY(_flyout, ynew);
	};
	
	var _getTarget = function(e) {
		var ev = YE.getEvent(e);
		var node = YE.getTarget(ev);
		
		var link = YD.getAncestorByTagName(node, 'a');
		
		if(!link) {
			return false;
		}
		
		var div = YD.getNextSibling(link);
		
		if(!div) {
			return false;
		}
		
		var li = YD.getAncestorByTagName(div, 'li');
		return li;
	};

	var _handleMouseOver = function(e, obj) {
		_resetTimer(_showTimer);
		var li = _getTarget(e);
		
		if(li) {
			var _func = function() { _showFlyout(li); };
			_showTimer = window.setTimeout(_func, _showTimeout);			
		}
	};

	var _handleMouseOut = function(e, obj) {
		_hideTimer = window.setTimeout(_hideFlyout, _hideTimeout);
	};

	this.init = function() {
		var con = YD.get('content');
		var tb_con = YD.getElementsByClassName('thumbnails', 'ul', con);
		
		if(tb_con[0]) {
			var reg_offset = /left-offset-([0-9]+)/i;
			if(reg_offset.exec(tb_con[0].className)[1]) {
				_left_offset = reg_offset.exec(tb_con[0].className)[1];
			}

			var reg_trigger = /left-trigger-([0-9]+)/i;
			if(reg_trigger.exec(tb_con[0].className)[1]) {
				_left_trigger = reg_trigger.exec(tb_con[0].className)[1];
			}

			_flyout = document.createElement('div');
			YD.addClass(_flyout, 'gallery-flyout');

			tb_con[0].appendChild(_flyout);
			var ul = tb_con[0];
			
			YE.addListener(ul, 'mouseover', _handleMouseOver);
			YE.addListener(_flyout, 'mouseout', _handleMouseOut);
			YE.addListener(_flyout, 'mouseover', _resetHideTimer);
		}
	};

	UKTV.loader.registerObj(this);
};