﻿﻿/*---------------------ONAIRBOX.JS--------------------------------------*/
/* Author: mpiller
/* Last Modification Date: 29.09.2011
/* Main Purpose: Importing data from www3 playlist and scheduler and drop it to the YOU FM onAirBox
/* Functions:
/* jsonSchedulerImport() - Imports JSON Data from hr-online scheduler
/* jsonPlaylistImportNow() - Imports JSON Data from hr-online playlist NOW  scheme
/* jsonPlaylistImportNext() - Imports JSON Data from hr-online playlist NEXT scheme
/* jsonPlaylistImportLast() - Imports JSON Data from hr-online playlist LAST scheme
/* jsonPlaylistRefreshNow() - Snippet starting a timer for refreshing data NOW
/* jsonPlaylistRefreshNext() - Snippet starting a timer for refreshing data NEXT
/* jsonPlaylistRefreshLast() - Snippet starting a timer for refreshing data LAST
/* jsonSchedulerRefresh() - Snippet starting a timer for refreshing data
/* starNameConversion(performer)- Converts a "long Starname" to the main performer
/* jsonStarLexikon(starName,timePos) - Imports JSON Data from starlexikon.json
/* starName Param String, valid Strings for timePos Param -> "Now","Next","Last"
/* timeConversion(time) - Converts the server-timestamp to a comparable time
 /*----------------------------------------------------------------------*/
//Initiale Funktionen beim Laden der Seite
$(document).ready(function(){

		//jqueryPopupWindow.js erweiteret JQuery um die Funktion .popupWindow()
		//Wird hier benutzt um einfache JQuery Elemente als Trigger für externe Pop-Ups (keine Tabs)
		//zu setzen. Attribute des Pop-Ups werden im Block übergeben.
		$('a.webcam').popupWindow({
		width:750,
		height:481
		});
		$('a.livestream').popupWindow({
		width:501,
		height:421
		});
		$('a.playlist').popupWindow({
		width:590,
		height:490
		});

		// Zeigt/Versteckt die Tooltips zu den Buttons
		// Hilfs-Bibiliothek overlib.js erzeugt die Tooltips mit statischem Text
		$('a.livestream').mouseenter(function(){
		renderOverlibBottom("Öffnet ein Pop-Up Fenster zum YOU FM Webradio");
		});
		$('a.livestream').mouseleave(function(){
		return nd();
		});

		$('a.playlist').mouseenter(function(){
		renderOverlibBottom("Öffnet ein Pop-Up Fenster zur YOU FM Playlist");
		});
		$('a.playlist').mouseleave(function(){
		return nd();
		});

		$('a.webcam').mouseenter(function(){
		renderOverlibBottom("Öffnet ein Pop-Up Fenster zu den YOU FM Webcams.");
		});
		$('a.webcam').mouseleave(function(){
		return nd();
		});

		$('a.email').mouseenter(function(){
		renderOverlibBottom("Öffnet ein E-Mail Programm, für eine E-Mail an YOU FM.");
		});
		$('a.email').mouseleave(function(){
		return nd();
		});


		//Blendet initial alle Elemente aus und wartet auf den AJAX-Request
		//Zeigt den Loader an
		$("div#headlineShow").hide();
		$("div#timeShow").hide();
        $("img#moderatorShow").hide();
		$("div#moderatorName").hide();
		$("div#moderatorShowName").hide();

		$("div#buttons").hide();
		$("div#livestream").hide();

		$("div#nowItem").hide();
		$("div#nextItem").hide();
		$("div#lastItem").hide();

		$("div#playlist").hide();

		$("div#infoNow").hide();
		$("div#infoNext").hide();
		$("div#infoLast").hide();

		jsonSchedulerImport();
		jsonSchedulerRefresh();
		jsonPlaylistImportLast();
		jsonPlaylistRefreshLast();
		jsonPlaylistImportNowNext();
		jsonPlaylistRefreshNowNext();
		//jsonPlaylistImportNext();
		//jsonPlaylistRefreshNext();

		// Zeigt/Versteckt die dynamsiche Tooltips zu den Buttons
		// Hilfs-Bibiliothek overlib.js erzeugt die Tooltips mit dynamischen Text
		// Können erste aufgerufen werden nachdem die Daten in den DOM übertragen wurden
		// JQuery holt sich dann den Text aus dem jeweiligen Knoten
		$('div#picture').mouseenter(function(){
		var moderatorName = $('div#moderatorShowName').text();
		var filteredName = moderatorName.split(" ");
		renderOverlibBottom("YOU FM Seite mit Infos zu "+filteredName[1]);
		});
		$('div#picture').mouseleave(function(){
		return nd();
		});

		$('a.infoLast').mouseenter(function(){
		var performerName = $('span#performerLast').text();
		var performerPictureURL = $("a#infoLastLink").attr("rel");

		var last = starNameConversion(performerName);
		var lastPerformer = "<table><tr><td><img src='http://www.hr-online.de"+performerPictureURL+"'/><td><td>YOU FM Starinfo zu <strong>" + last + "</td></tr></table>";
		renderOverlibLeft(lastPerformer);
		});
		$('a.infoLast').mouseleave(function(){
		return nd();
		});

		$('a.infoNow').mouseenter(function(){
		var performerName = $('span#performerNow').text();
		//liest die vom servlet erzeugte URL aus dem attribute rel
		var performerPictureURL = $("a#infoNowLink").attr("rel");
		var now = starNameConversion(performerName);
		var nowPerformer = "<table><tr><td><img width='50px' src='http://www.hr-online.de" + performerPictureURL + "'/><td><td>YOU FM Starinfo zu <strong>" + now + "</strong></td></tr></table>";
		renderOverlibLeft(nowPerformer);
		});
		$('a.infoNow').mouseleave(function(){
		return nd();
		});

		$('a.infoNext').mouseenter(function(){
		var performerName = $('span#performerNext').text();
		//liest die vom servlet erzeugte URL aus dem attribute rel
		var performerPictureURL = $("a#infoNextLink").attr("rel");
		var next = starNameConversion(performerName);
		var nextPerformer = "<table><tr><td><img width='50px' src='http://www.hr-online.de" + performerPictureURL + "'/><td><td>YOU FM Starinfo zu <strong>" + next + "</strong></td></tr></table>";
		renderOverlibLeft(nextPerformer);
		});
		$('a.infoNext').mouseleave(function(){
		return nd();
		});

});

