(function($){

	var defaults = {
		slides:[],
		loader:'',
		lnk_target:'_self',
		curSlide:0,
		interval:0,
		duration:5000,
		controls:true,
		circular:true,
		disabled:false,
		onChange:null,
		width:1016,
		height:474,
		flashvideo: "videoplayer_1016x474.swf",
		flashvars: "hide_controls=1",
		sound: 1
	};
	
	var methods = {
		init:function(options){		
			return $(this).each(function(){
				var settings = {};
				$.extend(settings, defaults, options);
				settings.slides = options.slides;
				settings.imagecount = 0;
				
				var $this = $(this),
					data = $this.data('iwsSlideshow2');
				
				for(var i = 0;i < settings.slides.length;i++) {
					settings.slides[i].playcount = 0;
					if(settings.slides[i].filetype != 3)
						settings.imagecount++;
				}
				if(!data){
					$(this).data('iwsSlideshow2', {
						target:$(this),
						settings:settings
					});
					if(settings.slides.length > 0){
						//create the container, and start loading the slides
						$(this).iwsSlideshow2('create').iwsSlideshow2('load');
					}
				} else {
					$(this).iwsSlideshow2('create').iwsSlideshow2('load');
				}
			});
		},
		
		reinit:function(options){
			return $(this).each(function(){
				$(this).iwsSlideshow2('destroy');
				$(this).iwsSlideshow2('init', options);
			});
		},
		
		option:function(option, value){
			if(option != null){
				if(value != null){
					return $(this).each(function(){
						$(this).data('iwsSlideshow2').settings[option] = value;
					});
				} else {
					return $(this).data('iwsSlideshow2').settings[option];
				}
			} else {
				return $(this).data('iwsSlideshow2').settings;
			}
		},
		
		create:function(){
			return $(this).each(function(){
				var target = $(this),
					settings = target.data('iwsSlideshow2').settings,
					slides = settings.slides
				
				if(settings.controls){
					settings.controls = $('<ul>').appendTo(target);
					for(var i = 0; i < settings.slides.length; i++){
						settings.controls.append($('<li>').click(function(){
								$(this).css({ listStyle:'disc inside' }).siblings().css({ listStyle:'circle inside' });
								settings.curSlide = $(this).index();
								target.iwsSlideshow2('load');
							})
						);
					}
					settings.controls.hide();
				}
			});
		},
		
		load:function(){
			return $(this).each(function(){
				var target = $(this),
					settings = $(this).data('iwsSlideshow2').settings,
					controls = settings.controls;
					slides = settings.slides,
					curSlide = settings.curSlide;
					img = slides[curSlide].image,
					dur = slides[curSlide].duration,
					lnk = slides[curSlide].link,
					type = slides[curSlide].filetype,
					playcount = slides[curSlide].playcount++
					
					if(img.indexOf("http") < 0)
						img = "/content/slides/"+img;
						
					if(type == 3) { // mp4
						if(playcount > 0 && settings.slides.length > 1) {
							$(this).iwsSlideshow2('next');
							return;
						}
						$(".video-js-box").remove();
//				
						var videoToPlay = "test.mp4";
						var videojs = '<div class="video-js-box"><video class="video-js" width="'+settings.width+'" height="'+settings.height+'" autoplay controls preload><source src="'+img+'" type=\'video/mp4; codecs="avc1.42E01E, mp4a.40.2"\' /><object id="flash_fallback_1" class="vjs-flash-fallback" width="'+settings.width+'" height="'+settings.height+'" type="application/x-shockwave-flash" data="/library/swf/'+settings.flashvideo+'">';
						videojs += '<param name="movie" value="/library/swf/'+settings.flashvideo+'" />';
						videojs += '<param name="allowfullscreen" value="true" />';
						videojs += '<param name="wmode" value="transparent" />';
						videojs += '<param name="flashvars" value=\'video='+img+'&sound='+settings.sound+'&'+settings.flashvars+'\' />';
						videojs += "</object></video></div>";
					
						if(slides.length > curSlide) {
							var ni = $('<img>', { src:slides[curSlide+1].img });
						}
						$(this).append(ni);
						$(this).append(videojs);
						$("video",".video-js-box").bind('volumechange',function(e) {
						});
						$(".video-js-box",this).css("opacity",0);
						$(".video-js-box",this).animate({"opacity":1});
						if(!$.browser.msie)
							VideoJS.setupAllWhenReady({playerFallbackOrder:["flash","html5","links"]});
						
					} else { // image
						$(".video-js-box",this).remove();
						$('<img>', { src:img }).bind('load.iwsSlideshow2 complete.iwsSlideshow2', function(){
							//if theres more than one slide, clear last image interval and create a new one;
							if(slides.length > 1 && settings.imagecount > 1){
								clearInterval(settings.interval);
								settings.interval = setInterval(function() { 
									target.iwsSlideshow2('next') 
								}, dur ? dur : settings.duration);
							}
							
							target.children('img').fadeTo('', 0, function(){
								target.children('img:not(:last)').remove();
							});
							
							//unbind old events, fade in image, and remove other images
							$(this).unbind('iwsSlideshow2').appendTo(target).fadeTo('', 1);
							
							//if slide has an associated link... set the cursor and click handler
							if(lnk){
								$(this).css({ cursor:'pointer' }).click(function(){
									window.open(lnk, settings.lnk_target);
								});
							}
						})
					}
					
					//update controls to reflect new current index
					if(controls){
						var control = controls.children('li').eq(curSlide);
						control.css({ listStyle:'disc inside' }).siblings().css({ listStyle:'circle inside' });
					}
			});
		},
		
		prev:function(){
			return $(this).each(function(){
				var settings = $(this).data('iwsSlideshow2').settings
			});
		},
		
		goto:function(index){
			return $(this).each(function(){
				var target = $(this),
					settings = $(this).data('iwsSlideshow2').settings,
					slides = settings.slides;
					
				if(index < 0) {
					index = 0;
				} else if(index >= slides.length) {
					index = slides.length - 1;
				}
				
				settings.curSlide = index;
				
				target.iwsSlideshow2('load');
			});
		},
		
		next:function(){
			return $(this).each(function(){
				var target = $(this),
					settings = $(this).data('iwsSlideshow2').settings,
					slides = settings.slides,
					curSlide = settings.curSlide
				
				if(++curSlide >= slides.length) curSlide = 0;
				settings.curSlide = curSlide;
				
				target.iwsSlideshow2('load');
			});
		},
		
		update:function(){
			return $(this).each(function(){
				var settings = $(this).data('iwsSlideshow2').settings,
					slides = settings.slides,
					curSlide = settings.curSlide	
			});
		},
		
		pause:function(p){
			return $(this).each(function(){
				var target = $(this),
					settings = $(this).data('iwsSlideshow2').settings,
					slides = settings.slides,
					curSlide = settings.curSlide,
					dur = slides[curSlide].duration
				
				//if paused, clear the current interval, else start it up again	
				if(p){
					clearInterval(settings.interval);
				} else {
					settings.interval = setInterval(function() { target.iwsSlideshow2('next') }, dur ? dur : settings.duration);
				}
			});
		},
		
		change:function(){
			return $(this).each(function(){
				var settings = $(this).data('iwsSlideshow2').settings,
					slides = settings.slides,
					curSlide = settings.curSlide
					
				if(onChange) settings.onChange(curSlide, slides[curSlide]);
			});
		},
		
		enable:function(){
			return $(this).each(function(){
				$(this).data('iwsSlideshow2').settings.disabled = false;
			});
		},
		
		disable:function(){
			return $(this).each(function(){
				$(this).data('iwsSlideshow2').settings.disabled = true;
			});
		},
		
		getSlide:function(){
			var settings = $(this).data('iwsSlideshow2').settings,
				slides = settings.slides,
				curSlide = settings.curSlide
				
			return { index:curSlide, slide:slides[curSlide] };
		},
		
		destroy:function(){
			return $(this).each(function(){
				$(this).data('iwsSlideshow2').settings.interval
				$(this).data('iwsSlideshow2', null);
				$(this).empty();
			});
		}
	};
	
	$.fn.iwsSlideshow2 = function(method){
		if (methods[method]){
			return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
		} else if (typeof method === 'object' || !method) {
			return methods.init.apply(this, arguments);
		} else {
			$.error('Method ' +  method + ' does not exist on jQuery.iwsSlideshow2');
		}    
	};
})(jQuery);
