/*
DynAPI Distribution
FlashSound Class - for sonifying web pages with the flash player
Based on the FlashSound API (1.8) Copyright 2001 Hayden Porter, hayden@aviarts.com
For more information please see the FlashSound Quick Reference
The DynAPI Distribution is distributed under the terms of the GNU LGPL license.
Requires: DynLayer
*/
function FlashSound(swfURL,loop,autostart){
this.DynLayer = DynLayer;
this.DynLayer(null,-10,-10,1,1);
// add layer to document
dynapi.document.addChild(this);
// instance properties
this.playerID = this.id + "SWF";
FlashSound.players[FlashSound.players.length] = this;
// instance embed properties
this.autostart = true;
this.base = null;
this.bgcolor = null;
this.loop = (loop)? loop:false;
this.src = null;
// setup flash plugin
this.setSWF(swfURL);
};
/* ============== FlashSound Instance methods =============== */
/*
javascript embed ---------------------------------
embeds swf if user has a supported browser and minimum player.
script sets swf bgcolor attribute to document.bgcolor if no custom color specified.
*/
var p = dynapi.setPrototype('FlashSound','DynLayer');
p._recognizeMethod = function (objstr){
// check for player readiness ----------------------
// check for javascript DOM object first then check to see if any frames are loaded in maintimeline
if(typeof(this.doc[this.playerID][objstr]) == "undefined") return false;
else return true;
};
p._checkForInstance = function() {
if(!FlashSound.supportedBrowser || !FlashSound.checkForMinPlayer()) return false;
if (this.doc[this.playerID] == null) return false;
return true;
};
// Public Methods -------------------
p.isPlayerReady = function(){
if(!FlashSound.engage) return false;
if(!this._checkForInstance()) return false;
// block browsers that do not recognize Flash javascript methods
if(!this._recognizeMethod("PercentLoaded")) return false;
if(this.percentLoaded() > 0) return true;
return false;
};
p.getFramesLoaded = function(target){
if(!this._checkForInstance()) {return 0;}
if(target == null) target = "/";
var framesloaded = this.doc[this.playerID].TGetProperty(target,12);
return parseInt(framesloaded);
};
p.getTotalFrames = function(target){
if(!this.isPlayerReady()) {return 0;}
if(target == null) target = "/";
var totalframes = this.doc[this.playerID].TGetProperty(target,5);
return parseInt(totalframes);
};
// check to see if all frames are loaded for a given timeline.
// check before moving playhead to a frame/label incase the frame/label is not yet loaded.
p.isLoaded = function(target){
if(!this.isPlayerReady()) return false;
if(target == null) target = "/";
if (this.getFramesLoaded(target) == this.getTotalFrames(target)) return true;
return false;
};
/* flash javascript api functions ------------------------ */
p.gotoAndPlay = function(target,frame){
if(!this.isPlayerReady()) return;
if(typeof(frame) == "number") {
this.doc[this.playerID].TGotoFrame(target,frame - 1);
this.doc[this.playerID].TPlay(target);
}
if(typeof(frame) == "string") {
this.doc[this.playerID].TGotoLabel(target,frame);
this.doc[this.playerID].TPlay(target);
}
};
p.gotoAndStop = function(target,frame){
if(!this.isPlayerReady()) return;
if(typeof(frame) == "number") {
this.doc[this.playerID].TGotoFrame(target,frame - 1);
}
if(typeof(frame) == "string") {
this.doc[this.playerID].TGotoLabel(target,frame);
}
};
// Is Playing (IsPlaying)
p.isPlaying = function(){
if(!this.isPlayerReady()) return false;
return this.doc[this.playerID].IsPlaying();
};
// Load Movie
p.loadMovie = function(layerNumber,url){
if(!this.isPlayerReady()) return;
this.doc[this.playerID].LoadMovie(layerNumber,url);
};
p.percentLoaded = function(){
if(!this._checkForInstance()) return 0;
var percentLoaded = this.doc[this.playerID].PercentLoaded();
return parseInt(percentLoaded);
};
p.play = function(target){
if(!this.isPlayerReady()) return;
if(target == null) target = "/";
this.doc[this.playerID].TPlay(target);
};
// Set SWF
p.setSWF = function(swfURL){
if (!FlashSound.supportedBrowser || !FlashSound.checkForMinPlayer()) return;
var defaultColor = (document.bgColor != null) ? document.bgColor : "#ffffff";
var defaultBase = ".";
swfURL=(swfURL)? swfURL:'';
this.bgcolor = (this.bgcolor == null) ? defaultColor : this.bgcolor;
this.base = (this.base == null) ? defaultBase : this.base;
this.src = (swfURL.charAt(0) == "/") ? "http://" + location.host+swfURL : swfURL;
this.setHTML(
''
);
};
// Stop Play (TStopPlay)
p.stopPlay = function(target){
if(!this.isPlayerReady()) return;
if(target == null) target = "/";
this.doc[this.playerID].TStopPlay(target);
};
/* Static Functions & Properties --------------------------- */
var fs = FlashSound;
fs.engage = true; // engage
fs.playerCount = 0; // player count
fs.players = new Array(); // players[]
fs.playerVersion = 0; // set playerVersion to 0 for unsupported browsers
// check for LiveConnect - Opera version 6.x with Java Enabled and Netscape versions 4.x but not greater
fs.LiveConnect = ((navigator.javaEnabled() &&
(dynapi.ua.ns4 && dynapi.ua.v<5)) || dynapi.ua.opera6);
// browser compatibility check -----------------
fs.supportedBrowser = ((dynapi.ua.ie && dynapi.ua.win32) ||
dynapi.ua.ns6 || FlashSound.LiveConnect) ? true : false;
// player compatibility ------------------
// checkForMinPlayer sets playerVersion for supported browsers
fs.checkForMinPlayer = function(){
if(!this.supportedBrowser) return false;
if(dynapi.ua.ns6) {
// xpconnect works with version 6 r40 or greater
this.playerVersion = this.getPlugInVers(); // get version
releaseVers = this.getPlugInReleaseVers(); // get release version
//check release vers only for vers 6
if(this.playerVersion == 6 && releaseVers >=40) return true;
}
if(this.LiveConnect) this.playerVersion = this.getPlugInVers();
if(dynapi.ua.ie) this.playerVersion = (Flash_getActiveXVersion());
if(this.playerVersion >= this.minPlayer) return true;
else return false;
};
// check for flash plug-in in netscape
fs.checkForPlugIn = function(){
var flashmimeType = "application/x-shockwave-flash";
var hasplugin = (navigator.mimeTypes && navigator.mimeTypes[flashmimeType]) ? navigator.mimeTypes[flashmimeType].enabledPlugin : 0;
return hasplugin;
};
// Get Plugin Version
fs.getPlugInVers = function(){
if(this.checkForPlugIn()){
var plugin = navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin;
var pluginversion = parseInt(plugin.description.substring(plugin.description.indexOf(".")-1));
return pluginversion;
}else{
return 0;
}
};
// Get Plugin Release Version
fs.getPlugInReleaseVers = function(){
if(this.checkForPlugIn()){
var plugin = navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin;
var pluginversion = parseInt(plugin.description.substring(plugin.description.indexOf("r")+1, plugin.description.length));
return pluginversion;
}else{
return 0;
}
};
// vers is integer
fs.setMinPlayer = function(vers){
if(!this.supportedBrowser) return;
this.minPlayer = (vers != null && vers >= 4) ? vers : 4;
if(dynapi.ua.ns6) {
this.minPlayer = 6; // set min player to 6 for XPConnect
}
this.checkForMinPlayer();
};
// vbscript get Flash ActiveX control version for windows IE
if(dynapi.ua.ie && dynapi.ua.win32){
var h='' + '\n' +
'Function Flash_getActiveXVersion()' + '\n' +
'On Error Resume Next' + '\n' +
'Dim hasPlayer, playerversion' + '\n' +
'hasPlayer = false' + '\n' +
'playerversion = 15' + '\n' +
'Do While playerversion > 0' + '\n' +
'hasPlayer = (IsObject(CreateObject(\"ShockwaveFlash.ShockwaveFlash.\" & playerversion)))' + '\n' +
'If hasPlayer Then Exit Do' + '\n' +
'playerversion = playerversion - 1' + '\n' +
'Loop' + '\n' +
'Flash_getActiveXVersion = playerversion' + '\n' +
'End Function' + '\n' +
'<\/scr' + 'ipt>';
if(!dynapi.loaded) document.write(h);
else {
dynapi.document.addChild(new DynLayer({w:0,h:0,visible:false,html:'