var cycle = {
	config: {
		count: false,
		index: false,
		id: '#cycle',
		item: '.item',
		to: false,
		timer: 6000,
		elements: new Array(),
		speed: 1000
	},
	
	_init: function() {
	
		cycle.config.count = 0;
		cycle.config.index = 0;
	
		$(this.config.id).css({position: 'relative'});
		$(this.config.id).children(this.config.item).each(function() {
			cycle.config.count++;
			$(this).css({position: 'absolute'});
			cycle.config.elements.push(this);
			if((cycle.config.count-1) != cycle.config.index) {
				$(this).css({display: 'none'});
			}
		});
		cycle.indi();
		cycle.markIndi();
		cycle.config.to = setTimeout(function() {
			cycle.process();
		}, cycle.config.timer);
	
	},
	
	change: function() {
		
		for(var i=0; i<cycle.config.count; i++) {
			if(i == cycle.config.index) {
				$(cycle.config.elements[i]).fadeIn(cycle.config.speed);
			} else {
				$(cycle.config.elements[i]).fadeOut(cycle.config.speed);
			}
		}
	},
	
	increase: function() {
		if(cycle.config.index == (cycle.config.count-1)) {
			cycle.config.index = 0;
		} else {
			cycle.config.index++;
		}
	},
	
	process: function(index) {
		
		clearTimeout(cycle.config.to);
		
		//if(typeof(console) != 'undefined') {console.log(cycle.config.index);}		
		
		if(index) {
			cycle.config.index = index;
		} else {
			cycle.increase();
		}		
		cycle.change();
		cycle.markIndi();
		
		cycle.config.to = setTimeout(function() {
			cycle.process();
		}, cycle.config.timer);
			
	},
	
	bindIndi: function() {
		$('.indi').bind('click', function() {
			cycle.process($(this).attr('rel'));
		});
	},
	
	indi: function() {
		
		$(cycle.config.id).append('<div id="indicator"></div>');
	
		for(var i=0; i<cycle.config.count; i++) {
			$('#indicator').append('<div class="indi" rel="'+i+'"></div>');
		}
		
		cycle.bindIndi();
	},
	
	markIndi: function(){
		$('.indi[rel='+cycle.config.index+']').addClass('active');
		$('.indi[rel!='+cycle.config.index+']').removeClass('active');
	}
}
