$(document).ready( function () {
	
	$('a.lexikon').live('click', function(){
		getID = $(this).attr('name');
		/*alert (getID);*/
		$('body').prepend('<div id="lexikon_overlay"><div id="lex_box"><img class="ivw" src="http://mdr.ivwbox.de/cgi-bin/ivw/CP/sputnik/musik/playlistrecherche/lexikon;k=10&amp;i=sputnik%2Fmusik%2Fplaylistrecherche%2Flexikon&amp;p=www.sputnik.de%2Fmusik%2Fsendungen%2Fplaylistrecherche%2Flexikon" alt="" /><div id="lex_info"></div><div id="timeline_wrapper"><div id="diskogr">Diskographie</div><div class="scrollbar"><div class="track"><div class="thumb"><div class="end"></div></div></div></div><div id="lex_timeline" class="viewport"><ul class="mainlist overview"></ul></div><div id="lexsource">Quelle: SWR3 Poplexikon</div></div><div id="lex_title"><img width="120" height="23" alt="" src="/img/skins/facelift2011/logo.png" /><img width="117" height="23" alt="" src="/img/skins/facelift2011/musiklexikon.png" /><div class="close"><img width="11" height="12" alt="" src="/img/skins/facelift2011/lex_close.png" /></div></div></div></div>');
		$('#lexikon_overlay').fadeIn(250, function(){
			$('#lex_box').animate({'height': '500px'}, 350, function(){
				$('#lex_box').animate({'width': '920px'}, 350, function(){
					$.getJSON("/lexiconentry.php?artist_id=" + getID,
		        	function(data){
		        		var jahre = 0;
						var disco_arr = [];
		        		for ( property in data.disco ) jahre++;
		        		if(data.covers !== undefined){
		        			var coverwidth = data.covers.length * 66;
		        		}
						if (data.bio.text !== undefined){biog = data.bio.text;}
						else {biog = 'Es liegen keine Daten vor!'}
						$('#lex_info').html('<div id="lex_bio"><div class="scrollbar"><div class="track"><div class="thumb"><div class="end"></div></div></div></div><h2>'+data.artist+'</h2><div class="viewport"><span class="overview"><p><img src="http://www.sputnik.de/sputnik/image/' + data.imageid +'" />'+biog+'</p></span></div></div><div id="lex_links"><div class="scrollbar"><div class="track"><div class="thumb"><div class="end"></div></div></div></div><h2>Links</h2><div class="viewport"><ul class="overview"></ul></div></div><div id="lex_cover"><div class="scrollbar"><div class="track"><div class="thumb"><div class="end"></div></div></div></div><div class="viewport"><h2>Plattencover</h2><ul class="overview" style="width: '+coverwidth+'px"></ul></div></div>');
    					// initialize scrollbar for vita
    					var oScrollbar = $('#lex_bio');
						oScrollbar.tinyscrollbar();
						
						if(data.linklist === undefined || data.linklist.length < 1){
							$('#lex_links ul').append('<li class="nix">Keine Links vorhanden</li>');
							var lScrollbar = $('#lex_links');
							lScrollbar.tinyscrollbar();
						}
						else {
						$.each(data.linklist, function(i,ali) {
    						$('#lex_links ul').append('<li><a href="'+ali.url+'" class="extern" target="_blank">'+ali.linktext+'</a></li>');
						});
						
						// initialize scrollbar for linklist
						var lScrollbar = $('#lex_links');
						lScrollbar.tinyscrollbar();
						
						}
						if (data.covers === undefined){
							$('#lex_cover ul').append('<li class="nix">Keine Cover vorhanden</li>');
						}
						else {
							$.each(data.covers, function(c,cv){
							if (c+1 == data.covers.length && c != 0){
								if (data.covers.length * 66 + 41 > $('#lex_cover div.viewport').width()){
									$('#lex_cover ul').append('<li><img class="last_cover" src="'+data.coverurl.s+cv+'" /></li>');
								}
								else {
								$('#lex_cover ul').append('<li><img src="'+data.coverurl.s+cv+'" /></li>');
								}
								$('#lex_cover').tinyscrollbar({ axis: 'x'});
							}
							else {
								if(c == 0){
									
									$('#lex_cover ul').append('<li><img class="first_cover" src="'+data.coverurl.s+cv+'" /></li>');
								}
								else {
									$('#lex_cover ul').append('<li><img src="'+data.coverurl.s+cv+'" /></li>');
								}

								$('#lex_cover').tinyscrollbar({ axis: 'x'});
							}
							});
						}
						if (data.disco === undefined){
							
						}
						else{
						$.each(data.disco, function(i,dl){
								disco_arr[dl.year] = dl.year;
								if (i == jahre-1){
									function sortNumber(a,b)
									{
										return a - b;
									}
									disco_arr.sort(sortNumber);
									$.each(disco_arr, function(k,l){
										if(parseInt(l) > 1){
										if($('#y_'+l).length == 0){
											if ($.browser.msie && $.browser.version < 8){
												var ul_pos = ' style="bottom: 24px;"';
											}
											else {
												var ul_pos = '';
											}
										$('#lex_timeline ul.mainlist').append('<li id="y_'+l+'" class="year_outer" style="position: relative;"><ul><li class="year"><span class="year">'+l+'</span><ul' + ul_pos + '><li class="album"><p></p></li><li class="sonstige"><p></p></li></ul></li></ul></li>');
										if (parseInt(l)+1 == disco_arr.length){
											$.each(data.disco, function(j,dll) {
												if(dll.type == 'Album') {
													$('#y_'+dll.year+' ul li.album p').css('border-left', '1px solid #000').append(dll.title + ' <span>Album</span><br />');
													$('#y_'+dll.year+' ul li.sonstige').append('<span style="visibility:hidden">' + dll.title + ' <span>Album</span><br /></span>');
												}
												else {
													$('#y_'+dll.year+' ul li.sonstige p').css('border-left', '1px solid #000').append(dll.title + ' <span>Single</span><br />');
													$('#y_'+dll.year+' ul li.sonstige').append('<span style="visibility:hidden">' + dll.title + ' <span>Single</span><br /></span>');
												}
												if (j+1 == data.disco.length)
												{	
													if ($.browser.msie && $.browser.version < 8){
														var width = $('li.year_outer').length * 6 + 15;
													}
													else{
														var width = 15;
													}
													$('li.year_outer').each(function() {
    													width += $(this).outerWidth( true );
													});
													$('ul.mainlist').css({'width': width});
													$('#timeline_wrapper').tinyscrollbar({ axis: 'x'});
												}
											});
										}
									}
								}
								});						
							}
						});
					}
					});
				});
				
			});
		});
		return false;
	});
	
	$('#lexikon_overlay, .close').live('click', function(){
		$('#lex_box').animate({'height': 0, 'opacity': 0}, 350, function(){
			$('#lexikon_overlay').fadeOut(250, function(){
				$('#lexikon_overlay').remove();
			});
		});
	});

	$('#lex_box').live('click', function(){
		return false;
	});

	$('#lex_box a').live('click', function(){
		event.preventDefault();
		event.stopPropagation();
		window.open(this.href, '_blank');
		return false;
	});
	
	$("#lex_cover ul.overview li").live('mouseover', function() {
		$("#lex_cover ul.overview li").not(this).css({'z-index': '0'});
		var position_overview = $('#lex_cover ul.overview').position();
		var overviewleft = position_overview.left;
		var position = $(this).position();
		var posleft = position.left;
		var vpwidth = $('#lex_cover .viewport').width();
		if (posleft < overviewleft * (-1) + 40){
			$(this).css({'z-index': '10000'});
				var newleft = overviewleft * (-1) - posleft + 2;
				$('img', this).stop().css({"box-shadow": "0 0 5px 1px #B5B5B5"}).animate({top: "-32px",left: newleft + "px",width: "145px", height: "145px"}, 200);
		}
		else if (posleft > overviewleft * (-1) + vpwidth - 147){
			$(this).css({'z-index': '10000'});
				var newleft = overviewleft * (-1) + vpwidth - posleft - 147;
				if (newleft > -40){var newleft = -40;}
				$('img', this).stop().css({"box-shadow": "0 0 5px 1px #B5B5B5"}).animate({top: "-32px",left: newleft + "px",width: "145px", height: "145px"}, 200, function(){});
			}
		else {
    	$(this).css({'z-index': '10000'});
    	$('img', this).stop().css({"box-shadow": "0 0 5px 1px #B5B5B5"}).animate({top: "-32px",left: "-40px",width: "145px", height: "145px"}, 200);
    	}
	});
	$("#lex_cover ul.overview li").live('mouseout', function() {
		delete position_overview;
		delete overviewleft;
		delete position;
		delete posleft;
		delete newleft;
		$('img', this).stop().animate({width: '64px', height: '64px', top: '0', left: '0'}, 200).css({"box-shadow": "none"});
	});

$('#backdings').append('<div id="mailbutton"><a href="">Mail an Mod</a></div>');

mailmod = 'mailto:210000@mdr.de?subject=Mail ins Studio';
    	
$('#mailbutton').hoverIntent(function() {    		    	
	$('a', this).animate({'opacity': 1}, 180).attr('href', mailmod);
}, function() {
	$('a', this).animate({'opacity': 0}, 300);
});

$('#mailbutton, #mailbutton a').live('click', function(){
	$('#mailbutton').animate({'top': '12px'}, 0, function(){
		$('#mailbutton').animate({'top': '11px'}, 0);
	});
}); 

$("#multiTeaser_1").mouseenter(function () {
		$(".navi").fadeIn(130);
	});
$("#multiTeaser_1").mouseleave(function () {
       $(".navi").fadeOut(130);
});

//########################################################################
// ACHTUNG ACHTUNG - Rangedröseltes für'n AKT
//########################################################################

if ( $("#akt4s .links").length == 1 ) {
	$("#akt4s div.teaserContent p").css({width: 90 + "%"});
}

//########################################################################
// ACHTUNG ACHTUNG - ENDE
//########################################################################

$('p.close').live('click', function(){
	$('#PlaylistRecherche').slideUp(500);
	$('#tp_search span').removeClass("arrowup").addClass("arrowdown");
	$('#timepicker').animate({"width": 210 + "px"},300).animate({"height": 19 + "px"}, 250, function(){
			$('#timepicker').animate({"top": 121 + "px"}, 150).removeClass("active");
			$('#onair_patch').animate({"height": 113 + "px"}, 150);
			$('#info_live').fadeIn(150);
		});
	$('#cal, #slide, #slide_form').fadeOut();
});	

$.fn.delay = function( time, name ) {
    return this.queue( ( name || "fx" ), function() {
        var self = this;
        setTimeout(function() { $.dequeue(self); } , time );
    });
};

$('#redsubmit').live('click', function () {

dataString = $("#redform form").serialize();

$.ajax({ 
  type: "POST",  
  url: "/scripts/playlist/redaktionsanfrage.php?changed=" + dt,  
  data: dataString,  
  success: function(data) {
  
  if(data.Resulttype == "SUCCESS"){
  		$('#redform form').slideUp(400);
  		$('#redform').append('<p class="success">Vielen Dank, wir kümmern uns drum!</p>');
  	}
  	
  if(data.Resulttype == "ERROR"){
  		if(data.Fields.mail){$('#redmail').addClass('error');}
  		if(data.Fields.name){$('#redname').addClass('error');}
  		if(data.Fields.text){$('#redtext').addClass('error');}
  }
  
  }
  
  });

return false;
});

$('#tp_search').click( function(){
dt = new Date();
if($('form#tp input.nonce').hasClass('clear')){
$.getJSON("/playlistsearchnonce.php?changed=" + dt,
	function(items){
	$.each(items, function(){formname = items.name;formval = items.nonce});
	$('form#tp input.nonce').attr({
  name: formname,
  value: formval
});
	
	}

);
$('form#tp input.nonce').removeClass('clear');}

});

$('#slide_name').click( function(){
dt = new Date();
if($('form#ap input.nonce').hasClass('clear')){
$.getJSON("/playlistsearchnonce.php?changed=" + dt,
	function(items){
	$.each(items, function(){formname = items.name;formval = items.nonce});
	$('form#ap input.nonce').attr({
  name: formname,
  value: formval
});
	
	}

);
$('form#ap input.nonce').removeClass('clear');}

});

$('#slide_date').click( function(){
dt = new Date();
if($('form#ap input.nonce').hasClass('clear')){
$.getJSON("/playlistsearchnonce.php?changed=" + dt,
	function(items){
	$.each(items, function(){formname = items.name;formval = items.nonce});
	$('form#ap input.nonce').attr({
  name: formname,
  value: formval
});
	
	}

);
$('form#ap input.nonce').removeClass('clear');}

});

 /////
$('.tpsubmit').click( function() {

dt = new Date();
// var datetime = $("input#datetime").val();
// var dataString = 'datetime='+ datetime;
infotext = "";
first = "";
if($(this).attr('id') == "tp_button"){
dataString = $("#tp").serialize();
}
if($(this).attr('id') == "ap_button"){
dataString = $("#ap").serialize();
}

$.ajax({ 
  type: "POST",  
  url: "/playlistsearch.php?changed=" + dt,  
  data: dataString,  
  success: function(data){infotext = "";      	
  			first="";  
  			sendungsearch = "";  	
			
			if(data.Resulttype == "NOTICE"){
			if(data.Sendungen){
			
			$.each(data.Sendungen, function(i,pl){if(first=="1"){} else { sendungsearch = pl.sendungs_name.toLowerCase().replace(/\s+/g, '');first="1";}});
			
			infotext += '<div id="searchclose"><p>Playlistsuche Ergebnisliste</p><p class="close">Suche schließen</p><img class="ivw" src="http://mdr.ivwbox.de/cgi-bin/ivw/CP/sputnik/musik/playlistrecherche/ergebnis/string;k=10&amp;i=sputnik%2Fmusik%2Fplaylistrecherche%2Fergebnis%2F' + sendungsearch + '&amp;p=www.sputnik.de%2Fmusik%2Fplaylistrecherche%2Fergebnis%2F' + sendungsearch + '" alt="" /></div>';
			playlist_available = "0";
			$.each(data.Sendungen, function(i,pl
				
							){
							
							if(pl.playlist == "1"){playlist_available = "1"}
							});
							
							if (playlist_available == "0") {
							pre = "0";
							infotext += '<h3>';
							$.each(data.Sendungen, function(i,pl){if(pre=="1"){infotext += ' / ';}infotext += pl.sendungs_name;pre="1";});
							infotext += '</h3>';
							infotext += '<div id="notice"><p>' + data.Info + '</p></div>';
							infotext += '<div id="redform"><form action="" method="post"><p>Fragen zum musikalischen Teil des Programms beantwortet auch unsere Musikredaktion. Fülle das Formular aus und gib uns so viele Informationen wie möglich. Die genaue Sendezeit oder eine Textzeile, die du verstanden hast, helfen uns bei der Recherche.</p><div><span>Name</span><input type="text" name="name" id="redname" /><br /><span>Mailadresse</span><input type="text" name="mail" id="redmail" /><br /><span>Telefonnummer</span><input type="text" name="tele" id="redtele" /><br /><span>Deine Anfrage</span><textarea name="text" id="redtext"></textarea><input type="submit" id="redsubmit" value="abschicken" /></div></form></div>';
							
							}
			else {
			$.each(data.Sendungen, function(i,pl
				
							){
							
							infotext += "<h3>" + pl.sendungs_name + "</h3>";
							
							if(pl.playlist == "1"){
							$.each(pl.songs, function(i,pls){
							var substr_timedate = pls.starttime.split(' ');
        					var substr_time = substr_timedate[1].split(':');
        					var starttime = substr_time[0] + ":" + substr_time[1];
        					
        					linklist = "";
							artistdetails = "";
							
							/* if(pls.artist_details){artistdetails = '<p>' + pls.artist_details + '</p>';} */
        					
        					if(pls.artist_links != "")
        					
        					{ 
        					
        					inlink ="";
        					exlink="";
							hashp = "";
							hassp = "";
							
        					$.each(pls.artist_links, function(i,ali) {
        					if (ali.url.toLowerCase().indexOf("www.sputnik.de") < 0){
        					
        					if(ali.homepage == "y") {exlink = '<li><a href="'+ali.url+'" class="extern" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					
        					else {
        					if (hashp != "1") {exlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					}
        					}
        					
        					if (ali.url.toLowerCase().indexOf("www.sputnik.de") >= 0 && hassp != "1") {inlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>'; hassp = "1";}
        					
        					}
        					
        					);
        					linklist = '<ul>' + exlink + inlink + '</ul>';
        					}
        					
							if (pls.artist_lex == 1){

								artistdetails = '<p>'+pls.artist_lex_bio+'</p>';
						
								infolex = '<a class="btn lexikon" href="" name="'+pls.artist_id+'"><img src="/img/skins/facelift2011/popbutton.gif" />mehr zum Künstler</a>';
							}
							else {
								infolex = '';
							}
							
							
							if(pls.artist_image_id == "0"){artist_image = 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_131x98.jpg';}
        else{
           artist_image = 'http://www.sputnik.de/sputnik/image/' + pls.artist_image_id;
           }
								infotext += '<div><span>' + starttime + '</span><img src="' + artist_image + '" alt="'+ pls.artist +'" class="artist" />' + '<div><h4>' + pls.artist + '</h4><h5>' + pls.featuring + '</h5><h6>' + pls.song + '</h6>'+ artistdetails + linklist + infolex +'</div></div>';
							});
							}
							else {infotext += '<div id="notice"><p>' + data.Info + '</p></div>';
							infotext += '<div id="redform"><form action="" method="post"><p>Fragen zum musikalischen Teil des Programms beantwortet auch unsere Musikredaktion. Fülle das Formular aus und gib uns so viele Informationen wie möglich. Die genaue Sendezeit oder eine Textzeile, die du verstanden hast, helfen uns bei der Recherche.</p><div><span>Name</span><input type="text" name="name" id="redname" /><br /><span>Mailadresse</span><input type="text" name="mail" id="redmail" /><br /><span>Telefonnummer</span><input type="text" name="tele" id="redtele" /><br /><span>Deine Anfrage</span><textarea name="text" id="redtext"></textarea><input type="submit" id="redsubmit" value="abschicken" /></div></form></div>';}
							});
							}
			
			
			// infotext += '<div id="notice"><p>' + data.Info + '</p></div>';
			}
			else {
			infotext += '<div id="searchclose"><p>Playlistsuche Ergebnisliste</p><p class="close">Suche schließen</p><img class="ivw" src="http://mdr.ivwbox.de/cgi-bin/ivw/CP/sputnik/musik/playlistrecherche/ergebnis/string;k=10&amp;i=sputnik%2Fmusik%2Fplaylistrecherche%2Fergebnis%2Fstring&amp;p=www.sputnik.de%2Fmusik%2Fplaylistrecherche%2Fergebnis%2Fstring" alt="" /></div>';
			infotext += '<div id="notice" class="warning"><p>' + data.Info + '</p></div>';
			if(data.Songs == "" && data.Artists == "" && data.Featured == "") {
			infotext += '<div id="redform"><form action="" method="post"><p>Fragen zum musikalischen Teil des Programms beantwortet auch unsere Musikredaktion. Fülle das Formular aus und gib uns so viele Informationen wie möglich. Die genaue Sendezeit oder eine Textzeile, die du verstanden hast, helfen uns bei der Recherche.</p><div><span>Name</span><input type="text" name="name" id="redname" /><br /><span>Mailadresse</span><input type="text" name="mail" id="redmail" /><br /><span>Telefonnummer</span><input type="text" name="tele" id="redtele" /><br /><span>Deine Anfrage</span><textarea name="text" id="redtext"></textarea><input type="submit" id="redsubmit" value="abschicken" /></div></form></div>';
			}
			if(data.Songs != ""){
			infotext += "<h3>Songs</h3>";
			$.each(data.Songs, function(i,al
				
							){
							
							linklist = "";
							artistdetails = "";
							
							/* if(al.artist_details){artistdetails = '<p>' + al.artist_details + '</p>';} */
        					
        					if(al.artist_links != "")
        					
        					{ 
        					
        					inlink ="";
        					exlink="";
							hashp = "";
							hassp = "";
        					$.each(al.artist_links, function(i,ali) {
        					if (ali.url.toLowerCase().indexOf("www.sputnik.de") < 0){
        					
        					if(ali.homepage == "y") {exlink = '<li><a href="'+ali.url+'" class="extern" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					
        					else {
        					if (hashp != "1") {exlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					}
        					}
        					
        					else if (ali.url.toLowerCase().indexOf("www.sputnik.de") >= 0 && hassp != "1") {inlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>'; hassp = "1";}
        					
        					}
        					
        					);
        					linklist = '<ul>' + exlink + inlink + '</ul>';
        					}
        					
							if (al.artist_lex == 1){
								
								artistdetails = '<p>'+al.artist_lex_bio+'</p>';
								infolex = '<a class="btn lexikon" href="" name="'+al.artist_id+'"><img src="/img/skins/facelift2011/popbutton.gif" />mehr zum Künstler</a>';
							}
							else {
								infolex = '';
							}
							
							if(al.artist_image_id == "0"){artist_image = 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_131x98.jpg';}
        else{
           artist_image = 'http://www.sputnik.de/sputnik/image/' + al.artist_image_id;
           }
								infotext += '<div><img src="' + artist_image + '" alt="'+ al.artist +'"  class="artist" />' + '<div><h4>' + al.artist + '</h4><h5>' + al.featuring + '</h5><h6>' + al.song + '</h6>' + artistdetails + linklist + infolex +'</div></div>';
							
							
							});
							}
			if(data.Artists != ""){	
			infotext += "<h3>Künstler</h3>";			
			$.each(data.Artists, function(i,al
				
							){
							
							linklist = "";
							artistdetails = "";
							
							/* if(al.artist_details){artistdetails = '<p>' + al.artist_details + '</p>';} */
        					
        					if(al.artist_links != "")
        					
        					{ 
        					
        					inlink ="";
        					exlink="";
							hashp = "";
							hassp = "";
        					$.each(al.artist_links, function(i,ali) {
        					if (ali.url.toLowerCase().indexOf("www.sputnik.de") < 0){
        					
        					if(ali.homepage == "y") {exlink = '<li><a href="'+ali.url+'" class="extern" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					
        					else {
        					if (hashp != "1") {exlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					}
        					}
        					
        					else if (ali.url.toLowerCase().indexOf("www.sputnik.de") >= 0 && hassp != "1") {inlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>'; hassp = "1";}
        					
        					}
        					
        					);
        					linklist = '<ul>' + exlink + inlink + '</ul>';
        					}if (al.artist_lex == 1){
						
								artistdetails = '<p>'+al.artist_lex_bio+'</p>';
								infolex = '<a class="btn lexikon" href="" name="'+al.artist_id+'"><img src="/img/skins/facelift2011/popbutton.gif" />mehr zum Künstler</a>';
							}
							else {
								infolex = '';
							}
        					
							if(al.artist_image_id == "0"){artist_image = 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_131x98.jpg';}
        else{
           artist_image = 'http://www.sputnik.de/sputnik/image/' + al.artist_image_id;
           }
							
								infotext += '<div><img src="' + artist_image + '" alt="'+ al.artist +'"  class="artist" />' + '<div><h4>' + al.artist + '</h4>' + artistdetails + linklist + infolex +'</div></div>';
							
							
							});
							}
			if(data.Featured != ""){	
			infotext += "<h3>Featured</h3>";			
			$.each(data.Featured, function(i,al
				
							){
							
							linklist = "";
							artistdetails = "";
							
							/* if(al.artist_details){artistdetails = '<p>' + al.artist_details + '</p>';} */
        					
        					if(al.artist_links != "")
        					
        					{ 
        					
        					inlink ="";
        					exlink="";
							hashp = "";
							hassp = "";
        					$.each(al.artist_links, function(i,ali) {
        					if (ali.url.toLowerCase().indexOf("www.sputnik.de") < 0){
        					
        					if(ali.homepage == "y") {exlink = '<li><a href="'+ali.url+'" class="extern" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					
        					else {
        					if (hashp != "1") {exlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					}
        					}
        					
        					else if (ali.url.toLowerCase().indexOf("www.sputnik.de") >= 0 && hassp !="1") {inlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>'; hassp = "1";}
        					
        					}
        					
        					);
        					linklist = '<ul>' + exlink + inlink + '</ul>';
        					}
							if (al.artist_lex == 1){

								artistdetails = '<p>'+al.artist_lex_bio+'</p>';
								infolex = '<a class="btn lexikon" href="" name="'+al.artist_id+'"><img src="/img/skins/facelift2011/popbutton.gif" />mehr zum Künstler</a>';
							}
							else {
								infolex = '';
							}
							
							if(al.artist_image_id == "0"){artist_image = 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_131x98.jpg';}
        else{
           artist_image = 'http://www.sputnik.de/sputnik/image/' + al.artist_image_id;
           }
								infotext += '<div><img src="' + artist_image + '" alt="'+ al.artist +'"  class="artist" />' + '<div><h4>' + al.artist + '</h4><h5>' + al.featuring + '</h5><h6>' + al.song + '</h6>' + artistdetails + linklist + infolex +'</div></div>';
							
							
							});
							}
			
					
			}
			}
			
			if(data.Resulttype == "WARNING"){
			infotext += '<div id="searchclose"><p>Playlistsuche Ergebnisliste</p><p class="close">Suche schließen</p><img class="ivw" src="http://mdr.ivwbox.de/cgi-bin/ivw/CP/sputnik/musik/playlistrecherche/ergebnis/string;k=10&amp;i=sputnik%2Fmusik%2Fplaylistrecherche%2Fergebnis%2Fstring&amp;p=www.sputnik.de%2Fmusik%2Fplaylistrecherche%2Fergebnis%2Fstring" alt="" /></div>';
			infotext += '<div id="notice" class="warning"><p>' + data.Info + '</p></div>';
			infotext += '<div id="redform"><form action="" method="post"><p>Fragen zum musikalischen Teil des Programms beantwortet auch unsere Musikredaktion. Fülle das Formular aus und gib uns so viele Informationen wie möglich. Die genaue Sendezeit oder eine Textzeile, die du verstanden hast, helfen uns bei der Recherche.</p><div><span>Name</span><input type="text" name="name" id="redname" /><br /><span>Mailadresse</span><input type="text" name="mail" id="redmail" /><br /><span>Telefonnummer</span><input type="text" name="tele" id="redtele" /><br /><span>Deine Anfrage</span><textarea name="text" id="redtext"></textarea><input type="submit" id="redsubmit" value="abschicken" /></div></form></div>';}
			if(data.Resulttype == "ERROR"){} // Styling fehlt hier!!!!!
			if(data.Resulttype == "OK"){
			first = "0";
			sendungsearch = "";
			if(data.Sendungen){
			$.each(data.Sendungen, function(i,pl){if(first=="1"){} else { sendungsearch = pl.sendungs_name.toLowerCase().replace(/\s+/g, '');first="1";}});
			
			infotext += '<div id="searchclose"><p>Playlistsuche Ergebnisliste</p><p class="close">Suche schließen</p><img class="ivw" src="http://mdr.ivwbox.de/cgi-bin/ivw/CP/sputnik/musik/playlistrecherche/ergebnis/string;k=10&amp;i=sputnik%2Fmusik%2Fplaylistrecherche%2Fergebnis%2F' + sendungsearch + '&amp;p=www.sputnik.de%2Fmusik%2Fplaylistrecherche%2Fergebnis%2F' + sendungsearch + '" alt="" /></div>';
			
			$.each(data.Sendungen, function(i,pl
				
							){
							infotext += "<h3>" + pl.sendungs_name + "</h3>";
							$.each(pl.songs, function(i,pls){
							var substr_timedate = pls.starttime.split(' ');
        					var substr_time = substr_timedate[1].split(':');
        					var starttime = substr_time[0] + ":" + substr_time[1];
        					
        					linklist = "";
							artistdetails = "";
							
							/* if(pls.artist_details){artistdetails = '<p>' + pls.artist_details + '</p>';} */
        					
        					if(pls.artist_links != "")
        					
        					{ 
        					
        					inlink ="";
        					exlink="";
							hashp = "";
							hassp = "";
        					$.each(pls.artist_links, function(i,ali) {
        					if (ali.url.toLowerCase().indexOf("www.sputnik.de") < 0){
        					
        					if(ali.homepage == "y") {exlink = '<li><a href="'+ali.url+'" class="extern" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					
        					else {
        					if (hashp != "1") {exlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					}
        					}
        					
        					else if (ali.url.toLowerCase().indexOf("www.sputnik.de") >= 0 && hassp != "1") {inlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>'; hassp = "1";}
        					
        					}
        					
        					);
        					linklist = '<ul>' + exlink + inlink + '</ul>';
        					}
							if (pls.artist_lex == 1){
								
								artistdetails = '<p>'+pls.artist_lex_bio+'</p>';
								infolex = '<a class="btn lexikon" href="" name="'+pls.artist_id+'"><img src="/img/skins/facelift2011/popbutton.gif" />mehr zum Künstler</a>';
							}
							else {
								infolex = '';
							}
							
        					
							if(pls.artist_image_id == "0"){artist_image = 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_131x98.jpg';}
        else{
           artist_image = 'http://www.sputnik.de/sputnik/image/' + pls.artist_image_id;
           }
								infotext += '<div><span>' + starttime + '</span><img src="' + artist_image + '" alt="'+ pls.artist +'"  class="artist" />' + '<div><h4>' + pls.artist + '</h4><h5>' + pls.featuring + '</h5><h6>' + pls.song + '</h6>' + artistdetails + linklist + infolex +'</div></div>';
							});
							
							});
				
				}
			else{
			infotext += '<div id="searchclose"><p>Playlistsuche Ergebnisliste</p><p class="close">Suche schließen</p><img class="ivw" src="http://mdr.ivwbox.de/cgi-bin/ivw/CP/sputnik/musik/playlistrecherche/ergebnis/string;k=10&amp;i=sputnik%2Fmusik%2Fplaylistrecherche%2Fergebnis%2Fstring&amp;p=www.sputnik.de%2Fmusik%2Fplaylistrecherche%2Fergebnis%2Fstring" alt="" /></div>';
			if(data.Songs != ""){
			infotext += "<h3>Songs</h3>";
			$.each(data.Songs, function(i,al
				
							){
							
							linklist = "";
							artistdetails = "";
							
							/* if(al.artist_details){artistdetails = '<p>' + al.artist_details + '</p>';} */
        					
        					if(al.artist_links != "")
        					
        					{ 
        					
        					inlink ="";
        					exlink="";
							hashp = "";
							hassp = "";
        					$.each(al.artist_links, function(i,ali) {
        					if (ali.url.toLowerCase().indexOf("www.sputnik.de") < 0){
        					
        					if(ali.homepage == "y") {exlink = '<li><a href="'+ali.url+'" class="extern" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					
        					else {
        					if (hashp != "1") {exlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					}
        					}
        					
        					else if (ali.url.toLowerCase().indexOf("www.sputnik.de") >= 0 && hassp != "1") {inlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>'; hassp = "1";}
        					
        					}
        					
        					);
        					linklist = '<ul>' + exlink + inlink + '</ul>';
        					}
							if (al.artist_lex == 1){
								artistdetails = '<p>'+al.artist_lex_bio+'</p>';
						
								infolex = '<a class="btn lexikon" href="" name="'+al.artist_id+'"><img src="/img/skins/facelift2011/popbutton.gif" />mehr zum Künstler</a>';
							}
							else {
								infolex = '';
							}
							
							
							if(al.artist_image_id == "0"){artist_image = 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_131x98.jpg';}
        else{
           artist_image = 'http://www.sputnik.de/sputnik/image/' + al.artist_image_id;
           }
								infotext += '<div><img src="' + artist_image + '" alt="'+ al.artist +'"  class="artist" />' + '<div><h4>' + al.artist + '</h4><h5>' + al.featuring + '</h5><h6>' + al.song + '</h6>' + artistdetails + linklist + infolex +'</div></div>';
							
							
							});
							}
			if(data.Artists != ""){	
			infotext += "<h3>Künstler</h3>";			
			$.each(data.Artists, function(i,al
				
							){
							
							linklist = "";
							artistdetails = "";
							
							/* if(al.artist_details){artistdetails = '<p>' + al.artist_details + '</p>';} */
        					
        					if(al.artist_links != "")
        					
        					{ 
        					
        					inlink ="";
        					exlink="";
							hashp = "";
							hassp = "";
        					$.each(al.artist_links, function(i,ali) {
        					if (ali.url.toLowerCase().indexOf("www.sputnik.de") < 0){
        					
        					if(ali.homepage == "y") {exlink = '<li><a href="'+ali.url+'" class="extern" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					
        					else {
        					if (hashp != "1") {exlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					}
        					}
        					
        					else if (ali.url.toLowerCase().indexOf("www.sputnik.de") >= 0 && hassp != "1") {inlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>'; hassp = "1";}
        					
        					}
        					
        					);
        					linklist = '<ul>' + exlink + inlink + '</ul>';
        					}
							if (al.artist_lex == 1){
						
								artistdetails = '<p>'+al.artist_lex_bio+'</p>';
								infolex = '<a class="btn lexikon" href="" name="'+al.artist_id+'"><img src="/img/skins/facelift2011/popbutton.gif" />mehr zum Künstler</a>';
							}
							else {
								infolex = '';
							}
							
        					
							if(al.artist_image_id == "0"){artist_image = 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_131x98.jpg';}
        else{
           artist_image = 'http://www.sputnik.de/sputnik/image/' + al.artist_image_id;
           }
							
								infotext += '<div><img src="' + artist_image + '" alt="'+ al.artist +'"  class="artist" />' + '<div><h4>' + al.artist + '</h4>' + artistdetails + linklist + infolex +'</div></div>';
							
							
							});
							}
			if(data.Featured != ""){	
			infotext += "<h3>Featured</h3>";			
			$.each(data.Featured, function(i,al
				
							){
							
							linklist = "";
							artistdetails = "";
							
							/* if(al.artist_details){artistdetails = '<p>' + al.artist_details + '</p>';} */
        					
        					if(al.artist_links != "")
        					
        					{ 
        					
        					inlink ="";
        					exlink="";
							hashp = "";
							hassp = "";
        					$.each(al.artist_links, function(i,ali) {
        					if (ali.url.toLowerCase().indexOf("www.sputnik.de") < 0){
        					
        					if(ali.homepage == "y") {exlink = '<li><a href="'+ali.url+'" class="extern" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					
        					else {
        					if (hashp != "1") {exlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>';hashp ="1";}
        					}
        					}
        					
        					else if (ali.url.toLowerCase().indexOf("www.sputnik.de") >= 0 && hassp !="1") {inlink = '<li><a href="'+ali.url+'" target="_blank">'+ali.linktext+'</a></li>'; hassp = "1";}
        					
        					}
        					
        					);
        					linklist = '<ul>' + exlink + inlink + '</ul>';
        					}
							if (al.artist_lex == 1){

								artistdetails = '<p>'+al.artist_lex_bio+'</p>';
								infolex = '<a class="btn lexikon" href="" name="'+al.artist_id+'"><img src="/img/skins/facelift2011/popbutton.gif" />mehr zum Künstler</a>';
							}
							else {
								infolex = '';
							}
							
							
							if(al.artist_image_id == "0"){artist_image = 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_131x98.jpg';}
        else{
           artist_image = 'http://www.sputnik.de/sputnik/image/' + al.artist_image_id;
           }
								infotext += '<div><img src="' + artist_image + '" alt="'+ al.artist +'"  class="artist" />' + '<div><h4>' + al.artist + '</h4><h5>' + al.featuring + '</h5><h6>' + al.song + '</h6>' + artistdetails + linklist + infolex +'</div></div>';
							
							
							});
							}
			
					}
			
			
			}
    
    if(infotext != ""){
     $('#PlaylistRecherche').html(infotext).slideDown(500);
     }
  }  
});  
dt = new Date();
$.getJSON("/playlistsearchnonce.php?changed=" + dt,
	function(items){
	$.each(items, function(){formname = items.name;formval = items.nonce});
	$('input.nonce').attr({
  name: formname,
  value: formval
});
	
	}

);
$('input.nonce').addClass('clear');
return false; 
});

/////

$('#info_live h3').heartBeatInterval();
$('#info_live h3').onAirPatch();
                  // onairfade = setInterval(newsfade, 4000);

$(".nav_block").hoverIntent(function() {
     	$(".subnav", this).not("#home").css({display: "block"});
     	if ($("div:not(.subnav)", this).hasClass("current")){$(this).children("div:first").addClass("wascurrent");}
     	else {$("div:not(.subnav)", this).addClass("current");}
     }, function() {
     	$(".subnav", this).not("#home").css({display: "none"});
     	if ($("div:not(.subnav)", this).hasClass("wascurrent")){$(this).children("div:first").removeClass("wascurrent");}
     	else {$("div:not(.subnav)", this).removeClass("current");}
});
     
$('#tp_search').click(function(){
if($('#timepicker img.ivw').length == 0){
$img = '<img class="ivw" src="http://mdr.ivwbox.de/cgi-bin/ivw/CP/sputnik/musik/playlistrecherche/zeit;k=10&amp;i=sputnik%2Fmusik%2Fplaylistrecherche%2Fzeit&amp;p=www.sputnik.de%2Fmusik%2Fsendungen%2Fplaylistrecherche%2Fzeit" alt="" />';
$($img).prependTo('#timepicker');}
	if($('#timepicker').hasClass("active")) {
		$('#tp_search span').removeClass("arrowup").addClass("arrowdown");
		$('#timepicker').animate({"width": 210 + "px"},300).animate({"height": 19 + "px"}, 250, function(){
			$('#timepicker').animate({"top": 121 + "px"}, 150).removeClass("active");
			$('#onair_patch').animate({"height": 113 + "px"}, 150);
			$('#info_live').fadeIn(150);
		});
		
		$('#cal, #slide, #slide_form').fadeOut();
	} else {
		$('#tp_search span').removeClass("arrowdown").addClass("arrowup");
		$('#onair_patch').animate({"height": 44 + "px"}, 150);
		$('#info_live').fadeOut(150);
		$('#timepicker').animate({"top": 52 + "px"}, 150, function(){
			$('#timepicker').animate({"height": 190 + "px"}, 250).animate({"width": 558 + "px"}, 300).addClass("active");
		});
		$('#cal, #slide, #slide_form').fadeIn();
	}
});


$("#slide_date").click(function(){
		$(this).addClass("active");
		$("#slide_name").removeClass("active");
		$('#ap').hide();
		$('.ui-datepicker-header').animate({"opacity": "1"},300);
		$('.ui-datepicker-calendar').animate({"opacity": "1"},300);
});

$("#slide_name").click(function(){
if($('#slide_name img.ivw').length == 0){
$img = '<img class="ivw" src="http://mdr.ivwbox.de/cgi-bin/ivw/CP/sputnik/musik/playlistrecherche/string;k=10&amp;i=sputnik%2Fmusik%2Fplaylistrecherche%2Fstringt&amp;p=www.sputnik.de%2Fmusik%2Fsendungen%2Fplaylistrecherche%2Fstring" alt="" />';
$($img).prependTo('#slide_name');}
		$(this).addClass("active");
		$("#slide_date").removeClass("active");
		$('#ap').show();
		$('.ui-datepicker-header').animate({"opacity": "0.5"},300);
		$('.ui-datepicker-calendar').animate({"opacity": "0.5"},300);
});
              
     var patchposition = $("#onair_patch").position();
     streamID = "0";       
     $('ul#streammenu').hover(function() {
     	$('ul#streammenu > li:not(#ghost)').hoverIntent(function() {
     		streamposition = $(this).position();
     		if(streamID != this.id){
     		prevID = streamID;
     		streamID = this.id;
     		$("#ghost a").appendTo("#info_" + prevID);
     		if($('#timepicker').hasClass("active")) {
     			$('#timepicker').removeClass("active").addClass("wasactive").animate({"height": 0, "width": 0}, 200);
     			$("#onair_patch").animate({"height": 113 + "px", "left": streamposition.left + 75 + "px"}, 200);
     			$("#ghost").animate({"left": streamposition.left - 130 + "px"}, 200);
     			$("#info_" + streamID + " #stream_" + streamID).appendTo("#ghost");
     			$("ul#streammenu").css({height: "168px"});
     		} else {
     		$("#onair_patch").animate({"left": streamposition.left + 75 + "px"}, 200);
     		$("#ghost").animate({"left": streamposition.left - 130 + "px"}, 200);
     		$("#info_" + streamID + " #stream_" + streamID).appendTo("#ghost");
     		$("ul#streammenu").css({height: "168px"});
     		}
     		$("#onair_patch > div").fadeOut(200);
     		$("#info_" + streamID).fadeIn(200);
     		$("#timepicker").slideUp();
     		}
     		/*$(this).css('background-image', 'url(/img/skins/facelift2011/hover_'+streamID+'.png)');*/
     		
     	}, function() {	streamID = this.id;
     	
     	});
     }, function() {
     	if (streamID != "0"){
     		if($('#timepicker').hasClass("wasactive")){
     			$('#timepicker').removeClass("wasactive").addClass("active").css({display: "block"}).animate({"height": "190px", "width": "555px"}, 200);
     			$("#onair_patch").animate({"height": 44 + "px", "left": patchposition.left + "px"}, 200);
     			$("#ghost").animate({"left": patchposition.left + "px"}, 200);
     			$("#ghost a").appendTo("#info_" + streamID);
     			$("ul#streammenu").css({height: "55px"});
     			$("#onair_patch > div:not(#timepicker)").fadeOut(200);
     			$("#info_live").fadeIn(200);
     			streamID = "0";
     		}
     		else{
     		/*$('ul#streammenu li').css('background-image', 'url(/img/skins/facelift2011/a_'+streamID+'.png)');*/
     		$("#onair_patch").animate({"left": patchposition.left + "px"}, 200);
     		$("#ghost").animate({"left": "-210px"}, 200);
     		$("#ghost a").appendTo("#info_" + streamID);
     			$("ul#streammenu").css({height: "55px"});
     		$("#onair_patch > div").fadeOut(200);
     		$("#info_live").fadeIn(200);
     		$("#timepicker").slideDown();
     		streamID = "0";
     		}
     	}
     });

$("#streammenu li a").click(function() {
					var untrimmedID = this.id;
					takeover = new Object();
					takeover = untrimmedID.replace(/stream_/i, "");
					var nwl = (screen.width-336)/2;
  					var nwh = (screen.height-294)/2;
  					popUp=window.open('/programm/player/', 'oneclick', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=294,height=336,left='+nwl+',top='+nwh+'');
					return false;
		});
		
$("#onair_patch > div a").click(function() {
					var untrimmedID = this.id;
					takeover = new Object();
					takeover = untrimmedID.replace(/stream_/i, "");
					var nwl = (screen.width-336)/2;
  					var nwh = (screen.height-294)/2;
  					popUp=window.open('/programm/player/', 'oneclick', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=294,height=336,left='+nwl+',top='+nwh+'');
					return false;
		});
		
$("#streammenu li:not(#ghost) a").click(function() {
					var untrimmedID = this.id;
					takeover = new Object();
					takeover = untrimmedID.replace(/link_/i, "");
					var nwl = (screen.width-336)/2;
  					var nwh = (screen.height-294)/2;
  					popUp=window.open('/programm/player/', 'oneclick', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=294,height=336,left='+nwl+',top='+nwh+'');
					return false;
		});
		
$("#live").click(function() {
					takeover = "webradio";
					var nwl = (screen.width-336)/2;
  					var nwh = (screen.height-294)/2;
  					popUp=window.open('/programm/player/', 'oneclick', 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=294,height=336,left='+nwl+',top='+nwh+'');
					return false;
		});

});

$.fn.heartBeatInterval = function ()  {
dt = new Date();
		$.getJSON("/playlist.php?changed=" + dt,
        	function(data){
			previous = new Array();
			refreshed = '0';      	
			$.each(data.Songs, function(i,info){
				if(i == "0"){
					previous[i] = new Object();
        			previous[i]["timestamp"] = info.starttime;
        			var substr_timedate = info.starttime.split(' ');
        			var substr_time = substr_timedate[1].split(':');
        			var starttime = substr_time[0] + ":" + substr_time[1];
    		    	/* $('#info_live h2').html(info.artist + " ");
    		    	if(info.featuring != ""){
    		    	$('#info_live h3').html("feat. " + info.featuring).show();
    		    	}
    		    	else {$('#info_live h3').html("").hide();}
    		    	$('#info_live p').html(info.song+'<a class="btn" href=""><img src="" /></a>'); */
    		    	if(info.featuring != ""){
    		    	infofeat = '<i>feat. ' + info.featuring+'</i>';
    		    	}
    		    	else {infofeat = '';}
					if (info.artist_lex == 1){
						
						infolex = '<a class="btn lexikon" href="" name="'+info.artist_id+'"><img src="/img/skins/facelift2011/popbutton.gif" /></a>';
					}
					else {
						infolex = '';
					}
    		    	$('#info_live p').html(infolex+'<b>'+info.artist+'</b>'+' '+infofeat+'<br />'+info.song);
    		 		$.ajax({
    url:'http://www.sputnik.de/sputnik/image/' + info.artist_image_id,
    type:'HEAD',
    error:
        function(){
            $('#info_live img.artist').attr({src: 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_60x45.jpg'});
        },
    success:
        function(){
            if(info.artist_image_id == "0"){$('#info_live img.artist').attr({src: 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_60x45.jpg'});}
        else{
           $('#info_live img.artist').attr({src: 'http://www.sputnik.de/sputnik/image/' + info.artist_image_id});
           }
        }
});
    		    	
    		    	
    		    	$('#info_live img.loader').attr({src: '/img/skins/facelift2011/playlist_play.png'});
    		    	}
					});  
				});
        // $('#info_live h3').tool(); //just for testing
    
    $.ajax({
           url: "/livetool_sptv/heartbeat?changed=" + dt,
           cache: false,
           dataType: "json",
           success:
           function(data)
           {
           $.each(data, function(i)
                  {	
                  // Check tool status
                  if (data.status == 'on')
                  {
                  // Tool
                  $('#info_live h3').tool();
                  }
                  else {
                   $('#info_live h3').toolOff();
                  }
                  });},
           error: 
           function() {
           $('#info_live h3').toolOff();
           }
           });
    
		setInterval ( "$('#info_live h3').heartBeat()", 30000 ); // default 30 seconds
    
		};
		
$.fn.heartBeat = function ()  {
dt = new Date();
		$.getJSON("/playlist.php?changed=" + dt,
        	function(data){
			previous = new Array();
			refreshed = '0';      	
			$.each(data.Songs, function(i,info){
				if(i == "0"){
					previous[i] = new Object();
        			previous[i]["timestamp"] = info.starttime;
        			var substr_timedate = info.starttime.split(' ');
        			var substr_time = substr_timedate[1].split(':');
        			var starttime = substr_time[0] + ":" + substr_time[1];
        			if(info.featuring != ""){
    		    	infofeat = '<i>feat. ' + info.featuring+'</i>';
    		    	}
    		    	else {infofeat = '';}
					if (info.artist_lex == 1){
						
						infolex = '<a class="btn lexikon" href="" name="'+info.artist_id+'"><img src="/img/skins/facelift2011/popbutton.gif" /></a>';
					}
					else {
						infolex = '';
					}
    		    	$('#info_live p').html(infolex+'<b>'+info.artist+'</b>'+' '+infofeat+'<br />'+info.song);
    		 		$.ajax({
    url:'http://www.sputnik.de/sputnik/image/' + info.artist_image_id,
    type:'HEAD',
    error:
        function(){
            $('#info_live img.artist').attr({src: 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_60x45.jpg'});
        },
    success:
        function(){
            if(info.artist_image_id == "0"){$('#info_live img.artist').attr({src: 'http://www.sputnik.de/sixcms_upload/media_fast/43/oneclick_webradio_60x45.jpg'});}
        else{
           $('#info_live img.artist').attr({src: 'http://www.sputnik.de/sputnik/image/' + info.artist_image_id});
           }
        }
});
    		    	
    		    	
    		    	$('#info_live img.loader').attr({src: '/img/skins/facelift2011/playlist_play.png'});
    		    	}
					});  
				});
        // $('#info_live h3').tool(); // just for testing
    
    $.ajax({
           url: "/livetool_sptv/heartbeat?changed=" + dt,
           cache: false,
           dataType: "json",
           success:
           function(data)
           {
           $.each(data, function(i)
                  {	
                  // Check tool status
                  if (data.status == 'on')
                  {
                  // Tool
                  $('#info_live h3').tool();
                  }
                  else {
                  $('#info_live h3').toolOff();
                  }
                  });},
           error: 
           function() {
           $('#info_live h3').toolOff();
           }
           });

		};

//////// NEEDS MAINTANENCE /////////
$.fn.onAirPatch = function ()
{index = 1;
    newsfade = function ()  {
        var newsli = $("#oath li").length;
        if (index < newsli) {
            $("#oath li.nextactive").removeClass("nextactive").addClass("nowactive");
            $("#oath li.nowactive + li").addClass("nextactive");
            $("#oath li.nowactive").animate({"top": -45 + "px"}, 300, function() {
                                            $(this).css({top: 45 + "px"});
                                            }).removeClass("nowactive");
            $("#oath li.nextactive").animate({"top": 0}, 300);
            index++;
        } else if (index == newsli) {
            $("#oath li.nextactive").removeClass("nextactive").addClass("nowactive");
            $("#oath li.st1").addClass("nextactive");
            $("#oath li.nowactive").animate({"top": -45 + "px"}, 300, function() {
                                            $(this).css({top: 45 + "px"});
                                            }).removeClass("nowactive");
            $("#oath li.nextactive").animate({"top": 0}, 300);
            index = 1;
        }
    };
    
    dt = new Date();
// 1. Get JSON from server
$.getJSON("/onair.php?changed=" + dt,
        	function(data){
			
		$.each(data, function()
		{
					
    		    	if (data.moderator.name != "Standardmoderator" && data.moderator.name != data.sendung.name){
    		    	var sendung = '<li class="st1 nowactive"><span id="oas">'+ data.sendung.name +'</span><span id="oam">'+ data.moderator.name +'</span></li>';
    		    	$('#oas').html(data.sendung.name);}else{$('#oas').html("");}
    		    	
    		    	/*$('#oasi').html(data.sendung.beschreibung);*/
    		    	
    		    	$('#oat').html(data.sendung.von + " - " + data.sendung.bis + " Uhr");
    		    	if (data.moderator.name == "Standardmoderator" || data.moderator.name == data.sendung.name){
    		    	$('#oam').html(data.sendung.name);
    		    	}
    		    	else {$('#oam').html(data.moderator.name);}
    		    	$('#onair_mod').html('<a href="' + data.moderator.profil_url + '"><img src="' + data.moderator.bild_url + '"  alt="'+ data.moderator.name + '" /></a>');
    		    	if(data.sendungsthemen.sendungsthema1){
    		    		if(data.sendungsthemen.url_sendungsthema1 != "")
    		    		{var sendungsthema1 = '<li class="st2"><a href="'+ data.sendungsthemen.url_sendungsthema1 +'"><h2>Themen der Sendung</h2>'+ data.sendungsthemen.sendungsthema1 +'</a></li>';}
    		    		else {var sendungsthema1 = '<li class="st2"><h2>Themen der Sendung</h2>'+ data.sendungsthemen.sendungsthema1 +'</li>';}
    		    	}
    		    	else {var sendungsthema1 = '';}
    		    	if(data.sendungsthemen.sendungsthema2){
    		    		if(data.sendungsthemen.url_sendungsthema2 != "")
    		    		{var sendungsthema2 = '<li class="st3"><a href="'+ data.sendungsthemen.url_sendungsthema2 +'"><h2>Themen der Sendung</h2>'+ data.sendungsthemen.sendungsthema2 +'</a></li>';}
    		    		else {var sendungsthema2 = '<li class="st3"><h2>Themen der Sendung</h2>'+ data.sendungsthemen.sendungsthema2 +'</li>';}
    		    	}
    		    	else {var sendungsthema2 = '';}
    		    	if(data.sendungsthemen.sendungsthema3){
    		    		if(data.sendungsthemen.url_sendungsthema3 != "")
    		    		{var sendungsthema3 = '<li class="st4"><a href="'+ data.sendungsthemen.url_sendungsthema3 +'"><h2>Themen der Sendung</h2>'+ data.sendungsthemen.sendungsthema3 +'</a></li>';}
    		    		else {var sendungsthema3 = '<li class="st4"><h2>Themen der Sendung</h2>'+ data.sendungsthemen.sendungsthema3 +'</li>';}
    		    	}
    		    	else {var sendungsthema3 = '';}
    		    	if(sendungsthema1 == "" && sendungsthema2 == "" && sendungsthema3 == "") {var head = '<li>Zur laufenden Sendung liegen keine Themen vor.</li>';}
    		    	else {var head = ''}
    		    	$('#oath').html(head + sendung + sendungsthema1 + sendungsthema2 + sendungsthema3);
    	});	    	
    }
    );

onairfade = setInterval(newsfade, 4000);
    
    $("#sendungs_infos").hoverIntent(function () {clearInterval(onairfade);
                                  }, function () {
                                  onairfade = setInterval(newsfade, 4000);
                                  });
    
    $("#onair_mod").hoverIntent(function () {
                                if ( $("#oath li.st1").hasClass("nowactive") ) {
                                $("#oath li.nextactive").removeClass("nextactive");
                                clearInterval(onairfade);
                                } else {
                                $("#oath li.nextactive").animate({"top": -45 + "px"}, 300, function () {
                                                                 $(this).css({top: 45 + "px"}).removeClass("nextactive");
                                                                 });
                                $("#oath li.st1").animate({"top": 0 + "px"}, 300).addClass("nowactive");;
                                $("#oath li.nextactive").removeClass("nextactive");
                                clearInterval(onairfade);
                                }
                                }, function () {
                                index = 1;
                                onairfade = setInterval(newsfade, 4000);
                                });
};




$(document).ready(function() {

var d = new Date();
d.setTime(d.getTime() - (15 * 60 * 1000));

Stunde = d.getHours();
Minute = d.getMinutes();

var ex13 = $('#datepicker');

ex13.datetimepicker({ dateFormat: 'yy-mm-dd'});
dateText = ex13.datetimepicker('setDate', d );

            $("#timepicker").datetimepicker({ dateFormat: 'yy-mm-dd',numberOfMonths: 1,
	minDate: -30,
	maxDate: 0,
	hour: Stunde,
	minute: Minute,
   onSelect: function(dateText, inst) {
      $("#datepicker").val(dateText);
   }
});


        });
        
        
        
/*
* jQuery timepicker addon
* By: Trent Richardson [http://trentrichardson.com]
* Version 0.9.6
* Last Modified: 07/20/2011
* 
* Copyright 2011 Trent Richardson
* Dual licensed under the MIT and GPL licenses.
* http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
* http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
* 
* HERES THE CSS:
* .ui-timepicker-div .ui-widget-header{ margin-bottom: 8px; }
* .ui-timepicker-div dl{ text-align: left; }
* .ui-timepicker-div dl dt{ height: 25px; }
* .ui-timepicker-div dl dd{ margin: -25px 10px 10px 65px; }
* .ui-timepicker-div td { font-size: 90%; }
*/

(function($) {

$.extend($.ui, { timepicker: { version: "0.9.6" } });

/* Time picker manager.
   Use the singleton instance of this class, $.timepicker, to interact with the time picker.
   Settings for (groups of) time pickers are maintained in an instance object,
   allowing multiple different settings on the same page. */

function Timepicker() {
	this.regional = []; // Available regional settings, indexed by language code
	this.regional[''] = { // Default regional settings
		currentText: 'Now',
		closeText: 'Done',
		ampm: false,
		timeFormat: 'hh:mm tt',
		timeSuffix: '',
		timeOnlyTitle: 'Choose Time',
		timeText: 'Time',
		hourText: 'Hour',
		minuteText: 'Minute',
		secondText: 'Second',
		timezoneText: 'Time Zone'
	};
	this._defaults = { // Global defaults for all the datetime picker instances
		showButtonPanel: true,
		timeOnly: false,
		showHour: true,
		showMinute: true,
		showSecond: false,
		showTimezone: false,
		showTime: true,
		stepHour: 0.05,
		stepMinute: 0.05,
		stepSecond: 0.05,
		hour: 0,
		minute: 0,
		second: 0,
		timezone: '+0000',
		hourMin: 0,
		minuteMin: 0,
		secondMin: 0,
		hourMax: 23,
		minuteMax: 59,
		secondMax: 59,
		minDateTime: null,
		maxDateTime: null,
		hourGrid: 0,
		minuteGrid: 0,
		secondGrid: 0,
		alwaysSetTime: true,
		separator: ' ',
		altFieldTimeOnly: true,
		showTimepicker: true,
		timezoneList: ["-1100", "-1000", "-0900", "-0800", "-0700", "-0600",
			       "-0500", "-0400", "-0300", "-0200", "-0100", "+0000",
			       "+0100", "+0200", "+0300", "+0400", "+0500", "+0600",
			       "+0700", "+0800", "+0900", "+1000", "+1100", "+1200"]
	};
	$.extend(this._defaults, this.regional['']);
}

$.extend(Timepicker.prototype, {
	$input: null,
	$altInput: null,
	$timeObj: null,
	inst: null,
	hour_slider: null,
	minute_slider: null,
	second_slider: null,
	timezone_select: null,
	hour: 0,
	minute: 0,
	second: 0,
	timezone: '+0000',
	hourMinOriginal: null,
	minuteMinOriginal: null,
	secondMinOriginal: null,
	hourMaxOriginal: null,
	minuteMaxOriginal: null,
	secondMaxOriginal: null,
	ampm: '',
	formattedDate: '',
	formattedTime: '',
	formattedDateTime: '',
	timezoneList: ["-1100", "-1000", "-0900", "-0800", "-0700", "-0600",
			"-0500", "-0400", "-0300", "-0200", "-0100", "+0000",
			"+0100", "+0200", "+0300", "+0400", "+0500", "+0600",
			"+0700", "+0800", "+0900", "+1000", "+1100", "+1200"],

	/* Override the default settings for all instances of the time picker.
	   @param  settings  object - the new settings to use as defaults (anonymous object)
	   @return the manager object */
	setDefaults: function(settings) {
		extendRemove(this._defaults, settings || {});
		return this;
	},

	//########################################################################
	// Create a new Timepicker instance
	//########################################################################
	_newInst: function($input, o) {
		var tp_inst = new Timepicker(),
			inlineSettings = {};
			
		for (var attrName in this._defaults) {
			var attrValue = $input.attr('time:' + attrName);
			if (attrValue) {
				try {
					inlineSettings[attrName] = eval(attrValue);
				} catch (err) {
					inlineSettings[attrName] = attrValue;
				}
			}
		}
		tp_inst._defaults = $.extend({}, this._defaults, inlineSettings, o, {
			beforeShow: function(input, dp_inst) {
				if ($.isFunction(o.beforeShow))
					o.beforeShow(input, dp_inst, tp_inst);
			},
			onChangeMonthYear: function(year, month, dp_inst) {
				// Update the time as well : this prevents the time from disappearing from the $input field.
				tp_inst._updateDateTime(dp_inst);
				if ($.isFunction(o.onChangeMonthYear))
					o.onChangeMonthYear.call($input[0], year, month, dp_inst, tp_inst);
			},
			onClose: function(dateText, dp_inst) {
				if (tp_inst.timeDefined === true && $input.val() != '')
					tp_inst._updateDateTime(dp_inst);
				if ($.isFunction(o.onClose))
					o.onClose.call($input[0], dateText, dp_inst, tp_inst);
			},
			timepicker: tp_inst // add timepicker as a property of datepicker: $.datepicker._get(dp_inst, 'timepicker');
		});

		tp_inst.hour = tp_inst._defaults.hour;
		tp_inst.minute = tp_inst._defaults.minute;
		tp_inst.second = tp_inst._defaults.second;
		tp_inst.ampm = '';
		tp_inst.$input = $input;

		if (o.altField)
			tp_inst.$altInput = $(o.altField)
				.css({ cursor: 'pointer' })
				.focus(function(){ $input.trigger("focus"); });
					
		// datepicker needs minDate/maxDate, timepicker needs minDateTime/maxDateTime..
		if(tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date)
			tp_inst._defaults.minDateTime = new Date(tp_inst._defaults.minDate.getTime());
		if(tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date)
			tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());
		if(tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date)
			tp_inst._defaults.maxDateTime = new Date(tp_inst._defaults.maxDate.getTime());
		if(tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date)
			tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());
		
		return tp_inst;
	},

	//########################################################################
	// add our sliders to the calendar
	//########################################################################
	_addTimePicker: function(dp_inst) {
		var currDT = (this.$altInput && this._defaults.altFieldTimeOnly) ?
				this.$input.val() + ' ' + this.$altInput.val() : 
				this.$input.val();

		this.timeDefined = this._parseTime(currDT);
		this._limitMinMaxDateTime(dp_inst, false);
		this._injectTimePicker();
	},

	//########################################################################
	// parse the time string from input value or _setTime
	//########################################################################
	_parseTime: function(timeString, withDate) {
		var regstr = this._defaults.timeFormat.toString()
				.replace(/h{1,2}/ig, '(\\d?\\d)')
				.replace(/m{1,2}/ig, '(\\d?\\d)')
				.replace(/s{1,2}/ig, '(\\d?\\d)')
				.replace(/t{1,2}/ig, '(am|pm|a|p)?')
				.replace(/z{1}/ig, '((\\+|-)\\d\\d\\d\\d)?')
				.replace(/\s/g, '\\s?') + this._defaults.timeSuffix + '$',
			order = this._getFormatPositions(),
			treg;

		if (!this.inst) this.inst = $.datepicker._getInst(this.$input[0]);

		if (withDate || !this._defaults.timeOnly) {
			// the time should come after x number of characters and a space.
			// x = at least the length of text specified by the date format
			var dp_dateFormat = $.datepicker._get(this.inst, 'dateFormat');
			// escape special regex characters in the seperator
			var specials = new RegExp("[.*+?|()\\[\\]{}\\\\]", "g");
			regstr = '.{' + dp_dateFormat.length + ',}' + this._defaults.separator.replace(specials, "\\$&") + regstr;
		}
		
		treg = timeString.match(new RegExp(regstr, 'i'));

		if (treg) {
			if (order.t !== -1)
				this.ampm = ((treg[order.t] === undefined || treg[order.t].length === 0) ?
					'' :
					(treg[order.t].charAt(0).toUpperCase() == 'A') ? 'AM' : 'PM').toUpperCase();

			if (order.h !== -1) {
				if (this.ampm == 'AM' && treg[order.h] == '12') 
					this.hour = 0; // 12am = 0 hour
				else if (this.ampm == 'PM' && treg[order.h] != '12') 
					this.hour = (parseFloat(treg[order.h]) + 12).toFixed(0); // 12pm = 12 hour, any other pm = hour + 12
				else this.hour = Number(treg[order.h]);
			}

			if (order.m !== -1) this.minute = Number(treg[order.m]);
			if (order.s !== -1) this.second = Number(treg[order.s]);
			if (order.z !== -1) this.timezone = treg[order.z];
			
			return true;

		}
		return false;
	},

	//########################################################################
	// figure out position of time elements.. cause js cant do named captures
	//########################################################################
	_getFormatPositions: function() {
		var finds = this._defaults.timeFormat.toLowerCase().match(/(h{1,2}|m{1,2}|s{1,2}|t{1,2}|z)/g),
			orders = { h: -1, m: -1, s: -1, t: -1, z: -1 };

		if (finds)
			for (var i = 0; i < finds.length; i++)
				if (orders[finds[i].toString().charAt(0)] == -1)
					orders[finds[i].toString().charAt(0)] = i + 1;

		return orders;
	},

	//########################################################################
	// generate and inject html for timepicker into ui datepicker
	//########################################################################
	_injectTimePicker: function() {
		var $dp = this.inst.dpDiv,
			o = this._defaults,
			tp_inst = this,
			// Added by Peter Medeiros:
			// - Figure out what the hour/minute/second max should be based on the step values.
			// - Example: if stepMinute is 15, then minMax is 45.
			hourMax = (o.hourMax - (o.hourMax % o.stepHour)).toFixed(0),
			minMax  = (o.minuteMax - (o.minuteMax % o.stepMinute)).toFixed(0),
			secMax  = (o.secondMax - (o.secondMax % o.stepSecond)).toFixed(0),
			dp_id = this.inst.id.toString().replace(/([^A-Za-z0-9_])/g, '');

		// Prevent displaying twice
		//if ($dp.find("div#ui-timepicker-div-"+ dp_id).length === 0) {
		if ($dp.find("div#ui-timepicker-div-"+ dp_id).length === 0 && o.showTimepicker) {
			var noDisplay = ' style="display:none;"',
				html =	'<div class="ui-timepicker-div" id="ui-timepicker-div-' + dp_id + '"><dl>' +
						'<dt class="ui_tpicker_time_label" id="ui_tpicker_time_label_' + dp_id + '"' +
						((o.showTime) ? '' : noDisplay) + '>' + o.timeText + '</dt>' +
						'<dd class="ui_tpicker_time" id="ui_tpicker_time_' + dp_id + '"' +
						((o.showTime) ? '' : noDisplay) + '></dd>' +
						'<dt class="ui_tpicker_hour_label" id="ui_tpicker_hour_label_' + dp_id + '"' +
						((o.showHour) ? '' : noDisplay) + '>' + o.hourText + '</dt>',
				hourGridSize = 0,
				minuteGridSize = 0,
				secondGridSize = 0,
				size;
 
			if (o.showHour && o.hourGrid > 0) {
				html += '<dd class="ui_tpicker_hour">' +
						'<div id="ui_tpicker_hour_' + dp_id + '"' + ((o.showHour)   ? '' : noDisplay) + '></div>' +
						'<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>';

				for (var h = o.hourMin; h <= hourMax; h += o.hourGrid) {
					hourGridSize++;
					var tmph = (o.ampm && h > 12) ? h-12 : h;
					if (tmph < 10) tmph = '0' + tmph;
					if (o.ampm) {
						if (h == 0) tmph = 12 +'a';
						else if (h < 12) tmph += 'a';
						else tmph += 'p';
					}
					html += '<td>' + tmph + '</td>';
				}

				html += '</tr></table></div>' +
						'</dd>';
			} else html += '<dd class="ui_tpicker_hour" id="ui_tpicker_hour_' + dp_id + '"' +
							((o.showHour) ? '' : noDisplay) + '></dd>';

			html += '<dt class="ui_tpicker_minute_label" id="ui_tpicker_minute_label_' + dp_id + '"' +
					((o.showMinute) ? '' : noDisplay) + '>' + o.minuteText + '</dt>';

			if (o.showMinute && o.minuteGrid > 0) {
				html += '<dd class="ui_tpicker_minute ui_tpicker_minute_' + o.minuteGrid + '">' +
						'<div id="ui_tpicker_minute_' + dp_id + '"' +
						((o.showMinute) ? '' : noDisplay) + '></div>' +
						'<div style="padding-left: 1px"><table class="ui-tpicker-grid-label"><tr>';

				for (var m = o.minuteMin; m <= minMax; m += o.minuteGrid) {
					minuteGridSize++;
					html += '<td>' + ((m < 10) ? '0' : '') + m + '</td>';
				}

				html += '</tr></table></div>' +
						'</dd>';
			} else html += '<dd class="ui_tpicker_minute" id="ui_tpicker_minute_' + dp_id + '"' +
							((o.showMinute) ? '' : noDisplay) + '></dd>';

			html += '<dt class="ui_tpicker_second_label" id="ui_tpicker_second_label_' + dp_id + '"' +
					((o.showSecond) ? '' : noDisplay) + '>' + o.secondText + '</dt>';

			if (o.showSecond && o.secondGrid > 0) {
				html += '<dd class="ui_tpicker_second ui_tpicker_second_' + o.secondGrid + '">' +
						'<div id="ui_tpicker_second_' + dp_id + '"' +
						((o.showSecond) ? '' : noDisplay) + '></div>' +
						'<div style="padding-left: 1px"><table><tr>';

				for (var s = o.secondMin; s <= secMax; s += o.secondGrid) {
					secondGridSize++;
					html += '<td>' + ((s < 10) ? '0' : '') + s + '</td>';
				}

				html += '</tr></table></div>' +
						'</dd>';
			} else html += '<dd class="ui_tpicker_second" id="ui_tpicker_second_' + dp_id + '"'	+
							((o.showSecond) ? '' : noDisplay) + '></dd>';
							
			html += '<dt class="ui_tpicker_timezone_label" id="ui_tpicker_timezone_label_' + dp_id + '"' +
					((o.showTimezone) ? '' : noDisplay) + '>' + o.timezoneText + '</dt>';
			html += '<dd class="ui_tpicker_timezone" id="ui_tpicker_timezone_' + dp_id + '"'	+
							((o.showTimezone) ? '' : noDisplay) + '></dd>';

			html += '</dl></div>';
			$tp = $(html);

				// if we only want time picker...
			if (o.timeOnly === true) {
				$tp.prepend(
					'<div class="ui-widget-header ui-helper-clearfix ui-corner-all">' +
						'<div class="ui-datepicker-title">' + o.timeOnlyTitle + '</div>' +
					'</div>');
				$dp.find('.ui-datepicker-header, .ui-datepicker-calendar').hide();
			}

			this.hour_slider = $tp.find('#ui_tpicker_hour_'+ dp_id).slider({
				orientation: "horizontal",
				value: this.hour,
				min: o.hourMin,
				max: hourMax,
				step: o.stepHour,
				slide: function(event, ui) {
					tp_inst.hour_slider.slider( "option", "value", ui.value);
					tp_inst._onTimeChange();
				}
			});

			// Updated by Peter Medeiros:
			// - Pass in Event and UI instance into slide function
			this.minute_slider = $tp.find('#ui_tpicker_minute_'+ dp_id).slider({
				orientation: "horizontal",
				value: this.minute,
				min: o.minuteMin,
				max: minMax,
				step: o.stepMinute,
				slide: function(event, ui) {
					// update the global minute slider instance value with the current slider value
					tp_inst.minute_slider.slider( "option", "value", ui.value);
					tp_inst._onTimeChange();
				}
			});

			this.second_slider = $tp.find('#ui_tpicker_second_'+ dp_id).slider({
				orientation: "horizontal",
				value: this.second,
				min: o.secondMin,
				max: secMax,
				step: o.stepSecond,
				slide: function(event, ui) {
					tp_inst.second_slider.slider( "option", "value", ui.value);
					tp_inst._onTimeChange();
				}
			});
			
			
			this.timezone_select = $tp.find('#ui_tpicker_timezone_'+ dp_id).append('<select></select>').find("select");
			$.fn.append.apply(this.timezone_select,
				$.map(o.timezoneList, function(val, idx) {
					return $("<option />")
						.val(typeof val == "object" ? val.value : val)
						.text(typeof val == "object" ? val.label : val);
				})
			);
			this.timezone_select.val((typeof this.timezone != "undefined" && this.timezone != null && this.timezone != "") ? this.timezone : o.timezone);
			this.timezone_select.change(function() {
				tp_inst._onTimeChange();
			});

			// Add grid functionality
			if (o.showHour && o.hourGrid > 0) {
				size = 100 * hourGridSize * o.hourGrid / (hourMax - o.hourMin);

				$tp.find(".ui_tpicker_hour table").css({
					width: size + "%",
					marginLeft: (size / (-2 * hourGridSize)) + "%",
					borderCollapse: 'collapse'
				}).find("td").each( function(index) {
					$(this).click(function() {
						var h = $(this).html();
						if(o.ampm)	{
							var ap = h.substring(2).toLowerCase(),
								aph = parseInt(h.substring(0,2), 10);
							if (ap == 'a') {
								if (aph == 12) h = 0;
								else h = aph;
							} else if (aph == 12) h = 12;
							else h = aph + 12;
						}
						tp_inst.hour_slider.slider("option", "value", h);
						tp_inst._onTimeChange();
						tp_inst._onSelectHandler();
					}).css({
						cursor: 'pointer',
						width: (100 / hourGridSize) + '%',
						textAlign: 'center',
						overflow: 'hidden'
					});
				});
			}

			if (o.showMinute && o.minuteGrid > 0) {
				size = 100 * minuteGridSize * o.minuteGrid / (minMax - o.minuteMin);
				$tp.find(".ui_tpicker_minute table").css({
					width: size + "%",
					marginLeft: (size / (-2 * minuteGridSize)) + "%",
					borderCollapse: 'collapse'
				}).find("td").each(function(index) {
					$(this).click(function() {
						tp_inst.minute_slider.slider("option", "value", $(this).html());
						tp_inst._onTimeChange();
						tp_inst._onSelectHandler();
					}).css({
						cursor: 'pointer',
						width: (100 / minuteGridSize) + '%',
						textAlign: 'center',
						overflow: 'hidden'
					});
				});
			}

			if (o.showSecond && o.secondGrid > 0) {
				$tp.find(".ui_tpicker_second table").css({
					width: size + "%",
					marginLeft: (size / (-2 * secondGridSize)) + "%",
					borderCollapse: 'collapse'
				}).find("td").each(function(index) {
					$(this).click(function() {
						tp_inst.second_slider.slider("option", "value", $(this).html());
						tp_inst._onTimeChange();
						tp_inst._onSelectHandler();
					}).css({
						cursor: 'pointer',
						width: (100 / secondGridSize) + '%',
						textAlign: 'center',
						overflow: 'hidden'
					});
				});
			}

			var $buttonPanel = $dp.find('.ui-datepicker-buttonpane');
			if ($buttonPanel.length) $buttonPanel.before($tp);
			else $dp.append($tp);

			this.$timeObj = $tp.find('#ui_tpicker_time_'+ dp_id);

			if (this.inst !== null) {
				var timeDefined = this.timeDefined;
				this._onTimeChange();
				this.timeDefined = timeDefined;
			}

			//Emulate datepicker onSelect behavior. Call on slidestop.
			var onSelectDelegate = function() {
				tp_inst._onSelectHandler();
			};
			this.hour_slider.bind('slidestop',onSelectDelegate);
			this.minute_slider.bind('slidestop',onSelectDelegate);
			this.second_slider.bind('slidestop',onSelectDelegate);
		}
	},

	//########################################################################
	// This function tries to limit the ability to go outside the 
	// min/max date range
	//########################################################################
	_limitMinMaxDateTime: function(dp_inst, adjustSliders){
		var o = this._defaults,
			dp_date = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay);

		if(!this._defaults.showTimepicker) return; // No time so nothing to check here

		if($.datepicker._get(dp_inst, 'minDateTime') !== null && dp_date){
			var minDateTime = $.datepicker._get(dp_inst, 'minDateTime'),
				minDateTimeDate = new Date(minDateTime.getFullYear(), minDateTime.getMonth(), minDateTime.getDate(), 0, 0, 0, 0);

			if(this.hourMinOriginal === null || this.minuteMinOriginal === null || this.secondMinOriginal === null){
				this.hourMinOriginal = o.hourMin;
				this.minuteMinOriginal = o.minuteMin;
				this.secondMinOriginal = o.secondMin;
			}

			if(dp_inst.settings.timeOnly || minDateTimeDate.getTime() == dp_date.getTime()) {
				this._defaults.hourMin = minDateTime.getHours();
				if (this.hour <= this._defaults.hourMin) {
					this.hour = this._defaults.hourMin;
					this._defaults.minuteMin = minDateTime.getMinutes();
					if (this.minute <= this._defaults.minuteMin) {
						this.minute = this._defaults.minuteMin;
						this._defaults.secondMin = minDateTime.getSeconds();
					} else {
						if(this.second < this._defaults.secondMin) this.second = this._defaults.secondMin;
						this._defaults.secondMin = this.secondMinOriginal;
					}
				} else {
					this._defaults.minuteMin = this.minuteMinOriginal;
					this._defaults.secondMin = this.secondMinOriginal;
				}
			}else{
				this._defaults.hourMin = this.hourMinOriginal;
				this._defaults.minuteMin = this.minuteMinOriginal;
				this._defaults.secondMin = this.secondMinOriginal;
			}
		}

		if($.datepicker._get(dp_inst, 'maxDateTime') !== null && dp_date){
			var maxDateTime = $.datepicker._get(dp_inst, 'maxDateTime'),
				maxDateTimeDate = new Date(maxDateTime.getFullYear(), maxDateTime.getMonth(), maxDateTime.getDate(), 0, 0, 0, 0);
	
			if(this.hourMaxOriginal === null || this.minuteMaxOriginal === null || this.secondMaxOriginal === null){
				this.hourMaxOriginal = o.hourMax;
				this.minuteMaxOriginal = o.minuteMax;
				this.secondMaxOriginal = o.secondMax;
			}

			if(dp_inst.settings.timeOnly || maxDateTimeDate.getTime() == dp_date.getTime()){
				this._defaults.hourMax = maxDateTime.getHours();
				if (this.hour >= this._defaults.hourMax) {
					this.hour = this._defaults.hourMax;
					this._defaults.minuteMax = maxDateTime.getMinutes();
					if (this.minute >= this._defaults.minuteMax) {
						this.minute = this._defaults.minuteMax;
						this._defaults.secondMax = maxDateTime.getSeconds();
					} else {
						if(this.second > this._defaults.secondMax) this.second = this._defaults.secondMax;
						this._defaults.secondMax = this.secondMaxOriginal;
					}
				} else {
					this._defaults.minuteMax = this.minuteMaxOriginal;
					this._defaults.secondMax = this.secondMaxOriginal;
				}
			}else{
				this._defaults.hourMax = this.hourMaxOriginal;
				this._defaults.minuteMax = this.minuteMaxOriginal;
				this._defaults.secondMax = this.secondMaxOriginal;
			}
		}

		if(adjustSliders !== undefined && adjustSliders === true){
			var hourMax = (this._defaults.hourMax - (this._defaults.hourMax % this._defaults.stepHour)).toFixed(0),
				minMax  = (this._defaults.minuteMax - (this._defaults.minuteMax % this._defaults.stepMinute)).toFixed(0),
				secMax  = (this._defaults.secondMax - (this._defaults.secondMax % this._defaults.stepSecond)).toFixed(0);

			if(this.hour_slider)
				this.hour_slider.slider("option", { min: this._defaults.hourMin, max: hourMax }).slider('value', this.hour);
			if(this.minute_slider)
				this.minute_slider.slider("option", { min: this._defaults.minuteMin, max: minMax }).slider('value', this.minute);
			if(this.second_slider)
				this.second_slider.slider("option", { min: this._defaults.secondMin, max: secMax }).slider('value', this.second);
		}

	},

	
	//########################################################################
	// when a slider moves, set the internal time...
	// on time change is also called when the time is updated in the text field
	//########################################################################
	_onTimeChange: function() {
		var hour   = (this.hour_slider) ? this.hour_slider.slider('value') : false,
			minute = (this.minute_slider) ? this.minute_slider.slider('value') : false,
			second = (this.second_slider) ? this.second_slider.slider('value') : false,
			timezone = (this.timezone_select) ? this.timezone_select.val() : false;

		if (typeof(hour) == 'object') hour = false;
		if (typeof(minute) == 'object') minute = false;
		if (typeof(second) == 'object') second = false;
		if (typeof(timezone) == 'object') timezone = false;
		
		

		if (hour !== false) hour = parseInt(hour,10);
		if (minute !== false) minute = parseInt(minute,10);
		if (second !== false) second = parseInt(second,10);
		
			if(hour > "0" && minute < "15") {this.starthour = hour - 1;} else {this.starthour = hour;}
			if(hour == "0" && minute < "15") {this.starthour = "23";}
			if(hour < "23" && minute > "44") {this.endhour = hour + 1;} else {this.endhour = hour;}
			if(hour == "23" && minute > "44") {this.endhour = "0";}
			
			if(this.starthour < "10"){this.starthour = "0" + this.starthour;}
			if(this.endhour < "10"){this.endhour = "0" + this.endhour;}
			
			if(minute < "15"){this.startminute = 60 - (15 - minute);} else {this.startminute = minute - 15;}
			if(minute > "44"){this.endminute = (minute - 45);} else {this.endminute = minute + 15;}
			
			if(this.startminute < "10"){this.startminute = "0" + this.startminute;}
			if(this.endminute < "10"){this.endminute = "0" + this.endminute;}
			
		var ampm = (hour < 12) ? 'AM' : 'PM';

		// If the update was done in the input field, the input field should not be updated.
		// If the update was done using the sliders, update the input field.
		var hasChanged = (hour != this.hour || minute != this.minute || second != this.second || (this.ampm.length > 0 && this.ampm != ampm) || timezone != this.timezone);
		
		if (hasChanged) {

			if (hour !== false)this.hour = hour;
			if (minute !== false) this.minute = minute;
			if (second !== false) this.second = second;
			if (timezone !== false) this.timezone = timezone;
			
			if (!this.inst) this.inst = $.datepicker._getInst(this.$input[0]);
			
			this._limitMinMaxDateTime(this.inst, true);
		}
		if (this._defaults.ampm) this.ampm = ampm;
		
		this._formatTime();
		this.startTime = this.starthour + ":" + this.startminute;
		this.endTime = this.endhour + ":" + this.endminute;
		if (this.$timeObj) this.$timeObj.text('Zeitraum: ' + this.startTime + '  bis ' + this.endTime + this._defaults.timeSuffix);
		this.timeDefined = true;
		if (hasChanged) this._updateDateTime();
	},
    
	//########################################################################
	// call custom onSelect. 
	// bind to sliders slidestop, and grid click.
	//########################################################################
	_onSelectHandler: function() {
		var onSelect = this._defaults['onSelect'];
		var inputEl = this.$input ? this.$input[0] : null;
		if (onSelect && inputEl) {
			onSelect.apply(inputEl, [this.formattedDateTime, this]);
		}
	},

	//########################################################################
	// format the time all pretty...
	//########################################################################
	_formatTime: function(time, format, ampm) {
		if (ampm == undefined) ampm = this._defaults.ampm;
		time = time || { hour: this.hour, minute: this.minute, second: this.second, ampm: this.ampm, timezone: this.timezone };
		var tmptime = format || this._defaults.timeFormat.toString();

		if (ampm) {
			var hour12 = ((time.ampm == 'AM') ? (time.hour) : (time.hour % 12));
			hour12 = (Number(hour12) === 0) ? 12 : hour12;
			tmptime = tmptime.toString()
				.replace(/hh/g, ((hour12 < 10) ? '0' : '') + hour12)
				.replace(/h/g, hour12)
				.replace(/mm/g, ((time.minute < 10) ? '0' : '') + time.minute)
				.replace(/m/g, time.minute)
				.replace(/ss/g, ((time.second < 10) ? '0' : '') + time.second)
				.replace(/s/g, time.second)
				.replace(/TT/g, time.ampm.toUpperCase())
				.replace(/Tt/g, time.ampm.toUpperCase())
				.replace(/tT/g, time.ampm.toLowerCase())
				.replace(/tt/g, time.ampm.toLowerCase())
				.replace(/T/g, time.ampm.charAt(0).toUpperCase())
				.replace(/t/g, time.ampm.charAt(0).toLowerCase())
				.replace(/z/g, time.timezone);
		} else {
			tmptime = tmptime.toString()
				.replace(/hh/g, ((time.hour < 10) ? '0' : '') + time.hour)
				.replace(/h/g, time.hour)
				.replace(/mm/g, ((time.minute < 10) ? '0' : '') + time.minute)
				.replace(/m/g, time.minute)
				.replace(/ss/g, ((time.second < 10) ? '0' : '') + time.second)
				.replace(/s/g, time.second)
				.replace(/z/g, time.timezone);
			tmptime = $.trim(tmptime.replace(/t/gi, ''));
		}

		if (arguments.length) return tmptime;
		else this.formattedTime = tmptime;
	},

	//########################################################################
	// update our input with the new date time..
	//########################################################################
	_updateDateTime: function(dp_inst) {
		dp_inst = this.inst || dp_inst,
			dt = new Date(dp_inst.selectedYear, dp_inst.selectedMonth, dp_inst.selectedDay),
			dateFmt = $.datepicker._get(dp_inst, 'dateFormat'),
			formatCfg = $.datepicker._getFormatConfig(dp_inst),
			timeAvailable = dt !== null && this.timeDefined;
		this.formattedDate = $.datepicker.formatDate(dateFmt, (dt === null ? new Date() : dt), formatCfg);
		var formattedDateTime = this.formattedDate;
		if (dp_inst.lastVal !== undefined && (dp_inst.lastVal.length > 0 && this.$input.val().length === 0))
			return;

		if (this._defaults.timeOnly === true) {
			formattedDateTime = this.formattedTime;
		} else if (this._defaults.timeOnly !== true && (this._defaults.alwaysSetTime || timeAvailable)) {
			formattedDateTime += this._defaults.separator + this.formattedTime + this._defaults.timeSuffix;
		}

		this.formattedDateTime = formattedDateTime;

		if(!this._defaults.showTimepicker) {
			this.$input.val(this.formattedDate);
		} else if (this.$altInput && this._defaults.altFieldTimeOnly === true) {
			this.$altInput.val(this.formattedTime);
			this.$input.val(this.formattedDate);
		} else if(this.$altInput) {
			this.$altInput.val(formattedDateTime);
			this.$input.val(formattedDateTime);
		} else {
			this.$input.val(formattedDateTime);
		}
		
		this.$input.trigger("change");
	}

});

$.fn.extend({
	//########################################################################
	// shorthand just to use timepicker..
	//########################################################################
	timepicker: function(o) {
		o = o || {};
		var tmp_args = arguments;

		if (typeof o == 'object') tmp_args[0] = $.extend(o, { timeOnly: true });

		return $(this).each(function() {
			$.fn.datetimepicker.apply($(this), tmp_args);
		});
	},

	//########################################################################
	// extend timepicker to datepicker
	//########################################################################
	datetimepicker: function(o) {
		o = o || {};
		var $input = this,
		tmp_args = arguments;

		if (typeof(o) == 'string'){
			if(o == 'getDate') 
				return $.fn.datepicker.apply($(this[0]), tmp_args);
			else 
				return this.each(function() {
					var $t = $(this);
					$t.datepicker.apply($t, tmp_args);
				});
		}
		else
			return this.each(function() {
				var $t = $(this);
				$t.datepicker($.timepicker._newInst($t, o)._defaults);
			});
	}
});

//########################################################################
// the bad hack :/ override datepicker so it doesnt close on select
// inspired: http://stackoverflow.com/questions/1252512/jquery-datepicker-prevent-closing-picker-when-clicking-a-date/1762378#1762378
//########################################################################
$.datepicker._base_selectDate = $.datepicker._selectDate;
$.datepicker._selectDate = function (id, dateStr) {
	var inst = this._getInst($(id)[0]),
		tp_inst = this._get(inst, 'timepicker');

	if (tp_inst) {
		tp_inst._limitMinMaxDateTime(inst, true);
		inst.inline = inst.stay_open = true;
		//This way the onSelect handler called from calendarpicker get the full dateTime
		this._base_selectDate(id, dateStr + tp_inst._defaults.separator + tp_inst.formattedTime + tp_inst._defaults.timeSuffix);
		inst.inline = inst.stay_open = false;
		this._notifyChange(inst);
		this._updateDatepicker(inst);
	}
	else this._base_selectDate(id, dateStr);
};

//#############################################################################################
// second bad hack :/ override datepicker so it triggers an event when changing the input field
// and does not redraw the datepicker on every selectDate event
//#############################################################################################
$.datepicker._base_updateDatepicker = $.datepicker._updateDatepicker;
$.datepicker._updateDatepicker = function(inst) {

	// don't popup the datepicker if there is another instance already opened
	var input = inst.input[0];
	if($.datepicker._curInst &&
	   $.datepicker._curInst != inst &&
	   $.datepicker._datepickerShowing &&
	   $.datepicker._lastInput != input) {
		return;
	}

	if (typeof(inst.stay_open) !== 'boolean' || inst.stay_open === false) {
				
		this._base_updateDatepicker(inst);
		
		// Reload the time control when changing something in the input text field.
		var tp_inst = this._get(inst, 'timepicker');
		if(tp_inst) tp_inst._addTimePicker(inst);
	}
};

//#######################################################################################
// third bad hack :/ override datepicker so it allows spaces and colon in the input field
//#######################################################################################
$.datepicker._base_doKeyPress = $.datepicker._doKeyPress;
$.datepicker._doKeyPress = function(event) {
	var inst = $.datepicker._getInst(event.target),
		tp_inst = $.datepicker._get(inst, 'timepicker');

	if (tp_inst) {
		if ($.datepicker._get(inst, 'constrainInput')) {
			var ampm = tp_inst._defaults.ampm,
				dateChars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat')),
				datetimeChars = tp_inst._defaults.timeFormat.toString()
								.replace(/[hms]/g, '')
								.replace(/TT/g, ampm ? 'APM' : '')
								.replace(/Tt/g, ampm ? 'AaPpMm' : '')
								.replace(/tT/g, ampm ? 'AaPpMm' : '')
								.replace(/T/g, ampm ? 'AP' : '')
								.replace(/tt/g, ampm ? 'apm' : '')
								.replace(/t/g, ampm ? 'ap' : '') +
								" " +
								tp_inst._defaults.separator +
								tp_inst._defaults.timeSuffix +
								(tp_inst._defaults.showTimezone ? tp_inst._defaults.timezoneList.join('') : '') +
								dateChars,
				chr = String.fromCharCode(event.charCode === undefined ? event.keyCode : event.charCode);
			return event.ctrlKey || (chr < ' ' || !dateChars || datetimeChars.indexOf(chr) > -1);
		}
	}
	
	return $.datepicker._base_doKeyPress(event);
};

//#######################################################################################
// Override key up event to sync manual input changes.
//#######################################################################################
$.datepicker._base_doKeyUp = $.datepicker._doKeyUp;
$.datepicker._doKeyUp = function (event) {
	var inst = $.datepicker._getInst(event.target),
		tp_inst = $.datepicker._get(inst, 'timepicker');

	if (tp_inst) {
		if (tp_inst._defaults.timeOnly && (inst.input.val() != inst.lastVal)) {
			try {
				$.datepicker._updateDatepicker(inst);
			}
			catch (err) {
				$.datepicker.log(err);
			}
		}
	}

	return $.datepicker._base_doKeyUp(event);
};

//#######################################################################################
// override "Today" button to also grab the time.
//#######################################################################################
$.datepicker._base_gotoToday = $.datepicker._gotoToday;
$.datepicker._gotoToday = function(id) {
	this._base_gotoToday(id);
	this._setTime(this._getInst($(id)[0]), new Date());
};

//#######################################################################################
// Disable & enable the Time in the datetimepicker
//#######################################################################################
$.datepicker._disableTimepickerDatepicker = function(target, date, withDate) {
	var inst = this._getInst(target),
	tp_inst = this._get(inst, 'timepicker');
	$(target).datepicker('getDate'); // Init selected[Year|Month|Day]
	if (tp_inst) {
		tp_inst._defaults.showTimepicker = false;
		tp_inst._updateDateTime(inst);
	}
};

$.datepicker._enableTimepickerDatepicker = function(target, date, withDate) {
	var inst = this._getInst(target),
	tp_inst = this._get(inst, 'timepicker');
	$(target).datepicker('getDate'); // Init selected[Year|Month|Day]
	if (tp_inst) {
		tp_inst._defaults.showTimepicker = true;
		tp_inst._addTimePicker(inst); // Could be disabled on page load
		tp_inst._updateDateTime(inst);
	}
};

//#######################################################################################
// Create our own set time function
//#######################################################################################
$.datepicker._setTime = function(inst, date) {
	var tp_inst = this._get(inst, 'timepicker');
	if (tp_inst) {
		var defaults = tp_inst._defaults,
			// calling _setTime with no date sets time to defaults
			hour = date ? date.getHours() : defaults.hour,
			minute = date ? date.getMinutes() : defaults.minute,
			second = date ? date.getSeconds() : defaults.second;

		//check if within min/max times..
		if ((hour < defaults.hourMin || hour > defaults.hourMax) || (minute < defaults.minuteMin || minute > defaults.minuteMax) || (second < defaults.secondMin || second > defaults.secondMax)) {
			hour = defaults.hourMin;
			minute = defaults.minuteMin;
			second = defaults.secondMin;
		}

		tp_inst.hour = hour;
		tp_inst.minute = minute;
		tp_inst.second = second;

		if (tp_inst.hour_slider) tp_inst.hour_slider.slider('value', hour);
		if (tp_inst.minute_slider) tp_inst.minute_slider.slider('value', minute);
		if (tp_inst.second_slider) tp_inst.second_slider.slider('value', second);

		tp_inst._onTimeChange();
		tp_inst._updateDateTime(inst);
	}
};

//#######################################################################################
// Create new public method to set only time, callable as $().datepicker('setTime', date)
//#######################################################################################
$.datepicker._setTimeDatepicker = function(target, date, withDate) {
	var inst = this._getInst(target),
		tp_inst = this._get(inst, 'timepicker');

	if (tp_inst) {
		this._setDateFromField(inst);
		var tp_date;
		if (date) {
			if (typeof date == "string") {
				tp_inst._parseTime(date, withDate);
				tp_date = new Date();
				tp_date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second);
			}
			else tp_date = new Date(date.getTime());
			if (tp_date.toString() == 'Invalid Date') tp_date = undefined;
			this._setTime(inst, tp_date);
		}
	}

};

//#######################################################################################
// override setDate() to allow setting time too within Date object
//#######################################################################################
$.datepicker._base_setDateDatepicker = $.datepicker._setDateDatepicker;
$.datepicker._setDateDatepicker = function(target, date) {
	var inst = this._getInst(target),
	tp_date = (date instanceof Date) ? new Date(date.getTime()) : date;

	this._updateDatepicker(inst);
	this._base_setDateDatepicker.apply(this, arguments);
	this._setTimeDatepicker(target, tp_date, true);
};

//#######################################################################################
// override getDate() to allow getting time too within Date object
//#######################################################################################
$.datepicker._base_getDateDatepicker = $.datepicker._getDateDatepicker;
$.datepicker._getDateDatepicker = function(target, noDefault) {
	var inst = this._getInst(target),
		tp_inst = this._get(inst, 'timepicker');

	if (tp_inst) {
		this._setDateFromField(inst, noDefault);
		var date = this._getDate(inst);
		if (date && tp_inst._parseTime($(target).val(), tp_inst.timeOnly)) date.setHours(tp_inst.hour, tp_inst.minute, tp_inst.second);
		return date;
	}
	return this._base_getDateDatepicker(target, noDefault);
};

//#######################################################################################
// override parseDate() because UI 1.8.14 throws an error about "Extra characters"
// An option in datapicker to ignore extra format characters would be nicer.
//#######################################################################################
$.datepicker._base_parseDate = $.datepicker.parseDate;
$.datepicker.parseDate = function(format, value, settings) {
	var date;
	try {
		date = this._base_parseDate(format, value, settings);
	} catch (err) {
		// Hack!  The error message ends with a colon, a space, and
		// the "extra" characters.  We rely on that instead of
		// attempting to perfectly reproduce the parsing algorithm.
		date = this._base_parseDate(format, value.substring(0,value.length-(err.length-err.indexOf(':')-2)), settings);
	}
	return date;
};

//#######################################################################################
// override options setter to add time to maxDate(Time) and minDate(Time)
//#######################################################################################
$.datepicker._base_optionDatepicker = $.datepicker._optionDatepicker;
$.datepicker._optionDatepicker = function(target, name, value) {
	this._base_optionDatepicker(target, name, value);
	var inst = this._getInst(target),
		tp_inst = this._get(inst, 'timepicker');
	if (tp_inst) {
		//Set minimum and maximum date values if we have timepicker
		if(name==='minDate') {
        	if(tp_inst._defaults.minDate !== undefined && tp_inst._defaults.minDate instanceof Date)
				tp_inst._defaults.minDateTime = new Date(value);
			if(tp_inst._defaults.minDateTime !== undefined && tp_inst._defaults.minDateTime instanceof Date)
				tp_inst._defaults.minDate = new Date(tp_inst._defaults.minDateTime.getTime());
			tp_inst._limitMinMaxDateTime(inst,true);
		}
		if(name==='maxDate') {
			if(tp_inst._defaults.maxDate !== undefined && tp_inst._defaults.maxDate instanceof Date)
				tp_inst._defaults.maxDateTime = new Date(value);
			if(tp_inst._defaults.maxDateTime !== undefined && tp_inst._defaults.maxDateTime instanceof Date)
				tp_inst._defaults.maxDate = new Date(tp_inst._defaults.maxDateTime.getTime());
			tp_inst._limitMinMaxDateTime(inst,true);
		}
	}
};

//#######################################################################################
// jQuery extend now ignores nulls!
//#######################################################################################
function extendRemove(target, props) {
	$.extend(target, props);
	for (var name in props)
		if (props[name] === null || props[name] === undefined)
			target[name] = props[name];
	return target;
}

$.timepicker = new Timepicker(); // singleton instance
$.timepicker.version = "0.9.6";

})(jQuery);

$.datepicker.regional['de'] = {
	closeText: 'Schließen',
	prevText: 'zurück',
	nextText: 'vor',
	currentText: 'Heute',
	monthNames: ['Januar','Februar','März','April','Mai','Juni',
	'Juli','August','September','Oktober','November','Dezember'],
	monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun',
	'Jul','Aug','Sep','Okt','Nov','Dez'],
	dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'],
	dayNamesShort: ['Son','Mon','Die','Mit','Don','Fre','Sam'],
	dayNamesMin: ['So','Mo','Di','Mi','Do','Fr','Sa'],
	weekHeader: 'KW',
	dateFormat: 'dd.mm.yy',
	firstDay: 1,
	isRTL: false,
	showMonthAfterYear: false,
	yearSuffix: ''
};
$.datepicker.setDefaults($.datepicker.regional['de']);

$.timepicker.regional['de'] = {
	timeOnlyTitle: 'Nur Zeit',
	timeText: 'Uhrzeit',
	hourText: 'Stunde',
	minuteText: 'Minute',
	secondText: 'Sekunde',
	currentText: 'Jetzt',
	closeText: 'Schließen',
	ampm: false
};
$.timepicker.setDefaults($.timepicker.regional['de']);
