Merge pull request #403 from M2Ys4U/nick_trunc_fix
[KiwiIRC.git] / client / assets / libs / soundmanager2 / soundmanager2-nodebug.js
CommitLineData
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
19var soundManager = null;\r
20function 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
2558if (window.SM2_DEFER === undefined || !SM2_DEFER) {\r
2559 soundManager = new SoundManager();\r
2560}\r
2561window.SoundManager = SoundManager;\r
2562window.soundManager = soundManager;\r
2563}(window));