
/**
 * Scroll Me
 *
 * Copyright (c) 2008 Cyberstudio
 * Licensed under the MIT license.
 *
 */
( function( $ ) {

$.fn.scrollme = function( o ) {
    
    return this.each( function () {
        o.smId =            this;
    	o.containter =      o.containter ? o.containter : '#scrollMeContainter';
    	o.up =              o.up ? o.up : '#scrollMeUp';
    	o.down =            o.down ? o.down : '#scrollMeDown';
    	o.stepSize =        o.stepSize ? o.stepSize : 100;
    	o.stepDelay =       o.stepDelay ? o.stepDelay : 250;
    	o.containterH =     o.containterH ? o.containterH : null;
    	o.containterW =     o.containterW ? o.containterW : null;
    	
    	if( !o.containterH ) {
    	    o.horizontal = true;
    	} else {
    	    o.horizontal = false;
    	}
    	
        $( o.containter ).css( 'overflow', 'hidden' );
        $( o.containter ).css( 'position', 'relative' );
        
        if( o.horizontal ) {
            $( o.smId ).css( 'margin-left', 0 );
            var fc = $( o.smId ).children().get( 0 );
            var cw = parseInt( $( fc ).width() ) + parseInt( $( fc ).css( 'margin-left' ).split( 'px' )[0] ) + parseInt( $( fc ).css( 'margin-right' ).split( 'px' )[0] );
            var sch = parseInt( cw * $( o.smId ).children().size() );
            $( o.smId ).width( sch );
            $( o.containter ).css( 'width', o.containterW );
            var maxm = parseInt( sch - o.containterW );
            if( sch <= o.containterW ) {
                $( o.down ).addClass( 'disabled' );
            }
        } else {
            $( o.smId ).css( 'margin-top', 0 );
            var sch = $( o.smId ).height();
            $( o.containter ).css( 'height', o.containterH );
            var maxm = parseInt( sch - o.containterH );
            if( sch <= o.containterH ) {
                $( o.down ).addClass( 'disabled' );
            }
        }
        
        $( o.smId ).css( 'z-index', 1 );
        
        var step = parseInt( o.stepSize );
        
        var iprev = null;
        var inext = null;
        
        $( o.up ).addClass( 'disabled' );
        
        $( o.up ).mouseup( function( e ) {
            clearInterval( iprev );
        } )
        .mousedown( function( e ) {
            iprev = setInterval( function () {
                if( o.horizontal ) {
                    var m = parseInt( $( o.smId ).css( 'margin-left' ).split( 'px' )[0] );
                } else {
                    var m = parseInt( $( o.smId ).css( 'margin-top' ).split( 'px' )[0] );
                }
                
                if( ( m + step ) <= 0 ) {
                    if( o.horizontal ) {
                        $( o.smId ).css( 'margin-left', ( m + step ) + 'px' );
                    } else {
                        $( o.smId ).css( 'margin-top', ( m + step ) + 'px' );
                    }
                    
                    if( $( o.down ).hasClass( 'disabled' ) ) {
                        $( o.down ).removeClass( 'disabled' );
                    }
                    
                    if( $( o.up ).hasClass( 'disabled' ) ) {
                        $( o.up ).removeClass( 'disabled' );
                    }
                }
                else if( m < 0 ) {
                    if( o.horizontal ) {
                        $( o.smId ).css( 'margin-left', '0px' );
                    } else {
                        $( o.smId ).css( 'margin-top', '0px' );
                    }
                    
                    if( $( o.down ).hasClass( 'disabled' ) ) {
                        $( o.down ).removeClass( 'disabled' );
                    }
                    
                    if( $( o.up ).hasClass( 'disabled' ) ) {
                        $( o.up ).removeClass( 'disabled' );
                    }
                }
                else {
                    if( $( o.up ).hasClass( 'disabled' ) != true ) {
                        $( o.up ).addClass( 'disabled' );
                    }
                }
            }, o.stepDelay );
        } )
        .click( function( e ) {
            e.preventDefault();
        } );
        
        $( o.down ).mouseup( function( e ) {
            clearInterval( inext );
        } )
        .mousedown( function( e ) {
            inext = setInterval( function () {
                if( o.horizontal ) {
                    var m = parseInt( $( o.smId ).css( 'margin-left' ).split( 'px' )[0] );
                } else {
                    var m = parseInt( $( o.smId ).css( 'margin-top' ).split( 'px' )[0] );
                }
                
                if( ( -( m - step ) ) <= maxm ) {
                    if( o.horizontal ) {
                        $( o.smId ).css( 'margin-left', ( m - step ) + 'px' );
                    } else {
                        $( o.smId ).css( 'margin-top', ( m - step ) + 'px' );
                    }
                    
                    if( $( o.up ).hasClass( 'disabled' ) ) {
                        $( o.up ).removeClass( 'disabled' );
                    }
                    
                    if( $( o.down ).hasClass( 'disabled' ) ) {
                        $( o.down ).removeClass( 'disabled' );
                    }
                }
                else if( ( maxm + m ) > 0 ) {
                    if( o.horizontal ) {
                        $( o.smId ).css( 'margin-left', ( -maxm ) + 'px' );
                    } else {
                        $( o.smId ).css( 'margin-top', ( -maxm ) + 'px' );
                    }
                    
                    if( $( o.up ).hasClass( 'disabled' ) ) {
                        $( o.up ).removeClass( 'disabled' );
                    }
                    
                    if( $( o.down ).hasClass( 'disabled' ) ) {
                        $( o.down ).removeClass( 'disabled' );
                    }
                }
                else {
                    if( $( o.down ).hasClass( 'disabled' ) != true ) {
                        $( o.down ).addClass( 'disabled' );
                    }
                }
            }, o.stepDelay );
        } )
        .click( function( e ) {
            e.preventDefault();
        } );
        
    } );
};

} )( jQuery );

