﻿EASE_OUT = YAHOO.util.Easing.easeOut;
EASE_IN = YAHOO.util.Easing.easeIn;
EASE_NONE = YAHOO.util.Easing.easeNone;

// Configuration
PANEL_WIDTH = 135; // add margin to width
ANIMATION_DURATION = 0.5;
AUTOSLIDE_DELAY = 4000; // milliseconds
EASING = EASE_OUT;
// End Configuration

var yud = YAHOO.util.Dom;
var CAROSEL_IN_PROGRESS = false;
var MANUAL_OVERRIDE = false;
YAHOO.util.Event.onDOMReady( initCarosel );

var carosel = {
	initialized: false,
	slideTrigger: null,

	init: function() {
	    if(yud.get('wnb_rotating_container') != null && yud.get('wnb') != null) {
		    carosel.in_progress = false;
		    carosel.flickerFix();
		    carosel.navButtons();
		    carosel.carouselItems();
		    carosel.turny = yud.get('wnb_rotating_container');
		    turnyWidth = yud.getChildren(carosel.turny).length * PANEL_WIDTH + PANEL_WIDTH;
		    yud.setStyle(carosel.turny, 'width', turnyWidth);

		    carosel.initialized = true;
		}
	},

	flickerFix: function(){
	// ie baground image flicker fix
		try {
		  document.execCommand("BackgroundImageCache", false, true);
		} catch(err) {}
	},

	navButtons: function(){

		var bannerCarousel = yud.get('wnb');
	//left nav button
		var buttonLeftContainer = document.createElement("p");
		buttonLeftContainer.className = 'wnb_btn_left';
		//buttonLeftContainer.setAttribute("id", "wnb_btn_left");

		var buttonLeftAnchor = document.createElement("span");

		bannerCarousel.appendChild(buttonLeftContainer);

		var leftButton = yud.getElementsByClassName('wnb_btn_left');

		YAHOO.util.Event.addListener(leftButton, 'click', function(){ clearTimeout(carosel.slideTrigger); carosel.slide('left'); });

	//Right nav button
		var buttonRightContainer = document.createElement("p");
		buttonRightContainer.className = 'wnb_btn_right';
		//buttonRightContainer.setAttribute("id", "wnb_btn_right");

		var buttonRightAnchor = document.createElement("span");

		bannerCarousel.appendChild(buttonRightContainer);

		var rightButton = yud.getElementsByClassName('wnb_btn_right');

		YAHOO.util.Event.addListener(rightButton, 'click', function(){ clearTimeout(carosel.slideTrigger); carosel.slide('right'); });

	},

	slide: function( direction ) {

		if (CAROSEL_IN_PROGRESS) return;

		if (! carosel.initialized) {
			carosel.init();
		}

		carosel.pad( direction );

		var position = yud.getXY(carosel.turny);
		position[0] += direction == 'right' ? -1 * PANEL_WIDTH : PANEL_WIDTH;

		var myAnim = new YAHOO.util.Motion('wnb_rotating_container',{ points: { to: position } },	ANIMATION_DURATION,	EASING );

		myAnim.onStart.subscribe( function() { CAROSEL_IN_PROGRESS = true; } );
		myAnim.onComplete.subscribe( function() { carosel.unpad( direction ); CAROSEL_IN_PROGRESS = false; } );

		myAnim.animate();

	},

	pad: function( direction ) {
		var leftMost = yud.getFirstChild(carosel.turny);
		var rightMost = yud.getLastChild(carosel.turny);
		if (direction == 'left') {
			yud.insertBefore( rightMost, leftMost );
			yud.setX(carosel.turny, yud.getX(carosel.turny) - PANEL_WIDTH);
		}
	},

	unpad: function( direction ) {
		var leftMost = yud.getFirstChild(carosel.turny);
		var rightMost = yud.getLastChild(carosel.turny);
		if (direction == 'right') {
			yud.insertAfter( leftMost, rightMost );
			yud.setX(carosel.turny, yud.getX(carosel.turny) + PANEL_WIDTH);
		}
	},

	//pause carousel when button clicked
	carouselItems: function() {
		var carouselItemsList = document.getElementById('wnb_rotating_container').getElementsByTagName('a');
		for (var i = 0; i < carouselItemsList.length; i++) {
			YAHOO.util.Event.addListener(carouselItemsList[i], 'focus', function(){ MANUAL_OVERRIDE = true; });
		};
	}

}

function initCarosel() {
	setTimeout("carosel.init();", 10); // Delay to allow IE to finish building DOM
	setTimeout("timedTrigger()", AUTOSLIDE_DELAY);
}

function timedTrigger() {

	// Pause carousel when carousel is interacted with
	if (MANUAL_OVERRIDE) return;

	// Don't scoll if scroll is in progress
	if (CAROSEL_IN_PROGRESS) return;

	// Scroll every however many seconds
	carosel.slideTrigger = setTimeout('timedTrigger()', AUTOSLIDE_DELAY);
	carosel.slide("right");
}
