/*
 * jQuery Slider 1.0
 * http://insms.net
 *
 * Copyright (c) 2009 insms.net
 * http://docs.jquery.com/License
 *
 * Date: 2009-12-23
 */

(function($){
 $.fn.a1slider = function(options) {
 
    var settings		= $.extend({}, $.fn.a1slider.defaults, options); 
    var opts        = $.extend({}, settings);
    var elem        = false;
    var ScollItem   = opts.startItem;
    var clickable   = 1;
    var scrollPos   = {};
    
    return this.each(function(){
          elem            =  this;
          opts.width      = jQuery(elem).width();
          
          set_scrollPos(elem);
          _start();
    });
    
    function set_scrollPos($obj){
        scrollPos.left  = jQuery('div:first', $obj).offset().left == jQuery($obj).offset().left;
        scrollPos.right = jQuery('div:last', $obj).offset().left+ jQuery('div:last', $obj).width() == jQuery($obj).offset().left+ jQuery($obj).width();
        scrollPos.scroll= !scrollPos.left && !scrollPos.right;
        
        //alert((jQuery('div:first', elem).offset().left)+' '+(jQuery(elem).offset().left));
        //alert((jQuery('div:last', elem).offset().left+ jQuery('div:last', elem).width())+' '+(jQuery(elem).offset().left+ jQuery(elem).width()));
    }

    
    function _start(){
      jQuery('div:first', elem).width(jQuery(opts.pageItem, elem).length * jQuery(opts.pageItem, elem).eq(0).width());
      
      if(opts.hoverIcons){
        jQuery(''+opts.btnNext+', '+opts.btnBack+'')
          .css('position', 'absolute')
          .hover(function(){ tt = 0 }, function(){ tt = 1 });
        
         jQuery(opts.btnNext)
            .css('left', jQuery(elem).offset().left+jQuery(elem).width()-(jQuery(opts.btnNext).height()/2))
            .css('top', jQuery(elem).offset().top+((jQuery(elem).height()/2)-(jQuery(opts.btnNext).height()/2)));
         
         if(jQuery(opts.pageItem, elem).length > opts.step)
         if(scrollPos.left || scrollPos.scroll) jQuery(opts.btnNext).fadeIn();
          
         jQuery(opts.btnBack)
            .css('left', jQuery(elem).offset().left-(jQuery(opts.btnBack).height()/2))
            .css('top', jQuery(elem).offset().top+((jQuery(elem).height()/2)-(jQuery(opts.btnBack).height()/2)));        
            
         if(jQuery(opts.pageItem, elem).length > opts.step)
         if(scrollPos.right || scrollPos.scroll) jQuery(opts.btnBack).fadeIn();
      }
      
      if(opts.startItem != 0) _scrollTo(opts.startItem);
      
      $navigManual = '<table><tr>';
      jQuery(opts.pageItem, elem).each(function(i){
          $navigManual += '<td><div class="png sliderNavigMan sliderNavigManual'+(i == ScollItem ? 'Activ' : 'Base')+'" rel="'+i+'"></div></td>';
      });
      $navigManual += '</tr></table>';
      jQuery('#sliderNavigManual').html($navigManual);
      
      jQuery('.sliderNavigMan').each(function(i){
        jQuery(this).click(function(){
          $val = jQuery(this).attr('rel');
          _scrollTo($val);
        });
      });
    
      jQuery(opts.btnNext).mouseover(function(){
        jQuery(this).removeClass(opts.btnNext.replace(/[.#]/, '')).addClass(opts.btnNext.replace(/[.#]/, '')+'Hover');
      }).mouseout(function(){
        jQuery(this).removeClass(opts.btnNext.replace(/[.#]/, '')+'Hover').addClass(opts.btnNext.replace(/[.#]/, ''));
      }).click(function(){ if(clickable)_scrollNext() });
      
      jQuery(opts.btnBack).mouseover(function(){
        jQuery(this).removeClass(opts.btnBack.replace(/[.#]/, '')).addClass(opts.btnBack.replace(/[.#]/, '')+'Hover');
      }).mouseout(function(){
        jQuery(this).removeClass(opts.btnBack.replace(/[.#]/, '')+'Hover').addClass(opts.btnBack.replace(/[.#]/, ''));
      }).click(function(){ if(clickable)_scrollBack() });
    }
    function _scrollNext(){
      ScollItem = parseInt(ScollItem);
      if(ScollItem+1 > jQuery(opts.pageItem, elem).length-1) ScollItem = 0;
      else                                                   ScollItem += 1;  
      
      _scrollTo(ScollItem, ScollItem-1);
    }
    function _scrollBack(){
      ScollItem = parseInt(ScollItem);
      if(ScollItem-1 < 0) ScollItem = jQuery(opts.pageItem, elem).length-1;
      else                ScollItem -= 1;  

      _scrollTo(ScollItem, ScollItem+1);
    }
    function _scrollTo($page, $o_page){
    //alert($page+' '+$o_page+ ' '+ScollItem);
      //if($o_page||$page == ScollItem) return;
      $scroll = jQuery(opts.pageItem, elem).eq($page).offset().left - 
                 jQuery('div:first', elem).offset().left;
       
      clickable = 0; 
      jQuery(elem).animate({scrollLeft:$scroll*opts.step}, opts.speed, function(){
        
        if(opts.hoverIcons){
            set_scrollPos(elem);
            jQuery(opts.btnBack+','+opts.btnNext).blur();
        
            if(scrollPos.left){
                    jQuery(opts.btnBack+'Hover').removeClass(opts.btnBack.replace(/[.#]/, '')+'Hover').addClass(opts.btnBack.replace(/[.#]/, ''));
                    jQuery(opts.btnBack).fadeOut();
            }else   jQuery(opts.btnBack).fadeIn();    
            
            if(scrollPos.right){
                    jQuery(opts.btnNext+'Hover').removeClass(opts.btnNext.replace(/[.#]/, '')+'Hover').addClass(opts.btnNext.replace(/[.#]/, ''));
                    jQuery(opts.btnNext).fadeOut();
            }else   jQuery(opts.btnNext).fadeIn();    
        }
        
        clickable = 1;
      });
      
      
      jQuery('.sliderNavigManualActiv').removeClass('sliderNavigManualActiv').addClass('sliderNavigManualBase');
      jQuery('.sliderNavigManualBase').eq($page).removeClass('sliderNavigManualBase').addClass('sliderNavigManualActiv');
      ScollItem = $page;
    }
 };
 
 $.fn.a1slider.defaults = {
    		pageItem    : '.sliderItem',
        btnNext     : '.sliderNavigRight',
        btnBack     : '.sliderNavigLeft',
        navigManual : '#sliderNavigManual',
        speed       : 600,
        startItem   : 0,
        hoverIcons  : false,
        step        : 1
 };
  
})(jQuery);

