/************************************************************************
 * Slideshow written by Cary Buchmann
 * January 26, 2011
 ***********************************************************************
 *
 * June 28 : Updated LoadSlide for inkrefuge.com
 *
 ***********************************************************************/

function Slideshow(photoset, ajaxIcon, name)
{	
	this.photoSet = photoset;
	
	this.name = name;
	
	this.slideShowContainer = "#slideshow_";
	this.slideContainer = "#slideshowSlide_";
	this.captionContainer = "#slideshowCaption_";
	this.navigationContainer = "#slideshowNavigation_";
	this.cache = "#_slideshow_cache_";
	this.closeAction = ".slideshowClose";
	this.ajaxLoaderFrame = "#slideshowLoaderFrame";
	
	this.navCenter = "#slideshowNavCenter_";
	this.previousAction = "#slideshowNavLeft_";
	this.nextAction = "#slideshowNavRight_";
	
	this.shareLinkContainer = "#slideshowShareLinkContainer";
	this.fbookLink = "#slideshowFbookLink";
	this.twitLink = "#slideshowTwitLink";
	this.siteUrl = "";
	
	this.useShareLinks = false;
	
	this.ajaxLoader = ajaxIcon+'assets/common/images/ajax_loaders/ajax-loader-bar-loop.gif';
	
	//sometimes jquery doesn't get the right index values,
	//so we can correct the offset with this value.
	this.indexOffset = 0;
	
	this.useSmartResize = true;
	
	this.currentSlide;
	this.nextSlide;
	this.previousSlide;
	this.slideCount;
	
	
	
	var _slideshowObj = this;
		
	this.setup = function()
	{
		//alert('ajax loader is '+this.ajaxLoader);
		
		if(!this.name)
			this.name = "generic";
		
		_slideshowObj.createSlideShow();
		_slideshowObj.applyIE7Patch();

		_slideshowObj.loadListeners();
	}
	
	this.loadListeners = function()
	{
		$(this.photoSet).live("click", function(){
			_slideshowObj.loadSlide( ( $(this).index()-_slideshowObj.indexOffset ), function(){ _slideshowObj.showSlideShow(); });
			_slideshowObj.updateNavigation( $(this).index()-_slideshowObj.indexOffset );
			
			return false;
		});
		
		$(this.nextAction+", "+this.slideContainer).live('click', function(){
			_slideshowObj.loadSlide(_slideshowObj.nextSlide, function(){ _slideshowObj.updateNavigation(_slideshowObj.nextSlide); });
		}).live('mouseover', function(){
			$(this).css({ cursor : "pointer" });	
		});
		
		$(this.previousAction).live('click', function(){
			_slideshowObj.loadSlide(_slideshowObj.previousSlide, function(){ _slideshowObj.updateNavigation(_slideshowObj.previousSlide); });
		}).live('mouseover', function(){
			$(this).css({ cursor : "pointer" });	
		});
		
		$(this.closeAction).live('mouseover', function(){
			$(this).css({
				background : "#000",
				color : "#FFF",
				cursor : "pointer"
			});	
		}).live('mouseout', function(){
			$(this).css({
				background : "#FFF",
				color : "#000"
			});	
		}).live('click', function(){
			_slideshowObj.hideSlideShow();
		});
	}
	
	this.loadSlide = function(slideIndex, callback)
	{
		slide = $($(this.photoSet).get(slideIndex)).children(".portfolio_entry_photogallery_inner_container");
		slide = $(slide).children("a").attr("href");
		
		$(_slideshowObj.cache).html("<img src = '"+slide+"' />");
		img = $(_slideshowObj.cache).children("img");
		$(img).attr("src", slide);
		
		_slideshowObj.showLoader();
		
		if($.browser.msie && !($.browser.version == "7.0" || $.browser.version == "8.0") || !$.browser.msie)
		{
			$(img).load(function(){
				$(_slideshowObj.slideContainer).html(img);
	
				_slideshowObj.hideLoader();
				if(_slideshowObj.useSmartResize)
					$(_slideshowObj.slideContainer+" img").css({ maxWidth: ($(window).width() - 50), maxHeight : ($(window).height() - 160) });
					
				_slideshowObj.centerElement(_slideshowObj.slideShowContainer);
				
				if(callback)
					callback();
			});
		}
		else
		{	
			//IE IS RETARDED
			setTimeout(function(){
				$(_slideshowObj.slideContainer).html(img);
	
				_slideshowObj.hideLoader();
				if(_slideshowObj.useSmartResize)
					$(_slideshowObj.slideContainer+" img").css({ maxWidth: ($(window).width() - 50), maxHeight : ($(window).height() - 160) });
					
				_slideshowObj.centerElement(_slideshowObj.slideShowContainer);
				
				if(callback)
					callback();
			}, 3000);
		}
	}
	
	this.updateNavigation = function(slideIndex)
	{
		this.currentSlide = slideIndex;
		
		count = $(this.photoSet).length;
		
		this.nextSlide = (slideIndex+1)%count;
		this.previousSlide = slideIndex-1;
		
		if(this.previousSlide < 0)
			this.previousSlide = count-1;
			
		$(this.navCenter).html(slideIndex+1+" OF "+count);
		
		if(_slideshowObj.useShareLinks);
			_slideshowObj.updateShareLinks();
			
	}
	
	this.hideSlideShow = function()
	{
		$(this.slideShowContainer).fadeOut("fast");
	}
	
	this.showSlideShow = function()
	{
		$(this.slideShowContainer).fadeIn("fast");
	}
	
	this.hideLoader = function()
	{
		$(this.ajaxLoaderFrame).fadeOut("fast");
	}
	
	this.showLoader = function()
	{
		$(this.ajaxLoaderFrame).fadeIn("fast", function(){
			_slideshowObj.centerElement(_slideshowObj.ajaxLoaderFrame);	
		});
	}
	
	this.createSlideShow = function()
	{	
		this.slideShowContainer += this.name;	
		this.slideContainer += this.name;
		this.captionContainer += this.name;
		this.navigationContainer += this.name;
		this.previousAction += this.name;
		this.nextAction += this.name;
		this.navCenter += this.name;
		
		
		var slideshow = document.createElement('div');
		slideshow.setAttribute('id', this.getElementId(this.slideShowContainer));
		slideshow.setAttribute('class', 'slideshowMainFrame');
		slideshow.setAttribute('style', 'display:none; min-width:200px;');
		
		var slideClose = document.createElement('div');
		slideClose.setAttribute('class', "slideshowClose");
		slideClose.setAttribute('id', 'slideClose');
		slideClose.innerHTML = "X";
		
		var slide = document.createElement('div');
		slide.setAttribute('id', this.getElementId(this.slideContainer));
		slide.setAttribute('class', 'slideshowSlideFrame');
		//slide.innerHTML = '';
		
		var caption = document.createElement('div');
		caption.setAttribute('id', this.getElementId(this.captionContainer));
		caption.setAttribute('class', 'slideshowCaptionFrame');
		//caption.innerHTML = '';

		var navigation = document.createElement('div');
		navigation.setAttribute('id', this.getElementId(this.navigationContainer));
		navigation.setAttribute('class', 'slideshowNavigationFrame');
		
			var navigationLeft = document.createElement('div');
			navigationLeft.setAttribute('id', this.getElementId(this.previousAction));
			navigationLeft.setAttribute('class', 'slideshowNavigationLeft');
			navigationLeft.innerHTML = "< Previous";
			
			var navigationRight = document.createElement('div');
			navigationRight.setAttribute('id', this.getElementId(this.nextAction));
			navigationRight.setAttribute('class', 'slideshowNavigationRight');
			navigationRight.innerHTML = "Next >";
				
			var navigationCenter = document.createElement('div');
			navigationCenter.setAttribute('id', this.getElementId(this.navCenter));
			navigationCenter.setAttribute('class', 'slideshowNavigationCenter');
		
		
		var cache = document.createElement('div');
		cache.setAttribute('id', this.getElementId(this.cache));
		cache.setAttribute('style', 'display:none;');
		
		if(_slideshowObj.ajaxLoader)
		{
			var loader = document.createElement('div');
			loader.setAttribute('id', 'slideshowLoaderFrame');
			loader.setAttribute('class', 'slideshowLoaderFrame');
			loader.setAttribute('style', 'display:none;');
			loader.innerHTML = "<img src = '"+_slideshowObj.ajaxLoader+"' />";
			
			$("body").prepend(loader);
		}
		
		
		
		$("body").prepend(slideshow);
		$(slideshow).append(slideClose).append(slide).append(caption).append(navigation).append(cache);
		$(navigation).append(navigationLeft).append(navigationCenter).append(navigationRight).append("<div style = 'clear:both;'></div>");
		
		//alert($(slideshow).html());
		
		if(_slideshowObj.useShareLinks)
			_slideshowObj.createShareLinks();
	}
	
	this.createShareLinks = function()
	{
		var shareLinks = document.createElement('div');
		shareLinks.setAttribute('id', _slideshowObj.shareLinkContainer);
		
		var shareThisText = document.createElement('span');
		shareThisText.setAttribute('id', 'shareThisText');
		shareThisText.innerHTML = " SHARE PHOTO ";
		
		var fbookShare = document.createElement('a');
		fbookShare.setAttribute('id', 'slideshowFbookLink');
		fbookShare.setAttribute('href', 'http://nightlifestation.com');
		fbookShare.innerHTML = " <img src = '"+_slideshowObj.siteUrl+"assets/common/images/share/facebook.png' alt = 'slideshow facebook share' />";
		
		var twitShare = document.createElement('a');
		twitShare.setAttribute('id', this.getElementId(_slideshowObj.twitLink));
		twitShare.innerHTML = " <img src = '"+_slideshowObj.siteUrl+"assets/common/images/share/twitter.png' alt = 'slideshow twitter share' />";
		
		$(shareLinks).append(shareThisText).append(fbookShare).append(twitShare);
		
		$(_slideshowObj.navigationContainer).prepend(shareLinks);
		
		$(shareLinks).addClass('slideshowShareLinkContainer');
	}
	
	this.updateShareLinks = function()
	{	
		var image = $($(_slideshowObj.photoSet).get(this.currentSlide)).children("a").attr("href");
		
		$(_slideshowObj.fbookLink).attr("href", _slideshowObj.createFacebookShareLink(image, 'Nightlife Station Photo')).attr("target", "_blank");
		$(_slideshowObj.twitLink).attr("href", _slideshowObj.createTwitterShareLink(image, 'Nightlife Station Photo')).attr("target", "_blank");
		
	}
	
	this.createFacebookShareLink = function(image, title)
	{
		if(!title || (title && title.length <= 0))
			title = " Nightlife Station Photo ";
			
		return 'http://www.facebook.com/sharer.php?u='+image+'&t='+title;
	}
	
	this.createTwitterShareLink = function(image, title)
	{
		if(!title || (title && title.length <= 0))
			title = " Nightlife Station Photo ";
			
		return 'http://twitter.com/share?text='+title+'&url='+image;
	}
	
	this.getElementId = function(rawId)
	{
		name = rawId.substr(1, rawId.length-1);	
		return name;
	}
	
	this.centerElement = function(element)
	{
		winYOffset = $(window).scrollTop();
		winWidth = $(window).width();
		winHeight = $(window).height();
		
		elementWidth = $(element).outerWidth()/2;
		elementHeight = $(element).outerHeight()/2;
		
		centerY = winYOffset + winHeight/2 - elementHeight;
		
		$(element).css({ left : 0, top : 0});
		$(element).css({
			left : winWidth/2 - elementWidth,
			top : centerY
		});
	}
	
	
	this.applyIE7Patch = function()
	{
		$("#"+_slideshowObj.getElementId(_slideshowObj.slideShowContainer)).addClass('slideshowMainFrame');
		$("#"+_slideshowObj.getElementId(_slideshowObj.captionContainer)).addClass('slideshowCaptionFrame');
		$("#"+_slideshowObj.getElementId(_slideshowObj.navigationContainer)).addClass('slideshowNavigationFrame');
		$("#slideClose").addClass('slideshowClose');
		$("#"+_slideshowObj.getElementId(_slideshowObj.ajaxLoaderFrame)).addClass('slideshowLoaderFrame');
		
		$("#"+_slideshowObj.getElementId(_slideshowObj.navCenter)).addClass('slideshowNavigationCenter');
		$("#"+_slideshowObj.getElementId(_slideshowObj.previousAction)).addClass('slideshowNavigationLeft');
		$("#"+_slideshowObj.getElementId(_slideshowObj.nextAction)).addClass('slideshowNavigationRight');
		
		$("#"+_slideshowObj.getElementId(_slideshowObj.cache)).css('display', 'none');
		
		if($.browser.msie && $.browser.version == 7)
		{
			$(".slideshowNavigationFrame").css({ width : '500px', textAlign : 'center' });
		}
	}
}
