if(!window.console) {
	window.console = new function() {
		this.log = function(str) {};
		this.dir = function(str) {};
	}
}

var UKTV = {
	'NS': 'UKTV'
};

UKTV.loader = new function() {
	this.NS = 'UKTV.loader';
	var registeredObjs = new Array();
	var htmlBody = false;
	
	var initBody = function() {
		YAHOO.util.Dom.addClass(this, 'js');
		YAHOO.util.Dom.removeClass(this, 'nojs');
		
		if(YAHOO.env.ua.opera) {
			YAHOO.util.Dom.addClass(this, 'opera');			
		}

		if(YAHOO.env.ua.webkit) {
			YAHOO.util.Dom.addClass(this, 'safari');
		}
		
		if(navigator.appVersion.indexOf("Mac") > -1) {
			YAHOO.util.Dom.addClass(this, 'mac');			
		}
		
		if(YAHOO.env.ua.gecko) {
			YAHOO.util.Dom.addClass(this, 'firefox');
		}

		if(YAHOO.env.ua.gecko > 1.8) {
			YAHOO.util.Dom.addClass(this, 'ff3');			
		}
	}
	
	var init = function() {
		var i;
		
		for(i=0; i<registeredObjs.length; i++) {
			registeredObjs[i].init.call();
		}
	}
	
	this.registerObj = function(obj) {
		registeredObjs[registeredObjs.length] = obj;
	}
	
	YAHOO.util.Event.onAvailable('html-body', initBody, this);
	YAHOO.util.Event.onDOMReady(init);	
}


Array.prototype.contains = function (value) {
	var i;
	for (i=0; i < this.length; i++) {
		if (this[i] === value) {
			return true;
		}
	}
	return false;
};




