/*
* scrollingCarousel 1.5 - jQuery plugin
* Written by Adam Lafene
*
* Copyright (c) 2010 Adam Lafene - www.convergent-evolution.co.uk
*
* Licensed under the terms of the MIT and GPL licenses:
*   http://www.opensource.org/licenses/mit-license.php
*   http://www.gnu.org/licenses/gpl.html
*/

(function($){$.fn.scrollingCarousel=function(options){var method;var defaults={scrollerOffset:0,scrollSpeed:'medium',looped:true,method:(options=='pause')?'pause':((options=='play')?'play':((options=='remove')?'remove':''))};options=$.extend(defaults,options);return this.each(function(i){var scrollerInterval;var cursorPosition;var scrollerContent;var scrollSwitch=0;var scrollerPosition;var sMultiplier;var scrollerChildren;var offSetDistance;var scrollDistance;var centerPoint;obj=$(this);switch(options.method){case'pause':stopCarousel();obj.unbind('mouseenter');return;case'play':$('html').mousemove(function(e){var cursor={x:0,y:0};if(e.pageX||e.pageY){cursor.x=e.pageX;cursor.y=e.pageY}else{var de=document.documentElement;var b=document.body;cursor.x=e.clientX+(de.scrollLeft||b.scrollLeft)-(de.clientLeft||0);cursor.y=e.clientY+(de.scrollTop||b.scrollTop)-(de.clientTop||0)}cursorPosition=cursor;if(cursorPosition.x>=obj.offset().left&&cursorPosition.x<=(obj.offset().left+obj[0].offsetWidth)&&cursorPosition.y>=obj.offset().top&&cursorPosition.y<=(obj.offset().top+obj[0].offsetHeight)){startCarousel();obj.mouseenter(function(){startCarousel()})}else{obj.mouseenter(function(){startCarousel()})}$(this).unbind('mousemove')});return;case'remove':obj.children(':eq(1)').remove();if($('div.sc_scrollContent')[0]){obj[0].innerHTML=$('div.sc_scrollContent')[0].innerHTML;obj.children().each(function(){$(this,obj)[0].style.cssFloat='';$(this,obj)[0].style.position=''})}else{obj.find('li').each(function(){$(this,obj)[0].style.cssFloat='';$(this,obj)[0].style.position=''})}obj.children()[0].style.position='';obj.children()[0].style.top='';obj.children()[0].style.width='';obj[0].style.paddingLeft='';obj[0].style.paddingRight='';obj[0].style.overflow='';obj[0].style.position='';obj[0].style.height='';obj.unbind();return}var scrollContainer=obj[0];scrollContainer.style.paddingLeft='0';scrollContainer.style.paddingRight='0';var scrollContainerWidth=scrollContainer.offsetWidth;var childType=obj.children()[0].nodeName.toLowerCase();switch(options.scrollSpeed){case'slow':sMultiplier=1;break;case'medium':sMultiplier=2;break;case'fast':sMultiplier=4}switch(childType){case'div':scrollContainer.innerHTML='<div class="sc_scrollContent">'+obj[0].innerHTML+'</div>';scrollContainer.innerHTML+=scrollContainer.innerHTML;scrollerContent=obj.find('div.sc_scrollContent');scrollerChildren=obj.find('div.sc_scrollContent:first').find('div');break;case'ul':scrollContainer.innerHTML+=scrollContainer.innerHTML;scrollerContent=obj.find('ul');scrollerChildren=obj.find('ul:first').find('li');break;case'ol':scrollContainer.innerHTML+=scrollContainer.innerHTML;scrollerContent=obj.find('ol');scrollerChildren=obj.find('ol:first').find('li');break;default:alert('unable to initialise scroller - please ensure contents are either in a UL, an OL or in DIVs');return}var scrollContentWidth=0;var scrollerHeight=0;var itemPadding;var itemMargin;$(scrollerChildren).each(function(i){scrollContentWidth+=$(this,obj)[0].offsetWidth+parseInt($(this,obj).css('marginLeft'))+parseInt($(this,obj).css('marginRight'));if($(this,obj)[0].offsetHeight>scrollerHeight){scrollerHeight=$(this,obj)[0].offsetHeight}});if(scrollContentWidth>obj[0].offsetWidth){var offSetPoint=Math.round((scrollContentWidth/100)*options.scrollerOffset);offSetDistance=offSetPoint-(Math.round(scrollContainerWidth/2));if(offSetDistance>(scrollContentWidth-scrollContainerWidth)){offSetDistance=scrollContentWidth-scrollContainerWidth}}else{$(scrollerContent[1]).remove();return}scrollContainer.style.overflow='hidden';scrollContainer.style.position='relative';scrollContainer.style.height=scrollerHeight+'px';var itemPadding;scrollerContent.each(function(){$(this,obj)[0].style.position='absolute';$(this,obj)[0].style.top='0';$(this,obj)[0].style.width=scrollContentWidth+'px';$(this).children().each(function(i){$(this,obj)[0].style.cssFloat='left';$(this,obj)[0].style.position='static'})});scrollerContent[0].style.left=(offSetDistance>0)?'-'+offSetDistance+'px':'0';if(options.looped==true){scrollerContent[1].style.left=scrollerContent[0].offsetLeft-scrollContentWidth+'px'}else{scrollerContent[1].style.display='none';scrollerContent[1].style.top='-1000px'}obj.mouseenter(function(){startCarousel()});obj.mouseleave(function(){stopCarousel(true)});obj.mousemove(function(e){var cursor={x:0,y:0};if(e.pageX||e.pageY){cursor.x=e.pageX;cursor.y=e.pageY}else{var de=document.documentElement;var b=document.body;cursor.x=e.clientX+((de.scrollLeft||b.scrollLeft)-(de.clientLeft||0));cursor.y=e.clientY+((de.scrollTop||b.scrollTop)-(de.clientTop||0))}cursorPosition=cursor});startCarousel=function(){centerPoint=Math.round($(scrollContainer).offset().left+(scrollContainer.offsetWidth/2));scrollerPosition=scrollerPosition?scrollerPosition:parseInt(scrollerContent[0].style.left);scrollerInterval=setInterval(function(){var cursorDistance;var cursor=cursorPosition.x;var halfContainer=scrollContainerWidth/2;if(cursor<centerPoint){cursorDistance=centerPoint-cursor;scrollDistance=(cursorDistance<(Math.ceil((halfContainer/100)*30)))?1:((cursorDistance<(Math.ceil((halfContainer/100)*50)))?2*sMultiplier:((cursorDistance<(Math.ceil((halfContainer/100)*70)))?3*sMultiplier:((cursorDistance<(Math.ceil((halfContainer/100)*90)))?4*sMultiplier:6*sMultiplier)));if((scrollerPosition+scrollDistance)>0&&options.looped==false){scrollerPosition=0}else if((scrollerPosition+scrollDistance)>scrollContentWidth){scrollerPosition=0;scrollSwitch=(scrollSwitch==0)?1:0}else{scrollerPosition=scrollerPosition+scrollDistance}}else if(cursor>centerPoint){cursorDistance=cursor-centerPoint;scrollDistance=(cursorDistance<(Math.ceil((halfContainer/100)*30)))?1:((cursorDistance<(Math.ceil((halfContainer/100)*50)))?2*sMultiplier:((cursorDistance<(Math.ceil((halfContainer/100)*70)))?3*sMultiplier:((cursorDistance<(Math.ceil((halfContainer/100)*90)))?4*sMultiplier:6*sMultiplier)));if((scrollerPosition-scrollDistance)<(0-(scrollContentWidth-scrollContainerWidth))){if(options.looped==false){scrollerPosition=(0-(scrollContentWidth-scrollContainerWidth))}else{scrollerPosition=scrollContainerWidth;scrollSwitch=(scrollSwitch==0)?1:0}}else{scrollerPosition=scrollerPosition-scrollDistance}}scrollerContent[scrollSwitch].style.left=scrollerPosition+'px';scrollerContent[(scrollSwitch==0)?1:0].style.left=scrollerPosition-scrollContentWidth+'px'},40)};stopCarousel=(function(easing){if(!scrollerInterval)return;clearInterval(scrollerInterval);scrollerInterval=0;if(!easing||options.looped==false){return}var ivl=setInterval(function(){if(scrollDistance>1){if(cursorPosition.x<centerPoint){scrollerContent[0].style.left=(scrollerContent[0].offsetLeft+scrollDistance)+'px';scrollerContent[1].style.left=(scrollerContent[1].offsetLeft+scrollDistance)+'px';scrollerPosition+=scrollDistance}else{scrollerContent[0].style.left=(scrollerContent[0].offsetLeft-scrollDistance)+'px';scrollerContent[1].style.left=(scrollerContent[1].offsetLeft-scrollDistance)+'px';scrollerPosition-=scrollDistance}scrollDistance--}else{clearInterval(ivl)}},50)})})}})(jQuery);
