var yd = YAHOO.util.Dom;
var ye = YAHOO.util.Event;
var ya = YAHOO.util.Anim;
var ym = YAHOO.util.Motion;

var HomePage = function() {
	
	swfobject.embedSWF(relPath + "inc/swf/nb_logo.swf", "logo", "100", "80", "8.0");
	
	ye.addListener(window, "load", function() {
		var preloader = new NB.ImagePreloader();
		preloader.preload("/images/loader.gif");
		setTimeout(function() {
			preloader.preload(preload);
		}, 1500);
	});
	
	
	var refInfo = {};
	var portfolioEl = yd.get("portfolio");
	var preload = [];
		
	initNews();
	if(portfolioEl)
	{
		initPortfolio();
	}
	
	
	var newsAnim = null;
	var imgAnim = null;
	
	var rolloverAnims = {};
	
	function getReferenceById(id)
	{
		for(var i = 0; i < references.length; i++)
		{
			if(references[i].id == id)
			{
				return references[i];
			}
		}
		
		return null;
	}
	
	function highlightImage(e, ea)
	{
		if(ea.expandItem.nextSibling.style.visibility == "hidden")
		{
			return;
		}
		
		var id = ea.id;
		if(rolloverAnims[id] && rolloverAnims[id].isAnimated())
		{
			rolloverAnims[id].stop();
		}
		
		var endOpacity = (e.type == "mouseover") ? 1 : 0.4;
		
		rolloverAnims[id] = new ya(ea.imageLayer, {opacity: {to: endOpacity}}, 1, YAHOO.util.Easing.easeOut);
		rolloverAnims[id].animate();		
	}
	
	
	function initNews()
	{
		var expandItems = yd.getElementsByClassName("news-expand");
		
		for(var i = 0; i < expandItems.length; i++)
		{
			var ea = {
				id : expandItems[i].parentNode.id.replace(/[^a-z0-9]/, ""),
				expandItem : expandItems[i],
				itemContent : yd.getFirstChild(yd.getPreviousSibling(expandItems[i])),
				imageLayer : yd.getElementsByClassName("news-image", "", expandItems[i].parentNode)[0]				
			};
			
			ye.addListener(expandItems[i], "click", onExpand, ea);
			ye.addListener(expandItems[i].nextSibling, "click", onExpand, ea);
			ye.addListener(expandItems[i].nextSibling, "mouseover", highlightImage, ea);
			ye.addListener(expandItems[i].nextSibling, "mouseout", highlightImage, ea);			
		}
	}
	
	function initPortfolio()
	{
		// Reference info element
		refInfo.element = yd.get("reference-details");
		refInfo.arrowEl = yd.getElementsByClassName("arrow", "", refInfo.element)[0];
		refInfo.titleEl = refInfo.element.getElementsByTagName("h5")[0];
		refInfo.screenEl = yd.getElementsByClassName("screenshot", "", refInfo.element)[0];
		refInfo.descrEl = yd.getElementsByClassName("description", "", refInfo.element)[0];
		yd.setStyle(refInfo.element, "overflow", "visible");
		
		refInfo.xPos = yd.getX(portfolioEl) + 10;
		yd.setX(refInfo.element, refInfo.xPos);
		
		
		
		
		// References
		var refs = yd.getElementsByClassName("reference", "", portfolioEl);
		for(var i = 0; i < refs.length; i++)
		{
			var re = /[0-9]+/;
			var refId = parseInt(re.exec(refs[i].id)[0], 10);
			var refObj = getReferenceById(refId);
			
			refObj.element = refs[i];
			
			preload[preload.length] = refObj.image_on;
			preload[preload.length] = refObj.screenshot;
			
			
			ye.addListener(refs[i], "mouseover", onReferenceOver, refObj);
			ye.addListener(refs[i], "mouseout", onReferenceOut, refObj);
		}
	}
	
	function onReferenceOver(e, ref)
	{
		refInfo.screenEl.innerHTML = '<img src="/images/loader.gif" ' + ref.screenshot_size + ' />';
		refInfo.titleEl.innerHTML = ref.name;
		
		var img = ref.element.getElementsByTagName("img")[0];
		img.src = ref.image_on;
		
		refInfo.descrEl.innerHTML = ref.description;
		
		var xy = yd.getXY(ref.element);
		xy[0] -= refInfo.element.offsetWidth + 15;
		xy[1] -= refInfo.element.offsetHeight / 2  - 26;
		yd.setXY(refInfo.element, xy);
		yd.setStyle(refInfo.element, "visibility", "visible");
		refInfo.screenEl.firstChild.src = ref.screenshot;
		
		
		
		
		
	}
	
	function onReferenceOut(e, ref)
	{
		var img = ref.element.getElementsByTagName("img")[0];
		img.src = ref.image_off;
		yd.setStyle(refInfo.element, "visibility", "hidden");
	}
	
	function onExpand(e, ea)
	{
		e = ye.getEvent(e);
		ye.stopEvent(e);
		
		
		if(newsAnim && newsAnim.isAnimated())
		{
			newsAnim.stop(true);
		}
		
		if(imgAnim && imgAnim.isAnimated())
		{
			imgAnim.stop(true);
		}
		
		if(rolloverAnims[ea.id] && rolloverAnims[ea.id].isAnimated())
		{
			rolloverAnims[ea.id].stop();
		}
		
		var expanded = (ea.expandItem.innerHTML == "-");
		
		if(expanded)
		{
			ea.expandItem.nextSibling.style.visibility = "visible";
		}
		else
		{
			ea.expandItem.nextSibling.style.visibility = "hidden";
		}
		
		
		var endHeight = expanded ? 63 : ea.itemContent.offsetHeight ;
		var endOpacity = expanded ? 0.4 : 1;
		
		newsAnim = new ya(ea.itemContent.parentNode, {height: {to: endHeight}}, 0.3, YAHOO.util.Easing.easeOut);
		newsAnim.animate();
		
		imgAnim = new ya(ea.imageLayer, {opacity: {to: endOpacity}}, 0.3, YAHOO.util.Easing.easeOut);
		imgAnim.animate();
		
		
		ea.expandItem.innerHTML = expanded ? "+" : "-";
	}
	
	return {
		expandAll : function() {
			var e = ye.getEvent();
			ye.stopEvent(e);
			
			for(var id in rolloverAnims)
			{
				if(rolloverAnims[id].isAnimated())
				{
					rolloverAnims[id].stop();
				}
			}
			
			var expandItems = yd.getElementsByClassName("news-expand");
			var itemContent;
			var imgLayer;
			for(var i = 0; i < expandItems.length; i++)
			{
				expandItems[i].innerHTML = "-";
				expandItems[i].nextSibling.style.visibility = "hidden";
				itemContent = yd.getPreviousSibling(expandItems[i]);
				imageLayer = yd.getElementsByClassName("news-image", "", itemContent)[0];
				itemContent.style.height = "auto";
				yd.setStyle(imageLayer, "opacity", 1);
			}
		}
	}
}();