//Hilfsfunktion um aus dem "kompletten" Performernamen
//den führenden Namen herauszulösen z.B. Tina Trümmer feat. Onkel Hoppe
// wird zu Tina Trümmer
function starNameConversion(performer){
	var starName;
	var assembledStarName;
	//Enthält der Starname vs. UND feat. wird nach vs. gefiltert
	if(performer.match(/feat./i) && performer.match(/vs./i)){
	assembledStarName = performer.split(" vs.");
	starName = assembledStarName[0];
	}
	else{
		//Enthält der Starname vs. ODER feat. wird entweder nach vs. oder feat. gefiltert
		if(performer.match(/feat./i) || performer.match(/vs./i)){
			if(performer.match(/vs./i)){
			assembledStarName = performer.split(" vs.");
			starName = assembledStarName[0];
			}
			else{
			assembledStarName = performer.split(" feat.");
			starName = assembledStarName[0];
			}
		}
		else{
		starName = performer;
		}
	}
	return starName;
}

//Overlib Funktionen um unterschiedliche Positionen der Tooltip-Bubbles
//zu rendern
function renderOverlibLeft(text){
	return overlib(
	text,
	LEFT,
	BGCLASS,'bgClassLeft',
	FGCLASS,'fgClass',
	BORDER,5
	);
}
function renderOverlibBottom(text){
	return overlib(
	text,
	BELOW,
	OFFSETY,20,
	BGCLASS,'bgClassTop',
	FGCLASS,'fgClass',
	BORDER,5
	);
}


