// script: youtube_player.js
// author: emjot[ms]

// grab youtube player data and init buildYoutubePlayer
function prepareYoutubePlayers() {

	// scan document for youtube players
	$$(".youtube-player").each(function(player){
		
		// fetch id, user, tags
		var player_id   = player.getAttribute('id');
		var player_user = player.getElement('.youtube-user').innerHTML;
		// parse tags to "%22tag1+tag2+tag3%22" syntax
		var player_tags = escape('"' + player.getElement('.youtube-tags').innerHTML.replace(/\s/g, "").replace(/,/g, "+") + '"');
		var player_intro = player.getElement('.youtube-intro').innerHTML;
		
		buildYoutubePlayer(player_id, player_user, player_tags, player_intro);
	});
}

// build specific youtube player
function buildYoutubePlayer(id, user, tags, intro){

	// youtube feed api settings
	var yt_version      = '2';
	var yt_url	        = 'http://gdata.youtube.com/feeds/api/videos';
	var yt_format       = 'rss';
	var yt_orderby      = 'viewCount';
	// youtubes max result number is 50 atm
	var yt_result_count = '50';
	
	
	// video data
	var player_videos = new Array();
	
	// request feed
	var feed = new google.feeds.Feed(yt_url + "?v=2" + "&author=" + user + "&alt=" + yt_format + "&q=" + tags + "&orderby=" + yt_orderby + "&max-results=" + yt_result_count);
	feed.setResultFormat(google.feeds.Feed.XML_FORMAT);
	feed.setNumEntries(yt_result_count);
	feed.load(function(result){
		if(!result.error){
			var items = result.xmlDocument.getElementsByTagName("item");

			for (var i = 0; i < items.length; i++) {
				
				player_videos[i] = new Object();
				
				player_videos[i]["title"]  = items[i].getElementsByTagName("title")[0].firstChild.nodeValue;
				player_videos[i]["author"] = items[i].getElementsByTagName("author")[0].firstChild.nodeValue;

				if(BrowserDetect.browser != "Safari") {					
					player_videos[i]["keywords"]    = items[i].getElementsByTagName("media:keywords")[0].firstChild.nodeValue;
					player_videos[i]["description"] = items[i].getElementsByTagName("media:description")[0].firstChild.nodeValue;
					player_videos[i]["thumb"]       = items[i].getElementsByTagName("media:thumbnail")[0].getAttribute('url');
					player_videos[i]["videoId"]     = items[i].getElementsByTagName("yt:videoid")[0].firstChild.nodeValue;
					
				} else {
					// safari doesnt suport xml:namespaces ("media:keywords" -> "keywords")
					player_videos[i]["keywords"]    = items[i].getElementsByTagName("keywords")[0].firstChild.nodeValue;
					player_videos[i]["description"] = items[i].getElementsByTagName("description")[0].firstChild.nodeValue;
					player_videos[i]["thumb"]       = items[i].getElementsByTagName("thumbnail")[0].getAttribute('url');
					player_videos[i]["videoId"]     = items[i].getElementsByTagName("videoid")[0].firstChild.nodeValue;	
			  	}
				
				// remove appended tags ( ... TAG1 TAG2 usw.) from description
				player_videos[i]["description"] = player_videos[i]["description"].replace(/\s\.\.\..*$/,'');
			}
			
			// if feed contains no videos remove data container
			// else generate youtube player and replye data container
			if(player_videos.length < 1){
				$(id).remove();
			} else {
		
				// build and init player
				var player_container = new Element('div').addClass('mapping');
   
				// hidden input with first video id
				new Element('input').setProperties({
					id:	  "yt-"+id+"-video",
					type: "hidden",
					value: player_videos[0]["videoId"]
				}).injectInside(player_container);
   
				// video player
				var player   = new Element('div').addClass('youtube').setProperties({ id: id });
				new Element('h3').setProperties({
					id: "yt-"+id +"-title"
				}).appendText(player_videos[0]["title"]).injectInside(player);
				new Element('div').setProperties({
					id: id+"-player"
				}).appendText('You need Flash player 8+ and JavaScript enabled to view this video.').injectInside(player);
   
				// controls
				var controls = new Element('div').addClass('controls');
				// mute
				new Element('img').setProperties({
					alt: "mute",
					src: "/fileadmin/templates/leuphana_main/images/yt_mute.gif"
				}).injectInside(
					new Element('a').addClass('mute').setProperties({
						href:    "javascript: mute('yt-"+id+"');",
						title:   "mute",
						id:      "yt-"+id+"-mute"
					}).injectInside(controls)
				);
				// unmute
				new Element('img').setProperties({
					alt: "unmute",
					src: "/fileadmin/templates/leuphana_main/images/yt_unmute.gif"
				}).injectInside(
					new Element('a').addClass('unmute').setProperties({
						href:    "javascript: unmute('yt-"+id+"');",
						title:   "unmute",
						id:      "yt-"+id+"-unmute"
					}).setStyle('display', 'none').injectInside(controls)
				);
				// play
				new Element('img').setProperties({
					alt: "play",
					src: "/fileadmin/templates/leuphana_main/images/yt_play.gif"
				}).injectInside(
					new Element('a').addClass('play').setProperties({
						href:    "javascript: play('yt-"+id+"');",
						title:   "play",
						id:      "yt-"+id+"-play"
					}).injectInside(controls)
				);
				// pause
				new Element('img').setProperties({
					alt: "pause",
					src: "/fileadmin/templates/leuphana_main/images/yt_pause.gif"
				}).injectInside(
					new Element('a').addClass('pause').setProperties({
						href:    "javascript: pause('yt-"+id+"');",
						title:   "pause",
						id:      "yt-"+id+"-pause"
					}).setStyle('display', 'none').injectInside(controls)
				);
				// stop
				new Element('img').setProperties({
					alt: "stop",
					src: "/fileadmin/templates/leuphana_main/images/yt_stop.gif"
				}).injectInside(
					new Element('a').addClass('stop').setProperties({
						href:    "javascript: stop('yt-"+id+"');",
						title:   "stop",
						id:      "yt-"+id+"-stop"
					}).injectInside(controls)
				);
				// inject controls
				controls.injectInside(player);
   
				// description
				new Element('p').addClass('description').setProperties({
					id: "yt-"+id+"-description"
				}).appendText(player_videos[0]["description"]).injectInside(player);
   
				// inject player into player-container
				player.injectInside(player_container);
   
				// only build videolist if more than one video is found
   
				if(player_videos.length > 1){
					// intro videolist
					new Element('h3').appendText(intro).injectInside(player_container);
   
					// build thumbs
					var video_list = new Element('ul').addClass('videolist');
   
					for(i = 0; i < player_videos.length; i++) {
   
						var entry = new Element('a').setProperties({
							href: "javascript: loadFromThumb('yt-"+id+"', '"+player_videos[i]["videoId"]+"', 0, '"+player_videos[i]["title"]+"', '"+player_videos[i]["description"]+"');"
						});
   
						new Element('img').setProperties({
							src: "/fileadmin/templates/leuphana_main/images/yt_screen.gif"
						}).setStyle('background-image',"url(" + player_videos[i]["thumb"] + ")").injectInside(entry);
						new Element('span').appendText("" + player_videos[i]["title"]).injectInside(entry);
   
						entry.injectInside( new Element('li').injectInside(video_list));
					}
					// inject thumbs
					video_list.injectInside( new Element('div').addClass('cropwidth').injectInside(player_container));
				}
   
				// replace mapping-container with player-container
				$(id).replaceWith(player_container);
   
				// init swfobject replacement
				var s1 = new SWFObject("http://www.youtube.com/apiplayer?enablejsapi=1&playerapiid=yt-"+id,"yt-"+id,"450","253","8");
				s1.addParam("allowScriptAccess","always");
				s1.addParam("bgcolor","#ffffff");
				s1.write(id+"-player");
			}
			
		} else {
			// in case of an error remove data container html
			$(id).remove();
		}
	});
}

