/**
 * Video Portal Initialisation Javascript
 * 
 * @author 				alucas
 * @version				0.0.1
 */


//#PLAYER INITIALISATION

$TORA.Requirement(["video::VideoPlayer"], true);


//#UI INITIALISATION

$TORA.whenReady(function() {
	
	var container = document.getElementById("dni-site-container");
	if (container) {

		var $c_Dom = $TORA("common").dom,
				addEventListener = $c_Dom.addEventListener,
				getElementsByClassName = $c_Dom.getElementsByClassName;
				
		//DEFINE REQUIREMENTS
		var SPLIT_COL_REQS = $TORA.Requirement(["content.common::splitListColumns"]);

		//UTILITY FUNCTIONS
		
		function addHoverForItems(config) {

			var itemLen,
					items = config.items,
					process = config.process,
					cMouseIn = config.mouseIn,
					cMouseOut = config.mouseOut,
					hoverClass = " "+config.hoverClass,
					previousClass = " "+config.previousClass,
					nextClass = " "+config.nextClass;

			for (var i=0,k;k=items[i];i++) {
				var ret;
				if (process) ret = process(k);

				if ((config.hoverClass)&&(ret != false)) {
					
					k._$nextSibling = findNextSiblingElement(k);
					k._$previousSibling = findPreviousSiblingElement(k);
					addEventListener.call(k, "mouseover", cMouseIn||mouseIn);
					addEventListener.call(k, "mouseout", cMouseOut||mouseOut);
				}
			}
			
			function mouseIn(ev) {
				this.className += hoverClass;
				var n = this._$nextSibling, p = this._$previousSibling;
				if (n) this._$nextSibling.className += nextClass;
				if (p) this._$previousSibling.className += previousClass;
			};
			function mouseOut(ev) {
				this.className = this.className.replace(hoverClass, "");
				var n = this._$nextSibling, p = this._$previousSibling;
				if (n) n.className = n.className.replace(nextClass, "");
				if (p) p.className = p.className.replace(previousClass, "");
			};
		};
		
		function findNextSiblingElement(elem) {
			var returnValue;
			for (;elem=elem.nextSibling;)
				if (elem.tagName) {
					returnValue = elem; break;
				}
			return returnValue || null;
		};
		function findPreviousSiblingElement(elem) {
			var returnValue;
			for (;elem=elem.previousSibling;)
				if (elem.tagName) {
					returnValue = elem; break;
				}
			return returnValue || null;
		};
		

		//NAVIGATION HOVER CLASS
		var navigation = document.getElementById("video-section-list");
		if (navigation) {
			addHoverForItems({
				hoverClass: "hover",
				previousClass: "previous",
				nextClass: "next",
				items: navigation.getElementsByTagName("li")
			});
		}

		//PROMO HOVER BEHAVIOUR
		
		var ROW_DIVISER = parseFloat(document.location.href.replace(/.*rowDiviser=([0-9]+).*/, "$1")),
				ROW_COUNT = 5,
				ROW_HALF_INDEX = Math.ceil(ROW_COUNT/ROW_DIVISER);

		function promoClick() {
			var link = this.getElementsByTagName("a")[0];
			if (link) document.location.href = link;
		};

		function toggleItem(elem, reverse) {
			
			var index = elem._$v_index;
			if (index) {
					var parentEl = elem.parentNode,
							itemList = parentEl._$v_items;

				//var start = dir ? index : 1;
				//var end = dir ? count : index;
				var target,
						rowCount = ROW_COUNT,
						v = index % rowCount, plast = rowCount-1;
				if ((v == 0)||(v > ROW_HALF_INDEX))
					target = index-(v||rowCount);
				else
					target = (index+(rowCount-(v)))-1;

				if (target < itemList.length) {
					if (!reverse) itemList[target].style.display = "none";
					else itemList[target].style.display = "";
				}
			}
		};

		addHoverForItems({
			hoverClass: "item-hover",
			items: getElementsByClassName.call(container, "item"),
			process: function(item) {

				var p = item.parentNode, l;
				if (/(^|.* )videos( .*|$)/.test(p.className)) {
					if ((l = p._$v_items)) p._$v_items.push(item);
					else l = p._$v_items = [item];
						
					if (ROW_DIVISER) {
						var i = item._$v_index = l.length,
								itemMod = i%ROW_COUNT;
						if ((itemMod == 0)||(itemMod > ROW_HALF_INDEX)) item.className += " row-last-half-item";
						else item.className += " row-first-half-item";
					}

					if (getElementsByClassName.call(item, "extended-info").length > 0)
						addEventListener.call(item, "click", promoClick);

				} else return false;
			},
			mouseIn: !ROW_DIVISER ? false : function(ev) {
				toggleItem(this);
			},
			mouseOut: !ROW_DIVISER ? false : function(ev) {
				toggleItem(this,true);
			}
		});
		
		SPLIT_COL_REQS(function() {
			var splitList = $TORA("content").common.splitListColumns;
			var showsList = document.getElementById("shows-list");
			if(showsList){
				splitList({list: document.getElementById("shows-list"), threshold: 10});
			}
			
			var topicsList = document.getElementById("topics-list");
			if(topicsList){
				splitList({list: document.getElementById("topics-list"), threshold: 10});
			}
			
			var playlists = document.getElementById("top-playlists-list");
			if(playlists){
				splitList({list: document.getElementById("top-playlists-list"), threshold: 10});
			}
			
		});
	}
});






