// JavaScript Document
/*! Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 *
 * Version: 3.0.2
 * 
 * Requires: 1.2.2+
 */
/*
(function($) {

var types = ['DOMMouseScroll', 'mousewheel'];

$.event.special.mousewheel = {
  setup: function() {
    if ( this.addEventListener )
      for ( var i=types.length; i; )
        this.addEventListener( types[--i], handler, false );
    else
      this.onmousewheel = handler;
  },
  
  teardown: function() {
    if ( this.removeEventListener )
      for ( var i=types.length; i; )
        this.removeEventListener( types[--i], handler, false );
    else
      this.onmousewheel = null;
  }
};

$.fn.extend({
  mousewheel: function(fn) {
    return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel");
  },
  
  unmousewheel: function(fn) {
    return this.unbind("mousewheel", fn);
  }
});


function handler(event) {
  var args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true;
  
  event = $.event.fix(event || window.event);
  event.type = "mousewheel";
  
  if ( event.wheelDelta ) delta = event.wheelDelta/120;
  if ( event.detail     ) delta = -event.detail/3;
  
  // Add events and delta to the front of the arguments
  args.unshift(event, delta);

  return $.event.handle.apply(this, args);
}

})(jQuery);
*/

/**
 * @version    $Id:  $Revision
 * @package    jquery
 * @subpackage  lofslidernews
 * @copyright  Copyright (C) JAN 2010 LandOfCoder.com <@emai:landofcoder@gmail.com>. All rights reserved.
 * @website     http://landofcoder.com
 * @license    This plugin is dual-licensed under the GNU General Public License and the MIT License 
 */
