/*  News Slider, version 1.0
 *  Copyright (c) 2008 Onur Köse (http://onurkose.com)
 *
 *  News Slider is a commercial product by me.  Do not steal! Just ask :)
 *  For details and see other commercial stuff at my web site: onurkose.com
 *
 *-------------------------------------------------------------------------*/

var TitlesSlider = {
	container : 'TitlesListing',
	items : $A(),
	items_prefix : 'TitleItem',
	progress_bar_container : 'AutoChangerProgressBar',
	displaying_item : 0,
	scroll_animation : {
		time : 0,
		begin : 0,
		change : 0.0,
		duration : 0.0,
		element : null,
		timer : null
	},
	auto_changer : {
		bar_img : null,
		timer : null,
		next : 1,
		speed : 50
	},
	
	init : function () {
		TitlesSlider.container = $(TitlesSlider.container);
		TitlesSlider.numbers = $(TitlesSlider.numbers);
		TitlesSlider.progress_bar_container = $(TitlesSlider.progress_bar_container);

		if ( !TitlesSlider.container )
			return;

		$A( TitlesSlider.container.getElementsByTagName('div') ).each( function(s , index) {
			var item_num = s.id.replace(TitlesSlider.items_prefix, '');
			
			TitlesSlider.items[item_num] = s;
		});
		
		if ( TitlesSlider.items.length != 0 ) {
			TitlesSlider.set_auto_changer();
		}
	},
	
	set_auto_changer : function () {
		TitlesSlider.auto_changer.bar_img = $(TitlesSlider.progress_bar_container.getElementsByTagName('img')[0]);
		
		TitlesSlider.auto_changer.timer = setInterval('TitlesSlider.do_progress_bar();', TitlesSlider.auto_changer.speed);
	},
	
	do_progress_bar : function ( ) {
		var width = TitlesSlider.auto_changer.bar_img.getWidth();
		
		TitlesSlider.auto_changer.bar_img.style.width = (width+1) + 'px';
		
		if ( width >= 100 ) {
			clearInterval(TitlesSlider.auto_changer.timer);
			
			function run_fx(f) { f(); };
			
			run_fx(TitlesSlider.slide_item.bind( { type : 'auto', item_index : TitlesSlider.find_next() } ));

			TitlesSlider.reset_auto_changer();
		}
	},
	
	reset_auto_changer : function ( ) {
		clearInterval(TitlesSlider.auto_changer.timer);
		
		TitlesSlider.set_auto_changer();
		
		TitlesSlider.auto_changer.bar_img.style.width = '1px';
	},
	
	find_next : function () {
		var length = TitlesSlider.items.length;

		TitlesSlider.auto_changer.next = parseFloat(TitlesSlider.displaying_item)+1;
		
		if ( TitlesSlider.auto_changer.next == TitlesSlider.items.length )
			TitlesSlider.auto_changer.next = 0;

		return TitlesSlider.auto_changer.next;
	},
	
	slide_item : function ( ) {
		if ( this.item_index == TitlesSlider.displaying_item )
			return;
		
		if ( this.type == 'click' )
			TitlesSlider.reset_auto_changer();
		
		if ( !TitlesSlider.items[this.item_index] )
			alert(this.item_index);
		
		positions = $(TitlesSlider.items[this.item_index]).cumulativeOffset();
		
		offset_pos = $(TitlesSlider.items[0]).cumulativeOffset();
		
		position = positions[1] - offset_pos[1];
	
		TitlesSlider.slide_start(TitlesSlider.container, TitlesSlider.container.scrollTop, position);

		TitlesSlider.displaying_item = this.item_index;
	},
	
	slide_start : function ( elem, start, end ) {
		if ( TitlesSlider.scroll_animation.timer != null ) {
			clearInterval(TitlesSlider.scroll_animation.timer);
			
			TitlesSlider.scroll_animation.timer = null;
		}
		
		TitlesSlider.scroll_animation.time = 0;
		TitlesSlider.scroll_animation.begin = start;
		TitlesSlider.scroll_animation.change = end - start;
		TitlesSlider.scroll_animation.duration = 25;
		TitlesSlider.scroll_animation.element = elem;
		
		TitlesSlider.scroll_animation.timer = setInterval('TitlesSlider.vertical_anim();', 15);
	},
	
	vertical_anim : function () {
		if ( TitlesSlider.scroll_animation.time > TitlesSlider.scroll_animation.duration ) {
			clearInterval(TitlesSlider.scroll_animation.timer);
			
			TitlesSlider.scroll_animation.timer = null;
		} else {
			move = TitlesSlider.sine_in_out(TitlesSlider.scroll_animation.time, TitlesSlider.scroll_animation.begin, TitlesSlider.scroll_animation.change, TitlesSlider.scroll_animation.duration);
			
			TitlesSlider.scroll_animation.element.scrollTop = move; 
			TitlesSlider.scroll_animation.time++;
		}
	},

	sine_in_out : function (t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	}
}

Event.observe(window, 'load', function() {
	TitlesSlider.init();
});
