/**
 * 
 * @author Kris Kelly
 */
Y.namespace('SMAR_Azure.Slideshow.Data')
Y.namespace('SMAR_Azure.Slideshow.Vars')
Y.namespace('SMAR_Azure.Slideshow.Funcs');
Y.namespace('SMAR_Azure.Tabview')
Y.namespace('SMAR_Azure.Tabview.Vars')
Y.namespace('SMAR_Azure.Tabview.Funcs');
S = Y.SMAR_Azure;

/**
 * TABVIEW
 */
S.Tabview.Vars = {
	currentTab: ""
};

/**
 * Tabview initialization function
 */
S.Tabview.init = function(){
	var linkDesign = D.get('tab_design_link'),
		linkOpt = D.get('tab_opt_link'),
		linkFiber = D.get('tab_fiber_link');
		
	var TV = S.Tabview,
		tabDesign = D.get('tab_design');
		
	//define functions before we use them	
	TV.Funcs.showTab = function(e, params){
		;
		var tabName = params.name,
			tab = D.get("tab_"+tabName),
			link = D.get("tab_"+tabName+"_link");
		
		E.preventDefault(e);
		TV.Funcs.hideTab( {name:TV.Vars.currentTab } );
		TV.Vars.currentTab = tabName;
		D.setStyle( tab, "display", "block");
		D.addClass( link, "active_link");
	};
	TV.Funcs.hideTab = function(params){
		var tabName = params.name,
			tab = D.get( "tab_"+tabName ),
			link = D.get("tab_"+tabName+"_link");
			
		D.removeClass( link, "active_link");
		D.setStyle( tab, "display", "none" );
	};
	
	//set initial tab to design
	TV.Vars.currentTab = "design";
	//hide others
	TV.Funcs.hideTab({name: "opt"});
	TV.Funcs.hideTab({name: "fiber"});
	
	//enable links
	E.addListener( linkDesign, "click", TV.Funcs.showTab, {name:"design"} );
	E.addListener( linkOpt, "click", TV.Funcs.showTab, {name:"opt"} );
	E.addListener( linkFiber, "click", TV.Funcs.showTab, {name:"fiber"} );
};

E.onDOMReady( S.Tabview.init );

/**
 * SLIDESHOW
 */
/**
 * This is static currently, but represented as a JSON object for future expansion
 */
S.Slideshow.Data.Slides = [
	{url: '/azure_project.html', img_url:'/images/home/slideshow/slideshow_001.jpg'},
	{url: '/azure_project.html', img_url:'/images/home/slideshow/slideshow_002.jpg'},
	{url: '/azure_project.html', img_url:'/images/home/slideshow/slideshow_003.jpg'},
	{url: '/sa_evolution.html', img_url:'/images/home/slideshow/slideshow_004.jpg'},
	{url: '/sa_evolution.html', img_url:'/images/home/slideshow/slideshow_005.jpg'},
	{url: '/sa_evolution.html', img_url:'/images/home/slideshow/slideshow_006.jpg'},
	{url: '/sa_evolution.html', img_url:'/images/home/slideshow/slideshow_007.jpg'}
];

S.Slideshow.Vars = {
	currentSlide: 0
};
/**
 * Slideshow initialization function
 */