var JobsTeaser = function() {
	
	var displayed = 0;
	
	var loader = yd.get("jobs-loader");
	var timeout = 0;
	var animFrom = null;
	var animTo = null;
	
	if (loader) 
	{
		start();
	}
	
	
	function start()
	{
		loader.style.background = "transparent url(../../images/jobs/loader.gif)";
		timeout = setTimeout(changeBanner, 4000);
	}
	
	function changeBanner(isBackward)
	{
		direction = 1;
		if(isBackward === true)
		{
			direction = -1;
		}
		
		var teasers = yd.getElementsByClassName("jobs-teaser","div","jobs-teaser-wrap");
		
		currDisplayed = displayed;
		
		// Goes backward?
		if(isBackward)
		{
			displayed--;
		}
		else
		{
			displayed++;
		}
		
		// does element not exists, then use last element
		if(displayed < 0)
		{
			displayed = teasers.length - 1;
		}
		else if(displayed > teasers.length-1) // does element not exists, then use first element
		{
			displayed = 0;
		}

		loader.style.background = "transparent url(../../images/jobs/loader-stop.gif)";
		
		yd.setStyle("jobs-teaser-left", "visibility", "hidden");
		yd.setStyle("jobs-teaser-right", "visibility", "hidden");
		
		animFrom = new ya(teasers[currDisplayed], {left: {	to: -300 * direction}}, .5, YAHOO.util.Easing.easeOut) ;
		animFrom.animate();
		yd.setStyle(teasers[displayed],'left','310px');
		animTo = new ya(teasers[displayed], {left: { from: 310 * direction,	to: 0}}, .5, YAHOO.util.Easing.easeOut);
		animTo.animate();
		animTo.onComplete.subscribe(function() {
			yd.setStyle("jobs-teaser-left", "visibility", "visible");
			yd.setStyle("jobs-teaser-right", "visibility", "visible");
			loader.style.background = "transparent url(../../images/jobs/loader.gif)";
			timeout = setTimeout(changeBanner, 4000);
		});			
	}
	
	return {
		back : function() {
			if(timeout)
			{
				clearTimeout(timeout);
			}
			
			changeBanner(true);
		},
		forward : function() {
			if(timeout)
			{
				clearTimeout(timeout);
			}
			
			changeBanner(false);
		}
		
	};
}();