// keep scrollTo in main js file for less HTTP requests

/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 5/25/2009
 * @author Ariel Flesler
 * @version 1.4.2
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function(d){var k=d.scrollTo=function(a,i,e){d(window).scrollTo(a,i,e)};k.defaults={axis:'xy',duration:parseFloat(d.fn.jquery)>=1.3?0:1};k.window=function(a){return d(window)._scrollable()};d.fn._scrollable=function(){return this.map(function(){var a=this,i=!a.nodeName||d.inArray(a.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!i)return a;var e=(a.contentWindow||a).document||a.ownerDocument||a;return d.browser.safari||e.compatMode=='BackCompat'?e.body:e.documentElement})};d.fn.scrollTo=function(n,j,b){if(typeof j=='object'){b=j;j=0}if(typeof b=='function')b={onAfter:b};if(n=='max')n=9e9;b=d.extend({},k.defaults,b);j=j||b.speed||b.duration;b.queue=b.queue&&b.axis.length>1;if(b.queue)j/=2;b.offset=p(b.offset);b.over=p(b.over);return this._scrollable().each(function(){var q=this,r=d(q),f=n,s,g={},u=r.is('html,body');switch(typeof f){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(f)){f=p(f);break}f=d(f,this);case'object':if(f.is||f.style)s=(f=d(f)).offset()}d.each(b.axis.split(''),function(a,i){var e=i=='x'?'Left':'Top',h=e.toLowerCase(),c='scroll'+e,l=q[c],m=k.max(q,i);if(s){g[c]=s[h]+(u?0:l-r.offset()[h]);if(b.margin){g[c]-=parseInt(f.css('margin'+e))||0;g[c]-=parseInt(f.css('border'+e+'Width'))||0}g[c]+=b.offset[h]||0;if(b.over[h])g[c]+=f[i=='x'?'width':'height']()*b.over[h]}else{var o=f[h];g[c]=o.slice&&o.slice(-1)=='%'?parseFloat(o)/100*m:o}if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],m);if(!a&&b.queue){if(l!=g[c])t(b.onAfterFirst);delete g[c]}});t(b.onAfter);function t(a){r.animate(g,j,b.easing,a&&function(){a.call(this,n,b)})}}).end()};k.max=function(a,i){var e=i=='x'?'Width':'Height',h='scroll'+e;if(!d(a).is('html,body'))return a[h]-d(a)[e.toLowerCase()]();var c='client'+e,l=a.ownerDocument.documentElement,m=a.ownerDocument.body;return Math.max(l[h],m[h])-Math.min(l[c],m[c])};function p(a){return typeof a=='object'?a:{top:a,left:a}}})(jQuery);

/*
 * jQuery throttle / debounce - v1.1 - 3/7/2010
 * http://benalman.com/projects/jquery-throttle-debounce-plugin/
 * 
 * Copyright (c) 2010 "Cowboy" Ben Alman
 * Dual licensed under the MIT and GPL licenses.
 * http://benalman.com/about/license/
 */
;(function(b,c){var $=b.jQuery||b.Cowboy||(b.Cowboy={}),a;$.throttle=a=function(e,f,j,i){var h,d=0;if(typeof f!=="boolean"){i=j;j=f;f=c}function g(){var o=this,m=+new Date()-d,n=arguments;function l(){d=+new Date();j.apply(o,n)}function k(){h=c}if(i&&!h){l()}h&&clearTimeout(h);if(i===c&&m>e){l()}else{if(f!==true){h=setTimeout(i?k:l,i===c?e-m:e)}}}if($.guid){g.guid=j.guid=j.guid||$.guid++}return g};$.debounce=function(d,e,f){return f===c?a(d,e,false):a(d,f,e!==false)}})(this);



// JP33 script


// ghetto scroll to top fix
$(window).load(function() {
	setTimeout( function(){
		$(window).scrollTop(0);
	}, 1);
});

