jQuery.fn.SixVoicesPromo = function(options){
	var options = jQuery.extend({
		values: [],
		imagePath: 'images/',
		colour: '',
		delay: 5000
	},options);
	
	return this.each(function(){
		
		//Declare Arrays to hold values
		
		var holder = jQuery(this);
		var loading = false;
		var currentPromo = 0;
		var timerActive = true;
		
		var images = [];
		var urls = [];
		var titles = [];
	
		parseValues();
			
		
		//Create and insert the controls
		var wrapper = jQuery("<div class='wrapper promo_controls'></div>");
		var list = jQuery('<ul id="promo_controls"></ul>');
		
		if(options.colour != ''){
			wrapper.addClass(options.colour);
		}
		
		var linkWidth = Math.floor((940 - (options.values.length * 20)) / options.values.length);
		
		//Create List Items and attach to UL
		for(var i=0; i<options.values.length; i++){
			var newlink = jQuery('<li><a href="#'+i+'">'+titles[i]+'</a></li>');
			if(i==0){
				newlink.addClass('selected');
			}
			newlink.css({'width':linkWidth});

			newlink.appendTo(list);
		}
		
		list.appendTo(wrapper);
		jQuery('.promo').after(wrapper);
		
		//Add events to the links
		
		var links = jQuery('#promo_controls').children('li');
		links.each(function(i){
			jQuery(this).click(function(e){
				e.preventDefault();
				initLoad(jQuery('#promo'),options.imagePath+images[i],i);
				clearTimeout(promoTimer);
			})
		});

		
		//Start Timer
		
		var promoTimer = setInterval(timer,options.delay);
		
		
		function timer(){
			var next = increment();
			initLoad(jQuery('#promo'),options.imagePath+images[next],next);			
		}
		
		function initLoad(target,src,i){
			if(loading != true & currentPromo != i){
				loading = true;
				target.addClass('promo_loading');
				target.children('a').fadeOut();
				setTimeout(function(){target.children('a').remove(),loadImage(target,src,i)},500);
				
			}
		}

		
		function loadImage(target,src,i){
			var img = new Image();
			jQuery(img).load(function(){
				jQuery(this).hide();
				jQuery(this).prependTo(target);
				jQuery(this).fadeIn();
				jQuery(this).wrap('<a href="'+urls[i]+'"></a>');
				target.removeClass('promo_loading');
				loading = false;
				currentPromo = i;
				updateMarker();				
			})
			.attr('src',src);
		}
		
		function updateMarker(){
			var promolists = jQuery('#promo_controls').children('li');
			promolists.each(function(i){
				if(jQuery(this).hasClass('selected')){
					jQuery(this).removeClass('selected');
				}
				if(i == currentPromo){
					jQuery(this).addClass('selected');
				}
			});		
		}
		
		function increment(){
			var n = currentPromo + 1;
			if(n >= 3){
				n = 0;
			}
			return n;
		}
		


		
		
		// Parse the passed array values
		function parseValues(){
			for(var i=0; i < options.values.length; i++){
				for(var u=0; u < 3; u++){
					switch(u)
					{
					case 0:
					images.push(options.values[i][u]);
					break;
				
					case 1:
					urls.push(options.values[i][u]);
					break;
				
					case 2:
					titles.push(options.values[i][u]);
					break;

					default:
					//Nothing to do
											
					}						
				}
			}
		}
		
	})
};
