jQuery.noConflict();

var calendarPE, previousCalendarPE = null;

sas_tmstp=Math.round(Math.random()*10000000000);sas_masterflag=1;
function SmartAdServer(sas_pageid,sas_formatid,sas_target) {
  if (sas_masterflag==1) {sas_masterflag=0;sas_master='M';} else {sas_master='S';};
  document.write('<scr'+'ipt SRC="http://www.smartadserver.com/call/pubj/' + sas_pageid + '/' + sas_formatid + '/'+sas_master + '/' + sas_tmstp + '/' + escape(sas_target) + '?"></scr'+'ipt>');
}

function play(radio, podcast, logo, stream, fave, radio_permalink, podcast_permalink, episode_id, logged_in) {
	// console.log('play radio(' + radio + ') podcast(' + podcast + ')');
	Element.stop;		
	if (stream) {
		if (stream.indexOf("mms://") == 0) {
			Element.update("playerEmbed", QT_GenerateOBJECTText(stream, '', 'autoplay', 'true'));
		} else {
		  new Ajax.Updater('playerEmbed', (stream) ? stream : "&nbsp;", {method:'get', evalScripts:true});
		}
	} else {
		Element.update("playerEmbed", '');
	}
	playerKnobPlayImage = (radio == null) ? 'Play' : 'Stop';
  Element.writeAttribute('playerKnobPlay', 'src', value = '/images/player/playerKnob' + playerKnobPlayImage + '.png');
  Element.update("player_radio_name", (radio) ? radio : 'R player');
  Element.update("player_podcast_name", (podcast) ? podcast : 'attend vos instructions.');
  Element.writeAttribute('radio_permalink', 'value', value = radio_permalink);
  Element.writeAttribute('podcast_permalink', 'value', value = podcast_permalink);
  Element.writeAttribute('logo_player', 'src', value = (logo) ? logo : '/images/RP_logo_web.png');
  Element.writeAttribute('playerKnobPlay', 'onclick', value = "play(null, null, null, null, null, null, null)");
	//Getting the favorite ID based on the radio and podcast permalink
	if (logged_in == 'true') {
		if (radio_permalink) {
			// TODO: podcasts!
			url = '/favorite/for_permalink/' + radio_permalink;
			if (podcast_permalink && podcast_permalink != '' && podcast_permalink != ' ') {
				url += '/' + podcast_permalink;
			}
			url += '.json';
			// console.log(url);
			var fav_id = 0;
			new Ajax.Request(url, {
				method: 'get', 
				onLoading: function() { 
					// console.log('LOADING'); 
					$('spinner').show();$('home_icon').hide();
				},
				onFailure: function() { console.log('FAILURE!');},
				onComplete: function(transport){ 
				  $('spinner').hide();
				  $('home_icon').show();
					json = transport.responseJSON;
					if (json) {
				    fav = json.favorite;
						fav_id = (fav) ? fav.id : 0;
					}
					// console.log(fav_id);
					Element.writeAttribute('favorite_id', 'value', value = fav_id);
					Element.writeAttribute('episode_id', 'value', value = episode_id);
					faveImage = "/images/player/playerButtonStar";
					// console.log('fav_id');
					// console.log(fav_id);
					if (fav_id != 0) {
						faveImage += "Green";
					}
					faveImage += ".png";
				  Element.writeAttribute('playerKnobFave', 'src', value = faveImage);
				}
			});
		}
	}
}

function next_previous(next_or_previous, logged_in) {
	if (logged_in == 'true') {
		url = '/favorite/' + $('favorite_id').readAttribute('value') + '/' + next_or_previous + '.json';
	} else {
		url = '/episode/' + $('episode_id').readAttribute('value') + '/' + next_or_previous + '.json';
	}
	play_for_next_previous(url, next_or_previous);
}

function play_for_next_previous(url, next_or_previous) {
	// console.log('play_for_next_previous');
	// console.log(url);
  new Ajax.Request(url, {
		method: 'get', 
		onLoading: function() { $('spinner').show();$('home_icon').hide();},
		onFailure: function() { next_previous(next_or_previous, '');},
		onComplete: function(transport){ 
		  $('spinner').hide();
		  $('home_icon').show();
	    fav = transport.responseJSON.favorite;
	    if (fav == undefined) {
				// console.log('UNDEFINED?');
		    fav = transport.responseJSON.episode;
				// console.log(fav);
				fav_id = 0;
				episode_id = fav.id;
			} else {
				fav_id = fav.id;
				episode_id = fav.episode_id;
			}
	    play(fav.radio_name, fav.podcast_name, fav.logo_url, fav.playlist, fav_id, fav.radio_permalink, fav.podcast_permalink, episode_id);
		},
		evalScripts: true
	});
}

function player (user) {
 fenster = window.open('/users/'+user+'?popup=true', 'radiopodcast_player', "width=960,height=140,status=no,location=no,locationbar=no,menubar=no,toolbar=no,scrollbars=no,resizable=no");
 fenster.focus();
}

