(function( $ ){

	var slides;
	var video;
	/*
	var canDoVideo = false;
	var hasVideo = false;
	*/
	var canDoVideo = true;
	var hasVideo = true;
	var slideShowTimer;

	var videoCounter = 0;
	var flpPaused = true;

    var iOS = false;
    if (navigator.userAgent.match(/iPad/i) != null || navigator.userAgent.match(/iPhone/i) || navigator.userAgent.match(/iPod/i)) {
        iOS = true;
    }

	$.fn.slideShow = function(options) {
  
  		var settings = {
			'intervalSpeed' : 5000,
			'fadeSpeed' : 1000,
			'easing' : 'swing',
			'paused' : false,
			'controls' : true,
			'nav' : false,
			'canDoVideo' : false,
			'hasVideo' : false
		};

		return this.each(function(){

			if ($(this).children().length < 1) { return; }
		
			if ( options ) { 
				$.extend( settings, options );
			}

			getVideo = function(id)
			{
				//video = $('#vblock_' + id)[0];
				//handles init
				if (id.tagName === ('VIDEO'))
				{
					video = id;
				}
				else
				{
					video = $('#slide_' + id).children('video')[0];
				}
				
				//webkit
				if (video === undefined) { video = $('#vblock_' + id); }
				if (video === undefined) { video = null; }
				
				//if (video.tagName !== 'VIDEO') { video = null; hasVideo = false; }
				if (video.tagName !== 'VIDEO') { video = null; }
				//if (video.tagName !== 'VIDEO') { alert('video.tagName !== \'VIDEO\''); video = null; settings.hasVideo = false; }
				//alert('settings.canDoVideo: ' + settings.canDoVideo + '\n' + 'settings.hasVideo: ' + settings.hasVideo);
				//if (canDoVideo && hasVideo)
				//if (settings.canDoVideo && settings.hasVideo)
				
				return video;
			}
			getFlash = function(id)
			{
				flp = $('#vblock_' + id)[0];
				
				//webkit
				if (flp === undefined) { flp = $('#vblock_' + id); }
				if (flp === undefined) { flp = null; }
				
				if (flp.tagName !== 'OBJECT') { flp = null; }
				
				return flp;
			}
			
			if (document.getElementsByTagName("video").length > 0)
			{
				//hasVideo = true;
				settings.hasVideo = true;

				//alert(document.getElementsByTagName("video")[0]);
				//getVideo(0);
				if (getVideo(document.getElementsByTagName("video")[0]) !== null)
				{
					//canDoVideo = true;
					settings.canDoVideo = true;
				}
				else
				{
					//canDoVideo = false;
					settings.canDoVideo = false;
				}
				/*
				try
				{
					document.getElementsByTagName("video")[0].pause();
					canDoVideo = true;
				}
				catch (error)
				{
					canDoVideo = false;
				}
				*/
			}
			else
			{
				//hasVideo = false;
				settings.hasVideo = false;
			}
//alert('settings.canDoVideo: ' + settings.canDoVideo + '\n' + 'settings.hasVideo: ' + settings.hasVideo);
			//alert('settings.canDoVideo: ' + settings.canDoVideo + '\n' + 'settings.hasVideo: ' + settings.hasVideo);
			//console.log(canDoVideo + ' : ' + hasVideo);
			//alert(canDoVideo);
			//canDoVideo = false;
			//alert(canDoVideo && hasVideo);
			
			if (iOS)
			{
				//settings.controls = false;
			}
			
			$(this).bind('pause', function() { if (!paused) { paused = true; } });
	  		$(this).bind('play', function() { if (paused) { paused = false; } });

			$(this).bind('flpPause', function() { flpPaused = true; });
			$(this).bind('flpPlay', function() { flpPaused = false; });
			$(this).bind('flpEnded', function(){ flpPaused = true; });

			//canDoVideo = false;
			//$(".poster").hide();
			/*
			if (canDoVideo)
			{
				$(this).find('embed').remove();
				$(this).find('script').remove();

				$("video").each(function() { this.controls = false; });
			}
			else
			{
				$(this).find('video').remove();
				$(this).find('script').remove();
				//$(this).children('.video').removeClass('video');

				//removes videos if there aren't any slides

				if (navigator.userAgent.match(/Safari/i) != null && navigator.userAgent.match(/Windows/i))
				{
					if (($(this).children('.video').length) <= 1)
					{
						$(this).find('script').remove();
						$(this).find('embed').remove();
					}
					else
					{
						//$(this).children('.video').remove();
						$(this).children('.video').removeClass('video');
					}
				}
			}
			*/

			
			slides = $(this).children();
			$(slides[0]).show('fade', 300);
			$(slides).not(":first-child").hide();
			
			//console.log($(slides).find("video"));
			//console.log(document.getElementsByTagName("video").length > 0);
			
			var current = 0;
			var total = slides.length - 1;
	
			var paused = false;
			var mouseover = false;
			var lastVideo;
			var activeWidth;
			var controlsInitWidth = '30px';
			var controlClickFadeSpeed = 300;
			
			if (iOS) {
				var controlsInitWidth = '40px';
				//settings.fadeSpeed = 400;
				settings.fadeSpeed = 200;
				controlClickFadeSpeed = 100;
			}
			//alert($(".slideshowControls ul li").css('width'));
			var videoPaused = true;
			
			//$(this).find('.video').append('<div class="playButton"></div>');
			//if (iOS) { $(slides).children("video").hide(); }

			$(this).find('.video').append('<div class="playButton"></div>');
			$(this).find('img.poster').show();
				
			if (iOS) {
				$(this).find('video').hide();
			}

			$(this).mouseenter(function(){
				clearInterval(slideShowTimer);
				paused = true;
			});
			$(this).mouseleave(function(){
				clearInterval(slideShowTimer);
				slideShowTimer = setInterval("slideShow()", settings.intervalSpeed);
				paused = false;
			});

			/*
			//$(".video").click(function(){
			$(".video img.poster, .playButton").click(function() {
					//$(slides[current]).find(".playButton").hide('fade', 300);
					//$(slides[current]).find("img.poster").hide('fade', 400);			
				//if (canDoVideo && $("img.poster").is(":visible")) {
				if (canDoVideo && videoPaused) {
					alert('asdfsadf');
					$(slides[current]).find(".playButton").hide('fade', 300);
					$(slides[current]).find("img.poster").hide('fade', 400);

					var video = $(slides[current]).children("video")[0];
					video.play();
				}
				else
				{
					
				}
			});
			*/
			
			if (total < 1) { settings.nav = false; } //settings.controls = false; }

			slideShow = function()
			{
				if (paused) { return; }
				if (!videoPaused) { return; }
				//if ($('#' + $(slides[current]).attr('id').replace('slide_', 's_')).hasClass('active')) { return; }
				//cancel the show if there is only 1 image
				if (total < 1) { return; }

				if (!paused)
				{
					$(slides[current]).fadeOut(settings.fadeSpeed, settings.easing, function(){

						if (settings.controls) {
							$(".slideshowPreview").hide();
							if (iOS) {
								//$('.slideshowControls li').trigger('mouseout');
								$('.slideshowControls li.active').css({ width: controlsInitWidth});
							}
							else {
								$('.slideshowControls li.active').animate({ width: controlsInitWidth}, 200);
							}
							$('#' + $(slides[current]).attr('id').replace('slide_', 's_')).removeClass('active');
						}

						$(slides[current]).removeClass('active');

						if (current < total)
						{
							current++;
						}
						else
						{
							current = 0;
						}

						$(slides[current]).addClass('active');
						if (settings.controls) { $('#' + $(slides[current]).attr('id').replace('slide_', 's_')).addClass('active'); }
						$(slides[current]).fadeIn(settings.fadeSpeed, settings.easing);

						if (settings.controls) {
							//$('#' + $(slides[current]).attr('id').replace('slide_', 's_')).addClass('active');
							activeWidth = $('.slideshowControls .textWrapper').width();
							if (iOS) {
								$('.slideshowControls li.active').css({ width: activeWidth});
							}
							else {
								$('.slideshowControls li.active').animate({ width: activeWidth}, 200);
							}
							//$('.slideshowControls li.active').animate({ width: activeWidth}, 200);
						}

						//$('.slideList li').animate({ width: '40px'}, 200);

					});

				}
			}

			//start slideshow
			slideShowTimer = setInterval("slideShow()", settings.intervalSpeed);

			//add nav
			if (settings.nav)
			{
				$(this).append('<div class="slideshowNav"><ul><li class="nav_go_prev"><img src="../images/feature_nav_left.png" /></li><li class="nav_go_next"><img src="../images/feature_nav_right.png" /></li></div>');
				var last;

				$(".slideshowNav").click(function(e){

					clearInterval(slideShowTimer);
					last = current;

					$(this).mouseleave();

					if ($(e.target).parent().hasClass('nav_go_prev'))
					{
						current--;

						if (current < 0)
						{
							current = total;
						}
					}

					if ($(e.target).parent().hasClass('nav_go_next'))
					{
						current++;

						if (current > total)
						{
							current = 0;
						}
					}

					if ($(slides[last]).hasClass("video") && settings.canDoVideo)
					{
						var vid = slides[current].getElementsByTagName("video")[0];
						vid.pause();
					}

					$(slides[last]).fadeOut(300, settings.easing, function(){
							$(slides[last]).removeClass('active');
							
							
							$(slides[current]).addClass('active');
							$(slides[current]).fadeIn(300, settings.easing, function(){

								//clearTimeout(slideShowTimer);
								//slideShowTimer = setInterval("slideShow()", settings.intervalSpeed);
							});
					});
				});
			}

				var hasControls = false;
				
				//add controls
				if (settings.controls)
				{
					//var videoCounter = 0;
					
					if (iOS) {
						$(this).append('<div class="slideshowControls iOS"></div>');
					} else {
						$(this).append('<div class="slideshowControls"></div>');
					}
					$(".slideshowControls").css({ 'top': $(".slide").height() });
					if (!hasControls)
					{
					//console.log($(this).find('.slideshowControls'));
					
					//$(this).append('<div class="slideshowControls"></div>');
					$(this).height($(this).height() + $(".slideshowControls").height());
					//$(".slideshowControls").css({ 'top': $(".slide").height() });

					//$(this).after('<div class="slideshowControls"></div>');
					//$(this).append('<div class="slideshowPreview"></div>');
					//$(".slideshowControls ul li").append('<div class="slideshowPreview"></div>');

					}

					hasControls = true;

					var videoList = '';
					var slideList = '';

					var i = 0;
					var t_i = 0;
					$(slides).each(function(){
						t_i = i + 1;

						//hide all slides
						$(this).hide();
						$(this).attr({ 'id': 'slide_' + i });

						if ($(this).hasClass('slide'))
						{
							if ($(this).hasClass('video'))
							{
								//alert(cdnPath);
								var slideImage = $(slides[i]).find("img.poster").attr('src');
								slideImage = slideImage.replace(cdnPath, '');
								//slideImage = slideImage.replace('http://indwww.s3.amazonaws.com', '');
								previewThumb = '<img class="thumb" src="' + slideImage.replace('.jpg', '_thumb.jpg') + '" /><div class="playButtonSmall"></div>';
								
								videoList += ('<li id="s_' + i + '"><div class="slideshowPreview">' + previewThumb + '</div><div class="textWrapper">' + t_i + '</div></li>');
								videoCounter++;
							}
							else
							{
								var slideImage = $('#' + $(slides[i]).attr('id') + ' img').attr('src');
								slideImage = slideImage.replace(cdnPath, '');
								previewThumb = '<img class="thumb" src="' + slideImage.replace('.jpg', '_thumb.jpg') + '" />';
								//$(".slideshowPreview").html('<img class="thumb" src="' + slideImage.replace('.jpg', '_thumb.jpg') + '" />');
								//console.log(slideImage.replace('.jpg', '_thumb.jpg') );
								//slideList += ('<li id="s_' + i + '"><div class="slideshowPreview"></div><div class="textWrapper">' + t_i + '</div></li>');
								slideList += ('<li id="s_' + i + '"><div class="slideshowPreview">' + previewThumb + '</div><div class="textWrapper">' + t_i + '</div></li>');
							}
						}

						i++;

					});

					//$(".slideshowPreview").css({ 'bottom': $(".slideshowControls").height() });

					$(".slideshowControls").append('<ul class="slideList">' + slideList + '</ul>');
					$(".slideList li:last-child").addClass('last');
					
					$(".slideshowControls").append('<ul class="videoList">' + videoList + '</ul>');
					$(".videoList li:last-child").addClass('last');

					$(slides[current]).addClass('active');
					$('#' + $(slides[current]).attr('id').replace('slide_', 's_')).addClass('active');
					$(slides[current]).show();

					activeWidth = $('.slideshowControls .textWrapper').width();
					$(".slideshowControls li.active").css({ 'width': activeWidth});

				/////////////////////////////////
				// controls.click
				/////////////////////////////////

				$(".slideshowControls ul li").click(function(){

					if ($(this).hasClass('active'))
					{
						return;
					}
					//alert(hasVideo);
					clearInterval(slideShowTimer);

					//$('.slideList li').width(controlsInitWidth);

					if (iOS) {
						//e.preventDefault();
						//$('.slideshowControls li.active').trigger('mouseleave');
						$('.slideshowControls li.active').css({ width: controlsInitWidth});
						//$('.slideshowControls').trigger('mouseout');
					}
					else {
						//$('.slideshowControls li.active').animate({ width: activeWidth}, 200);
						$('.slideshowControls li.active').animate({ width: controlsInitWidth}, 200);
					}					
					//$('.slideshowControls li.active').animate({ width: controlsInitWidth}, 200);
					$(".slideshowPreview").hide();

					var id = $(this).attr('id');
					$(".slideshowControls ul li").removeClass('active');

					last = current;

					current = $(this).attr('id').replace('s_', '');
					$('#' + $(slides[current]).attr('id').replace('slide_', 's_')).addClass('active');


					var fLoadInterval;
					var fLoaded = false;

					//the last slide before you click the new one
					if ($(slides[last]).hasClass("video"))
					{
						//alert('settings.canDoVideo: ' + settings.canDoVideo + '\n' + 'settings.hasVideo: ' + settings.hasVideo);
						//if (canDoVideo && hasVideo)
						if (settings.canDoVideo && settings.hasVideo)
						{
							//var vid = slides[last].getElementsByTagName("video")[0];
							//var vid = $(slides[last]).children("video")[0];
							var vid = getVideo(last);
							vid.pause();
						}
						else
						{
							var last_flp = (last - (total - videoCounter) - 1);
							//var flp = window.document['flp_' + last_flp];
							var flp = getFlash(last_flp);
							
							try
							{
								flp.videoStop();
								//fLoaded = true;
							}
							catch (error)
							{
								//fLoaded = false;
							}
							//flp.videoStop();
						}
					}

					if ($(slides[current]).hasClass("video"))
					{
						paused = true;
						
						$(slides[current]).find(".playButton").hide();

						//alert('settings.canDoVideo: ' + settings.canDoVideo + '\n' + 'settings.hasVideo: ' + settings.hasVideo);
						//if (canDoVideo && hasVideo)
						if (settings.canDoVideo && settings.hasVideo)
						{
							//$(slides[current]).find("img.poster").hide('fade', 300);
							$(slides[current]).find("img.poster").hide();

							//var vid = $(slides[current]).children("video")[0];
							var vid = getVideo(current);
							if (iOS) { $(vid).show(); }
							vid.play();
						}
						else
						{
							var current_flp = (current - (total - videoCounter) - 1);
							//var flp = window.document['flp_' + current_flp];
							var flp = getFlash(current_flp);
							
							//load polling to trap error
							fLoaded = false;
							fLoadInterval = setInterval(function(){
								try
								{
									flp.videoPlay();
									fLoaded = true;
								}
								catch (error)
								{
									fLoaded = false;
								}
								finally
								{
									if (fLoaded) {
										clearInterval(fLoadInterval);

										var t = setTimeout(function(){
											$(slides[current]).find(".poster").hide('fade', 400);
										}, 400);
									}
								}

							}, 100);

						}
					}

					activeWidth = $('.slideshowControls .textWrapper').width();
					//$(".slideList li.active").css({ 'width': activeWidth});
					/*
					if (iOS) {
						$('.slideshowControls li.active').css({ width: activeWidth});
					}
					else {
						//$('.slideshowControls li.active').animate({ width: activeWidth}, 200);
						$('.slideshowControls li.active').animate({ width: activeWidth}, 200);
					}
					*/					
					//$('.slideshowControls li.active').animate({ width: activeWidth}, 200);

					if (iOS) {
					
						$('.slideshowControls li.active').css({ width: activeWidth});
						
						$(slides[last]).hide();
						$(slides[last]).removeClass('active');
						if (current > total)
						{
							current = 0;
						}
						$(slides[current]).addClass('active');
						$(slides[current]).show();
						
					} else {
						
						$('.slideshowControls li.active').animate({ width: activeWidth}, 200);
						
						$(slides[last]).fadeOut(controlClickFadeSpeed, settings.easing, function(){
							$(slides[last]).removeClass('active');

							if (current > total)
							{
								current = 0;
							}

							$(slides[current]).addClass('active');

							$(slides[current]).fadeIn(controlClickFadeSpeed, settings.easing);
						});
					}

					slideShowTimer = setInterval("slideShow()", settings.intervalSpeed);
				});
				
				var slideSelect;
				var slideImages;

				$(".slideshowPreview").hover(
					function(){$(this).addClass("ss_hover");},
					function(){$(this).removeClass("ss_hover"); $(".slideshowPreview").hide();}
				);

				$(".slideshowControls li").mouseenter(function(){
					if (iOS) { return; }
					
					if ($(this).hasClass('active')) {
						return;
					}

					paused = true;
					//clearInterval(slideShowTimer);
					clearTimeout(slideShowTimer);

					slideSelect = $(this).attr('id').replace('s_', '');
					//console.log($(slides[slideSelect]).hasClass("video"));

					$(this).find(".slideshowPreview").show();
				});

				$(".slideshowControls ul li").mouseleave(function(){
					$(".slideshowPreview").hide();
					paused = false;
				});

			}

			//if (hasVideo && canDoVideo)
			if (settings.hasVideo && settings.canDoVideo)
			{
				//alert('hasVideo && canDoVideo');
				$("img.poster, .playButton").click(function() {
					paused = true;
					//clearInterval(slideShowTimer); //this causes bugs for restarting
					
					if (videoPaused) {
					
						if (iOS)
						{	
							//alert($(slides[current]).find("video"));
							$(slides[current]).find("video").show();
							$(slides[current]).find(".playButton").hide('fade', 100);
							$(slides[current]).find("img.poster").hide('fade', 200);
							$('.slideshow').trigger('mouseout');
						} else {
							$(slides[current]).find(".playButton").hide('fade', 300);
							$(slides[current]).find("img.poster").hide('fade', 400);
						}

						//var video = $(slides[current]).children("video")[0];
						var video = getVideo(current);
						video.play();
					}
				});
				
				//alert('asdf');
				var video = getVideo(current);
				var vPoll = setInterval(function() {
					
					//var video = slides[current].getElementsByTagName("video")[0];
					//var video = $(slides[current]).children("video")[0];
					//var video = getVideo(current);
					//var video = getVideo(current);
				
					if (video != undefined)
					{

						$(video).hover(
							function(){
								mouseover = true;
							},
							function()
							{
								mouseover = false;
							}
						);

						if (video.ended)
						{
							video.currentTime = 0;
							video.pause();
							//$(slides[current]).find(".playButton").show('fade', 300);
							paused = false;
							videoPaused = true;
							//slideShowTimer = setInterval("slideShow()", settings.intervalSpeed);
						}

						if (video.seeking)
						{
							paused = true;
							videoPaused = false;
						}

						if (video.paused)
						{
							videoPaused = true;
							if (!video.seeking) {
								//video.controls = false;
								//$(".playButton").show('fade', 200);
							}

							if (mouseover)
							{
								paused = true;
							}
							else
							{
								paused = false;
							}
						}
						else
						{
							videoPaused = false;
							
							if (!video.controls) {
								video.controls = true;
							}
							//$(slides[current]).find(".playButton").hide('fade', 300);
							paused = true;
						}
					}

				}, 300);
			}

			else if (!settings.canDoVideo)
			{
				$("img.poster, .playButton").click(function() {

					paused = true;
					//console.log('asdfsadf');
					var current_flp = (current - (total - videoCounter) - 1);
					var flp = getFlash(current_flp);
					
					$(slides[current]).find(".playButton").hide('fade', 300);
					$(slides[current]).find("img.poster").hide('fade', 400);
					
					fLoaded = false;
					fLoadInterval = setInterval(function(){
						try
						{
							flp.videoPlay();
							fLoaded = true;
						}
						catch (error)
						{
							fLoaded = false;
						}
						finally
						{

						if (fLoaded) {
							paused = true;
							clearInterval(fLoadInterval);

							var t = setTimeout(function(){
								$(slides[current]).find(".poster").hide('fade', 400);
							}, 400);
						}
						}

					}, 200);

				});

				var current_flp = (current - (total - videoCounter) - 1);
				var flp = getFlash(current_flp);
				var fPoll = setInterval(function() {

					//var current_flp = (current - (total - videoCounter) - 1);
					//flp = window.document['flp_' + current_flp];
					
					if (flp != undefined)
					{
						if (flpPaused)
						{
							if (mouseover)
							{
								paused = true;
							}
							else
							{
								paused = false;
							}
							//$(slides[current]).find(".playButton").show('fade', 300);
						}
						else
						{
							$(slides[current]).find(".playButton").hide('fade', 300);
							paused = true;
						}
					}
				}, 300);
			}

		});

  };
})( jQuery );
