////////////////////////////////////////////////////////////
// Copyright (C) 2005-2008 彩程数字科技.
// All rights reserved.
// 项目名称   	    ccwlistscroll Jquery Plugin
// 版本说明         V1.0.0
// 开发者           刘思远
// 创建时间	        2008.11.25
// 修改记录         
// 文件名称	        jquery.ccwscrolllist.js
// 文件描述         
// 其他
////////////////////////////////////////////////////////////

(function( $ ) {
    
    $.fn.ccwscrolllist = function() {
        
        /*******************************
         *  installation of ccwscroll
         *******************************/
        if ( arguments.length < 1 || typeof( arguments[ 0 ] ) == "object") {
        
            // override the default arguments
            var settings = $.extend( {}, $.fn.ccwscrolllist.defaults, arguments[ 0 ] );
            
            this.each( function() {
                
                var container = $( this ).css({ overflow: "hidden" });
                var content = container.find( ":first" )
                    .css({
                        marginTop: 0,
                        marginLeft: 0
                    });
                var minMargin = 0;
                
                if ( settings.direction == "vertical" ) {
                    container.height( settings.size );
                    minMargin = container.innerHeight() - content.outerHeight( true );
                    container.data( "contentMargin", parseInt( content.css( "margin-top" )));
                } else if ( settings.direction == "horizontal" ) {
                    container.width( settings.size );
                    minMargin = container.innerWidth() - content.outerWidth( true );
                    container.data( "contentMargin", parseInt( content.css( "margin-left" )));
                }
                
                minMargin = minMargin > 0 ? 0 : minMargin;
                
                // cache the data
                container.data( "settings", settings );
                container.data( "minMargin", minMargin );
                
            });
        
        
        /*******************************
         *  api of ccwscroll
         *******************************/ 
        } else if ( typeof( arguments[ 0 ] ) == "string") {
            
            if ( arguments[0] == "scroll" ) {
                
                var scrollOffset = parseInt(arguments[1]);
                
                if ( isNaN( scrollOffset ) || scrollOffset == 0 ) {
                    return;
                }
                
                this.each( function() {
                    
                    var container = $( this );
                    var settings = container.data( "settings" );
                    var contentMargin = container.data( "contentMargin" );
                    var minMargin = container.data( "minMargin" );
                    var toMargin = contentMargin - scrollOffset;
                    toMargin = toMargin > 0 ? 0 : toMargin;
                    toMargin = toMargin < minMargin ? minMargin : toMargin;
                    
                    if ( contentMargin == toMargin ) {
                        return;
                    }
                    
                    if ( settings.direction == "vertical" ) {
                        container.find( ":first" )
                            .animate({ marginTop: toMargin }, {
                                duration: settings.scrollSpeed,
                                complete: function() {
                                    container.trigger( "afterScroll" );
                                }
                            });
                    } else if ( settings.direction == "horizontal" ) {
                        container.find( ":first" )
                            .animate({ marginLeft: toMargin }, {
                                duration: settings.scrollSpeed,
                                complete: function() {
                                    container.trigger( "afterScroll" );
                                }
                            } );
                    }
                    
                    // cache the margin
                    container.data( "contentMargin", toMargin );
                    
                });
                
            } else if ( arguments[0] == "refresh" ) {
                
                this.each( function() {
                    
                    var container = $( this );
                    var content = container.find( ":first" ).css({
                        marginTop: 0,
                        marginLeft: 0
                    });
                    var settings = container.data( "settings" );
                    
                    if ( settings.direction == "vertical" ) {
                        minMargin = container.innerHeight() - content.outerHeight( true );
                        container.data( "contentMargin", parseInt( content.css( "margin-top" )));
                    } else if ( settings.direction == "horizontal" ) {
                        minMargin = container.innerWidth() - content.outerWidth( true );
                        container.data( "contentMargin", parseInt( content.css( "margin-left" )));
                    }
                    
                    minMargin = minMargin > 0 ? 0 : minMargin;
                    container.data( "minMargin", minMargin );
                    
                });
                
            }
        }
        
        return this;
    };
    
    
    // the default arguments of ccwscroll
    // which can be overridden outside this plugin
    $.fn.ccwscrolllist.defaults = {
        direction: "vertical", // or horizontal
        size: 150,
        scrollSpeed: "slow"
    };
    
})( jQuery );
