/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* Son: use config section to configure slideshow settings */
animateResources = function() {
	return {
		playTimerId : "",
		player : "",
		manualModeDetected : false,
		
		config : {
			nbStep : 2, // number of picture per click
			sliderTimer : 7, // interval of the transition in sec
			sliderEffectSpeed : 1, // in sec
			autoPlay : true
		},		
		getElementWidth : function(el) {
			var elWidth = 0;
			var cssProperties = [
				'margin-left',
				'margin-right',
				'border-left-width',
				'border-left-width',
				'width'
			];
			
			for (var x = 0; x < cssProperties.length; x++) {
				if (!isNaN(parseInt(YAHOO.util.Dom.getStyle(el, cssProperties[x]), 10))) {
					elWidth += parseInt(YAHOO.util.Dom.getStyle(el, cssProperties[x]), 10);
				}
			}
			return elWidth;
		},
		init : function() {
			var resourcesItems  = YAHOO.util.Dom.get('resources').getElementsByTagName('li');
			resourcesTotalItems = resourcesItems.length; // global


			// disable buttons by default
			YAHOO.util.Dom.setStyle('div-resources-move-left', 'display', 'block');
			YAHOO.util.Dom.setStyle('div-resources-move-right', 'display', 'block');

			if (resourcesTotalItems > animateResources.config.nbStep ) {
				resourcesCurrentlyAnimated = false; // global
				
				var styleLeftValue = YAHOO.util.Dom.getStyle('resources', 'left');

				if (styleLeftValue == 'auto') {
					styleLeftValue = -0;
				} else {
					styleLeftValue = parseInt(styleLeftValue, 10);
				}
				
				var elFirstItem           = resourcesItems[0];
				var elFirstItemTotalWidth = this.getElementWidth(elFirstItem);

				resourcesIndex = Math.abs(styleLeftValue) / elFirstItemTotalWidth + 1;
				
				// enable buttons if needed
				if (resourcesIndex > 1)                       { YAHOO.util.Dom.setStyle('div-resources-move-left', 'display', 'none'); }
				if (resourcesIndex < resourcesTotalItems - animateResources.config.nbStep) { YAHOO.util.Dom.setStyle('div-resources-move-right', 'display', 'none'); }


				var distance = elFirstItemTotalWidth * animateResources.config.nbStep;

				resourcesAnimLeft = new YAHOO.util.Motion('resources', { left: { by: distance } }, animateResources.config.sliderEffectSpeed, YAHOO.util.Easing.easeOut);
				resourcesAnimLeft.onStart.subscribe(function() { resourcesCurrentlyAnimated = true; });
				resourcesAnimLeft.onComplete.subscribe(function() { resourcesCurrentlyAnimated = false; });

				resourcesAnimRight = new YAHOO.util.Motion('resources', { left: { by: - distance } }, animateResources.config.sliderEffectSpeed, YAHOO.util.Easing.easeOut);
				resourcesAnimRight.onStart.subscribe(function() { resourcesCurrentlyAnimated = true; });
				resourcesAnimRight.onComplete.subscribe(function() { resourcesCurrentlyAnimated = false; });

				YAHOO.util.Event.on(['resources-move-left','resources-move-right'], 'click', this.move);
				
				if (this.config.autoPlay) {
					animateResources.player = window.setTimeout(this.play, this.config.sliderTimer * 1000);
				}
				
			} else {
				// if anything needs to be done when there are not
				// enough items to scroll, add it here
			}
		},
		move : function(e, isAutoPlay) {
			var id = this.id;
			if ((id === null) || (id === undefined)) {
				id = e.id;
			}
			if (isAutoPlay === null) {
				animateResources.manualModeDetected = true;	
				clearTimeout(animateResources.playTimerId);
			}
			switch(id) {
				case 'resources-move-left':
					YAHOO.util.Dom.setStyle('div-resources-move-right', 'display', 'none');
					if (!resourcesCurrentlyAnimated) {
						if (resourcesIndex == 2) {	// last click
							// disable left arrow
							YAHOO.util.Dom.setStyle('div-resources-move-left', 'display', 'block');
						}
						resourcesAnimLeft.animate();
						resourcesIndex = resourcesIndex - animateResources.config.nbStep;
						animateResources.manageNavigation(resourcesIndex);
						YAHOO.util.Cookie.set("resourcesIndex", resourcesIndex);
					}
				break;
				case 'resources-move-right':
					YAHOO.util.Dom.setStyle('div-resources-move-left', 'display', 'none');
					if (!resourcesCurrentlyAnimated) {
						if (resourcesIndex == resourcesTotalItems - animateResources.config.nbStep) {
							YAHOO.util.Dom.setStyle('div-resources-move-right', 'display', 'block');
						}
						resourcesAnimRight.animate();
						resourcesIndex = resourcesIndex + animateResources.config.nbStep;
						animateResources.manageNavigation(resourcesIndex);
						YAHOO.util.Cookie.set("resourcesIndex", resourcesIndex);
					}
				break;
			}
		},
		manageNavigation: function(idx) {
			var resourcesTotalItems  = YAHOO.util.Dom.get('resources').getElementsByTagName('li').length;
			
			if (idx + animateResources.config.nbStep > resourcesTotalItems) {
				YAHOO.util.Dom.removeClass('div-resources-move-right', 'right');
				YAHOO.util.Dom.addClass('div-resources-move-right', 'right-disabled');
				YAHOO.util.Dom.setStyle('div-resources-move-right', 'display', 'block');
				if (animateResources.config.autoPlay && !animateResources.manualModeDetected) {
					clearTimeout(animateResources.player);
					YAHOO.util.Dom.setStyle('resources', 'display', 'none');
					resourcesAnimLeft = new YAHOO.util.Motion('resources', { left: { to: 0 } }, animateResources.config.sliderEffectSpeed, YAHOO.util.Easing.easeOut);
					resourcesAnimLeft.animate();
					animateResources.player = setTimeout(animateResources.rePlay, 1000);
				}
			} 
			if ((idx - animateResources.config.nbStep) < 1) {
				YAHOO.util.Dom.removeClass('div-resources-move-left', 'left'); 				
				YAHOO.util.Dom.addClass('div-resources-move-left', 'left-disabled');
				YAHOO.util.Dom.setStyle('div-resources-move-left', 'display', 'block');				
			}
		},
		play : function() {
			YAHOO.util.Dom.setStyle('resources', 'display', 'block');
			var objBtn = YAHOO.util.Dom.get('resources-move-right');
			if (objBtn) {
				animateResources.move(objBtn, "isAutoPlay");
				animateResources.playTimerId = setTimeout(animateResources.play, animateResources.config.sliderTimer * 1000);
				if (YAHOO.util.Dom.hasClass('div-resources-move-right', 'right-disabled') && YAHOO.util.Dom.getStyle('div-resources-move-right', 'display') == 'block') {
					clearTimeout(animateResources.playTimerId);
				}
			}
		},
		rePlay : function() {
			YAHOO.util.Dom.setStyle('resources', 'display', 'block');
			animateResources.init();
		}
	};
}();
YAHOO.util.Event.onAvailable('resources', animateResources.init, animateResources, true);