//Funktion für das Refreshing der Sendungsinformation 200 Sekunden
function jsonSchedulerRefresh(){
	setInterval(function() {
	 	 jsonSchedulerImport();
	}, 200000);
}
//Funktion für das Refreshing der Playliste 60 Sekunden
function jsonPlaylistRefreshNowNext(){
	setInterval(function() {
		$("div#picNow").css("background-image","none");
		$("div#picNext").css("background-image","none");
	 	 jsonPlaylistImportNowNext();
	}, 60000);
}
//Funktion für das Refreshing der Playliste 60 Sekunden
/*function jsonPlaylistRefreshNext(){
	setInterval(function() {
		$("div#picNext").css("background-image","none");
	 	 jsonPlaylistImportNext();
	}, 60000);
}*/
//Funktion für das Refreshing der Playliste 60 Sekunden
function jsonPlaylistRefreshLast(){
	setInterval(function() {
		$("div#picLast").css("background-image","none");
	 	 jsonPlaylistImportLast();
	}, 60000);
}


//Importer für die JSON Daten aus dem Scheduler
function jsonSchedulerImport(){

		$.ajax({
		url: "http://www.you-fm.de/scheduler/export_json.php?welle=youfm&intervall=jetzt",
		dataType: "json",
		cache: true,
		success: function(json){

		//Blendet den Loader aus
		$("div#upperLoader").hide();

		var headline = json.programm.sendung[0].name;
		var info = json.programm.sendung[0].info
		var infoURL = json.programm.sendung[0].url;
		var moderatorName = json.programm.sendung[0].hauptmoderator[0].name;
		var moderatorURL = json.programm.sendung[0].hauptmoderator[0].url;

		var time = json.programm.sendung[0].von.substr(0,5)
		time += "-" + json.programm.sendung[0].bis.substr(0,5) + " Uhr";
		var infoText;
			if(info == ""){
			infoText = "Mehr Infos zu dieser Sendung findest du";
			infoText += "<a href='" + infoURL + "' target='_parent'>[hier...]</a>";
			$("div#descriptionShow").html(infoText);
			}
			else{
			infoText = info + " <a href='" + infoURL + "' target='_parent'>[mehr...]</a>";
			$("div#descriptionShow").html(infoText);
			}

		$("div#headlineShow").html(headline);
		//Blendet den Sendungsnamen ein
		$("div#headlineShow").show();

		$("div#timeShow").html(time);
		//Blendet die Laufzeit der Sendung ein
		$("div#timeShow").show();

		$("img#moderatorShow").attr("src",json.programm.sendung[0].hauptmoderator[0].bildurl);
		//Blendet das Moderatorenbild ein
		$("img#moderatorShow").show();

		$("div#moderatorName").html(moderatorName);
		//Blendet den Moderatorennamen für die OverBox ein
		$("div#moderatorName").show();

		$("div#moderatorShowName").html("mit " + moderatorName);
		//Blendet den Moderatorennamen ein
		$("div#moderatorShowName").show();

		$('a#moderatorLink').attr("href",moderatorURL);

		//Blendet den Webcam/Email/Livestream Button ein
		$("div#buttons").show();
		$("div#livestream").show();

		}

		});
}


function timeConversion(timeInSeconds){

	var now = new Date(timeInSeconds*1000);
					var day = now.getDay();
					var month = now.getMonth();
					var year = now.getYear();
					var hours = now.getHours();
					var minutes = now.getMinutes();
					var seconds = now.getSeconds();
					if(hours < 10){
					hours = "0" + hours;
					}
					if(minutes < 10){
					minutes = "0" + minutes;
					}
					if(seconds < 10){
					seconds = "0" + seconds;
					}
					var time = hours + ':' + minutes + ':' + seconds;

					return time;
}


