jQuery.noConflict();

/* VERY IMPORTANT FOR FIREFOX !!!*/
function OnDSPlayStateChangeEvt(state) { StatusChanged(state); }

function staticLoadScript(url) { document.write('<script src=/js/' + url, '" type="text/javascript"></script>'); }
function Log(msg) { if (_D && window.console) console.log(msg); }


/*---------------------------------------------
*			I N I T I A L I Z A T I O N
----------------------------------------------*/
/* ON LOAD*/
var _D = false;
var _forceStop = false;
var _isMute = false;
var _playerStatus = 0;
var _prePlay = false; //The event change to status = play (3) just before buffering (6) and after buffer complete go back
var _volumeLevel = 60;
var _mediaPlayerId = 'radioPlayer';
var _mediaPlayer = null;
var _IE = jQuery.browser['msie'];
var _FF = jQuery.browser['mozilla'];
var _GC = navigator.userAgent.toLowerCase().indexOf('chrome') > -1;
var _WIN = navigator.userAgent.indexOf('Windows') != -1;
var _baseURL = 'http://localhost'
var _pollDelay = 3000;
var commentTimer = null;
var _playerID = null;
var _coverUrl = null;
var _apiUrl = "http://api-backup.radionomy.com/currentsong.cfm?type=json&next=yes&size=70&previous=yes&defaultcover=no&callmeback=yes&cover=yes&radiouid=";

function Initialize() {
	var embedCode = GetEmbedCode();

	if (_WIN) {
		$('PlayerEmbed').set('html', embedCode);
		_mediaPlayer = $(_mediaPlayerId);
		if (_IE) {
			_mediaPlayer.attachEvent('playStateChange', StatusChanged);
		}
		else {
			_mediaPlayer.addEventListener('playStateChange', StatusChanged, false);
		}
	}
	else {
		$('PlayerEmbed').set('html', embedCode);
		_mediaPlayer = $(_mediaPlayerId);

		_mediaPlayer.addEventListener('qt_load', qt_load, false);
		_mediaPlayer.addEventListener('qt_begin', qt_begin, false);
		_mediaPlayer.addEventListener('qt_loadedmetadata', qt_loadedmetadata, false);
		_mediaPlayer.addEventListener('qt_loadedfirstframe', qt_loadedfirstframe, false);
		_mediaPlayer.addEventListener('qt_canplay', qt_canplay, false);
		_mediaPlayer.addEventListener('qt_canplaythrough', qt_canplaythrough, false);
		_mediaPlayer.addEventListener('qt_durationchange', qt_durationchange, false);
		_mediaPlayer.addEventListener('qt_ended', qt_ended, false);
		_mediaPlayer.addEventListener('qt_error', qt_error, false);
		_mediaPlayer.addEventListener('qt_pause', qt_pause, false);
		_mediaPlayer.addEventListener('qt_play', qt_play, false);
		_mediaPlayer.addEventListener('qt_progress', qt_progress, false);
		_mediaPlayer.addEventListener('qt_waiting', qt_waiting, false);
		_mediaPlayer.addEventListener('qt_stalled', qt_stalled, false);
		_mediaPlayer.addEventListener('qt_timechanged', qt_timechanged, false);
		_mediaPlayer.addEventListener('qt_volumechange', qt_volumechange, false);
	}
}

jQuery(document).ready(function () {
	GetRemotePlayInfo();
	Initialize();
	ShowPlaying();
	//ForcePlay();

	/* PLAY PAUSE*/
	jQuery('#btn-playpause').click(function () {
		if (jQuery(this).hasClass("pause")) {
			ShowPaused();
		} else {
			ShowPlaying();
		}

		if (_WIN && _playerStatus != 9 && _playerStatus != 6 && _playerStatus != 3 && _playerStatus != 10 && !_GC) {
			ForcePlay();
		}
		else {
			toggleMute();
		}
	});

});

function ShowPaused() {
	Log("Paused");
	jQuery('#btn-playpause').removeClass("pause").addClass("play");
	jQuery("#track").addClass("empty").animate({ height: 15 }, 250);
	jQuery("#statusPlay").hide();
	jQuery("#statusPause").show();
}

function ShowPlaying() {
	Log("Playing");
	jQuery('#btn-playpause').removeClass("play").addClass("pause");
	jQuery("#track").removeClass("empty").animate({ height: 72 }, 250); ;
	jQuery("#statusPlay").show();
	jQuery("#statusPause").hide();
}

