
if (typeof(YouTubeSearch) == "undefined")
YouTubeSearch = { };
YouTubeSearch.init = function() {
this.init = function(){}
youTubePlayer = document.createElement("div");
document.getElementsByTagName('body')[0].appendChild(youTubePlayer)
html = []
html.push('<div id="youTubePlayer" style="display: none">')
html.push('<div class="youTubePlayerHeader"><a class="youTubePlayerClose" href="javascript:YouTubeSearch.close()" title=""><span><wicket:message key="closeVideo">Close</wicket:message></span></a></div>');
if (YouTubeSearch.childHtml) {
html.push(YouTubeSearch.childHtml);
}
html.push('<div class="youTubePlayerObject" id="youTubePlayerContainer"></div>')
html.push('</div>')
youTubePlayer.innerHTML=html.join('');
}
YouTubeSearch.search = function(artist, title, results, startPlaying) {
this.init();
document.getElementById('youTubePlayer').style.display="none";
if (this.indicator) {
document.getElementById(this.indicator).style.display = "block"; 
}
var query = (title) ? encodeURIComponent(artist) + " " + encodeURIComponent(title) : encodeURIComponent(artist);
var callback = (startPlaying == true) ? "_displayPlay" : "_displayWait";
var url = "http://gdata.youtube.com/feeds/api/videos?v=2&q="+query+"&alt=json-in-script&callback=YouTubeSearch."+callback+"&max-results="+results+"&format=5";
if (this.youTubeScript) {
this._jsonUnload(this.youTubeScript);
}
this.youTubeScript = this._jsonLoad(url);
this.currentQuery = query;
}
YouTubeSearch._jsonLoad = function(url, callback) {
var script = document.createElement("script")
script.setAttribute("type", "text/javascript")
script.setAttribute("src", url)
script.setAttribute("charset", "utf-8")
document.getElementsByTagName('head')[0].appendChild(script);
if (callback) {
if (script.addEventListener) {
 script.addEventListener("load", callback, false)
} else if (document.all && !window.opera) {
 script.onreadystatechange=function(){
if (script.readyState == "loaded" || script.readyState == "complete") {
callback()
script.onReadyStateChange = null
}
}
}
}
return script;
}
YouTubeSearch._jsonUnload = function(script) {
document.getElementsByTagName('head')[0].removeChild(script);
}
YouTubeSearch.play = function(playerUrl, startPlaying) {
var id = "youTubePlayerObject";
if (!document.getElementById(id)) {
var c = document.createElement("div");
c.setAttribute("id", id);
document.getElementById("youTubePlayerContainer").appendChild(c);
}
var att = {
data:playerUrl + '&rel=0&border=0&fs=1&showsearch=0&enablejsapi=1&autoplay=' + (startPlaying?1:0),
width:"405",
height:"245"
}
var par = {allowfullscreen: 'true', allowscriptaccess: 'always'}
document.getElementById('youTubePlayer').style.display="block"
player = swfobject.createSWF(att, par, id)
}
function onYouTubePlayerReady(playerId) {
ytplayer = document.getElementById("youTubePlayerObject");
ytplayer.addEventListener("onStateChange", "onytplayerStateChange");
}
function onytplayerStateChange(newState) {
switch(newState) {
case 0: if (YouTubeSearch.onVideoEnded) YouTubeSearch.onVideoEnded(); break;
case 1: if (YouTubeSearch.onVideoPlaying) YouTubeSearch.onVideoPlaying(); break;
case 2: if (YouTubeSearch.onVideoPause) YouTubeSearch.onVideoPause(); break;
case 3: if (YouTubeSearch.onVideoBuffering) YouTubeSearch.onVideoBuffering(); break;
case 5: if (YouTubeSearch.onVideoCued) YouTubeSearch.onVideoCued(); break;
}
}
YouTubeSearch._displayPlay=function(data) {
this._display(data, true);
}
YouTubeSearch._displayWait=function(data) {
this._display(data, false);
}
YouTubeSearch._display=function(data, startPlaying) {
var feed = data.feed;
this.entries = feed.entry || [];
var html = ['<ul class="videos">'];
for (var i = 0; i < this.entries.length; i++) {
var entry = this.entries[i];
var title = entry.title.$t;
var thumbnailUrl = entry.media$group.media$thumbnail[0].url;
var playerUrl = entry.media$group.media$content[0].url;
html.push('<li><a href="javascript:YouTubeSearch.play(\'', playerUrl, '\', true)" title="', title,
'"><img src="',
thumbnailUrl, '" width="130" height="97"/><span class="title"><strong>', title, '</strong></span></a></li>');
}
html.push('</ul><div class="youTubeBranding"><a href="http://www.youtube.com/" target="_blank"><img src="http://code.google.com/apis/youtube/images/badge3.gif" /></a></div>')
document.getElementById('youTubeResults').innerHTML = html.join('');
if (this.entries.length > 0 && startPlaying) {
this.play(this.entries[0].media$group.media$content[0].url, true);
}
if (this.onLoad) {
this.onLoad();
}
if (this.indicator) {
document.getElementById(this.indicator).style.display = "none"; 
}
}
YouTubeSearch.close = function() {
swfobject.removeSWF('youTubePlayerObject');
document.getElementById('youTubePlayer').style.display="none";
 }
