/**
 * eFocus FX Nav SlideShow class for MooTools 1.2.1
 * Customized slideshow class with navigation for controlling the slideshow.
 *
 * @author Ralph Meeuws (ralph.meeuws[AT]efocus.nl)
 * @param elNav, strLabelPrev, strLabelNext, strLabelFirst, strLabelLast, strLabelPlay, strLabelPause
 * @return EfxNavSlideShow
 * @version 1.0
 * 
 * Initializing like this:
 * 	var objSlideShow = new EfxNavSlideShow({
 * 		arrSlides: $('my_slideshow').getElements('.slide'),
 * 		elNav: $('my_slideshow').getElement('.slideshow_nav'),
 * 		intInterval: 4000
 * 	});
 */
var EfxNavSlideShow = new Class({
	Extends: EfxBaseSlideShow,
	options: {
		elNav: $('slideshow_nav'),
		strLabelPrev: 'Previous',
		strLabelNext: 'Next',
		strLabelFirst: 'First',
		strLabelLast: 'Last',
		strLabelPlay: 'Play',
		strLabelPause: 'Pause'
	},
	initialize: function(options){
		this.parent(options);
		if ($defined(this.options.elNav)) {
			this.arrNavLinkNumbers = [];
			this.populateNav();
			this.arrNavListItems = this.options.elNav.getElements('li');
			this.intNavLinksNotNumbers = 0;
			this.arrNavLinks = this.options.elNav.getElements('a');
			this.initNav();
			if (this.arrNavLinkNumbers.length != 0) {
				this.activateNavLink(this.arrNavLinkNumbers[this.options.intStartSlide]);
			}
			this.addEvent('slideShown', function(){
				if (this.arrNavLinkNumbers.length != 0) {
					this.activateNavLink(this.arrNavLinkNumbers[this.intCurrentSlideNumber]);
				}
			});
		}
	},
	populateNav: function(){
		var that = this;
		var elNavListItemNumber = null;
		this.options.elNav.getElements('li').each(function(elNavListItem, n){
			switch(elNavListItem.getElement('a').className){
				case 'prev': break;
				case 'next': break;
				case 'first': break;
				case 'last': break;
				case 'play': break;
				case 'pause': break;
				default: elNavListItemNumber = elNavListItem;
			};
		});
		
		if ($chk(elNavListItemNumber)) {
			this.arrSlideCollection.each(function(elSlide, n){
				elNavListItemNumberNew = elNavListItemNumber.clone();
				elNavListItemNumberNew.getElement('a').innerHTML = n+1;
				elNavListItemNumberNew.getElement('a').setProperty('title', n+1);
				elNavListItemNumberNew.injectBefore(elNavListItemNumber);
				that.arrNavLinkNumbers.include(elNavListItemNumberNew.getElement('a'));
			});
			elNavListItemNumber.dispose();
		}
	},
	initNav: function(){
		var that = this;
		this.arrNavLinks.each(function(elNavLink, n){
			switch(elNavLink.className){
				case 'pause':
					if (that.options.blnPlaying != true) {
						var strNavLinkLabel = that.options.strLabelPlay;
					} else {
						var strNavLinkLabel = that.options.strLabelPause;
					}
					elNavLink.innerHTML = strNavLinkLabel;
					elNavLink.setProperty('title', strNavLinkLabel);
					elNavLink.toggleClass('play');
					elNavLink.toggleClass('pause');
					
					elNavLink.addEvent('click', function(){
						if ($chk(that.slideShowTimer)) {
							var strNavLinkLabel = that.options.strLabelPlay;
							that.slideShowTimer = $clear(that.slideShowTimer);
						} else {
							var strNavLinkLabel = that.options.strLabelPause;
							that.playSlideShow();
						}
						elNavLink.innerHTML = strNavLinkLabel;
						elNavLink.setProperty('title', strNavLinkLabel);
						elNavLink.toggleClass('play');
						elNavLink.toggleClass('pause');
					});
					that.intNavLinksNotNumbers++;
					break;
				case 'play':
					if (that.options.blnPlaying != true) {
						var strNavLinkLabel = that.options.strLabelPlay;
					} else {
						var strNavLinkLabel = that.options.strLabelPause;
					}
					elNavLink.innerHTML = strNavLinkLabel;
					elNavLink.setProperty('title', strNavLinkLabel);
					elNavLink.toggleClass('play');
					elNavLink.toggleClass('pause');
					
					elNavLink.addEvent('click', function(){
						if ($chk(that.slideShowTimer)) {
							var strNavLinkLabel = that.options.strLabelPlay;
							that.slideShowTimer = $clear(that.slideShowTimer);
						} else {
							var strNavLinkLabel = that.options.strLabelPause;
							that.playSlideShow();
						}
						elNavLink.innerHTML = strNavLinkLabel;
						elNavLink.setProperty('title', strNavLinkLabel);
						elNavLink.toggleClass('play');
						elNavLink.toggleClass('pause');
					});
					that.intNavLinksNotNumbers++;
					break;
				case 'first': 
					if (!elNavLink.innerHTML) elNavLink.innerHTML = that.options.strLabelFirst;
					if (!elNavLink.getProperty('title')) elNavLink.setProperty('title', that.options.strLabelFirst);
					elNavLink.addEvent('click', function(){
						that.intSlideCount = 0;
						that.showSlide(that.intSlideCount);
						that.resetTimer();
					});
					that.intNavLinksNotNumbers++;
					break;
				case 'prev': 
					if (!elNavLink.innerHTML) elNavLink.innerHTML = that.options.strLabelPrev;
					if (!elNavLink.getProperty('title')) elNavLink.setProperty('title', that.options.strLabelPrev);
					elNavLink.addEvent('click', function(){
						that.cycleBackwards();
						that.resetTimer();
					});
					that.intNavLinksNotNumbers++;
					break;
				case 'next': 
					if (!elNavLink.innerHTML) elNavLink.innerHTML = that.options.strLabelNext;
					if (!elNavLink.getProperty('title')) elNavLink.setProperty('title', that.options.strLabelNext);
					elNavLink.addEvent('click', function(){
						that.cycleForwards();
						that.resetTimer();
					});
					that.intNavLinksNotNumbers++;
					break;
				case 'last': 
					if (!elNavLink.innerHTML) elNavLink.innerHTML = that.options.strLabelLast;
					if (!elNavLink.getProperty('title')) elNavLink.setProperty('title', that.options.strLabelLast);
					elNavLink.addEvent('click', function(){
						that.intSlideCount = that.arrSlideCollection.length-1;
						that.showSlide(that.intSlideCount);
						that.resetTimer();
					});
					that.intNavLinksNotNumbers++;
					break;
				default:
					var intNavLinksOffset = that.intNavLinksNotNumbers;
					elNavLink.addEvent('click', function(){
						that.intSlideCount = n-intNavLinksOffset;
						that.showSlide(that.intSlideCount);
						that.resetTimer();
						that.activateNavLink(elNavLink);
					});
			};
		});
	},
	activateNavLink: function(elNavLink){
		this.arrNavListItems.each(function(elNavListItem){
			elNavListItem.removeClass('active');
		});
		elNavLink.getParent().addClass('active');
	},
	name: 'EfxNavSlideShow'
});



