( function() {
	
	var document = $( document );
	
	var container = null;
	
	var items = null;
	
	var currentItem = null;
	
	var timer = null;
	
	var timeout = 10000;
	
	var index = 0;
	
	var events = {
		start : 'Rotator:Start',
		changeItem : 'Rotator:ChangeIem'
	};
	
	var handlers = {
		start : function() {
			container.trigger( events.changeItem );
			helpers.periodicallyUpdate();
		},
		changeItem : function() {
			currentItem.hide();
			if ( index + 1 == items.length ) {
				index = 0;
			}
			else {
				index++
			};
			currentItem = $( items[ index ] );
			currentItem.show();
		}
	};
	
	var helpers = {
		setupDOM : function() {
			container = $( 'ul.rotator' );
			items = $( 'ul.rotator li' );
			currentItem = $( 'ul.rotator li:visible' );
			helpers.bindEvents();
			container.trigger( events.start );
		},
		cleanupDOM : function() {
			helpers.unbindEvents();
		},
		bindEvents : function() {
			container.bind( events.start, handlers.start );
			container.bind( events.changeItem, handlers.changeItem );
		},
		unbindEvents : function() {
			container.unbind( events.start, handlers.start );
			container.unbind( events.changeItem, handlers.changeItem );
		},
		periodicallyUpdate : function() {
			if ( timer != null ) {
				clearTimeout( timer );
				container.trigger( events.changeItem );
			};
			timer = setTimeout( helpers.periodicallyUpdate, timeout );
		}
	};
	
	var initialise = function() {
		document.ready( helpers.setupDOM );
		document.unload( helpers.cleanupDOM );
	};
	
	initialise();
	
} )();