// EVO Framework - Slider 1.0
// Author: EVO Studios: www.evostudios.it
// Licence (IT): 
// Lo script è liberamente utilizzabile, modificabile, distribuibile, insomma... potete farci tutto quello che volete.
// --------------------------------------
function debug(text) {
	$("#trace").append(text + "<br>");
}

function debug2(text) {
	$("#trace").html(text + "<br>");
}

es_sliderID = new Array();
es_beltClass = new Array();
es_panelClass = new Array();
es_sliderType = new Array();
es_animationTime = new Array();
es_animationType = new Array();
es_autoStep = new Array();
es_pauseTime = new Array();
es_pauseHover = new Array();
es_showControls = new Array();
es_sliderNext = new Array();
es_sliderPrev = new Array();
es_showNav = new Array();
es_showCounter = new Array();
es_adaptPanels = new Array();
es_adaptiveImgs = new Array();
es_loading = new Array();
es_fullScreen = new Array();
firstSlide = new Array();

es_Timer = new Array();
es_isLoading = new Array();
es_currentSlide = new Array();
lastSlide = new Array();
es_current = -1;
panelWidth = new Array();
panelHeight = new Array();
maxPanels = new Array();


var evoslider = {
	
	// Setup the slider
	init:function(config) {
		
		// Setup the variables array
		es_current++;
		es_sliderID.push("#" + config["sliderID"]);
		es_beltClass.push("." + config["beltClass"]);
		es_panelClass.push("." + config["panelClass"]);
		es_sliderType.push(config["sliderType"]);
		es_animationTime.push(config["animationTime"]);
		es_animationType.push(config["animationType"]);
		es_autoStep.push(config["autoStep"]);
		es_pauseTime.push(config["pauseTime"]);
		es_pauseHover.push(config["pauseHover"]);
		es_showControls.push(config["sliderControls"]);
		es_sliderNext.push(config["sliderNext"]);
		es_sliderPrev.push(config["sliderPrev"]);
		es_showNav.push(config["showNav"]);
		es_showCounter.push(config["showCounter"]);
		es_adaptPanels.push(config["adaptPanels"]);
		es_adaptiveImgs.push(config["adaptiveImgs"]);
		es_loading.push(config["loading"]);
		firstSlide.push(config["firstSlide"]);
		//es_fullScreen.push(config["allowFullScreen"]);
		
		es_isLoading.push(false);
		
		// Set handler for panel loading
		$(es_panelClass[es_current] + ' img').load(function() {
			$(this).parent('.panel').addClass("es-loaded");
		});
		
		// Retrieve the panel width and height
		//panelWidthTemp = $(es_sliderID[es_current] + " " + es_panelClass[es_current]).css('width');
		//panelWidthTemp = $(es_sliderID[es_current] + " " + es_panelClass[es_current]).width();
		
		panelWidth.push($(es_sliderID[es_current] + " " + es_panelClass[es_current]).outerWidth(true));
		
		//panelHeightTemp = $(es_sliderID[es_current] + " " + es_panelClass[es_current]).css('height');
		panelHeight.push($(es_sliderID[es_current] + " " + es_panelClass[es_current]).outerWidth(true));
		
		// Setup max slides
		maxPanels.push($(es_sliderID[es_current] + " " + es_panelClass[es_current]).length);
		
		// Setup the current slide
		es_currentSlide.push(firstSlide[es_current]);
		
		// Arrange elements
		evoslider.arrange_elements(es_current);
		
	},
	
	arrange_elements:function(id) {
		
		// Arrange elements
		// ...
		
		// Check the loading flag 
		
		$(es_sliderID[id]).append('<div class="es-loading"></div>');
		
		// Check if panels must be adapted
		
		if (es_adaptPanels[id]) {
			//originalWidth = $(es_sliderID[id] + " " + es_panelClass[id]).width();
			//originalHeight = $(es_sliderID[id] + " " + es_panelClass[id]).height();
			
			$(es_sliderID[id] + " " + es_panelClass[id]).width($(es_sliderID[id]).width());
			$(es_sliderID[id] + " " + es_panelClass[id]).height($(es_sliderID[id]).height());
			
			panelWidth[id] = $(es_sliderID[id]).width();
			panelHeight[id] = $(es_sliderID[id]).height();
			
		}
		// Set the belt and the current slide
		
		if (es_sliderType[id] == "horizontal") {
			$(es_sliderID[id] + " " + es_panelClass[id]).css("float", "left");
			$(es_sliderID[id] + " " + es_beltClass[id]).css("width", panelWidth[id] * maxPanels[id]);
			$(es_sliderID[id] + " " + es_beltClass[id]).css("left", 0 - (panelWidth[id] * firstSlide[id]) + "px");
		}
		
		if (es_sliderType[id] == "vertical") {
			$(es_sliderID[id] + " " + es_beltClass[id]).css("height", panelHeight[id] * maxPanels[id]);
			$(es_sliderID[id] + " " + es_beltClass[id]).css("top", 0 - (panelHeight[id] * firstSlide[id]) + "px");
		}
		
		if (es_sliderType[id] == "fader") {
			$(es_sliderID[id] + " " + es_panelClass[id]).css("left", 0);
			$(es_sliderID[id] + " " + es_panelClass[id]).css("top", 0);
			$(es_sliderID[id] + " " + es_panelClass[id]).css("position", "absolute");
			
			$(es_sliderID[id] + " " + es_panelClass[id]).addClass("es-normal");
			//$(es_sliderID[id] + " " + es_panelClass[id]).animate({opacity: 0},0);
			
			$(es_sliderID[id] + " " + es_panelClass[id] + ":eq(" + firstSlide[id] + ")").addClass("es-top");
			$(es_sliderID[id] + " " + es_panelClass[id] + ":eq(" + firstSlide[id] + ")").animate({opacity: 1},0);	
		}
		
		
		
		// Set up the actions for next / prev and the rollovers
		
		$(es_sliderNext[id]).click(function() { 			
			evoslider.setTimer(id); 
			evoslider.nextSlide(es_sliderID[id]);
		});
			
		$(es_sliderPrev[id]).click(function() { 	
			evoslider.setTimer(id); 
			evoslider.prevSlide(es_sliderID[id]);
		});
		
		$(es_sliderNext[id] + "," + es_sliderPrev[id]).mouseenter(function() {
			$(this).addClass("es-hover");
		});
		
		$(es_sliderNext[id] + "," + es_sliderPrev[id]).mouseleave(function() {
			$(this).removeClass("es-hover");
		});
		
		
		// Set up the actions for hover 
		if (es_pauseHover) {
			$(es_sliderID[id]).mouseover(function() { evoslider.stopTimer(id);	});
			$(es_sliderID[id]).mouseout(function() { evoslider.setTimer(id); });	
		}
		
		
		
		// Set up the navigation
		if (es_showNav[id]) {
			
			if ($(es_showNav[id]).html() == "") {
				
				for (i=0;i<maxPanels[id];i++) {
					$(es_showNav[id]).append('<div class="es-nav"></div>');
					
				}
			}
			
			$(es_showNav[id] + " .es-nav").click(function() {
				evoslider.slideTo(es_sliderID[id],$(this).index());
			});
			
			$(es_showNav[id] + " .es-nav").mouseenter(function() {
				$(this).addClass('es-nav-hover');
			});
			
			$(es_showNav[id] + " .es-nav").mouseleave(function() {
				$(this).removeClass('es-nav-hover');
			});
			
		}
		
		/*if (es_fullScreen[id]) {
			$(es_fullScreen[id]).click(function() {
				evoslider.fullScreen(id);
			});
		}*/
		
		// Update the counter	
		evoslider.updateStatus(id);
		
		// Set up the autostep
		evoslider.setTimer(id);
		
	},
	
	// === CALL THE NEXT SLIDE ===
	
	nextSlide:function(sliderID) {
		
		var id = es_sliderID.indexOf(sliderID);
		
//		if (!es_isLoading[id]) {
			
			lastSlide[id] = es_currentSlide[id];
			
			if (es_currentSlide[id] < maxPanels[id] -1) {
				es_currentSlide[id]++;
			} else {
				es_currentSlide[id] = 0;
			}
		
			evoslider.loadSlide(id);	
//		}
		
	},
	
	// === CALL THE PREVIOUS SLIDE ===
	
	prevSlide:function(sliderID) {
		
		var id = es_sliderID.indexOf(sliderID);
		
//		if (!es_isLoading[id]) {
			
			lastSlide[id] = es_currentSlide[id];
			
			if (es_currentSlide[id] > 0) {
				es_currentSlide[id]--;
			} else {
				es_currentSlide[id] = maxPanels[id] -1;
			}
		
			evoslider.loadSlide(id);
//		}
		
		//evoslider.animateSlide(id);
		//evoslider.loadPrev(id);
		
		
	},
	
	// === LOAD THE NEXT SLIDE ===
	
	loadSlide:function(id) {
			
		// Check if required slide is loaded
		if (es_loading[id]) {
			if ($(es_sliderID[id] + " " + es_panelClass[id] + ":eq(" + es_currentSlide[id] + ")").hasClass('es-loaded')) {
				
				// The slide is loaded
				$(es_sliderID[id] + " .es-loading").hide();
				es_isLoading[id] = false;
				evoslider.animateSlide(id);		
			
			} else {
			
				// The slide isn't loaded, retry after a few milliseconds
				es_isLoading[id] = true;
				$(es_sliderID[id] + " .es-loading").show();
				setTimeout("evoslider.loadSlide(" + id + ")",500);
			
			}
		} else {
			evoslider.animateSlide(id);
			
		}
	},
	
	// === ANIMATE THE SLIDE ===
	
	animateSlide:function(id) {
		
		evoslider.updateStatus(id);
		
		if (es_sliderType[id] == "horizontal") {
			$(es_sliderID[id] + " " + es_beltClass[id]).stop().animate({
				left: 0 - (panelWidth[id] * es_currentSlide[id])
			},
			es_animationTime[id], es_animationType[id], function() {
				
			});
		}
		
		if (es_sliderType[id] == "vertical") {
			$(es_sliderID[id] + " " + es_beltClass[id]).stop().animate({
				top: 0 - (panelHeight[id] * es_currentSlide[id])
			},
			es_animationTime[id], es_animationType[id], function() {
				
			});
		}
		
		if (es_sliderType[id] == "fader") {
			
			$(es_sliderID[id] + " .es-middle").removeClass("es-middle").addClass("es-normal");
			$(es_sliderID[id] + " .es-top").removeClass("es-top").addClass("es-middle");
			$(es_sliderID[id] + " " + es_panelClass[id] + ":eq(" + es_currentSlide[id] + ")").removeClass("es-normal").addClass("es-top").animate({opacity: 0},0);
			$(es_sliderID[id] + " " + es_panelClass[id] + ":eq(" + es_currentSlide[id] + ")").stop().animate(
				{opacity: 1},
				es_animationTime[id], es_animationType[id], function() {
			});
			
		}
		
	},
	
	// === SLIDE TO A SPECIFIC SLIDE ===
	
	slideTo:function(sliderID,num) {
		
		var id = es_sliderID.indexOf(sliderID);
		
		if (es_currentSlide[id] != num) {
			lastSlide[id] = es_currentSlide[id];
			es_currentSlide[id] = num;
			//evoslider.animateSlide(id);
			evoslider.loadSlide(id);
		}
		
	},
	
	// === UPDATE COUNTER AND NAVIGATION ELEMENTS ===
	
	updateStatus:function(id) {
		if (es_showCounter[id]) {
			$(es_showCounter[id] + " .es-cur").html(es_currentSlide[id] + 1);
			$(es_showCounter[id] + " .es-max").html(maxPanels[id]);
		}
		
		if (es_showNav[id]) {
			$(es_showNav[id] + " .es-nav").removeClass("es-nav-sel");
			$(es_showNav[id] + " .es-nav:eq(" + es_currentSlide[id] + ")").addClass("es-nav-sel");
		}
	},
	
	// === SET TIMER FOR AUTOSTEP ===
	
	setTimer:function(id) {
		if (es_autoStep[id]) {
			clearInterval(es_Timer[id]);
			es_Timer[id] = setInterval('evoslider.nextSlide("' + es_sliderID[id] + '")',es_pauseTime[id] + es_animationTime[id]);	
		}	
	},
	
	// === STOP TIMER FOR AUTOSTEP ===
	
	stopTimer:function(id) {
		clearInterval(es_Timer[id]);
	}
	
}


