//
// ZEN ROTATOR 1.0
// Written by Blain Hosford
// Copyright 2010, Zen Webware
// www.zenwebware.com
//

function Rotator() {
	this.items = [];
	this.display_time = 5000;
	this.transition_time = 1000;
	this.transition_step = 100;
	this.previous_index = null;
	this.index = 0;
	this.timer = null;
	this.timer_count = null;
}


function rotator_start(display_time, transition_time) {
	this.display_time = display_time;
	this.transition_time = transition_time;
	var this_obj = this;
	setTimeout(function() { this_obj.next_item.call(this_obj); }, this_obj.display_time);
}


function rotator_add_item(id) {
	var item = [];
	item['id'] = id;
	var element = document.getElementById(id);
	if(this.items.length == 0) {
		element.style.display = "block";
		element.style.opacity = 1;
		element.style.filter = "alpha(opacity=100)";
	} else {
		element.style.display = "none";
		element.style.opacity = 0;
		element.style.filter = "alpha(opacity=0)";
	}
	this.items[this.items.length] = item;
}


function rotator_next_item() {
	this.previous_index = this.index;
	this.index++;
	if(this.index == this.items.length) this.index = 0;
	var next_element = document.getElementById(this.items[this.index]['id']);
	next_element.style.display = "block";
	this.timer_count = 0;
	var this_obj = this;
	setTimeout(function() { this_obj.transition.call(this_obj); }, this.transition_step);
}


function rotator_transition() {
	this.timer_count = this.timer_count +  this.transition_step;
	if(this.timer_count > this.transition_time) this.timer_count = this.transition_time;
	var percentage = this.timer_count / this.transition_time;
	
	var previous_element = document.getElementById(this.items[this.previous_index]['id']);
	previous_element.style.opacity = (1 - percentage);
	previous_element.style.filter = "alpha(opacity=" + Math.floor((1 - percentage) * 100) + ")";
	
	var next_element = document.getElementById(this.items[this.index]['id']);
	next_element.style.opacity = percentage;
	next_element.style.filter = "alpha(opacity=" + Math.floor(percentage * 100) + ")";
	
	if(this.timer_count == this.transition_time) {
		previous_element.style.display = "none";
		var this_obj = this;
		setTimeout(function() { this_obj.next_item.call(this_obj); }, this_obj.display_time);
	} else {
		this_obj = this;
		setTimeout(function() { this_obj.transition.call(this_obj); }, this_obj.transition_step);
	}
}


Rotator.prototype.start = rotator_start;
Rotator.prototype.add_item = rotator_add_item;
Rotator.prototype.next_item = rotator_next_item;
Rotator.prototype.transition = rotator_transition;