//Importer für die JSON Daten der Playliste NOW und NEXT
function jsonPlaylistImportNowNext(){

		$.ajax({
		url: "http://www.you-fm.de/playlist/xmltojson.php",
		dataType: "json",
		cache: true,
		success: function(json){

		//Blendet den Loader aus
		$("div#lowerLoader").hide();

				// Knoten für das NOW Item werden gelesen
				var titleNow = json.playlist.slot[0].title;
				var performerNow = json.playlist.slot[0].performer;
				var durationNow = json.playlist.slot[0].duration.substr(1,5);
				var startNow = json.playlist.slot[0].start.substr(0,5);
				var timestamp = json.playlist.timestamp;
				var serverTimeNow = timeConversion(timestamp);

				//Konvertierung der angelieferten Zeitstrings in Zahlen. Umwandlung von Stunden und Minuten in Sekunden.
				var convertedDuration = (	Number(durationNow.split(':')[0]) * 60 +
				 /*30s Puffer dazuzählen*/	Number(durationNow.split(':')[1]) + 30);
				var convertedStart = (		Number(startNow.split(':')[0]) * 3600 +
											Number(startNow.split(':')[1])* 60 - 3600 );
				var convertedServerTime = (	Number(serverTimeNow.split(':')[0]) * 3600 +
											Number(serverTimeNow.split(':')[1]) * 60 +
				/*eine Stunde abziehen*/	Number(serverTimeNow.split(':')[2]) - 3600);

				var predictedEndTime = convertedStart + convertedDuration;
				var predictedEndTimeOver = Number(predictedEndTime) + 600;

				//console.log("Vorrausl. Start: "+timeConversion(convertedStart));
				//console.log("Vorrausl. Ende: "+timeConversion(predictedEndTime));
				//console.log("Sondersendung wenn bis: "+timeConversion(predictedEndTimeOver) + " kein Refresh");
				//console.log("Aktuelle Zeit: "+timeConversion(convertedServerTime));

				//Überprüfe nur den Now-Knoten auf eine Sondersendung das heißt, die Anspielzeit + durchschnittlicher Dauer
				//eines Tracks (3:30) + eine Pufferzeit von 30 Sekunden die weiterhin unterscheiden sich von der aktuellen
				// Zeit um min. diesen errechneten Zeitraum.
				// Beispiel: Anspielzeit-> 17:48 + 3:30 + 30 = 17:52 -> Nächster Titel Aktuelle Zeit aber 17:57
				// d.h. eine Sondersendung läuft.

				if(convertedServerTime >= predictedEndTimeOver){

				//$("div#nowItem").html("<div id='picNow'><img src='http://www.you-fm.de/onAirBox/img/nowIcon.png'></div>");
				//$("div#nowItem").append("<div id='timeNow'></div><div id='trackNow'>Momentan kein Titel verfügbar...</div>");
				//$("div#nowItem").show();

					var box = "<div id='specialBox' ";
					box += "style='border: 2px solid #ff009a; padding: 10px; height: 135px;";
					box += "-moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px;'>";
					box += "Im Moment läuft eine Sendung mit ganz neuen/speziellen Tracks.";
					box += "<br/>Klickt den Button für die Playlists</div>";

					$("div#playlistList").html(box);
				}
				else{
				//console.log(convertedServerTime);
				//console.log(predictedEndTimeOver);

					//Checkt ob der Inhalt des playlistList-Knoten zuvor überschrieben wurde wegen Sondersendung,
					//damit die Track-Infos wieder geschrieben werden können
					if($("div#playlistList > div").size() == 0 ){

						$("div#playlistList").append("<div id='picNext'><img src='' /></div><div id='timeNext' class='time timeNext'></div><div id='trackNext' class='track trackNext'><a href=''></a></div><div id='infoNext' class='info'><a href='#' class='infoNext' id='infoNextLink' target='_self'><img src='http://www.you-fm.de/onAirBox/img/infoIcons.gif' /></a></div>");
						$("div#playlistList").append("<div id='picNow'><img src='' /></div><div id='timeNow' class='time timeNow'></div><div id='trackNow' class='track trackNow'><a href=''></a></div><div id='infoNow' class='info'><a href='#' class='infoNow' id='infoNowLink' target='_self'><img src='http://www.you-fm.de/onAirBox/img/infoIcons.gif' /></a></div>");
						$("div#playlistList").append("<div id='picLast'><img src='' /></div><div id='timeLast' class='time timeLast'></div><div id='trackLast' class='track trackLast'><a href=''></a></div><div id='infoLast' class='info'><a href='#' class='infoLast' id='infoLastLink' target='_self'><img src='http://www.you-fm.de/onAirBox/img/infoIcons.gif' /></a></div>");
						}

						else{
								$("div#timeNow").html(startNow);

								//Checkt ob der Link-Knoten zuvor gelöscht wurde, damit die Update-Info überschrieben wird
								if($("div#trackNow > a").size() > 0){

								var html = "<span id='performerNow'>";
								html += performerNow;
								html += "</span><br><span id='titleNow'>";
								html += titleNow;
								html += "</span>";

								$("div#trackNow a").html(html);
								}
								else{
								// Rekonstruiert den trackNow Knoten im DOM

								var html = "<a class='' href=''><span id='performerNow'>";
								html += performerNow;
								html += "</span><br><span id='titleNow'>";
								html += titleNow;
								html += "</span></a>";

								$("div#trackNow").html(html);
								}

								//Blendet die Info für den aktuell gespielten Track ein
								$("div#nowItem").show();
								//Erzeugt den Link für das "i"-Icon hinter "Now"
								//Blendet den Info-Now Button erneut aus (wegen Refresh)
								$("div#infoNow").hide();
								jsonStarLexikon(starNameConversion(performerNow),"Now");
						}

				}

				// Knoten für das NEXT Item werden gelesen
				var titleNext = json.playlist.slot[1].title;
				var performerNext = json.playlist.slot[1].performer;
				var durationNext = json.playlist.slot[1].duration;
				var startNext = json.playlist.slot[1].start.substr(0,5);

				$("div#timeNext").html(startNext);

				//Checkt ob der Link-Knoten zuvor gelöscht wurde, damit die Update-Info überschrieben wird
				if($("div#trackNext > a").size() > 0){
				$("div#trackNext a").html("<span id='performerNext'>"+performerNext+"</span><br><span id='titleNext'>"+titleNext+"</span>");
				}
				else{
				$("div#trackNext").html("<a class='' href=''><span id='performerNext'>"+performerNext+"</span><br><span id='titleNext'>"+titleNext+"</span></a>");
				}

				//Blendet die Info für den nächsten gespielten Track ein
				$("div#nextItem").show();

				//Blendet den Playlistbutton ein.
				$("div#playlist").show();
				//Erzeugt den Link für das "i"-Icon hinter "Next"
				//Blendet den Info-Now Button erneut aus (wegen Refresh)
				$("div#infoNext").hide();
				jsonStarLexikon(starNameConversion(performerNext),"Next");


			}
		});

}

