var galleries = [];

$(document).ready(function() {
	
	initGalleries();
});

function initGalleries (){

	var pageSpecificItems = $("#block-views-Images-block_2 .views-row, #block-views-Team-block_4 .views-row"); // page specific
	var defaultItems = $("#block-views-Images-block_1 .views-row"); // defaults
	
	if(pageSpecificItems.length > 0){
		defaultItems.hide();
		makeGallery(pageSpecificItems);
	} else if(defaultItems.length > 0){
		makeGallery(defaultItems);
	}
	
	
	var bikeSourceItems = $("#block-views-Bikes-block_2 .views-row, #block-views-Bikes-block_3 .views-row");
	if(bikeSourceItems.length > 1){
		$(".panel-top").prepend('<div class="bikes-gallery-container"></div>');
		bikeSourceItems.each(function(){
			$(".bikes-gallery-container").append($(this).html());
		});
		var bikeItems = $(".bikes-gallery-container .bike");
		var bikeGallery = makeGallery(bikeItems, null, "bikes");
		bikeSourceItems.bind('mouseenter', function(){
			var nid = $(this).find('.bike').attr('command');
			var target = $(".bikes-gallery-container .bike-"+nid);
			var targetNumber = target.attr('command');
			showImage(bikeGallery, targetNumber, 1, "prev");

		});
		$(bikeSourceItems.get(0)).find('.bike').addClass('active');
	}
}
function bikeShowImage (targetNumber){
	var bikeSourceItems = $("#block-views-Bikes-block_2 .bike, #block-views-Bikes-block_3 .bike");
	bikeSourceItems.removeClass('active');
	$(bikeSourceItems.get(targetNumber-1)).addClass('active');
	
}

function makeGallery (galleryItems, jPagerParent, galleryType) {
	if(jPagerParent == 'undefined' || jPagerParent == null){
		jPagerParent = $('.pager-container');
	}
	if(galleryType == 'undefined' || galleryType == null){
		galleryType = "default";
	}
	
	var count = 0;	
	var gallery = {};
	
	var pagerHtml = "";
	
	if (galleryItems.length > 1){

		gallery.index = galleries.length
		gallery.type = galleryType;
		gallery.pagerNumbers = true;
		gallery.pagerSteps = false;
		gallery.transition = "slide vertical";
		//gallery.transition = "fade";
		gallery.items = galleryItems;
		gallery.current = 0;
		galleries.push(gallery);
		
		if (gallery.pagerSteps){
			pagerHtml += '<div class="pager-item pager-item-step pager-prev" command="prev" >&lt; prev</div>';
		}
	
		gallery.items.each(function(){
		
			count ++;
			//gallery.items.push($(this));
			
			$(this).addClass("gallery-item gallery-item-" + count);
			$(this).attr("command", count);
			
			// pagerHtml
			if (gallery.pagerNumbers){
				var classes = "pager-item pager-item-number ";
				classes += " pager-"+count + " ";
				if(count == 1){ classes += " pager-item-first ";}
				if(count == galleryItems.length){ classes += " pager-item-last ";}
				pagerHtml += "<div class=\""+classes+"\" command=\""+count+"\" >"+count+"</div>";
			}
			
		}); 
		
		if (gallery.pagerSteps){
			pagerHtml += '<div class="pager-item pager-item-step pager-next " command="next" >next &gt;</div>';
		}
		
		
		// add pager
		pagerHtml = '<div class="pager pager-'+gallery.index+' pager-'+gallery.type+'" command="'+gallery.index+'">' + pagerHtml + '</div>';
		if(jPagerParent != 'undefined' && jPagerParent != null){
			jPagerParent.append(pagerHtml);
			
			gallery.pager= $(".pager-"+gallery.index);
			gallery.pageritems = gallery.pager.find(".pager-item");
			
			// pager events
			// page by numbers
			gallery.pageritems.filter(".pager-item-number").click(function(){
				
				var gallery = toGallery($(this).parents(".pager").attr("command"));
				
				showImage(gallery, $(this).attr("command"), 500);	
			});
			// page by steps
			gallery.pageritems.filter(".pager-item-step").click(function(){
				var galleryIndex = $(this).parents(".pager").attr("command");
				if ($(this).attr("command") == "prev"){
					prevImage(galleryIndex, 500);
				} else {
					nextImage(galleryIndex, 500);
				}	
			});
			
		}
		
		
		gallery.itemcount = count;
		gallery.timer = setTimeout( "nextImage("+gallery.index+")", 8000 );
		
		gallery.items.css({'z-index': 50, 'position': 'absolute', 'left':0});
		
		gallery.items.filter(':first').addClass("active").css({'z-index': 51, 'opacity': 1});
		gallery.pageritems.filter(':first').addClass('active');
		
		return gallery;
	}
}