S.Slideshow.init = function(){
	var container = D.get( 'slide_container'),
		imgTarget = D.get( 'slide_image' ),
		navTarget = D.get( 'slide_nav' ),
		slideLink = D.get( 'slide_link' ),
		Slides = S.Slideshow.Data.Slides;
	
	S.Slideshow.Funcs.createNav = function(){
		var backNav = H.tagCache.createElement( { tag: 'a',attributes:{ id:'slideshow_back', href:'#' } } ),
			forwardNav = H.tagCache.createElement( { tag: 'a',attributes:{ id:'slideshow_forward', href:'#'}  } );
		E.addListener( backNav, "click", S.Slideshow.Funcs.handleBackClick );
		E.addListener( forwardNav, "click", S.Slideshow.Funcs.handleForwardClick );
		navTarget.appendChild( backNav );
		navTarget.appendChild( forwardNav );
		
		var slideLinksContainer = H.tagCache.createElement( {tag:'div', attributes:{id:'slide_links_container'} } );
			navTarget.appendChild(slideLinksContainer);
		
		for( var i = 0; i < Slides.length; i++ ){
			Slides[i].linkElement = H.tagCache.createElement( {tag: 'a', attributes:{ id:'slide_link_'+i, href:'#'} } );
			D.addClass(Slides[i].linkElement, "slide_link");
			
			Slides[i].linkElement.appendChild( document.createTextNode( i+1 ) );
			
			E.addListener( Slides[i].linkElement, "click", S.Slideshow.Funcs.handleIndexClick, {slideNum:i} );
			
			slideLinksContainer.appendChild( Slides[i].linkElement );
		}
		
		D.setStyle( navTarget, "background-image", 'url("/images/home/slideshow/nav_bg.gif")' );
		
		S.Slideshow.Funcs.setActiveSlideLink();
		S.Slideshow.Vars.timeout = window.setTimeout(S.Slideshow.Funcs.startSlideshow, 5000);
	};
	
	S.Slideshow.Funcs.handleBackClick = function(e){
		S.Slideshow.Funcs.stopSlideShow();
		S.Slideshow.Funcs.goBack(e);
		S.Slideshow.Funcs.startSlideshow();
	};
	
	S.Slideshow.Funcs.handleForwardClick = function(e){
		S.Slideshow.Funcs.stopSlideShow();
		S.Slideshow.Funcs.goForward(e);
		S.Slideshow.Funcs.startSlideshow();
		
	};
	
	S.Slideshow.Funcs.handleIndexClick = function(e, params){
		S.Slideshow.Funcs.stopSlideShow();
		S.Slideshow.Funcs.swapSlide(e, params);
		S.Slideshow.Funcs.startSlideshow();
	};
	
	S.Slideshow.Funcs.goBack = function(e){
		S.Slideshow.Funcs.clearActiveSlideLink();
		S.Slideshow.Vars.currentSlide--;
		if (S.Slideshow.Vars.currentSlide < 0){
			S.Slideshow.Vars.currentSlide = S.Slideshow.Data.Slides.length - 1;
		}
		S.Slideshow.Funcs.swapSlide(e, {slideNum: S.Slideshow.Vars.currentSlide});
	};
	
	S.Slideshow.Funcs.goForward = function(e){
		S.Slideshow.Funcs.clearActiveSlideLink();
		S.Slideshow.Vars.currentSlide++;
		if (S.Slideshow.Vars.currentSlide >= S.Slideshow.Data.Slides.length){
			S.Slideshow.Vars.currentSlide = 0;
		}
		S.Slideshow.Funcs.swapSlide(e, { slideNum: S.Slideshow.Vars.currentSlide } );
	};
	
	S.Slideshow.Funcs.clearActiveSlideLink = function(){
		D.removeClass( Slides[S.Slideshow.Vars.currentSlide].linkElement, "active_slide" );
	};
	
	S.Slideshow.Funcs.setActiveSlideLink = function(){
		D.addClass( Slides[S.Slideshow.Vars.currentSlide].linkElement, "active_slide" );
	};
	
	S.Slideshow.Funcs.swapSlide = function(e, params){
		if (S.Slideshow.Vars.timeout != null){
			clearTimeout(S.Slideshow.Vars.timeout);
			S.Slideshow.Vars.timeout = null;
		}
		var slideNum = params.slideNum;
		// if this line isn't commented out, the home banner doesn't rotate in IE7 & IE6 and throws error
		// commented out, it seems to work - why?
		//E.preventDefault(e);
		
		if (slideNum > -1 && slideNum < Slides.length) {
			S.Slideshow.Funcs.clearActiveSlideLink();
			S.Slideshow.Vars.currentSlide = slideNum;
			S.Slideshow.Funcs.setActiveSlideLink();
			
			slideLink.href = Slides[S.Slideshow.Vars.currentSlide].url;
			H.Dom.clearNodes(slideLink);
			slideLink.appendChild(Slides[S.Slideshow.Vars.currentSlide].imgElement);
		}
	};
	
	S.Slideshow.Funcs.startSlideshow = function(){
		if (S.Slideshow.Vars.interval != null) {
			S.Slideshow.Vars.stopSlideShow();
		}
		S.Slideshow.Vars.interval = window.setInterval( S.Slideshow.Funcs.goForward, 5000 );
	};
	
	S.Slideshow.Funcs.stopSlideShow = function(){
		window.clearInterval( S.Slideshow.Vars.interval );
		S.Slideshow.Vars.interval = null;
	};
	
	S.Slideshow.Funcs.preLoad = function(){
		for( var i = 0; i < Slides.length; i++ ){
			Slides[i].imgElement = new Image();
			Slides[i].imgElement.src = Slides[i].img_url;
		}
		S.Slideshow.Funcs.createNav();
	};
	S.Slideshow.Funcs.preLoad();
};

E.onDOMReady( S.Slideshow.init );