(function( $ ){

  $.fn.slide = function( method ) {

    var settings = {
      'wrapper_id'         : 'slide_wrapper',
      'wrapper_class'         : 'slide_wrapper',
      'width' : '950px',
      'test': '',
      'arrow_color' : '#efefef',
      'left_arrow' : '/images/left_arrow.gif',
      'right_arrow': '/images/right_arrow.gif'
      
    };
    
    
    var methods = {
        init : function( options ) {
            /**
             *wrapp the element and build the sliders around it
             **/
            methods.log('this:' + $(this).children());
            var elements = $(this).children('li').length;
            var element_width = $(this).children('li').width() 
            var padding = parseInt($(this).children('li').css('padding-left')) + parseInt($(this).children('li').css('padding-right')) + parseInt($(this).children('li').css('margin-left')) + parseInt($(this).children('li').css('margin-right'))
            var list_width = (element_width + padding) * elements
            
            
            var vertical_padding = parseInt($(this).children('li').css('padding-top')) + parseInt($(this).children('li').css('padding-bottom')) + parseInt($(this).children('li').css('margin-top')) + parseInt($(this).children('li').css('margin-bottom'))
            var element_height = $(this).children('li').height()
            var slide_padding = element_height / 2
            
            methods.log('elements: ' + elements);
            methods.log('element width: ' + element_width);
            var container_width = parseInt(settings.width) - 84
            var container_height = parseInt($(this).children('li').css('padding-top')) + parseInt($(this).children('li').css('padding-bottom')) + parseInt($(this).children('li').css('margin-top')) + parseInt($(this).children('li').css('margin-bottom')) + $(this).children('li').height()
            
            /*var wrapper = $('<div>').attr('id',settings.wrapper_id).css({
                'width':settings.width + (vertical_padding * 2) ,
                'overflow': 'hidden',
                'float':'left'
                
            }).addClass(settings.wrapper_class).append($('<div>').attr('id','slide_container').css({'float' :'left','width':container_width,'height':container_height,'overflow':'hidden','position':'relative'}));
            
            $(this).wrap( wrapper ).css({'float':'left','padding':0,'margin':0,'width' : list_width + 'px','position':'absolute','left':'0px','top':'0px'})
            */
            if(settings.left_arrow != null){
              $('<img>').attr({'id':'slide_right','src':settings.right_arrow}).css({'float' : 'left'}).appendTo($('#'+settings.wrapper_id)).appendTo($('#'+settings.wrapper_id))
              
              $('<img>').attr({'id':'slide_left','src':settings.left_arrow}).css({'float' : 'left'}).appendTo($('#'+settings.wrapper_id)).prependTo($('#'+settings.wrapper_id))
            }else{
              $('<div>').attr('id','slide_right').css({
                'display': 'block',
                'background':'tansparent',
                'width': '0px',
                'height': '0px',
                'overflow': 'hidden',
                'border-top': slide_padding+'px dotted transparent',
                'border-right': '0px dotted transparent',
                'border-bottom': slide_padding+'px dotted transparent',
                'border-left': '20px solid '+settings.arrow_color,
                'float':'left',
                'margin': (vertical_padding / 2) + 'px'
              }).appendTo($('#'+settings.wrapper_id))
              $('<div>').attr('id','slide_left').css({
                  'display': 'block',
                  'width': '0px',
                  'height': '0px',
                  'overflow': 'hidden',
                  'border-top': slide_padding+'px dotted transparent',
                  'border-right': '20px solid ' +settings.arrow_color,
                  'border-bottom': slide_padding+'px dotted transparent',
                  'border-left': '0px solid transparent',
                  'float':'left',
                  'margin': (vertical_padding / 2) + 'px'
              }).prependTo($('#'+settings.wrapper_id))
            }
            
            methods.log('list_width:'  + list_width);
            $this = $(this)
            
            settings.speed = ( list_width / 200) * 1000
            
            $('#slide_right').mouseenter(
                function(){                  
                  methods.move_left($this,list_width)
                }
                
            )
            $('#slide_right').mouseleave(                
                function(){
                  $this.stop()
                }                
            )            
            
            $('#slide_left').mouseenter(
                function(){                  
                  methods.move_right($this,list_width)
                }                
            )
            $('#slide_left').mouseleave(
                function(){
                  $this.stop()
                }             
            )
            
        },
        
        log : function(m){
            try{
                console.log(m)
            }catch(e){}            
        },
        move_left : function($this,container_width ) {
          var l =  container_width - $('#slide_container').width();
          $($this).animate({left: '-' + l + 'px'},settings.speed,'linear',function(){
            methods.log('left done')
          })
        },
        move_right : function($this,container_width ) {          
          var left = Math.abs(parseInt($($this).css('left')))          
          $($this).animate({left: '0px'},(left*10),'linear',function(){
            methods.log('right done')
          })
        },
        update : function( content ) {  }
    };

    return this.each(function() {
      // If options exist, lets merge them
      // with our default settings
      /*if ( options ) { 
        $.extend( settings, options );
      }*/
        
      // plugin code here
      if ( methods[method] ) {
        return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
      } else if ( typeof method === 'object' || ! method ) {
        
        //return methods.init.apply( this, Array.prototype.slice.call( arguments, 1 ));
        return methods.init.apply( this, arguments );
      } else {
        method.log('Method ' +  method + ' does not exist on jQuery.slide')
        $.error( 'Method ' +  method + ' does not exist on jQuery.slide' );
      }    
    });

  };
})( jQuery );
