(function ($) {
	var settings;
    $.fn.slider = function (options) {
		var clickedToPlay = false;
        var $this = this,
        settings = {
            'width'			: this.width(),
            'height'		: this.height(),
            'wait'			: 4000,
            'transition'	: 750,
            'direction'		: 'left',
            'showControls'	: true,
            'showProgress'	: true,
            'hoverPause'	: true,
            'autoplay'		: false,
			'slidesInDom'	: 3,
			'showControlsAlways' : false
        },
		slider_div,
		
		oldest_display_item,
		_timer = false,
		counter = 0,
		domCopy,
		totalNumOfChildren,
		displayItemsHolder = [],
		titleHolder = [],
		displayListArr = [], //used to hold variables
		currentSlide = 0, //index for current slide
		videoData, 
		direction, 
		vimeoEmbedStr = '<iframe id="iframe_XXX" src="http://player.vimeo.com/video/XXX?title=0&amp;byline=0&amp;portrait=0&amp;autoplay=1&amp;api=1&amp;player_id=XXX" width="XXX" height="XXX" frameborder="0"></iframe>',
		vimArr = vimeoEmbedStr.split('XXX'), //holds the strings for the videos to be embedded
		vimeoEmbedStr = ''; //clears out variable after it has been used

		//console.log(this) 
		
		
		
		
		var _init =  function(){
			
			
						
			
			$(".vimeoVideo").bind('click',_jumpSlide);
			//$('.classVids a').bind('click',_jumpSlide);
			
			var iframes = $('iframe')
			for(var c = 0; c < iframes.length; c++){
				var thisIframe = iframes[c]
				var srcString = thisIframe.src
				if(srcString.match( /vimeo.com\/video\/[0-9]{8}/)){

					idNumber = srcString.match( /\d{8}/ )
					var oldID = $('iframe:eq('+c+')').attr("id");
					//console.log(oldID);
					$('iframe:eq('+c+')')
						.attr({ 
							'id' 		: 'vim_'+idNumber+" "+oldID,
							'width'		: settings.width
						})
						$(".vimeoVideo").addClass(''+idNumber);
						//console.log("idNumber= "+idNumber);
						//console.log("this is the video"+$("#vimeoVideo").attr("class"));
				}
			}
		
			if (options) {
				$.extend(settings, options);
			}
			
			//console.log($this)
			
			
			
			
			
			
			//bind the button actions
			/*$('#vs_plus').bind('click',_plus); 
			$('#vs_minus').bind('click',_minus);*/
			
			var positionEls = $('<span class="jquery-slider-pages"></span>');
			slider_div = $('<div id="slider_elements_holder"></div>');
			slider_div
				.width(4.1*settings.width)
				.height(settings.height)
			
			totalNumOfChildren = $this.children().size();
			
			
			$this.children().each(function () {

				var thisItem = $(this)
				if(counter < 10){
					thisItem
					.addClass('rel_0'+counter)
				}else{
					thisItem
					.addClass('rel_'+counter)
				}
				
					
				var title = thisItem.attr('alt')

				thisItem.addClass('jquery-slider-element');
				//slider_div.append(thisItem);
				titleHolder.push(thisItem.children('h2').text())
				displayItemsHolder.push(thisItem);
				var videoClass = '';
				if(thisItem.attr('id').match(/vim_[0-9]{8}/)){
					   videoClass = thisItem.attr('id').match(/[0-9]{8}/);
			    }
				
				if(counter < 10){
					positionEls.append('<span rel="0'+counter+'"  class="jquery-slider-page rel_0'+counter+' '+videoClass+'"><div class="hover_arrow"></div></span>');
				}else{
					positionEls.append('<span rel="'+counter+'"  class="jquery-slider-page rel_'+counter+'"><div class="hover_arrow"></div></span>');
				}
				
				counter++
			});
			/*console.log('displayListArr')
			console.log(displayListArr)
			console.log('^^^^^^^^^^^^^^^^')*/
			$this.empty()
			$this.append(slider_div)
			
			 $this.addClass('jquery-slider').width(settings.width).height(settings.height);
		//	console.log('currentslide > '+ currentSlide);
			if (settings.showProgress) {
				
				$this.append(positionEls);
				$('.jquery-slider-page')
					.bind('click',function(evt){
						_jumpSlide(evt)
						
					if(!settings.UltimatePause){
						settings.UltimatePause = true;
						_clearTimer()
						
					}
					})
				
			}
			 if (settings.showControls) {
				var controlPrev = $('<span class="jquery-slider-control jquery-slider-control-prev prev_btn"></span>').bind('click', function () {
					_prev();
					//settings.UltimatePause = true;
					settings.autoplay = true;
					_clearTimer()
				});
				var controlNext = $('<span class="jquery-slider-control jquery-slider-control-next next_btn"></span>').bind('click', function () {
					_next();
					//settings.UltimatePause = true;
					settings.autoplay = true;
					_clearTimer()
				});

				var controlPause = $('<span class="jquery-slider-control jquery-slider-control-pause pause_btn"></span>').bind('click', function () {
					if(!settings.UltimatePause){
						settings.UltimatePause = true;
						_clearTimer()
					}else{
						settings.UltimatePause = false;
						_setTimer();
					}

				});
				$this.append(controlPrev);
				if(document.getElementById('slider_holder')){
					$this.append(controlPause);
				}
				$this.append(controlNext);
				
				
			}
			
			_determineDisplayList();
			if(document.getElementById('slider_holder')){
			
				$('#content_holder')
				.append('<div id="capa_controls"></div><div id="capa_text"><div id="capa_text_area"></div></div>')
				
			}
			_setupDisplay();
			
			 if (settings.hoverPause || settings.showControlsAlways) {
				if(settings.hoverPause && !settings.showControlsAlways){
					$this.bind({
						'mouseenter': function () {
							//console.log(this);
							$this.addClass('jquery-slider-paused')
							$(".jquery-slider-control").css("opacity","1");
							_clearTimer();
						},
						'mouseleave': function () {
							$this.removeClass('jquery-slider-paused');
							$(".jquery-slider-control").css("opacity","0");
							if (settings.autoplay) {
								_setTimer();
							}
						}
					
					});
					
					$("#frame").bind({
						'mouseenter': function () {
							$this.addClass('jquery-slider-paused')
							$(".jquery-slider-control").css("opacity","1");
							_clearTimer();
						},
						'mouseleave': function () {
							$this.removeClass('jquery-slider-paused');
							$(".jquery-slider-control").css("opacity","0");
							if (settings.autoplay) {
								_setTimer();
							}
						}
					
					});
				}
				if(document.getElementById('slider_holder')){
					settings.showControlsAlways = true;
					
				}
				if(settings.hoverPause && settings.showControlsAlways){
				
					$this.bind({
						'mouseenter': function () {
							_clearTimer()
							//console.log('mouseEntered')
						},
						'mouseleave': function () {
							$this.removeClass('jquery-slider-paused');
							if (settings.autoplay) {
								_setTimer();
							}
						}
					});
					$(".jquery-slider-control").css("opacity","1");
				}
            }
			
			
			if(settings.autoplay){
				_setTimer();
			}
			
		}
		
		
		
		
		var _jumpSlide = function(evt){
			
			$('.jquery-slider-page-current').removeClass('jquery-slider-page-current')
			var oldSlide  = currentSlide,
				oldDisplayList = displayListArr;
				
			/**********************
			*	If you are on a regular brands page and click on the vimeo video link
			*/
			
				
			
				var classList = evt.currentTarget.className.split(/\s+/)
				//console.log(classList)
				
						for(x = 0;x < classList.length; x++){
							
							if(classList[x].match(/[0-9]{8}/i)){
								currentSlide = parseInt($('.jquery-slider-page.'+classList[x]+'').attr('rel').match(/[0-9]{2}/),10)
								
							//	return false
								//console.log(parseInt(event.currentTarget.classList[x].match(/[0-9]{2}/),10))
								//console.log('currentSLide has been changed to: '+currentSlide)
							}
					}
					
					
					
					_clearTimer()
					
					//console.log(_timer)
					_determineDisplayList();
					
					//console.log('displayListArr > '+displayListArr)
					slider_div.empty()
					
					_setupDisplay()
					
				
					var videoSrc = $("#slider_elements_holder .rel_0"+currentSlide).attr("src");
					
					//console.log($(".rel_0"+currentSlide));
					$("#slider_elements_holder .rel_0"+currentSlide).attr("src",videoSrc);
					
					
					
				$('iframe').attr("id","player_1");
			clickedToPlay = true;
			vimeoVideoChecking();
			return false
		}
		
	
		
		
		
		var _setupDisplay = function(){
			for( n = 0; n < displayListArr.length; n++){
				slider_div
					.append(displayItemsHolder[displayListArr[n]])
					
			}
			slider_div.css({'left':settings.width*-1});
			//console.log()
			if(currentSlide<10){
				$('.jquery-slider-page.rel_0'+currentSlide)
					.addClass('jquery-slider-page-current')
					.append('<div class="active_arrow"></div>');
			}else{
				$('.jquery-slider-page.rel_'+currentSlide)
					.addClass('jquery-slider-page-current')
					.append('<div class="active_arrow"></div>');
			}
			
			//console.log('')
			$('#hover_text').html(titleHolder[currentSlide])
			//console.log($('#hover_text'))
			//console.log(titleHolder[currentSlide])
			$('#capa_text')
				.empty()
				.append(displayItemsHolder[displayListArr[1]].children('.caption').clone())
			
		}

		//used to keep track of what should be on the display area
		var _determineDisplayList = function (){ 
			//if the currentSlideNumber gets too large or too small make it go back to the beginning or end
			if(currentSlide > totalNumOfChildren-1){currentSlide = 0};
			if(currentSlide < 0){currentSlide = totalNumOfChildren-1};
			
			displayListArr[0] = currentSlide-1;
			if(displayListArr[0] == -1){
				displayListArr[0] = totalNumOfChildren-1;
			};
			displayListArr[1] = currentSlide;
			displayListArr[2] = currentSlide+1;
			if(displayListArr[2] == totalNumOfChildren){
				displayListArr[2] = 0;
			};
			//console.log('display list = '+displayListArr);
		};

	var  _playVideo	= function (Event) {

			idNumber = "";
			clickEvent.target;
			var classes = clickEvent.target.classList;
			for(n=0;n<classes.length;n++){
				if(classes[n].match( /vimeo_[0-9]{8}/)){
					thisClass = classes[n];
					idNumber = thisClass.substr(thisClass.indexOf('_')+1);
					//console.log('idNumber > '+ idNumber)
					embedVideo(idNumber);
				};
			};
			
			function embedVideo(idNumber){
				//to account for letterboxing of the video I make sure to get the videos at the height and width of the cotaining object
				height = $('.vimeo_'+idNumber).height();
				width = $('.vimeo_'+idNumber).width();
				//embed the video with the array of string values created when script first loads
				$('.vimeo_'+idNumber).replaceWith(vimArr[0]+currentSlide+vimArr[1]+idNumber+vimArr[2]+currentSlide+vimArr[3]+width+vimArr[4]+height+vimArr[5]);
			};
			
			//adds the froogaloop javascript library to commnicate with the iframe object.
			var head = document.getElementsByTagName('head')[0];
			var script= document.createElement('script');
			script.type= 'text/javascript';
			script.src= 'froogaloop.min.js';
			head.appendChild(script);
			
			
		};
		//need to find out how to handle pausing the video when user clicks next or back
		//http://vimeo.com/api/docs/player-js

	var _next = function () { // next/right
			
			pauseVideo();
			$('#slider_elements_holder').stop( true , true )
			oldest_display_item = displayListArr[0];
			if(2 < $('#slider_elements_holder').children().size()){
				if(10 <= displayListArr[0]){
					//console.log('top')
					//console.log('10 < displayListArr[0]: '+10 <= displayListArr[0] );
					//console.log($('.rel_'+oldest_display_item+'.jquery-slider-element'))
					$('.rel_'+oldest_display_item+'.jquery-slider-element').remove()
				}else{
					//console.log('bottom')
					//console.log('10 < displayListArr[0]: '+10 <= displayListArr[0] );
					//console.log($('.rel_0'+oldest_display_item+'.jquery-slider-element'))
					$('.rel_0'+oldest_display_item+'.jquery-slider-element').remove()
				}
			}
			currentSlide++;
			_determineDisplayList();
			//console.log('next > '+ currentSlide);
			direction = 1;
			advanceSlides();
			vimeoVideoChecking();
		}

	var _prev = function () { // back/left
			
			pauseVideo();
			$('#slider_elements_holder').stop( true , true )
			if(2 < $('#slider_elements_holder').children().size()){
				if(10 < displayListArr[0]){
					//console.log($('.rel_'+oldest_display_item+'.jquery-slider-element'))
					$('.rel_'+displayListArr[2]+'.jquery-slider-element').remove()
				}else{
					//console.log($('.rel_0'+oldest_display_item+'.jquery-slider-element'))
					$('.rel_0'+displayListArr[2]+'.jquery-slider-element').remove()
					
				}
			}
			
			currentSlide--;
			_determineDisplayList();
			//console.log('back > '+ currentSlide);
			direction = 0;
			advanceSlides();
			vimeoVideoChecking();
		}
		
	var _setTimer = function(){
		//console.log("on");
		//if(!settings.UltimatePause){
			 _timer = setInterval(_next, settings.wait);
			 $this.removeClass('jquery-slider-paused')
				$('.pause_btn')

					.removeClass('ultimate_pause')
			//}else{
				//return;
			//}
		}
		
	var _clearTimer = function(){
		clearInterval(_timer);
		$this.addClass('jquery-slider-paused')
		$('.pause_btn')
			.addClass('ultimate_pause')
		 
	}

		function pauseVideo(){
			if(document.getElementById('iframe_'+currentSlide)){
				iframe = document.getElementById('iframe_'+currentSlide);
				iframe.api("api_pause");
				//console.log('video found playing');
				
				//iframe.postMessage({"method": "pause"});
			}
		}

		function advanceSlides(){
		
			 if (settings.showProgress) {
				$('.jquery-slider-page')
					.removeClass('jquery-slider-page-current')
				$('.active_arrow').remove();
				//	.empty();
				//console.log('currentSlide  >  '+currentSlide)
				$('.jquery-slider-page:nth-child(' + (currentSlide+1) + ')').addClass('jquery-slider-page-current').append('<div class="active_arrow"></div>');
			}
			
			if(direction == 1){ //going to right
				
				
				//add the new list item at the right. this does not affect the items the user can see
				slider_div.append(displayItemsHolder[displayListArr[2]]);
				//then remove the item on the far left this makes everything appear to shift 640 pixels left
				//console.log(displayItemsHolder[displayListArr[2]])
				//to account for this add move everything 640 pixels right from the -640 the ul is normally at.
				slider_div.css( "left", "0" );
				//and slowly move the old item to the right
				
				slider_div.animate({"left": "-="+settings.width+"px"}, 1000,"easeInOutCirc");
				
			
				
			}else{ //going to left
				//add the new list item at the right. this does not affect the items the user can see
				slider_div.prepend(displayItemsHolder[displayListArr[0]]);
				//then remove the item on the far left this makes everything appear to shift 640 pixels left
				
				//to account for this add move everything 640 pixels right from the -640 the ul is normally at.
				slider_div.css( "left", settings.width*-2 );
				//and slowly move the old item to the right
				slider_div.animate({"left": "+="+settings.width+"px"}, 1000,"easeInOutCirc");
			
				//console.log("left");
			}
			
			$('#hover_text').html(titleHolder[currentSlide]);
			$('#capa_text')
				.empty()
				.append(displayItemsHolder[displayListArr[1]].children('.caption').clone())
		}
		
		_init();
		
		if(document.getElementById('slider_holder')){
			
			
			
			$('.jquery-slider-page')
			.mouseenter(function(evt){
			
				//console.log('entered')
				//console.log(evt)
					var classList = evt.currentTarget.className.split(/\s+/)
						for(x = 0;x < classList.length; x++){
							if(classList[x].match(/rel_[0-9]{2}/i)){
								
								hoverslide = parseInt(classList[x].match(/[0-9]{2}/),10)
								//console.log(currentSlide)
								$('#hover_text')
									.html(titleHolder[hoverslide])
									//.css({'padding-left': hoverslide * 48+'px'})
								
							}
						}
					
					
				})
			.mouseleave(function(evt){
				$('#hover_text')
					.html(titleHolder[currentSlide])
			})
		}
		
		function vimeoVideoChecking(){
			
			function getInternetExplorerVersion()
			// Returns the version of Windows Internet Explorer or a -1
			// (indicating the use of another browser).
			{
			   var rv = -1; // Return value assumes failure.
			   if (navigator.appName == 'Microsoft Internet Explorer')
			   {
				  var ua = navigator.userAgent;
				  var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
				  if (re.exec(ua) != null)
					 rv = parseFloat( RegExp.$1 );
			   }
			   return rv;
			}
			
		    
			var f; 
			
			// detect if apple
			var Apple = {};  
			Apple.UA = navigator.userAgent;  
			Apple.Device = false;  
			Apple.Types = ["iPhone", "iPod", "iPad"];  
			for (var d = 0; d < Apple.Types.length; d++) {  
				var t = Apple.Types[d];  
				Apple[t] = !!Apple.UA.match(new RegExp(t, "i"));  
				Apple.Device = Apple.Device || Apple[t];  
			}; 
			
			var ver = getInternetExplorerVersion();
			
				Froogaloop( $('#player_1')[0] ).addEvent('playProgress',playing);
				Froogaloop( $('#player_1')[0] ).addEvent('ready',ready); 
			
			
			
			function ready () {
				//console.log('reaady video player')
				f = $f( $('#player_1')[0] );
				
				f.addEvent('finish', function() {
					settings.autoplay = true;
					_setTimer();
					_next();
				});
				
				
				
				
				if(clickedToPlay == true){ 
					$f( $('#player_1')[0] ).api('api_play');
						
					ifApple();
					clickedToPlay = false;
					settings.autoplay = false;
					_clearTimer()
				};
					f.addEvent('playProgress',playing); 
			};
			function ifApple(){
				if (Apple.Device == true){
					$f( $('#player_1')[0] ).api('api_pause');
				}
			};
			
			function playing(){
					
					settings.autoplay = false;
					_clearTimer()
					//console.log("playing")
					
			 };

			
			/*$('.vimeoVideo').click(function() {
				//console.log(this.id);
				
				if (Apple.Device == true){
					$f( $('#player_1')[0] ).api('api_stop');
				}else{
					$f( $('#player_1')[0] ).api('api_pause');
				}
					
			});*/
			
			$('.jquery-slider-control').click(function(){
				$f( $('#player_1')[0] ).api('api_unload');
				Froogaloop( $('#player_1')[0] ).removeEvent('ready',ready);
				//console.log("pause");
			})
			//console.log('checkinhg for iframes')
			
			
			
			
		};//end of vimeoVideoChecking
	
		
	};
	
	
	
	
})(jQuery);