$(document).ready(function(){

	var isTouch = !!('createTouch' in document);

	if ( isTouch ) {
		
		$('body').addClass('ios');
	
	} else {
	
		// SET WIDTH OF CANVAS
		var total =	 $('#display').outerWidth();
		$('#canvas').css({ width : total });


		var $canvasContainer = $('#canvas-container');
	
		// Work links, Information
		// scroll to view each piece, link.className = piece.idName
		$('div.postlinks a[class]').click( function(event) {
			
			// prevent jumpy	
			event.preventDefault();
			
			// fixing scroll hack
			var currPageScroll = $(window).scrollTop();
			var currScrollLeft = $canvasContainer.scrollLeft();
			
			window.location.hash = $(this).attr('href');
			
			// set back to old scroll. super hacky
			$(window).scrollTop(currPageScroll);
			$canvasContainer.scrollLeft(currScrollLeft);

			// if it isn't currently the active slide
			if( !$(this).hasClass('active') ) {
				
				var $elem = $('#'+this.className),
					halfWidth = ($canvasContainer.width() / 2) - ($elem.outerWidth() / 2);
	
				// requires jquery.scrollTo plugin
				$canvasContainer.scrollTo( $elem , 500, {
					offset: -halfWidth,
					onAfter: function(){
						// ghetto fix for current nav item bug
						$canvasContainer.scrollLeft( $canvasContainer.scrollLeft()+1 );
					}
				});

			}

		});
		
		// on page load scroll to hash if its there
		function goScroll() {
			
			if (window.location.hash) {
				var $elem = $(window.location.hash),
					halfWidth = ($canvasContainer.width() / 2) - ($elem.outerWidth() / 2);
	
				// requires jquery.scrollTo plugin
				$canvasContainer.scrollTo( $elem , 500, {
					offset: -halfWidth,
					onAfter: function(){
						// ghetto fix for current nav item bug
						$canvasContainer.scrollLeft( $canvasContainer.scrollLeft()+1 );
						
					}
				});
			}
			
		}
		
		goScroll();
		
	
	
	
	
	
	
		// vars for custom scrollbar
		var $scrollhandle = $('#scrollhandle'),
			$scrollbar = $('#scrollbar'),
			$scrollbarWidth = $('#scrollbar').width();
		
		// figure out the relative size of the scrollbar handle
		var scrollbarSize = Math.ceil( ( $scrollbarWidth / total ) * $scrollbarWidth );

		// set the handle to that size
		$scrollhandle.width( scrollbarSize );
		
		var $scrollhandleWidth = $scrollhandle.width();

	
	
		// CUSTOM CANVAS DRAGGING

		var $doc = $(document),
			scrollX,
			cursorX,
			startX;
		
		$('#canvas').mousedown( function(event){
			scrollX = $canvasContainer.scrollLeft();
			startX = event.pageX;
		
			$doc.bind( 'mousemove', dragMovement )
				.bind( 'mouseup', endDragMovement );
		
			event.preventDefault();
			return false;
		});

		
		function dragMovement( event ) {
		
			// move canvas
			var endX = event.pageX,
				scrollAmount = scrollX + (startX - endX);
		
			$canvasContainer.scrollLeft( scrollAmount );
			
			// see setActive and throttled active event
			$canvasContainer.trigger('active');

		}
	
	
		function endDragMovement( event ) {
			$doc.unbind( 'mousemove', dragMovement )
				.unbind( 'mouseup', endDragMovement );
		}
		
		
		
		
		/* --------------------------------------------------------------------- */
		// Highlighting current item
		/* --------------------------------------------------------------------- */
		
		
		
		var $slides = $('#display').find('div[id]'),
			slidesLen = $('#display').find('div[id]').length;
			
		// put all the id'ed slides into data
		$slides.each( function(index) {

			//store left positions in data
			var offset = $(this).position().left;
			$.data(document, 'image' + index, offset);

		});
		
		
		function setActive() {
			
			// for adding class to current
			
			var scrollAmount = $canvasContainer.scrollLeft();
			var currentItem;
			var navLinks = $('.postlinks a');
			
			for	(i = 0; i < slidesLen - 1; i++ ) {
			
				var imageNow = $.data(document, 'image' + i) - ( $canvasContainer.width() - $slides.eq(i).outerWidth() ) / 2,
					imageNext = $.data(document, 'image' + (i+1) ) - ( $canvasContainer.width() - $slides.eq(i+1).outerWidth() ) / 2;
					
				if ( scrollAmount > imageNow && scrollAmount < imageNext ) {
					
					//if between current slide and the next one
					navLinks.removeClass('active').eq(i).addClass('active');
					currentItem = i;
					break;
				
				} else if ( scrollAmount > $.data(document, 'image' + (slidesLen-1) ) - ( $canvasContainer.width() - $slides.eq(slidesLen-1).outerWidth() ) / 2 ) {
					// its at the end
					navLinks.removeClass('active').eq( slidesLen-1 ).addClass('active');
					currentItem = slidesLen - 1;
					
				}
			}
			
			// set the nav text to the current text
			$('#current-text').text( navLinks.eq(currentItem).text() );
			
		}
		
		
		//this is just so I can throttle it, which for some reason I can only get working on events...
		$canvasContainer.bind('active', $.throttle( 300, setActive ) );
		
		// trigger off the bat on page load
		$canvasContainer.trigger('active');
		
	
		
	
		/* --------------------------------------------------------------------- */
		// CUSTOM SCROLLBAR HANLDERS
		/* --------------------------------------------------------------------- */
	
	
		// get the difference between the scroller size and the container size
		var scrollDiff = total / $scrollbarWidth;
	
		// if the content doesn't need a scrollbar or is on touch device, hide it
		if ( scrollDiff < 1 || isTouch ) {
			$scrollbar.hide();
		}

		$scrollhandle.mousedown( function(event) {
		
			scrollX = $canvasContainer.scrollLeft();
			startX = event.pageX;
		
			$doc.bind( 'mousemove', onScrollbarMove )
				.bind( 'mouseup', onScrollbarRelease );

			return false;
		
		});
	
		function onScrollbarMove(event) {
			// move canvas opposite the drag direction
		
			var endX = event.pageX,
				// multiply by the difference. 1px of scroller is many px of container
				scrollAmount =	scrollX + -( (startX - endX) * scrollDiff );

			$canvasContainer.scrollLeft( scrollAmount );
		
		}
	
		function onScrollbarRelease() {
			$doc.unbind( 'mousemove', onScrollbarMove )
				.unbind( 'mouseup', onScrollbarRelease );
		}



	
		function moveScrollbar() {
		
			var scrollBarLeft = ( $canvasContainer.scrollLeft() / total ) * ( $scrollbarWidth - $scrollhandleWidth ) +
								( ( $canvasContainer.scrollLeft() / total ) * $scrollhandleWidth );
		
			if (scrollBarLeft < 0) {
				scrollBarLeft = 0;
			} else if (scrollBarLeft > ( $scrollbarWidth - $scrollhandleWidth ) )  {
				scrollBarLeft = $scrollbarWidth - $scrollhandleWidth;
			}
		
			$scrollhandle.css({
				'left': scrollBarLeft
			});
			
			// figure out the currently active
			$canvasContainer.trigger('active');
		
		}
	
		// Fires when scrollLeft() is used
		$canvasContainer.bind('scroll', function(event) {
			// update scrollbar position
			moveScrollbar();
			
			// gets messed up when using scrollto
			//$canvasContainer.trigger('active')
			
		});
	
	
		// prevents selecting text/images while dragging the scrollbar
		// affects webkit and IE
		document.getElementById('canvas-container').onselectstart = function() {
		  return false;
		};
	
		/* --------------------------------------------------------------------- */
		// END CUSTOM SCROLLBAR
		/* --------------------------------------------------------------------- */

	}

	$(".postlinks a:first").css("background", "none");
	$(".fi-item:last").css("background", "none");

	return false;

});

