/*!

 * slideViewerPro 1.5

 * Examples and documentation at: 

 * http://www.gcmingati.net/wordpress/wp-content/lab/jquery/svwt/

 * 2009-2011 Gian Carlo Mingati

 * Version: 1.5.0 (02-AUG-2011)

 * Dual licensed under the MIT and GPL licenses:

 * http://www.opensource.org/licenses/mit-license.php

 * http://www.gnu.org/licenses/gpl.html

 * Requires:

 * jQuery v1.6 or later

 * Option:

 * jQuery Timers plugin | plugins.jquery.com/project/timers (for autoslide mode)

 * 

 */

jQuery.extend( jQuery.easing, // from the jquery.easing plugin

{

	easeInOutExpo: function (x, t, b, c, d) {

		if (t==0) return b;

		if (t==d) return b+c;

		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;

		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;

	}

});

jQuery(function(){

   jQuery("div.svwp").prepend("<img src='../cdn/assets/img/ajax-loader4.gif' class='ldrgif' alt='loading...'/ >"); //change with YOUR loader image path   

});

var j = 0;
var slideContainer = null;
var slideSettings = null;


jQuery.fn.slideViewerPro = function(settings) {

	  settings = jQuery.extend({

			galBorderWidth: 6,

			thumbsTopMargin: 10, 

			thumbsRightMargin: 3,

			thumbsBorderWidth: 3,

			buttonsWidth: 120,

			galBorderColor: "#fff",

			thumbsBorderColor: "#fff",

			thumbsActiveBorderColor: "#fff",

			buttonsTextColor: "#fff",

			thumbsBorderOpacity: 1.0, // could be 0, 0.1 up to 1.0

			thumbsActiveBorderOpacity: 1.0, // could be 0, 0.1 up to 1.0

			easeTime: 750,

			asTimer: 4000,

			thumbs: 5,

			thumbsPercentReduction: 20,

			thumbsVis: true,

			easeFunc: "easeInOutExpo",

			leftButtonInner: "<div class='prv'>Previous</div>", //could be an image "<img src='images/larw.gif' />" or an escaped char as "&larr";

			rightButtonInner: "<div class='nxt'>Next</div>", //could be an image or an escaped char as "&rarr";

			autoslide: false,

			typo: false,

			typoFullOpacity: 0.9,

			shuffle: false

		}, settings);

	return this.each(function(){

		function shuffle(a) {

	    var i = a.size();

	    while (--i) {

	        var j = Math.floor(Math.random() * (i));

	        var tmp = a.slice(i, i+1);

	        a.slice(j, j+1).insertAfter(tmp);

	    }

		} 

		var container = slideContainer = jQuery(this);
		slideSettings = settings;

		(!settings.shuffle) ? null : shuffle(container.find("li"));

		container.find("img.ldrgif").remove();

		container.removeClass("svwp").addClass("slideViewer");	

		container.attr("id", "svwp"+j);

		/**

			var pictWidth = container.find("img").width(); 

			Reads the width of the first (and only) IMG height. 

			That's why all images in the gal must have the same width/height

		*/

		var pictWidth = container.find("img").width(); 

	if (pictWidth<450){pictWidth=450;

	}

		var pictHeight = container.find("img").height();

		var pictEls = container.find("li").size();

		(pictEls >= settings.thumbs) ? null : settings.thumbs = pictEls;

		var slideViewerWidth = pictWidth*pictEls;

		var thumbsWidth = Math.round(pictWidth*settings.thumbsPercentReduction/100);

		var thumbsHeight =  Math.round(pictHeight*settings.thumbsPercentReduction/100);

		var pos = 0;

		var r_enabled = true;

		var l_enabled = true;

    container.find("ul").css("width" , slideViewerWidth)

    .wrap(jQuery("<div style='width:"+ pictWidth +"px; overflow: hidden; position: relative; top: 0; left: 0'>"));

		container.css("width" , pictWidth);

		container.css("height" , pictHeight);

		container.each(function(i) {

			if(settings.typo)

			{

			jQuery(this).find("img").each(function(z) {

				jQuery(this).after("<span class='typo' style='position: absolute; width:"+(pictWidth-12)+"px; margin: 0 0 0 -"+pictWidth+"px'>"+jQuery(this).attr("alt")+"<\/span>");

			});

			}

			jQuery(this).after("<div class='thumbSlider' id='thumbSlider" + j + "'><ul><\/ul><\/div>");

			jQuery(this).next().after("<a href='#' class='left' id='left" + j + "'><span>"+settings.leftButtonInner+"</span><\/a><a href='#' class='right' id='right" + j + "'><span>"+settings.rightButtonInner+"<\/span><\/a>");

			

			jQuery(this).find("li").each(function(n) { 

						jQuery("div#thumbSlider" + j + " ul").append("<li><a title='" + jQuery(this).find("img").attr("alt") + "' href='#'><img width='"+ thumbsWidth +"' height='"+ thumbsHeight +"' src='" + jQuery(this).find("img").attr("src") + "' /><p class='tmbrdr'>&nbsp;<\/p><\/a><\/li>");						

			});

    

			jQuery("div#thumbSlider" + j + " a").each(function(z) {			

				jQuery(this).bind("click", function(){

					// update the photo url on the Facebook like button
					updateFacebookLikeButton( $(this).parent().index() );
					
					jQuery(this).find("p.tmbrdr").css({borderColor: settings.thumbsActiveBorderColor, opacity: settings.thumbsActiveBorderOpacity});

					jQuery(this).parent().parent().find("p.tmbrdr").not(jQuery(this).find("p.tmbrdr")).css({borderColor: settings.thumbsBorderColor, opacity: settings.thumbsBorderOpacity});

					var cnt = -(pictWidth*z);

					(cnt != container.find("ul").css("left").replace(/px/, "")) ? container.find("span.typo").animate({"opacity": 0}, 250) : null ;
					container.find("ul").animate({ left: cnt}, settings.easeTime, settings.easeFunc, function(){container.find("span.typo").animate({"opacity": settings.typoFullOpacity}, 250)});					

					return false;

				});

			});

			// shortcuts to +/- buttons

			var jQuerybtl = jQuery("a#left" + j);	

			var jQuerybtr = jQuery("a#right" + j);	

			

			// right/left 			

			jQuerybtr.bind("click", function(){

					if (r_enabled) (pictEls-pos > settings.thumbs*2 || pictEls%settings.thumbs == 0)? pos += settings.thumbs : pos += pictEls % settings.thumbs;

					r_enabled = false;

					jQuery(this).prev().prev().find("ul:not(:animated)").animate({ left: -(thumbsWidth+settings.thumbsRightMargin)*pos}, 500, settings.easeFunc, function(){authorityMixing();});					

					return false;

			});

			jQuerybtl.bind("click", function(){	

					if (l_enabled && pos!=0) (pictEls-pos > settings.thumbs || pictEls%settings.thumbs == 0)? pos -= settings.thumbs : pos -= pictEls % settings.thumbs;

					l_enabled = false;

					jQuery(this).prev().find("ul:not(:animated)").animate({ left: -(thumbsWidth+settings.thumbsRightMargin)*pos}, 500, settings.easeFunc, function(){authorityMixing();});			

					return false;

			});						

			

			function authorityMixing()

			{				

				

				//right btt

				(pos == pictEls-settings.thumbs) ? jQuerybtr.addClass("r_dis") : jQuerybtr.removeClass("r_dis");

				(pos == pictEls-settings.thumbs) ? r_enabled = false : r_enabled = true;

				//left btt

				(pos == 0) ? jQuerybtl.addClass("l_dis") : jQuerybtl.removeClass("l_dis");

				(pos == 0) ? l_enabled = false : l_enabled = true;

			}

			

			//CSS	defs @ runtime

			var tBorder = settings.thumbsBorderWidth;

			var contBorder = settings.galBorderWidth

			

			jQuery(".slideViewer a img").css({border: "0"});

			if(settings.typo)

					{

						jQuery(this).find("span.typo").each(function(z) {

							jQuery(this).css({marginTop: (pictHeight-jQuery(this).innerHeight()), opacity: settings.typoFullOpacity});

						});

					}

			jQuery("div#svwp"+ j).css({border: settings.galBorderWidth +"px solid "+settings.galBorderColor});

			

			jQuery("div#thumbSlider" + j).css({position: "relative", left: contBorder, top: settings.thumbsTopMargin+"px", width: settings.thumbs*thumbsWidth+((settings.thumbsRightMargin*settings.thumbs)-settings.thumbsRightMargin), height: thumbsHeight, textAlign: "center", overflow: "hidden", margin: "0 auto"});

			jQuery("div#thumbSlider" + j + " ul").css({width: (thumbsWidth*pictEls)+settings.thumbsRightMargin*pictEls, position: "relative", left: "0", top: "0"});

			jQuery("div#thumbSlider" + j + " ul li").css({marginRight: settings.thumbsRightMargin});

					

			jQuery("div#thumbSlider" + j).find("p.tmbrdr").css({width: (thumbsWidth-tBorder*2)+"px", height: (thumbsHeight-tBorder*2) +"px", top: -(thumbsHeight) +"px", border: settings.thumbsBorderWidth +"px solid "+settings.thumbsBorderColor, opacity: settings.thumbsBorderOpacity});			

			jQuery("div#thumbSlider" + j + " a:first p.tmbrdr").css({borderColor: settings.thumbsActiveBorderColor, opacity: settings.thumbsActiveBorderOpacity});

			

			var rbttLeftMargin = (pictWidth/2) + (jQuery("div#thumbSlider" + j).width()/2) + settings.thumbsRightMargin + contBorder;

			var lbttLeftMargin = (pictWidth/2) - (jQuery("div#thumbSlider" + j).width()/2) - (settings.buttonsWidth + settings.thumbsRightMargin) + contBorder;			



			

			var innerLeftImg = jQuerybtl.find("img");

			var innerRightImg = jQuerybtr.find("img");

			if(innerLeftImg.length != 0 && innerRightImg.length != 0)

			{		

				jQuery(innerLeftImg).load(function() {

					jQuery(this).css({margin: Math.round((thumbsHeight/2)-(jQuery(this).height()/2))+"px 0 0 0"});

				});				

				jQuery(innerRightImg).load(function() {

					jQuery(this).css({margin: Math.round((thumbsHeight/2)-(jQuery(this).height()/2))+"px 0 0 0"});

				});			

			}



			

			jQuery("a#left" + j).css({display: "block", textAlign: "center", width: settings.buttonsWidth + "px" , height: thumbsHeight+"px",  margin: -(thumbsHeight-settings.thumbsTopMargin) +"px 0 0 "+lbttLeftMargin+"px", textDecoration: "none", lineHeight: thumbsHeight+"px", color: settings.buttonsTextColor});

			jQuery("a#right" + j).css({display: "block", textAlign: "center", width: settings.buttonsWidth + "px", height: thumbsHeight+"px" , margin: -(thumbsHeight) +"px 0 0 "+rbttLeftMargin+"px", textDecoration: "none", lineHeight: thumbsHeight+"px", color: settings.buttonsTextColor});			





			authorityMixing();

	

			if(settings.autoslide){					

					var i = 1;

					

					jQuery("div#thumbSlider" + j).everyTime(settings.asTimer, "asld", function() {			

		  			jQuery(this).find("a").eq(i).trigger("click");

		  			if(i == 0)

		  			{

						pos = 0;

						l_enabled = false;

						jQuery("div#thumbSlider" + j).find("ul:not(:animated)").animate({ left: -(thumbsWidth+settings.thumbsRightMargin)*pos}, 500, settings.easeFunc, function(){authorityMixing();});

		  			}

		  			else l_enabled = true;

		  			

						(i%settings.thumbs == 0)? jQuery(this).next().next().trigger("click") : null;

						(i < pictEls-1)?	i++ : i=0;		  			

					});		

					

					//stops autoslidemode	

					jQuery("a#right" + j).bind("mouseup", function(){

						jQuery(this).prev().prev().stopTime("asld");

		    	});

					jQuery("a#left" + j).bind("mouseup", function(){
						
						jQuery(this).prev().stopTime("asld");	

					});

					jQuery("div#thumbSlider" + j + " a").bind("mouseup", function(){

						jQuery(this).parent().parent().parent().stopTime("asld");

					});

			}

			var uiDisplay = (settings.thumbsVis)? "block":"none";

			jQuery("div#thumbSlider" + j + ", a#left" + j + ", a#right" + j).wrapAll("<div style='width:"+ pictWidth +"px; display: "+uiDisplay+"' id='ui"+j+"'><\/div>");			

			jQuery("div#svwp"+ j + ", div#ui" + j).wrapAll("<div style='width:"+ pictWidth +"px'><\/div>");

			});

			

		j++;

  });	



};

