Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

resolved conflits using master files

  • Loading branch information...
commit 86ef289eb2b626c1596d24500e412ad931301f39 2 parents e7b8468 + 7224604
@crimsonred crimsonred authored
Showing with 34,430 additions and 23 deletions.
  1. +17 −23 app-showcase/ascii-player/ascii-player.html
  2. +420 −0 app-showcase/dev-console-3.4/dev-console.html
  3. +6 −0 flash/3.4/.gitignore
  4. +6 −0 flash/3.4/html-template/history/history.css
  5. +678 −0 flash/3.4/html-template/history/history.js
  6. +29 −0 flash/3.4/html-template/history/historyFrame.html
  7. +108 −0 flash/3.4/html-template/index.template.html
  8. BIN  flash/3.4/html-template/playerProductInstall.swf
  9. +777 −0 flash/3.4/html-template/swfobject.js
  10. BIN  flash/3.4/lib/PerfomanceTestView1.fla
  11. BIN  flash/3.4/lib/PerfomanceTestView1.swc
  12. BIN  flash/3.4/lib/Untitled-1.fla
  13. BIN  flash/3.4/lib/Untitled-1.swf
  14. BIN  flash/3.4/lib/flexunit-4.1.0-8-flex_4.1.0.16076.swc
  15. BIN  flash/3.4/lib/flexunit-cilistener-4.1.0-8-4.1.0.16076.swc
  16. BIN  flash/3.4/lib/flexunit-uilistener-4.1.0-8-4.1.0.16076.swc
  17. BIN  flash/3.4/lib/greensock.swc
  18. BIN  flash/3.4/lib/lib.fla
  19. BIN  flash/3.4/lib/lib.swc
  20. BIN  flash/3.4/lib/mokolate/mockolate-0.12.4-as3.swc
  21. +36 −0 flash/3.4/obj/MessageBoxConfig.old
  22. +36 −0 flash/3.4/obj/MessageBoxConfig.xml
  23. +301 −0 flash/3.4/src/PubNubAIRExample.mxml
  24. +91 −0 flash/3.4/src/PubNubAS3Example.as
  25. +393 −0 flash/3.4/src/PubNubFlexExample.mxml
  26. +38 −0 flash/3.4/src/baseTestSuite/BaseTestSuite.mxml
  27. +41 −0 flash/3.4/src/baseTestSuite/tests/DetailedHistoryTest.as
  28. +52 −0 flash/3.4/src/baseTestSuite/tests/InitTest.as
  29. +33 −0 flash/3.4/src/baseTestSuite/tests/PublishTest.as
  30. +33 −0 flash/3.4/src/baseTestSuite/tests/SubscribeTest.as
  31. +34 −0 flash/3.4/src/baseTestSuite/tests/UnsubTest.as
  32. +98 −0 flash/3.4/src/com/adobe/air/logging/FileTarget.as
  33. +127 −0 flash/3.4/src/com/adobe/crypto/HMAC.as
  34. +281 −0 flash/3.4/src/com/adobe/crypto/MD5.as
  35. +402 −0 flash/3.4/src/com/adobe/crypto/MD5Stream.as
  36. +271 −0 flash/3.4/src/com/adobe/crypto/SHA1.as
  37. +257 −0 flash/3.4/src/com/adobe/crypto/SHA224.as
  38. +261 −0 flash/3.4/src/com/adobe/crypto/SHA256.as
  39. +114 −0 flash/3.4/src/com/adobe/crypto/WSSEUsernameToken.as
  40. +63 −0 flash/3.4/src/com/adobe/errors/IllegalStateError.as
  41. +47 −0 flash/3.4/src/com/adobe/fileformats/vcard/Address.as
  42. +39 −0 flash/3.4/src/com/adobe/fileformats/vcard/Email.as
  43. +39 −0 flash/3.4/src/com/adobe/fileformats/vcard/Phone.as
  44. +54 −0 flash/3.4/src/com/adobe/fileformats/vcard/VCard.as
  45. +246 −0 flash/3.4/src/com/adobe/fileformats/vcard/VCardParser.as
  46. +39 −0 flash/3.4/src/com/adobe/images/BitString.as
  47. +648 −0 flash/3.4/src/com/adobe/images/JPGEncoder.as
  48. +141 −0 flash/3.4/src/com/adobe/images/PNGEncoder.as
  49. +55 −0 flash/3.4/src/com/adobe/net/DynamicURLLoader.as
  50. +76 −0 flash/3.4/src/com/adobe/net/IURIResolver.as
  51. +196 −0 flash/3.4/src/com/adobe/net/MimeTypeMap.as
  52. +2,466 −0 flash/3.4/src/com/adobe/net/URI.as
  53. +139 −0 flash/3.4/src/com/adobe/net/URIEncodingBitmap.as
  54. +198 −0 flash/3.4/src/com/adobe/net/proxies/RFC2817Socket.as
  55. +34 −0 flash/3.4/src/com/adobe/protocols/dict/Database.as
  56. +39 −0 flash/3.4/src/com/adobe/protocols/dict/Definition.as
  57. +328 −0 flash/3.4/src/com/adobe/protocols/dict/Dict.as
  58. +28 −0 flash/3.4/src/com/adobe/protocols/dict/DictionaryServer.as
  59. +34 −0 flash/3.4/src/com/adobe/protocols/dict/MatchStrategy.as
  60. +39 −0 flash/3.4/src/com/adobe/protocols/dict/Response.as
  61. +14 −0 flash/3.4/src/com/adobe/protocols/dict/events/ConnectedEvent.as
  62. +26 −0 flash/3.4/src/com/adobe/protocols/dict/events/DatabaseEvent.as
  63. +27 −0 flash/3.4/src/com/adobe/protocols/dict/events/DefinitionEvent.as
  64. +26 −0 flash/3.4/src/com/adobe/protocols/dict/events/DefinitionHeaderEvent.as
  65. +26 −0 flash/3.4/src/com/adobe/protocols/dict/events/DictionaryServerEvent.as
  66. +14 −0 flash/3.4/src/com/adobe/protocols/dict/events/DisconnectedEvent.as
  67. +37 −0 flash/3.4/src/com/adobe/protocols/dict/events/ErrorEvent.as
  68. +26 −0 flash/3.4/src/com/adobe/protocols/dict/events/MatchEvent.as
  69. +26 −0 flash/3.4/src/com/adobe/protocols/dict/events/MatchStrategiesEvent.as
  70. +14 −0 flash/3.4/src/com/adobe/protocols/dict/events/NoMatchEvent.as
  71. +25 −0 flash/3.4/src/com/adobe/protocols/dict/util/CompleteResponseEvent.as
  72. +49 −0 flash/3.4/src/com/adobe/protocols/dict/util/SocketHelper.as
  73. +85 −0 flash/3.4/src/com/adobe/serialization/json/JSON.as
  74. +221 −0 flash/3.4/src/com/adobe/serialization/json/JSONDecoder.as
  75. +299 −0 flash/3.4/src/com/adobe/serialization/json/JSONEncoder.as
  76. +87 −0 flash/3.4/src/com/adobe/serialization/json/JSONParseError.as
  77. +104 −0 flash/3.4/src/com/adobe/serialization/json/JSONToken.as
  78. +67 −0 flash/3.4/src/com/adobe/serialization/json/JSONTokenType.as
  79. +583 −0 flash/3.4/src/com/adobe/serialization/json/JSONTokenizer.as
  80. +187 −0 flash/3.4/src/com/adobe/utils/ArrayUtil.as
  81. +699 −0 flash/3.4/src/com/adobe/utils/DateUtil.as
  82. +87 −0 flash/3.4/src/com/adobe/utils/DictionaryUtil.as
  83. +99 −0 flash/3.4/src/com/adobe/utils/IntUtil.as
  84. +74 −0 flash/3.4/src/com/adobe/utils/NumberFormatter.as
  85. +270 −0 flash/3.4/src/com/adobe/utils/StringUtil.as
  86. +168 −0 flash/3.4/src/com/adobe/utils/XMLUtil.as
  87. +48 −0 flash/3.4/src/com/adobe/webapis/ServiceBase.as
  88. +108 −0 flash/3.4/src/com/adobe/webapis/URLLoaderBase.as
  89. +75 −0 flash/3.4/src/com/adobe/webapis/events/ServiceEvent.as
  90. +273 −0 flash/3.4/src/com/hurlant/crypto/Crypto.as
  91. +3,235 −0 flash/3.4/src/com/hurlant/crypto/cert/MozillaRootCertificates.as
  92. +218 −0 flash/3.4/src/com/hurlant/crypto/cert/X509Certificate.as
  93. +57 −0 flash/3.4/src/com/hurlant/crypto/cert/X509CertificateCollection.as
  94. +82 −0 flash/3.4/src/com/hurlant/crypto/hash/HMAC.as
  95. +20 −0 flash/3.4/src/com/hurlant/crypto/hash/IHash.as
  96. +116 −0 flash/3.4/src/com/hurlant/crypto/hash/MD2.as
  97. +196 −0 flash/3.4/src/com/hurlant/crypto/hash/MD5.as
  98. +106 −0 flash/3.4/src/com/hurlant/crypto/hash/SHA1.as
  99. +28 −0 flash/3.4/src/com/hurlant/crypto/hash/SHA224.as
  100. +114 −0 flash/3.4/src/com/hurlant/crypto/hash/SHA256.as
  101. +62 −0 flash/3.4/src/com/hurlant/crypto/hash/SHABase.as
  102. +90 −0 flash/3.4/src/com/hurlant/crypto/prng/ARC4.as
  103. +20 −0 flash/3.4/src/com/hurlant/crypto/prng/IPRNG.as
  104. +119 −0 flash/3.4/src/com/hurlant/crypto/prng/Random.as
  105. +142 −0 flash/3.4/src/com/hurlant/crypto/prng/TLSPRF.as
  106. +319 −0 flash/3.4/src/com/hurlant/crypto/rsa/RSAKey.as
  107. +477 −0 flash/3.4/src/com/hurlant/crypto/symmetric/AESKey.as
  108. +375 −0 flash/3.4/src/com/hurlant/crypto/symmetric/BlowFishKey.as
  109. +55 −0 flash/3.4/src/com/hurlant/crypto/symmetric/CBCMode.as
  110. +61 −0 flash/3.4/src/com/hurlant/crypto/symmetric/CFB8Mode.as
  111. +64 −0 flash/3.4/src/com/hurlant/crypto/symmetric/CFBMode.as
  112. +58 −0 flash/3.4/src/com/hurlant/crypto/symmetric/CTRMode.as
  113. +365 −0 flash/3.4/src/com/hurlant/crypto/symmetric/DESKey.as
  114. +86 −0 flash/3.4/src/com/hurlant/crypto/symmetric/ECBMode.as
  115. +21 −0 flash/3.4/src/com/hurlant/crypto/symmetric/ICipher.as
  116. +15 −0 flash/3.4/src/com/hurlant/crypto/symmetric/IMode.as
  117. +32 −0 flash/3.4/src/com/hurlant/crypto/symmetric/IPad.as
  118. +21 −0 flash/3.4/src/com/hurlant/crypto/symmetric/IStreamCipher.as
  119. +35 −0 flash/3.4/src/com/hurlant/crypto/symmetric/ISymmetricKey.as
  120. +110 −0 flash/3.4/src/com/hurlant/crypto/symmetric/IVMode.as
  121. +34 −0 flash/3.4/src/com/hurlant/crypto/symmetric/NullPad.as
  122. +52 −0 flash/3.4/src/com/hurlant/crypto/symmetric/OFBMode.as
  123. +44 −0 flash/3.4/src/com/hurlant/crypto/symmetric/PKCS5.as
  124. +60 −0 flash/3.4/src/com/hurlant/crypto/symmetric/SimpleIVMode.as
  125. +42 −0 flash/3.4/src/com/hurlant/crypto/symmetric/TLSPad.as
  126. +88 −0 flash/3.4/src/com/hurlant/crypto/symmetric/TripleDESKey.as
  127. +94 −0 flash/3.4/src/com/hurlant/crypto/symmetric/XTeaKey.as
  128. +1,220 −0 flash/3.4/src/com/hurlant/crypto/tests/AESKeyTest.as
  129. +58 −0 flash/3.4/src/com/hurlant/crypto/tests/ARC4Test.as
  130. +39 −0 flash/3.4/src/com/hurlant/crypto/tests/BigIntegerTest.as
  131. +148 −0 flash/3.4/src/com/hurlant/crypto/tests/BlowFishKeyTest.as
  132. +160 −0 flash/3.4/src/com/hurlant/crypto/tests/CBCModeTest.as
  133. +71 −0 flash/3.4/src/com/hurlant/crypto/tests/CFB8ModeTest.as
  134. +98 −0 flash/3.4/src/com/hurlant/crypto/tests/CFBModeTest.as
  135. +109 −0 flash/3.4/src/com/hurlant/crypto/tests/CTRModeTest.as
  136. +112 −0 flash/3.4/src/com/hurlant/crypto/tests/DESKeyTest.as
  137. +151 −0 flash/3.4/src/com/hurlant/crypto/tests/ECBModeTest.as
  138. +184 −0 flash/3.4/src/com/hurlant/crypto/tests/HMACTest.as
  139. +20 −0 flash/3.4/src/com/hurlant/crypto/tests/ITestHarness.as
  140. +56 −0 flash/3.4/src/com/hurlant/crypto/tests/MD2Test.as
  141. +58 −0 flash/3.4/src/com/hurlant/crypto/tests/MD5Test.as
  142. +101 −0 flash/3.4/src/com/hurlant/crypto/tests/OFBModeTest.as
  143. +92 −0 flash/3.4/src/com/hurlant/crypto/tests/RSAKeyTest.as
  144. +198 −0 flash/3.4/src/com/hurlant/crypto/tests/SHA1Test.as
  145. +58 −0 flash/3.4/src/com/hurlant/crypto/tests/SHA224Test.as
  146. +60 −0 flash/3.4/src/com/hurlant/crypto/tests/SHA256Test.as
  147. +51 −0 flash/3.4/src/com/hurlant/crypto/tests/TLSPRFTest.as
  148. +42 −0 flash/3.4/src/com/hurlant/crypto/tests/TestCase.as
  149. +59 −0 flash/3.4/src/com/hurlant/crypto/tests/TripleDESKeyTest.as
  150. +66 −0 flash/3.4/src/com/hurlant/crypto/tests/XTeaKeyTest.as
  151. +97 −0 flash/3.4/src/com/hurlant/crypto/tls/BulkCiphers.as
  152. +117 −0 flash/3.4/src/com/hurlant/crypto/tls/CipherSuites.as
  153. +24 −0 flash/3.4/src/com/hurlant/crypto/tls/KeyExchanges.as
  154. +27 −0 flash/3.4/src/com/hurlant/crypto/tls/MACs.as
  155. +60 −0 flash/3.4/src/com/hurlant/crypto/tls/TLSConfig.as
  156. +148 −0 flash/3.4/src/com/hurlant/crypto/tls/TLSConnectionState.as
  157. +744 −0 flash/3.4/src/com/hurlant/crypto/tls/TLSEngine.as
  158. +39 −0 flash/3.4/src/com/hurlant/crypto/tls/TLSError.as
  159. +26 −0 flash/3.4/src/com/hurlant/crypto/tls/TLSEvent.as
  160. +150 −0 flash/3.4/src/com/hurlant/crypto/tls/TLSSecurityParameters.as
  161. +297 −0 flash/3.4/src/com/hurlant/crypto/tls/TLSSocket.as
  162. +123 −0 flash/3.4/src/com/hurlant/crypto/tls/TLSTest.as
  163. +90 −0 flash/3.4/src/com/hurlant/math/BarrettReduction.as
  164. +1,526 −0 flash/3.4/src/com/hurlant/math/BigInteger.as
  165. +35 −0 flash/3.4/src/com/hurlant/math/ClassicReduction.as
  166. +11 −0 flash/3.4/src/com/hurlant/math/IReduction.as
  167. +85 −0 flash/3.4/src/com/hurlant/math/MontgomeryReduction.as
  168. +34 −0 flash/3.4/src/com/hurlant/math/NullReduction.as
  169. +11 −0 flash/3.4/src/com/hurlant/math/bi_internal.as
  170. +25 −0 flash/3.4/src/com/hurlant/util/ArrayUtil.as
  171. +134 −0 flash/3.4/src/com/hurlant/util/Base64.as
  172. +66 −0 flash/3.4/src/com/hurlant/util/Hex.as
  173. +28 −0 flash/3.4/src/com/hurlant/util/Memory.as
  174. +43 −0 flash/3.4/src/com/hurlant/util/der/ByteString.as
  175. +220 −0 flash/3.4/src/com/hurlant/util/der/DER.as
  176. +21 −0 flash/3.4/src/com/hurlant/util/der/IAsn1Type.as
  177. +44 −0 flash/3.4/src/com/hurlant/util/der/Integer.as
  178. +35 −0 flash/3.4/src/com/hurlant/util/der/OID.as
  179. +112 −0 flash/3.4/src/com/hurlant/util/der/ObjectIdentifier.as
  180. +118 −0 flash/3.4/src/com/hurlant/util/der/PEM.as
  181. +49 −0 flash/3.4/src/com/hurlant/util/der/PrintableString.as
  182. +90 −0 flash/3.4/src/com/hurlant/util/der/Sequence.as
  183. +27 −0 flash/3.4/src/com/hurlant/util/der/Set.as
  184. +94 −0 flash/3.4/src/com/hurlant/util/der/Type.as
  185. +60 −0 flash/3.4/src/com/hurlant/util/der/UTCTime.as
  186. +23 −0 flash/3.4/src/com/pubnub/Errors.as
  187. +432 −0 flash/3.4/src/com/pubnub/Pn.as
  188. +54 −0 flash/3.4/src/com/pubnub/PnCrypto.as
  189. +53 −0 flash/3.4/src/com/pubnub/PnEvent.as
  190. +61 −0 flash/3.4/src/com/pubnub/PnUtils.as
  191. +29 −0 flash/3.4/src/com/pubnub/Settings.as
  192. +38 −0 flash/3.4/src/com/pubnub/connection/AsyncConnection.as
  193. +100 −0 flash/3.4/src/com/pubnub/connection/Connection.as
  194. +62 −0 flash/3.4/src/com/pubnub/connection/HeartBeatConnection.as
  195. +134 −0 flash/3.4/src/com/pubnub/connection/SyncConnection.as
  196. +104 −0 flash/3.4/src/com/pubnub/environment/Environment.as
  197. +37 −0 flash/3.4/src/com/pubnub/environment/EnvironmentEvent.as
  198. +186 −0 flash/3.4/src/com/pubnub/environment/NetMon.as
  199. +28 −0 flash/3.4/src/com/pubnub/environment/NetMonEvent.as
  200. +50 −0 flash/3.4/src/com/pubnub/environment/SysMon.as
  201. +33 −0 flash/3.4/src/com/pubnub/environment/SysMonEvent.as
  202. +18 −0 flash/3.4/src/com/pubnub/json/JSON3dParty.as
  203. +16 −0 flash/3.4/src/com/pubnub/json/JSONNative.as
  204. +29 −0 flash/3.4/src/com/pubnub/json/PnJSON.as
  205. +134 −0 flash/3.4/src/com/pubnub/log/Log.as
  206. +245 −0 flash/3.4/src/com/pubnub/net/URLLoader.as
  207. +32 −0 flash/3.4/src/com/pubnub/net/URLLoaderEvent.as
  208. +113 −0 flash/3.4/src/com/pubnub/net/URLRequest.as
  209. +142 −0 flash/3.4/src/com/pubnub/net/URLRequestHeader.as
  210. +168 −0 flash/3.4/src/com/pubnub/net/URLResponse.as
  211. +89 −0 flash/3.4/src/com/pubnub/operation/HistoryOperation.as
  212. +25 −0 flash/3.4/src/com/pubnub/operation/LeaveOperation.as
  213. +126 −0 flash/3.4/src/com/pubnub/operation/Operation.as
  214. +32 −0 flash/3.4/src/com/pubnub/operation/OperationEvent.as
  215. +13 −0 flash/3.4/src/com/pubnub/operation/OperationStatus.as
  216. +70 −0 flash/3.4/src/com/pubnub/operation/PublishOperation.as
  217. +25 −0 flash/3.4/src/com/pubnub/operation/SubscribeInitOperation.as
  218. +26 −0 flash/3.4/src/com/pubnub/operation/SubscribeOperation.as
  219. +22 −0 flash/3.4/src/com/pubnub/operation/TimeOperation.as
  220. +3 −0  flash/3.4/src/com/pubnub/pn_internal.as
  221. +444 −0 flash/3.4/src/com/pubnub/subscribe/Subscribe.as
  222. +37 −0 flash/3.4/src/com/pubnub/subscribe/SubscribeEvent.as
  223. +35 −0 flash/3.4/src/fixTestSuite/FixTestSuite.mxml
  224. +91 −0 flash/3.4/src/fixTestSuite/tests/InitTest.as
  225. +224 −0 flash/3.4/src/org/casalib/collection/IList.as
  226. +296 −0 flash/3.4/src/org/casalib/collection/List.as
  227. +158 −0 flash/3.4/src/org/casalib/collection/UniqueList.as
  228. +47 −0 flash/3.4/src/org/casalib/control/IResumable.as
  229. +52 −0 flash/3.4/src/org/casalib/control/IRunnable.as
  230. +61 −0 flash/3.4/src/org/casalib/core/Destroyable.as
  231. +55 −0 flash/3.4/src/org/casalib/core/IDestroyable.as
  232. +140 −0 flash/3.4/src/org/casalib/display/CasaBitmap.as
  233. +170 −0 flash/3.4/src/org/casalib/display/CasaMovieClip.as
  234. +135 −0 flash/3.4/src/org/casalib/display/CasaShape.as
  235. +163 −0 flash/3.4/src/org/casalib/display/CasaSimpleButton.as
  236. +166 −0 flash/3.4/src/org/casalib/display/CasaSprite.as
  237. +135 −0 flash/3.4/src/org/casalib/display/CasaTextField.as
  238. +150 −0 flash/3.4/src/org/casalib/display/ReversibleMovieClip.as
  239. +51 −0 flash/3.4/src/org/casalib/errors/ArguementTypeError.as
  240. +48 −0 flash/3.4/src/org/casalib/errors/ArrayContentsError.as
  241. +68 −0 flash/3.4/src/org/casalib/events/IRemovableEventDispatcher.as
  242. +86 −0 flash/3.4/src/org/casalib/events/InactivityEvent.as
