// globals for slider
var SR_esing_type = 'sofarider'; // no need for easing plugin if default 'sofarider' is set. Otherwise enter easing type.
var SR_duration_time = 0;
var SR_slider_h = 0;
var SR_slider_item_w = 0;
// ----- NO NEED TO EDIT BELOW ----- \\
var SR_can_run_next = true;
var SR_window_w = 0;
var SR_arr_slider_items = [];
var SR_displayed_x = 0;
var SR_destination_x = 0;
var SR_init_x = 0;
var SR_delay_from = 0;
var SR_delay_to   = 0;

jQuery.sofaSlammer = function( sr_e_t, sr_d_t, sr_s_h, sr_s_w ) {
	
	SR_esing_type = sr_e_t;
	SR_duration_time = sr_d_t;
	SR_slider_h = sr_s_h;
	SR_slider_item_w = sr_s_w;
	
	if( SR_duration_time < 500 ) SR_duration_time = 500;
	SR_delay_from = SR_duration_time - 500;
	SR_delay_to   = SR_duration_time - 300;
	if( SR_delay_from <= 0 ) SR_delay_from = 200;
	if( SR_delay_to <= SR_delay_from ) SR_delay_to = SR_delay_from + 100;
	
	jQuery.slammer.init();
	jQuery( '#rightbutton' ).click( function() {							 
		if( !SR_can_run_next ) return;
		SR_can_run_next = false;
		var itemz_len = SR_arr_slider_items.length;
		var ii = 0;
		while( ii < itemz_len ) {
			if( ii == 0 ) {
				jQuery( '#' + SR_arr_slider_items[ ii ] ).animate( { left: SR_destination_x }, { duration: SR_duration_time, easing: SR_esing_type, complete: function() { finished_slide_right( jQuery( this ) ); } } );
				jQuery( '#' + SR_arr_slider_items[ ii ] ).find( '.trigger' ).each( function( i ) {
					jQuery( this ).data( 'init_pos', jQuery( this ).css( 'left' ) );
					jQuery( this ).animate( { left: 200 }, { duration: jQuery.random( SR_delay_from, SR_delay_to ), easing: SR_esing_type } );
				} );
			} else if( ii == 1 ) {
				jQuery( '#' + SR_arr_slider_items[ ii ] ).animate( { left: SR_displayed_x }, { duration: SR_duration_time, easing: SR_esing_type } );
				jQuery( '#' + SR_arr_slider_items[ ii ] ).find( '.trigger' ).each( function( i ) {
					var me = jQuery( this );
					jQuery( this ).data( 'init_pos', jQuery( this ).css( 'left' ) );
					jQuery( this ).animate( { left: -200 }, { duration: jQuery.random( SR_delay_from, SR_delay_to ), easing: SR_esing_type, complete: function() { me.animate( { left: me.data( 'init_pos' ) }, { duration: SR_duration_time/2, easing: SR_esing_type } ) } } );
				} );
			} else {
				jQuery( '#' + SR_arr_slider_items[ ii ] ).css( { 'left': SR_init_x } );
			}
			ii ++;
		}
		return false;
	} );
	jQuery( '#leftbutton' ).click( function() {							 
		if( !SR_can_run_next ) return;
		SR_can_run_next = false;
		var last_elem = SR_arr_slider_items.pop();
		SR_arr_slider_items.splice( 1, 0, last_elem );
		var itemz_len = SR_arr_slider_items.length;
		var ii = 0;
		while( ii < itemz_len ) {
			if( ii == 0 ) {
				jQuery( '#' + SR_arr_slider_items[ ii ] ).animate( { left: SR_init_x }, { duration: SR_duration_time, easing: SR_esing_type, complete: function() { finished_slide_left( jQuery( this ) ); } } );
				jQuery( '#' + SR_arr_slider_items[ ii ] ).find( '.trigger' ).each( function( i ) {
					jQuery( this ).data( 'init_pos', jQuery( this ).css( 'left' ) );
					jQuery( this ).animate( { left: 200 }, { duration: jQuery.random( SR_delay_from, SR_delay_to ), easing: SR_esing_type } );
				} );
			} else if( ii == 1 ) {
				jQuery( '#' + SR_arr_slider_items[ ii ] ).css( { left: SR_destination_x } );
				jQuery( '#' + SR_arr_slider_items[ ii ] ).animate( { left: SR_displayed_x }, { duration: SR_duration_time, easing: SR_esing_type } );
				jQuery( '#' + SR_arr_slider_items[ ii ] ).find( '.trigger' ).each( function( i ) {
					var me = jQuery( this );
					jQuery( this ).data( 'init_pos', jQuery( this ).css( 'left' ) );
					jQuery( this ).animate( { left: 200 }, { duration: jQuery.random( SR_delay_from, SR_delay_to ), easing: SR_esing_type, complete: function() { me.animate( { left: me.data( 'init_pos' ) }, { duration: SR_duration_time/2, easing: SR_esing_type } ) } } );
				} );
			} else {
				jQuery( '#' + SR_arr_slider_items[ ii ] ).css( { 'left': SR_init_x } );
			}
			ii ++;
		}
		return false;
	} );
}