function favorite(user_path) {
	// console.log('USER: ' + user_path);
	podcast_permalink = $('podcast_permalink').readAttribute('value');
  add = $('playerKnobFave').readAttribute('src').indexOf('Green') == -1;
  url_add = '/radios/'+$('radio_permalink').readAttribute('value')+(podcast_permalink != '' ? '/podcasts/' + podcast_permalink : '')+'/favorites.json';
  url_delete = user_path + '/favorites/' + $('favorite_id').readAttribute('value') + '.json';
	var url;
	var url_after;
  if (add) {
    url = url_add; // '/radios/'+$('radio_permalink').readAttribute('value')+(podcast_permalink != '' ? '/podcasts/' + podcast_permalink : '')+'/favorites.json';
		url_after = url_delete;
  } else {
    url = url_delete; //user_path + '/favorites/' + $('favorite_id').readAttribute('value') + '.json';
		url_after = url_add;
  }
	// console.log('URL:'+url);
	favoriteWithUrl(true, add, url, url_after, null, null);
}

function favoriteFromPage(add, url, url_after, element_id, class_now, class_after) {
	var favorite_id = 'favorite_id';
	var last_favorite_id = 'last_favorite_id';
	if (element_id) {
		favorite_id = element_id + '_favorite_id';
		last_favorite_id = element_id + '_last_favorite_id';
	}
	fav_id = $(favorite_id).readAttribute('value');
	last_fav_id = $(last_favorite_id).readAttribute('value');
	var onclick;
	var js_suffix = element_id ? '\', \'' + element_id + '\', \'' + class_after + '\', \'' + class_now + '\'' : '\', null, null, null';
	js_suffix = js_suffix + '); return false;';
	if (add) {
		text = 'Supprimer des favoris';
		// We need to replace in both case. Either we just added it or we deleted it before - might have been written simpler, maybe.
		url_after = url_after.replace('/.json', '/' + fav_id + '.json');
		url_after = url_after.replace('/' + last_fav_id + '.json', '/' + fav_id + '.json');
		onclick = 'favoriteWithUrl(false, false, \'' + url_after + '\', \'' + url + js_suffix;
	} else {
		text = 'Ajouter aux favoris';
		url = url.replace('/.json', '/' + fav_id + '.json');
		onclick = 'favoriteWithUrl(false, true, \'' + url_after + '\', \'' + url + js_suffix;
	}
	if (!element_id) {
		element_id = 'add_to_favorite';
	}
	if (class_now) {
		Element.removeClassName(element_id, class_now);
		Element.addClassName(element_id, class_after);
	} else {
	  Element.update(element_id, text);
	}
  Element.writeAttribute(element_id, 'onclick', value = onclick);
}

function favoriteWithUrl(player, add, url, url_after, element_id, class_now, class_after) {
  new Ajax.Request(url, {
		method: add ? 'post' : 'delete', 
		onLoading: function() { $('spinner').show();$('home_icon').hide(); },
		onComplete: function(transport) { 
		  $('spinner').hide();$('home_icon').show();
			json = transport.responseJSON;
		  fav = json.favorite;
			if (fav) {
				var favorite_id = 'favorite_id';
				var last_favorite_id = 'last_favorite_id';
				if (element_id) {
					favorite_id = element_id + '_favorite_id';
					last_favorite_id = element_id + '_last_favorite_id';
				}
			  Element.writeAttribute(last_favorite_id, 'value', value = $(favorite_id).readAttribute('value'));
			  Element.writeAttribute(favorite_id, 'value', value = fav.id);
				if (add) {
				  var a = new Element('a', { onclick: 'play(\'' + fav.radio_name + '\', \'' + fav.podcast_name + '\', \'' + fav.logo_url + '\', \'' + fav.playlist + '\', \'' + fav.id + '\', \'\', \'\');return false;', href: '#' }).update((fav.favorite_type == 'Radio') ? fav.radio_name : fav.podcast_name);
				  var li = new Element('li', { id: 'fav' + fav.id });
				  li.insert(a);
				  $('favorite_list').insert({top: li});
				} else {
					$('fav' + fav.id).remove();
				}
				jQuery('.scroll-pane').jScrollPane({showArrows:true});
			  playerKnobFaveSrc = '/images/player/playerButtonStar'+((add)?'Green':'')+'.png';
			  Element.writeAttribute('playerKnobFave', 'src', value = playerKnobFaveSrc);
				favoriteFromPage(add, url, url_after, element_id, class_now, class_after);
			} else {
				if (json[0][0] == "favorite_id") {
					alert(json[0][1]);
				}
			}
		},
		evalScripts: true
		});
}

function loadFromHash() {
	// Loading the correct page depending on the given hash (Bookmark, Refresh, ...)
	fragment = jQuery.param.fragment();
	noFragment = (fragment == '');
	if (noFragment) {
		first = "dashboard";
	} else {
		if (fragment.indexOf('users') > -1) {
			first = "users";
			if (fragment.indexOf('edit') > 4) {
				first = "users-edit";
			}
		} else {
			slashIndex = fragment.indexOf('/');
			first = (slashIndex > -1) ? fragment.substring(0, slashIndex) : fragment;
		}
	}
	firstClass = 'ul#nav li#a' + first;
	if (!noFragment) {
		tabs.fetch_content('/' + fragment);
	}
	jQuery('ul#nav li').removeClass('current');
	jQuery(firstClass).addClass('current');
}

