/**
* Scroller.js - v0.5
* Copyright 2011 signamo
* www.nogch.com
*
* *Required : jquery(1.4 or lator), jq.ext, jquery.easing, jquery.browser, jquery.moysewheel, Class
* 
* the iPhone UI style vertical/holizontal scroll field class. 
*
*/


var Sized=Class.extend({width:0,height:0,init:function(a,b){this.width=a;this.height=b}});var Scroller=Class.extend({$:null,$tar:null,$frame:null,$frameParent:null,$dragOverlay:null,$hit:null,sbV:null,sbH:null,siid:null,smooth:11,delta2pixel:300,fps:60,scrollX:0,scrollY:0,direction:"v",size:null,bubbles:true,deterrenceEventBubble:function(a){if(a.target){a.stopPropagation()}else{if(window.event.srcElement){window.event.cancelBubble=true}}},cursorChange:true,_enables:null,enables:function(a){if(typeof(a)=="undefined"){return _enables}if(a==this._enables){return this}if(this._enables=a){this.$hit.bind("mousedown",this.hMD_).bind("mouseup",this.doMUO_).bind("mousewheel",this.hMW_);if(this.cursorChange){this.$frame.css({cursor:this.direction==Scroller.DIR_HORIZONTAL?"col-resize":this.direction==Scroller.DIR_VERTICAL?"row-resize":"all-scroll"})}}else{this.$hit.unbind("mousedown",this.hMD_).unbind("mouseup",this.doMUO_).unbind("mousewheel",this.hMW_);if(this.cursorChange){this.$frame.css({cursor:"default"})}}return this},tarCssDef:null,init:function(a,b,c,f){this.$tar=a;this.size=b;if(typeof(c)!="undefined"){this.direction=c}if(typeof(f)!="undefined"){this.cursorChange=f}var e={width:this.$tar.width(),height:this.$tar.height()};var d=$('<div class="scrollFrame"></div>').css({position:"relative",width:this.size.width,height:this.size.height,overflow:"hidden"});this.$tar.wrap(d);this.$=this.$frame=this.$hit=this.$tar.parent();this.tarCssDef={position:this.$tar.css("position"),left:this.$tar.css("left"),top:this.$tar.css("top")};this.$tar.css({position:"absolute",left:0,top:0});this.$dragOverlay=$("<div>").css({position:"absolute",left:0,top:0,width:"100%",height:"100%",opacity:0,"background-color":"#0af","z-index":1000});this.sbV=new IScrollBar(this.$tar,this.$frame,IScrollBar.DIR_VERTICAL);this.sbH=new IScrollBar(this.$tar,this.$frame,IScrollBar.DIR_HORIZONTAL);this.hMD_=$.scope(this,function(g){if($.browser.msie&&$.browser.version<9&&$.browser.version>6){if(g.target.nodeName.toUpperCase()=="IMG"){alert()}}if(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}}this.$hit.bind("mousemove",this.hMM_);this.$hit.bind("mouseup",this.hMU_)});this.hMM_=$.scope(this,function(g){if(g){if(g.preventDefault){g.preventDefault()}else{g.returnValue=false}}this.$hit.trigger("mouseup");this.$hit.trigger("mouseout");this.$frame.append(this.$dragOverlay);this.drasgingFlg=true;this.$dragOverlay.data("p",{x:g.pageX,y:g.pageY});this.$dragOverlay.bind("mouseout",this.doMUO_);this.$dragOverlay.bind("mouseup",this.doMUO_);this.$dragOverlay.bind("mousemove",this.doMM_)});this.hMU_=$.scope(this,function(g){this.$hit.unbind("mousemove",this.hMM_);this.$hit.unbind("mouseup",this.hMU_)});this.doMM_=$.scope(this,function(i){if(i){if(i.preventDefault){i.preventDefault()}else{i.returnValue=false}}this.$dragOverlay.data("pp",this.$dragOverlay.data("p"));var g=this.$dragOverlay.data("pp"),h={x:i.pageX,y:i.pageY};this.scrollX=-(g.x-h.x);this.scrollY=-(g.y-h.y);this.$dragOverlay.data("p",h);this.startScrolling()});this.doMUO_=$.scope(this,function(g){this.deterrenceEventBubble(g);this.$dragOverlay.unbind("mousemove",this.doMM_);this.$dragOverlay.unbind("mouseout",this.doMUO_);this.$dragOverlay.unbind("mouseup",this.doMUO_);this.$dragOverlay.remove();if(this.siid==null){if(this.getEnableScrollH()){this.sbH.hide()}if(this.getEnableScrollV()){this.sbV.hide()}}this.drasgingFlg=false});this.hMW_=$.scope(this,function(g,h){h=h>2?2:h;h=h<-2?-2:h;this.scrollY=h*(this.delta2pixel/this.smooth);if(this.direction!=Scroller.DIR_BOTH){this.scrollX=this.scrollY}else{if(!this.getEnableScrollV()&&this.getEnableScrollH()){this.scrollX=this.scrollY;this.scrollY=0}}this.startScrolling()});this.enterframe_=$.scope(this,function(){var r=this.$tar.offset(),n=r.left,m=r.top,o=this.$tar.width(),g=this.$tar.height(),q=this.$frame.offset(),j=q.left,i=q.top,l=this.$frame.width(),t=this.$frame.height(),s=false,p=false,h=false;if(this.getEnableScrollH()){this.scrollX+=(0-this.scrollX)/this.smooth;this.$tar.css("left",n-j+this.scrollX);if(!this.drasgingFlg){if(n>j){this.scrollX=(j-n)/this.smooth;h=true}if(n<j-(o-l)){this.scrollX=(j+(-(o-l)-n)-1)/this.smooth;h=true}}if(Math.round(this.scrollX*10)==0){this.scrollX=0;if(this.direction==Scroller.DIR_BOTH){s=true}else{p=true}if(!this.drasgingFlg){this.sbH.hide()}}else{this.sbH.onScroll()}}else{s=true}if(this.getEnableScrollV()){this.scrollY+=(0-this.scrollY)/this.smooth;this.$tar.css("top",m-i+this.scrollY);if(!this.drasgingFlg){if(m>i){this.scrollY=(i-m)/this.smooth;h=true}if(m<i-(g-t)){this.scrollY=(i+(-(g-t)-m)-1)/this.smooth;h=true}}if(Math.round(this.scrollY*10)==0){this.scrollY=0;if(this.direction==Scroller.DIR_BOTH){if(s){p=true}}else{p=true}if(!this.drasgingFlg){this.sbV.hide()}}else{this.sbV.onScroll()}}var k={v:(i-m)/(g-t),h:(j-n)/(o-l)};this.$.trigger(Scroller.EVT_SCROLLING,[k]);if(h){this.$.trigger(Scroller.EVT_SCROLL_OVERFLOW,[k])}if(p&&!this.drasgingFlg){this.$.trigger(Scroller.EVT_SCROLL_END);this.stopScrolling()}});this.scroll_pastX=this.scrollX;this.scroll_pastY=this.scrollY;this.enables(true)},scroll_pastX:0,scroll_pastY:0,getEnableScrollV:function(){return this.direction!=Scroller.DIR_HORIZONTAL&&this.$tar.height()>this.$frame.height()?true:false},getEnableScrollH:function(){return this.direction!=Scroller.DIR_VERTICAL&&this.$tar.width()>this.$frame.width()?true:false},stopScrolling:function(){if(this.siid!=null){clearInterval(this.siid)}this.siid=null;return this},startScrolling:function(){if(this.direction==Scroller.DIR_BOTH){if(this.getEnableScrollH()&&this.getEnableScrollV()){this.sbH.twinsFlg=true;this.sbV.twinsFlg=true}}if(this.siid==null){this.siid=setInterval(this.enterframe_,1000/this.fps)}return this},hMD_:function(){},hMM_:function(){},doMM_:function(){},doMUO_:function(){},hMW_:function(){},enterframe_:function(){},resetSize:function(a){if(typeof(a)!="undefined"){this.size=a}this.$frame.css({width:this.size.width,height:this.size.height})},scroll0:function(){this.$tar.css({left:0,top:0})},unWrapFlg:false,unWrap:function(){this.stopScrolling();this.enables(false);this.$tar.css({position:this.tarCssDef.position,left:this.tarCssDef.left,top:this.tarCssDef.top});this.$frame.before(this.$tar);$("<div>").append(this.$frame);unWrapFlg=true},reWrap:function(a){if(!unWrapFlg){return}if(typeof a=="undefined"){a=true}if(a){this.$tar.css({position:"absolute",left:0,top:0})}this.$tar.before(this.$frame);this.$frame.find(".iScrollBar:first").before(this.$tar);this.enables(true);unWrapFlg=false},kill:function(){this.stopScrolling();this.enables(false)}});Scroller.DIR_HORIZONTAL="h";Scroller.DIR_VERTICAL="v";Scroller.DIR_BOTH="b";Scroller.EVT_SCROLLING="scrollerEvent_scroll";Scroller.EVT_SCROLL_END="scrollerEvent_end";Scroller.EVT_SCROLL_OVERFLOW="scrollerEvent_overflow";var IScrollBar=Class.extend({$:null,$tar:null,$frame:null,diameter:8,rad:null,margin:2,appAlpha:0.6,defAlpha:0,direction:"v",twinsFlg:false,init:function(b,d,e,c){this.$tar=b;this.$frame=d;this.direction=e;if(typeof(c)!="undefined"){this.diameter=c}if(this.rad==null){this.rad=this.diameter}this.$=$('<div class="iScrollBar"></div>').css({position:"absolute",width:this.diameter,height:this.diameter,"-moz-border-radius":this.rad,"-webkit-border-radius":this.rad,"border-radius":this.rad,opacity:this.defAlpha});var a=1;this.$frame.children().map(function(g,h){var f=$(h).css("z-index");f=f=="auto"?0:parseInt(f);a=Math.max(f,a)});this.$frame.append(this.$);this.$.css("z-index",a+1)},isShown:false,onScroll:function(){var e,c,f,p,g=this.margin,n=this.diameter,o=this.$tar.position(),k=o.left,i=o.top,l=this.$tar.width(),b=this.$tar.height(),h=this.$frame.width(),q=this.$frame.height(),j=this.twinsFlg?n:0,a=0;h-=j;q-=j;switch(this.direction){case IScrollBar.DIR_HORIZONTAL:if(k>0){l+=k;k=0}else{if(k<h-l){l+=(h-l)-k;k=(h-l)}}c=q-g-n+j;f=((h-g*2)*h)/l;p=n;if(f<n){f=n}e=g+(h-g*2-f)*k/(h-l);break;case IScrollBar.DIR_VERTICAL:if(i>0){b+=i;i=0}else{if(i<q-b){b+=(q-b)-i;i=(q-b)}}e=h-g-n+j;p=((q-g*2)*q)/b;f=n;if(p<n){p=n}c=g+(q-g*2-p)*i/(q-b);break}this.$.css({left:e,top:c,width:f,height:p});this.show()},reDraw:function(){this.$.css({width:this.diameter,height:this.diameter,"-moz-border-radius":this.rad,"-webkit-border-radius":this.rad,"border-radius":this.rad,opacity:this.defAlpha})},show:function(){this.$.css({opacity:this.appAlpha});this.isShown=true},hide:function(){if(!this.isShown){return}this.$.animate({opacity:this.defAlpha},{speed:170,easing:"linear",queue:false});this.isShown=false}});IScrollBar.DIR_HORIZONTAL="h";IScrollBar.DIR_VERTICAL="v";
