// Script for NiftyPlayer 1.7, by tvst from varal.org // Released under the MIT License: http://www.opensource.org/licenses/mit-license.php var FlashHelper = { movieIsLoaded : function (theMovie) { if (typeof(theMovie) != "undefined") return theMovie.PercentLoaded() == 100; else return false; }, getMovie : function (movieName) { if (navigator.appName.indexOf ("Microsoft") !=-1) return window[movieName]; else return document[movieName]; } }; function niftyplayer(name) { this.obj = FlashHelper.getMovie(name); if (!FlashHelper.movieIsLoaded(this.obj)) return; this.play = function () { this.obj.TCallLabel('/','play'); }; this.stop = function () { this.obj.TCallLabel('/','stop'); }; this.pause = function () { this.obj.TCallLabel('/','pause'); }; this.playToggle = function () { this.obj.TCallLabel('/','playToggle'); }; this.reset = function () { this.obj.TCallLabel('/','reset'); }; this.load = function (url) { this.obj.SetVariable('currentSong', url); this.obj.TCallLabel('/','load'); }; this.loadAndPlay = function (url) { this.load(url); this.play(); }; this.getState = function () { var ps = this.obj.GetVariable('playingState'); var ls = this.obj.GetVariable('loadingState'); // returns // 'empty' if no file is loaded // 'loading' if file is loading // 'playing' if user has pressed play AND file has loaded // 'stopped' if not empty and file is stopped // 'paused' if file is paused // 'finished' if file has finished playing // 'error' if an error occurred if (ps == 'playing') if (ls == 'loaded') return ps; else return ls; if (ps == 'stopped') if (ls == 'empty') return ls; if (ls == 'error') return ls; else return ps; return ps; }; this.getPlayingState = function () { // returns 'playing', 'paused', 'stopped' or 'finished' return this.obj.GetVariable('playingState'); }; this.getLoadingState = function () { // returns 'empty', 'loading', 'loaded' or 'error' return this.obj.GetVariable('loadingState'); }; this.registerEvent = function (eventName, action) { // eventName is a string with one of the following values: onPlay, onStop, onPause, onError, onSongOver, onBufferingComplete, onBufferingStarted // action is a string with the javascript code to run. // // example: niftyplayer('niftyPlayer1').registerEvent('onPlay', 'alert("playing!")'); this.obj.SetVariable(eventName, action); }; return this; } // Flashmp3alizer 0.4 by tvst from varal.org // Released under the MIT License: http://www.opensource.org/licenses/mit-license.php var FMr = { all : new Array(), playlist : new Array(), current : 0, playerId : false, playlistId : false, isPopup : false, popupIsLoaded : false, popupWindow : false, run : function() { var c = window.FMrConf; var id = (c && c.playerId)? c.playerId : "FMrPlayer"; var plid = (c && c.playlistId)? c.playlistId : "FMrPlaylist"; FMr.playerId = id; FMr.playlistId = plid; var a = document.getElementById(FMr.playlistId).getElementsByTagName("a"); var all = FMr.all; FMr.playlist = new Array(); var len = a.length; // go thru and make each .mp3 link a js onclick link for (i = 0; i < len; i++) { //alert( i); if (a[i].href.indexOf(".mp3") == a[i].href.length - 4) { all[all.length] = a[i].href; FMr.enqueue(a[i]); } } }, enqueue : function (link) { var p = FMr.playlist; var n = niftyplayer(FMr.playerId) var s = n.getPlayingState(); var i = p.length; n.registerEvent("onSongOver", "window.FMr.onSongOver()"); n.registerEvent("onPlay", "window.FMr.onPlay()"); p[i] = link; p[i].playlistIndex = i; p[i].onclick = function () { FMr.skipTo(this.playlistIndex); return false; }; //if (s == "finished" || s == "stopped") FMr.skipTo(i); }, next : function () { if (FMr.popupIsLoaded && !FMr.popupWindow.closed) if (FMr.isPopup) FMr.skipTo(FMr.current+1); else FMr.skipTo(FMr.current+1); }, prev : function () { if (FMr.popupIsLoaded && !FMr.popupWindow.closed) if (FMr.isPopup) FMr.skipTo(FMr.current-1); else FMr.skipTo(FMr.current-1); }, playToggle : function () { var n = niftyplayer(FMr.playerId); n.playToggle() ; var s = n.getPlayingState(); var c = FMr.current; var p = FMr.playlist; if( s == "playing" ) { p[c].childNodes[0].src = 'http://nyphil.org/images/concertTickets/pauseMedia.gif' } else { p[c].childNodes[0].src = 'http://nyphil.org/images/concertTickets/playMedia.gif' } }, skipTo : function (i) { var c = FMr.current; var p = FMr.playlist; var n = niftyplayer(FMr.playerId); var l = n.getLoadingState(); // returns 'empty', 'loading', 'loaded' or 'error' if (i >= p.length || i < 0) return; // set current node state p[c].childNodes[0].src = 'http://nyphil.org/images/concertTickets/playMedia.gif' p[c].onclick = function () { FMr.skipTo(this.playlistIndex); return false; }; if( l!= "loaded" ) { p[i].childNodes[0].src = 'http://nyphil.org/images/concertTickets/loadMedia.gif' } else { p[i].childNodes[0].src = 'http://nyphil.org/images/concertTickets/pauseMedia.gif' } // set selected node state p[i].onclick = function () { FMr.playToggle(); return false; }; FMr.current = i; n.loadAndPlay(p[i]); }, openPopup : function () { var c = window.FMrConf; var url = (c && c.playlistFile)? c.playlistFile : "playlist.html"; var w = (c && c.popupWidth)? c.popupWidth : "250"; var h = (c && c.popupHeight)? c.popupHeight : "400"; var opt = "width="+w+", height="+h+", locationbar=no, directories=no, menubar=no, toobar=no, resizable"; //FMr.popupWindow = window.open("", "FMr_playWin", opt); if (FMr && FMr.playlist.length > 0) { FMr.enqueue(FMr.playlist[FMr.playlist.length-1]); return; } FMr.popupWindow = window.open(url, "FMr_playWin", opt); }, syncPopup : function() { var f = FMr; f.playlist = FMr.playlist; f.current = FMr.current; f.playerId = FMr.playerId; f.playlistId = FMr.playlistId; }, syncOpener : function() { var f = window.opener.FMr; f.playlist = FMr.playlist; f.current = FMr.current; }, popupOnLoad : function () { FMr.popupIsLoaded = true; FMr.syncPopup(); FMr.enqueue(FMr.playlist[FMr.playlist.length-1]); }, errorMsg : function (str) { alert("FlashMp3alizer Error: " + str); }, onPlay : function () { //alert( "playing" ); var c = FMr.current; var p = FMr.playlist; p[c].childNodes[0].src = 'http://nyphil.org/images/concertTickets/pauseMedia.gif' }, onSongOver : function () { var c = FMr.current; var p = FMr.playlist; var n = niftyplayer(FMr.playerId); // set current node state p[c].childNodes[0].src = 'http://nyphil.org/images/concertTickets/playMedia.gif' p[c].onclick = function () { FMr.skipTo(this.playlistIndex); return false; }; } }; // "onparse" setup code - should go before any window.onloads! if (document.getElementsByTagName && !window.ParseCtl) { window.appendHandler = function(eventStr, f) {var f0 = eval("window."+eventStr); eval("window."+eventStr+" = function () {f0(); f();}");}; window.onparse = function() {}; window.ParseCtl = { complete : false, timer : null, callOnParse : function () { if (this.complete || !document.body || !document.getElementsByTagName('body')) return; clearInterval(this.timer); this.complete = true; window.onparse(); } }; if (navigator.appName.indexOf('Netscape') != -1 && eval(navigator.appVersion.substring(0,navigator.appVersion.indexOf('('))) >= 5 && navigator.userAgent.indexOf('KHTML') == -1) document.addEventListener("DOMContentLoaded", window.ParseCtl.callOnParse, null); else ParseCtl.timer = setInterval('ParseCtl.callOnParse()', 1); window.onload = ParseCtl.callOnParse; }; // run if (document.getElementsByTagName) { FMr.isPopup = true; FMr.popupIsLoaded = true; FMr.popupWindow = window; // use timeout because of onload bugs! niftyplayer isn't recognized otherwise! window.onload = function () {window.setTimeout("FMr.run()", 500);}; }