/*---------------------------------------------
*				F U N C T I O N S
----------------------------------------------*/
function ChangeVolume(level) {
	if (_volumeLevel != level) {
		_volumeLevel = level;
		if (_WIN) {
			_mediaPlayer.settings.volume = Math.round(_volumeLevel);
			_mediaPlayer.settings.mute = _isMute;
		}
		else {
			_mediaPlayer.SetVolume(Math.round(_volumeLevel * 2.55));
			_mediaPlayer.SetMute(_isMute);
		}
	}
}

function toggleMute() {
	if (_isMute) {
		Mute(false);
		ShowPlaying();
	}
	else {
		Mute(true);
		ShowPaused();
	}
}

function Mute(isMute) {
	if (_WIN) {
		_mediaPlayer.settings.mute = isMute;
	}
	else {
		_mediaPlayer.SetMute(isMute);
	}
	_isMute = isMute;
}

function Play() {
	if (_WIN) {
		if (_isMute) {
			ShowPaused();
		}
		else {
			if (_prePlay)
				ShowPlaying();
		}
	}
	else {
		if (_isMute) {
			ShowPaused();
		}
		else {
			ShowPlaying();
		}
	}
}

function ForcePlay() {
	if (_WIN)
	{
		_prePlay = false;
		try {
			_mediaPlayer.controls.Play();
		}
		catch (err) {
		}
	}
	else {
		_mediaPlayer.Play();
	}
}

function GetEmbedCode() {

	if (_WIN) {
		var embedCode = '<object id="' + _mediaPlayerId + '"';

		if (_IE) {
			embedCode = embedCode + ' classid="clsid:6BF52A52-394A-11d3-B153-00C04F79FAA6" ';
		}
		else {
			embedCode = embedCode + ' type="application/x-ms-wmp" ';
		}
		embedCode = embedCode + 'width="1" height="1">';
		embedCode = embedCode + '<param name="volume" value="60" />';
		embedCode = embedCode + '<param name="url" value="' + _defaultUrl + '" />';
		embedCode = embedCode + '<param name="fullScreen" value="1" />';
		embedCode = embedCode + '<param name="uiMode" value="invisible" />';
		embedCode = embedCode + '<param name="showcontrols" value="0" />';
		embedCode = embedCode + '<param name="showstatusbar" value="0" />';
		embedCode = embedCode + '<param name="autostart" value="1" />';
		embedCode = embedCode + '</object>';
	}
	else {
		if (_FF) {
			embedCode = '<object id="' + _mediaPlayerId + '" name="' + _mediaPlayerId + '" data="' + _defaultUrl + '" width="1" height="1" type="video/quicktime" pluginspace="http://www.apple.com/quicktime/download/index.html">';
			embedCode += '<param name="autoplay" value="true"/>';
			embedCode += '<param name="enablejavascript" value="true"/>';
			embedCode += '<param name="qtsrc" value="' + _defaultUrl + '"/>';
			embedCode += '<param name="qtsrcdontusebroswer" value="false"/>';
			embedCode += '<param name="kioskmode" value="true"/>';
			embedCode += '<param name="postdomevents" value="true"/>';
			embedCode += '</object>';
		}
		else {
			embedCode = '<object id="' + _mediaPlayerId + '" name="' + _mediaPlayerId + '" width="1" height="1" type="video/quicktime" pluginspace="http://www.apple.com/quicktime/download/index.html">';
			embedCode += '<param name="autoplay" value="true"/>';
			embedCode += '<param name="enablejavascript" value="true"/>';
			embedCode += '<param name="qtsrc" value="' + _defaultUrl + '"/>';
			embedCode += '<param name="qtsrcdontusebroswer" value="false"/>';
			embedCode += '<param name="kioskmode" value="true"/>';
			embedCode += '<param name="postdomevents" value="true"/>';
			embedCode += '<param name="src" value="' + _defaultUrl + '"/>';
			embedCode += '</object>';
		}
	}

	return embedCode;
}

//Starting the Embed
function qt_begin() { Log('qt_begin'); StatusChanged(6); ChangeVolume(60); }
function qt_loadedmetadata() { Log('qt_loadedmetadata'); }
function qt_durationchange() { Log('qt_durationchange'); }
function qt_loadedfirstframe() { Log('qt_loadedfirstframe'); }
function qt_canplay() { Log('qt_canplay'); }
function qt_canplaythrough() { Log('qt_canplaythrough'); }
function qt_load() { Log('qt_load'); }
function qt_play() { Log('qt_play'); }
function qt_timechanged() { Log('qt_timechanged'); StatusChanged(3); } // Flux is starting

