/* Adapted from Trevor Davis http://www.viget.com/ */
(function($) {
	$.fn.ytchromeless = function(options){
		var config = {
			w:640,
			h:360,
			id:'ytplayer',
			params : { 
				allowScriptAccess: 'always',
				wmode: 'transparent'
			}
		};
		return this.each(function(i) {
			var options	= $.extend(config, options),
				$link = $(this),
				// variables		  
				url = "http://www.youtube.com/watch?v="+$link.attr('rel'),
				videoId	= $link.attr('id') || options.id+i,
				ytVideoId  = url.substr(31),
				// new DOM elements
				$video	 = $link.wrap('<div class="ytVideo"></div>').parent(),
				$controls  = $('<div class="ytControls"></div>').appendTo($video),
				$toReplace = $('<div class="video"></div>').prependTo($video).attr('id', videoId),
				$bar,
				$indicator,
				$loaded,
				$mute,
				$play,
				$seek,
				// set up the special player object
				player;
			// bind public methods upfront 
			$video.bind({
				'togglePlay' : function(){ $video.togglePlay(); },
				'play'	   : function(){ $video.play(); },
				'pause'	  : function(){ $video.pause(); },
				'toggleMute' : function(){ $video.toggleMute(); },
				'mute'	   : function(){ $video.mute(); },
				'unMute'	 : function(){ $video.unMute(); },
				'seek'	   : function(){ $video.seek(); },
				'update'	 : function(){ $video.update(); },
				'cue'		: function(){ player.cueVideoById(ytVideoId); }
			});
			// control methods
			$video.mute = function() {
				player.mute();
				$mute.addClass('ytMuted').attr('title','Un-Mute');
			};
			$video.pause = function() {
				player.pauseVideo();
				$play.removeClass('ytPlaying').addClass('paused').attr('title','Play');
			};
			$video.play = function() {
				player.playVideo();
				$play.removeClass('paused').addClass('ytPlaying').attr('title','Pause');
			};
			$video.seek = function(seekPosition) {
				var seekToPosition = Math.round(player.getDuration() * seekPosition);
				player.seekTo(seekToPosition, false);
			};
			$video.toggleMute = function() {
				$mute.hasClass('ytMuted') ? $video.trigger('unMute') : $video.trigger('mute');
				return false;
			};
			$video.togglePlay = function() {
				$play.hasClass('ytPlaying') ? $video.trigger('pause') : $video.trigger('play');
				return false;
			};
			$video.unMute = function() {
				player.unMute();
				$mute.removeClass('ytMuted').attr('title','Mute');
			};
			// player init and update methods
			$video.update = function() {
				if (player && player.getDuration) {
					if (player.getPlayerState() === 1) {
						$video.play();
					} else if (player.getPlayerState() === 0) {
						$video.pause();
					}
					if (player.getVideoBytesLoaded() > -1) {
						var loadedAmount = (player.getVideoBytesLoaded()/player.getVideoBytesTotal())*100;
						$loaded.css('width',loadedAmount+'%');
					}
					if (player.getCurrentTime() > 0) {
						var videoPosition = (player.getCurrentTime()/player.getDuration())*100;
						$indicator.css('left',videoPosition+'%');
					}
				}
			};
			// youtube movie calls this method when it loads
			// DO NOT CHANGE METHOD'S NAME
			onYouTubePlayerReady = function(videoId) {
				var $videoRef = $(document.getElementById(videoId)).parent();
				setInterval(function(){
					$videoRef.trigger('update');
				},250);
				$videoRef.trigger('cue');
			};
			// init methods (the embed)
			$video.init = function() {
				swfobject.embedSWF('http://www.youtube.com/apiplayer?&enablejsapi=1&version=3&playerapiid='+videoId,
					videoId,
					options.w,
					options.h,
					'8',
					null,
					null,
					options.params,
					{ id: videoId },
					function(){
						player = document.getElementById(videoId);
					}
				);
				$video.addControls();
			};
			// add controls
			$video.addControls = function() {
				$play = $('<a/>', {
								href: '#',
								'class': 'ytControlPlayPause',
								title: 'Play',
								click: function() {
								$video.trigger('togglePlay');
								return false;
							}
						}).appendTo($controls);
				$mute = $('<a/>', {
								href: '#',
								'class': 'ytControlVolume',
								title: 'Mute',
								click: function() {
								$video.trigger('toggleMute');
								return false;
							}
						}).appendTo($controls);
				$seek = $('<div/>', {
								'class': 'ytStatus',
								click: function(e) {
									var skipTo	  = e.pageX - $seek.offset().left,
									statusWidth = $seek.width();
									$video.seek(skipTo/statusWidth);
								}
						}).appendTo($controls);
				$bar = $('<div class="ytBar"></div>').appendTo($seek);
				$loaded	= $('<div class="ytLoaded"></div>').appendTo($bar);
				$indicator = $('<span class="ytIndicator"></span>').appendTo($bar);
			};
			$video.init();
		});
	};  
})(jQuery);
