jQuery.fn.imageRotator = function(options) {
	var imageRotator = $(this[0]);
	var settings = {
		selectorHeight: 15,
		selectorWidth: 15,
		selectorOn: 'images/slideon.png',
		selectorOff: 'images/slideoff.png',
		speed: 800,
		initialDelay: 800,
		periodicDelay: 5000
	};
	$.extend(settings, options);
	var Timeout;
	
	panelSelectors = $('<div style="position: absolute; left: 0; bottom: 0"></div>');
	imageRotator.append(panelSelectors);
	panelSelectors.css('height', settings['selectorHeight']);
	
	imageRotator.children('.imageGroup').each(function(index, ele){
		$(ele).children('.imagePanel').each(function(index, ele){
			var panel = $(ele);
			if(panel.hasClass('inDown'))
			{
				panel.css('top', -imageRotator.innerHeight());
			}
			if(panel.hasClass('inUp'))
			{
				panel.css('top', imageRotator.innerHeight());
			}
			if(panel.hasClass('inLeft'))
			{
				panel.css('left', imageRotator.innerWidth());
			}
			if(panel.hasClass('inRight'))
			{
				panel.css('left', -imageRotator.innerWidth());
			}
			if(panel.hasClass('inFade'))
			{
				panel.css('opacity', 0);
			}
		});
		$(ele).show();
		panelSelectors.append('<img src="' + settings['selectorOff'] + '"></img>');
	});
	
	
	function Switch(groupTo)
	{
		var activeGroup = imageRotator.children('.imageGroupActive')
		if(activeGroup.index()==groupTo)
			return;
		activeGroup.children('.imagePanel').each(function(index,ele){
			var panel = $(ele);
			var ani = {};
			var easing = 'swing';
			if(panel.hasClass('outDown'))
			{
				ani['top'] = imageRotator.innerHeight();
			}
			if(panel.hasClass('outUp'))
			{
				ani['top'] = -imageRotator.innerHeight();
			}
			if(panel.hasClass('outLeft'))
			{
				ani['left'] = -imageRotator.innerWidth();
			}
			if(panel.hasClass('outRight'))
			{
				ani['left'] = imageRotator.innerWidth();
			}
			if(panel.hasClass('outFade'))
			{
				ani['opacity'] = 0;
			}
			if(panel.hasClass('outBounce'))
			{
				easing = 'easeInBack';
			}
			panel.animate(ani, settings['speed'], easing);
		});
		activeGroup.removeClass('imageGroupActive');
		panelSelectors.children('img').eq(activeGroup.index()).attr('src', settings['selectorOff']);
		imageRotator.children('.imageGroup').eq(groupTo).addClass('imageGroupActive').children('.imagePanel').each(function(index, ele){
			var panel = $(ele);
			var ani = {};
			var easing = 'swing';
			panel.css('top', 0);
			panel.css('left', 0);
			panel.queue(function(next){
				if(panel.hasClass('inDown'))
				{
					panel.css('top', -imageRotator.innerHeight());
				}
				if(panel.hasClass('inUp'))
				{
					panel.css('top', imageRotator.innerHeight());
				}
				if(panel.hasClass('inLeft'))
				{
					panel.css('left', imageRotator.innerWidth());
				}
				if(panel.hasClass('inRight'))
				{
					panel.css('left', -imageRotator.innerWidth());
				}
				if(panel.hasClass('inFade'))
				{
					panel.css('opacity', 0);
				}
				if(panel.hasClass('inBounce'))
				{
					easing = 'easeOutBack';
				}
				next();
			}).animate({'top': 0, 'left': 0, 'opacity': 1}, settings['speed'], easing);
		});
		panelSelectors.children('img').eq(groupTo).attr('src', settings['selectorOn']);
		clearTimeout(Timeout);
		nextGroup = groupTo+1;
		if(nextGroup >= imageRotator.children('.imageGroup').length)
		{
			nextGroup = 0;
		}
		Timeout = setTimeout(function(){Switch(nextGroup);}, settings['periodicDelay']);
	}
	Timeout = setTimeout(function(){Switch(0);}, settings['initialDelay']);
	
	panelSelectors.children('img').css('cursor', 'pointer').click(function(){
		Switch($(this).index());
	});
	
};

