(function($){	/*Dependends on: jscrollpane - http://jscrollpane.kelvinluck.com - installed in ../js/plugins.js*/var $window = $(window); // cache window objectvar $prx_master; // cache master div of pluginvar $scroll_bar; // cache scroll bar var promo_width = 1280; // default value for promo widthvar num_promos = 3; // the total number of promos defined in DOMvar num_layers = 4;var site_width = 980; // default value onlyvar prxPerc; // contains 1% of the scroll in pxvar jScrollApi = Object();var maxScroll = 0; // maximum scroll value of scroll barvar aniCount = 0; // various animation varsvar aniTimer;var timer_is_on = false;var aniWait = 4500;var aniDuration = 1300;var snapped = true;var initAni;var currentPos = 0;var snapping = false; // used to disable snapping when snapping/* Initiate PRX plugin */$.fn.prxInit = function(scrollBar, s_width, p_width){    $prx_master = $(this);    $scroll_bar = scrollBar;    site_width = s_width;	promo_width = p_width;    getSetValues();    createScrollBar($scroll_bar, $prx_master);	/* CTA hover function for any promo */    $prx_master.find('.promo-cta').hover(    	function(){    		var id = $(this).data('promo-hover');    		$('#'+id).addClass('hover');    	},    	function(){    		var id = $(this).data('promo-hover');    		$('#'+id).removeClass('hover');    	}    ); };/* Create a scrollable bar------------------------------------------------------------------------- */function createScrollBar($scroll_bar, $prx_master){	$scroll_bar.jScrollPane(    	{			showArrows: true,			verticalArrowPositions: 'split',			horizontalArrowPositions: 'split',			contentWidth: $prx_master.width(), // set fake width of content - very important!!!			horizontalGutter: 20,			animateDuration: aniDuration,			autoReinitialise: false,			hideFocus: false		}    );       jScrollApi = $scroll_bar.data('jsp');        $('#prx-layer1').css('left', '0px');	$('#prx-layer2').css('left', '0px');	$('#prx-layer3').css('left', '0px');	$('#prx-layer4').css('left', '0px');}/* Animation ------------------------------------------------------------------------- */function parrallax(scrollPositionX){		perc = scrollPositionX/(maxScroll/100); // scroll bar position as percentage	var prxPos = Math.round(prxPerc*perc); // new prx position in pixels		$('#prx-layer1').css('left', '-'+prxPos+'px');	$('#prx-layer2').css('left', '-'+(prxPos*1.2)+'px'); // 20% faster	$('#prx-layer3').css('left', '-'+(prxPos*1.4)+'px'); // 40% faster	$('#prx-layer4').css('left', '-'+(prxPos*1.6)+'px'); // 60% faster		snapped = false;}/* The primary scroll event------------------------------------------------------------------------- */$('#home-scrollbar').bind('jsp-scroll-x',	function(event, scrollPositionX){						parrallax(scrollPositionX);		});/* Fire after scroll bar has been initialised------------------------------------------------------------------------- */$('#home-scrollbar').bind('jsp-initialised',	function(event, isScrollable){						initAni = setTimeout(function(){ doTimer(); }, 0); // initate timer	});/* Setup default values and styles------------------------------------------------------------------------- */function getSetValues(){	timer_is_on = false;	snapped = true;	currentPos = 0;	num_promos = $prx_master.data('num-promos');	num_layers = $prx_master.data('num-layers');	var win_width = $window.width();	var min_width = num_promos*promo_width; // minimum width of master div		/* Check to see if window is smaller than a promo width */	if(win_width < promo_width){				$prx_master.width(min_width+'px'); // set a fixed width		var offset = (promo_width-win_width)/2;		$prx_master.css('left', '-'+offset+'px'); // offset the prx container to center it in small window		maxScroll = min_width-$scroll_bar.width(); // defines the scrollable area inside the scroll pane		prxPerc = (promo_width*(num_promos-1))/100; // 1% of prx master scroll in pixels	}else{		$prx_master.width((num_promos*100)+'%'); // set a relative width		prxPerc = (win_width*(num_promos-1))/100; // 1% of prx master scroll in pixels		maxScroll = $prx_master.children('#prx-layer1').width()-$scroll_bar.width(); // defines the scrollable area inside the scroll pane		$prx_master.css('left', '0px'); // counter offset, going from small to larger window	}	//TODO: generate ALL necessary styles dynamically}/* Listen for window resize to update/reset stuff------------------------------------------------------------------------- */var w_wid = $(window).width();var h_wid = $(window).height(); var reset_delay;	$(window).resize(function(){ 	if(w_wid !== $(this).width() || h_wid !== $(this).height()){		w_wid = $(this).width();		h_wid = $(this).height();		clearTimeout(reset_delay);		reset_delay = setTimeout(function(){ reset(); }, 100); // only resize after finished resizing	}});			function reset(){	$window = $(window);	killTimer();		if(jScrollApi.reinitialise){		getSetValues();			jScrollApi.destroy(); // Kill scrollbar and re-apply 		createScrollBar($('#home-scrollbar'), $('#prx-master'));	 	$('#home-scrollbar').bind('jsp-scroll-x',			function(event, scrollPositionX, scrollPercentageX){								parrallax(scrollPositionX, scrollPercentageX);					}		);	}}/* Snap and kill timer controls ------------------------------------------------------------------------- */$(document).mouseup(function(){ if(!snapped && !snapping){ snapPromos(); } });$('#home-scrollbar').click(function(){ killTimer(); });$('#home-scrollbar').mouseover(function(){ killTimer(); });/* Snap promos so one is features/centered------------------------------------------------------------------------- */function snapPromos(target){	if(jScrollApi.getPercentScrolledX() !== 0 && jScrollApi.getPercentScrolledX() !== 1){		snapping = true;		var perc = (getSnapPosition(jScrollApi.getPercentScrolledX())/100);		jScrollApi.scrollToPercentX(perc, true);		setTimeout(function(){ snapping = false; snapped = true; }, (aniDuration+50)); // set back to true after animation	}}/* Find next closest snap position------------------------------------------------------------------------- */function getSnapPosition(scrollPercentage){		var divisions = 100/($prx_master.data('num-promos')-1);	if(scrollPercentage > (currentPos/100)){	 	currentPos = currentPos+divisions; 			 }else{		currentPos = currentPos-divisions;	}	return currentPos;}/* Auto scroll timer - infinite loop------------------------------------------------------------------------- */var aniDir = 'right';function timedCount(){	var increment = 0.5; // TODO: 0.5 should be dynamic, only suitable for 3 promos!!!	if(timer_is_on){				currentPos = (aniCount*100);			jScrollApi.scrollToPercentX(aniCount, true);		aniTimer = setTimeout(function (){ timedCount(); }, aniWait);				if(aniCount >= 1){ aniDir = 'left';	} // TODO: fix these shody conditions		if(aniCount <= 0){ aniDir = 'right'; }		if(aniDir === 'right'){			aniCount += increment;		}else{			aniCount -= increment;		}			}else{		killTimer();	}}/* Go timer------------------------------------------------------------------------- */function doTimer(){	if (!timer_is_on){	  	timer_is_on = true;	  	timedCount();	}}/* Kill the auto timer------------------------------------------------------------------------- */function killTimer(){	clearTimeout(aniTimer);	aniTimer = null;	timer_is_on = false;	aniCount = 0;	clearTimeout(initAni);}/* Stop right there */}(jQuery))	
