(function(a){a.fn.hoverscroll=function(b){if(!b){b={}}b=a.extend({},a.fn.hoverscroll.params,b);this.each(function(){function q(){if(e[0].isChanging==false){return}n();var a;if(!b.vertical){a="scrollLeft"}else{a="scrollTop"}d[0][a]+=e[0].direction*e[0].speed;e[0].timer=setTimeout(function(){q()},50)}function p(){if(e[0].isChanging){if(b.debug){a.log("[HoverScroll] Stoped moving")}e[0].isChanging=false;e[0].direction=0;e[0].speed=1;clearTimeout(e[0].timer)}}function o(c,d){if(e[0].direction!=c){if(b.debug){a.log("[HoverScroll] Starting to move. direction: "+c+", speed: "+d)}p();e[0].direction=c;e[0].isChanging=true;q()}if(e[0].speed!=d){if(b.debug){a.log("[HoverScroll] Changed speed: "+d)}e[0].speed=d}}function n(){if(!b.arrows||b.fixedArrows){return}var c;var f;if(!b.vertical){c=d[0].scrollWidth-d.width();f=d[0].scrollLeft}else{c=d[0].scrollHeight-d.height();f=d[0].scrollTop}var g=f/c;var h=b.arrowsOpacity;if(isNaN(g)){g=0}var i=false;if(g<=0){a("div.arrow.left, div.arrow.top",e).hide();i=true}if(g>=h||c<=0){a("div.arrow.right, div.arrow.bottom",e).hide();i=true}if(!i){a("div.arrow.left, div.arrow.top",e).show().css("opacity",g>h?h:g);a("div.arrow.right, div.arrow.bottom",e).show().css("opacity",1-g>h?h:1-g)}}function m(a,c){a=a-e.offset().left;c=c-e.offset().top;var d;if(!b.vertical){d=a}else{d=c}for(i in l){if(d>=l[i].from&&d<l[i].to){if(l[i].action=="move"){o(l[i].direction,l[i].speed)}else{p()}}}}var c=a(this);if(b.debug){a.log("[HoverScroll] Trying to create hoverscroll on element "+this.tagName+"#"+this.id)}if(b.fixedArrows){c.wrap('<div class="fixed-listcontainer"></div>')}else{c.wrap('<div class="listcontainer"></div>')}c.addClass("list");var d=c.parent();d.wrap('<div class="ui-widget-content hoverscroll"></div>');var e=d.parent();var f,g,h,j;if(b.arrows){if(!b.vertical){if(b.fixedArrows){f='<div class="fixed-arrow left"></div>';g='<div class="fixed-arrow right"></div>';d.before(f).after(g)}else{f='<div class="arrow left"></div>';g='<div class="arrow right"></div>';d.append(f).append(g)}}else{if(b.fixedArrows){h='<div class="fixed-arrow top"></div>';j='<div class="fixed-arrow bottom"></div>';d.before(h).after(j)}else{h='<div class="arrow top"></div>';j='<div class="arrow bottom"></div>';d.append(h).append(j)}}}e.width(b.width).height(b.height);if(b.arrows&&b.fixedArrows){if(b.vertical){h=d.prev();j=d.next();d.width(b.width).height(b.height-(h.height()+j.height()))}else{f=d.prev();g=d.next();d.height(b.height).width(b.width-(f.width()+g.width()))}}else{d.width(b.width).height(b.height)}var k=0;if(!b.vertical){e.addClass("horizontal");c.children().each(function(){a(this).addClass("item");if(a(this).outerWidth){k+=a(this).outerWidth(true)}else{k+=a(this).width()+parseInt(a(this).css("padding-left"))+parseInt(a(this).css("padding-right"))+parseInt(a(this).css("margin-left"))+parseInt(a(this).css("margin-right"))}});c.width(k);if(b.debug){a.log("[HoverScroll] Computed content width : "+k+"px")}if(e.outerWidth){k=e.outerWidth()}else{k=e.width()+parseInt(e.css("padding-left"))+parseInt(e.css("padding-right"))+parseInt(e.css("margin-left"))+parseInt(e.css("margin-right"))}if(b.debug){a.log("[HoverScroll] Computed container width : "+k+"px")}}else{e.addClass("vertical");c.children().each(function(){a(this).addClass("item");if(a(this).outerHeight){k+=a(this).outerHeight(true)}else{k+=a(this).height()+parseInt(a(this).css("padding-top"))+parseInt(a(this).css("padding-bottom"))+parseInt(a(this).css("margin-bottom"))+parseInt(a(this).css("margin-bottom"))}});c.height(k);if(b.debug){a.log("[HoverScroll] Computed content height : "+k+"px")}if(e.outerHeight){k=e.outerHeight()}else{k=e.height()+parseInt(e.css("padding-top"))+parseInt(e.css("padding-bottom"))+parseInt(e.css("margin-top"))+parseInt(e.css("margin-bottom"))}if(b.debug){a.log("[HoverScroll] Computed container height : "+k+"px")}}var l={1:{action:"move",from:0,to:.06*k,direction:-1,speed:16},2:{action:"move",from:.06*k,to:.15*k,direction:-1,speed:8},3:{action:"move",from:.15*k,to:.25*k,direction:-1,speed:4},4:{action:"move",from:.25*k,to:.4*k,direction:-1,speed:2},5:{action:"stop",from:.4*k,to:.6*k},6:{action:"move",from:.6*k,to:.75*k,direction:1,speed:2},7:{action:"move",from:.75*k,to:.85*k,direction:1,speed:4},8:{action:"move",from:.85*k,to:.94*k,direction:1,speed:8},9:{action:"move",from:.94*k,to:k,direction:1,speed:16}};e[0].isChanging=false;e[0].direction=0;e[0].speed=1;e.mousemove(function(a){m(a.pageX,a.pageY)}).bind("mouseleave",function(){p()});this.startMoving=o;this.stopMoving=p;if(b.arrows&&!b.fixedArrows){n()}else{a(".arrowleft, .arrowright, .arrowtop, .arrowbottom",e).hide()}});return this};if(!a.fn.offset){a.fn.offset=function(){this.left=this.top=0;if(this[0]&&this[0].offsetParent){var a=this[0];do{this.left+=a.offsetLeft;this.top+=a.offsetTop}while(a=a.offsetParent)}return this}}a.fn.hoverscroll.params={vertical:false,width:400,height:50,arrows:true,arrowsOpacity:.7,fixedArrows:false,debug:false};a.log=function(){try{console.log.apply(console,arguments)}catch(a){try{opera.postError.apply(opera,arguments)}catch(a){}}}})(jQuery)