// youtube player event (on ready -> set volume to 80%, init first video)
function onYouTubePlayerReady(playerId){
	cueNewVideo(playerId, $(playerId+"-video").getAttribute('value'), 0);
}

// youtube player control methods
function fetch_player(id){
	return $(id);
}

// loads video only
function cueNewVideo(id, vid, startSeconds) {
	ytplayer = fetch_player(id);
 	if (ytplayer) {
	     ytplayer.cueVideoById(vid, parseInt(startSeconds));
  	}
}

// loads video and inits play
function loadNewVideo(id, vid, startSeconds) {
	ytplayer = fetch_player(id);		
	if (ytplayer) {
    	ytplayer.loadVideoById(vid, parseInt(startSeconds));

		$(id+"-play").setStyle('display', 'none');
		$(id+"-pause").setStyle('display', 'inline-block');
	}
}

function play(id) {
	ytplayer = fetch_player(id);
	if (ytplayer) {
	    ytplayer.playVideo();
	
		$(id+"-play").setStyle('display', 'none');
		$(id+"-pause").setStyle('display', 'inline-block');
	}
}
		
function pause(id) {
	ytplayer = fetch_player(id);
	if (ytplayer) {
	    ytplayer.pauseVideo();
	
		$(id+"-play").setStyle('display', 'inline-block');		
		$(id+"-pause").setStyle('display', 'none');
	}	
}

function stop(id) {
	ytplayer = fetch_player(id);
  	if (ytplayer) {
	    ytplayer.stopVideo();

		$(id+"-play").setStyle('display', 'inline-block');		
		$(id+"-pause").setStyle('display', 'none');
	}	
}
				
function mute(id) {
	ytplayer = fetch_player(id);
	if (ytplayer) {
	    ytplayer.mute();
	
		$(id+"-mute").setStyle('display', 'none');		
		$(id+"-unmute").setStyle('display', 'inline-block');
	}	
}

function unmute(id) {
	ytplayer = fetch_player(id);
	if (ytplayer) {
		ytplayer.unMute();
		
		$(id+"-mute").setStyle('display', 'inline-block');
		$(id+"-unmute").setStyle('display', 'none');
	}
}

function setVolume(id, newVolume) {
	ytplayer = fetch_player(id);
	if (ytplayer) {
		ytplayer.setVolume(newVolume);
	}
}

// youtube thumb method
function loadFromThumb(id, vid, startSeconds, title, description){
	loadNewVideo(id, vid, startSeconds);
	$(id+"-title").innerHTML = title;
	$(id+"-description").innerHTML = description;
}