UKTV.SpecificNavigation = new function() {
	this.NS = 'UKTV.SpecificNavigation';
	var _headerContainer = false;
	var _listContainer = false;
	var _rightContainer = false;
	var _llContainer = false;
	var _rpContainer = false;
	var _currentLinkContainer = false;
	var _currentNode = false;
	var _lastLink = false;
	var _outTimer = false;
	var _menuTimeout = 500;
	var _mouseMode = false;
	var _clickMode = false;
	var _rolloutBlocked = false;

	var resetStates = function() {		
		if(_currentLinkContainer) {
			YAHOO.util.Dom.removeClass(_currentLinkContainer, 'active');
			YAHOO.util.Dom.removeClass(_currentLinkContainer, 'single');
			YAHOO.util.Dom.setStyle(_currentLinkContainer, 'height', 'auto');
			YAHOO.util.Dom.setStyle(_currentLinkContainer, 'width', 'auto');	
			
			if(_currentLinkContainer == _llContainer || _currentLinkContainer == _rpContainer) {
				var node = YAHOO.util.Dom.getFirstChild(_currentLinkContainer);
				YAHOO.util.Dom.setStyle(node, 'position', 'relative');
				YAHOO.util.Dom.setStyle(node, 'top', 'auto');
				YAHOO.util.Dom.setStyle(node, 'left', 'auto');
			}
		}
	}

	var disableRollout = function() {
		if(!_rolloutBlocked) {
			var flyout = YAHOO.util.Dom.getElementsByClassName('container', 'div', _currentLinkContainer)[0];
			YAHOO.util.Event.removeListener(flyout, "mouseover", menuOnHandler);			
			YAHOO.util.Event.removeListener(flyout, "mouseout", menuOutHandler);	
			var closeLink = document.createElement('a');
			YAHOO.util.Dom.addClass(closeLink, 'flyout-close');
			flyout.appendChild(closeLink);
			YAHOO.util.Event.addListener(closeLink, "click", closeHandler, flyout);
			_rolloutBlocked = true;
		}
	}
	
	var closeHandler = function(e, flyout) {
		var ev = YAHOO.util.Event.getEvent(e);
		YAHOO.util.Event.stopEvent(ev);
		var node = YAHOO.util.Event.getTarget(ev);
		node.parentNode.removeChild(node);
		var linkNode = YAHOO.util.Dom.getPreviousSibling(flyout);
		YAHOO.util.Event.addListener(flyout, "mouseover", menuOnHandler, linkNode);			
		YAHOO.util.Event.addListener(flyout, "mouseout", menuOutHandler, linkNode);							
		resetStates();
		linkNode.active = false;		
		_lastLink = false;		
		_rolloutBlocked = false;
	}

	var outHandler = function(e, node) {
		resetStates();
		node.active = false;		
		_lastLink = false;		
		return node.active;
	}
	
	var blockReset = function() {
		window.clearTimeout(_outTimer);		
	}
	
	var outTimer = function(e, node) {
		return window.setTimeout(function(){outHandler(e, node)}, _menuTimeout);
	}
		
	var onHandler = function(e, node, animation) {
		if(_outTimer) {
			window.clearTimeout(_outTimer);
		}
		var animation = ((_lastLink && _lastLink == node) || YAHOO.env.ua.ie >= 1) ? false : animation;
		var parent = node.parentNode;					
		if(YAHOO.util.Dom.hasClass(parent, 'active')) {
			return false;
		}
		var listNode = (parent == _llContainer || parent == _rpContainer) ? false : true;		
					
		var x = node.offsetWidth;
		var y = node.scrollHeight;
		
		_lastLink.active = false;
		_lastLink = node;
		_currentLinkContainer = parent;

		if(!listNode) {
			var nodeXY = YAHOO.util.Dom.getXY(node);
			YAHOO.util.Dom.setStyle(node, 'position', 'absolute');
			YAHOO.util.Dom.setX(node, nodeXY[0]-1);				
			YAHOO.util.Dom.setY(node, nodeXY[1]-1);
		}

		if(parent == _rpContainer) {
			YAHOO.util.Dom.setStyle(parent, 'width',  x - 1 + 'px');				
		} else {
			YAHOO.util.Dom.setStyle(parent, 'width',  x + 'px');
		}
		
		YAHOO.util.Dom.setStyle(parent, 'height', y + 'px');			
		
		if (YAHOO.env.ua.ie && YAHOO.env.ua.ie < 7) {
			YAHOO.util.Dom.setStyle(node, 'height', y-12 + 'px'); // desperate hack
		}
		YAHOO.util.Dom.addClass(parent, 'active');
		var flyout = YAHOO.util.Dom.getNextSibling(node);

		
		if(flyout && (flyout.nodeName.toLowerCase() == 'ul' || (flyout.nodeName.toLowerCase() == 'div' && YAHOO.util.Dom.hasClass(flyout, 'container')))) {
			
			if(!listNode) {
				var xy = YAHOO.util.Dom.getXY(_rightContainer);
				YAHOO.util.Dom.setX(flyout, 663);
				YAHOO.util.Dom.setY(flyout, xy[1] + _rightContainer.scrollHeight+2);
			} else {
				var xy = YAHOO.util.Dom.getXY(_listContainer);
				YAHOO.util.Dom.setStyle(flyout, 'width', (_listContainer.offsetWidth - 2) + 'px');
				YAHOO.util.Dom.setX(flyout, xy[0]);
				YAHOO.util.Dom.setY(flyout, xy[1] + _listContainer.scrollHeight+2);
			}
			
			if(YAHOO.env.ua.ie && YAHOO.env.ua.ie < 7) {		
				if(!YAHOO.util.Dom.hasClass(flyout, 'iframed')) {
					
					var ifr = document.createElement('iframe');
					flyout.appendChild(ifr);
					YAHOO.util.Dom.setStyle(ifr, 'height', flyout.offsetHeight);
					YAHOO.util.Dom.setStyle(ifr, 'width', flyout.offsetWidth);
					YAHOO.util.Dom.addClass(flyout, 'iframed');
					
				}	
			}

			if(animation) {				
				YAHOO.util.Dom.setStyle(flyout, 'opacity', 0);
				var styles = {
					opacity: {to: 1}
				};
				myAnim = new YAHOO.util.Anim(flyout, styles, 0.5, YAHOO.util.Easing.easeOut);
				myAnim.animate();											
			}
		} else {
			YAHOO.util.Dom.addClass(parent, 'single');				
		}

		node.active = true;		
		return node.active;
	}

	var clickHandler = function(e, node) {
		if(!_mouseMode && !_rolloutBlocked){
			if(node.active) {
				_clickMode = outHandler(e, node);				
			} else {
				_clickMode = onHandler(e, node, true);				
			}
			_mouseMode = false;
		}
	}

	var linkOnHandler = function(e, node) {
		if(!_clickMode && !_rolloutBlocked)	{
			resetStates();			
			_mouseMode = onHandler(e, node, true);
			_clickMode = false;
		}
	}

	var menuOnHandler = function(e, node) {
		if(!_clickMode && !_rolloutBlocked)	{
			_mouseMode = onHandler(e, node, false);
			_clickMode = false;
		}
	}	

	var linkOutHandler = function(e, node) {
		if(!_clickMode && !_rolloutBlocked)	{
			_outTimer = outTimer(e, node);
			_mouseMode = false;
			_clickMode = false;
		}
	}

	var menuOutHandler = function(e, node) {
		if(!_clickMode && !_rolloutBlocked)	{
			_outTimer = outTimer(e, node);
			_mouseMode = false;
			_clickMode = false;
		}
	}	

	this.init = function() {
		_headerContainer = document.getElementById('specific-navigation-container');
		_listContainer = YAHOO.util.Dom.getElementsByClassName('navigation', 'ul', _headerContainer)[0];
		_rightContainer = YAHOO.util.Dom.getElementsByClassName('right-tools', 'div', _headerContainer)[0];
		var loginCon = YAHOO.util.Dom.getElementsByClassName('login', 'div', _headerContainer);
		var logoutCon = YAHOO.util.Dom.getElementsByClassName('logout', 'div', _headerContainer);
		var registerCon = YAHOO.util.Dom.getElementsByClassName('register', 'div', _headerContainer);
		var profileCon = YAHOO.util.Dom.getElementsByClassName('my-profile', 'div', _headerContainer);
		
		_llContainer = (loginCon.length > 0) ? loginCon[0] : logoutCon[0];
		_rpContainer = (profileCon.length > 0) ? profileCon[0] : registerCon[0];
		
		var a = _headerContainer.getElementsByTagName('a');
		var i;
		
		for(i=0; i<a.length; i++) {
			if(a[i].parentNode.parentNode  == _listContainer || a[i].parentNode == _llContainer  || a[i].parentNode == _rpContainer) {	
				YAHOO.util.Event.addListener(a[i], "click", clickHandler, a[i]);			
				YAHOO.util.Event.addListener(a[i], "mouseover", linkOnHandler, a[i]);			
				YAHOO.util.Event.addListener(a[i], "mouseout", linkOutHandler, a[i]);			
				flyout = YAHOO.util.Dom.getNextSibling(a[i]);
				
				if(flyout) {
					YAHOO.util.Event.addListener(flyout, "mouseover", menuOnHandler, a[i]);			
					YAHOO.util.Event.addListener(flyout, "mouseout", menuOutHandler, a[i]);	
					
					var forms = flyout.getElementsByTagName('form');
					
					if(forms.length > 0) {
						var func = function(node) {
							var n = node.nodeName.toLowerCase();
							switch(n) {
								case 'input':
								case 'button':
								case 'textarea':
								case 'checkbox':
								case 'radio':
								case 'select':
									return true;
							}

							return false;
						}
						var handleFormElem = function(node) {
							YAHOO.util.Event.addListener(node, "mouseover", blockReset);			
							YAHOO.util.Event.addListener(node, "focus", disableRollout);			
						}
						inputs = YAHOO.util.Dom.getElementsBy(func, null, forms[0], handleFormElem);
					}
				}
			}

			if(a[i].getAttribute('title')) {				
				a[i].removeAttribute('title', '');
			}
			
			if(!a[i].getAttribute('href')) {				
				a[i].setAttribute('href', '#');
			}
		}
	}

	UKTV.loader.registerObj(this);
}