function qt_volumechange() { Log('qt_volumechange'); }

//Extra stuff
function qt_pause() { Log('qt_pause'); StatusChanged(2); } // Occur when connection is lost
function qt_ended() { Log('qt_ended'); }
function qt_error() { Log('qt_error'); }
function qt_progress() { Log('qt_waiting'); }
function qt_waiting() { Log('qt_progress'); }
function qt_stalled() { Log('qt_stalled'); }

function StatusChanged(state) {
	switch (state) {
		case 0:    // Undefined
			jQuery('#Debugger').html("Undefined");
			break;
		case 1:    // Stopped
		case 2:    // Paused
			ShowPaused();
			jQuery('#Debugger').html("Stopped");
			if (!_forceStop) {
				ForcePlay();
			}
			break;
		case 3:    // Playing
			//Test if the previous status was not 9 (because it will bufferize just after though skip the playing status change)
			if (_prePlay || !_WIN) {
				jQuery('#statusPlay').html("En ce moment");
				Play();
			}
			else {
				_prePlay = true;
			}
			break;
		case 4:    // ScanForward
			jQuery('#Debugger').html("ScanForward");
			break;
		case 5:    // ScanReverse
			jQuery('#Debugger').html("ScanReverse");
			break;
		case 6:    // Buffering
			jQuery('#Debugger').html("Buffering...");
			break;
		case 7:    // Waiting
			jQuery('#Debugger').html("Waiting...");
			break;
		case 8:    // MediaEnded
			jQuery('#Debugger').html("MediaEnded");
			break;
		case 9:    // Transitioning
			jQuery('#Debugger').html("Connexion...");
			break;
		case 10:   // Ready
			jQuery('#Debugger').html("Ready");
			break;
		case 11:   // Reconnecting
			jQuery('#Debugger').html("Reconnecting...");
			break;
		case 12:   // Last
			jQuery('#Debugger').html("Last");
			break;
		default:
			jQuery('#Debugger').html("Unknown State: " + state);
			break;
	}
	_playerStatus = state;
}

/* REMOTE INFORMATION */
function jsonp(url, name, query) {
	if (url.indexOf("?") > -1) { url += "&jsonp="; }
	else { url += "?jsonp="; }

	url += name + "&";

	if (query) { url += encodeURIComponent(query) + "&"; }
	url += new Date().getTime().toString(); // prevent caching

	var script = document.createElement("script");
	script.setAttribute("src", url);
	script.setAttribute("type", "text/javascript");
	var head = document.getElementsByTagName('head')[0];
	if (head) { head.appendChild(script); }
}

function GetRemotePlayInfo() {
	jsonp(_apiUrl + _radioUID);
}

function GetPlayInfo(result) {
	var coverLink = result.tracks.track[2].link;
	var recall = result.tracks.track[2].callmeback;
	var title = result.tracks.track[2].title;
	var artists = result.tracks.track[2].artists;
	var coverPic= result.tracks.track[2].cover;

	_coverUrl = coverLink;

	if (recall <= 0)
		_pollDelay = 5000;
	else
		_pollDelay = (recall * 1); //Change with the next song + 1 second of security;

	restartPoll();
	jQuery('#artist-name').html(artists);
	jQuery('#artist-name').attr("title",artists);
	jQuery('#artist-name').attr("alt", artists);

	jQuery('#track-name').html(title);
	jQuery('#track-name').attr("title", title);
	jQuery('#track-name').attr("alt", title);

	var coverImg = $('CoverPicture');
	if (coverPic) {	
		coverImg.src = coverPic;
	}
	else {
		coverImg.src = "http://www.radionomy.com/img/pix.gif";
	}
}

function JumpCover() {
	if (_coverUrl != null && _coverUrl.length > 0) {
		window.open(_coverUrl, 'Cover', 'left=20,top=20,width=500,height=500,status=yes,toolbar=yes,menubar=yes,location=yes,resizable=yes ');
	}
}

//POLLING
var pollId;
function startPoll() { pollId = setInterval(GetRemotePlayInfo, _pollDelay); }
function stopPoll() { if (pollId) clearInterval(pollId); }
function restartPoll() { stopPoll(); startPoll(); }

