(function($){

	var defaults = {
		slides:[],
		loader:'',
		lnk_target:'_self',
		curSlide:0,
		interval:0,
		duration:5000,
		controls:true,
		circular:true,
		disabled:false,
		onChange:null,
		width:450,
		height:325,
		flashvideo: "videoplayer_1016x474.swf",
		flashvars: "hide_controls=1",
		sound: 1,
		directory:"/content/slides/"
	};
	
	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 && slides.length > 1){
					settings.controls = $('<ul>').appendTo(target);
					for(var i = 0; i < settings.slides.length; i++){
						slide_number = i + 1;
						//replaced <li>'+slide_number+'</li>
						settings.controls.append($('<li> </li>').click(function(){
								$(this).css({ background:'url(/images/small_slide_on.png) no-repeat 0 0 ' }).siblings().css({ background:'url(/chicago/images/small_slide_off.png) no-repeat 0 0'  });
								
								settings.curSlide = $(this).index();
								target.iwsSlideshow2('load');
							})
						);
					}
					//settings.controls.hide();
				} else settings.controls = false;
				
			});
		},
		
		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,
					lnkTarget = slides[curSlide].linktarget,
					type = slides[curSlide].filetype,
					playcount = slides[curSlide].playcount++
					
					if(img.indexOf("http") < 0)
						img = settings.directory+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="/chicago/library/swf/'+settings.flashvideo+'">';
						videojs += '<param name="movie" value="/chicago/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();
						var a_tag = $("<a class='fancy' href='"+img+"'><img src='"+img+"'></a>").appendTo(target);
						//$("<img>", { src:img }).appendTo(target);
						$('<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 > 0 && settings.imagecount > 0){
								clearInterval(settings.interval);
								settings.interval = setInterval(function() { 
									if (settings.imagecount > 1){
										target.iwsSlideshow2('next') 
									}
								}, dur ? dur : settings.duration);
							}
							
							
							target.find('img').fadeTo(2000, 0, function(){
								target.find('a:not(:last)').remove();
							});
							
							//unbind old events, fade in image, and remove other images
							//add the <a> tag
							
							
							//bind to fancy box
							
							a_tag.fancybox({
									'overlayOpacity'	: '.8',
									'overlayColor'		: '#000',
									'transitionIn'		: 'elastic',
									'transitionOut'		: 'elastic',
									'speedIn'			: 600, 
									'speedOut'			: 200, 
									'overlayShow'		: true,
									'titlePosition'		: 'inside',
									'padding'			: '20px',
									'titleShow'			: false
									//'onComplete'		: setupShareboxCallbacks
							});
							
							$('#title_wrapper').css('display','none');//hide the gallery buttons and title
							//add to the slide show
							$(this).unbind('iwsSlideshow2').appendTo(a_tag).fadeTo(2000, 1);
							
							//if slide has an associated link... set the cursor and click handler
							if(lnk){
								$(this).css({ cursor:'pointer' }).click(function(){
									window.open(lnk, lnkTarget);
								});
							}
						})
					}
					
					//update controls to reflect new current index
					if(controls){
						var control = controls.children('li').eq(curSlide);
						control.css({ background:'url(/images/small_slide_on.png) no-repeat 0 0 ' }).siblings().css({ background:'url(/images/small_slide_off.png) no-repeat 0 0'  });
					}
			});
		},
		
		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);