Sorry, we could not display the entire diff because too many files (964) changed.
View
40 app-showcase/ascii-player/ascii-player.html
@@ -37,42 +37,36 @@
</div>
<!-- PUBNUB SOURCE -->
-<script src=https://pubnub.s3.amazonaws.com/pubnub-3.4.min.js></script>
+<script src=../../javascript/pubnub-3.4.js></script>
<script>(function(){
/* GENERATE CHANNEL */
var channel = PUBNUB.uuid()
-, pub_key = 'pub-7d598eb7-1523-4c72-9786-d8650a856bf5'
-, sub_key = 'sub-041c0011-6d41-11e1-8b07-35f1f17243aa'
+, pub_key = 'demo'
+, sub_key = 'demo'
, out = PUBNUB.$('pubnub-terminal-out')
-, p = PUBNUB.init({ subscribe_key : sub_key });
+, p = PUBNUB.init({ subscribe_key : sub_key, publish_key : pub_key });
/* OPEN RECEIVE SOCKET */
p.subscribe({
channel : channel,
- message : function(data) { out.innerHTML = parse(data)||'' }
+ message : function(data) { out.innerHTML = parse(data)||'' },
+ connect : start_replay
});
-function parse(data) { try{return JSON.parse(data)} catch(e){} }
-
/* START THE MOVIE STREAM */
-(function(){
- var img = p.create('img');
- img.src = p.supplant([
- 'http:','','23.23.187.160:9050',
- 'v1','replay','{pub_key}',
- '{sub_key}','{src_channel}',
- '{des_channel}'
- ].join('/'), {
- pub_key : pub_key,
- sub_key : sub_key,
- des_channel : channel,
- src_channel : '0cefce37-606c-4eae-a9e9-aff35186b854'
- } );
- p.css( img, { display : 'none' } );
- p.search('body')[0].appendChild(img);
-})();
+function start_replay() {
+ p.replay({
+ //source : '0cefce37-606c-4eae-a9e9-aff35186b854',
+ source : 'my_channel',
+ destination : channel,
+ reverse : true
+ });
+}
+
+function parse(data) { return data }
+
})();</script>
</body>
</html>
View
420 app-showcase/dev-console-3.4/dev-console.html
@@ -0,0 +1,420 @@
+<!doctype html>
+<style>
+
+ .relative { position: relative }
+
+ .console-title {
+ font-family: "helvetica neue", helvetica, arial, sans-serif;
+ font-weight: 200;
+ font-size: 30px;
+ }
+
+ #console-stage {
+ width: 960px;
+ height: 560px;
+ margin: 0 auto;
+ background: #eee;
+ background: transparent;
+ }
+
+ .console-section-header,
+ .console-input-visual,
+ .console-input,
+ .console-button,
+ .console-input-heading,
+ .console-box {
+ cursor: default;
+ position: absolute;
+ top: 0;
+ left: 0;
+ margin: 0;
+ padding: 0;
+ outline: 0;
+ font-family: "helvetica neue", helvetica, arial, sans-serif;
+ }
+
+ #console-arrow-right {
+ position: absolute;
+ top: 40px;
+ left: 460px;
+ width: 0;
+ height: 0;
+ border-top: 40px solid transparent;
+ border-left: 50px solid #ee432e;
+ border-bottom: 40px solid transparent;
+ -webkit-filter: drop-shadow(-2px 0px 5px #888);
+ }
+
+ /* POSITIONING OF ELEMENTS HERE */
+ #console-subscribe-area {
+ position: absolute;
+ left: 558px;
+ }
+
+ .console-box {
+ width: 400px;
+ height: 150px;
+ }
+
+ .console-output {
+ padding-top: 10px;
+ position: absolute;
+ top: 35px;
+ overflow: scroll;
+ overflow-x: hidden;
+ width: 400px;
+ height: 100px;
+ background: #111;
+ border: 1px solid #111;
+ color: #eee;
+ font-size: 12px;
+ font-family: monaco, m, mono;
+ line-height: 14px;
+
+ -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);
+ -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);
+ -ms-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);
+ -o-box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);
+ box-shadow: 0 0 5px rgba(0, 0, 0, 0.4);
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ }
+
+ .console-section-header {
+ display: none;
+ }
+
+ .console-input-label {
+ position: absolute;
+ top: 3px;
+ left: 130px;
+ font-weight: 400;
+ font-size: 8px;
+ color: #444;
+ }
+ .console-output-label,
+ .console-textarea-label {
+ top: 46px;
+ left: 10px;
+ }
+ .console-output-label {
+ color: #fff;
+ }
+
+ /* INPUT & TEXTAREA BOXES */
+ .console-input-visual {
+ font-size: 20px;
+ width: 400px;
+ height: 40px;
+ line-height: 40px;
+ border: 1px solid #951100;
+
+ background-color: #effafa;
+
+ -webkit-border-radius: 6px;
+ -moz-border-radius: 6px;
+ -ms-border-radius: 6px;
+ -o-border-radius: 6px;
+ border-radius: 6px;
+
+ -webkit-box-shadow:
+ inset 0px 0px 30px 1px rgba(120, 120, 120, 0.6),
+ 0 0 5px rgba(0, 0, 0, 0.4);
+ -moz-box-shadow:
+ inset 0px 0px 30px 1px rgba(120, 120, 120, 0.6),
+ 0 0 5px rgba(0, 0, 0, 0.4);
+ -ms-box-shadow:
+ inset 0px 0px 30px 1px rgba(120, 120, 120, 0.6),
+ 0 0 5px rgba(0, 0, 0, 0.4);
+ -o-box-shadow:
+ inset 0px 0px 30px 1px rgba(120, 120, 120, 0.6),
+ 0 0 5px rgba(0, 0, 0, 0.4);
+ box-shadow:
+ inset 0px 0px 30px 1px rgba(120, 120, 120, 0.6),
+ 0 0 5px rgba(0, 0, 0, 0.4);
+ }
+
+ .console-input {
+ top: 10px;
+ left: 130px;
+ border: 0;
+ width: 260px;
+ height: 30px;
+ line-height: 30px;
+ font-size: 20px;
+ background: transparent;
+ }
+ .console-textarea-visual {
+ padding-top: 10px;
+ top: 35px;
+ width: 400px;
+ height: 100px;
+ background-color: #fafafa;
+
+ -webkit-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -ms-border-radius: 3px;
+ -o-border-radius: 3px;
+ border-radius: 3px;
+ }
+ .console-textarea {
+ overflow: scroll;
+ overflow-x: hidden;
+ overflow-y: scroll;
+ top: 60px;
+ left: 10px;
+ border: 0;
+ width: 380px;
+ height: 80px;
+ font-size: 12px;
+ font-family: monaco, m, mono;
+ line-height: 14px;
+ background: transparent;
+ resize: none;
+ }
+
+
+ .disabled,
+ .disabled:active,
+ .disabled:hover {
+ cursor: default;
+ -webkit-filter: blur(1px) grayscale(.5) opacity(0.8);
+ }
+ .console-input-heading {
+ width: 120px;
+ height: 40px;
+ line-height: 40px;
+ background-color: #888;
+ border: 1px solid #951100;
+ border-right: 0;
+ color: #fff;
+ font-size: 17px;
+ font-weight: 500;
+ text-align: center;
+ text-shadow: 0px -1px 1px rgba(0, 0, 0, 0.3);
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ -ms-border-radius: 5px;
+ -o-border-radius: 5px;
+ border-radius: 5px;
+ }
+ .console-button {
+ cursor: pointer;
+ width: 120px;
+ height: 40px;
+ line-height: 40px;
+ color: #fff;
+ font-size: 17px;
+ font-weight: 500;
+ text-align: center;
+ text-shadow: 0px -1px 1px rgba(0, 0, 0, 0.8);
+
+ background-color: #ee432e;
+
+ background-image: -webkit-gradient(
+ linear, left top, left bottom,
+ color-stop(0%, #ee432e),
+ color-stop(50%, #c63929),
+ color-stop(50%, #b51700),
+ color-stop(100%, #891100)
+ );
+ background-image: -webkit-linear-gradient(
+ top, #ee432e 0%, #c63929 50%, #b51700 50%, #891100 100%
+ );
+ background-image: -moz-linear-gradient(
+ top, #ee432e 0%, #c63929 50%, #b51700 50%, #891100 100%
+ );
+ background-image: -ms-linear-gradient(
+ top, #ee432e 0%, #c63929 50%, #b51700 50%, #891100 100%
+ );
+ background-image: -o-linear-gradient(
+ top, #ee432e 0%, #c63929 50%, #b51700 50%, #891100 100%
+ );
+ background-image: linear-gradient(
+ top, #ee432e 0%, #c63929 50%, #b51700 50%, #891100 100%
+ );
+
+ border: 1px solid #951100;
+
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ -ms-border-radius: 5px;
+ -o-border-radius: 5px;
+ border-radius: 5px;
+
+ -webkit-box-shadow:
+ inset 0px 0px 0px 1px rgba(255, 115, 100, 0.4),
+ 0 0 5px rgba(0, 0, 0, 0.4);
+ -moz-box-shadow:
+ inset 0px 0px 0px 1px rgba(255, 115, 100, 0.4),
+ 0 0 5px rgba(0, 0, 0, 0.4);
+ -ms-box-shadow:
+ inset 0px 0px 0px 1px rgba(255, 115, 100, 0.4),
+ 0 0 5px rgba(0, 0, 0, 0.4);
+ -o-box-shadow:
+ inset 0px 0px 0px 1px rgba(255, 115, 100, 0.4),
+ 0 0 5px rgba(0, 0, 0, 0.4);
+ box-shadow:
+ inset 0px 0px 0px 1px rgba(255, 115, 100, 0.4),
+ 0 0 5px rgba(0, 0, 0, 0.4);
+ }
+ .console-button:hover {
+ cursor: pointer;
+ background-color: #f37873;
+ background-image: -webkit-gradient(
+ linear, left top, left bottom,
+ color-stop(0%, #f37873),
+ color-stop(50%, #db504d),
+ color-stop(50%, #cb0500),
+ color-stop(100%, #a20601)
+ );
+ background-image: -webkit-linear-gradient(
+ top, #f37873 0%, #db504d 50%, #cb0500 50%, #a20601 100%
+ );
+ background-image: -moz-linear-gradient(
+ top, #f37873 0%, #db504d 50%, #cb0500 50%, #a20601 100%
+ );
+ background-image: -ms-linear-gradient(
+ top, #f37873 0%, #db504d 50%, #cb0500 50%, #a20601 100%
+ );
+ background-image: -o-linear-gradient(
+ top, #f37873 0%, #db504d 50%, #cb0500 50%, #a20601 100%
+ );
+ background-image: linear-gradient(
+ top, #f37873 0%, #db504d 50%, #cb0500 50%, #a20601 100%
+ );
+ }
+ .console-button:active {
+ background-color: #d43c28;
+ background-image: -webkit-gradient(
+ linear, left top, left bottom,
+ color-stop(0%, #d43c28),
+ color-stop(50%, #ad3224),
+ color-stop(50%, #9c1500),
+ color-stop(100%, #700d00)
+ );
+ background-image: -webkit-linear-gradient(
+ top, #d43c28 0%, #ad3224 50%, #9c1500 50%, #700d00 100%
+ );
+ background-image: -moz-linear-gradient(
+ top, #d43c28 0%, #ad3224 50%, #9c1500 50%, #700d00 100%
+ );
+ background-image: -ms-linear-gradient(
+ top, #d43c28 0%, #ad3224 50%, #9c1500 50%, #700d00 100%
+ );
+ background-image: -o-linear-gradient(
+ top, #d43c28 0%, #ad3224 50%, #9c1500 50%, #700d00 100%
+ );
+ background-image: linear-gradient(
+ top, #d43c28 0%, #ad3224 50%, #9c1500 50%, #700d00 100%
+ );
+ -webkit-box-shadow: inset 0px 0px 0px 1px rgba(255, 115, 100, 0.4);
+ box-shadow: inset 0px 0px 0px 1px rgba(255, 115, 100, 0.4);
+ }
+
+</style>
+
+<div id=console-stage class=relative>
+<h1 class=console-title>Dev Console</h1>
+<div class=relative>
+
+ <!-- CONNECTION STATUS -->
+ <div id=console-connection-status><div class=relative>
+ <div id=console-connection-status-you></div>
+ </div></div>
+
+ <!-- PUBLISH + SUBSCRIBE AREA -->
+ <div id=console-publish-subscribe><div class=relative>
+
+ <!-- PUBLISH AREA -->
+ <div id=console-publish-area><div class=relative>
+ <div class=console-section-header>PUBLISH</div>
+ <div class=console-box><div class=relative>
+ <div
+ class='console-input-visual console-textarea-visual'
+ ></div>
+ <textarea
+ class='console-input console-textarea'
+ >{"my_key":"data"}</textarea>
+ <div
+ class='console-input-label console-textarea-label'
+ >MESSAGE TO SEND</div>
+ <div class=console-input-visual></div>
+ <div class=console-input-label>CHANNEL</div>
+ <input
+ id=console-publish-channel
+ class=console-input
+ value=my_channel
+ ></input>
+ <div action=publish class=console-button>PUBLISH</div>
+ </div></div>
+ </div></div>
+
+ <!-- PUBLISH => SUBSCRIBE ARROW -->
+ <div id=console-arrow-right></div>
+
+ <!-- SUBSCRIBE AREA -->
+ <div id=console-subscribe-area><div class=relative>
+ <div class=console-section-header>SUBSCRIBE</div>
+ <div class=console-box><div class=relative>
+ <div class=console-output></div>
+ <div
+ id=console-subscribe-output
+ class=console-output-text>aslkjdfalk sjdflakj</div>
+ <div
+ class='console-input-label console-output-label'
+ >RECEIVED MESSAGES</div>
+ <div class=console-input-visual></div>
+ <div class=console-input-label>CHANNEL</div>
+ <input
+ id=console-subscribe-channel
+ class=console-input
+ value=my_channel
+ ></input>
+ <div
+ action=subscribe
+ class=console-input-heading
+ >SUBSCRIBE</div>
+ </div></div>
+ </div></div>
+ </div></div>
+ <!-- END: PUBLISH + SUBSCRIBE AREA -->
+
+ <!-- EDIT SETTINGS AREA -->
+ <div id=console-edit-settings>
+ <div class=console-section-header>MODIFY YOUR SETTINGS</div>
+
+ </div>
+
+ <!-- DETAILS AREA -->
+ <div id=console-details-area>
+
+ <!-- LATENCY -->
+ <div id=console-latency>
+
+ </div>
+
+ <!-- OCCUPANCY -->
+ <div id=console-occupancy>
+
+ </div>
+
+ <!-- JOIN/LEAVE BLINKER -->
+ <div id=console-join-leave>
+
+ </div>
+
+ </div>
+
+</div></div> <!-- END CONSOLE STAGE -->
+
+<div id=pubnub></div>
+<script src=https://pubnub.s3.amazonaws.com/pubnub-3.4.min.js></script>
+<script>(function(){
+
+})();</script>
View
6 flash/3.4/.gitignore
@@ -0,0 +1,6 @@
+/out
+/bin
+/.actionScriptProperties
+/.flexProperties
+/.project
+/PubNubTest.as3proj
View
6 flash/3.4/html-template/history/history.css
@@ -0,0 +1,6 @@
+/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */
+
+#ie_historyFrame { width: 0px; height: 0px; display:none }
+#firefox_anchorDiv { width: 0px; height: 0px; display:none }
+#safari_formDiv { width: 0px; height: 0px; display:none }
+#safari_rememberDiv { width: 0px; height: 0px; display:none }
View
678 flash/3.4/html-template/history/history.js
@@ -0,0 +1,678 @@
+BrowserHistoryUtils = {
+ addEvent: function(elm, evType, fn, useCapture) {
+ useCapture = useCapture || false;
+ if (elm.addEventListener) {
+ elm.addEventListener(evType, fn, useCapture);
+ return true;
+ }
+ else if (elm.attachEvent) {
+ var r = elm.attachEvent('on' + evType, fn);
+ return r;
+ }
+ else {
+ elm['on' + evType] = fn;
+ }
+ }
+}
+
+BrowserHistory = (function() {
+ // type of browser
+ var browser = {
+ ie: false,
+ ie8: false,
+ firefox: false,
+ safari: false,
+ opera: false,
+ version: -1
+ };
+
+ // Default app state URL to use when no fragment ID present
+ var defaultHash = '';
+
+ // Last-known app state URL
+ var currentHref = document.location.href;
+
+ // Initial URL (used only by IE)
+ var initialHref = document.location.href;
+
+ // Initial URL (used only by IE)
+ var initialHash = document.location.hash;
+
+ // History frame source URL prefix (used only by IE)
+ var historyFrameSourcePrefix = 'history/historyFrame.html?';
+
+ // History maintenance (used only by Safari)
+ var currentHistoryLength = -1;
+
+ // Flag to denote the existence of onhashchange
+ var browserHasHashChange = false;
+
+ var historyHash = [];
+
+ var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash);
+
+ var backStack = [];
+ var forwardStack = [];
+
+ var currentObjectId = null;
+
+ //UserAgent detection
+ var useragent = navigator.userAgent.toLowerCase();
+
+ if (useragent.indexOf("opera") != -1) {
+ browser.opera = true;
+ } else if (useragent.indexOf("msie") != -1) {
+ browser.ie = true;
+ browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));
+ if (browser.version == 8)
+ {
+ browser.ie = false;
+ browser.ie8 = true;
+ }
+ } else if (useragent.indexOf("safari") != -1) {
+ browser.safari = true;
+ browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7));
+ } else if (useragent.indexOf("gecko") != -1) {
+ browser.firefox = true;
+ }
+
+ if (browser.ie == true && browser.version == 7) {
+ window["_ie_firstload"] = false;
+ }
+
+ function hashChangeHandler()
+ {
+ currentHref = document.location.href;
+ var flexAppUrl = getHash();
+ //ADR: to fix multiple
+ if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+ var pl = getPlayers();
+ for (var i = 0; i < pl.length; i++) {
+ pl[i].browserURLChange(flexAppUrl);
+ }
+ } else {
+ getPlayer().browserURLChange(flexAppUrl);
+ }
+ }
+
+ // Accessor functions for obtaining specific elements of the page.
+ function getHistoryFrame()
+ {
+ return document.getElementById('ie_historyFrame');
+ }
+
+ function getFormElement()
+ {
+ return document.getElementById('safari_formDiv');
+ }
+
+ function getRememberElement()
+ {
+ return document.getElementById("safari_remember_field");
+ }
+
+ // Get the Flash player object for performing ExternalInterface callbacks.
+ // Updated for changes to SWFObject2.
+ function getPlayer(id) {
+ var i;
+
+ if (id && document.getElementById(id)) {
+ var r = document.getElementById(id);
+ if (typeof r.SetVariable != "undefined") {
+ return r;
+ }
+ else {
+ var o = r.getElementsByTagName("object");
+ var e = r.getElementsByTagName("embed");
+ for (i = 0; i < o.length; i++) {
+ if (typeof o[i].browserURLChange != "undefined")
+ return o[i];
+ }
+ for (i = 0; i < e.length; i++) {
+ if (typeof e[i].browserURLChange != "undefined")
+ return e[i];
+ }
+ }
+ }
+ else {
+ var o = document.getElementsByTagName("object");
+ var e = document.getElementsByTagName("embed");
+ for (i = 0; i < e.length; i++) {
+ if (typeof e[i].browserURLChange != "undefined")
+ {
+ return e[i];
+ }
+ }
+ for (i = 0; i < o.length; i++) {
+ if (typeof o[i].browserURLChange != "undefined")
+ {
+ return o[i];
+ }
+ }
+ }
+ return undefined;
+ }
+
+ function getPlayers() {
+ var i;
+ var players = [];
+ if (players.length == 0) {
+ var tmp = document.getElementsByTagName('object');
+ for (i = 0; i < tmp.length; i++)
+ {
+ if (typeof tmp[i].browserURLChange != "undefined")
+ players.push(tmp[i]);
+ }
+ }
+ if (players.length == 0 || players[0].object == null) {
+ var tmp = document.getElementsByTagName('embed');
+ for (i = 0; i < tmp.length; i++)
+ {
+ if (typeof tmp[i].browserURLChange != "undefined")
+ players.push(tmp[i]);
+ }
+ }
+ return players;
+ }
+
+ function getIframeHash() {
+ var doc = getHistoryFrame().contentWindow.document;
+ var hash = String(doc.location.search);
+ if (hash.length == 1 && hash.charAt(0) == "?") {
+ hash = "";
+ }
+ else if (hash.length >= 2 && hash.charAt(0) == "?") {
+ hash = hash.substring(1);
+ }
+ return hash;
+ }
+
+ /* Get the current location hash excluding the '#' symbol. */
+ function getHash() {
+ // It would be nice if we could use document.location.hash here,
+ // but it's faulty sometimes.
+ var idx = document.location.href.indexOf('#');
+ return (idx >= 0) ? document.location.href.substr(idx+1) : '';
+ }
+
+ /* Get the current location hash excluding the '#' symbol. */
+ function setHash(hash) {
+ // It would be nice if we could use document.location.hash here,
+ // but it's faulty sometimes.
+ if (hash == '') hash = '#'
+ document.location.hash = hash;
+ }
+
+ function createState(baseUrl, newUrl, flexAppUrl) {
+ return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null };
+ }
+
+ /* Add a history entry to the browser.
+ * baseUrl: the portion of the location prior to the '#'
+ * newUrl: the entire new URL, including '#' and following fragment
+ * flexAppUrl: the portion of the location following the '#' only
+ */
+ function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {
+
+ //delete all the history entries
+ forwardStack = [];
+
+ if (browser.ie) {
+ //Check to see if we are being asked to do a navigate for the first
+ //history entry, and if so ignore, because it's coming from the creation
+ //of the history iframe
+ if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) {
+ currentHref = initialHref;
+ return;
+ }
+ if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) {
+ newUrl = baseUrl + '#' + defaultHash;
+ flexAppUrl = defaultHash;
+ } else {
+ // for IE, tell the history frame to go somewhere without a '#'
+ // in order to get this entry into the browser history.
+ getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl;
+ }
+ setHash(flexAppUrl);
+ } else {
+
+ //ADR
+ if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {
+ initialState = createState(baseUrl, newUrl, flexAppUrl);
+ } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {
+ backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);
+ }
+
+ if (browser.safari && !browserHasHashChange) {
+ // for Safari, submit a form whose action points to the desired URL
+ if (browser.version <= 419.3) {
+ var file = window.location.pathname.toString();
+ file = file.substring(file.lastIndexOf("/")+1);
+ getFormElement().innerHTML = '<form name="historyForm" action="'+file+'#' + flexAppUrl + '" method="GET"></form>';
+ //get the current elements and add them to the form
+ var qs = window.location.search.substring(1);
+ var qs_arr = qs.split("&");
+ for (var i = 0; i < qs_arr.length; i++) {
+ var tmp = qs_arr[i].split("=");
+ var elem = document.createElement("input");
+ elem.type = "hidden";
+ elem.name = tmp[0];
+ elem.value = tmp[1];
+ document.forms.historyForm.appendChild(elem);
+ }
+ document.forms.historyForm.submit();
+ } else {
+ top.location.hash = flexAppUrl;
+ }
+ // We also have to maintain the history by hand for Safari
+ historyHash[history.length] = flexAppUrl;
+ _storeStates();
+ } else {
+ // Otherwise, just tell the browser to go there
+ setHash(flexAppUrl);
+ }
+ }
+ backStack.push(createState(baseUrl, newUrl, flexAppUrl));
+ }
+
+ function _storeStates() {
+ if (browser.safari) {
+ getRememberElement().value = historyHash.join(",");
+ }
+ }
+
+ function handleBackButton() {
+ //The "current" page is always at the top of the history stack.
+ var current = backStack.pop();
+ if (!current) { return; }
+ var last = backStack[backStack.length - 1];
+ if (!last && backStack.length == 0){
+ last = initialState;
+ }
+ forwardStack.push(current);
+ }
+
+ function handleForwardButton() {
+ //summary: private method. Do not call this directly.
+
+ var last = forwardStack.pop();
+ if (!last) { return; }
+ backStack.push(last);
+ }
+
+ function handleArbitraryUrl() {
+ //delete all the history entries
+ forwardStack = [];
+ }
+
+ /* Called periodically to poll to see if we need to detect navigation that has occurred */
+ function checkForUrlChange() {
+
+ if (browser.ie) {
+ if (currentHref != document.location.href && currentHref + '#' != document.location.href) {
+ //This occurs when the user has navigated to a specific URL
+ //within the app, and didn't use browser back/forward
+ //IE seems to have a bug where it stops updating the URL it
+ //shows the end-user at this point, but programatically it
+ //appears to be correct. Do a full app reload to get around
+ //this issue.
+ if (browser.version < 7) {
+ currentHref = document.location.href;
+ document.location.reload();
+ } else {
+ if (getHash() != getIframeHash()) {
+ // this.iframe.src = this.blankURL + hash;
+ var sourceToSet = historyFrameSourcePrefix + getHash();
+ getHistoryFrame().src = sourceToSet;
+ currentHref = document.location.href;
+ }
+ }
+ }
+ }
+
+ if (browser.safari && !browserHasHashChange) {
+ // For Safari, we have to check to see if history.length changed.
+ if (currentHistoryLength >= 0 && history.length != currentHistoryLength) {
+ //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|"));
+ var flexAppUrl = getHash();
+ if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */)
+ {
+ // If it did change and we're running Safari 3.x or earlier,
+ // then we have to look the old state up in our hand-maintained
+ // array since document.location.hash won't have changed,
+ // then call back into BrowserManager.
+ currentHistoryLength = history.length;
+ flexAppUrl = historyHash[currentHistoryLength];
+ }
+
+ //ADR: to fix multiple
+ if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+ var pl = getPlayers();
+ for (var i = 0; i < pl.length; i++) {
+ pl[i].browserURLChange(flexAppUrl);
+ }
+ } else {
+ getPlayer().browserURLChange(flexAppUrl);
+ }
+ _storeStates();
+ }
+ }
+ if (browser.firefox && !browserHasHashChange) {
+ if (currentHref != document.location.href) {
+ var bsl = backStack.length;
+
+ var urlActions = {
+ back: false,
+ forward: false,
+ set: false
+ }
+
+ if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) {
+ urlActions.back = true;
+ // FIXME: could this ever be a forward button?
+ // we can't clear it because we still need to check for forwards. Ugg.
+ // clearInterval(this.locationTimer);
+ handleBackButton();
+ }
+
+ // first check to see if we could have gone forward. We always halt on
+ // a no-hash item.
+ if (forwardStack.length > 0) {
+ if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) {
+ urlActions.forward = true;
+ handleForwardButton();
+ }
+ }
+
+ // ok, that didn't work, try someplace back in the history stack
+ if ((bsl >= 2) && (backStack[bsl - 2])) {
+ if (backStack[bsl - 2].flexAppUrl == getHash()) {
+ urlActions.back = true;
+ handleBackButton();
+ }
+ }
+
+ if (!urlActions.back && !urlActions.forward) {
+ var foundInStacks = {
+ back: -1,
+ forward: -1
+ }
+
+ for (var i = 0; i < backStack.length; i++) {
+ if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
+ arbitraryUrl = true;
+ foundInStacks.back = i;
+ }
+ }
+ for (var i = 0; i < forwardStack.length; i++) {
+ if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {
+ arbitraryUrl = true;
+ foundInStacks.forward = i;
+ }
+ }
+ handleArbitraryUrl();
+ }
+
+ // Firefox changed; do a callback into BrowserManager to tell it.
+ currentHref = document.location.href;
+ var flexAppUrl = getHash();
+ //ADR: to fix multiple
+ if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+ var pl = getPlayers();
+ for (var i = 0; i < pl.length; i++) {
+ pl[i].browserURLChange(flexAppUrl);
+ }
+ } else {
+ getPlayer().browserURLChange(flexAppUrl);
+ }
+ }
+ }
+ }
+
+ var _initialize = function () {
+
+ browserHasHashChange = ("onhashchange" in document.body);
+
+ if (browser.ie)
+ {
+ var scripts = document.getElementsByTagName('script');
+ for (var i = 0, s; s = scripts[i]; i++) {
+ if (s.src.indexOf("history.js") > -1) {
+ var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html");
+ }
+ }
+ historyFrameSourcePrefix = iframe_location + "?";
+ var src = historyFrameSourcePrefix;
+
+ var iframe = document.createElement("iframe");
+ iframe.id = 'ie_historyFrame';
+ iframe.name = 'ie_historyFrame';
+ iframe.src = 'javascript:false;';
+
+ try {
+ document.body.appendChild(iframe);
+ } catch(e) {
+ setTimeout(function() {
+ document.body.appendChild(iframe);
+ }, 0);
+ }
+ }
+
+ if (browser.safari && !browserHasHashChange)
+ {
+ var rememberDiv = document.createElement("div");
+ rememberDiv.id = 'safari_rememberDiv';
+ document.body.appendChild(rememberDiv);
+ rememberDiv.innerHTML = '<input type="text" id="safari_remember_field" style="width: 500px;">';
+
+ var formDiv = document.createElement("div");
+ formDiv.id = 'safari_formDiv';
+ document.body.appendChild(formDiv);
+
+ var reloader_content = document.createElement('div');
+ reloader_content.id = 'safarireloader';
+ var scripts = document.getElementsByTagName('script');
+ for (var i = 0, s; s = scripts[i]; i++) {
+ if (s.src.indexOf("history.js") > -1) {
+ html = (new String(s.src)).replace(".js", ".html");
+ }
+ }
+ reloader_content.innerHTML = '<iframe id="safarireloader-iframe" src="about:blank" frameborder="no" scrolling="no"></iframe>';
+ document.body.appendChild(reloader_content);
+ reloader_content.style.position = 'absolute';
+ reloader_content.style.left = reloader_content.style.top = '-9999px';
+ iframe = reloader_content.getElementsByTagName('iframe')[0];
+
+ if (document.getElementById("safari_remember_field").value != "" ) {
+ historyHash = document.getElementById("safari_remember_field").value.split(",");
+ }
+ }
+
+ if (browserHasHashChange)
+ document.body.onhashchange = hashChangeHandler;
+ }
+
+ return {
+ historyHash: historyHash,
+ backStack: function() { return backStack; },
+ forwardStack: function() { return forwardStack },
+ getPlayer: getPlayer,
+ initialize: function(src) {
+ _initialize(src);
+ },
+ setURL: function(url) {
+ document.location.href = url;
+ },
+ getURL: function() {
+ return document.location.href;
+ },
+ getTitle: function() {
+ return document.title;
+ },
+ setTitle: function(title) {
+ try {
+ backStack[backStack.length - 1].title = title;
+ } catch(e) { }
+ //if on safari, set the title to be the empty string.
+ if (browser.safari) {
+ if (title == "") {
+ try {
+ var tmp = window.location.href.toString();
+ title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#"));
+ } catch(e) {
+ title = "";
+ }
+ }
+ }
+ document.title = title;
+ },
+ setDefaultURL: function(def)
+ {
+ defaultHash = def;
+ def = getHash();
+ //trailing ? is important else an extra frame gets added to the history
+ //when navigating back to the first page. Alternatively could check
+ //in history frame navigation to compare # and ?.
+ if (browser.ie)
+ {
+ window['_ie_firstload'] = true;
+ var sourceToSet = historyFrameSourcePrefix + def;
+ var func = function() {
+ getHistoryFrame().src = sourceToSet;
+ window.location.replace("#" + def);
+ setInterval(checkForUrlChange, 50);
+ }
+ try {
+ func();
+ } catch(e) {
+ window.setTimeout(function() { func(); }, 0);
+ }
+ }
+
+ if (browser.safari)
+ {
+ currentHistoryLength = history.length;
+ if (historyHash.length == 0) {
+ historyHash[currentHistoryLength] = def;
+ var newloc = "#" + def;
+ window.location.replace(newloc);
+ } else {
+ //alert(historyHash[historyHash.length-1]);
+ }
+ setInterval(checkForUrlChange, 50);
+ }
+
+
+ if (browser.firefox || browser.opera)
+ {
+ var reg = new RegExp("#" + def + "$");
+ if (window.location.toString().match(reg)) {
+ } else {
+ var newloc ="#" + def;
+ window.location.replace(newloc);
+ }
+ setInterval(checkForUrlChange, 50);
+ }
+
+ },
+
+ /* Set the current browser URL; called from inside BrowserManager to propagate
+ * the application state out to the container.
+ */
+ setBrowserURL: function(flexAppUrl, objectId) {
+ if (browser.ie && typeof objectId != "undefined") {
+ currentObjectId = objectId;
+ }
+ //fromIframe = fromIframe || false;
+ //fromFlex = fromFlex || false;
+ //alert("setBrowserURL: " + flexAppUrl);
+ //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ;
+
+ var pos = document.location.href.indexOf('#');
+ var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href;
+ var newUrl = baseUrl + '#' + flexAppUrl;
+
+ if (document.location.href != newUrl && document.location.href + '#' != newUrl) {
+ currentHref = newUrl;
+ addHistoryEntry(baseUrl, newUrl, flexAppUrl);
+ currentHistoryLength = history.length;
+ }
+ },
+
+ browserURLChange: function(flexAppUrl) {
+ var objectId = null;
+ if (browser.ie && currentObjectId != null) {
+ objectId = currentObjectId;
+ }
+
+ if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {
+ var pl = getPlayers();
+ for (var i = 0; i < pl.length; i++) {
+ try {
+ pl[i].browserURLChange(flexAppUrl);
+ } catch(e) { }
+ }
+ } else {
+ try {
+ getPlayer(objectId).browserURLChange(flexAppUrl);
+ } catch(e) { }
+ }
+
+ currentObjectId = null;
+ },
+ getUserAgent: function() {
+ return navigator.userAgent;
+ },
+ getPlatform: function() {
+ return navigator.platform;
+ }
+
+ }
+
+})();
+
+// Initialization
+
+// Automated unit testing and other diagnostics
+
+function setURL(url)
+{
+ document.location.href = url;
+}
+
+function backButton()
+{
+ history.back();
+}
+
+function forwardButton()
+{
+ history.forward();
+}
+
+function goForwardOrBackInHistory(step)
+{
+ history.go(step);
+}
+
+//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });
+(function(i) {
+ var u =navigator.userAgent;var e=/*@cc_on!@*/false;
+ var st = setTimeout;
+ if(/webkit/i.test(u)){
+ st(function(){
+ var dr=document.readyState;
+ if(dr=="loaded"||dr=="complete"){i()}
+ else{st(arguments.callee,10);}},10);
+ } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){
+ document.addEventListener("DOMContentLoaded",i,false);
+ } else if(e){
+ (function(){
+ var t=document.createElement('doc:rdy');
+ try{t.doScroll('left');
+ i();t=null;
+ }catch(e){st(arguments.callee,0);}})();
+ } else{
+ window.onload=i;
+ }
+})( function() {BrowserHistory.initialize();} );
View
29 flash/3.4/html-template/history/historyFrame.html
@@ -0,0 +1,29 @@
+<html>
+ <head>
+ <META HTTP-EQUIV="Pragma" CONTENT="no-cache">
+ <META HTTP-EQUIV="Expires" CONTENT="-1">
+ </head>
+ <body>
+ <script>
+ function processUrl()
+ {
+
+ var pos = url.indexOf("?");
+ url = pos != -1 ? url.substr(pos + 1) : "";
+ if (!parent._ie_firstload) {
+ parent.BrowserHistory.setBrowserURL(url);
+ try {
+ parent.BrowserHistory.browserURLChange(url);
+ } catch(e) { }
+ } else {
+ parent._ie_firstload = false;
+ }
+ }
+
+ var url = document.location.href;
+ processUrl();
+ document.write(encodeURIComponent(url));
+ </script>
+ Hidden frame for Browser History support.
+ </body>
+</html>
View
108 flash/3.4/html-template/index.template.html
@@ -0,0 +1,108 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<!-- saved from url=(0014)about:internet -->
+<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
+ <!--
+ Smart developers always View Source.
+
+ This application was built using Adobe Flex, an open source framework
+ for building rich Internet applications that get delivered via the
+ Flash Player or to desktops via Adobe AIR.
+
+ Learn more about Flex at http://flex.org
+ // -->
+ <head>
+ <title>${title}</title>
+ <meta name="google" value="notranslate" />
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <!-- Include CSS to eliminate any default margins/padding and set the height of the html element and
+ the body element to 100%, because Firefox, or any Gecko based browser, interprets percentage as
+ the percentage of the height of its parent container, which has to be set explicitly. Fix for
+ Firefox 3.6 focus border issues. Initially, don't display flashContent div so it won't show
+ if JavaScript disabled.
+ -->
+ <style type="text/css" media="screen">
+ html, body { height:100%; }
+ body { margin:0; padding:0; overflow:auto; text-align:center;
+ background-color: ${bgcolor}; }
+ object:focus { outline:none; }
+ #flashContent { display:none; }
+ </style>
+
+ <!-- Enable Browser History by replacing useBrowserHistory tokens with two hyphens -->
+ <!-- BEGIN Browser History required section -->
+ <link rel="stylesheet" type="text/css" href="history/history.css" />
+ <script type="text/javascript" src="history/history.js"></script>
+ <!-- END Browser History required section -->
+
+ <script type="text/javascript" src="swfobject.js"></script>
+ <script type="text/javascript">
+ // For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection.
+ var swfVersionStr = "${version_major}.${version_minor}.${version_revision}";
+ // To use express install, set to playerProductInstall.swf, otherwise the empty string.
+ var xiSwfUrlStr = "playerProductInstall.swf";
+ var flashvars = {};
+ var params = {};
+ params.quality = "high";
+ params.bgcolor = "${bgcolor}";
+ params.allowscriptaccess = "sameDomain";
+ params.allowfullscreen = "true";
+ var attributes = {};
+ attributes.id = "${application}";
+ attributes.name = "${application}";
+ attributes.align = "middle";
+ swfobject.embedSWF(
+ "${swf}.swf", "flashContent",
+ "${width}", "${height}",
+ swfVersionStr, xiSwfUrlStr,
+ flashvars, params, attributes);
+ // JavaScript enabled so display the flashContent div in case it is not replaced with a swf object.
+ swfobject.createCSS("#flashContent", "display:block;text-align:left;");
+ </script>
+ </head>
+ <body>
+ <!-- SWFObject's dynamic embed method replaces this alternative HTML content with Flash content when enough
+ JavaScript and Flash plug-in support is available. The div is initially hidden so that it doesn't show
+ when JavaScript is disabled.
+ -->
+ <div id="flashContent">
+ <p>
+ To view this page ensure that Adobe Flash Player version
+ ${version_major}.${version_minor}.${version_revision} or greater is installed.
+ </p>
+ <script type="text/javascript">
+ var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://");
+ document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='"
+ + pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>" );
+ </script>
+ </div>
+
+ <noscript>
+ <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="${width}" height="${height}" id="${application}">
+ <param name="movie" value="${swf}.swf" />
+ <param name="quality" value="high" />
+ <param name="bgcolor" value="${bgcolor}" />
+ <param name="allowScriptAccess" value="sameDomain" />
+ <param name="allowFullScreen" value="true" />
+ <!--[if !IE]>-->
+ <object type="application/x-shockwave-flash" data="${swf}.swf" width="${width}" height="${height}">
+ <param name="quality" value="high" />
+ <param name="bgcolor" value="${bgcolor}" />
+ <param name="allowScriptAccess" value="sameDomain" />
+ <param name="allowFullScreen" value="true" />
+ <!--<![endif]-->
+ <!--[if gte IE 6]>-->
+ <p>
+ Either scripts and active content are not permitted to run or Adobe Flash Player version
+ ${version_major}.${version_minor}.${version_revision} or greater is not installed.
+ </p>
+ <!--<![endif]-->
+ <a href="http://www.adobe.com/go/getflashplayer">
+ <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />
+ </a>
+ <!--[if !IE]>-->
+ </object>
+ <!--<![endif]-->
+ </object>
+ </noscript>
+ </body>
+</html>
View
BIN  flash/3.4/html-template/playerProductInstall.swf
Binary file not shown
View
777 flash/3.4/html-template/swfobject.js
@@ -0,0 +1,777 @@
+/*! SWFObject v2.2 <http://code.google.com/p/swfobject/>
+ is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>
+*/
+
+var swfobject = function() {
+
+ var UNDEF = "undefined",
+ OBJECT = "object",
+ SHOCKWAVE_FLASH = "Shockwave Flash",
+ SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
+ FLASH_MIME_TYPE = "application/x-shockwave-flash",
+ EXPRESS_INSTALL_ID = "SWFObjectExprInst",
+ ON_READY_STATE_CHANGE = "onreadystatechange",
+
+ win = window,
+ doc = document,
+ nav = navigator,
+
+ plugin = false,
+ domLoadFnArr = [main],
+ regObjArr = [],
+ objIdArr = [],
+ listenersArr = [],
+ storedAltContent,
+ storedAltContentId,
+ storedCallbackFn,
+ storedCallbackObj,
+ isDomLoaded = false,
+ isExpressInstallActive = false,
+ dynamicStylesheet,
+ dynamicStylesheetMedia,
+ autoHideShow = true,
+
+ /* Centralized function for browser feature detection
+ - User agent string detection is only used when no good alternative is possible
+ - Is executed directly for optimal performance
+ */
+ ua = function() {
+ var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,
+ u = nav.userAgent.toLowerCase(),
+ p = nav.platform.toLowerCase(),
+ windows = p ? /win/.test(p) : /win/.test(u),
+ mac = p ? /mac/.test(p) : /mac/.test(u),
+ webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
+ ie = !+"\v1", // feature detection based on Andrea Giammarchi's solution: http://webreflection.blogspot.com/2009/01/32-bytes-to-know-if-your-browser-is-ie.html
+ playerVersion = [0,0,0],
+ d = null;
+ if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
+ d = nav.plugins[SHOCKWAVE_FLASH].description;
+ if (d && !(typeof nav.mimeTypes != UNDEF && nav.mimeTypes[FLASH_MIME_TYPE] && !nav.mimeTypes[FLASH_MIME_TYPE].enabledPlugin)) { // navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin indicates whether plug-ins are enabled or disabled in Safari 3+
+ plugin = true;
+ ie = false; // cascaded feature detection for Internet Explorer
+ d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
+ playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
+ playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
+ playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;
+ }
+ }
+ else if (typeof win.ActiveXObject != UNDEF) {
+ try {
+ var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
+ if (a) { // a will return null when ActiveX is disabled
+ d = a.GetVariable("$version");
+ if (d) {
+ ie = true; // cascaded feature detection for Internet Explorer
+ d = d.split(" ")[1].split(",");
+ playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
+ }
+ }
+ }
+ catch(e) {}
+ }
+ return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };
+ }(),
+
+ /* Cross-browser onDomLoad
+ - Will fire an event as soon as the DOM of a web page is loaded
+ - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/
+ - Regular onload serves as fallback
+ */
+ onDomLoad = function() {
+ if (!ua.w3) { return; }
+ if ((typeof doc.readyState != UNDEF && doc.readyState == "complete") || (typeof doc.readyState == UNDEF && (doc.getElementsByTagName("body")[0] || doc.body))) { // function is fired after onload, e.g. when script is inserted dynamically
+ callDomLoadFunctions();
+ }
+ if (!isDomLoaded) {
+ if (typeof doc.addEventListener != UNDEF) {
+ doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false);
+ }
+ if (ua.ie && ua.win) {
+ doc.attachEvent(ON_READY_STATE_CHANGE, function() {
+ if (doc.readyState == "complete") {
+ doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);
+ callDomLoadFunctions();
+ }
+ });
+ if (win == top) { // if not inside an iframe
+ (function(){
+ if (isDomLoaded) { return; }
+ try {
+ doc.documentElement.doScroll("left");
+ }
+ catch(e) {
+ setTimeout(arguments.callee, 0);
+ return;
+ }
+ callDomLoadFunctions();
+ })();
+ }
+ }
+ if (ua.wk) {
+ (function(){
+ if (isDomLoaded) { return; }
+ if (!/loaded|complete/.test(doc.readyState)) {
+ setTimeout(arguments.callee, 0);
+ return;
+ }
+ callDomLoadFunctions();
+ })();
+ }
+ addLoadEvent(callDomLoadFunctions);
+ }
+ }();
+
+ function callDomLoadFunctions() {
+ if (isDomLoaded) { return; }
+ try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early
+ var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));
+ t.parentNode.removeChild(t);
+ }
+ catch (e) { return; }
+ isDomLoaded = true;
+ var dl = domLoadFnArr.length;
+ for (var i = 0; i < dl; i++) {
+ domLoadFnArr[i]();
+ }
+ }
+
+ function addDomLoadEvent(fn) {
+ if (isDomLoaded) {
+ fn();
+ }
+ else {
+ domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
+ }
+ }
+
+ /* Cross-browser onload
+ - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
+ - Will fire an event as soon as a web page including all of its assets are loaded
+ */
+ function addLoadEvent(fn) {
+ if (typeof win.addEventListener != UNDEF) {
+ win.addEventListener("load", fn, false);
+ }
+ else if (typeof doc.addEventListener != UNDEF) {
+ doc.addEventListener("load", fn, false);
+ }
+ else if (typeof win.attachEvent != UNDEF) {
+ addListener(win, "onload", fn);
+ }
+ else if (typeof win.onload == "function") {
+ var fnOld = win.onload;
+ win.onload = function() {
+ fnOld();
+ fn();
+ };
+ }
+ else {
+ win.onload = fn;
+ }
+ }
+
+ /* Main function
+ - Will preferably execute onDomLoad, otherwise onload (as a fallback)
+ */
+ function main() {
+ if (plugin) {
+ testPlayerVersion();
+ }
+ else {
+ matchVersions();
+ }
+ }
+
+ /* Detect the Flash Player version for non-Internet Explorer browsers
+ - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:
+ a. Both release and build numbers can be detected
+ b. Avoid wrong descriptions by corrupt installers provided by Adobe
+ c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports
+ - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available
+ */
+ function testPlayerVersion() {
+ var b = doc.getElementsByTagName("body")[0];
+ var o = createElement(OBJECT);
+ o.setAttribute("type", FLASH_MIME_TYPE);
+ var t = b.appendChild(o);
+ if (t) {
+ var counter = 0;
+ (function(){
+ if (typeof t.GetVariable != UNDEF) {
+ var d = t.GetVariable("$version");
+ if (d) {
+ d = d.split(" ")[1].split(",");
+ ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
+ }
+ }
+ else if (counter < 10) {
+ counter++;
+ setTimeout(arguments.callee, 10);
+ return;
+ }
+ b.removeChild(o);
+ t = null;
+ matchVersions();
+ })();
+ }
+ else {
+ matchVersions();
+ }
+ }
+
+ /* Perform Flash Player and SWF version matching; static publishing only
+ */
+ function matchVersions() {
+ var rl = regObjArr.length;
+ if (rl > 0) {
+ for (var i = 0; i < rl; i++) { // for each registered object element
+ var id = regObjArr[i].id;
+ var cb = regObjArr[i].callbackFn;
+ var cbObj = {success:false, id:id};
+ if (ua.pv[0] > 0) {
+ var obj = getElementById(id);
+ if (obj) {
+ if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!
+ setVisibility(id, true);
+ if (cb) {
+ cbObj.success = true;
+ cbObj.ref = getObjectById(id);
+ cb(cbObj);
+ }
+ }
+ else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported
+ var att = {};
+ att.data = regObjArr[i].expressInstall;
+ att.width = obj.getAttribute("width") || "0";
+ att.height = obj.getAttribute("height") || "0";
+ if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); }
+ if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); }
+ // parse HTML object param element's name-value pairs
+ var par = {};
+ var p = obj.getElementsByTagName("param");
+ var pl = p.length;
+ for (var j = 0; j < pl; j++) {
+ if (p[j].getAttribute("name").toLowerCase() != "movie") {
+ par[p[j].getAttribute("name")] = p[j].getAttribute("value");
+ }
+ }
+ showExpressInstall(att, par, id, cb);
+ }
+ else { // Flash Player and SWF version mismatch or an older Webkit engine that ignores the HTML object element's nested param elements: display alternative content instead of SWF
+ displayAltContent(obj);
+ if (cb) { cb(cbObj); }
+ }
+ }
+ }
+ else { // if no Flash Player is installed or the fp version cannot be detected we let the HTML object element do its job (either show a SWF or alternative content)
+ setVisibility(id, true);
+ if (cb) {
+ var o = getObjectById(id); // test whether there is an HTML object element or not
+ if (o && typeof o.SetVariable != UNDEF) {
+ cbObj.success = true;
+ cbObj.ref = o;
+ }
+ cb(cbObj);
+ }
+ }
+ }
+ }
+ }
+
+ function getObjectById(objectIdStr) {
+ var r = null;
+ var o = getElementById(objectIdStr);
+ if (o && o.nodeName == "OBJECT") {
+ if (typeof o.SetVariable != UNDEF) {
+ r = o;
+ }
+ else {
+ var n = o.getElementsByTagName(OBJECT)[0];
+ if (n) {
+ r = n;
+ }
+ }
+ }
+ return r;
+ }
+
+ /* Requirements for Adobe Express Install
+ - only one instance can be active at a time
+ - fp 6.0.65 or higher
+ - Win/Mac OS only
+ - no Webkit engines older than version 312
+ */
+ function canExpressInstall() {
+ return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);
+ }
+
+ /* Show the Adobe Express Install dialog
+ - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
+ */
+ function showExpressInstall(att, par, replaceElemIdStr, callbackFn) {
+ isExpressInstallActive = true;
+ storedCallbackFn = callbackFn || null;
+ storedCallbackObj = {success:false, id:replaceElemIdStr};
+ var obj = getElementById(replaceElemIdStr);
+ if (obj) {
+ if (obj.nodeName == "OBJECT") { // static publishing
+ storedAltContent = abstractAltContent(obj);
+ storedAltContentId = null;
+ }
+ else { // dynamic publishing
+ storedAltContent = obj;
+ storedAltContentId = replaceElemIdStr;
+ }
+ att.id = EXPRESS_INSTALL_ID;
+ if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; }
+ if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; }
+ doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
+ var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
+ fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title;
+ if (typeof par.flashvars != UNDEF) {
+ par.flashvars += "&" + fv;
+ }
+ else {
+ par.flashvars = fv;
+ }
+ // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
+ // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
+ if (ua.ie && ua.win && obj.readyState != 4) {
+ var newObj = createElement("div");
+ replaceElemIdStr += "SWFObjectNew";
+ newObj.setAttribute("id", replaceElemIdStr);
+ obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf
+ obj.style.display = "none";
+ (function(){
+ if (obj.readyState == 4) {
+ obj.parentNode.removeChild(obj);
+ }
+ else {
+ setTimeout(arguments.callee, 10);
+ }
+ })();
+ }
+ createSWF(att, par, replaceElemIdStr);
+ }
+ }
+
+ /* Functions to abstract and display alternative content
+ */
+ function displayAltContent(obj) {
+ if (ua.ie && ua.win && obj.readyState != 4) {
+ // IE only: when a SWF is loading (AND: not available in cache) wait for the readyState of the object element to become 4 before removing it,
+ // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
+ var el = createElement("div");
+ obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content
+ el.parentNode.replaceChild(abstractAltContent(obj), el);
+ obj.style.display = "none";
+ (function(){
+ if (obj.readyState == 4) {
+ obj.parentNode.removeChild(obj);
+ }
+ else {
+ setTimeout(arguments.callee, 10);
+ }
+ })();
+ }
+ else {
+ obj.parentNode.replaceChild(abstractAltContent(obj), obj);
+ }
+ }
+
+ function abstractAltContent(obj) {
+ var ac = createElement("div");
+ if (ua.win && ua.ie) {
+ ac.innerHTML = obj.innerHTML;
+ }
+ else {
+ var nestedObj = obj.getElementsByTagName(OBJECT)[0];
+ if (nestedObj) {
+ var c = nestedObj.childNodes;
+ if (c) {
+ var cl = c.length;
+ for (var i = 0; i < cl; i++) {
+ if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {
+ ac.appendChild(c[i].cloneNode(true));
+ }
+ }
+ }
+ }
+ }
+ return ac;
+ }
+
+ /* Cross-browser dynamic SWF creation
+ */
+ function createSWF(attObj, parObj, id) {
+ var r, el = getElementById(id);
+ if (ua.wk && ua.wk < 312) { return r; }
+ if (el) {
+ if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
+ attObj.id = id;
+ }
+ if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML
+ var att = "";
+ for (var i in attObj) {
+ if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries
+ if (i.toLowerCase() == "data") {
+ parObj.movie = attObj[i];
+ }
+ else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+ att += ' class="' + attObj[i] + '"';
+ }
+ else if (i.toLowerCase() != "classid") {
+ att += ' ' + i + '="' + attObj[i] + '"';
+ }
+ }
+ }
+ var par = "";
+ for (var j in parObj) {
+ if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries
+ par += '<param name="' + j + '" value="' + parObj[j] + '" />';
+ }
+ }
+ el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
+ objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)
+ r = getElementById(attObj.id);
+ }
+ else { // well-behaving browsers
+ var o = createElement(OBJECT);
+ o.setAttribute("type", FLASH_MIME_TYPE);
+ for (var m in attObj) {
+ if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries
+ if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
+ o.setAttribute("class", attObj[m]);
+ }
+ else if (m.toLowerCase() != "classid") { // filter out IE specific attribute
+ o.setAttribute(m, attObj[m]);
+ }
+ }
+ }
+ for (var n in parObj) {
+ if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element
+ createObjParam(o, n, parObj[n]);
+ }
+ }
+ el.parentNode.replaceChild(o, el);
+ r = o;
+ }
+ }
+ return r;
+ }
+
+ function createObjParam(el, pName, pValue) {
+ var p = createElement("param");
+ p.setAttribute("name", pName);
+ p.setAttribute("value", pValue);
+ el.appendChild(p);
+ }
+
+ /* Cross-browser SWF removal
+ - Especially needed to safely and completely remove a SWF in Internet Explorer
+ */
+ function removeSWF(id) {
+ var obj = getElementById(id);
+ if (obj && obj.nodeName == "OBJECT") {
+ if (ua.ie && ua.win) {
+ obj.style.display = "none";
+ (function(){
+ if (obj.readyState == 4) {
+ removeObjectInIE(id);
+ }
+ else {
+ setTimeout(arguments.callee, 10);
+ }
+ })();
+ }
+ else {
+ obj.parentNode.removeChild(obj);
+ }
+ }
+ }
+
+ function removeObjectInIE(id) {
+ var obj = getElementById(id);
+ if (obj) {
+ for (var i in obj) {
+ if (typeof obj[i] == "function") {
+ obj[i] = null;
+ }
+ }
+ obj.parentNode.removeChild(obj);
+ }
+ }
+
+ /* Functions to optimize JavaScript compression
+ */
+ function getElementById(id) {
+ var el = null;
+ try {
+ el = doc.getElementById(id);
+ }
+ catch (e) {}
+ return el;
+ }
+
+ function createElement(el) {
+ return doc.createElement(el);
+ }
+
+ /* Updated attachEvent function for Internet Explorer
+ - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks
+ */
+ function addListener(target, eventType, fn) {
+ tar