YouTubeSearch.setPlaylist = function(playList, startPlaying) {
this._playList = playList
if (startPlaying) this.playIndex(0)
}
YouTubeSearch.playIndex = function(index, lang) {
if (this._playList && this._playList['length'] && this._playList.length > index) {
this.defaultSearch(this._playList[index]['artist'], this._playList[index]['song'], 1, true, lang)
YouTubeSearch.onVideoEnded = function(){YouTubeSearch.playIndex(index + 1, lang)};
}
}
YouTubeSearch.defaultSearch = YouTubeSearch.search

var script = undefined;
function write() {
if (!song) alert("no song");
document.getElementById('lyrics').innerHTML = song.lyrics ? song.lyrics.replace(/\n/g, "<br />") : "";
document.getElementById('lyrics').style.display = 'block';
if (song.url)
document.getElementById('lyricsSourceLink').innerHTML = song.url;
else
document.getElementById('lyricsSourceLink').parentNode.style.display = 'none';
document.getElementById('lyricsSource').style.display = 'block';
document.getElementById('lyricsIndicator').style.display = 'none';
}
function loadJavaScript(url, callback) {
var head = document.getElementsByTagName('head')[0]
if (script) {
script.onReadyStateChange = null
head.removeChild(script)
}
script = document.createElement("script")
script.setAttribute("type", "text/javascript")
script.setAttribute("src", url)
script.setAttribute("charset", "utf-8")
head.appendChild(script)
if (script.addEventListener) {
 script.addEventListener("load", callback, false)
} else if (document.all && !window.opera) {
 script.onreadystatechange=function(){
if (script.readyState == "loaded" || script.readyState == "complete") {
callback()
script.onReadyStateChange = null
}
}
}
}
function getSong(artistName, songName) {
var url = getEscapedURL(artistName, songName);
document.getElementById('lyrics').style.display = 'none';
document.getElementById('lyricsSource').style.display = 'none';
document.getElementById('lyricsIndicatorLink').innerHTML = url;
document.getElementById('lyricsSourceLink').innerHTML = url;
document.getElementById('lyricsIndicator').style.display = 'block';
loadJavaScript(url, write);
}
function getSong(artistName, songName, id) {
var url = getEscapedURL2(artistName, songName, id);
var url2 = getEscapedURL(artistName, songName);
document.getElementById('lyrics').style.display = 'none';
document.getElementById('lyricsSource').style.display = 'none';
document.getElementById('lyricsIndicatorLink').innerHTML = url2;
document.getElementById('lyricsSourceLink').innerHTML = url2;
document.getElementById('lyricsIndicator').style.display = 'block';
loadJavaScript(url, write);
}
function getSongByLyrics(url, shortUrl, artistName, songName, id) {
var loadUrl = getEscapedURL3(artistName, songName, id); 
document.getElementById('lyrics').style.display = 'none';
document.getElementById('lyricsSource').style.display = 'none';
document.getElementById('lyricsIndicatorLink').innerHTML = url;
document.getElementById('lyricsSourceLink').innerHTML = shortUrl;
document.getElementById('lyricsSourceLink').setAttribute('title', url);
document.getElementById('lyricsIndicator').style.display = 'block';
loadJavaScript(loadUrl, write);
}
function getEscapedURL(artistName, songName) {
artistName = escape(artistName.replace(/ /g, "_"));
songName = escape(songName.replace(/ /g, "_"));
return "http://lyrics.wikia.com/lyrics/" + artistName + ":" + songName
}
function getEscapedURL2(artistName, songName, id) {
artistName = escape(artistName.replace(/ /g, "_"));
songName = escape(songName.replace(/ /g, "_"));
return "http://www.songtexte.com/api?artist=" + artistName + "&song=" + songName + "&id=" + id + "&fmt=json"
}
function getEscapedURL3(artistName, songName, id) {
artistName = escape(artistName.replace(/ /g, "_"));
songName = escape(songName.replace(/ /g, "_"));
return "http://www.songtexte.com/api?artist=" + artistName + "&song=" + songName + "&lid=" + id + "&fmt=json"
}
