
/*******************************************************************************

 Player handler script

   Updates:
     2006.06.19 kakegawa - now we can safely access MJAutomation from outside
     2006.03.29 kakegawa

*******************************************************************************/

var ServiceName   = 'AvexService';
var LatestVersion = {major: 1, minor: 0, build: 16, version: '1.0.16', required: 1};

/**
  *  getInstallerFilePath()
  *  ~~~~~~~~~~~~~~~~~~~~~~
  *  returns path to the player installer
  */
function getInstallerFilePath() {
	var fileVersion = LatestVersion.major+''+LatestVersion.minor+''+(LatestVersion.build < 10 ? '0'+''+LatestVersion.build : LatestVersion.build);
	return '/player/mumojapan'+fileVersion+'.exe';
}

/* identify which context the user browses with (Player / Browser)
   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */

var Detector        = null;
var MJA             = null;
var WithinPlayer    = false;
var PlayerInstaled  = false;
var PlayerUIVisible = true;

function initPlayer(launch) {
	if(MJA) {
		var mixer;
		try {
			mixer = MJA.GetMJMixer();
			return true;
		} catch(e) {
			MJA = null;
		}
	}
	try {
		if(window.external.GetMJMixer()) {
			MJA = window.external;
			WithinPlayer   = true;
			PlayerInstaled = true;
		}
	} catch(e) {
		WithinPlayer = false;
		try {
			if(!Detector) Detector = new ActiveXObject('JRiverPlayerDetector.Detector.1');
			if(launch && !MJA) MJA = Detector.GetMJAutomation();
			PlayerInstaled = true;
		} catch(e) {
			return false;
		}
	}
	return true;
}

/**
  *  isPlayerContext()
  *  ~~~~~~~~~~~~~~~~~
  *  returns boolean value indicates if the user is in player context
  */
function isPlayerContext() {
	return WithinPlayer;
}

/**
  *  isPlayerInstalled()
  *  ~~~~~~~~~~~~~~~~~~~
  *  returns boolean value indicates if J.River player is installed
  */
function isPlayerInstalled() {
	return PlayerInstaled;
}

/**
  *  forcePlayerUpgrade()
  *  ~~~~~~~~~~~~~~~~~~~~
  *  returns nothing
  */
function forcePlayerUpgrade() {
	if(!isPlayerInstalled() || !isPlayerContext()) return;
	if(!initPlayer(true)) return;
	var lv = LatestVersion;
	var va = MJA.GetVersion();
	if(va.Major > 0) {
		if(lv.build > va.Build && lv.required) {
			doPlayerCommand('callupgradedialog', {});
		}
	}
}

/**
  *  showPlayerUI()
  *  ~~~~~~~~~~~~~~
  *  @param
  *  returns
  */
function showPlayerUI(show) {
	if(!initPlayer(true)) return;
	PlayerUIVisible = show;
	MJA.ShowProgram(show);
}

/**
  *  doPlayerCommand()
  *  ~~~~~~~~~~~~~~~~~
  *  @param expected commands: displayitems, downloadfiles, playfiles, redirect, callupgradedialog, setinfo
  *  @param
  *  returns
  */
function doPlayerCommand(command, params) {
	if(!initPlayer(true)) return;
	var postfix = '';
	for(var i in params) {
		postfix += '&'+i+'='+params[i];
	}
	postfix = postfix.length < 1 ? '' : '?'+postfix.substring(1);
	if(isPlayerContext()) {
		location.href = 'avexsp://command='+command+postfix;
	} else {
		var Services = MJA.GetServices();
		var Service  = Services.GetService(ServiceName);
		Service.Process('', 'avexsp://command='+command+postfix, '');
	}
}

/**
  *  setPlayerInfo()
  *  ~~~~~~~~~~~~~~~
  *  @param
  *  @param
  *  returns
  */
function setPlayerInfo(key, value) {
	if(!initPlayer(true)) return;
	doPlayerCommand('setinfo', {key: key, value: value});
}

/**
  *  getPlayerDisplayedTrackList()
  *  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  *  @param
  *  returns
  */
function getPlayerDisplayedTrackList() {
	initPlayer(true);
	alert(MJA.Search("-filename=[]").GetNumberFiles());
}

/**
  *  doSearch()
  *  ~~~~~~~~~~
  *  @param
  *  returns
  */
function doSearch(strArg) {
	if(!initPlayer(true)) return;
	var args = strArg.split('::');
	location.href = '/search/?searchSelect='+args[0]+'&searchText='+encodeURIComponent(args[1]);
}

/**
  *  doGetSessionToken()
  *  ~~~~~~~~~~~~~~~~~~~
  *  @param callback function name
  *  returns
  */
function doGetSessionToken(callback) {
	var ajaxClient = new AjaxClient();
	ajaxClient.gateway = '/commongateway.php';
}

/**
  *  doOpenURLWithPlayer()
  *  ~~~~~~~~~~~~~~~~~~~~~
  *  @param ajax response
  *  returns
  */
function doOpenURLWithPlayer(response) {
	doPlayerCommand('redirect', {url: response.destination});
	ShowPlayerUI(true);
}

/**
  *  openExternalURL()
  *  ~~~~~~~~~~~~~~~~~
  *  @param
  *  returns
  */
function openExternalURL(url) {
	window.open(url);
}


/* ************************************************************************** */
/*
// Initialize Player
initPlayer();

// Force user to upgrade the player if new version is available
forcePlayerUpgrade();

// trigger web page with player
if(pageQuery.vars.player && !isPlayerContext()) {
	doOpenURLWithPlayer({destination: location.href});
	window.history.back();
}
*/