// JavaScript Document
(function($) {
   $.fn.lofJSidernews = function( settings ) {
     return this.each(function() {
      // get instance of the lofSiderNew.
      new  $.lofSidernews( this, settings ); 
    });
    }
   $.lofSidernews = function( obj, settings ){
    this.settings = {
      direction        : '',
      mainItemSelector    : 'li',
      navInnerSelector  : 'ul',
      navSelector      : 'li' ,
      navigatorEvent    : 'click',
      wapperSelector:   '.lof-main-wapper',
      interval         : 4000,
      auto          : true, // whether to automatic play the slideshow
      maxItemDisplay     : 3,
      startItem      : 0,
      navPosition      : 'vertical', 
      navigatorHeight    : 100,
      navigatorWidth    : 208,
      duration      : 600,
      navItemsSelector    : '.lof-navigator li',
      navOuterSelector    : '.lof-navigator-outer' ,
      isPreloaded      : true,
      easing        : 'easeInOutQuad'
    }  
    $.extend( this.settings, settings ||{} );  
    this.nextNo         = null;
    this.previousNo     = null;
    this.maxWidth  = this.settings.mainWidth || 600;
    this.wrapper = $( obj ).find( this.settings.wapperSelector );  
    this.slides = this.wrapper.find( this.settings.mainItemSelector );
    if( !this.wrapper.length || !this.slides.length ) return ;
    // set width of wapper
    if( this.settings.maxItemDisplay > this.slides.length ){
      this.settings.maxItemDisplay = this.slides.length;  
    }
    this.currentNo      = isNaN(this.settings.startItem)||this.settings.startItem > this.slides.length?0:this.settings.startItem;
    this.navigatorOuter = $( obj ).find( this.settings.navOuterSelector );  
    this.navigatorItems = $( obj ).find( this.settings.navItemsSelector ) ;
    this.navigatorInner = this.navigatorOuter.find( this.settings.navInnerSelector );
    
    if( this.settings.navPosition == 'horizontal' ){ 
      this.navigatorInner.width( this.slides.length * this.settings.navigatorWidth );
      this.navigatorOuter.width( this.settings.maxItemDisplay * this.settings.navigatorWidth );
      this.navigatorOuter.height(  this.settings.navigatorHeight );
      
    } else {
      this.navigatorInner.height( this.slides.length * this.settings.navigatorHeight );  
      
      this.navigatorOuter.height( this.settings.maxItemDisplay * this.settings.navigatorHeight );
      this.navigatorOuter.width(  this.settings.navigatorWidth );
    }    
    this.navigratorStep = this.__getPositionMode( this.settings.navPosition );    
    this.directionMode = this.__getDirectionMode();  
    
    
    if( this.settings.direction == 'opacity') {
      this.wrapper.addClass( 'lof-opacity' );
      $(this.slides).css('opacity',0).eq(this.currentNo).css('opacity',1);
    } else { 
      this.wrapper.css({'left':'-'+this.currentNo*this.maxSize+'px', 'width':( this.maxWidth ) * this.slides.length } );
    }

    
    if( this.settings.isPreloaded ) {
      this.preLoadImage( this.onComplete );
    } else {
      this.onComplete();
    }
    
   }
     $.lofSidernews.fn =  $.lofSidernews.prototype;
     $.lofSidernews.fn.extend =  $.lofSidernews.extend = $.extend;
   
   $.lofSidernews.fn.extend({
                
    startUp:function( obj, wrapper ) {
      seft = this;

      this.navigatorItems.each( function(index, item ){
        $(item).click( function(){
          seft.jumping( index, true );
          seft.setNavActive( index, item );          
        } );
        $(item).css( {'height': seft.settings.navigatorHeight, 'width':  seft.settings.navigatorWidth} );
      })
//      this.registerWheelHandler( this.navigatorOuter, this );
      this.setNavActive(this.currentNo );
      
      if( this.settings.buttons && typeof (this.settings.buttons) == "object" ){
        this.registerButtonsControl( 'click', this.settings.buttons, this );

      }
      if( this.settings.auto ) 
      this.play( this.settings.interval,'next', true );
      
      return this;
    },
    onComplete:function(){
      setTimeout( function(){ $('.preload').fadeOut( 900 ); }, 400 );  this.startUp( );
    },
    preLoadImage:function( callback ){
      var self = this;
      var images = this.wrapper.find( 'img' );
  
      var count = 0;
      images.each( function(index,image){ 
        if( !image.complete ){          
          image.onload =function(){
            count++;
            if( count >= images.length ){
              self.onComplete();
            }
          }
          image.onerror =function(){ 
            count++;
            if( count >= images.length ){
              self.onComplete();
            }  
          }
        }else {
          count++;
          if( count >= images.length ){
            self.onComplete();
          }  
        }
      } );
    },
    navivationAnimate:function( currentIndex ) {

      // added the arrow method to autoslide. <tpm>
      //moveArrow(jQuery('.slideshow-navigator li'), jQuery('.slideshow-navigator'), jQuery('#thumb-arrow'), currentIndex);

      if (currentIndex <= this.settings.startItem 
        || currentIndex - this.settings.startItem >= this.settings.maxItemDisplay-1) {
          this.settings.startItem = currentIndex - this.settings.maxItemDisplay+2;
          if (this.settings.startItem < 0) this.settings.startItem = 0;
          if (this.settings.startItem >this.slides.length-this.settings.maxItemDisplay) {
            this.settings.startItem = this.slides.length-this.settings.maxItemDisplay;
          }
      }    
      this.navigatorInner.stop().animate( eval('({'+this.navigratorStep[0]+':-'+this.settings.startItem*this.navigratorStep[1]+'})'), 
                        {duration:500, easing:'easeInOutQuad'} );  
    },
    setNavActive:function( index, item ){
      if( (this.navigatorItems) ){ 
        this.navigatorItems.removeClass( 'active' );
        $(this.navigatorItems.get(index)).addClass( 'active' );  
        this.navivationAnimate( this.currentNo );  
      }
    },
    __getPositionMode:function( position ){
      if(  position  == 'horizontal' ){
        return ['left', this.settings.navigatorWidth];
      }
      return ['top', this.settings.navigatorHeight];
    },
    __getDirectionMode:function(){
      switch( this.settings.direction ){
        case 'opacity': this.maxSize=0; return ['opacity','opacity'];
        default: this.maxSize=this.maxWidth; return ['left','width'];
      }
    },
    registerWheelHandler:function( element, obj ){ 
       element.bind('mousewheel', function(event, delta ) {
        var dir = delta > 0 ? 'Up' : 'Down',
          vel = Math.abs(delta);
        if( delta > 0 ){
          obj.previous( true );
        } else {
          obj.next( true );
        }
        return false;
      });
    },
    registerButtonsControl:function( eventHandler, objects, self ){ 
      for( var action in objects ){ 
        switch (action.toString() ){
          case 'next':
            objects[action].click( function() { self.next( true) } );
            break;
          case 'previous':
            objects[action].click( function() { self.previous( true) } );
            break;
        }
      }
      return this;  
    },
    onProcessing:function( manual, start, end ){       
      this.previousNo = this.currentNo + (this.currentNo>0 ? -1 : this.slides.length-1);
      this.nextNo   = this.currentNo + (this.currentNo < this.slides.length-1 ? 1 : 1- this.slides.length);        
      return this;
    },
    finishFx:function( manual ){
      if( manual ) this.stop();
      if( manual && this.settings.auto ){ 
        this.play( this.settings.interval,'next', true );
      }    
      this.setNavActive( this.currentNo );  
    },
    getObjectDirection:function( start, end ){
      return eval("({'"+this.directionMode[0]+"':-"+(this.currentNo*start)+"})");  
    },
    fxStart:function( index, obj, currentObj ){
        if( this.settings.direction == 'opacity' ) { 
          $(this.slides).stop().animate({opacity:0}, {duration: this.settings.duration, easing:this.settings.easing} );
          $(this.slides).eq(index).stop().animate( {opacity:1}, {duration: this.settings.duration, easing:this.settings.easing} );
        }else {
          this.wrapper.stop().animate( obj, {duration: this.settings.duration, easing:this.settings.easing} );
        }
      return this;
    },
    jumping:function( no, manual ){
      this.stop(); 
      if( this.currentNo == no ) return;    
       var obj = eval("({'"+this.directionMode[0]+"':-"+(this.maxSize*no)+"})");
      this.onProcessing( null, manual, 0, this.maxSize )
        .fxStart( no, obj, this )
        .finishFx( manual );  
        this.currentNo  = no;
    },
    next:function( manual , item){

      this.currentNo += (this.currentNo < this.slides.length-1) ? 1 : (1 - this.slides.length);  
      this.onProcessing( item, manual, 0, this.maxSize )
        .fxStart( this.currentNo, this.getObjectDirection(this.maxSize ), this )
        .finishFx( manual );
    },
    previous:function( manual, item ){
      this.currentNo += this.currentNo > 0 ? -1 : this.slides.length - 1;
      this.onProcessing( item, manual )
        .fxStart( this.currentNo, this.getObjectDirection(this.maxSize ), this )
        .finishFx( manual  );      
    },
    play:function( delay, direction, wait ){  
      this.stop(); 
      if(!wait){ this[direction](false); }
      var self  = this;
      this.isRun = setTimeout(function() { self[direction](true); }, delay);
    },
    stop:function(){ 
      if (this.isRun == null) return;
      clearTimeout(this.isRun);
            this.isRun = null; 
    }
  })
})(jQuery);