jQuery.slammer = {
	init: function() {
		var fix_height_margins = 0;
		SR_window_w = jQuery( window ).width();
		SR_init_x = SR_window_w + SR_slider_item_w;
		var slid_w = SR_window_w + SR_slider_item_w * 2;
		var pos_left = Math.ceil( ( SR_window_w - slid_w ) / 2 );
		jQuery( '#slider' ).css( { 'width': slid_w, 'height': SR_slider_h, 'position': 'relative', 'left' : pos_left } );
		if( parseInt( jQuery( '#slider' ).css( 'margin-top' ) ) > 0 ) fix_height_margins += parseInt( jQuery( '#slider' ).css( 'margin-top' ) );
		if( parseInt( jQuery( '#slider' ).css( 'margin-bottom' ) ) > 0 ) fix_height_margins += parseInt( jQuery( '#slider' ).css( 'margin-bottom' ) );
		var button_mid = Math.ceil( ( ( SR_slider_h + fix_height_margins ) - jQuery( '#rightbutton' ).outerHeight( true ) ) / 2 );
		jQuery( '#leftbutton, #rightbutton' ).css( { 'top': button_mid } );
		SR_destination_x = pos_left;
		SR_displayed_x = Math.ceil( ( slid_w - SR_slider_item_w ) / 2 );
		jQuery( '#slider' ).children().each( function( i ) {
			if( jQuery.inArray( jQuery( this ).attr( 'id' ), SR_arr_slider_items ) == -1 ) SR_arr_slider_items.push( jQuery( this ).attr( 'id' ) );
			if( i == 0 ) jQuery( '#' + SR_arr_slider_items[ i ] ).css( { 'width': SR_slider_item_w, 'height': SR_slider_h, 'position': 'absolute', 'left': SR_displayed_x, 'top': 0 } );
			else jQuery( '#' + SR_arr_slider_items[ i ] ).css( { 'width': SR_slider_item_w, 'height': SR_slider_h, 'position': 'absolute', 'left': SR_init_x, 'top': 0 } );
		} );
	}
};
jQuery( function() {
	jQuery( window ).resize( function() {
		SR_window_w = jQuery( window ).width();
		jQuery.slammer.init();
	} );
} );
function finished_slide_right( who ) {
	jQuery( who ).css( { 'left': SR_init_x } );
	var first_elem = SR_arr_slider_items.shift();
	SR_arr_slider_items.push( first_elem );
	jQuery( who ).find( '.trigger' ).each( function( i ) {
		var ob = jQuery( this );
		ob.css( { 'left': ob.data( 'init_pos' ) } );
	} );
	SR_can_run_next = true;
}
function finished_slide_left( who ) {
	var first_elem = SR_arr_slider_items.shift();
	SR_arr_slider_items.splice( 1, 0, first_elem );
	jQuery( who ).find( '.trigger' ).each( function( i ) {
		var ob = jQuery( this );
		ob.css( { 'left': ob.data( 'init_pos' ) } );
	} );
	SR_can_run_next = true;
}
jQuery.extend( {
	random: function( min, max ) {
	  return Math.round( min + ( ( max - min ) * ( Math.random() % 1 ) ) );
	}
} );
jQuery.extend( jQuery.easing, {
	sofarider: function( x, t, b, c, d, s ) {
		if( s == undefined ) s = 1.70158; 
		if( ( t /= d / 2 ) < 1 ) return c / 2 * ( t * t * ( ( ( s *= ( 1.525 ) ) + 1 ) * t - s ) ) + b;
		return c / 2 * ( ( t -= 2 ) * t * ( ( ( s *= ( 1.525 ) ) + 1 ) * t + s ) + 2 ) + b;
	}
} );