//Aufruf des Starlexikons
function jsonStarLexikon(starName,timePos){

		$.ajax({
		type: "GET",
 		url: "http://www.you-fm.de/onAirBox/starlexikon_import/starlexikon.json",
		cache: true,
		dataType: "json",
		success: function(json){
		var starLink;
		var starPicture;
		//Durchläuft das Starlexikon JSON und vergleicht den unter "Now" oder "Next" angezeigten
		//Interpreten mit den Stars im Lexikon
			for (var i=0; i < json.stars.length; i++){

				//Existiert ein Eintrag im Lexikon wird die Link URL zum Document dazu ausgelesen und
				//via JQuery dem entsprechenden <a href> Tag zugewiesen, das "i"-Icon dazu eingeblendet
				//Standardmässig sind die Icons ausgeblendet.

				if(json.stars[i].name === starName){
					starLink = json.stars[i].docURL;
					starPicture = json.stars[i].picURL;
					$("a#info"+timePos+"Link").attr("href",starLink);
					$("a#info"+timePos+"Link").attr("rel",starPicture);
					$("div#info"+timePos).show();

					var url = "http://www.hr-online.de"+starPicture;
					$("div#pic"+timePos).css("background-image","url("+url+")");
					$("div#track"+timePos+" a").attr("href",starLink);
					$("div#track"+timePos+" a").attr("class","starLink");
				}
			}
			//überprüft nach dem erfolgreichen Import (ausführung der funktion) ob ein Bild in den DOM geladen wurde
			//wenn kein Hintergrundbild geladen wurde, wird ein anderes	Icon geladen.
			checkImage(timePos);
		}

		});

}

