/*
Description: Press Big Image
Author: wpworks.net
Author URI: http://wpworks.net
*/

WPW.PressBigImage = function(){
	//vars
	var $ = jQuery;
	var main = this;
	
	//SETTINGS
	var gallerySpeed = 300;
	var animEase = "easeInOutQuad";
	var maxGalleryWidth = 990; 
	//	
	

	var items = [];
	var subItems = [];
	var boxItems = [];
	var currentIndex = 0;
	
	var gallery = $('#press-big-image');
	var bg = $('#press-big-image-bg');
	var container = $('#press-big-image-container');
	var btnNext = $('#press-big-image-btn-next');
	var btnPrev = $('#press-big-image-btn-prev');
	var btnClose = $('#press-big-image-btn-close');
	var imageInfo = $('#press-big-image-info');
	var animContainer = $('<div id="big-anim-container"></div>')
	
	var fb_href = gallery.attr('data-fb');
	var tw_href = gallery.attr('data-tw');	
	var main_href = gallery.attr('page-url');	
	
	if(!gallery.length)return;
	$('body').append(gallery);

	btnNext.hide();
	btnPrev.hide();
	
	var nodes = $('.list-item');
	if(!nodes.length)return;

	

	container.append(animContainer);

	nodes.each(function(index){
		//ITEM OBJECT
		var item = $(this);
		item.data('index', index);
		items.push(item);
	
		item.click(function(){
			currentIndex = 0;
			subItems = [];
			boxItems = [];
			animContainer.empty();
			
 			$("a[rel='"+item.attr('rel')+"']").each(function(subIndex){
 				var subItem = $(this);
 				subItems.push(subItem);
 				subItem.data('subIndex', subIndex);
				var imgBox = $('<div class="big-img-box"></div>');
				animContainer.append(imgBox);
				subItem.data('imgBox', imgBox);
				boxItems.push(imgBox);
				$('#press-title').html($('.press-block-text', item).html());
 			});


			//$.address.value(index);
			
			changeIndex();
			return false;
		});	
		

	});
	
	
	var selectItem = function(item){
		if(item.data('loaded')){
			showImage(item);
		} else {
			loadImage(item);
		}
	}
	

	var showImage = function(item){
		if(item.data('subIndex') !== currentIndex) return;
		
		if(!item.data('pic')) {
			WPW.console('no image found');
			return;
		}
		resizeImages();
		animateContainer();
		//REMOVE OLD IMAGE
		var latestImg = $('img:first', container);
		if(latestImg.length){
			
			latestImg.removeClass('full-alpha');
			latestImg.addClass('zero-alpha');
			
			clearTimeout(latestImg.data('animTimer'));
			
			latestImg.data('animTimer',
				setTimeout(function(){
					latestImg.detach();
					showImage(item);
				}, 500)
			);
			
			return;
		}
		
		//ADD NEW IMAGE
		clearTimeout(item.data('pic').data('animTimer'));

		//container.prepend(item.data('pic'));
		item.data('imgBox').append(item.data('pic'));
		
		
		item.data('pic').removeClass('full-alpha');	
		item.data('pic').addClass('zero-alpha');
		
		item.data('pic').data('animTimer', setTimeout(function(){
			item.data('pic').addClass('full-alpha');
			item.data('pic').removeClass('zero-alpha');	
		}, 100));
		
	
		imageInfo.html($('.collection-block-text', item).html());
		
	}
	
	
	var loadImage = function(item){
		var pic;
		var picpath = item.attr('href');
		
		
		if(!item.data('pic')){
			pic = new Image();
			pic = $(pic);
			item.data('pic', pic);
			var preloader = WPW.showPreloader( container , "press-big-image-preloader");
			pic.data('preloader', preloader);
		} else {
			pic = item.data('pic');
		}
		
		pic.load(function(){
			item.data('loaded', true);
			showImage(item);	
			WPW.removePreloader(pic.data('preloader'), "press-big-image-preloader");
			
		}).error(function(){
			item.data('loaded', true);
			WPW.removePreloader(pic.data('preloader'), "press-big-image-preloader");
			WPW.console("Image not found");
		}).attr('src', picpath);
	}
	
	// GALLERY 

	var animateContainer = function(){
		animContainer.animate({
				left: -WPW.cW * currentIndex
			}, {
				duration: 500, 
				step:function(){},
				easing:animEase,
				complete:function(){}
			});	
	}
	
	var changeIndex = function(way){
		
		if(!gallery.data('onScreen')){
			showGallery();
			return;
		}
		
		var oldIndex = currentIndex;
		
		if(way){
			currentIndex += way;
			if(currentIndex < 0)currentIndex = 0;
			if(currentIndex > subItems.length - 1)currentIndex = subItems.length - 1;
		}
			
				
		//if(oldIndex === currentIndex && way) return;
		selectItem(subItems[currentIndex]);
		
		// $("#fb-share").attr('href', fb_href + main_href + "%23" + currentIndex);
		// $("#tw-share").attr('href', tw_href + main_href + "%23" + currentIndex);		
		checkControls();
	}

	var checkControls = function(){
		if(currentIndex === 0){
			btnPrev.hide();
		} else {
			btnPrev.show();
		}
		if(currentIndex === subItems.length - 1){
			btnNext.hide();
		} else {
			btnNext.show();
		}
		
		if(subItems.length < 2){
			btnNext.hide();
			btnPrev.hide();
		}
	}

	var hideGallery = function(){
		if(gallery.data('onScreen')){
			gallery.data('onScreen', false);
			gallery.slideUp(gallerySpeed, function(){
					gallery.detach();
					$('img', container);
					btnNext.hide();
					btnPrev.hide();
				});
			$.address.value('');			
		}
		
		$('#press-title').html("");
	}

	var showGallery = function(){
		if(gallery.data('onScreen'))return;
		$('img', container).detach();
		gallery.data('onScreen', true);
		WPW.body.prepend(gallery);
		gallery.slideDown(gallerySpeed, changeIndex);
		
		animContainer.css('left', WPW.cW * currentIndex);
	}	
	
	var resizeImages = function(){
		var containerHeight = parseInt(WPW.cH - 180, 10);
		//if(containerHeight > maxGalleryHeight) containerHeight = maxGalleryHeight;
		
		for(var i = 0; i < boxItems.length; i++){
			var box = boxItems[i];
			box.css('width', WPW.cW);
			box.css('left', WPW.cW*i);
		}
		
		container.css('height', containerHeight);
		animContainer.css('height', containerHeight);
		container.css('width', WPW.cW);
		
		gallery.css('height', containerHeight);
		$('.outer-center', gallery).css('height', containerHeight);
		gallery.css('top', 180);
		
		animateContainer();
	} 
	
	btnClose.click(hideGallery);
	btnPrev.click(function(){changeIndex(-1); return false;});
	btnNext.click(function(){changeIndex(1); return false;});
	
	//listen to address change to select thumb
	$.address.change(function(e){
		var theIndex = $.address.value().replace("/", "");
		if(theIndex.length < 1){
			hideGallery();
			return;
		}

		if(theIndex > items.length - 1) theIndex = 0;
		currentIndex = parseInt(theIndex, 10);
		changeIndex();		
		//selectedItem.trigger('click');
	});	
	
	WPW.Observer($('body')).set('WindowResize', resizeImages);
}

WPW.Core.register("WPW.PressBigImage");
