/*

	----------------------------------------------------------------------------------------------------
	Accessible News Slider
	----------------------------------------------------------------------------------------------------
	
	Author:
	Brian Reindel
	
	Author URL:
	http://blog.reindel.com

	License:
	Unrestricted. This script is free for both personal and commercial use.

*/

jQuery.fn.accessNews = function( settings ) {
	settings = jQuery.extend({
        speed : "normal",
		slideBy : 2,
		offset : 14,
		showLessStart : true,
		pagination : false
    }, settings);
    return this.each(function() {
		jQuery.fn.accessNews.run( jQuery( this ), settings );
    });
};

jQuery.fn.accessNews.run = function( $this, settings ) {
	var ul = jQuery( "ul.design-slider", $this );
	var li = ul.children();
	
	if ( li.length > settings.slideBy ) {
		var $next = jQuery( ".next > a", $this );
		var $back = jQuery( ".back > a", $this );
		var $more = jQuery( ".more > a", $this );
		var $more2 = jQuery( ".more", $this );
		var $show = jQuery( ".show > a", $this );
		
		$next.css( "display", "block" );
		$more2.css( "display", "block" );

		
		var liWidth = jQuery( li[1] ).width();
		var animating = false;

		if ( settings.showLessStart == true ) {
			ul.css( "width", ( li.length * liWidth ) );
			ul.addClass( "inslider" );
		} else {
			ul.css( "width", "auto" ).css( "left", "0" );
			$next.css( "display", "none" );
			$back.css( "display", "none" );
			$more2.css( "display", "none" );
			$show.html( "show less" );
			ul.removeClass( "inslider" );
		}
		
		

		if( settings.pagination ) {
			var numTiles = li.length;
			var numPages =  Math.ceil( numTiles / settings.slideBy );
			//alert( 'Pagination: ' + numTiles + ' tiles in ' + numPages + ' pages' );
			
			var paginationList = $( "#slider-pagination" );
			
			var listItems ='';
			for ( i=0; i<numPages; i++ ) {
				var currentClass='';
				if ( i == ( numPages-1 ) ){
					currentClass = ' current';
				}
				listItems +='<li><a class="pager-' + (numPages-i) + currentClass + '" href="#" title="position ' + ( numPages - i ) + '">' + ( numPages - i ) + '</a></li>';
			}
			paginationList.html( listItems );

			$( "#slider-pagination li a" ).click( function(ev)
			{
				ev.preventDefault();
				$( "#slider-pagination li a" ).removeClass( 'current' );
				$(this).addClass( 'current' );
				var paginateTo = parseInt( $(this).html() );
				var panelWidth = parseInt( ( liWidth * settings.slideBy ) - settings.offset );
				var currentPanel = 1;
				var cssLeft = parseInt( ul.css( "left" ) );
				if ( cssLeft < 0 )
				{
					var diffLeft = 0 - cssLeft;
					currentPanel = 1 + ( diffLeft / panelWidth );
				}
				if ( !animating && ( paginateTo != currentPanel ) ) {
					animating = true;
					var offsetLeft = 0;
					var leftEnd=false;
					var rightEnd=false;
					if( paginateTo == numPages ) {
						rightEnd = true;
					}
					else if ( paginateTo <= numPages )  {
						$next.css( "display", "block" );
						$more2.css( "display", "block" );
					}
					if( paginateTo > 1 ) {
						offsetLeft = 0 - ( ( ( liWidth * settings.slideBy ) - settings.offset ) * ( paginateTo - 1 ) );
						$back.css( "display", "block" )
					}
					else {
						leftEnd=true;
					}
					ul.animate( { left: offsetLeft }, settings.speed, function()
					{
						animating = false;
						if ( rightEnd ){
							$next.css( "display", "none" );
							$more2.css( "display", "none" );
						}
						else{
							$next.css( "display", "block" );
							$more2.css( "display", "block" );
						}
						if ( leftEnd ){
							$back.css( "display", "none" );
						}
						else{
							$back.css( "display", "block" );
						}
					});
				}
			} );
		}
		
		$next.click(function() {
			if ( !animating ) {
				animating = true;
				
				var offsetLeft = parseInt( ul.css( "left" ) ) - ( ( liWidth * settings.slideBy ) - settings.offset );

				if( settings.pagination ) {
					$( "#slider-pagination li a" ).removeClass( 'current' );
					// do pagination 'current' here
					var leftDiff = 0 - offsetLeft;
					var paginateTo = 1;
					if ( leftDiff != 0 )
						paginateTo = 1 + ( leftDiff / ( ( liWidth * settings.slideBy ) - settings.offset ) );
					$( '#slider-pagination .pager-' + paginateTo).addClass( 'current' );
				}


				if ( offsetLeft + ul.width() > 0 ) {
					$back.css( "display", "block" );
					ul.animate({
						left: offsetLeft
					}, settings.speed, function() {
						if ( parseInt( ul.css( "left" ) ) + ul.width() <= liWidth * settings.slideBy ) {
							$next.css( "display", "none" );
							$more2.css( "display", "none" );
						}
						animating = false;
					});
				} else {
					animating = false;
				}
			}
			return false;
		});
		
		$more.click(function() {
			if ( !animating ) {
				animating = true;

				var offsetLeft = parseInt( ul.css( "left" ) ) - ( ( liWidth * settings.slideBy ) - settings.offset );

				if( settings.pagination ) {
					$( "#slider-pagination li a" ).removeClass( 'current' );
					// do pagination 'current' here
					var leftDiff = 0 - offsetLeft;
					var paginateTo = 1;
					if ( leftDiff != 0 )
						paginateTo = 1 + ( leftDiff / ( ( liWidth * settings.slideBy ) - settings.offset ) );
					$( '#slider-pagination .pager-' + paginateTo).addClass( 'current' );
				}

				if ( offsetLeft + ul.width() > 0 ) {
					$back.css( "display", "block" );
					ul.animate({
						left: offsetLeft
					}, settings.speed, function() {
						if ( parseInt( ul.css( "left" ) ) + ul.width() <= liWidth * settings.slideBy ) {
							$next.css( "display", "none" );
							$more2.css( "display", "none" );
						}
						animating = false;
					});
				} else {
					animating = false;
				}
			}
			return false;
		});
		
		$back.click(function() {
			if ( !animating ) {
				animating = true;

				var offsetRight = parseInt( ul.css( "left" ) ) + ( ( liWidth * settings.slideBy ) - settings.offset );

				if( settings.pagination ) {
					$( "#slider-pagination li a" ).removeClass( 'current' );
					// do pagination 'current' here
					var leftDiff = 0 - offsetRight;
					var paginateTo = 1;
					if ( leftDiff != 0 )
						paginateTo = 1 + ( leftDiff / ( ( liWidth * settings.slideBy ) - settings.offset ) );
					$( '#slider-pagination .pager-' + paginateTo).addClass( 'current' );
				}

				if ( offsetRight + ul.width() <= ul.width() ) {
					$next.css( "display", "block" );
					$more2.css( "display", "block" );
					ul.animate({
						left: offsetRight
					}, settings.speed, function() {
						if ( parseInt( ul.css( "left" ) ) == 0 ) {
							$back.css( "display", "none" );
						}
						animating = false;
					});
				} else {
					animating = false;
				}
			}
			return false;
		});
		
		jQuery( ".show > a", $this ).click(function() {

			if ( !animating ){ 
				if ( jQuery( this ).html() == "show all"  ) {
					ul.css( "width", "auto" ).css( "left", "0" );
					$next.css( "display", "none" );
					$back.css( "display", "none" );
					$more2.css( "display", "none" );
					jQuery( this ).html( "show less" );
					ul.removeClass( "inslider" );
				} else {
					jQuery( this ).html( "show all" );
					ul.css( "width", ( li.length * liWidth ) );
					$next.css( "display", "block" );
					$more2.css( "display", "block" );
					ul.addClass( "inslider" );
				}
				return false;
			}
		});
	}
};



function addSliderControls( showless ) {
	document.write('<div class="back"><a href="#" title="slide left"><span></span>previous</a></div>');
	if ( !showless ) {
		document.write('<div class="show"><a href="#" title="show all designs">show all</a></div>');
	} else {
		document.write('<div class="show"><a href="#" title="show all designs">show less</a></div>');
	}
	document.write('<div class="more">&nbsp;&nbsp;&nbsp;&nbsp;<a href="#" title="slide right">more</a></div>');
	document.write('<div class="next"><a href="#" title="slide right"><span></span>next</a></div>');
}