/* Create an object to store Player UI related stuff */
var radplayerUI = new Object();

/* SIMULATE ADD/REMOVE from FAVORITES */
jQuery(document).ready(function () {
	jQuery("#btn-favorite-add").live("click", function (e) { // For ADD
		e.preventDefault();
		// Simulate AJAX request		
		jQuery(this).hide();
		jQuery("#btn-favorite-wait").show();
		// Simulate AJAX response with a fake timeout using $'s animate function
		jQuery(this).animate({ opacity: 1.0 }, 850, function () {
			jQuery("#btn-favorite-wait").hide();
			jQuery("#btn-favorite-remove").show();
		});
	});

	jQuery("#btn-favorite-remove").live("click", function (e) { // For ADD
		e.preventDefault();
		// Simulate AJAX request		
		jQuery(this).hide();
		jQuery("#btn-favorite-wait").show();
		// Simulate AJAX response with a fake timeout using $'s animate function
		jQuery(this).animate({ opacity: 1.0 }, 850, function () {
			jQuery("#btn-favorite-wait").hide();
			jQuery("#btn-favorite-add").show();
		});
	});
});

/* Setup links
On recent browser target="_blank" would create a new tab,
that is not the desired behaviour in a popup window.
Instead we open the link in the original window (opener)
or in a new window if it no longer exist
*/

jQuery(document).ready(function () {
	jQuery("a[target=_blank]").bind("click", function (e) {
		e.preventDefault();
		try {
			window.opener.document.location.href = jQuery(this).attr("href");
		}
		catch (err) {
			window.open(jQuery(this).attr("href"));
		}
	});
});


/*

VOLUME UI SLIDER
****************

radplayerUI.volume.onchange = function(value): 
- Function that will be is fired each time user move the slider

radplayerUI.volume.setValue([0-100]): 
- Set slider value

radplayerUI.volume.getValue(): 
- Return the value

*/

radplayerUI.volume = new Object();
radplayerUI.volume._value = _volumeLevel; /* Default volume */
radplayerUI.volume._uipadding = 5 /* Padding around slider */;

radplayerUI.volume.onchange = function (value) {
	ChangeVolume(value);
}

radplayerUI.volume.setValue = function (value) {
	if (isNaN(value)) return false;
	value = Math.max(0, Math.min(100, value));
	radplayerUI.volume._value = value;
	radplayerUI.volume.draw();
}

radplayerUI.volume.getValue = function () {
	return radplayerUI.volume._value;
}

/* Redraw UI */
radplayerUI.volume.draw = function () {
	var width = jQuery("#volume").width() - 2 * radplayerUI.volume._uipadding;
	var x = radplayerUI.volume.getValue() / 100 * width + radplayerUI.volume._uipadding;
	jQuery("#volume .handler").css("left", x + "px");
	jQuery("#volume .fill").css("width", x + "px");
}

/* Internal routine to calculate the value based on mouse position */
radplayerUI.volume.calculateFromMouse = function (mouseX) {
	mouseX -= radplayerUI.volume._uipadding;
	var width = jQuery("#volume").width() - 2 * radplayerUI.volume._uipadding;
	radplayerUI.volume.setValue(mouseX / width * 100);
	radplayerUI.volume.onchange(radplayerUI.volume.getValue());
}

radplayerUI.volume.setup = function () {

	// Create UI

	jQuery("#volume").append(jQuery('<div class="fill"></div>'));
	jQuery("#volume").append(jQuery('<span class="handler" href="#"></span>'));

	// Events

	jQuery("#volume").bind("mousedown", function (e) {
		var offset = jQuery("#volume").offset();
		var x = e.pageX - offset.left;
		radplayerUI.volume.calculateFromMouse(x);
		jQuery("#volume").mousemove(function (e) {
			var offset = jQuery("#volume").offset();
			var x = e.pageX - offset.left;
			radplayerUI.volume.calculateFromMouse(x);
		});
	});
	jQuery("body").bind("mouseup", function (e) {
		jQuery("#volume").unbind("mousemove");
	});

	jQuery("#volume").bind("mouseup", function (e) {
		var offset = jQuery("#volume").offset();
		var x = e.pageX - offset.left;
		radplayerUI.volume.calculateFromMouse(x);
	});

	// Ready, refresh UI
	radplayerUI.volume.draw();
}

// Setup UI

jQuery(document).ready(function () {
	radplayerUI.volume.setup();
});


