/**
 * @author kchevalier@suntouchdesign.com
 *  September, 2009
 */

var Slider = {
	
	/* PROPERTIES */
	
	autoRun: true,
	divName: 'slideshow',
	imgWidth: 490,
	imgCount: 0,
	slideInterval: 1200,
	autoSlideInterval: 6000,
	
	list: '',
	listWidth: 0,
	allowedLeft: '',
	
	rePx: /^(-?\d+)px$/,
	reAllowd: /^0$/,
	
	/* CONSTRUCTOR METHOD */
	
	init: function( autoRunIn ) {
		
		// initialize properties
		if ( autoRunIn != null && typeof( autoRunIn ) == 'boolean' ) {
			Slider.autoRun = autoRunIn;
		}
		var div = $( '#' + Slider.divName );
		Slider.list = $( '#' + Slider.divName + ' ul' );
		
		// prep slideshow
		div.prepend( "<div id='slideLeft'></div><div id='slideRight'></div>" );
		var tempWidth = 0;
		Slider.list.children('li').each( function(i) {
			Slider.imgCount++;
			if ( Slider.allowedLeft == '' ) {
				Slider.allowedLeft = '0';
			}
			else {
				tempWidth -= Slider.imgWidth;
				Slider.allowedLeft = Slider.allowedLeft + '|' + tempWidth;
			}
		} );
		Slider.reAllowed = new RegExp("^" + Slider.allowedLeft + "$" );
		Slider.listWidth = Slider.imgWidth * Slider.imgCount;
		Slider.list.width( Slider.listWidth );
		
		// add event listeners
		$('#slideLeft').bind( 'click', function(evt) {
			Slider.autoRun = false;
			Slider.slideLeft(evt);
		} );
		$('#slideRight').bind( 'click', function(evt) {
			Slider.autoRun = false;
			Slider.slideRight(evt);
		} );
		
		// auto run
		if ( Slider.autoRun ) {
			setTimeout( "Slider.run()", Slider.autoSlideInterval );
		}
		
	},
	
	/* EVENT HANDLERS */
	
	// handle left slide
	slideLeft: function(evt) {
		if ( matches = Slider.rePx.exec( Slider.list.css( 'left' ) ) ) {
			var leftPx = parseInt( matches[1] );
			var interval = Slider.slideInterval;
			if ( Slider.reAllowed.exec( leftPx ) ) {
				if (leftPx >= 0) {
					newLeft = '-' + ( Slider.listWidth - Slider.imgWidth ) + 'px';
					interval = Slider.slideInterval * 2;
				}
				else {
					newLeft = ( leftPx + Slider.imgWidth ) + 'px';
					
				}
				Slider.list.animate( { left: newLeft }, interval, 'swing' );
			}
		}
	},
	
	// handle right slide
	slideRight: function(evt) {
		if ( matches = Slider.rePx.exec( Slider.list.css( 'left' ) ) ) {
			var rightPx = parseInt( matches[1] );
			var interval = Slider.slideInterval;
			if ( Slider.reAllowed.exec( rightPx ) ) {
				if ( rightPx <= -Slider.listWidth + Slider.imgWidth ) {
					newRight = '0px';
					interval = Slider.slideInterval * 2;
				} 
				else {
					newRight = ( rightPx - Slider.imgWidth ) + 'px';
				}
				Slider.list.animate( { left: newRight }, interval, 'swing' );
			}
		}
	},
	
	/* REGULAR METHODS */
	
	// auto slide
	run: function() {
		if ( Slider.autoRun ) {
			Slider.slideRight();
			setTimeout( "Slider.run()", Slider.autoSlideInterval );
		}
	}
	
}
