	// 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		: 310,
				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);
				this.caption = $( obj ).find( '.lof-main-item-desc' );
				$( obj ).find( '.lof-main-item-desc' ).hide().eq(0).show();
			} 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 ) { 
				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},this.settings.duration, this.settings.easing, function(){
																				$(currentObj.caption.slideUp().eq(index)).slideDown();																
																		} );
						
					}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)