//überprüft nach dem erfolgreichen Import (ausführung der funktion) ob ein Bild in den DOM geladen wurde
//wenn kein Hintergrundbild geladen wurde, wird ein anderes	Icon geladen.
function checkImage(timePos){
	var icon;
	if($("div#pic"+timePos).css("background-image") != "none"){

		icon = timePos.toLowerCase()+"Mask.png";
		$("div#pic"+timePos+" img").attr("src","http://www.you-fm.de/onAirBox/img/"+icon);
		}
		else{
		icon = timePos.toLowerCase()+"Icon.png";
		$("div#pic"+timePos+" img").attr("src","http://www.you-fm.de/onAirBox/img/"+icon);
		var linkHTML = $("div#track"+timePos).html();
		//Filtert den <a href=""></a> heraus
		var noLink = linkHTML.replace(/(<a[^>]+>)|(<\/a>)/g, "");
		$("div#track"+timePos).html(noLink);
		}
	}


//Importer für die JSON Daten der Playliste NEXT
/*function jsonPlaylistImportNext(){

		$.ajax({
		url: "http://www.you-fm.de/playlist/xmltojson.php",
		dataType: "json",
		cache: true,
		success: function(json){

				var titleNext = json.playlist.slot[1].title;
				var performerNext = json.playlist.slot[1].performer;
				var durationNext = json.playlist.slot[1].duration;
				var startNext = json.playlist.slot[1].start.substr(0,5);

				$("div#timeNext").html(startNext);
				$("div#trackNext a").html("<span id='performerNext'>"+performerNext+"</span><br><span id='titleNext'>"+titleNext+"</span>");
				//Blendet die Info für den nächsten gespielten Track ein
				$("div#nextItem").show();

				//Blendet den Playlistbutton ein.
				$("div#playlist").show();
				//Erzeugt den Link für das "i"-Icon hinter "Next"
				//Blendet den Info-Now Button erneut aus (wegen Refresh)
				$("div#infoNext").hide();
				jsonStarLexikon(starNameConversion(performerNext),"Next");
				}
		});

}*/


//Importer für die JSON Daten der Playliste LAST
function jsonPlaylistImportLast(){

	$.ajax({
	url: "http://www.you-fm.de/playlist/playlist_last_json.php",
	dataType: "json",
	cache: true,
	success: function(json){

			var titleLast = json.songs[1].titel;
			var performerLast = json.songs[1].interpret;
			var durationLast = json.songs[1].duration;
			var startLast = json.songs[1].zeit.substr(0,5);

			$("div#timeLast").html(startLast);
			//Checkt ob der Link-Knoten zuvor gelöscht wurde, damit die Update-Info überschrieben wird
			if($("div#trackLast > a").size() > 0){
			$("div#trackLast a").html("<span id='performerLast'>"+performerLast+"</span><br><span id='titleLast'>"+titleLast+"</span>");
			}
			else{
			$("div#trackLast").html("<a class='' href=''><span id='performerLast'>"+performerLast+"</span><br><span id='titleLast'>"+titleLast+"</span></a>");
			}

			//Blendet die Info für den nächsten gespielten Track ein
			$("div#lastItem").show();

			//Blendet den Playlistbutton ein.
			$("div#playlist").show();
			//Erzeugt den Link für das "i"-Icon hinter "Next"
			//Blendet den Info-Now Button erneut aus (wegen Refresh)
			$("div#infoLast").hide();
			jsonStarLexikon(starNameConversion(performerLast),"Last");
	}
	});


}