function callCalendarJson(previousPE) {
	var status;
	new Ajax.Request('/calendars/current.json', { method: 'get', 
	onSuccess: function(transport) { 
			var data = transport.responseText.evalJSON();
			media = (data.radio) ? data.radio : data.podcast;
			if (previousPE != null) {
				previousPE.stop();
			}
			calendarPE = new PeriodicalExecuter(function(pe) { 
				callCalendarJson(pe);
			}, media.calendar_end); //  
			
			if (media.stream_permalink != $('playerEmbedStream').innerHTML) {
				new Ajax.Updater('playerEmbed', media.stream_permalink, {method:'get'}); 
				Element.update('player_radio_name', (data.radio) ? media.name : media.radio_name);
				if (data.podcast) {
					Element.update('player_podcast_name', media.name);
				} else {
					Element.update('player_podcast_name', '');
				}
	      Element.writeAttribute('playerKnobPlay', 'src', value = '/images/player/playerKnobStop.png');
	      Element.writeAttribute('logo_player', 'src', value = media.logo_url);
			}
			Element.update('playerEmbedStream', media.stream_permalink);
		} 
	});
}
	
var Tabs = Class.create({ 
	
	// It clearly SUCKS that I repeat the code but I just can't find the way to do it with $$(.class-name).each! :(
	initialize: function(){	
		$$('div#content').first().observe('click', (function(event) { this.get_hash(event);	} ).bind(this) );
		$$('div#footer').first().observe('click',  (function(event) { this.get_hash(event);	} ).bind(this) );
		$$('a#button_favorite').first().observe('click',  (function(event) { this.get_hash(event);	} ).bind(this) );
		$$('a#button_calendar').first().observe('click',  (function(event) { this.get_hash(event);	} ).bind(this) );
	},
	
	get_hash: function(event) {
		itself = event.element().tagName == 'A';
		itsparent = event.element().parentNode.tagName == 'A';
		itsparentsparent = event.element().parentNode.parentNode.tagName == 'A';
		if ( (itself || itsparent || itsparentsparent)) {
			var element = (itself) ? event.element() : ( (itsparent) ? event.element().parentNode : event.element().parentNode.parentNode);
			if (jQuery.isUrlInternal(element.href)) {
				event.stop(); 
				//console.log('Element: ' + element + ' int: ' + jQuery.isUrlInternal(element));
				this.make_link_active(element);
				if (!element.onclick && event.element().id != 'web') { 
					this.fetch_content(element.href);
					if (event.element().id == 'autoplay') {
						parent.location = parent.location.hash;
					} else {
						newLocation = (element.pathname.indexOf('/') == 0) ? element.pathname.substring(1) : element.pathname;
						document.location.href = "/#" + newLocation;
					}
				}
			}
		}
	},

	make_link_active: function(link) {
		$$('ul#nav li').invoke('removeClassName', 'current');
		// link.up(0).addClassName('current');
		$(link).up(0).addClassName('current'); // As found here: http://www.mail-archive.com/rubyonrails-spinoffs@googlegroups.com/msg05014.html - IE needs to have $()!
	},

	fetch_content: function(url) {
		new Ajax.Updater('content-bottom', url, {
			method: 'get', 
			onLoading: function() { $('spinner').show();$('home_icon').hide(); },
			onComplete: function(){ $('spinner').hide();$('home_icon').show(); },
			evalScripts: true
		});
	}
});

	
document.observe('dom:loaded', function () { 
	
	jQuery(function(){
		jQuery(window).bind('hashchange', function(e) {
			// loadFromHash();
			// Loading the correct page depending on the given hash (Bookmark, Refresh, ...)
			fragment = jQuery.param.fragment();
			noFragment = (fragment == '');
			if (noFragment) {
				first = "dashboard";
			} else {
				if (fragment.indexOf('users') > -1) {
					first = "users";
					if (fragment.indexOf('edit') > 4) {
						first = "users-edit";
					}
				} else {
					slashIndex = fragment.indexOf('/');
					first = (slashIndex > -1) ? fragment.substring(0, slashIndex) : fragment;
				}
			}
			firstClass = 'ul#nav li#a' + first;
			tabs = new Tabs(); 
			if (!noFragment) {
				tabs.fetch_content('/' + fragment);
			}
			jQuery('ul#nav li').removeClass('current');
			jQuery(firstClass).addClass('current');
		});
		
		jQuery(window).trigger( 'hashchange' );
	});

	jQuery('.scroll-pane').jScrollPane({showArrows:true});
	
	// This first call is *VERY* important. It will only start the calendar checker if the user is logged in; Otherwhise he'll have a 403 :)
	new Ajax.Request('/calendars/current.json', { method: 'get', 
		onSuccess: function() {
			callCalendarJson(null);
		}
	});
});