/*
function thumbArrow(obj) {
  var thumbnailArr   = jQuery('.slideshow-navigator li');
  var navigator     = jQuery('.slideshow-navigator');
  
  thumbnailArr.each(function(i, value) {
    jQuery(this).click(function() {
      moveArrow(thumbnailArr, navigator, obj, i);
    });
  });
}


function moveArrow(thumbnailArr, navigator, obj, i, value) {
  var currentWidth = 207;
  var prevLeft = navigator.css('left').replace('px', '');
  
  if (i == 0) {
    obj.stop(true, false).animate({
      left: '25px'
    }, 1000, function() {
      // Animation complete.
    });
  }
  else if (i == 1) {
    obj.stop(true, false).animate({
      left: '236px'
    }, 1000, function() {
      // Animation complete.
    });        
  }
  else {
    var leftPx = jQuery(thumbnailArr[i]).position().left - 207 + 28;

    obj.stop(true, false).animate({
      left: leftPx + 'px'
    }, 1000, function() {
      // Animation complete.
    });
  }
}


jQuery(document).ready(function() {
  thumbArrow(jQuery('#thumb-arrow'));
});


jQuery(document).ready(function(){
  jQuery('ul.tabNav a').click(function() {
    var curChildIndex = $(this).parent().prevAll().length + 1;
    
    jQuery(this).parent().parent().children('.current').removeClass('current');
    jQuery(this).parent().addClass('current');
    jQuery(this).parent().parent().next('.tabContainer').children('.current').slideUp('fast', function() {
      jQuery(this).removeClass('current');
    
      jQuery(this).parent().children('div:nth-child(' + curChildIndex + ')').slideDown('normal', function() {
        jQuery(this).addClass('current');
      });
    });
    
    return false;        
  });
});*/
