Commit | Line | Data |
---|---|---|
14b034ff D |
1 | /** @license\r |
2 | *\r | |
3 | * SoundManager 2: JavaScript Sound for the Web\r | |
4 | * ----------------------------------------------\r | |
5 | * http://schillmania.com/projects/soundmanager2/\r | |
6 | *\r | |
7 | * Copyright (c) 2007, Scott Schiller. All rights reserved.\r | |
8 | * Code provided under the BSD License:\r | |
9 | * http://schillmania.com/projects/soundmanager2/license.txt\r | |
10 | *\r | |
11 | * V2.97a.20130324 ("Mahalo" Edition)\r | |
12 | */\r | |
13 | \r | |
14 | /*global window, SM2_DEFER, sm2Debugger, console, document, navigator, setTimeout, setInterval, clearInterval, Audio, opera */\r | |
15 | /*jslint regexp: true, sloppy: true, white: true, nomen: true, plusplus: true, todo: true */\r | |
16 | \r | |
17 | (function(window, _undefined) {\r | |
18 | "use strict";\r | |
19 | var soundManager = null;\r | |
20 | function SoundManager(smURL, smID) {\r | |
21 | this.setupOptions = {\r | |
22 | 'url': (smURL || null),\r | |
23 | 'flashVersion': 8,\r | |
24 | 'debugMode': true,\r | |
25 | 'debugFlash': false,\r | |
26 | 'useConsole': true,\r | |
27 | 'consoleOnly': true,\r | |
28 | 'waitForWindowLoad': false,\r | |
29 | 'bgColor': '#ffffff',\r | |
30 | 'useHighPerformance': false,\r | |
31 | 'flashPollingInterval': null,\r | |
32 | 'html5PollingInterval': null,\r | |
33 | 'flashLoadTimeout': 1000,\r | |
34 | 'wmode': null,\r | |
35 | 'allowScriptAccess': 'always',\r | |
36 | 'useFlashBlock': false,\r | |
37 | 'useHTML5Audio': true,\r | |
38 | 'html5Test': /^(probably|maybe)$/i,\r | |
39 | 'preferFlash': true,\r | |
40 | 'noSWFCache': false\r | |
41 | };\r | |
42 | this.defaultOptions = {\r | |
43 | 'autoLoad': false,\r | |
44 | 'autoPlay': false,\r | |
45 | 'from': null,\r | |
46 | 'loops': 1,\r | |
47 | 'onid3': null,\r | |
48 | 'onload': null,\r | |
49 | 'whileloading': null,\r | |
50 | 'onplay': null,\r | |
51 | 'onpause': null,\r | |
52 | 'onresume': null,\r | |
53 | 'whileplaying': null,\r | |
54 | 'onposition': null,\r | |
55 | 'onstop': null,\r | |
56 | 'onfailure': null,\r | |
57 | 'onfinish': null,\r | |
58 | 'multiShot': true,\r | |
59 | 'multiShotEvents': false,\r | |
60 | 'position': null,\r | |
61 | 'pan': 0,\r | |
62 | 'stream': true,\r | |
63 | 'to': null,\r | |
64 | 'type': null,\r | |
65 | 'usePolicyFile': false,\r | |
66 | 'volume': 100\r | |
67 | };\r | |
68 | this.flash9Options = {\r | |
69 | 'isMovieStar': null,\r | |
70 | 'usePeakData': false,\r | |
71 | 'useWaveformData': false,\r | |
72 | 'useEQData': false,\r | |
73 | 'onbufferchange': null,\r | |
74 | 'ondataerror': null\r | |
75 | };\r | |
76 | this.movieStarOptions = {\r | |
77 | 'bufferTime': 3,\r | |
78 | 'serverURL': null,\r | |
79 | 'onconnect': null,\r | |
80 | 'duration': null\r | |
81 | };\r | |
82 | this.audioFormats = {\r | |
83 | 'mp3': {\r | |
84 | 'type': ['audio/mpeg; codecs="mp3"', 'audio/mpeg', 'audio/mp3', 'audio/MPA', 'audio/mpa-robust'],\r | |
85 | 'required': true\r | |
86 | },\r | |
87 | 'mp4': {\r | |
88 | 'related': ['aac','m4a','m4b'],\r | |
89 | 'type': ['audio/mp4; codecs="mp4a.40.2"', 'audio/aac', 'audio/x-m4a', 'audio/MP4A-LATM', 'audio/mpeg4-generic'],\r | |
90 | 'required': false\r | |
91 | },\r | |
92 | 'ogg': {\r | |
93 | 'type': ['audio/ogg; codecs=vorbis'],\r | |
94 | 'required': false\r | |
95 | },\r | |
96 | 'opus': {\r | |
97 | 'type': ['audio/ogg; codecs=opus', 'audio/opus'],\r | |
98 | 'required': false\r | |
99 | },\r | |
100 | 'wav': {\r | |
101 | 'type': ['audio/wav; codecs="1"', 'audio/wav', 'audio/wave', 'audio/x-wav'],\r | |
102 | 'required': false\r | |
103 | }\r | |
104 | };\r | |
105 | this.movieID = 'sm2-container';\r | |
106 | this.id = (smID || 'sm2movie');\r | |
107 | this.debugID = 'soundmanager-debug';\r | |
108 | this.debugURLParam = /([#?&])debug=1/i;\r | |
109 | this.versionNumber = 'V2.97a.20130324';\r | |
110 | this.version = null;\r | |
111 | this.movieURL = null;\r | |
112 | this.altURL = null;\r | |
113 | this.swfLoaded = false;\r | |
114 | this.enabled = false;\r | |
115 | this.oMC = null;\r | |
116 | this.sounds = {};\r | |
117 | this.soundIDs = [];\r | |
118 | this.muted = false;\r | |
119 | this.didFlashBlock = false;\r | |
120 | this.filePattern = null;\r | |
121 | this.filePatterns = {\r | |
122 | 'flash8': /\.mp3(\?.*)?$/i,\r | |
123 | 'flash9': /\.mp3(\?.*)?$/i\r | |
124 | };\r | |
125 | this.features = {\r | |
126 | 'buffering': false,\r | |
127 | 'peakData': false,\r | |
128 | 'waveformData': false,\r | |
129 | 'eqData': false,\r | |
130 | 'movieStar': false\r | |
131 | };\r | |
132 | this.sandbox = {\r | |
133 | };\r | |
134 | this.html5 = {\r | |
135 | 'usingFlash': null\r | |
136 | };\r | |
137 | this.flash = {};\r | |
138 | this.html5Only = false;\r | |
139 | this.ignoreFlash = false;\r | |
140 | var SMSound,\r | |
141 | sm2 = this, globalHTML5Audio = null, flash = null, sm = 'soundManager', smc = sm + ': ', h5 = 'HTML5::', id, ua = navigator.userAgent, wl = window.location.href.toString(), doc = document, doNothing, setProperties, init, fV, on_queue = [], debugOpen = true, debugTS, didAppend = false, appendSuccess = false, didInit = false, disabled = false, windowLoaded = false, _wDS, wdCount = 0, initComplete, mixin, assign, extraOptions, addOnEvent, processOnEvents, initUserOnload, delayWaitForEI, waitForEI, setVersionInfo, handleFocus, strings, initMovie, preInit, domContentLoaded, winOnLoad, didDCLoaded, getDocument, createMovie, catchError, setPolling, initDebug, debugLevels = ['log', 'info', 'warn', 'error'], defaultFlashVersion = 8, disableObject, failSafely, normalizeMovieURL, oRemoved = null, oRemovedHTML = null, str, flashBlockHandler, getSWFCSS, swfCSS, toggleDebug, loopFix, policyFix, complain, idCheck, waitingForEI = false, initPending = false, startTimer, stopTimer, timerExecute, h5TimerCount = 0, h5IntervalTimer = null, parseURL, messages = [],\r | |
142 | needsFlash = null, featureCheck, html5OK, html5CanPlay, html5Ext, html5Unload, domContentLoadedIE, testHTML5, event, slice = Array.prototype.slice, useGlobalHTML5Audio = false, lastGlobalHTML5URL, hasFlash, detectFlash, badSafariFix, html5_events, showSupport, flushMessages, wrapCallback,\r | |
143 | is_iDevice = ua.match(/(ipad|iphone|ipod)/i), isAndroid = ua.match(/android/i), isIE = ua.match(/msie/i), isWebkit = ua.match(/webkit/i), isSafari = (ua.match(/safari/i) && !ua.match(/chrome/i)), isOpera = (ua.match(/opera/i)),\r | |
144 | mobileHTML5 = (ua.match(/(mobile|pre\/|xoom)/i) || is_iDevice || isAndroid),\r | |
145 | isBadSafari = (!wl.match(/usehtml5audio/i) && !wl.match(/sm2\-ignorebadua/i) && isSafari && !ua.match(/silk/i) && ua.match(/OS X 10_6_([3-7])/i)),\r | |
146 | hasConsole = (window.console !== _undefined && console.log !== _undefined), isFocused = (doc.hasFocus !== _undefined?doc.hasFocus():null), tryInitOnFocus = (isSafari && (doc.hasFocus === _undefined || !doc.hasFocus())), okToDisable = !tryInitOnFocus, flashMIME = /(mp3|mp4|mpa|m4a|m4b)/i,\r | |
147 | emptyURL = 'about:blank',\r | |
148 | overHTTP = (doc.location?doc.location.protocol.match(/http/i):null),\r | |
149 | http = (!overHTTP ? 'http:/'+'/' : ''),\r | |
150 | netStreamMimeTypes = /^\s*audio\/(?:x-)?(?:mpeg4|aac|flv|mov|mp4||m4v|m4a|m4b|mp4v|3gp|3g2)\s*(?:$|;)/i,\r | |
151 | netStreamTypes = ['mpeg4', 'aac', 'flv', 'mov', 'mp4', 'm4v', 'f4v', 'm4a', 'm4b', 'mp4v', '3gp', '3g2'],\r | |
152 | netStreamPattern = new RegExp('\\.(' + netStreamTypes.join('|') + ')(\\?.*)?$', 'i');\r | |
153 | this.mimePattern = /^\s*audio\/(?:x-)?(?:mp(?:eg|3))\s*(?:$|;)/i;\r | |
154 | this.useAltURL = !overHTTP;\r | |
155 | swfCSS = {\r | |
156 | 'swfBox': 'sm2-object-box',\r | |
157 | 'swfDefault': 'movieContainer',\r | |
158 | 'swfError': 'swf_error',\r | |
159 | 'swfTimedout': 'swf_timedout',\r | |
160 | 'swfLoaded': 'swf_loaded',\r | |
161 | 'swfUnblocked': 'swf_unblocked',\r | |
162 | 'sm2Debug': 'sm2_debug',\r | |
163 | 'highPerf': 'high_performance',\r | |
164 | 'flashDebug': 'flash_debug'\r | |
165 | };\r | |
166 | this.hasHTML5 = (function() {\r | |
167 | try {\r | |
168 | return (Audio !== _undefined && (isOpera && opera !== _undefined && opera.version() < 10 ? new Audio(null) : new Audio()).canPlayType !== _undefined);\r | |
169 | } catch(e) {\r | |
170 | return false;\r | |
171 | }\r | |
172 | }());\r | |
173 | this.setup = function(options) {\r | |
174 | var noURL = (!sm2.url);\r | |
175 | if (options !== _undefined && didInit && needsFlash && sm2.ok() && (options.flashVersion !== _undefined || options.url !== _undefined || options.html5Test !== _undefined)) {\r | |
176 | complain(str('setupLate'));\r | |
177 | }\r | |
178 | assign(options);\r | |
179 | if (noURL && didDCLoaded && options.url !== _undefined) {\r | |
180 | sm2.beginDelayedInit();\r | |
181 | }\r | |
182 | if (!didDCLoaded && options.url !== _undefined && doc.readyState === 'complete') {\r | |
183 | setTimeout(domContentLoaded, 1);\r | |
184 | }\r | |
185 | return sm2;\r | |
186 | };\r | |
187 | this.ok = function() {\r | |
188 | return (needsFlash?(didInit && !disabled):(sm2.useHTML5Audio && sm2.hasHTML5));\r | |
189 | };\r | |
190 | this.supported = this.ok;\r | |
191 | this.getMovie = function(smID) {\r | |
192 | return id(smID) || doc[smID] || window[smID];\r | |
193 | };\r | |
194 | this.createSound = function(oOptions, _url) {\r | |
195 | var cs, cs_string, options, oSound = null;\r | |
196 | if (!didInit || !sm2.ok()) {\r | |
197 | complain(cs_string);\r | |
198 | return false;\r | |
199 | }\r | |
200 | if (_url !== _undefined) {\r | |
201 | oOptions = {\r | |
202 | 'id': oOptions,\r | |
203 | 'url': _url\r | |
204 | };\r | |
205 | }\r | |
206 | options = mixin(oOptions);\r | |
207 | options.url = parseURL(options.url);\r | |
208 | if (idCheck(options.id, true)) {\r | |
209 | return sm2.sounds[options.id];\r | |
210 | }\r | |
211 | function make() {\r | |
212 | options = loopFix(options);\r | |
213 | sm2.sounds[options.id] = new SMSound(options);\r | |
214 | sm2.soundIDs.push(options.id);\r | |
215 | return sm2.sounds[options.id];\r | |
216 | }\r | |
217 | if (html5OK(options)) {\r | |
218 | oSound = make();\r | |
219 | oSound._setup_html5(options);\r | |
220 | } else {\r | |
221 | if (fV > 8) {\r | |
222 | if (options.isMovieStar === null) {\r | |
223 | options.isMovieStar = !!(options.serverURL || (options.type ? options.type.match(netStreamMimeTypes) : false) || options.url.match(netStreamPattern));\r | |
224 | }\r | |
225 | }\r | |
226 | options = policyFix(options, cs);\r | |
227 | oSound = make();\r | |
228 | if (fV === 8) {\r | |
229 | flash._createSound(options.id, options.loops||1, options.usePolicyFile);\r | |
230 | } else {\r | |
231 | flash._createSound(options.id, options.url, options.usePeakData, options.useWaveformData, options.useEQData, options.isMovieStar, (options.isMovieStar?options.bufferTime:false), options.loops||1, options.serverURL, options.duration||null, options.autoPlay, true, options.autoLoad, options.usePolicyFile);\r | |
232 | if (!options.serverURL) {\r | |
233 | oSound.connected = true;\r | |
234 | if (options.onconnect) {\r | |
235 | options.onconnect.apply(oSound);\r | |
236 | }\r | |
237 | }\r | |
238 | }\r | |
239 | if (!options.serverURL && (options.autoLoad || options.autoPlay)) {\r | |
240 | oSound.load(options);\r | |
241 | }\r | |
242 | }\r | |
243 | if (!options.serverURL && options.autoPlay) {\r | |
244 | oSound.play();\r | |
245 | }\r | |
246 | return oSound;\r | |
247 | };\r | |
248 | this.destroySound = function(sID, _bFromSound) {\r | |
249 | if (!idCheck(sID)) {\r | |
250 | return false;\r | |
251 | }\r | |
252 | var oS = sm2.sounds[sID], i;\r | |
253 | oS._iO = {};\r | |
254 | oS.stop();\r | |
255 | oS.unload();\r | |
256 | for (i = 0; i < sm2.soundIDs.length; i++) {\r | |
257 | if (sm2.soundIDs[i] === sID) {\r | |
258 | sm2.soundIDs.splice(i, 1);\r | |
259 | break;\r | |
260 | }\r | |
261 | }\r | |
262 | if (!_bFromSound) {\r | |
263 | oS.destruct(true);\r | |
264 | }\r | |
265 | oS = null;\r | |
266 | delete sm2.sounds[sID];\r | |
267 | return true;\r | |
268 | };\r | |
269 | this.load = function(sID, oOptions) {\r | |
270 | if (!idCheck(sID)) {\r | |
271 | return false;\r | |
272 | }\r | |
273 | return sm2.sounds[sID].load(oOptions);\r | |
274 | };\r | |
275 | this.unload = function(sID) {\r | |
276 | if (!idCheck(sID)) {\r | |
277 | return false;\r | |
278 | }\r | |
279 | return sm2.sounds[sID].unload();\r | |
280 | };\r | |
281 | this.onPosition = function(sID, nPosition, oMethod, oScope) {\r | |
282 | if (!idCheck(sID)) {\r | |
283 | return false;\r | |
284 | }\r | |
285 | return sm2.sounds[sID].onposition(nPosition, oMethod, oScope);\r | |
286 | };\r | |
287 | this.onposition = this.onPosition;\r | |
288 | this.clearOnPosition = function(sID, nPosition, oMethod) {\r | |
289 | if (!idCheck(sID)) {\r | |
290 | return false;\r | |
291 | }\r | |
292 | return sm2.sounds[sID].clearOnPosition(nPosition, oMethod);\r | |
293 | };\r | |
294 | this.play = function(sID, oOptions) {\r | |
295 | var result = false;\r | |
296 | if (!didInit || !sm2.ok()) {\r | |
297 | complain(sm + '.play(): ' + str(!didInit?'notReady':'notOK'));\r | |
298 | return result;\r | |
299 | }\r | |
300 | if (!idCheck(sID)) {\r | |
301 | if (!(oOptions instanceof Object)) {\r | |
302 | oOptions = {\r | |
303 | url: oOptions\r | |
304 | };\r | |
305 | }\r | |
306 | if (oOptions && oOptions.url) {\r | |
307 | oOptions.id = sID;\r | |
308 | result = sm2.createSound(oOptions).play();\r | |
309 | }\r | |
310 | return result;\r | |
311 | }\r | |
312 | return sm2.sounds[sID].play(oOptions);\r | |
313 | };\r | |
314 | this.start = this.play;\r | |
315 | this.setPosition = function(sID, nMsecOffset) {\r | |
316 | if (!idCheck(sID)) {\r | |
317 | return false;\r | |
318 | }\r | |
319 | return sm2.sounds[sID].setPosition(nMsecOffset);\r | |
320 | };\r | |
321 | this.stop = function(sID) {\r | |
322 | if (!idCheck(sID)) {\r | |
323 | return false;\r | |
324 | }\r | |
325 | return sm2.sounds[sID].stop();\r | |
326 | };\r | |
327 | this.stopAll = function() {\r | |
328 | var oSound;\r | |
329 | for (oSound in sm2.sounds) {\r | |
330 | if (sm2.sounds.hasOwnProperty(oSound)) {\r | |
331 | sm2.sounds[oSound].stop();\r | |
332 | }\r | |
333 | }\r | |
334 | };\r | |
335 | this.pause = function(sID) {\r | |
336 | if (!idCheck(sID)) {\r | |
337 | return false;\r | |
338 | }\r | |
339 | return sm2.sounds[sID].pause();\r | |
340 | };\r | |
341 | this.pauseAll = function() {\r | |
342 | var i;\r | |
343 | for (i = sm2.soundIDs.length-1; i >= 0; i--) {\r | |
344 | sm2.sounds[sm2.soundIDs[i]].pause();\r | |
345 | }\r | |
346 | };\r | |
347 | this.resume = function(sID) {\r | |
348 | if (!idCheck(sID)) {\r | |
349 | return false;\r | |
350 | }\r | |
351 | return sm2.sounds[sID].resume();\r | |
352 | };\r | |
353 | this.resumeAll = function() {\r | |
354 | var i;\r | |
355 | for (i = sm2.soundIDs.length-1; i >= 0; i--) {\r | |
356 | sm2.sounds[sm2.soundIDs[i]].resume();\r | |
357 | }\r | |
358 | };\r | |
359 | this.togglePause = function(sID) {\r | |
360 | if (!idCheck(sID)) {\r | |
361 | return false;\r | |
362 | }\r | |
363 | return sm2.sounds[sID].togglePause();\r | |
364 | };\r | |
365 | this.setPan = function(sID, nPan) {\r | |
366 | if (!idCheck(sID)) {\r | |
367 | return false;\r | |
368 | }\r | |
369 | return sm2.sounds[sID].setPan(nPan);\r | |
370 | };\r | |
371 | this.setVolume = function(sID, nVol) {\r | |
372 | if (!idCheck(sID)) {\r | |
373 | return false;\r | |
374 | }\r | |
375 | return sm2.sounds[sID].setVolume(nVol);\r | |
376 | };\r | |
377 | this.mute = function(sID) {\r | |
378 | var i = 0;\r | |
379 | if (sID instanceof String) {\r | |
380 | sID = null;\r | |
381 | }\r | |
382 | if (!sID) {\r | |
383 | for (i = sm2.soundIDs.length-1; i >= 0; i--) {\r | |
384 | sm2.sounds[sm2.soundIDs[i]].mute();\r | |
385 | }\r | |
386 | sm2.muted = true;\r | |
387 | } else {\r | |
388 | if (!idCheck(sID)) {\r | |
389 | return false;\r | |
390 | }\r | |
391 | return sm2.sounds[sID].mute();\r | |
392 | }\r | |
393 | return true;\r | |
394 | };\r | |
395 | this.muteAll = function() {\r | |
396 | sm2.mute();\r | |
397 | };\r | |
398 | this.unmute = function(sID) {\r | |
399 | var i;\r | |
400 | if (sID instanceof String) {\r | |
401 | sID = null;\r | |
402 | }\r | |
403 | if (!sID) {\r | |
404 | for (i = sm2.soundIDs.length-1; i >= 0; i--) {\r | |
405 | sm2.sounds[sm2.soundIDs[i]].unmute();\r | |
406 | }\r | |
407 | sm2.muted = false;\r | |
408 | } else {\r | |
409 | if (!idCheck(sID)) {\r | |
410 | return false;\r | |
411 | }\r | |
412 | return sm2.sounds[sID].unmute();\r | |
413 | }\r | |
414 | return true;\r | |
415 | };\r | |
416 | this.unmuteAll = function() {\r | |
417 | sm2.unmute();\r | |
418 | };\r | |
419 | this.toggleMute = function(sID) {\r | |
420 | if (!idCheck(sID)) {\r | |
421 | return false;\r | |
422 | }\r | |
423 | return sm2.sounds[sID].toggleMute();\r | |
424 | };\r | |
425 | this.getMemoryUse = function() {\r | |
426 | var ram = 0;\r | |
427 | if (flash && fV !== 8) {\r | |
428 | ram = parseInt(flash._getMemoryUse(), 10);\r | |
429 | }\r | |
430 | return ram;\r | |
431 | };\r | |
432 | this.disable = function(bNoDisable) {\r | |
433 | var i;\r | |
434 | if (bNoDisable === _undefined) {\r | |
435 | bNoDisable = false;\r | |
436 | }\r | |
437 | if (disabled) {\r | |
438 | return false;\r | |
439 | }\r | |
440 | disabled = true;\r | |
441 | for (i = sm2.soundIDs.length-1; i >= 0; i--) {\r | |
442 | disableObject(sm2.sounds[sm2.soundIDs[i]]);\r | |
443 | }\r | |
444 | initComplete(bNoDisable);\r | |
445 | event.remove(window, 'load', initUserOnload);\r | |
446 | return true;\r | |
447 | };\r | |
448 | this.canPlayMIME = function(sMIME) {\r | |
449 | var result;\r | |
450 | if (sm2.hasHTML5) {\r | |
451 | result = html5CanPlay({type:sMIME});\r | |
452 | }\r | |
453 | if (!result && needsFlash) {\r | |
454 | result = (sMIME && sm2.ok() ? !!((fV > 8 ? sMIME.match(netStreamMimeTypes) : null) || sMIME.match(sm2.mimePattern)) : null);\r | |
455 | }\r | |
456 | return result;\r | |
457 | };\r | |
458 | this.canPlayURL = function(sURL) {\r | |
459 | var result;\r | |
460 | if (sm2.hasHTML5) {\r | |
461 | result = html5CanPlay({url: sURL});\r | |
462 | }\r | |
463 | if (!result && needsFlash) {\r | |
464 | result = (sURL && sm2.ok() ? !!(sURL.match(sm2.filePattern)) : null);\r | |
465 | }\r | |
466 | return result;\r | |
467 | };\r | |
468 | this.canPlayLink = function(oLink) {\r | |
469 | if (oLink.type !== _undefined && oLink.type) {\r | |
470 | if (sm2.canPlayMIME(oLink.type)) {\r | |
471 | return true;\r | |
472 | }\r | |
473 | }\r | |
474 | return sm2.canPlayURL(oLink.href);\r | |
475 | };\r | |
476 | this.getSoundById = function(sID, _suppressDebug) {\r | |
477 | if (!sID) {\r | |
478 | throw new Error(sm + '.getSoundById(): sID is null/_undefined');\r | |
479 | }\r | |
480 | var result = sm2.sounds[sID];\r | |
481 | return result;\r | |
482 | };\r | |
483 | this.onready = function(oMethod, oScope) {\r | |
484 | var sType = 'onready',\r | |
485 | result = false;\r | |
486 | if (typeof oMethod === 'function') {\r | |
487 | if (!oScope) {\r | |
488 | oScope = window;\r | |
489 | }\r | |
490 | addOnEvent(sType, oMethod, oScope);\r | |
491 | processOnEvents();\r | |
492 | result = true;\r | |
493 | } else {\r | |
494 | throw str('needFunction', sType);\r | |
495 | }\r | |
496 | return result;\r | |
497 | };\r | |
498 | this.ontimeout = function(oMethod, oScope) {\r | |
499 | var sType = 'ontimeout',\r | |
500 | result = false;\r | |
501 | if (typeof oMethod === 'function') {\r | |
502 | if (!oScope) {\r | |
503 | oScope = window;\r | |
504 | }\r | |
505 | addOnEvent(sType, oMethod, oScope);\r | |
506 | processOnEvents({type:sType});\r | |
507 | result = true;\r | |
508 | } else {\r | |
509 | throw str('needFunction', sType);\r | |
510 | }\r | |
511 | return result;\r | |
512 | };\r | |
513 | this._writeDebug = function(sText, sTypeOrObject) {\r | |
514 | return true;\r | |
515 | };\r | |
516 | this._wD = this._writeDebug;\r | |
517 | this._debug = function() {\r | |
518 | };\r | |
519 | this.reboot = function(resetEvents, excludeInit) {\r | |
520 | var i, j, k;\r | |
521 | for (i = sm2.soundIDs.length-1; i >= 0; i--) {\r | |
522 | sm2.sounds[sm2.soundIDs[i]].destruct();\r | |
523 | }\r | |
524 | if (flash) {\r | |
525 | try {\r | |
526 | if (isIE) {\r | |
527 | oRemovedHTML = flash.innerHTML;\r | |
528 | }\r | |
529 | oRemoved = flash.parentNode.removeChild(flash);\r | |
530 | } catch(e) {\r | |
531 | }\r | |
532 | }\r | |
533 | oRemovedHTML = oRemoved = needsFlash = flash = null;\r | |
534 | sm2.enabled = didDCLoaded = didInit = waitingForEI = initPending = didAppend = appendSuccess = disabled = useGlobalHTML5Audio = sm2.swfLoaded = false;\r | |
535 | sm2.soundIDs = [];\r | |
536 | sm2.sounds = {};\r | |
537 | if (!resetEvents) {\r | |
538 | for (i in on_queue) {\r | |
539 | if (on_queue.hasOwnProperty(i)) {\r | |
540 | for (j = 0, k = on_queue[i].length; j < k; j++) {\r | |
541 | on_queue[i][j].fired = false;\r | |
542 | }\r | |
543 | }\r | |
544 | }\r | |
545 | } else {\r | |
546 | on_queue = [];\r | |
547 | }\r | |
548 | sm2.html5 = {\r | |
549 | 'usingFlash': null\r | |
550 | };\r | |
551 | sm2.flash = {};\r | |
552 | sm2.html5Only = false;\r | |
553 | sm2.ignoreFlash = false;\r | |
554 | window.setTimeout(function() {\r | |
555 | preInit();\r | |
556 | if (!excludeInit) {\r | |
557 | sm2.beginDelayedInit();\r | |
558 | }\r | |
559 | }, 20);\r | |
560 | return sm2;\r | |
561 | };\r | |
562 | this.reset = function() {\r | |
563 | return sm2.reboot(true, true);\r | |
564 | };\r | |
565 | this.getMoviePercent = function() {\r | |
566 | return (flash && 'PercentLoaded' in flash ? flash.PercentLoaded() : null);\r | |
567 | };\r | |
568 | this.beginDelayedInit = function() {\r | |
569 | windowLoaded = true;\r | |
570 | domContentLoaded();\r | |
571 | setTimeout(function() {\r | |
572 | if (initPending) {\r | |
573 | return false;\r | |
574 | }\r | |
575 | createMovie();\r | |
576 | initMovie();\r | |
577 | initPending = true;\r | |
578 | return true;\r | |
579 | }, 20);\r | |
580 | delayWaitForEI();\r | |
581 | };\r | |
582 | this.destruct = function() {\r | |
583 | sm2.disable(true);\r | |
584 | };\r | |
585 | SMSound = function(oOptions) {\r | |
586 | var s = this, resetProperties, add_html5_events, remove_html5_events, stop_html5_timer, start_html5_timer, attachOnPosition, onplay_called = false, onPositionItems = [], onPositionFired = 0, detachOnPosition, applyFromTo, lastURL = null, lastHTML5State;\r | |
587 | lastHTML5State = {\r | |
588 | duration: null,\r | |
589 | time: null\r | |
590 | };\r | |
591 | this.id = oOptions.id;\r | |
592 | this.sID = this.id;\r | |
593 | this.url = oOptions.url;\r | |
594 | this.options = mixin(oOptions);\r | |
595 | this.instanceOptions = this.options;\r | |
596 | this._iO = this.instanceOptions;\r | |
597 | this.pan = this.options.pan;\r | |
598 | this.volume = this.options.volume;\r | |
599 | this.isHTML5 = false;\r | |
600 | this._a = null;\r | |
601 | this.id3 = {};\r | |
602 | this._debug = function() {\r | |
603 | };\r | |
604 | this.load = function(oOptions) {\r | |
605 | var oSound = null, instanceOptions;\r | |
606 | if (oOptions !== _undefined) {\r | |
607 | s._iO = mixin(oOptions, s.options);\r | |
608 | } else {\r | |
609 | oOptions = s.options;\r | |
610 | s._iO = oOptions;\r | |
611 | if (lastURL && lastURL !== s.url) {\r | |
612 | s._iO.url = s.url;\r | |
613 | s.url = null;\r | |
614 | }\r | |
615 | }\r | |
616 | if (!s._iO.url) {\r | |
617 | s._iO.url = s.url;\r | |
618 | }\r | |
619 | s._iO.url = parseURL(s._iO.url);\r | |
620 | s.instanceOptions = s._iO;\r | |
621 | instanceOptions = s._iO;\r | |
622 | if (instanceOptions.url === s.url && s.readyState !== 0 && s.readyState !== 2) {\r | |
623 | if (s.readyState === 3 && instanceOptions.onload) {\r | |
624 | wrapCallback(s, function() {\r | |
625 | instanceOptions.onload.apply(s, [(!!s.duration)]);\r | |
626 | });\r | |
627 | }\r | |
628 | return s;\r | |
629 | }\r | |
630 | s.loaded = false;\r | |
631 | s.readyState = 1;\r | |
632 | s.playState = 0;\r | |
633 | s.id3 = {};\r | |
634 | if (html5OK(instanceOptions)) {\r | |
635 | oSound = s._setup_html5(instanceOptions);\r | |
636 | if (!oSound._called_load) {\r | |
637 | s._html5_canplay = false;\r | |
638 | if (s.url !== instanceOptions.url) {\r | |
639 | s._a.src = instanceOptions.url;\r | |
640 | s.setPosition(0);\r | |
641 | }\r | |
642 | s._a.autobuffer = 'auto';\r | |
643 | s._a.preload = 'auto';\r | |
644 | s._a._called_load = true;\r | |
645 | if (instanceOptions.autoPlay) {\r | |
646 | s.play();\r | |
647 | }\r | |
648 | } else {\r | |
649 | }\r | |
650 | } else {\r | |
651 | try {\r | |
652 | s.isHTML5 = false;\r | |
653 | s._iO = policyFix(loopFix(instanceOptions));\r | |
654 | instanceOptions = s._iO;\r | |
655 | if (fV === 8) {\r | |
656 | flash._load(s.id, instanceOptions.url, instanceOptions.stream, instanceOptions.autoPlay, instanceOptions.usePolicyFile);\r | |
657 | } else {\r | |
658 | flash._load(s.id, instanceOptions.url, !!(instanceOptions.stream), !!(instanceOptions.autoPlay), instanceOptions.loops||1, !!(instanceOptions.autoLoad), instanceOptions.usePolicyFile);\r | |
659 | }\r | |
660 | } catch(e) {\r | |
661 | catchError({type:'SMSOUND_LOAD_JS_EXCEPTION', fatal:true});\r | |
662 | }\r | |
663 | }\r | |
664 | s.url = instanceOptions.url;\r | |
665 | return s;\r | |
666 | };\r | |
667 | this.unload = function() {\r | |
668 | if (s.readyState !== 0) {\r | |
669 | if (!s.isHTML5) {\r | |
670 | if (fV === 8) {\r | |
671 | flash._unload(s.id, emptyURL);\r | |
672 | } else {\r | |
673 | flash._unload(s.id);\r | |
674 | }\r | |
675 | } else {\r | |
676 | stop_html5_timer();\r | |
677 | if (s._a) {\r | |
678 | s._a.pause();\r | |
679 | html5Unload(s._a, emptyURL);\r | |
680 | lastURL = emptyURL;\r | |
681 | }\r | |
682 | }\r | |
683 | resetProperties();\r | |
684 | }\r | |
685 | return s;\r | |
686 | };\r | |
687 | this.destruct = function(_bFromSM) {\r | |
688 | if (!s.isHTML5) {\r | |
689 | s._iO.onfailure = null;\r | |
690 | flash._destroySound(s.id);\r | |
691 | } else {\r | |
692 | stop_html5_timer();\r | |
693 | if (s._a) {\r | |
694 | s._a.pause();\r | |
695 | html5Unload(s._a);\r | |
696 | if (!useGlobalHTML5Audio) {\r | |
697 | remove_html5_events();\r | |
698 | }\r | |
699 | s._a._s = null;\r | |
700 | s._a = null;\r | |
701 | }\r | |
702 | }\r | |
703 | if (!_bFromSM) {\r | |
704 | sm2.destroySound(s.id, true);\r | |
705 | }\r | |
706 | };\r | |
707 | this.play = function(oOptions, _updatePlayState) {\r | |
708 | var fN, allowMulti, a, onready, startOK = true,\r | |
709 | exit = null;\r | |
710 | _updatePlayState = (_updatePlayState === _undefined ? true : _updatePlayState);\r | |
711 | if (!oOptions) {\r | |
712 | oOptions = {};\r | |
713 | }\r | |
714 | if (s.url) {\r | |
715 | s._iO.url = s.url;\r | |
716 | }\r | |
717 | s._iO = mixin(s._iO, s.options);\r | |
718 | s._iO = mixin(oOptions, s._iO);\r | |
719 | s._iO.url = parseURL(s._iO.url);\r | |
720 | s.instanceOptions = s._iO;\r | |
721 | if (s._iO.serverURL && !s.connected) {\r | |
722 | if (!s.getAutoPlay()) {\r | |
723 | s.setAutoPlay(true);\r | |
724 | }\r | |
725 | return s;\r | |
726 | }\r | |
727 | if (html5OK(s._iO)) {\r | |
728 | s._setup_html5(s._iO);\r | |
729 | start_html5_timer();\r | |
730 | }\r | |
731 | if (s.playState === 1 && !s.paused) {\r | |
732 | allowMulti = s._iO.multiShot;\r | |
733 | if (!allowMulti) {\r | |
734 | exit = s;\r | |
735 | } else {\r | |
736 | }\r | |
737 | }\r | |
738 | if (exit !== null) {\r | |
739 | return exit;\r | |
740 | }\r | |
741 | if (oOptions.url && oOptions.url !== s.url) {\r | |
742 | s.load(s._iO);\r | |
743 | }\r | |
744 | if (!s.loaded) {\r | |
745 | if (s.readyState === 0) {\r | |
746 | if (!s.isHTML5) {\r | |
747 | s._iO.autoPlay = true;\r | |
748 | s.load(s._iO);\r | |
749 | } else {\r | |
750 | s.load(s._iO);\r | |
751 | }\r | |
752 | s.instanceOptions = s._iO;\r | |
753 | } else if (s.readyState === 2) {\r | |
754 | exit = s;\r | |
755 | } else {\r | |
756 | }\r | |
757 | } else {\r | |
758 | }\r | |
759 | if (exit !== null) {\r | |
760 | return exit;\r | |
761 | }\r | |
762 | if (!s.isHTML5 && fV === 9 && s.position > 0 && s.position === s.duration) {\r | |
763 | oOptions.position = 0;\r | |
764 | }\r | |
765 | if (s.paused && s.position >= 0 && (!s._iO.serverURL || s.position > 0)) {\r | |
766 | s.resume();\r | |
767 | } else {\r | |
768 | s._iO = mixin(oOptions, s._iO);\r | |
769 | if (s._iO.from !== null && s._iO.to !== null && s.instanceCount === 0 && s.playState === 0 && !s._iO.serverURL) {\r | |
770 | onready = function() {\r | |
771 | s._iO = mixin(oOptions, s._iO);\r | |
772 | s.play(s._iO);\r | |
773 | };\r | |
774 | if (s.isHTML5 && !s._html5_canplay) {\r | |
775 | s.load({\r | |
776 | oncanplay: onready\r | |
777 | });\r | |
778 | exit = false;\r | |
779 | } else if (!s.isHTML5 && !s.loaded && (!s.readyState || s.readyState !== 2)) {\r | |
780 | s.load({\r | |
781 | onload: onready\r | |
782 | });\r | |
783 | exit = false;\r | |
784 | }\r | |
785 | if (exit !== null) {\r | |
786 | return exit;\r | |
787 | }\r | |
788 | s._iO = applyFromTo();\r | |
789 | }\r | |
790 | if (!s.instanceCount || s._iO.multiShotEvents || (!s.isHTML5 && fV > 8 && !s.getAutoPlay())) {\r | |
791 | s.instanceCount++;\r | |
792 | }\r | |
793 | if (s._iO.onposition && s.playState === 0) {\r | |
794 | attachOnPosition(s);\r | |
795 | }\r | |
796 | s.playState = 1;\r | |
797 | s.paused = false;\r | |
798 | s.position = (s._iO.position !== _undefined && !isNaN(s._iO.position) ? s._iO.position : 0);\r | |
799 | if (!s.isHTML5) {\r | |
800 | s._iO = policyFix(loopFix(s._iO));\r | |
801 | }\r | |
802 | if (s._iO.onplay && _updatePlayState) {\r | |
803 | s._iO.onplay.apply(s);\r | |
804 | onplay_called = true;\r | |
805 | }\r | |
806 | s.setVolume(s._iO.volume, true);\r | |
807 | s.setPan(s._iO.pan, true);\r | |
808 | if (!s.isHTML5) {\r | |
809 | startOK = flash._start(s.id, s._iO.loops || 1, (fV === 9 ? s.position : s.position / 1000), s._iO.multiShot || false);\r | |
810 | if (fV === 9 && !startOK) {\r | |
811 | if (s._iO.onplayerror) {\r | |
812 | s._iO.onplayerror.apply(s);\r | |
813 | }\r | |
814 | }\r | |
815 | } else {\r | |
816 | start_html5_timer();\r | |
817 | a = s._setup_html5();\r | |
818 | s.setPosition(s._iO.position);\r | |
819 | a.play();\r | |
820 | }\r | |
821 | }\r | |
822 | return s;\r | |
823 | };\r | |
824 | this.start = this.play;\r | |
825 | this.stop = function(bAll) {\r | |
826 | var instanceOptions = s._iO,\r | |
827 | originalPosition;\r | |
828 | if (s.playState === 1) {\r | |
829 | s._onbufferchange(0);\r | |
830 | s._resetOnPosition(0);\r | |
831 | s.paused = false;\r | |
832 | if (!s.isHTML5) {\r | |
833 | s.playState = 0;\r | |
834 | }\r | |
835 | detachOnPosition();\r | |
836 | if (instanceOptions.to) {\r | |
837 | s.clearOnPosition(instanceOptions.to);\r | |
838 | }\r | |
839 | if (!s.isHTML5) {\r | |
840 | flash._stop(s.id, bAll);\r | |
841 | if (instanceOptions.serverURL) {\r | |
842 | s.unload();\r | |
843 | }\r | |
844 | } else {\r | |
845 | if (s._a) {\r | |
846 | originalPosition = s.position;\r | |
847 | s.setPosition(0);\r | |
848 | s.position = originalPosition;\r | |
849 | s._a.pause();\r | |
850 | s.playState = 0;\r | |
851 | s._onTimer();\r | |
852 | stop_html5_timer();\r | |
853 | }\r | |
854 | }\r | |
855 | s.instanceCount = 0;\r | |
856 | s._iO = {};\r | |
857 | if (instanceOptions.onstop) {\r | |
858 | instanceOptions.onstop.apply(s);\r | |
859 | }\r | |
860 | }\r | |
861 | return s;\r | |
862 | };\r | |
863 | this.setAutoPlay = function(autoPlay) {\r | |
864 | s._iO.autoPlay = autoPlay;\r | |
865 | if (!s.isHTML5) {\r | |
866 | flash._setAutoPlay(s.id, autoPlay);\r | |
867 | if (autoPlay) {\r | |
868 | if (!s.instanceCount && s.readyState === 1) {\r | |
869 | s.instanceCount++;\r | |
870 | }\r | |
871 | }\r | |
872 | }\r | |
873 | };\r | |
874 | this.getAutoPlay = function() {\r | |
875 | return s._iO.autoPlay;\r | |
876 | };\r | |
877 | this.setPosition = function(nMsecOffset) {\r | |
878 | if (nMsecOffset === _undefined) {\r | |
879 | nMsecOffset = 0;\r | |
880 | }\r | |
881 | var original_pos,\r | |
882 | position, position1K,\r | |
883 | offset = (s.isHTML5 ? Math.max(nMsecOffset, 0) : Math.min(s.duration || s._iO.duration, Math.max(nMsecOffset, 0)));\r | |
884 | original_pos = s.position;\r | |
885 | s.position = offset;\r | |
886 | position1K = s.position/1000;\r | |
887 | s._resetOnPosition(s.position);\r | |
888 | s._iO.position = offset;\r | |
889 | if (!s.isHTML5) {\r | |
890 | position = (fV === 9 ? s.position : position1K);\r | |
891 | if (s.readyState && s.readyState !== 2) {\r | |
892 | flash._setPosition(s.id, position, (s.paused || !s.playState), s._iO.multiShot);\r | |
893 | }\r | |
894 | } else if (s._a) {\r | |
895 | if (s._html5_canplay) {\r | |
896 | if (s._a.currentTime !== position1K) {\r | |
897 | try {\r | |
898 | s._a.currentTime = position1K;\r | |
899 | if (s.playState === 0 || s.paused) {\r | |
900 | s._a.pause();\r | |
901 | }\r | |
902 | } catch(e) {\r | |
903 | }\r | |
904 | }\r | |
905 | } else {\r | |
906 | }\r | |
907 | }\r | |
908 | if (s.isHTML5) {\r | |
909 | if (s.paused) {\r | |
910 | s._onTimer(true);\r | |
911 | }\r | |
912 | }\r | |
913 | return s;\r | |
914 | };\r | |
915 | this.pause = function(_bCallFlash) {\r | |
916 | if (s.paused || (s.playState === 0 && s.readyState !== 1)) {\r | |
917 | return s;\r | |
918 | }\r | |
919 | s.paused = true;\r | |
920 | if (!s.isHTML5) {\r | |
921 | if (_bCallFlash || _bCallFlash === _undefined) {\r | |
922 | flash._pause(s.id, s._iO.multiShot);\r | |
923 | }\r | |
924 | } else {\r | |
925 | s._setup_html5().pause();\r | |
926 | stop_html5_timer();\r | |
927 | }\r | |
928 | if (s._iO.onpause) {\r | |
929 | s._iO.onpause.apply(s);\r | |
930 | }\r | |
931 | return s;\r | |
932 | };\r | |
933 | this.resume = function() {\r | |
934 | var instanceOptions = s._iO;\r | |
935 | if (!s.paused) {\r | |
936 | return s;\r | |
937 | }\r | |
938 | s.paused = false;\r | |
939 | s.playState = 1;\r | |
940 | if (!s.isHTML5) {\r | |
941 | if (instanceOptions.isMovieStar && !instanceOptions.serverURL) {\r | |
942 | s.setPosition(s.position);\r | |
943 | }\r | |
944 | flash._pause(s.id, instanceOptions.multiShot);\r | |
945 | } else {\r | |
946 | s._setup_html5().play();\r | |
947 | start_html5_timer();\r | |
948 | }\r | |
949 | if (!onplay_called && instanceOptions.onplay) {\r | |
950 | instanceOptions.onplay.apply(s);\r | |
951 | onplay_called = true;\r | |
952 | } else if (instanceOptions.onresume) {\r | |
953 | instanceOptions.onresume.apply(s);\r | |
954 | }\r | |
955 | return s;\r | |
956 | };\r | |
957 | this.togglePause = function() {\r | |
958 | if (s.playState === 0) {\r | |
959 | s.play({\r | |
960 | position: (fV === 9 && !s.isHTML5 ? s.position : s.position / 1000)\r | |
961 | });\r | |
962 | return s;\r | |
963 | }\r | |
964 | if (s.paused) {\r | |
965 | s.resume();\r | |
966 | } else {\r | |
967 | s.pause();\r | |
968 | }\r | |
969 | return s;\r | |
970 | };\r | |
971 | this.setPan = function(nPan, bInstanceOnly) {\r | |
972 | if (nPan === _undefined) {\r | |
973 | nPan = 0;\r | |
974 | }\r | |
975 | if (bInstanceOnly === _undefined) {\r | |
976 | bInstanceOnly = false;\r | |
977 | }\r | |
978 | if (!s.isHTML5) {\r | |
979 | flash._setPan(s.id, nPan);\r | |
980 | }\r | |
981 | s._iO.pan = nPan;\r | |
982 | if (!bInstanceOnly) {\r | |
983 | s.pan = nPan;\r | |
984 | s.options.pan = nPan;\r | |
985 | }\r | |
986 | return s;\r | |
987 | };\r | |
988 | this.setVolume = function(nVol, _bInstanceOnly) {\r | |
989 | if (nVol === _undefined) {\r | |
990 | nVol = 100;\r | |
991 | }\r | |
992 | if (_bInstanceOnly === _undefined) {\r | |
993 | _bInstanceOnly = false;\r | |
994 | }\r | |
995 | if (!s.isHTML5) {\r | |
996 | flash._setVolume(s.id, (sm2.muted && !s.muted) || s.muted?0:nVol);\r | |
997 | } else if (s._a) {\r | |
998 | s._a.volume = Math.max(0, Math.min(1, nVol/100));\r | |
999 | }\r | |
1000 | s._iO.volume = nVol;\r | |
1001 | if (!_bInstanceOnly) {\r | |
1002 | s.volume = nVol;\r | |
1003 | s.options.volume = nVol;\r | |
1004 | }\r | |
1005 | return s;\r | |
1006 | };\r | |
1007 | this.mute = function() {\r | |
1008 | s.muted = true;\r | |
1009 | if (!s.isHTML5) {\r | |
1010 | flash._setVolume(s.id, 0);\r | |
1011 | } else if (s._a) {\r | |
1012 | s._a.muted = true;\r | |
1013 | }\r | |
1014 | return s;\r | |
1015 | };\r | |
1016 | this.unmute = function() {\r | |
1017 | s.muted = false;\r | |
1018 | var hasIO = (s._iO.volume !== _undefined);\r | |
1019 | if (!s.isHTML5) {\r | |
1020 | flash._setVolume(s.id, hasIO?s._iO.volume:s.options.volume);\r | |
1021 | } else if (s._a) {\r | |
1022 | s._a.muted = false;\r | |
1023 | }\r | |
1024 | return s;\r | |
1025 | };\r | |
1026 | this.toggleMute = function() {\r | |
1027 | return (s.muted?s.unmute():s.mute());\r | |
1028 | };\r | |
1029 | this.onPosition = function(nPosition, oMethod, oScope) {\r | |
1030 | onPositionItems.push({\r | |
1031 | position: parseInt(nPosition, 10),\r | |
1032 | method: oMethod,\r | |
1033 | scope: (oScope !== _undefined ? oScope : s),\r | |
1034 | fired: false\r | |
1035 | });\r | |
1036 | return s;\r | |
1037 | };\r | |
1038 | this.onposition = this.onPosition;\r | |
1039 | this.clearOnPosition = function(nPosition, oMethod) {\r | |
1040 | var i;\r | |
1041 | nPosition = parseInt(nPosition, 10);\r | |
1042 | if (isNaN(nPosition)) {\r | |
1043 | return false;\r | |
1044 | }\r | |
1045 | for (i=0; i < onPositionItems.length; i++) {\r | |
1046 | if (nPosition === onPositionItems[i].position) {\r | |
1047 | if (!oMethod || (oMethod === onPositionItems[i].method)) {\r | |
1048 | if (onPositionItems[i].fired) {\r | |
1049 | onPositionFired--;\r | |
1050 | }\r | |
1051 | onPositionItems.splice(i, 1);\r | |
1052 | }\r | |
1053 | }\r | |
1054 | }\r | |
1055 | };\r | |
1056 | this._processOnPosition = function() {\r | |
1057 | var i, item, j = onPositionItems.length;\r | |
1058 | if (!j || !s.playState || onPositionFired >= j) {\r | |
1059 | return false;\r | |
1060 | }\r | |
1061 | for (i=j-1; i >= 0; i--) {\r | |
1062 | item = onPositionItems[i];\r | |
1063 | if (!item.fired && s.position >= item.position) {\r | |
1064 | item.fired = true;\r | |
1065 | onPositionFired++;\r | |
1066 | item.method.apply(item.scope, [item.position]);\r | |
1067 | }\r | |
1068 | }\r | |
1069 | return true;\r | |
1070 | };\r | |
1071 | this._resetOnPosition = function(nPosition) {\r | |
1072 | var i, item, j = onPositionItems.length;\r | |
1073 | if (!j) {\r | |
1074 | return false;\r | |
1075 | }\r | |
1076 | for (i=j-1; i >= 0; i--) {\r | |
1077 | item = onPositionItems[i];\r | |
1078 | if (item.fired && nPosition <= item.position) {\r | |
1079 | item.fired = false;\r | |
1080 | onPositionFired--;\r | |
1081 | }\r | |
1082 | }\r | |
1083 | return true;\r | |
1084 | };\r | |
1085 | applyFromTo = function() {\r | |
1086 | var instanceOptions = s._iO,\r | |
1087 | f = instanceOptions.from,\r | |
1088 | t = instanceOptions.to,\r | |
1089 | start, end;\r | |
1090 | end = function() {\r | |
1091 | s.clearOnPosition(t, end);\r | |
1092 | s.stop();\r | |
1093 | };\r | |
1094 | start = function() {\r | |
1095 | if (t !== null && !isNaN(t)) {\r | |
1096 | s.onPosition(t, end);\r | |
1097 | }\r | |
1098 | };\r | |
1099 | if (f !== null && !isNaN(f)) {\r | |
1100 | instanceOptions.position = f;\r | |
1101 | instanceOptions.multiShot = false;\r | |
1102 | start();\r | |
1103 | }\r | |
1104 | return instanceOptions;\r | |
1105 | };\r | |
1106 | attachOnPosition = function() {\r | |
1107 | var item,\r | |
1108 | op = s._iO.onposition;\r | |
1109 | if (op) {\r | |
1110 | for (item in op) {\r | |
1111 | if (op.hasOwnProperty(item)) {\r | |
1112 | s.onPosition(parseInt(item, 10), op[item]);\r | |
1113 | }\r | |
1114 | }\r | |
1115 | }\r | |
1116 | };\r | |
1117 | detachOnPosition = function() {\r | |
1118 | var item,\r | |
1119 | op = s._iO.onposition;\r | |
1120 | if (op) {\r | |
1121 | for (item in op) {\r | |
1122 | if (op.hasOwnProperty(item)) {\r | |
1123 | s.clearOnPosition(parseInt(item, 10));\r | |
1124 | }\r | |
1125 | }\r | |
1126 | }\r | |
1127 | };\r | |
1128 | start_html5_timer = function() {\r | |
1129 | if (s.isHTML5) {\r | |
1130 | startTimer(s);\r | |
1131 | }\r | |
1132 | };\r | |
1133 | stop_html5_timer = function() {\r | |
1134 | if (s.isHTML5) {\r | |
1135 | stopTimer(s);\r | |
1136 | }\r | |
1137 | };\r | |
1138 | resetProperties = function(retainPosition) {\r | |
1139 | if (!retainPosition) {\r | |
1140 | onPositionItems = [];\r | |
1141 | onPositionFired = 0;\r | |
1142 | }\r | |
1143 | onplay_called = false;\r | |
1144 | s._hasTimer = null;\r | |
1145 | s._a = null;\r | |
1146 | s._html5_canplay = false;\r | |
1147 | s.bytesLoaded = null;\r | |
1148 | s.bytesTotal = null;\r | |
1149 | s.duration = (s._iO && s._iO.duration ? s._iO.duration : null);\r | |
1150 | s.durationEstimate = null;\r | |
1151 | s.buffered = [];\r | |
1152 | s.eqData = [];\r | |
1153 | s.eqData.left = [];\r | |
1154 | s.eqData.right = [];\r | |
1155 | s.failures = 0;\r | |
1156 | s.isBuffering = false;\r | |
1157 | s.instanceOptions = {};\r | |
1158 | s.instanceCount = 0;\r | |
1159 | s.loaded = false;\r | |
1160 | s.metadata = {};\r | |
1161 | s.readyState = 0;\r | |
1162 | s.muted = false;\r | |
1163 | s.paused = false;\r | |
1164 | s.peakData = {\r | |
1165 | left: 0,\r | |
1166 | right: 0\r | |
1167 | };\r | |
1168 | s.waveformData = {\r | |
1169 | left: [],\r | |
1170 | right: []\r | |
1171 | };\r | |
1172 | s.playState = 0;\r | |
1173 | s.position = null;\r | |
1174 | s.id3 = {};\r | |
1175 | };\r | |
1176 | resetProperties();\r | |
1177 | this._onTimer = function(bForce) {\r | |
1178 | var duration, isNew = false, time, x = {};\r | |
1179 | if (s._hasTimer || bForce) {\r | |
1180 | if (s._a && (bForce || ((s.playState > 0 || s.readyState === 1) && !s.paused))) {\r | |
1181 | duration = s._get_html5_duration();\r | |
1182 | if (duration !== lastHTML5State.duration) {\r | |
1183 | lastHTML5State.duration = duration;\r | |
1184 | s.duration = duration;\r | |
1185 | isNew = true;\r | |
1186 | }\r | |
1187 | s.durationEstimate = s.duration;\r | |
1188 | time = (s._a.currentTime * 1000 || 0);\r | |
1189 | if (time !== lastHTML5State.time) {\r | |
1190 | lastHTML5State.time = time;\r | |
1191 | isNew = true;\r | |
1192 | }\r | |
1193 | if (isNew || bForce) {\r | |
1194 | s._whileplaying(time,x,x,x,x);\r | |
1195 | }\r | |
1196 | }\r | |
1197 | return isNew;\r | |
1198 | }\r | |
1199 | };\r | |
1200 | this._get_html5_duration = function() {\r | |
1201 | var instanceOptions = s._iO,\r | |
1202 | d = (s._a && s._a.duration ? s._a.duration*1000 : (instanceOptions && instanceOptions.duration ? instanceOptions.duration : null)),\r | |
1203 | result = (d && !isNaN(d) && d !== Infinity ? d : null);\r | |
1204 | return result;\r | |
1205 | };\r | |
1206 | this._apply_loop = function(a, nLoops) {\r | |
1207 | a.loop = (nLoops > 1 ? 'loop' : '');\r | |
1208 | };\r | |
1209 | this._setup_html5 = function(oOptions) {\r | |
1210 | var instanceOptions = mixin(s._iO, oOptions),\r | |
1211 | a = useGlobalHTML5Audio ? globalHTML5Audio : s._a,\r | |
1212 | dURL = decodeURI(instanceOptions.url),\r | |
1213 | sameURL;\r | |
1214 | if (useGlobalHTML5Audio) {\r | |
1215 | if (dURL === decodeURI(lastGlobalHTML5URL)) {\r | |
1216 | sameURL = true;\r | |
1217 | }\r | |
1218 | } else if (dURL === decodeURI(lastURL)) {\r | |
1219 | sameURL = true;\r | |
1220 | }\r | |
1221 | if (a) {\r | |
1222 | if (a._s) {\r | |
1223 | if (useGlobalHTML5Audio) {\r | |
1224 | if (a._s && a._s.playState && !sameURL) {\r | |
1225 | a._s.stop();\r | |
1226 | }\r | |
1227 | } else if (!useGlobalHTML5Audio && dURL === decodeURI(lastURL)) {\r | |
1228 | s._apply_loop(a, instanceOptions.loops);\r | |
1229 | return a;\r | |
1230 | }\r | |
1231 | }\r | |
1232 | if (!sameURL) {\r | |
1233 | resetProperties(false);\r | |
1234 | a.src = instanceOptions.url;\r | |
1235 | s.url = instanceOptions.url;\r | |
1236 | lastURL = instanceOptions.url;\r | |
1237 | lastGlobalHTML5URL = instanceOptions.url;\r | |
1238 | a._called_load = false;\r | |
1239 | }\r | |
1240 | } else {\r | |
1241 | if (instanceOptions.autoLoad || instanceOptions.autoPlay) {\r | |
1242 | s._a = new Audio(instanceOptions.url);\r | |
1243 | } else {\r | |
1244 | s._a = (isOpera && opera.version() < 10 ? new Audio(null) : new Audio());\r | |
1245 | }\r | |
1246 | a = s._a;\r | |
1247 | a._called_load = false;\r | |
1248 | if (useGlobalHTML5Audio) {\r | |
1249 | globalHTML5Audio = a;\r | |
1250 | }\r | |
1251 | }\r | |
1252 | s.isHTML5 = true;\r | |
1253 | s._a = a;\r | |
1254 | a._s = s;\r | |
1255 | add_html5_events();\r | |
1256 | s._apply_loop(a, instanceOptions.loops);\r | |
1257 | if (instanceOptions.autoLoad || instanceOptions.autoPlay) {\r | |
1258 | s.load();\r | |
1259 | } else {\r | |
1260 | a.autobuffer = false;\r | |
1261 | a.preload = 'auto';\r | |
1262 | }\r | |
1263 | return a;\r | |
1264 | };\r | |
1265 | add_html5_events = function() {\r | |
1266 | if (s._a._added_events) {\r | |
1267 | return false;\r | |
1268 | }\r | |
1269 | var f;\r | |
1270 | function add(oEvt, oFn, bCapture) {\r | |
1271 | return s._a ? s._a.addEventListener(oEvt, oFn, bCapture||false) : null;\r | |
1272 | }\r | |
1273 | s._a._added_events = true;\r | |
1274 | for (f in html5_events) {\r | |
1275 | if (html5_events.hasOwnProperty(f)) {\r | |
1276 | add(f, html5_events[f]);\r | |
1277 | }\r | |
1278 | }\r | |
1279 | return true;\r | |
1280 | };\r | |
1281 | remove_html5_events = function() {\r | |
1282 | var f;\r | |
1283 | function remove(oEvt, oFn, bCapture) {\r | |
1284 | return (s._a ? s._a.removeEventListener(oEvt, oFn, bCapture||false) : null);\r | |
1285 | }\r | |
1286 | s._a._added_events = false;\r | |
1287 | for (f in html5_events) {\r | |
1288 | if (html5_events.hasOwnProperty(f)) {\r | |
1289 | remove(f, html5_events[f]);\r | |
1290 | }\r | |
1291 | }\r | |
1292 | };\r | |
1293 | this._onload = function(nSuccess) {\r | |
1294 | var fN,\r | |
1295 | loadOK = !!nSuccess || (!s.isHTML5 && fV === 8 && s.duration);\r | |
1296 | s.loaded = loadOK;\r | |
1297 | s.readyState = loadOK?3:2;\r | |
1298 | s._onbufferchange(0);\r | |
1299 | if (s._iO.onload) {\r | |
1300 | wrapCallback(s, function() {\r | |
1301 | s._iO.onload.apply(s, [loadOK]);\r | |
1302 | });\r | |
1303 | }\r | |
1304 | return true;\r | |
1305 | };\r | |
1306 | this._onbufferchange = function(nIsBuffering) {\r | |
1307 | if (s.playState === 0) {\r | |
1308 | return false;\r | |
1309 | }\r | |
1310 | if ((nIsBuffering && s.isBuffering) || (!nIsBuffering && !s.isBuffering)) {\r | |
1311 | return false;\r | |
1312 | }\r | |
1313 | s.isBuffering = (nIsBuffering === 1);\r | |
1314 | if (s._iO.onbufferchange) {\r | |
1315 | s._iO.onbufferchange.apply(s);\r | |
1316 | }\r | |
1317 | return true;\r | |
1318 | };\r | |
1319 | this._onsuspend = function() {\r | |
1320 | if (s._iO.onsuspend) {\r | |
1321 | s._iO.onsuspend.apply(s);\r | |
1322 | }\r | |
1323 | return true;\r | |
1324 | };\r | |
1325 | this._onfailure = function(msg, level, code) {\r | |
1326 | s.failures++;\r | |
1327 | if (s._iO.onfailure && s.failures === 1) {\r | |
1328 | s._iO.onfailure(s, msg, level, code);\r | |
1329 | } else {\r | |
1330 | }\r | |
1331 | };\r | |
1332 | this._onfinish = function() {\r | |
1333 | var io_onfinish = s._iO.onfinish;\r | |
1334 | s._onbufferchange(0);\r | |
1335 | s._resetOnPosition(0);\r | |
1336 | if (s.instanceCount) {\r | |
1337 | s.instanceCount--;\r | |
1338 | if (!s.instanceCount) {\r | |
1339 | detachOnPosition();\r | |
1340 | s.playState = 0;\r | |
1341 | s.paused = false;\r | |
1342 | s.instanceCount = 0;\r | |
1343 | s.instanceOptions = {};\r | |
1344 | s._iO = {};\r | |
1345 | stop_html5_timer();\r | |
1346 | if (s.isHTML5) {\r | |
1347 | s.position = 0;\r | |
1348 | }\r | |
1349 | }\r | |
1350 | if (!s.instanceCount || s._iO.multiShotEvents) {\r | |
1351 | if (io_onfinish) {\r | |
1352 | wrapCallback(s, function() {\r | |
1353 | io_onfinish.apply(s);\r | |
1354 | });\r | |
1355 | }\r | |
1356 | }\r | |
1357 | }\r | |
1358 | };\r | |
1359 | this._whileloading = function(nBytesLoaded, nBytesTotal, nDuration, nBufferLength) {\r | |
1360 | var instanceOptions = s._iO;\r | |
1361 | s.bytesLoaded = nBytesLoaded;\r | |
1362 | s.bytesTotal = nBytesTotal;\r | |
1363 | s.duration = Math.floor(nDuration);\r | |
1364 | s.bufferLength = nBufferLength;\r | |
1365 | if (!s.isHTML5 && !instanceOptions.isMovieStar) {\r | |
1366 | if (instanceOptions.duration) {\r | |
1367 | s.durationEstimate = (s.duration > instanceOptions.duration) ? s.duration : instanceOptions.duration;\r | |
1368 | } else {\r | |
1369 | s.durationEstimate = parseInt((s.bytesTotal / s.bytesLoaded) * s.duration, 10);\r | |
1370 | }\r | |
1371 | } else {\r | |
1372 | s.durationEstimate = s.duration;\r | |
1373 | }\r | |
1374 | if (!s.isHTML5) {\r | |
1375 | s.buffered = [{\r | |
1376 | 'start': 0,\r | |
1377 | 'end': s.duration\r | |
1378 | }];\r | |
1379 | }\r | |
1380 | if ((s.readyState !== 3 || s.isHTML5) && instanceOptions.whileloading) {\r | |
1381 | instanceOptions.whileloading.apply(s);\r | |
1382 | }\r | |
1383 | };\r | |
1384 | this._whileplaying = function(nPosition, oPeakData, oWaveformDataLeft, oWaveformDataRight, oEQData) {\r | |
1385 | var instanceOptions = s._iO,\r | |
1386 | eqLeft;\r | |
1387 | if (isNaN(nPosition) || nPosition === null) {\r | |
1388 | return false;\r | |
1389 | }\r | |
1390 | s.position = Math.max(0, nPosition);\r | |
1391 | s._processOnPosition();\r | |
1392 | if (!s.isHTML5 && fV > 8) {\r | |
1393 | if (instanceOptions.usePeakData && oPeakData !== _undefined && oPeakData) {\r | |
1394 | s.peakData = {\r | |
1395 | left: oPeakData.leftPeak,\r | |
1396 | right: oPeakData.rightPeak\r | |
1397 | };\r | |
1398 | }\r | |
1399 | if (instanceOptions.useWaveformData && oWaveformDataLeft !== _undefined && oWaveformDataLeft) {\r | |
1400 | s.waveformData = {\r | |
1401 | left: oWaveformDataLeft.split(','),\r | |
1402 | right: oWaveformDataRight.split(',')\r | |
1403 | };\r | |
1404 | }\r | |
1405 | if (instanceOptions.useEQData) {\r | |
1406 | if (oEQData !== _undefined && oEQData && oEQData.leftEQ) {\r | |
1407 | eqLeft = oEQData.leftEQ.split(',');\r | |
1408 | s.eqData = eqLeft;\r | |
1409 | s.eqData.left = eqLeft;\r | |
1410 | if (oEQData.rightEQ !== _undefined && oEQData.rightEQ) {\r | |
1411 | s.eqData.right = oEQData.rightEQ.split(',');\r | |
1412 | }\r | |
1413 | }\r | |
1414 | }\r | |
1415 | }\r | |
1416 | if (s.playState === 1) {\r | |
1417 | if (!s.isHTML5 && fV === 8 && !s.position && s.isBuffering) {\r | |
1418 | s._onbufferchange(0);\r | |
1419 | }\r | |
1420 | if (instanceOptions.whileplaying) {\r | |
1421 | instanceOptions.whileplaying.apply(s);\r | |
1422 | }\r | |
1423 | }\r | |
1424 | return true;\r | |
1425 | };\r | |
1426 | this._oncaptiondata = function(oData) {\r | |
1427 | s.captiondata = oData;\r | |
1428 | if (s._iO.oncaptiondata) {\r | |
1429 | s._iO.oncaptiondata.apply(s, [oData]);\r | |
1430 | }\r | |
1431 | };\r | |
1432 | this._onmetadata = function(oMDProps, oMDData) {\r | |
1433 | var oData = {}, i, j;\r | |
1434 | for (i = 0, j = oMDProps.length; i < j; i++) {\r | |
1435 | oData[oMDProps[i]] = oMDData[i];\r | |
1436 | }\r | |
1437 | s.metadata = oData;\r | |
1438 | if (s._iO.onmetadata) {\r | |
1439 | s._iO.onmetadata.apply(s);\r | |
1440 | }\r | |
1441 | };\r | |
1442 | this._onid3 = function(oID3Props, oID3Data) {\r | |
1443 | var oData = [], i, j;\r | |
1444 | for (i = 0, j = oID3Props.length; i < j; i++) {\r | |
1445 | oData[oID3Props[i]] = oID3Data[i];\r | |
1446 | }\r | |
1447 | s.id3 = mixin(s.id3, oData);\r | |
1448 | if (s._iO.onid3) {\r | |
1449 | s._iO.onid3.apply(s);\r | |
1450 | }\r | |
1451 | };\r | |
1452 | this._onconnect = function(bSuccess) {\r | |
1453 | bSuccess = (bSuccess === 1);\r | |
1454 | s.connected = bSuccess;\r | |
1455 | if (bSuccess) {\r | |
1456 | s.failures = 0;\r | |
1457 | if (idCheck(s.id)) {\r | |
1458 | if (s.getAutoPlay()) {\r | |
1459 | s.play(_undefined, s.getAutoPlay());\r | |
1460 | } else if (s._iO.autoLoad) {\r | |
1461 | s.load();\r | |
1462 | }\r | |
1463 | }\r | |
1464 | if (s._iO.onconnect) {\r | |
1465 | s._iO.onconnect.apply(s, [bSuccess]);\r | |
1466 | }\r | |
1467 | }\r | |
1468 | };\r | |
1469 | this._ondataerror = function(sError) {\r | |
1470 | if (s.playState > 0) {\r | |
1471 | if (s._iO.ondataerror) {\r | |
1472 | s._iO.ondataerror.apply(s);\r | |
1473 | }\r | |
1474 | }\r | |
1475 | };\r | |
1476 | };\r | |
1477 | getDocument = function() {\r | |
1478 | return (doc.body || doc._docElement || doc.getElementsByTagName('div')[0]);\r | |
1479 | };\r | |
1480 | id = function(sID) {\r | |
1481 | return doc.getElementById(sID);\r | |
1482 | };\r | |
1483 | mixin = function(oMain, oAdd) {\r | |
1484 | var o1 = (oMain || {}), o2, o;\r | |
1485 | o2 = (oAdd === _undefined ? sm2.defaultOptions : oAdd);\r | |
1486 | for (o in o2) {\r | |
1487 | if (o2.hasOwnProperty(o) && o1[o] === _undefined) {\r | |
1488 | if (typeof o2[o] !== 'object' || o2[o] === null) {\r | |
1489 | o1[o] = o2[o];\r | |
1490 | } else {\r | |
1491 | o1[o] = mixin(o1[o], o2[o]);\r | |
1492 | }\r | |
1493 | }\r | |
1494 | }\r | |
1495 | return o1;\r | |
1496 | };\r | |
1497 | wrapCallback = function(oSound, callback) {\r | |
1498 | if (!oSound.isHTML5 && fV === 8) {\r | |
1499 | window.setTimeout(callback, 0);\r | |
1500 | } else {\r | |
1501 | callback();\r | |
1502 | }\r | |
1503 | };\r | |
1504 | extraOptions = {\r | |
1505 | 'onready': 1,\r | |
1506 | 'ontimeout': 1,\r | |
1507 | 'defaultOptions': 1,\r | |
1508 | 'flash9Options': 1,\r | |
1509 | 'movieStarOptions': 1\r | |
1510 | };\r | |
1511 | assign = function(o, oParent) {\r | |
1512 | var i,\r | |
1513 | result = true,\r | |
1514 | hasParent = (oParent !== _undefined),\r | |
1515 | setupOptions = sm2.setupOptions,\r | |
1516 | bonusOptions = extraOptions;\r | |
1517 | for (i in o) {\r | |
1518 | if (o.hasOwnProperty(i)) {\r | |
1519 | if (typeof o[i] !== 'object' || o[i] === null || o[i] instanceof Array || o[i] instanceof RegExp) {\r | |
1520 | if (hasParent && bonusOptions[oParent] !== _undefined) {\r | |
1521 | sm2[oParent][i] = o[i];\r | |
1522 | } else if (setupOptions[i] !== _undefined) {\r | |
1523 | sm2.setupOptions[i] = o[i];\r | |
1524 | sm2[i] = o[i];\r | |
1525 | } else if (bonusOptions[i] === _undefined) {\r | |
1526 | complain(str((sm2[i] === _undefined ? 'setupUndef' : 'setupError'), i), 2);\r | |
1527 | result = false;\r | |
1528 | } else {\r | |
1529 | if (sm2[i] instanceof Function) {\r | |
1530 | sm2[i].apply(sm2, (o[i] instanceof Array? o[i] : [o[i]]));\r | |
1531 | } else {\r | |
1532 | sm2[i] = o[i];\r | |
1533 | }\r | |
1534 | }\r | |
1535 | } else {\r | |
1536 | if (bonusOptions[i] === _undefined) {\r | |
1537 | complain(str((sm2[i] === _undefined ? 'setupUndef' : 'setupError'), i), 2);\r | |
1538 | result = false;\r | |
1539 | } else {\r | |
1540 | return assign(o[i], i);\r | |
1541 | }\r | |
1542 | }\r | |
1543 | }\r | |
1544 | }\r | |
1545 | return result;\r | |
1546 | };\r | |
1547 | function preferFlashCheck(kind) {\r | |
1548 | return (sm2.preferFlash && hasFlash && !sm2.ignoreFlash && (sm2.flash[kind] !== _undefined && sm2.flash[kind]));\r | |
1549 | }\r | |
1550 | event = (function() {\r | |
1551 | var old = (window.attachEvent),\r | |
1552 | evt = {\r | |
1553 | add: (old?'attachEvent':'addEventListener'),\r | |
1554 | remove: (old?'detachEvent':'removeEventListener')\r | |
1555 | };\r | |
1556 | function getArgs(oArgs) {\r | |
1557 | var args = slice.call(oArgs),\r | |
1558 | len = args.length;\r | |
1559 | if (old) {\r | |
1560 | args[1] = 'on' + args[1];\r | |
1561 | if (len > 3) {\r | |
1562 | args.pop();\r | |
1563 | }\r | |
1564 | } else if (len === 3) {\r | |
1565 | args.push(false);\r | |
1566 | }\r | |
1567 | return args;\r | |
1568 | }\r | |
1569 | function apply(args, sType) {\r | |
1570 | var element = args.shift(),\r | |
1571 | method = [evt[sType]];\r | |
1572 | if (old) {\r | |
1573 | element[method](args[0], args[1]);\r | |
1574 | } else {\r | |
1575 | element[method].apply(element, args);\r | |
1576 | }\r | |
1577 | }\r | |
1578 | function add() {\r | |
1579 | apply(getArgs(arguments), 'add');\r | |
1580 | }\r | |
1581 | function remove() {\r | |
1582 | apply(getArgs(arguments), 'remove');\r | |
1583 | }\r | |
1584 | return {\r | |
1585 | 'add': add,\r | |
1586 | 'remove': remove\r | |
1587 | };\r | |
1588 | }());\r | |
1589 | function html5_event(oFn) {\r | |
1590 | return function(e) {\r | |
1591 | var s = this._s,\r | |
1592 | result;\r | |
1593 | if (!s || !s._a) {\r | |
1594 | result = null;\r | |
1595 | } else {\r | |
1596 | result = oFn.call(this, e);\r | |
1597 | }\r | |
1598 | return result;\r | |
1599 | };\r | |
1600 | }\r | |
1601 | html5_events = {\r | |
1602 | abort: html5_event(function() {\r | |
1603 | }),\r | |
1604 | canplay: html5_event(function() {\r | |
1605 | var s = this._s,\r | |
1606 | position1K;\r | |
1607 | if (s._html5_canplay) {\r | |
1608 | return true;\r | |
1609 | }\r | |
1610 | s._html5_canplay = true;\r | |
1611 | s._onbufferchange(0);\r | |
1612 | position1K = (s._iO.position !== _undefined && !isNaN(s._iO.position)?s._iO.position/1000:null);\r | |
1613 | if (s.position && this.currentTime !== position1K) {\r | |
1614 | try {\r | |
1615 | this.currentTime = position1K;\r | |
1616 | } catch(ee) {\r | |
1617 | }\r | |
1618 | }\r | |
1619 | if (s._iO._oncanplay) {\r | |
1620 | s._iO._oncanplay();\r | |
1621 | }\r | |
1622 | }),\r | |
1623 | canplaythrough: html5_event(function() {\r | |
1624 | var s = this._s;\r | |
1625 | if (!s.loaded) {\r | |
1626 | s._onbufferchange(0);\r | |
1627 | s._whileloading(s.bytesLoaded, s.bytesTotal, s._get_html5_duration());\r | |
1628 | s._onload(true);\r | |
1629 | }\r | |
1630 | }),\r | |
1631 | ended: html5_event(function() {\r | |
1632 | var s = this._s;\r | |
1633 | s._onfinish();\r | |
1634 | }),\r | |
1635 | error: html5_event(function() {\r | |
1636 | this._s._onload(false);\r | |
1637 | }),\r | |
1638 | loadeddata: html5_event(function() {\r | |
1639 | var s = this._s;\r | |
1640 | if (!s._loaded && !isSafari) {\r | |
1641 | s.duration = s._get_html5_duration();\r | |
1642 | }\r | |
1643 | }),\r | |
1644 | loadedmetadata: html5_event(function() {\r | |
1645 | }),\r | |
1646 | loadstart: html5_event(function() {\r | |
1647 | this._s._onbufferchange(1);\r | |
1648 | }),\r | |
1649 | play: html5_event(function() {\r | |
1650 | this._s._onbufferchange(0);\r | |
1651 | }),\r | |
1652 | playing: html5_event(function() {\r | |
1653 | this._s._onbufferchange(0);\r | |
1654 | }),\r | |
1655 | progress: html5_event(function(e) {\r | |
1656 | var s = this._s,\r | |
1657 | i, j, str, buffered = 0,\r | |
1658 | isProgress = (e.type === 'progress'),\r | |
1659 | ranges = e.target.buffered,\r | |
1660 | loaded = (e.loaded||0),\r | |
1661 | total = (e.total||1),\r | |
1662 | scale = 1000;\r | |
1663 | s.buffered = [];\r | |
1664 | if (ranges && ranges.length) {\r | |
1665 | for (i=0, j=ranges.length; i<j; i++) {\r | |
1666 | s.buffered.push({\r | |
1667 | 'start': ranges.start(i) * scale,\r | |
1668 | 'end': ranges.end(i) * scale\r | |
1669 | });\r | |
1670 | }\r | |
1671 | buffered = (ranges.end(0) - ranges.start(0)) * scale;\r | |
1672 | loaded = buffered/(e.target.duration*scale);\r | |
1673 | }\r | |
1674 | if (!isNaN(loaded)) {\r | |
1675 | s._onbufferchange(0);\r | |
1676 | s._whileloading(loaded, total, s._get_html5_duration());\r | |
1677 | if (loaded && total && loaded === total) {\r | |
1678 | html5_events.canplaythrough.call(this, e);\r | |
1679 | }\r | |
1680 | }\r | |
1681 | }),\r | |
1682 | ratechange: html5_event(function() {\r | |
1683 | }),\r | |
1684 | suspend: html5_event(function(e) {\r | |
1685 | var s = this._s;\r | |
1686 | html5_events.progress.call(this, e);\r | |
1687 | s._onsuspend();\r | |
1688 | }),\r | |
1689 | stalled: html5_event(function() {\r | |
1690 | }),\r | |
1691 | timeupdate: html5_event(function() {\r | |
1692 | this._s._onTimer();\r | |
1693 | }),\r | |
1694 | waiting: html5_event(function() {\r | |
1695 | var s = this._s;\r | |
1696 | s._onbufferchange(1);\r | |
1697 | })\r | |
1698 | };\r | |
1699 | html5OK = function(iO) {\r | |
1700 | var result;\r | |
1701 | if (iO.serverURL || (iO.type && preferFlashCheck(iO.type))) {\r | |
1702 | result = false;\r | |
1703 | } else {\r | |
1704 | result = ((iO.type ? html5CanPlay({type:iO.type}) : html5CanPlay({url:iO.url}) || sm2.html5Only));\r | |
1705 | }\r | |
1706 | return result;\r | |
1707 | };\r | |
1708 | html5Unload = function(oAudio, url) {\r | |
1709 | if (oAudio) {\r | |
1710 | oAudio.src = url;\r | |
1711 | oAudio._called_load = false;\r | |
1712 | }\r | |
1713 | if (useGlobalHTML5Audio) {\r | |
1714 | lastGlobalHTML5URL = null;\r | |
1715 | }\r | |
1716 | };\r | |
1717 | html5CanPlay = function(o) {\r | |
1718 | if (!sm2.useHTML5Audio || !sm2.hasHTML5) {\r | |
1719 | return false;\r | |
1720 | }\r | |
1721 | var url = (o.url || null),\r | |
1722 | mime = (o.type || null),\r | |
1723 | aF = sm2.audioFormats,\r | |
1724 | result,\r | |
1725 | offset,\r | |
1726 | fileExt,\r | |
1727 | item;\r | |
1728 | if (mime && sm2.html5[mime] !== _undefined) {\r | |
1729 | return (sm2.html5[mime] && !preferFlashCheck(mime));\r | |
1730 | }\r | |
1731 | if (!html5Ext) {\r | |
1732 | html5Ext = [];\r | |
1733 | for (item in aF) {\r | |
1734 | if (aF.hasOwnProperty(item)) {\r | |
1735 | html5Ext.push(item);\r | |
1736 | if (aF[item].related) {\r | |
1737 | html5Ext = html5Ext.concat(aF[item].related);\r | |
1738 | }\r | |
1739 | }\r | |
1740 | }\r | |
1741 | html5Ext = new RegExp('\\.('+html5Ext.join('|')+')(\\?.*)?$','i');\r | |
1742 | }\r | |
1743 | fileExt = (url ? url.toLowerCase().match(html5Ext) : null);\r | |
1744 | if (!fileExt || !fileExt.length) {\r | |
1745 | if (!mime) {\r | |
1746 | result = false;\r | |
1747 | } else {\r | |
1748 | offset = mime.indexOf(';');\r | |
1749 | fileExt = (offset !== -1?mime.substr(0,offset):mime).substr(6);\r | |
1750 | }\r | |
1751 | } else {\r | |
1752 | fileExt = fileExt[1];\r | |
1753 | }\r | |
1754 | if (fileExt && sm2.html5[fileExt] !== _undefined) {\r | |
1755 | result = (sm2.html5[fileExt] && !preferFlashCheck(fileExt));\r | |
1756 | } else {\r | |
1757 | mime = 'audio/'+fileExt;\r | |
1758 | result = sm2.html5.canPlayType({type:mime});\r | |
1759 | sm2.html5[fileExt] = result;\r | |
1760 | result = (result && sm2.html5[mime] && !preferFlashCheck(mime));\r | |
1761 | }\r | |
1762 | return result;\r | |
1763 | };\r | |
1764 | testHTML5 = function() {\r | |
1765 | if (!sm2.useHTML5Audio || !sm2.hasHTML5) {\r | |
1766 | return false;\r | |
1767 | }\r | |
1768 | var a = (Audio !== _undefined ? (isOpera && opera.version() < 10 ? new Audio(null) : new Audio()) : null),\r | |
1769 | item, lookup, support = {}, aF, i;\r | |
1770 | function cp(m) {\r | |
1771 | var canPlay, i, j,\r | |
1772 | result = false,\r | |
1773 | isOK = false;\r | |
1774 | if (!a || typeof a.canPlayType !== 'function') {\r | |
1775 | return result;\r | |
1776 | }\r | |
1777 | if (m instanceof Array) {\r | |
1778 | for (i=0, j=m.length; i<j; i++) {\r | |
1779 | if (sm2.html5[m[i]] || a.canPlayType(m[i]).match(sm2.html5Test)) {\r | |
1780 | isOK = true;\r | |
1781 | sm2.html5[m[i]] = true;\r | |
1782 | sm2.flash[m[i]] = !!(m[i].match(flashMIME));\r | |
1783 | }\r | |
1784 | }\r | |
1785 | result = isOK;\r | |
1786 | } else {\r | |
1787 | canPlay = (a && typeof a.canPlayType === 'function' ? a.canPlayType(m) : false);\r | |
1788 | result = !!(canPlay && (canPlay.match(sm2.html5Test)));\r | |
1789 | }\r | |
1790 | return result;\r | |
1791 | }\r | |
1792 | aF = sm2.audioFormats;\r | |
1793 | for (item in aF) {\r | |
1794 | if (aF.hasOwnProperty(item)) {\r | |
1795 | lookup = 'audio/' + item;\r | |
1796 | support[item] = cp(aF[item].type);\r | |
1797 | support[lookup] = support[item];\r | |
1798 | if (item.match(flashMIME)) {\r | |
1799 | sm2.flash[item] = true;\r | |
1800 | sm2.flash[lookup] = true;\r | |
1801 | } else {\r | |
1802 | sm2.flash[item] = false;\r | |
1803 | sm2.flash[lookup] = false;\r | |
1804 | }\r | |
1805 | if (aF[item] && aF[item].related) {\r | |
1806 | for (i=aF[item].related.length-1; i >= 0; i--) {\r | |
1807 | support['audio/'+aF[item].related[i]] = support[item];\r | |
1808 | sm2.html5[aF[item].related[i]] = support[item];\r | |
1809 | sm2.flash[aF[item].related[i]] = support[item];\r | |
1810 | }\r | |
1811 | }\r | |
1812 | }\r | |
1813 | }\r | |
1814 | support.canPlayType = (a?cp:null);\r | |
1815 | sm2.html5 = mixin(sm2.html5, support);\r | |
1816 | return true;\r | |
1817 | };\r | |
1818 | strings = {\r | |
1819 | };\r | |
1820 | str = function() {\r | |
1821 | };\r | |
1822 | loopFix = function(sOpt) {\r | |
1823 | if (fV === 8 && sOpt.loops > 1 && sOpt.stream) {\r | |
1824 | sOpt.stream = false;\r | |
1825 | }\r | |
1826 | return sOpt;\r | |
1827 | };\r | |
1828 | policyFix = function(sOpt, sPre) {\r | |
1829 | if (sOpt && !sOpt.usePolicyFile && (sOpt.onid3 || sOpt.usePeakData || sOpt.useWaveformData || sOpt.useEQData)) {\r | |
1830 | sOpt.usePolicyFile = true;\r | |
1831 | }\r | |
1832 | return sOpt;\r | |
1833 | };\r | |
1834 | complain = function(sMsg) {\r | |
1835 | };\r | |
1836 | doNothing = function() {\r | |
1837 | return false;\r | |
1838 | };\r | |
1839 | disableObject = function(o) {\r | |
1840 | var oProp;\r | |
1841 | for (oProp in o) {\r | |
1842 | if (o.hasOwnProperty(oProp) && typeof o[oProp] === 'function') {\r | |
1843 | o[oProp] = doNothing;\r | |
1844 | }\r | |
1845 | }\r | |
1846 | oProp = null;\r | |
1847 | };\r | |
1848 | failSafely = function(bNoDisable) {\r | |
1849 | if (bNoDisable === _undefined) {\r | |
1850 | bNoDisable = false;\r | |
1851 | }\r | |
1852 | if (disabled || bNoDisable) {\r | |
1853 | sm2.disable(bNoDisable);\r | |
1854 | }\r | |
1855 | };\r | |
1856 | normalizeMovieURL = function(smURL) {\r | |
1857 | var urlParams = null, url;\r | |
1858 | if (smURL) {\r | |
1859 | if (smURL.match(/\.swf(\?.*)?$/i)) {\r | |
1860 | urlParams = smURL.substr(smURL.toLowerCase().lastIndexOf('.swf?') + 4);\r | |
1861 | if (urlParams) {\r | |
1862 | return smURL;\r | |
1863 | }\r | |
1864 | } else if (smURL.lastIndexOf('/') !== smURL.length - 1) {\r | |
1865 | smURL += '/';\r | |
1866 | }\r | |
1867 | }\r | |
1868 | url = (smURL && smURL.lastIndexOf('/') !== - 1 ? smURL.substr(0, smURL.lastIndexOf('/') + 1) : './') + sm2.movieURL;\r | |
1869 | if (sm2.noSWFCache) {\r | |
1870 | url += ('?ts=' + new Date().getTime());\r | |
1871 | }\r | |
1872 | return url;\r | |
1873 | };\r | |
1874 | setVersionInfo = function() {\r | |
1875 | fV = parseInt(sm2.flashVersion, 10);\r | |
1876 | if (fV !== 8 && fV !== 9) {\r | |
1877 | sm2.flashVersion = fV = defaultFlashVersion;\r | |
1878 | }\r | |
1879 | var isDebug = (sm2.debugMode || sm2.debugFlash?'_debug.swf':'.swf');\r | |
1880 | if (sm2.useHTML5Audio && !sm2.html5Only && sm2.audioFormats.mp4.required && fV < 9) {\r | |
1881 | sm2.flashVersion = fV = 9;\r | |
1882 | }\r | |
1883 | sm2.version = sm2.versionNumber + (sm2.html5Only?' (HTML5-only mode)':(fV === 9?' (AS3/Flash 9)':' (AS2/Flash 8)'));\r | |
1884 | if (fV > 8) {\r | |
1885 | sm2.defaultOptions = mixin(sm2.defaultOptions, sm2.flash9Options);\r | |
1886 | sm2.features.buffering = true;\r | |
1887 | sm2.defaultOptions = mixin(sm2.defaultOptions, sm2.movieStarOptions);\r | |
1888 | sm2.filePatterns.flash9 = new RegExp('\\.(mp3|' + netStreamTypes.join('|') + ')(\\?.*)?$', 'i');\r | |
1889 | sm2.features.movieStar = true;\r | |
1890 | } else {\r | |
1891 | sm2.features.movieStar = false;\r | |
1892 | }\r | |
1893 | sm2.filePattern = sm2.filePatterns[(fV !== 8?'flash9':'flash8')];\r | |
1894 | sm2.movieURL = (fV === 8?'soundmanager2.swf':'soundmanager2_flash9.swf').replace('.swf', isDebug);\r | |
1895 | sm2.features.peakData = sm2.features.waveformData = sm2.features.eqData = (fV > 8);\r | |
1896 | };\r | |
1897 | setPolling = function(bPolling, bHighPerformance) {\r | |
1898 | if (!flash) {\r | |
1899 | return false;\r | |
1900 | }\r | |
1901 | flash._setPolling(bPolling, bHighPerformance);\r | |
1902 | };\r | |
1903 | initDebug = function() {\r | |
1904 | if (sm2.debugURLParam.test(wl)) {\r | |
1905 | sm2.debugMode = true;\r | |
1906 | }\r | |
1907 | };\r | |
1908 | idCheck = this.getSoundById;\r | |
1909 | getSWFCSS = function() {\r | |
1910 | var css = [];\r | |
1911 | if (sm2.debugMode) {\r | |
1912 | css.push(swfCSS.sm2Debug);\r | |
1913 | }\r | |
1914 | if (sm2.debugFlash) {\r | |
1915 | css.push(swfCSS.flashDebug);\r | |
1916 | }\r | |
1917 | if (sm2.useHighPerformance) {\r | |
1918 | css.push(swfCSS.highPerf);\r | |
1919 | }\r | |
1920 | return css.join(' ');\r | |
1921 | };\r | |
1922 | flashBlockHandler = function() {\r | |
1923 | var name = str('fbHandler'),\r | |
1924 | p = sm2.getMoviePercent(),\r | |
1925 | css = swfCSS,\r | |
1926 | error = {type:'FLASHBLOCK'};\r | |
1927 | if (sm2.html5Only) {\r | |
1928 | return false;\r | |
1929 | }\r | |
1930 | if (!sm2.ok()) {\r | |
1931 | if (needsFlash) {\r | |
1932 | sm2.oMC.className = getSWFCSS() + ' ' + css.swfDefault + ' ' + (p === null?css.swfTimedout:css.swfError);\r | |
1933 | }\r | |
1934 | sm2.didFlashBlock = true;\r | |
1935 | processOnEvents({type:'ontimeout', ignoreInit:true, error:error});\r | |
1936 | catchError(error);\r | |
1937 | } else {\r | |
1938 | if (sm2.oMC) {\r | |
1939 | sm2.oMC.className = [getSWFCSS(), css.swfDefault, css.swfLoaded + (sm2.didFlashBlock?' '+css.swfUnblocked:'')].join(' ');\r | |
1940 | }\r | |
1941 | }\r | |
1942 | };\r | |
1943 | addOnEvent = function(sType, oMethod, oScope) {\r | |
1944 | if (on_queue[sType] === _undefined) {\r | |
1945 | on_queue[sType] = [];\r | |
1946 | }\r | |
1947 | on_queue[sType].push({\r | |
1948 | 'method': oMethod,\r | |
1949 | 'scope': (oScope || null),\r | |
1950 | 'fired': false\r | |
1951 | });\r | |
1952 | };\r | |
1953 | processOnEvents = function(oOptions) {\r | |
1954 | if (!oOptions) {\r | |
1955 | oOptions = {\r | |
1956 | type: (sm2.ok() ? 'onready' : 'ontimeout')\r | |
1957 | };\r | |
1958 | }\r | |
1959 | if (!didInit && oOptions && !oOptions.ignoreInit) {\r | |
1960 | return false;\r | |
1961 | }\r | |
1962 | if (oOptions.type === 'ontimeout' && (sm2.ok() || (disabled && !oOptions.ignoreInit))) {\r | |
1963 | return false;\r | |
1964 | }\r | |
1965 | var status = {\r | |
1966 | success: (oOptions && oOptions.ignoreInit?sm2.ok():!disabled)\r | |
1967 | },\r | |
1968 | srcQueue = (oOptions && oOptions.type?on_queue[oOptions.type]||[]:[]),\r | |
1969 | queue = [], i, j,\r | |
1970 | args = [status],\r | |
1971 | canRetry = (needsFlash && !sm2.ok());\r | |
1972 | if (oOptions.error) {\r | |
1973 | args[0].error = oOptions.error;\r | |
1974 | }\r | |
1975 | for (i = 0, j = srcQueue.length; i < j; i++) {\r | |
1976 | if (srcQueue[i].fired !== true) {\r | |
1977 | queue.push(srcQueue[i]);\r | |
1978 | }\r | |
1979 | }\r | |
1980 | if (queue.length) {\r | |
1981 | for (i = 0, j = queue.length; i < j; i++) {\r | |
1982 | if (queue[i].scope) {\r | |
1983 | queue[i].method.apply(queue[i].scope, args);\r | |
1984 | } else {\r | |
1985 | queue[i].method.apply(this, args);\r | |
1986 | }\r | |
1987 | if (!canRetry) {\r | |
1988 | queue[i].fired = true;\r | |
1989 | }\r | |
1990 | }\r | |
1991 | }\r | |
1992 | return true;\r | |
1993 | };\r | |
1994 | initUserOnload = function() {\r | |
1995 | window.setTimeout(function() {\r | |
1996 | if (sm2.useFlashBlock) {\r | |
1997 | flashBlockHandler();\r | |
1998 | }\r | |
1999 | processOnEvents();\r | |
2000 | if (typeof sm2.onload === 'function') {\r | |
2001 | sm2.onload.apply(window);\r | |
2002 | }\r | |
2003 | if (sm2.waitForWindowLoad) {\r | |
2004 | event.add(window, 'load', initUserOnload);\r | |
2005 | }\r | |
2006 | },1);\r | |
2007 | };\r | |
2008 | detectFlash = function() {\r | |
2009 | if (hasFlash !== _undefined) {\r | |
2010 | return hasFlash;\r | |
2011 | }\r | |
2012 | var hasPlugin = false, n = navigator, nP = n.plugins, obj, type, types, AX = window.ActiveXObject;\r | |
2013 | if (nP && nP.length) {\r | |
2014 | type = 'application/x-shockwave-flash';\r | |
2015 | types = n.mimeTypes;\r | |
2016 | if (types && types[type] && types[type].enabledPlugin && types[type].enabledPlugin.description) {\r | |
2017 | hasPlugin = true;\r | |
2018 | }\r | |
2019 | } else if (AX !== _undefined && !ua.match(/MSAppHost/i)) {\r | |
2020 | try {\r | |
2021 | obj = new AX('ShockwaveFlash.ShockwaveFlash');\r | |
2022 | } catch(e) {\r | |
2023 | }\r | |
2024 | hasPlugin = (!!obj);\r | |
2025 | obj = null;\r | |
2026 | }\r | |
2027 | hasFlash = hasPlugin;\r | |
2028 | return hasPlugin;\r | |
2029 | };\r | |
2030 | featureCheck = function() {\r | |
2031 | var needsFlash,\r | |
2032 | item,\r | |
2033 | result = true,\r | |
2034 | formats = sm2.audioFormats,\r | |
2035 | isSpecial = (is_iDevice && !!(ua.match(/os (1|2|3_0|3_1)/i)));\r | |
2036 | if (isSpecial) {\r | |
2037 | sm2.hasHTML5 = false;\r | |
2038 | sm2.html5Only = true;\r | |
2039 | if (sm2.oMC) {\r | |
2040 | sm2.oMC.style.display = 'none';\r | |
2041 | }\r | |
2042 | result = false;\r | |
2043 | } else {\r | |
2044 | if (sm2.useHTML5Audio) {\r | |
2045 | if (!sm2.html5 || !sm2.html5.canPlayType) {\r | |
2046 | sm2.hasHTML5 = false;\r | |
2047 | }\r | |
2048 | }\r | |
2049 | }\r | |
2050 | if (sm2.useHTML5Audio && sm2.hasHTML5) {\r | |
2051 | for (item in formats) {\r | |
2052 | if (formats.hasOwnProperty(item)) {\r | |
2053 | if ((formats[item].required && !sm2.html5.canPlayType(formats[item].type)) || (sm2.preferFlash && (sm2.flash[item] || sm2.flash[formats[item].type]))) {\r | |
2054 | needsFlash = true;\r | |
2055 | }\r | |
2056 | }\r | |
2057 | }\r | |
2058 | }\r | |
2059 | if (sm2.ignoreFlash) {\r | |
2060 | needsFlash = false;\r | |
2061 | }\r | |
2062 | sm2.html5Only = (sm2.hasHTML5 && sm2.useHTML5Audio && !needsFlash);\r | |
2063 | return (!sm2.html5Only);\r | |
2064 | };\r | |
2065 | parseURL = function(url) {\r | |
2066 | var i, j, urlResult = 0, result;\r | |
2067 | if (url instanceof Array) {\r | |
2068 | for (i=0, j=url.length; i<j; i++) {\r | |
2069 | if (url[i] instanceof Object) {\r | |
2070 | if (sm2.canPlayMIME(url[i].type)) {\r | |
2071 | urlResult = i;\r | |
2072 | break;\r | |
2073 | }\r | |
2074 | } else if (sm2.canPlayURL(url[i])) {\r | |
2075 | urlResult = i;\r | |
2076 | break;\r | |
2077 | }\r | |
2078 | }\r | |
2079 | if (url[urlResult].url) {\r | |
2080 | url[urlResult] = url[urlResult].url;\r | |
2081 | }\r | |
2082 | result = url[urlResult];\r | |
2083 | } else {\r | |
2084 | result = url;\r | |
2085 | }\r | |
2086 | return result;\r | |
2087 | };\r | |
2088 | startTimer = function(oSound) {\r | |
2089 | if (!oSound._hasTimer) {\r | |
2090 | oSound._hasTimer = true;\r | |
2091 | if (!mobileHTML5 && sm2.html5PollingInterval) {\r | |
2092 | if (h5IntervalTimer === null && h5TimerCount === 0) {\r | |
2093 | h5IntervalTimer = setInterval(timerExecute, sm2.html5PollingInterval);\r | |
2094 | }\r | |
2095 | h5TimerCount++;\r | |
2096 | }\r | |
2097 | }\r | |
2098 | };\r | |
2099 | stopTimer = function(oSound) {\r | |
2100 | if (oSound._hasTimer) {\r | |
2101 | oSound._hasTimer = false;\r | |
2102 | if (!mobileHTML5 && sm2.html5PollingInterval) {\r | |
2103 | h5TimerCount--;\r | |
2104 | }\r | |
2105 | }\r | |
2106 | };\r | |
2107 | timerExecute = function() {\r | |
2108 | var i;\r | |
2109 | if (h5IntervalTimer !== null && !h5TimerCount) {\r | |
2110 | clearInterval(h5IntervalTimer);\r | |
2111 | h5IntervalTimer = null;\r | |
2112 | return false;\r | |
2113 | }\r | |
2114 | for (i = sm2.soundIDs.length-1; i >= 0; i--) {\r | |
2115 | if (sm2.sounds[sm2.soundIDs[i]].isHTML5 && sm2.sounds[sm2.soundIDs[i]]._hasTimer) {\r | |
2116 | sm2.sounds[sm2.soundIDs[i]]._onTimer();\r | |
2117 | }\r | |
2118 | }\r | |
2119 | };\r | |
2120 | catchError = function(options) {\r | |
2121 | options = (options !== _undefined ? options : {});\r | |
2122 | if (typeof sm2.onerror === 'function') {\r | |
2123 | sm2.onerror.apply(window, [{type:(options.type !== _undefined ? options.type : null)}]);\r | |
2124 | }\r | |
2125 | if (options.fatal !== _undefined && options.fatal) {\r | |
2126 | sm2.disable();\r | |
2127 | }\r | |
2128 | };\r | |
2129 | badSafariFix = function() {\r | |
2130 | if (!isBadSafari || !detectFlash()) {\r | |
2131 | return false;\r | |
2132 | }\r | |
2133 | var aF = sm2.audioFormats, i, item;\r | |
2134 | for (item in aF) {\r | |
2135 | if (aF.hasOwnProperty(item)) {\r | |
2136 | if (item === 'mp3' || item === 'mp4') {\r | |
2137 | sm2.html5[item] = false;\r | |
2138 | if (aF[item] && aF[item].related) {\r | |
2139 | for (i = aF[item].related.length-1; i >= 0; i--) {\r | |
2140 | sm2.html5[aF[item].related[i]] = false;\r | |
2141 | }\r | |
2142 | }\r | |
2143 | }\r | |
2144 | }\r | |
2145 | }\r | |
2146 | };\r | |
2147 | this._setSandboxType = function(sandboxType) {\r | |
2148 | };\r | |
2149 | this._externalInterfaceOK = function(flashDate, swfVersion) {\r | |
2150 | if (sm2.swfLoaded) {\r | |
2151 | return false;\r | |
2152 | }\r | |
2153 | var e;\r | |
2154 | sm2.swfLoaded = true;\r | |
2155 | tryInitOnFocus = false;\r | |
2156 | if (isBadSafari) {\r | |
2157 | badSafariFix();\r | |
2158 | }\r | |
2159 | setTimeout(init, isIE ? 100 : 1);\r | |
2160 | };\r | |
2161 | createMovie = function(smID, smURL) {\r | |
2162 | if (didAppend && appendSuccess) {\r | |
2163 | return false;\r | |
2164 | }\r | |
2165 | function initMsg() {\r | |
2166 | }\r | |
2167 | if (sm2.html5Only) {\r | |
2168 | setVersionInfo();\r | |
2169 | initMsg();\r | |
2170 | sm2.oMC = id(sm2.movieID);\r | |
2171 | init();\r | |
2172 | didAppend = true;\r | |
2173 | appendSuccess = true;\r | |
2174 | return false;\r | |
2175 | }\r | |
2176 | var remoteURL = (smURL || sm2.url),\r | |
2177 | localURL = (sm2.altURL || remoteURL),\r | |
2178 | swfTitle = 'JS/Flash audio component (SoundManager 2)',\r | |
2179 | oTarget = getDocument(),\r | |
2180 | extraClass = getSWFCSS(),\r | |
2181 | isRTL = null,\r | |
2182 | html = doc.getElementsByTagName('html')[0],\r | |
2183 | oEmbed, oMovie, tmp, movieHTML, oEl, s, x, sClass;\r | |
2184 | isRTL = (html && html.dir && html.dir.match(/rtl/i));\r | |
2185 | smID = (smID === _undefined?sm2.id:smID);\r | |
2186 | function param(name, value) {\r | |
2187 | return '<param name="'+name+'" value="'+value+'" />';\r | |
2188 | }\r | |
2189 | setVersionInfo();\r | |
2190 | sm2.url = normalizeMovieURL(overHTTP?remoteURL:localURL);\r | |
2191 | smURL = sm2.url;\r | |
2192 | sm2.wmode = (!sm2.wmode && sm2.useHighPerformance ? 'transparent' : sm2.wmode);\r | |
2193 | if (sm2.wmode !== null && (ua.match(/msie 8/i) || (!isIE && !sm2.useHighPerformance)) && navigator.platform.match(/win32|win64/i)) {\r | |
2194 | messages.push(strings.spcWmode);\r | |
2195 | sm2.wmode = null;\r | |
2196 | }\r | |
2197 | oEmbed = {\r | |
2198 | 'name': smID,\r | |
2199 | 'id': smID,\r | |
2200 | 'src': smURL,\r | |
2201 | 'quality': 'high',\r | |
2202 | 'allowScriptAccess': sm2.allowScriptAccess,\r | |
2203 | 'bgcolor': sm2.bgColor,\r | |
2204 | 'pluginspage': http+'www.macromedia.com/go/getflashplayer',\r | |
2205 | 'title': swfTitle,\r | |
2206 | 'type': 'application/x-shockwave-flash',\r | |
2207 | 'wmode': sm2.wmode,\r | |
2208 | 'hasPriority': 'true'\r | |
2209 | };\r | |
2210 | if (sm2.debugFlash) {\r | |
2211 | oEmbed.FlashVars = 'debug=1';\r | |
2212 | }\r | |
2213 | if (!sm2.wmode) {\r | |
2214 | delete oEmbed.wmode;\r | |
2215 | }\r | |
2216 | if (isIE) {\r | |
2217 | oMovie = doc.createElement('div');\r | |
2218 | movieHTML = [\r | |
2219 | '<object id="' + smID + '" data="' + smURL + '" type="' + oEmbed.type + '" title="' + oEmbed.title +'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="' + http+'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0">',\r | |
2220 | param('movie', smURL),\r | |
2221 | param('AllowScriptAccess', sm2.allowScriptAccess),\r | |
2222 | param('quality', oEmbed.quality),\r | |
2223 | (sm2.wmode? param('wmode', sm2.wmode): ''),\r | |
2224 | param('bgcolor', sm2.bgColor),\r | |
2225 | param('hasPriority', 'true'),\r | |
2226 | (sm2.debugFlash ? param('FlashVars', oEmbed.FlashVars) : ''),\r | |
2227 | '</object>'\r | |
2228 | ].join('');\r | |
2229 | } else {\r | |
2230 | oMovie = doc.createElement('embed');\r | |
2231 | for (tmp in oEmbed) {\r | |
2232 | if (oEmbed.hasOwnProperty(tmp)) {\r | |
2233 | oMovie.setAttribute(tmp, oEmbed[tmp]);\r | |
2234 | }\r | |
2235 | }\r | |
2236 | }\r | |
2237 | initDebug();\r | |
2238 | extraClass = getSWFCSS();\r | |
2239 | oTarget = getDocument();\r | |
2240 | if (oTarget) {\r | |
2241 | sm2.oMC = (id(sm2.movieID) || doc.createElement('div'));\r | |
2242 | if (!sm2.oMC.id) {\r | |
2243 | sm2.oMC.id = sm2.movieID;\r | |
2244 | sm2.oMC.className = swfCSS.swfDefault + ' ' + extraClass;\r | |
2245 | s = null;\r | |
2246 | oEl = null;\r | |
2247 | if (!sm2.useFlashBlock) {\r | |
2248 | if (sm2.useHighPerformance) {\r | |
2249 | s = {\r | |
2250 | 'position': 'fixed',\r | |
2251 | 'width': '8px',\r | |
2252 | 'height': '8px',\r | |
2253 | 'bottom': '0px',\r | |
2254 | 'left': '0px',\r | |
2255 | 'overflow': 'hidden'\r | |
2256 | };\r | |
2257 | } else {\r | |
2258 | s = {\r | |
2259 | 'position': 'absolute',\r | |
2260 | 'width': '6px',\r | |
2261 | 'height': '6px',\r | |
2262 | 'top': '-9999px',\r | |
2263 | 'left': '-9999px'\r | |
2264 | };\r | |
2265 | if (isRTL) {\r | |
2266 | s.left = Math.abs(parseInt(s.left,10))+'px';\r | |
2267 | }\r | |
2268 | }\r | |
2269 | }\r | |
2270 | if (isWebkit) {\r | |
2271 | sm2.oMC.style.zIndex = 10000;\r | |
2272 | }\r | |
2273 | if (!sm2.debugFlash) {\r | |
2274 | for (x in s) {\r | |
2275 | if (s.hasOwnProperty(x)) {\r | |
2276 | sm2.oMC.style[x] = s[x];\r | |
2277 | }\r | |
2278 | }\r | |
2279 | }\r | |
2280 | try {\r | |
2281 | if (!isIE) {\r | |
2282 | sm2.oMC.appendChild(oMovie);\r | |
2283 | }\r | |
2284 | oTarget.appendChild(sm2.oMC);\r | |
2285 | if (isIE) {\r | |
2286 | oEl = sm2.oMC.appendChild(doc.createElement('div'));\r | |
2287 | oEl.className = swfCSS.swfBox;\r | |
2288 | oEl.innerHTML = movieHTML;\r | |
2289 | }\r | |
2290 | appendSuccess = true;\r | |
2291 | } catch(e) {\r | |
2292 | throw new Error(str('domError')+' \n'+e.toString());\r | |
2293 | }\r | |
2294 | } else {\r | |
2295 | sClass = sm2.oMC.className;\r | |
2296 | sm2.oMC.className = (sClass?sClass+' ':swfCSS.swfDefault) + (extraClass?' '+extraClass:'');\r | |
2297 | sm2.oMC.appendChild(oMovie);\r | |
2298 | if (isIE) {\r | |
2299 | oEl = sm2.oMC.appendChild(doc.createElement('div'));\r | |
2300 | oEl.className = swfCSS.swfBox;\r | |
2301 | oEl.innerHTML = movieHTML;\r | |
2302 | }\r | |
2303 | appendSuccess = true;\r | |
2304 | }\r | |
2305 | }\r | |
2306 | didAppend = true;\r | |
2307 | initMsg();\r | |
2308 | return true;\r | |
2309 | };\r | |
2310 | initMovie = function() {\r | |
2311 | if (sm2.html5Only) {\r | |
2312 | createMovie();\r | |
2313 | return false;\r | |
2314 | }\r | |
2315 | if (flash) {\r | |
2316 | return false;\r | |
2317 | }\r | |
2318 | if (!sm2.url) {\r | |
2319 | return false;\r | |
2320 | }\r | |
2321 | flash = sm2.getMovie(sm2.id);\r | |
2322 | if (!flash) {\r | |
2323 | if (!oRemoved) {\r | |
2324 | createMovie(sm2.id, sm2.url);\r | |
2325 | } else {\r | |
2326 | if (!isIE) {\r | |
2327 | sm2.oMC.appendChild(oRemoved);\r | |
2328 | } else {\r | |
2329 | sm2.oMC.innerHTML = oRemovedHTML;\r | |
2330 | }\r | |
2331 | oRemoved = null;\r | |
2332 | didAppend = true;\r | |
2333 | }\r | |
2334 | flash = sm2.getMovie(sm2.id);\r | |
2335 | }\r | |
2336 | if (typeof sm2.oninitmovie === 'function') {\r | |
2337 | setTimeout(sm2.oninitmovie, 1);\r | |
2338 | }\r | |
2339 | return true;\r | |
2340 | };\r | |
2341 | delayWaitForEI = function() {\r | |
2342 | setTimeout(waitForEI, 1000);\r | |
2343 | };\r | |
2344 | waitForEI = function() {\r | |
2345 | var p,\r | |
2346 | loadIncomplete = false;\r | |
2347 | if (!sm2.url) {\r | |
2348 | return false;\r | |
2349 | }\r | |
2350 | if (waitingForEI) {\r | |
2351 | return false;\r | |
2352 | }\r | |
2353 | waitingForEI = true;\r | |
2354 | event.remove(window, 'load', delayWaitForEI);\r | |
2355 | if (tryInitOnFocus && !isFocused) {\r | |
2356 | return false;\r | |
2357 | }\r | |
2358 | if (!didInit) {\r | |
2359 | p = sm2.getMoviePercent();\r | |
2360 | if (p > 0 && p < 100) {\r | |
2361 | loadIncomplete = true;\r | |
2362 | }\r | |
2363 | }\r | |
2364 | setTimeout(function() {\r | |
2365 | p = sm2.getMoviePercent();\r | |
2366 | if (loadIncomplete) {\r | |
2367 | waitingForEI = false;\r | |
2368 | window.setTimeout(delayWaitForEI, 1);\r | |
2369 | return false;\r | |
2370 | }\r | |
2371 | if (!didInit && okToDisable) {\r | |
2372 | if (p === null) {\r | |
2373 | if (sm2.useFlashBlock || sm2.flashLoadTimeout === 0) {\r | |
2374 | if (sm2.useFlashBlock) {\r | |
2375 | flashBlockHandler();\r | |
2376 | }\r | |
2377 | } else {\r | |
2378 | processOnEvents({type:'ontimeout', ignoreInit: true});\r | |
2379 | }\r | |
2380 | } else {\r | |
2381 | if (sm2.flashLoadTimeout === 0) {\r | |
2382 | } else {\r | |
2383 | failSafely(true);\r | |
2384 | }\r | |
2385 | }\r | |
2386 | }\r | |
2387 | }, sm2.flashLoadTimeout);\r | |
2388 | };\r | |
2389 | handleFocus = function() {\r | |
2390 | function cleanup() {\r | |
2391 | event.remove(window, 'focus', handleFocus);\r | |
2392 | }\r | |
2393 | if (isFocused || !tryInitOnFocus) {\r | |
2394 | cleanup();\r | |
2395 | return true;\r | |
2396 | }\r | |
2397 | okToDisable = true;\r | |
2398 | isFocused = true;\r | |
2399 | waitingForEI = false;\r | |
2400 | delayWaitForEI();\r | |
2401 | cleanup();\r | |
2402 | return true;\r | |
2403 | };\r | |
2404 | flushMessages = function() {\r | |
2405 | };\r | |
2406 | showSupport = function() {\r | |
2407 | };\r | |
2408 | initComplete = function(bNoDisable) {\r | |
2409 | if (didInit) {\r | |
2410 | return false;\r | |
2411 | }\r | |
2412 | if (sm2.html5Only) {\r | |
2413 | didInit = true;\r | |
2414 | initUserOnload();\r | |
2415 | return true;\r | |
2416 | }\r | |
2417 | var wasTimeout = (sm2.useFlashBlock && sm2.flashLoadTimeout && !sm2.getMoviePercent()),\r | |
2418 | result = true,\r | |
2419 | error;\r | |
2420 | if (!wasTimeout) {\r | |
2421 | didInit = true;\r | |
2422 | if (disabled) {\r | |
2423 | error = {type: (!hasFlash && needsFlash ? 'NO_FLASH' : 'INIT_TIMEOUT')};\r | |
2424 | }\r | |
2425 | }\r | |
2426 | if (disabled || bNoDisable) {\r | |
2427 | if (sm2.useFlashBlock && sm2.oMC) {\r | |
2428 | sm2.oMC.className = getSWFCSS() + ' ' + (sm2.getMoviePercent() === null?swfCSS.swfTimedout:swfCSS.swfError);\r | |
2429 | }\r | |
2430 | processOnEvents({type:'ontimeout', error:error, ignoreInit: true});\r | |
2431 | catchError(error);\r | |
2432 | result = false;\r | |
2433 | } else {\r | |
2434 | }\r | |
2435 | if (!disabled) {\r | |
2436 | if (sm2.waitForWindowLoad && !windowLoaded) {\r | |
2437 | event.add(window, 'load', initUserOnload);\r | |
2438 | } else {\r | |
2439 | initUserOnload();\r | |
2440 | }\r | |
2441 | }\r | |
2442 | return result;\r | |
2443 | };\r | |
2444 | setProperties = function() {\r | |
2445 | var i,\r | |
2446 | o = sm2.setupOptions;\r | |
2447 | for (i in o) {\r | |
2448 | if (o.hasOwnProperty(i)) {\r | |
2449 | if (sm2[i] === _undefined) {\r | |
2450 | sm2[i] = o[i];\r | |
2451 | } else if (sm2[i] !== o[i]) {\r | |
2452 | sm2.setupOptions[i] = sm2[i];\r | |
2453 | }\r | |
2454 | }\r | |
2455 | }\r | |
2456 | };\r | |
2457 | init = function() {\r | |
2458 | if (didInit) {\r | |
2459 | return false;\r | |
2460 | }\r | |
2461 | function cleanup() {\r | |
2462 | event.remove(window, 'load', sm2.beginDelayedInit);\r | |
2463 | }\r | |
2464 | if (sm2.html5Only) {\r | |
2465 | if (!didInit) {\r | |
2466 | cleanup();\r | |
2467 | sm2.enabled = true;\r | |
2468 | initComplete();\r | |
2469 | }\r | |
2470 | return true;\r | |
2471 | }\r | |
2472 | initMovie();\r | |
2473 | try {\r | |
2474 | flash._externalInterfaceTest(false);\r | |
2475 | setPolling(true, (sm2.flashPollingInterval || (sm2.useHighPerformance ? 10 : 50)));\r | |
2476 | if (!sm2.debugMode) {\r | |
2477 | flash._disableDebug();\r | |
2478 | }\r | |
2479 | sm2.enabled = true;\r | |
2480 | if (!sm2.html5Only) {\r | |
2481 | event.add(window, 'unload', doNothing);\r | |
2482 | }\r | |
2483 | } catch(e) {\r | |
2484 | catchError({type:'JS_TO_FLASH_EXCEPTION', fatal:true});\r | |
2485 | failSafely(true);\r | |
2486 | initComplete();\r | |
2487 | return false;\r | |
2488 | }\r | |
2489 | initComplete();\r | |
2490 | cleanup();\r | |
2491 | return true;\r | |
2492 | };\r | |
2493 | domContentLoaded = function() {\r | |
2494 | if (didDCLoaded) {\r | |
2495 | return false;\r | |
2496 | }\r | |
2497 | didDCLoaded = true;\r | |
2498 | setProperties();\r | |
2499 | initDebug();\r | |
2500 | if (!hasFlash && sm2.hasHTML5) {\r | |
2501 | sm2.setup({\r | |
2502 | 'useHTML5Audio': true,\r | |
2503 | 'preferFlash': false\r | |
2504 | });\r | |
2505 | }\r | |
2506 | testHTML5();\r | |
2507 | sm2.html5.usingFlash = featureCheck();\r | |
2508 | needsFlash = sm2.html5.usingFlash;\r | |
2509 | if (!hasFlash && needsFlash) {\r | |
2510 | messages.push(strings.needFlash);\r | |
2511 | sm2.setup({\r | |
2512 | 'flashLoadTimeout': 1\r | |
2513 | });\r | |
2514 | }\r | |
2515 | if (doc.removeEventListener) {\r | |
2516 | doc.removeEventListener('DOMContentLoaded', domContentLoaded, false);\r | |
2517 | }\r | |
2518 | initMovie();\r | |
2519 | return true;\r | |
2520 | };\r | |
2521 | domContentLoadedIE = function() {\r | |
2522 | if (doc.readyState === 'complete') {\r | |
2523 | domContentLoaded();\r | |
2524 | doc.detachEvent('onreadystatechange', domContentLoadedIE);\r | |
2525 | }\r | |
2526 | return true;\r | |
2527 | };\r | |
2528 | winOnLoad = function() {\r | |
2529 | windowLoaded = true;\r | |
2530 | event.remove(window, 'load', winOnLoad);\r | |
2531 | };\r | |
2532 | preInit = function() {\r | |
2533 | if (mobileHTML5) {\r | |
2534 | sm2.setupOptions.useHTML5Audio = true;\r | |
2535 | sm2.setupOptions.preferFlash = false;\r | |
2536 | if (is_iDevice || (isAndroid && !ua.match(/android\s2\.3/i))) {\r | |
2537 | if (is_iDevice) {\r | |
2538 | sm2.ignoreFlash = true;\r | |
2539 | }\r | |
2540 | useGlobalHTML5Audio = true;\r | |
2541 | }\r | |
2542 | }\r | |
2543 | };\r | |
2544 | preInit();\r | |
2545 | detectFlash();\r | |
2546 | event.add(window, 'focus', handleFocus);\r | |
2547 | event.add(window, 'load', delayWaitForEI);\r | |
2548 | event.add(window, 'load', winOnLoad);\r | |
2549 | if (doc.addEventListener) {\r | |
2550 | doc.addEventListener('DOMContentLoaded', domContentLoaded, false);\r | |
2551 | } else if (doc.attachEvent) {\r | |
2552 | doc.attachEvent('onreadystatechange', domContentLoadedIE);\r | |
2553 | } else {\r | |
2554 | catchError({type:'NO_DOM2_EVENTS', fatal:true});\r | |
2555 | }\r | |
2556 | }\r | |
2557 | // SM2_DEFER details: http://www.schillmania.com/projects/soundmanager2/doc/getstarted/#lazy-loading\r | |
2558 | if (window.SM2_DEFER === undefined || !SM2_DEFER) {\r | |
2559 | soundManager = new SoundManager();\r | |
2560 | }\r | |
2561 | window.SoundManager = SoundManager;\r | |
2562 | window.soundManager = soundManager;\r | |
2563 | }(window)); |