(function( $ ){
  var methods = {
     tm:null,
     t:0,
       
     init : function( options ) {
      var defaults = {
        effect: 'fade',
        timer: 5000
      };
      
      var options = $.extend(defaults, options);
      
      return this.each(function(){
        var o =options;
        var obj = $(this);
        var items = $(obj).find("> div");
        methods.t = o.timer; 
        
        $(obj).prepend('<div id="slide-controls"><p id="slide-nav"></p></div>');
        
        $(items).each(function(idx){
            $(this).addClass('jqbanner');
            $(this).attr('id','bn'+(idx));
            $("#slide-controls #slide-nav").append('<a class="a_bn'+idx+'" href="javascript:void(0)" onfocus="this.blur();" rel="'+idx+'" >'+(idx+1)+'</a>');
        });

        if($('.jqbanner').size()>1)
        {
            $("#slide-controls").show();      
            $("#slide-controls #slide-nav").prepend('<a href="javascript:void(0)" rel="prev" style="width: 7px; margin-right: 5px;"><img width="7" height="8" style="margin-top: 6px; display: inline;" src="../images/left.gif"></a>');
            $("#slide-controls #slide-nav").append('<a href="javascript:void(0)" rel="next" style="width: 7px; margin-left:5px;"><img width="7" height="8" style="margin-top: 6px; display: inline;" src="../images/right2.gif"></a>');
        } 
                
        $('.jqbanner:eq(0)').addClass('active_banner');
        if(o.effect == 'fade')
        {
          $('.jqbanner').hide();
          $(".active_banner").jqbanner('runfade');
          $('#slide-controls #slide-nav > a').jqbanner('selectfade');
        }
      });
     },

     runfade : function(){
      return this.each(function() {
        $('#slide-nav a.on').removeClass('on');
        $("#slide-nav a.a_"+$('.active_banner').attr('id')).addClass('on');
        $(this).fadeIn("slow",function(){

          var obj = $(this);
          methods.tm=window.setTimeout(function(){
            $(obj).fadeOut('show',function(){
              if($(this).hasClass('active_banner')){
                if($(this).attr('id') ==  'bn'+($(".jqbanner").size()-1)){
                  $('.active_banner').removeClass('active_banner');
                  $(".jqbanner:eq(0)").addClass('active_banner');
                }
                else $('.active_banner').removeClass('active_banner').next(".jqbanner").addClass('active_banner');
                $(".active_banner").jqbanner('runfade');          
              }            
            });
          },methods.t);
        });
      });
     },
     
     selectfade : function(){
      return this.each(function() {
        $(this).click(function(){
          var rel = $(this).attr('rel'); 
          
          if(isNaN(rel)){
            var bannersize = $(".jqbanner").size();
            
            if(rel == 'next'){
              if($('.active_banner').attr('id') == 'bn'+(bannersize-1)) var obj = $('.jqbanner:eq(0)');
              else var obj = $('.active_banner').next(".jqbanner");   
            }
            else{
              if($('.active_banner').attr('id') == 'bn0') var obj = $('#bn'+(bannersize-1));
              else  var obj = $('.active_banner').prev(".jqbanner");
            }
          }
          else{
            if( $(".active_banner").attr('id') != 'bn'+rel ) var obj = $("#bn"+rel);
            else return false;
          }
          window.clearTimeout(methods.tm);
          $(".jqbanner:animated").stop(true,true);
          $(".active_banner").stop(true,true).fadeOut('fast',function(){
            $(this).removeClass('active_banner');
            $(obj).addClass("active_banner").jqbanner('runfade');    
          });                        
        });
      });
    },
    
    timer:function(para){
      return this.each(function(){
        methods.t = para;      
      });
    }
  };
  
  

  $.fn.jqbanner = function( method ) {
    
    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, arguments );
    } else {
      $.error( 'Method ' +  method + ' does not exist on jQuery.jqbanner' );
    }    
  
  };

})( jQuery );
