(function($){		$.fn.youTubeEmbed = function(settings){				// Settings can be either a URL string,		// or an object				if(typeof settings == 'string'){			settings = {'video' : settings}		}				// Default values				var def = {			width		: 550,			progressBar	: true		};				settings = $.extend(def,settings);				var elements = {			originalDIV	: this,	// The "this" of the plugin			container	: null,	// A container div, inserted by the plugin			control		: null,	// The control play/pause button			player		: null,	// The flash player			progress	: null,	// Progress bar			elapsed		: null	// The light blue elapsed bar		};				try{				settings.videoID = settings.video.match(/v=(.{11})/)[1];						// The safeID is a stripped version of the			// videoID, ready for use as a function name			settings.safeID = settings.videoID.replace(/[^a-z0-9]/ig,'');				} catch (e){			// If the url was invalid, just return the "this"			return elements.originalDIV;		}		// Fetch data about the video from YouTube's API		var youtubeAPI = 'http://gdata.youtube.com/feeds/api/videos?v=2&alt=jsonc';		$.get(youtubeAPI,{'q':settings.videoID},function(response){						var data = response.data;				if(!data.totalItems || data.items[0].accessControl.embed!="allowed"){								// If the video was not found, or embedding is not allowed;								return elements.originalDIV;			}			// data holds API info about the video:						data = data.items[0];						settings.ratio = 3/4;			if(data.aspectRatio == "widescreen"){				settings.ratio = 9/16;			}						settings.height = Math.round(settings.width*settings.ratio);			// Creating a container inside the original div, which will			// hold the object/embed code of the video			elements.container = $('<div>',{className:'flashContainer',css:{				width	: settings.width,				height	: settings.height			}}).appendTo(elements.originalDIV);			// Embedding the YouTube chromeless player			// and loading the video inside it:			elements.container.flash({				swf			: 'http://www.youtube.com/apiplayer?enablejsapi=1&version=3',				id			: 'video_'+settings.safeID,				height		: settings.height,				width		: settings.width,				allowScriptAccess:'always',				wmode		: 'transparent',				flashvars	: {					"video_id"		: settings.videoID,					"playerapiid"	: settings.safeID				}			});			// We use get, because we need the DOM element			// itself, and not a jquery object:						elements.player = elements.container.flash().get(0);			// Creating the control Div. It will act as a ply/pause button			elements.control = $('<div>',{className:'controlDiv play'})							   .appendTo(elements.container);			// If the user wants to show the progress bar:			if(settings.progressBar){				elements.progress =	$('<div>',{className:'progressBar'})									.appendTo(elements.container);				elements.elapsed =	$('<div>',{className:'elapsed'})									.appendTo(elements.progress);								elements.progress.click(function(e){										// When a click occurs on the progress bar, seek to the					// appropriate moment of the video.										var ratio = (e.pageX-elements.progress.offset().left)/elements.progress.outerWidth();										elements.elapsed.width(ratio*100+'%');					elements.player.seekTo(Math.round(data.duration*ratio), true);					return false;				});			}			var initialized = false;						// Creating a global event listening function for the video			// (required by YouTube's player API):						window['eventListener_'+settings.safeID] = function(status){				var interval;								if(status==-1)	// video is loaded				{					if(!initialized)					{						// Listen for a click on the control button:												elements.control.click(function(){							if(!elements.container.hasClass('playing')){																// If the video is not currently playing, start it:								elements.control.removeClass('play replay').addClass('pause');								elements.container.addClass('playing');								elements.player.playVideo();																if(settings.progressBar){									interval = window.setInterval(function(){										elements.elapsed.width(											((elements.player.getCurrentTime()/data.duration)*100)+'%'										);									},1000);								}															} else {																// If the video is currently playing, pause it:																elements.control.removeClass('pause').addClass('play');								elements.container.removeClass('playing');								elements.player.pauseVideo();																if(settings.progressBar){									window.clearInterval(interval);								}							}						});												initialized = true;					}					else{						// This will happen if the user has clicked on the						// YouTube logo and has been redirected to youtube.com						if(elements.container.hasClass('playing'))						{							elements.control.click();						}					}				}								if(status==0){ // video has ended					elements.control.removeClass('pause').addClass('replay');					elements.container.removeClass('playing');				}			}						// This global function is called when the player is loaded.			// It is shared by all the videos on the page:						if(!window.onYouTubePlayerReady)			{								window.onYouTubePlayerReady = function(playerID){					document.getElementById('video_'+playerID).addEventListener('onStateChange','eventListener_'+playerID);				}			}		},'jsonp');		return elements.originalDIV;	}})(jQuery);