function displayPhoto(index)
{
	var container = slideContainer;
	var settings = slideSettings;
	var pictWidth = jQuery('.slideViewer').css('width');	// use slideviewer width instead of img width in case we have resized, centred portrait images
	pictWidth = pictWidth.substr(0, pictWidth.length-2);
	var cnt = -(pictWidth*index);
	(cnt != container.find("ul").css("left").replace(/px/, "")) ? container.find("span.typo").animate({"opacity": 0}, 250) : null ;
	container.find("ul").animate({ left: cnt}, settings.easeTime, settings.easeFunc, function(){container.find("span.typo").animate({"opacity": settings.typoFullOpacity}, 250)});
}

function updateFacebookLikeButton(index)
{
	var $container = jQuery( '#fb-container' );
	var domain = "http://nicolabenedetti.co.uk";
	
	// remove contents
	$container.empty();
	
	// add like button with updated data-href
	// galleryPages is defined in category-photos.php
	jQuery('<div class="fb-like" data-href="'+domain+"/"+galleryPages[index]+'" data-send="false" data-width="450" data-show-faces="false"></div>').appendTo($container);
	
	// render FB elements
	if (typeof FB  != "undefined"){ FB.XFBML.parse(document.getElementById('fbLike'));}
}


if ( photoId != undefined ) updateFacebookLikeButton(photoId);