function getCurrentImage(gallery){
	gallery = toGallery(gallery);
	
	var current = $(gallery.items.get(gallery.current));
	
	if(!current || current.length == 0){
		current = gallery.items.filter(":first");
	}
	return current;
}

function nextImage(gallery, speed){
	gallery = toGallery(gallery);
	
	var current = getCurrentImage(gallery);
		
	var targetIndex = gallery.current + 1;
	if(targetIndex >= gallery.items.length){
		targetIndex = 0;
	}
	
	var target = $(gallery.items.get(targetIndex));
	
	if(!target || target.length == 0){
		target = gallery.items.filter(":first");
	}
	
	showImage(gallery, targetIndex+1, speed, "next");	
	gallery.current = targetIndex;
}

function prevImage(gallery, speed){
	gallery = toGallery(gallery);
	
	var current = getCurrentImage(gallery);
		
	var targetIndex = gallery.current - 1;
	if(targetIndex < 0){
		targetIndex = gallery.items.length - 1;
	}
	
	var target = $(gallery.items.get(targetIndex));
	
	if(!target || target.length == 0){
		target = gallery.items.filter(":last");
	}

	showImage(gallery, targetIndex+1, speed, "prev");
	gallery.current = targetIndex;	
}

function showImage(gallery, targetNumber, speed, direction){
	gallery = toGallery(gallery);
	var targetIndex = targetNumber -1;

	var target = $(gallery.items.get(targetIndex));
	
	if(!target || target.length == 0){
		target = gallery.items.filter(":first");
	}

	
	if(!speed || speed == "undefined"){
		speed= 1000;
	}

	var current = getCurrentImage(gallery);
	
	if(target.attr('command') != current.attr('command')){
		
		gallery.items.removeClass("active");
		target.addClass("active");
		
		
		gallery.pageritems.removeClass('active');
		gallery.pageritems.filter('.pager-'+targetNumber).addClass('active');
		
		
		if (gallery.transition == "slide vertical"){
			gallery.items.stop(true, true);
			
			var startY = target.height();
			var finishY = -startY;
			
			if(parseInt(target.attr('command')) < parseInt(current.attr('command'))){
				startY = -startY;
				finishY = -finishY;
			}
				
			gallery.items.css({'z-index': 50, 'position': 'absolute', 'top': startY});
			
			current.css({'z-index': 51, 'top': 0, 'opacity': 1});
			//current.animate({'top': finishY, 'opacity': 0}, speed);
			current.animate({'top': finishY, 'opacity': 1}, speed);
			
			//target.css({'z-index': 52, 'top': startY, 'opacity': 0});
			target.css({'z-index': 52, 'top': startY, 'opacity': 1});
			target.animate({'top': 0, 'opacity': 1}, speed);
			
		} else if (gallery.transition == "slide"){
			gallery.items.stop(true, true);
			
			var startX = target.width();
			var finishX = -startX;
			if(direction == "prev"){
				startX = -startX;
				finishX = -finishX;
			}
				
			gallery.items.css({'z-index': 50, 'position': 'absolute', 'left': startX});
			
			current.css({'z-index': 51, 'left': 0, 'opacity': 1});
			current.animate({'left': finishX, 'opacity': 0}, speed);
			
			target.css({'z-index': 52, 'left': startX, 'opacity': 0});
			target.animate({'left': 0, 'opacity': 1}, speed);
		} else { // fade
		
			gallery.items.stop(true, true);
			gallery.items.css({'z-index': 50});
			
			current.css({'z-index': 51});
			
			target.css({'z-index': 52, 'opacity': 0});
			target.animate({'opacity': 1}, speed);
		}
	}

	clearTimeout(gallery.timer);
	gallery.timer = setTimeout( "nextImage("+gallery.index+")", 8000 );
	gallery.current = parseInt(target.attr('command'))-1;
	
	if(gallery.type == "bikes"){
		bikeShowImage(targetNumber);
	}
}

function toGallery(gallery){
	//allows function to be passed either the gallery (default) or the galler index (from timeouts)
	if (typeof gallery != "object"){
		return  galleries[gallery];
	}
	return gallery;
}
