wenjiegit

update master

正在显示 34 个修改的文件 包含 0 行增加3597 行删除
1 -<?xml version="1.0" encoding="UTF-8" standalone="no"?>  
2 -<actionScriptProperties analytics="false" mainApplicationPath="SrsBW.as" projectUUID="b75da3de-ec2d-4a7b-ba89-d35496849e78" version="10">  
3 - <compiler additionalCompilerArguments="-locale en_US" autoRSLOrdering="true" copyDependentFiles="true" fteInMXComponents="false" generateAccessible="true" htmlExpressInstall="true" htmlGenerate="true" htmlHistoryManagement="true" htmlPlayerVersionCheck="true" includeNetmonSwc="false" outputFolderPath="bin-debug" removeUnusedRSL="true" sourceFolderPath="src" strict="true" targetPlayerVersion="0.0.0" useApolloConfig="false" useDebugRSLSwfs="true" verifyDigests="true" warn="true">  
4 - <compilerSourcePath/>  
5 - <libraryPath defaultLinkType="0">  
6 - <libraryPathEntry kind="4" path="">  
7 - <excludedEntries>  
8 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation_charts.swc" useDefaultLinkType="false"/>  
9 - <libraryPathEntry kind="1" linkType="1" path="${PROJECT_FRAMEWORKS}/locale/{locale}"/>  
10 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/advancedgrids.swc" useDefaultLinkType="false"/>  
11 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/qtp.swc" useDefaultLinkType="false"/>  
12 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation_air.swc" useDefaultLinkType="false"/>  
13 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/charts.swc" useDefaultLinkType="false"/>  
14 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/framework.swc" useDefaultLinkType="false"/>  
15 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/mx/mx.swc" useDefaultLinkType="false"/>  
16 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/netmon.swc" useDefaultLinkType="false"/>  
17 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/spark.swc" useDefaultLinkType="false"/>  
18 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/sparkskins.swc" useDefaultLinkType="false"/>  
19 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/rpc.swc" useDefaultLinkType="false"/>  
20 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/datavisualization.swc" useDefaultLinkType="false"/>  
21 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/qtp_air.swc" useDefaultLinkType="false"/>  
22 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/videoPlayer.swc" useDefaultLinkType="false"/>  
23 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/spark_dmv.swc" useDefaultLinkType="false"/>  
24 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation.swc" useDefaultLinkType="false"/>  
25 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation_dmv.swc" useDefaultLinkType="false"/>  
26 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/flash-integration.swc" useDefaultLinkType="false"/>  
27 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation_flashflexkit.swc" useDefaultLinkType="false"/>  
28 - <libraryPathEntry kind="3" linkType="1" path="${PROJECT_FRAMEWORKS}/libs/automation_agent.swc" useDefaultLinkType="false"/>  
29 - </excludedEntries>  
30 - </libraryPathEntry>  
31 - <libraryPathEntry kind="3" linkType="1" path="FlashCS5UI.swc" useDefaultLinkType="false"/>  
32 - <libraryPathEntry kind="3" linkType="1" path="Video.swc" useDefaultLinkType="false"/>  
33 - </libraryPath>  
34 - <sourceAttachmentPath/>  
35 - </compiler>  
36 - <applications>  
37 - <application path="SrsBW.as"/>  
38 - </applications>  
39 - <modules/>  
40 - <buildCSSFiles/>  
41 - <flashCatalyst validateFlashCatalystCompatibility="false"/>  
42 -</actionScriptProperties>  
1 -<?xml version="1.0" encoding="UTF-8"?>  
2 -<projectDescription>  
3 - <name>SrsBW</name>  
4 - <comment></comment>  
5 - <projects>  
6 - </projects>  
7 - <buildSpec>  
8 - <buildCommand>  
9 - <name>com.adobe.flexbuilder.project.flexbuilder</name>  
10 - <arguments>  
11 - </arguments>  
12 - </buildCommand>  
13 - </buildSpec>  
14 - <natures>  
15 - <nature>com.adobe.flexbuilder.project.actionscriptnature</nature>  
16 - </natures>  
17 -</projectDescription>  
1 -#Thu Dec 19 02:10:00 CST 2013  
2 -eclipse.preferences.version=1  
3 -encoding/<project>=utf-8  
不能预览此文件类型
1 -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
2 -<!-- saved from url=(0014)about:internet -->  
3 -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">  
4 - <!--  
5 - Smart developers always View Source.  
6 -  
7 - This application was built using Adobe Flex, an open source framework  
8 - for building rich Internet applications that get delivered via the  
9 - Flash Player or to desktops via Adobe AIR.  
10 -  
11 - Learn more about Flex at http://flex.org  
12 - // -->  
13 - <head>  
14 - <title></title>  
15 - <meta name="google" value="notranslate" />  
16 - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
17 - <!-- Include CSS to eliminate any default margins/padding and set the height of the html element and  
18 - the body element to 100%, because Firefox, or any Gecko based browser, interprets percentage as  
19 - the percentage of the height of its parent container, which has to be set explicitly. Fix for  
20 - Firefox 3.6 focus border issues. Initially, don't display flashContent div so it won't show  
21 - if JavaScript disabled.  
22 - -->  
23 - <style type="text/css" media="screen">  
24 - html, body { height:100%; }  
25 - body { margin:0; padding:0; overflow:auto; text-align:center;  
26 - background-color: #ffffff; }  
27 - object:focus { outline:none; }  
28 - #flashContent { display:none; }  
29 - </style>  
30 -  
31 - <!-- Enable Browser History by replacing useBrowserHistory tokens with two hyphens -->  
32 - <!-- BEGIN Browser History required section -->  
33 - <link rel="stylesheet" type="text/css" href="history/history.css" />  
34 - <script type="text/javascript" src="history/history.js"></script>  
35 - <!-- END Browser History required section -->  
36 -  
37 - <script type="text/javascript" src="swfobject.js"></script>  
38 - <script type="text/javascript">  
39 - // For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection.  
40 - var swfVersionStr = "11.1.0";  
41 - // To use express install, set to playerProductInstall.swf, otherwise the empty string.  
42 - var xiSwfUrlStr = "playerProductInstall.swf";  
43 - var flashvars = {};  
44 - var params = {};  
45 - params.quality = "high";  
46 - params.bgcolor = "#ffffff";  
47 - params.allowscriptaccess = "sameDomain";  
48 - params.allowfullscreen = "true";  
49 - var attributes = {};  
50 - attributes.id = "SrsBW";  
51 - attributes.name = "SrsBW";  
52 - attributes.align = "middle";  
53 - swfobject.embedSWF(  
54 - "SrsBW.swf", "flashContent",  
55 - "100%", "100%",  
56 - swfVersionStr, xiSwfUrlStr,  
57 - flashvars, params, attributes);  
58 - // JavaScript enabled so display the flashContent div in case it is not replaced with a swf object.  
59 - swfobject.createCSS("#flashContent", "display:block;text-align:left;");  
60 - </script>  
61 - </head>  
62 - <body>  
63 - <!-- SWFObject's dynamic embed method replaces this alternative HTML content with Flash content when enough  
64 - JavaScript and Flash plug-in support is available. The div is initially hidden so that it doesn't show  
65 - when JavaScript is disabled.  
66 - -->  
67 - <div id="flashContent">  
68 - <p>  
69 - To view this page ensure that Adobe Flash Player version  
70 - 11.1.0 or greater is installed.  
71 - </p>  
72 - <script type="text/javascript">  
73 - var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://");  
74 - document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='"  
75 - + pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>" );  
76 - </script>  
77 - </div>  
78 -  
79 - <noscript>  
80 - <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%" id="SrsBW">  
81 - <param name="movie" value="SrsBW.swf" />  
82 - <param name="quality" value="high" />  
83 - <param name="bgcolor" value="#ffffff" />  
84 - <param name="allowScriptAccess" value="sameDomain" />  
85 - <param name="allowFullScreen" value="true" />  
86 - <!--[if !IE]>-->  
87 - <object type="application/x-shockwave-flash" data="SrsBW.swf" width="100%" height="100%">  
88 - <param name="quality" value="high" />  
89 - <param name="bgcolor" value="#ffffff" />  
90 - <param name="allowScriptAccess" value="sameDomain" />  
91 - <param name="allowFullScreen" value="true" />  
92 - <!--<![endif]-->  
93 - <!--[if gte IE 6]>-->  
94 - <p>  
95 - Either scripts and active content are not permitted to run or Adobe Flash Player version  
96 - 11.1.0 or greater is not installed.  
97 - </p>  
98 - <!--<![endif]-->  
99 - <a href="http://www.adobe.com/go/getflashplayer">  
100 - <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />  
101 - </a>  
102 - <!--[if !IE]>-->  
103 - </object>  
104 - <!--<![endif]-->  
105 - </object>  
106 - </noscript>  
107 - </body>  
108 -</html>  
1 -/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */  
2 -  
3 -#ie_historyFrame { width: 0px; height: 0px; display:none }  
4 -#firefox_anchorDiv { width: 0px; height: 0px; display:none }  
5 -#safari_formDiv { width: 0px; height: 0px; display:none }  
6 -#safari_rememberDiv { width: 0px; height: 0px; display:none }  
1 -BrowserHistoryUtils = {  
2 - addEvent: function(elm, evType, fn, useCapture) {  
3 - useCapture = useCapture || false;  
4 - if (elm.addEventListener) {  
5 - elm.addEventListener(evType, fn, useCapture);  
6 - return true;  
7 - }  
8 - else if (elm.attachEvent) {  
9 - var r = elm.attachEvent('on' + evType, fn);  
10 - return r;  
11 - }  
12 - else {  
13 - elm['on' + evType] = fn;  
14 - }  
15 - }  
16 -}  
17 -  
18 -BrowserHistory = (function() {  
19 - // type of browser  
20 - var browser = {  
21 - ie: false,  
22 - ie8: false,  
23 - firefox: false,  
24 - safari: false,  
25 - opera: false,  
26 - version: -1  
27 - };  
28 -  
29 - // Default app state URL to use when no fragment ID present  
30 - var defaultHash = '';  
31 -  
32 - // Last-known app state URL  
33 - var currentHref = document.location.href;  
34 -  
35 - // Initial URL (used only by IE)  
36 - var initialHref = document.location.href;  
37 -  
38 - // Initial URL (used only by IE)  
39 - var initialHash = document.location.hash;  
40 -  
41 - // History frame source URL prefix (used only by IE)  
42 - var historyFrameSourcePrefix = 'history/historyFrame.html?';  
43 -  
44 - // History maintenance (used only by Safari)  
45 - var currentHistoryLength = -1;  
46 -  
47 - // Flag to denote the existence of onhashchange  
48 - var browserHasHashChange = false;  
49 -  
50 - var historyHash = [];  
51 -  
52 - var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash);  
53 -  
54 - var backStack = [];  
55 - var forwardStack = [];  
56 -  
57 - var currentObjectId = null;  
58 -  
59 - //UserAgent detection  
60 - var useragent = navigator.userAgent.toLowerCase();  
61 -  
62 - if (useragent.indexOf("opera") != -1) {  
63 - browser.opera = true;  
64 - } else if (useragent.indexOf("msie") != -1) {  
65 - browser.ie = true;  
66 - browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));  
67 - if (browser.version == 8)  
68 - {  
69 - browser.ie = false;  
70 - browser.ie8 = true;  
71 - }  
72 - } else if (useragent.indexOf("safari") != -1) {  
73 - browser.safari = true;  
74 - browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7));  
75 - } else if (useragent.indexOf("gecko") != -1) {  
76 - browser.firefox = true;  
77 - }  
78 -  
79 - if (browser.ie == true && browser.version == 7) {  
80 - window["_ie_firstload"] = false;  
81 - }  
82 -  
83 - function hashChangeHandler()  
84 - {  
85 - currentHref = document.location.href;  
86 - var flexAppUrl = getHash();  
87 - //ADR: to fix multiple  
88 - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {  
89 - var pl = getPlayers();  
90 - for (var i = 0; i < pl.length; i++) {  
91 - pl[i].browserURLChange(flexAppUrl);  
92 - }  
93 - } else {  
94 - getPlayer().browserURLChange(flexAppUrl);  
95 - }  
96 - }  
97 -  
98 - // Accessor functions for obtaining specific elements of the page.  
99 - function getHistoryFrame()  
100 - {  
101 - return document.getElementById('ie_historyFrame');  
102 - }  
103 -  
104 - function getFormElement()  
105 - {  
106 - return document.getElementById('safari_formDiv');  
107 - }  
108 -  
109 - function getRememberElement()  
110 - {  
111 - return document.getElementById("safari_remember_field");  
112 - }  
113 -  
114 - // Get the Flash player object for performing ExternalInterface callbacks.  
115 - // Updated for changes to SWFObject2.  
116 - function getPlayer(id) {  
117 - var i;  
118 -  
119 - if (id && document.getElementById(id)) {  
120 - var r = document.getElementById(id);  
121 - if (typeof r.SetVariable != "undefined") {  
122 - return r;  
123 - }  
124 - else {  
125 - var o = r.getElementsByTagName("object");  
126 - var e = r.getElementsByTagName("embed");  
127 - for (i = 0; i < o.length; i++) {  
128 - if (typeof o[i].browserURLChange != "undefined")  
129 - return o[i];  
130 - }  
131 - for (i = 0; i < e.length; i++) {  
132 - if (typeof e[i].browserURLChange != "undefined")  
133 - return e[i];  
134 - }  
135 - }  
136 - }  
137 - else {  
138 - var o = document.getElementsByTagName("object");  
139 - var e = document.getElementsByTagName("embed");  
140 - for (i = 0; i < e.length; i++) {  
141 - if (typeof e[i].browserURLChange != "undefined")  
142 - {  
143 - return e[i];  
144 - }  
145 - }  
146 - for (i = 0; i < o.length; i++) {  
147 - if (typeof o[i].browserURLChange != "undefined")  
148 - {  
149 - return o[i];  
150 - }  
151 - }  
152 - }  
153 - return undefined;  
154 - }  
155 -  
156 - function getPlayers() {  
157 - var i;  
158 - var players = [];  
159 - if (players.length == 0) {  
160 - var tmp = document.getElementsByTagName('object');  
161 - for (i = 0; i < tmp.length; i++)  
162 - {  
163 - if (typeof tmp[i].browserURLChange != "undefined")  
164 - players.push(tmp[i]);  
165 - }  
166 - }  
167 - if (players.length == 0 || players[0].object == null) {  
168 - var tmp = document.getElementsByTagName('embed');  
169 - for (i = 0; i < tmp.length; i++)  
170 - {  
171 - if (typeof tmp[i].browserURLChange != "undefined")  
172 - players.push(tmp[i]);  
173 - }  
174 - }  
175 - return players;  
176 - }  
177 -  
178 - function getIframeHash() {  
179 - var doc = getHistoryFrame().contentWindow.document;  
180 - var hash = String(doc.location.search);  
181 - if (hash.length == 1 && hash.charAt(0) == "?") {  
182 - hash = "";  
183 - }  
184 - else if (hash.length >= 2 && hash.charAt(0) == "?") {  
185 - hash = hash.substring(1);  
186 - }  
187 - return hash;  
188 - }  
189 -  
190 - /* Get the current location hash excluding the '#' symbol. */  
191 - function getHash() {  
192 - // It would be nice if we could use document.location.hash here,  
193 - // but it's faulty sometimes.  
194 - var idx = document.location.href.indexOf('#');  
195 - return (idx >= 0) ? document.location.href.substr(idx+1) : '';  
196 - }  
197 -  
198 - /* Get the current location hash excluding the '#' symbol. */  
199 - function setHash(hash) {  
200 - // It would be nice if we could use document.location.hash here,  
201 - // but it's faulty sometimes.  
202 - if (hash == '') hash = '#'  
203 - document.location.hash = hash;  
204 - }  
205 -  
206 - function createState(baseUrl, newUrl, flexAppUrl) {  
207 - return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null };  
208 - }  
209 -  
210 - /* Add a history entry to the browser.  
211 - * baseUrl: the portion of the location prior to the '#'  
212 - * newUrl: the entire new URL, including '#' and following fragment  
213 - * flexAppUrl: the portion of the location following the '#' only  
214 - */  
215 - function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {  
216 -  
217 - //delete all the history entries  
218 - forwardStack = [];  
219 -  
220 - if (browser.ie) {  
221 - //Check to see if we are being asked to do a navigate for the first  
222 - //history entry, and if so ignore, because it's coming from the creation  
223 - //of the history iframe  
224 - if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) {  
225 - currentHref = initialHref;  
226 - return;  
227 - }  
228 - if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) {  
229 - newUrl = baseUrl + '#' + defaultHash;  
230 - flexAppUrl = defaultHash;  
231 - } else {  
232 - // for IE, tell the history frame to go somewhere without a '#'  
233 - // in order to get this entry into the browser history.  
234 - getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl;  
235 - }  
236 - setHash(flexAppUrl);  
237 - } else {  
238 -  
239 - //ADR  
240 - if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {  
241 - initialState = createState(baseUrl, newUrl, flexAppUrl);  
242 - } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {  
243 - backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);  
244 - }  
245 -  
246 - if (browser.safari && !browserHasHashChange) {  
247 - // for Safari, submit a form whose action points to the desired URL  
248 - if (browser.version <= 419.3) {  
249 - var file = window.location.pathname.toString();  
250 - file = file.substring(file.lastIndexOf("/")+1);  
251 - getFormElement().innerHTML = '<form name="historyForm" action="'+file+'#' + flexAppUrl + '" method="GET"></form>';  
252 - //get the current elements and add them to the form  
253 - var qs = window.location.search.substring(1);  
254 - var qs_arr = qs.split("&");  
255 - for (var i = 0; i < qs_arr.length; i++) {  
256 - var tmp = qs_arr[i].split("=");  
257 - var elem = document.createElement("input");  
258 - elem.type = "hidden";  
259 - elem.name = tmp[0];  
260 - elem.value = tmp[1];  
261 - document.forms.historyForm.appendChild(elem);  
262 - }  
263 - document.forms.historyForm.submit();  
264 - } else {  
265 - top.location.hash = flexAppUrl;  
266 - }  
267 - // We also have to maintain the history by hand for Safari  
268 - historyHash[history.length] = flexAppUrl;  
269 - _storeStates();  
270 - } else {  
271 - // Otherwise, just tell the browser to go there  
272 - setHash(flexAppUrl);  
273 - }  
274 - }  
275 - backStack.push(createState(baseUrl, newUrl, flexAppUrl));  
276 - }  
277 -  
278 - function _storeStates() {  
279 - if (browser.safari) {  
280 - getRememberElement().value = historyHash.join(",");  
281 - }  
282 - }  
283 -  
284 - function handleBackButton() {  
285 - //The "current" page is always at the top of the history stack.  
286 - var current = backStack.pop();  
287 - if (!current) { return; }  
288 - var last = backStack[backStack.length - 1];  
289 - if (!last && backStack.length == 0){  
290 - last = initialState;  
291 - }  
292 - forwardStack.push(current);  
293 - }  
294 -  
295 - function handleForwardButton() {  
296 - //summary: private method. Do not call this directly.  
297 -  
298 - var last = forwardStack.pop();  
299 - if (!last) { return; }  
300 - backStack.push(last);  
301 - }  
302 -  
303 - function handleArbitraryUrl() {  
304 - //delete all the history entries  
305 - forwardStack = [];  
306 - }  
307 -  
308 - /* Called periodically to poll to see if we need to detect navigation that has occurred */  
309 - function checkForUrlChange() {  
310 -  
311 - if (browser.ie) {  
312 - if (currentHref != document.location.href && currentHref + '#' != document.location.href) {  
313 - //This occurs when the user has navigated to a specific URL  
314 - //within the app, and didn't use browser back/forward  
315 - //IE seems to have a bug where it stops updating the URL it  
316 - //shows the end-user at this point, but programatically it  
317 - //appears to be correct. Do a full app reload to get around  
318 - //this issue.  
319 - if (browser.version < 7) {  
320 - currentHref = document.location.href;  
321 - document.location.reload();  
322 - } else {  
323 - if (getHash() != getIframeHash()) {  
324 - // this.iframe.src = this.blankURL + hash;  
325 - var sourceToSet = historyFrameSourcePrefix + getHash();  
326 - getHistoryFrame().src = sourceToSet;  
327 - currentHref = document.location.href;  
328 - }  
329 - }  
330 - }  
331 - }  
332 -  
333 - if (browser.safari && !browserHasHashChange) {  
334 - // For Safari, we have to check to see if history.length changed.  
335 - if (currentHistoryLength >= 0 && history.length != currentHistoryLength) {  
336 - //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|"));  
337 - var flexAppUrl = getHash();  
338 - if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */)  
339 - {  
340 - // If it did change and we're running Safari 3.x or earlier,  
341 - // then we have to look the old state up in our hand-maintained  
342 - // array since document.location.hash won't have changed,  
343 - // then call back into BrowserManager.  
344 - currentHistoryLength = history.length;  
345 - flexAppUrl = historyHash[currentHistoryLength];  
346 - }  
347 -  
348 - //ADR: to fix multiple  
349 - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {  
350 - var pl = getPlayers();  
351 - for (var i = 0; i < pl.length; i++) {  
352 - pl[i].browserURLChange(flexAppUrl);  
353 - }  
354 - } else {  
355 - getPlayer().browserURLChange(flexAppUrl);  
356 - }  
357 - _storeStates();  
358 - }  
359 - }  
360 - if (browser.firefox && !browserHasHashChange) {  
361 - if (currentHref != document.location.href) {  
362 - var bsl = backStack.length;  
363 -  
364 - var urlActions = {  
365 - back: false,  
366 - forward: false,  
367 - set: false  
368 - }  
369 -  
370 - if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) {  
371 - urlActions.back = true;  
372 - // FIXME: could this ever be a forward button?  
373 - // we can't clear it because we still need to check for forwards. Ugg.  
374 - // clearInterval(this.locationTimer);  
375 - handleBackButton();  
376 - }  
377 -  
378 - // first check to see if we could have gone forward. We always halt on  
379 - // a no-hash item.  
380 - if (forwardStack.length > 0) {  
381 - if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) {  
382 - urlActions.forward = true;  
383 - handleForwardButton();  
384 - }  
385 - }  
386 -  
387 - // ok, that didn't work, try someplace back in the history stack  
388 - if ((bsl >= 2) && (backStack[bsl - 2])) {  
389 - if (backStack[bsl - 2].flexAppUrl == getHash()) {  
390 - urlActions.back = true;  
391 - handleBackButton();  
392 - }  
393 - }  
394 -  
395 - if (!urlActions.back && !urlActions.forward) {  
396 - var foundInStacks = {  
397 - back: -1,  
398 - forward: -1  
399 - }  
400 -  
401 - for (var i = 0; i < backStack.length; i++) {  
402 - if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {  
403 - arbitraryUrl = true;  
404 - foundInStacks.back = i;  
405 - }  
406 - }  
407 - for (var i = 0; i < forwardStack.length; i++) {  
408 - if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {  
409 - arbitraryUrl = true;  
410 - foundInStacks.forward = i;  
411 - }  
412 - }  
413 - handleArbitraryUrl();  
414 - }  
415 -  
416 - // Firefox changed; do a callback into BrowserManager to tell it.  
417 - currentHref = document.location.href;  
418 - var flexAppUrl = getHash();  
419 - //ADR: to fix multiple  
420 - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {  
421 - var pl = getPlayers();  
422 - for (var i = 0; i < pl.length; i++) {  
423 - pl[i].browserURLChange(flexAppUrl);  
424 - }  
425 - } else {  
426 - getPlayer().browserURLChange(flexAppUrl);  
427 - }  
428 - }  
429 - }  
430 - }  
431 -  
432 - var _initialize = function () {  
433 -  
434 - browserHasHashChange = ("onhashchange" in document.body);  
435 -  
436 - if (browser.ie)  
437 - {  
438 - var scripts = document.getElementsByTagName('script');  
439 - for (var i = 0, s; s = scripts[i]; i++) {  
440 - if (s.src.indexOf("history.js") > -1) {  
441 - var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html");  
442 - }  
443 - }  
444 - historyFrameSourcePrefix = iframe_location + "?";  
445 - var src = historyFrameSourcePrefix;  
446 -  
447 - var iframe = document.createElement("iframe");  
448 - iframe.id = 'ie_historyFrame';  
449 - iframe.name = 'ie_historyFrame';  
450 - iframe.src = 'javascript:false;';  
451 -  
452 - try {  
453 - document.body.appendChild(iframe);  
454 - } catch(e) {  
455 - setTimeout(function() {  
456 - document.body.appendChild(iframe);  
457 - }, 0);  
458 - }  
459 - }  
460 -  
461 - if (browser.safari && !browserHasHashChange)  
462 - {  
463 - var rememberDiv = document.createElement("div");  
464 - rememberDiv.id = 'safari_rememberDiv';  
465 - document.body.appendChild(rememberDiv);  
466 - rememberDiv.innerHTML = '<input type="text" id="safari_remember_field" style="width: 500px;">';  
467 -  
468 - var formDiv = document.createElement("div");  
469 - formDiv.id = 'safari_formDiv';  
470 - document.body.appendChild(formDiv);  
471 -  
472 - var reloader_content = document.createElement('div');  
473 - reloader_content.id = 'safarireloader';  
474 - var scripts = document.getElementsByTagName('script');  
475 - for (var i = 0, s; s = scripts[i]; i++) {  
476 - if (s.src.indexOf("history.js") > -1) {  
477 - html = (new String(s.src)).replace(".js", ".html");  
478 - }  
479 - }  
480 - reloader_content.innerHTML = '<iframe id="safarireloader-iframe" src="about:blank" frameborder="no" scrolling="no"></iframe>';  
481 - document.body.appendChild(reloader_content);  
482 - reloader_content.style.position = 'absolute';  
483 - reloader_content.style.left = reloader_content.style.top = '-9999px';  
484 - iframe = reloader_content.getElementsByTagName('iframe')[0];  
485 -  
486 - if (document.getElementById("safari_remember_field").value != "" ) {  
487 - historyHash = document.getElementById("safari_remember_field").value.split(",");  
488 - }  
489 - }  
490 -  
491 - if (browserHasHashChange)  
492 - document.body.onhashchange = hashChangeHandler;  
493 - }  
494 -  
495 - return {  
496 - historyHash: historyHash,  
497 - backStack: function() { return backStack; },  
498 - forwardStack: function() { return forwardStack },  
499 - getPlayer: getPlayer,  
500 - initialize: function(src) {  
501 - _initialize(src);  
502 - },  
503 - setURL: function(url) {  
504 - document.location.href = url;  
505 - },  
506 - getURL: function() {  
507 - return document.location.href;  
508 - },  
509 - getTitle: function() {  
510 - return document.title;  
511 - },  
512 - setTitle: function(title) {  
513 - try {  
514 - backStack[backStack.length - 1].title = title;  
515 - } catch(e) { }  
516 - //if on safari, set the title to be the empty string.  
517 - if (browser.safari) {  
518 - if (title == "") {  
519 - try {  
520 - var tmp = window.location.href.toString();  
521 - title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#"));  
522 - } catch(e) {  
523 - title = "";  
524 - }  
525 - }  
526 - }  
527 - document.title = title;  
528 - },  
529 - setDefaultURL: function(def)  
530 - {  
531 - defaultHash = def;  
532 - def = getHash();  
533 - //trailing ? is important else an extra frame gets added to the history  
534 - //when navigating back to the first page. Alternatively could check  
535 - //in history frame navigation to compare # and ?.  
536 - if (browser.ie)  
537 - {  
538 - window['_ie_firstload'] = true;  
539 - var sourceToSet = historyFrameSourcePrefix + def;  
540 - var func = function() {  
541 - getHistoryFrame().src = sourceToSet;  
542 - window.location.replace("#" + def);  
543 - setInterval(checkForUrlChange, 50);  
544 - }  
545 - try {  
546 - func();  
547 - } catch(e) {  
548 - window.setTimeout(function() { func(); }, 0);  
549 - }  
550 - }  
551 -  
552 - if (browser.safari)  
553 - {  
554 - currentHistoryLength = history.length;  
555 - if (historyHash.length == 0) {  
556 - historyHash[currentHistoryLength] = def;  
557 - var newloc = "#" + def;  
558 - window.location.replace(newloc);  
559 - } else {  
560 - //alert(historyHash[historyHash.length-1]);  
561 - }  
562 - setInterval(checkForUrlChange, 50);  
563 - }  
564 -  
565 -  
566 - if (browser.firefox || browser.opera)  
567 - {  
568 - var reg = new RegExp("#" + def + "$");  
569 - if (window.location.toString().match(reg)) {  
570 - } else {  
571 - var newloc ="#" + def;  
572 - window.location.replace(newloc);  
573 - }  
574 - setInterval(checkForUrlChange, 50);  
575 - }  
576 -  
577 - },  
578 -  
579 - /* Set the current browser URL; called from inside BrowserManager to propagate  
580 - * the application state out to the container.  
581 - */  
582 - setBrowserURL: function(flexAppUrl, objectId) {  
583 - if (browser.ie && typeof objectId != "undefined") {  
584 - currentObjectId = objectId;  
585 - }  
586 - //fromIframe = fromIframe || false;  
587 - //fromFlex = fromFlex || false;  
588 - //alert("setBrowserURL: " + flexAppUrl);  
589 - //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ;  
590 -  
591 - var pos = document.location.href.indexOf('#');  
592 - var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href;  
593 - var newUrl = baseUrl + '#' + flexAppUrl;  
594 -  
595 - if (document.location.href != newUrl && document.location.href + '#' != newUrl) {  
596 - currentHref = newUrl;  
597 - addHistoryEntry(baseUrl, newUrl, flexAppUrl);  
598 - currentHistoryLength = history.length;  
599 - }  
600 - },  
601 -  
602 - browserURLChange: function(flexAppUrl) {  
603 - var objectId = null;  
604 - if (browser.ie && currentObjectId != null) {  
605 - objectId = currentObjectId;  
606 - }  
607 -  
608 - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {  
609 - var pl = getPlayers();  
610 - for (var i = 0; i < pl.length; i++) {  
611 - try {  
612 - pl[i].browserURLChange(flexAppUrl);  
613 - } catch(e) { }  
614 - }  
615 - } else {  
616 - try {  
617 - getPlayer(objectId).browserURLChange(flexAppUrl);  
618 - } catch(e) { }  
619 - }  
620 -  
621 - currentObjectId = null;  
622 - },  
623 - getUserAgent: function() {  
624 - return navigator.userAgent;  
625 - },  
626 - getPlatform: function() {  
627 - return navigator.platform;  
628 - }  
629 -  
630 - }  
631 -  
632 -})();  
633 -  
634 -// Initialization  
635 -  
636 -// Automated unit testing and other diagnostics  
637 -  
638 -function setURL(url)  
639 -{  
640 - document.location.href = url;  
641 -}  
642 -  
643 -function backButton()  
644 -{  
645 - history.back();  
646 -}  
647 -  
648 -function forwardButton()  
649 -{  
650 - history.forward();  
651 -}  
652 -  
653 -function goForwardOrBackInHistory(step)  
654 -{  
655 - history.go(step);  
656 -}  
657 -  
658 -//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });  
659 -(function(i) {  
660 - var u =navigator.userAgent;var e=/*@cc_on!@*/false;  
661 - var st = setTimeout;  
662 - if(/webkit/i.test(u)){  
663 - st(function(){  
664 - var dr=document.readyState;  
665 - if(dr=="loaded"||dr=="complete"){i()}  
666 - else{st(arguments.callee,10);}},10);  
667 - } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){  
668 - document.addEventListener("DOMContentLoaded",i,false);  
669 - } else if(e){  
670 - (function(){  
671 - var t=document.createElement('doc:rdy');  
672 - try{t.doScroll('left');  
673 - i();t=null;  
674 - }catch(e){st(arguments.callee,0);}})();  
675 - } else{  
676 - window.onload=i;  
677 - }  
678 -})( function() {BrowserHistory.initialize();} );  
1 -<html>  
2 - <head>  
3 - <META HTTP-EQUIV="Pragma" CONTENT="no-cache">  
4 - <META HTTP-EQUIV="Expires" CONTENT="-1">  
5 - </head>  
6 - <body>  
7 - <script>  
8 - function processUrl()  
9 - {  
10 -  
11 - var pos = url.indexOf("?");  
12 - url = pos != -1 ? url.substr(pos + 1) : "";  
13 - if (!parent._ie_firstload) {  
14 - parent.BrowserHistory.setBrowserURL(url);  
15 - try {  
16 - parent.BrowserHistory.browserURLChange(url);  
17 - } catch(e) { }  
18 - } else {  
19 - parent._ie_firstload = false;  
20 - }  
21 - }  
22 -  
23 - var url = document.location.href;  
24 - processUrl();  
25 - document.write(encodeURIComponent(url));  
26 - </script>  
27 - Hidden frame for Browser History support.  
28 - </body>  
29 -</html>  
1 -/*! SWFObject v2.2 <http://code.google.com/p/swfobject/>  
2 - is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>  
3 -*/  
4 -  
5 -var swfobject = function() {  
6 -  
7 - var UNDEF = "undefined",  
8 - OBJECT = "object",  
9 - SHOCKWAVE_FLASH = "Shockwave Flash",  
10 - SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",  
11 - FLASH_MIME_TYPE = "application/x-shockwave-flash",  
12 - EXPRESS_INSTALL_ID = "SWFObjectExprInst",  
13 - ON_READY_STATE_CHANGE = "onreadystatechange",  
14 -  
15 - win = window,  
16 - doc = document,  
17 - nav = navigator,  
18 -  
19 - plugin = false,  
20 - domLoadFnArr = [main],  
21 - regObjArr = [],  
22 - objIdArr = [],  
23 - listenersArr = [],  
24 - storedAltContent,  
25 - storedAltContentId,  
26 - storedCallbackFn,  
27 - storedCallbackObj,  
28 - isDomLoaded = false,  
29 - isExpressInstallActive = false,  
30 - dynamicStylesheet,  
31 - dynamicStylesheetMedia,  
32 - autoHideShow = true,  
33 -  
34 - /* Centralized function for browser feature detection  
35 - - User agent string detection is only used when no good alternative is possible  
36 - - Is executed directly for optimal performance  
37 - */  
38 - ua = function() {  
39 - var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,  
40 - u = nav.userAgent.toLowerCase(),  
41 - p = nav.platform.toLowerCase(),  
42 - windows = p ? /win/.test(p) : /win/.test(u),  
43 - mac = p ? /mac/.test(p) : /mac/.test(u),  
44 - webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit  
45 - 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  
46 - playerVersion = [0,0,0],  
47 - d = null;  
48 - if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {  
49 - d = nav.plugins[SHOCKWAVE_FLASH].description;  
50 - 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+  
51 - plugin = true;  
52 - ie = false; // cascaded feature detection for Internet Explorer  
53 - d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");  
54 - playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);  
55 - playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);  
56 - playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;  
57 - }  
58 - }  
59 - else if (typeof win.ActiveXObject != UNDEF) {  
60 - try {  
61 - var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);  
62 - if (a) { // a will return null when ActiveX is disabled  
63 - d = a.GetVariable("$version");  
64 - if (d) {  
65 - ie = true; // cascaded feature detection for Internet Explorer  
66 - d = d.split(" ")[1].split(",");  
67 - playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];  
68 - }  
69 - }  
70 - }  
71 - catch(e) {}  
72 - }  
73 - return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };  
74 - }(),  
75 -  
76 - /* Cross-browser onDomLoad  
77 - - Will fire an event as soon as the DOM of a web page is loaded  
78 - - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/  
79 - - Regular onload serves as fallback  
80 - */  
81 - onDomLoad = function() {  
82 - if (!ua.w3) { return; }  
83 - 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  
84 - callDomLoadFunctions();  
85 - }  
86 - if (!isDomLoaded) {  
87 - if (typeof doc.addEventListener != UNDEF) {  
88 - doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false);  
89 - }  
90 - if (ua.ie && ua.win) {  
91 - doc.attachEvent(ON_READY_STATE_CHANGE, function() {  
92 - if (doc.readyState == "complete") {  
93 - doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);  
94 - callDomLoadFunctions();  
95 - }  
96 - });  
97 - if (win == top) { // if not inside an iframe  
98 - (function(){  
99 - if (isDomLoaded) { return; }  
100 - try {  
101 - doc.documentElement.doScroll("left");  
102 - }  
103 - catch(e) {  
104 - setTimeout(arguments.callee, 0);  
105 - return;  
106 - }  
107 - callDomLoadFunctions();  
108 - })();  
109 - }  
110 - }  
111 - if (ua.wk) {  
112 - (function(){  
113 - if (isDomLoaded) { return; }  
114 - if (!/loaded|complete/.test(doc.readyState)) {  
115 - setTimeout(arguments.callee, 0);  
116 - return;  
117 - }  
118 - callDomLoadFunctions();  
119 - })();  
120 - }  
121 - addLoadEvent(callDomLoadFunctions);  
122 - }  
123 - }();  
124 -  
125 - function callDomLoadFunctions() {  
126 - if (isDomLoaded) { return; }  
127 - try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early  
128 - var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));  
129 - t.parentNode.removeChild(t);  
130 - }  
131 - catch (e) { return; }  
132 - isDomLoaded = true;  
133 - var dl = domLoadFnArr.length;  
134 - for (var i = 0; i < dl; i++) {  
135 - domLoadFnArr[i]();  
136 - }  
137 - }  
138 -  
139 - function addDomLoadEvent(fn) {  
140 - if (isDomLoaded) {  
141 - fn();  
142 - }  
143 - else {  
144 - domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+  
145 - }  
146 - }  
147 -  
148 - /* Cross-browser onload  
149 - - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/  
150 - - Will fire an event as soon as a web page including all of its assets are loaded  
151 - */  
152 - function addLoadEvent(fn) {  
153 - if (typeof win.addEventListener != UNDEF) {  
154 - win.addEventListener("load", fn, false);  
155 - }  
156 - else if (typeof doc.addEventListener != UNDEF) {  
157 - doc.addEventListener("load", fn, false);  
158 - }  
159 - else if (typeof win.attachEvent != UNDEF) {  
160 - addListener(win, "onload", fn);  
161 - }  
162 - else if (typeof win.onload == "function") {  
163 - var fnOld = win.onload;  
164 - win.onload = function() {  
165 - fnOld();  
166 - fn();  
167 - };  
168 - }  
169 - else {  
170 - win.onload = fn;  
171 - }  
172 - }  
173 -  
174 - /* Main function  
175 - - Will preferably execute onDomLoad, otherwise onload (as a fallback)  
176 - */  
177 - function main() {  
178 - if (plugin) {  
179 - testPlayerVersion();  
180 - }  
181 - else {  
182 - matchVersions();  
183 - }  
184 - }  
185 -  
186 - /* Detect the Flash Player version for non-Internet Explorer browsers  
187 - - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:  
188 - a. Both release and build numbers can be detected  
189 - b. Avoid wrong descriptions by corrupt installers provided by Adobe  
190 - c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports  
191 - - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available  
192 - */  
193 - function testPlayerVersion() {  
194 - var b = doc.getElementsByTagName("body")[0];  
195 - var o = createElement(OBJECT);  
196 - o.setAttribute("type", FLASH_MIME_TYPE);  
197 - var t = b.appendChild(o);  
198 - if (t) {  
199 - var counter = 0;  
200 - (function(){  
201 - if (typeof t.GetVariable != UNDEF) {  
202 - var d = t.GetVariable("$version");  
203 - if (d) {  
204 - d = d.split(" ")[1].split(",");  
205 - ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];  
206 - }  
207 - }  
208 - else if (counter < 10) {  
209 - counter++;  
210 - setTimeout(arguments.callee, 10);  
211 - return;  
212 - }  
213 - b.removeChild(o);  
214 - t = null;  
215 - matchVersions();  
216 - })();  
217 - }  
218 - else {  
219 - matchVersions();  
220 - }  
221 - }  
222 -  
223 - /* Perform Flash Player and SWF version matching; static publishing only  
224 - */  
225 - function matchVersions() {  
226 - var rl = regObjArr.length;  
227 - if (rl > 0) {  
228 - for (var i = 0; i < rl; i++) { // for each registered object element  
229 - var id = regObjArr[i].id;  
230 - var cb = regObjArr[i].callbackFn;  
231 - var cbObj = {success:false, id:id};  
232 - if (ua.pv[0] > 0) {  
233 - var obj = getElementById(id);  
234 - if (obj) {  
235 - if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!  
236 - setVisibility(id, true);  
237 - if (cb) {  
238 - cbObj.success = true;  
239 - cbObj.ref = getObjectById(id);  
240 - cb(cbObj);  
241 - }  
242 - }  
243 - else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported  
244 - var att = {};  
245 - att.data = regObjArr[i].expressInstall;  
246 - att.width = obj.getAttribute("width") || "0";  
247 - att.height = obj.getAttribute("height") || "0";  
248 - if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); }  
249 - if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); }  
250 - // parse HTML object param element's name-value pairs  
251 - var par = {};  
252 - var p = obj.getElementsByTagName("param");  
253 - var pl = p.length;  
254 - for (var j = 0; j < pl; j++) {  
255 - if (p[j].getAttribute("name").toLowerCase() != "movie") {  
256 - par[p[j].getAttribute("name")] = p[j].getAttribute("value");  
257 - }  
258 - }  
259 - showExpressInstall(att, par, id, cb);  
260 - }  
261 - 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  
262 - displayAltContent(obj);  
263 - if (cb) { cb(cbObj); }  
264 - }  
265 - }  
266 - }  
267 - 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)  
268 - setVisibility(id, true);  
269 - if (cb) {  
270 - var o = getObjectById(id); // test whether there is an HTML object element or not  
271 - if (o && typeof o.SetVariable != UNDEF) {  
272 - cbObj.success = true;  
273 - cbObj.ref = o;  
274 - }  
275 - cb(cbObj);  
276 - }  
277 - }  
278 - }  
279 - }  
280 - }  
281 -  
282 - function getObjectById(objectIdStr) {  
283 - var r = null;  
284 - var o = getElementById(objectIdStr);  
285 - if (o && o.nodeName == "OBJECT") {  
286 - if (typeof o.SetVariable != UNDEF) {  
287 - r = o;  
288 - }  
289 - else {  
290 - var n = o.getElementsByTagName(OBJECT)[0];  
291 - if (n) {  
292 - r = n;  
293 - }  
294 - }  
295 - }  
296 - return r;  
297 - }  
298 -  
299 - /* Requirements for Adobe Express Install  
300 - - only one instance can be active at a time  
301 - - fp 6.0.65 or higher  
302 - - Win/Mac OS only  
303 - - no Webkit engines older than version 312  
304 - */  
305 - function canExpressInstall() {  
306 - return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);  
307 - }  
308 -  
309 - /* Show the Adobe Express Install dialog  
310 - - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75  
311 - */  
312 - function showExpressInstall(att, par, replaceElemIdStr, callbackFn) {  
313 - isExpressInstallActive = true;  
314 - storedCallbackFn = callbackFn || null;  
315 - storedCallbackObj = {success:false, id:replaceElemIdStr};  
316 - var obj = getElementById(replaceElemIdStr);  
317 - if (obj) {  
318 - if (obj.nodeName == "OBJECT") { // static publishing  
319 - storedAltContent = abstractAltContent(obj);  
320 - storedAltContentId = null;  
321 - }  
322 - else { // dynamic publishing  
323 - storedAltContent = obj;  
324 - storedAltContentId = replaceElemIdStr;  
325 - }  
326 - att.id = EXPRESS_INSTALL_ID;  
327 - if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; }  
328 - if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; }  
329 - doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";  
330 - var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",  
331 - fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title;  
332 - if (typeof par.flashvars != UNDEF) {  
333 - par.flashvars += "&" + fv;  
334 - }  
335 - else {  
336 - par.flashvars = fv;  
337 - }  
338 - // 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,  
339 - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work  
340 - if (ua.ie && ua.win && obj.readyState != 4) {  
341 - var newObj = createElement("div");  
342 - replaceElemIdStr += "SWFObjectNew";  
343 - newObj.setAttribute("id", replaceElemIdStr);  
344 - obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf  
345 - obj.style.display = "none";  
346 - (function(){  
347 - if (obj.readyState == 4) {  
348 - obj.parentNode.removeChild(obj);  
349 - }  
350 - else {  
351 - setTimeout(arguments.callee, 10);  
352 - }  
353 - })();  
354 - }  
355 - createSWF(att, par, replaceElemIdStr);  
356 - }  
357 - }  
358 -  
359 - /* Functions to abstract and display alternative content  
360 - */  
361 - function displayAltContent(obj) {  
362 - if (ua.ie && ua.win && obj.readyState != 4) {  
363 - // 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,  
364 - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work  
365 - var el = createElement("div");  
366 - obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content  
367 - el.parentNode.replaceChild(abstractAltContent(obj), el);  
368 - obj.style.display = "none";  
369 - (function(){  
370 - if (obj.readyState == 4) {  
371 - obj.parentNode.removeChild(obj);  
372 - }  
373 - else {  
374 - setTimeout(arguments.callee, 10);  
375 - }  
376 - })();  
377 - }  
378 - else {  
379 - obj.parentNode.replaceChild(abstractAltContent(obj), obj);  
380 - }  
381 - }  
382 -  
383 - function abstractAltContent(obj) {  
384 - var ac = createElement("div");  
385 - if (ua.win && ua.ie) {  
386 - ac.innerHTML = obj.innerHTML;  
387 - }  
388 - else {  
389 - var nestedObj = obj.getElementsByTagName(OBJECT)[0];  
390 - if (nestedObj) {  
391 - var c = nestedObj.childNodes;  
392 - if (c) {  
393 - var cl = c.length;  
394 - for (var i = 0; i < cl; i++) {  
395 - if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {  
396 - ac.appendChild(c[i].cloneNode(true));  
397 - }  
398 - }  
399 - }  
400 - }  
401 - }  
402 - return ac;  
403 - }  
404 -  
405 - /* Cross-browser dynamic SWF creation  
406 - */  
407 - function createSWF(attObj, parObj, id) {  
408 - var r, el = getElementById(id);  
409 - if (ua.wk && ua.wk < 312) { return r; }  
410 - if (el) {  
411 - if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content  
412 - attObj.id = id;  
413 - }  
414 - if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML  
415 - var att = "";  
416 - for (var i in attObj) {  
417 - if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries  
418 - if (i.toLowerCase() == "data") {  
419 - parObj.movie = attObj[i];  
420 - }  
421 - else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword  
422 - att += ' class="' + attObj[i] + '"';  
423 - }  
424 - else if (i.toLowerCase() != "classid") {  
425 - att += ' ' + i + '="' + attObj[i] + '"';  
426 - }  
427 - }  
428 - }  
429 - var par = "";  
430 - for (var j in parObj) {  
431 - if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries  
432 - par += '<param name="' + j + '" value="' + parObj[j] + '" />';  
433 - }  
434 - }  
435 - el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';  
436 - objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)  
437 - r = getElementById(attObj.id);  
438 - }  
439 - else { // well-behaving browsers  
440 - var o = createElement(OBJECT);  
441 - o.setAttribute("type", FLASH_MIME_TYPE);  
442 - for (var m in attObj) {  
443 - if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries  
444 - if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword  
445 - o.setAttribute("class", attObj[m]);  
446 - }  
447 - else if (m.toLowerCase() != "classid") { // filter out IE specific attribute  
448 - o.setAttribute(m, attObj[m]);  
449 - }  
450 - }  
451 - }  
452 - for (var n in parObj) {  
453 - if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element  
454 - createObjParam(o, n, parObj[n]);  
455 - }  
456 - }  
457 - el.parentNode.replaceChild(o, el);  
458 - r = o;  
459 - }  
460 - }  
461 - return r;  
462 - }  
463 -  
464 - function createObjParam(el, pName, pValue) {  
465 - var p = createElement("param");  
466 - p.setAttribute("name", pName);  
467 - p.setAttribute("value", pValue);  
468 - el.appendChild(p);  
469 - }  
470 -  
471 - /* Cross-browser SWF removal  
472 - - Especially needed to safely and completely remove a SWF in Internet Explorer  
473 - */  
474 - function removeSWF(id) {  
475 - var obj = getElementById(id);  
476 - if (obj && obj.nodeName == "OBJECT") {  
477 - if (ua.ie && ua.win) {  
478 - obj.style.display = "none";  
479 - (function(){  
480 - if (obj.readyState == 4) {  
481 - removeObjectInIE(id);  
482 - }  
483 - else {  
484 - setTimeout(arguments.callee, 10);  
485 - }  
486 - })();  
487 - }  
488 - else {  
489 - obj.parentNode.removeChild(obj);  
490 - }  
491 - }  
492 - }  
493 -  
494 - function removeObjectInIE(id) {  
495 - var obj = getElementById(id);  
496 - if (obj) {  
497 - for (var i in obj) {  
498 - if (typeof obj[i] == "function") {  
499 - obj[i] = null;  
500 - }  
501 - }  
502 - obj.parentNode.removeChild(obj);  
503 - }  
504 - }  
505 -  
506 - /* Functions to optimize JavaScript compression  
507 - */  
508 - function getElementById(id) {  
509 - var el = null;  
510 - try {  
511 - el = doc.getElementById(id);  
512 - }  
513 - catch (e) {}  
514 - return el;  
515 - }  
516 -  
517 - function createElement(el) {  
518 - return doc.createElement(el);  
519 - }  
520 -  
521 - /* Updated attachEvent function for Internet Explorer  
522 - - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks  
523 - */  
524 - function addListener(target, eventType, fn) {  
525 - target.attachEvent(eventType, fn);  
526 - listenersArr[listenersArr.length] = [target, eventType, fn];  
527 - }  
528 -  
529 - /* Flash Player and SWF content version matching  
530 - */  
531 - function hasPlayerVersion(rv) {  
532 - var pv = ua.pv, v = rv.split(".");  
533 - v[0] = parseInt(v[0], 10);  
534 - v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"  
535 - v[2] = parseInt(v[2], 10) || 0;  
536 - return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;  
537 - }  
538 -  
539 - /* Cross-browser dynamic CSS creation  
540 - - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php  
541 - */  
542 - function createCSS(sel, decl, media, newStyle) {  
543 - if (ua.ie && ua.mac) { return; }  
544 - var h = doc.getElementsByTagName("head")[0];  
545 - if (!h) { return; } // to also support badly authored HTML pages that lack a head element  
546 - var m = (media && typeof media == "string") ? media : "screen";  
547 - if (newStyle) {  
548 - dynamicStylesheet = null;  
549 - dynamicStylesheetMedia = null;  
550 - }  
551 - if (!dynamicStylesheet || dynamicStylesheetMedia != m) {  
552 - // create dynamic stylesheet + get a global reference to it  
553 - var s = createElement("style");  
554 - s.setAttribute("type", "text/css");  
555 - s.setAttribute("media", m);  
556 - dynamicStylesheet = h.appendChild(s);  
557 - if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {  
558 - dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];  
559 - }  
560 - dynamicStylesheetMedia = m;  
561 - }  
562 - // add style rule  
563 - if (ua.ie && ua.win) {  
564 - if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {  
565 - dynamicStylesheet.addRule(sel, decl);  
566 - }  
567 - }  
568 - else {  
569 - if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {  
570 - dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}"));  
571 - }  
572 - }  
573 - }  
574 -  
575 - function setVisibility(id, isVisible) {  
576 - if (!autoHideShow) { return; }  
577 - var v = isVisible ? "visible" : "hidden";  
578 - if (isDomLoaded && getElementById(id)) {  
579 - getElementById(id).style.visibility = v;  
580 - }  
581 - else {  
582 - createCSS("#" + id, "visibility:" + v);  
583 - }  
584 - }  
585 -  
586 - /* Filter to avoid XSS attacks  
587 - */  
588 - function urlEncodeIfNecessary(s) {  
589 - var regex = /[\\\"<>\.;]/;  
590 - var hasBadChars = regex.exec(s) != null;  
591 - return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;  
592 - }  
593 -  
594 - /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)  
595 - */  
596 - var cleanup = function() {  
597 - if (ua.ie && ua.win) {  
598 - window.attachEvent("onunload", function() {  
599 - // remove listeners to avoid memory leaks  
600 - var ll = listenersArr.length;  
601 - for (var i = 0; i < ll; i++) {  
602 - listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);  
603 - }  
604 - // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect  
605 - var il = objIdArr.length;  
606 - for (var j = 0; j < il; j++) {  
607 - removeSWF(objIdArr[j]);  
608 - }  
609 - // cleanup library's main closures to avoid memory leaks  
610 - for (var k in ua) {  
611 - ua[k] = null;  
612 - }  
613 - ua = null;  
614 - for (var l in swfobject) {  
615 - swfobject[l] = null;  
616 - }  
617 - swfobject = null;  
618 - });  
619 - }  
620 - }();  
621 -  
622 - return {  
623 - /* Public API  
624 - - Reference: http://code.google.com/p/swfobject/wiki/documentation  
625 - */  
626 - registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {  
627 - if (ua.w3 && objectIdStr && swfVersionStr) {  
628 - var regObj = {};  
629 - regObj.id = objectIdStr;  
630 - regObj.swfVersion = swfVersionStr;  
631 - regObj.expressInstall = xiSwfUrlStr;  
632 - regObj.callbackFn = callbackFn;  
633 - regObjArr[regObjArr.length] = regObj;  
634 - setVisibility(objectIdStr, false);  
635 - }  
636 - else if (callbackFn) {  
637 - callbackFn({success:false, id:objectIdStr});  
638 - }  
639 - },  
640 -  
641 - getObjectById: function(objectIdStr) {  
642 - if (ua.w3) {  
643 - return getObjectById(objectIdStr);  
644 - }  
645 - },  
646 -  
647 - embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {  
648 - var callbackObj = {success:false, id:replaceElemIdStr};  
649 - if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {  
650 - setVisibility(replaceElemIdStr, false);  
651 - addDomLoadEvent(function() {  
652 - widthStr += ""; // auto-convert to string  
653 - heightStr += "";  
654 - var att = {};  
655 - if (attObj && typeof attObj === OBJECT) {  
656 - for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs  
657 - att[i] = attObj[i];  
658 - }  
659 - }  
660 - att.data = swfUrlStr;  
661 - att.width = widthStr;  
662 - att.height = heightStr;  
663 - var par = {};  
664 - if (parObj && typeof parObj === OBJECT) {  
665 - for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs  
666 - par[j] = parObj[j];  
667 - }  
668 - }  
669 - if (flashvarsObj && typeof flashvarsObj === OBJECT) {  
670 - for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs  
671 - if (typeof par.flashvars != UNDEF) {  
672 - par.flashvars += "&" + k + "=" + flashvarsObj[k];  
673 - }  
674 - else {  
675 - par.flashvars = k + "=" + flashvarsObj[k];  
676 - }  
677 - }  
678 - }  
679 - if (hasPlayerVersion(swfVersionStr)) { // create SWF  
680 - var obj = createSWF(att, par, replaceElemIdStr);  
681 - if (att.id == replaceElemIdStr) {  
682 - setVisibility(replaceElemIdStr, true);  
683 - }  
684 - callbackObj.success = true;  
685 - callbackObj.ref = obj;  
686 - }  
687 - else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install  
688 - att.data = xiSwfUrlStr;  
689 - showExpressInstall(att, par, replaceElemIdStr, callbackFn);  
690 - return;  
691 - }  
692 - else { // show alternative content  
693 - setVisibility(replaceElemIdStr, true);  
694 - }  
695 - if (callbackFn) { callbackFn(callbackObj); }  
696 - });  
697 - }  
698 - else if (callbackFn) { callbackFn(callbackObj); }  
699 - },  
700 -  
701 - switchOffAutoHideShow: function() {  
702 - autoHideShow = false;  
703 - },  
704 -  
705 - ua: ua,  
706 -  
707 - getFlashPlayerVersion: function() {  
708 - return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };  
709 - },  
710 -  
711 - hasFlashPlayerVersion: hasPlayerVersion,  
712 -  
713 - createSWF: function(attObj, parObj, replaceElemIdStr) {  
714 - if (ua.w3) {  
715 - return createSWF(attObj, parObj, replaceElemIdStr);  
716 - }  
717 - else {  
718 - return undefined;  
719 - }  
720 - },  
721 -  
722 - showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {  
723 - if (ua.w3 && canExpressInstall()) {  
724 - showExpressInstall(att, par, replaceElemIdStr, callbackFn);  
725 - }  
726 - },  
727 -  
728 - removeSWF: function(objElemIdStr) {  
729 - if (ua.w3) {  
730 - removeSWF(objElemIdStr);  
731 - }  
732 - },  
733 -  
734 - createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {  
735 - if (ua.w3) {  
736 - createCSS(selStr, declStr, mediaStr, newStyleBoolean);  
737 - }  
738 - },  
739 -  
740 - addDomLoadEvent: addDomLoadEvent,  
741 -  
742 - addLoadEvent: addLoadEvent,  
743 -  
744 - getQueryParamValue: function(param) {  
745 - var q = doc.location.search || doc.location.hash;  
746 - if (q) {  
747 - if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark  
748 - if (param == null) {  
749 - return urlEncodeIfNecessary(q);  
750 - }  
751 - var pairs = q.split("&");  
752 - for (var i = 0; i < pairs.length; i++) {  
753 - if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {  
754 - return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));  
755 - }  
756 - }  
757 - }  
758 - return "";  
759 - },  
760 -  
761 - // For internal usage only  
762 - expressInstallCallback: function() {  
763 - if (isExpressInstallActive) {  
764 - var obj = getElementById(EXPRESS_INSTALL_ID);  
765 - if (obj && storedAltContent) {  
766 - obj.parentNode.replaceChild(storedAltContent, obj);  
767 - if (storedAltContentId) {  
768 - setVisibility(storedAltContentId, true);  
769 - if (ua.ie && ua.win) { storedAltContent.style.display = "block"; }  
770 - }  
771 - if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }  
772 - }  
773 - isExpressInstallActive = false;  
774 - }  
775 - }  
776 - };  
777 -}();  
1 -/* This CSS stylesheet defines styles used by required elements in a flex application page that supports browser history */  
2 -  
3 -#ie_historyFrame { width: 0px; height: 0px; display:none }  
4 -#firefox_anchorDiv { width: 0px; height: 0px; display:none }  
5 -#safari_formDiv { width: 0px; height: 0px; display:none }  
6 -#safari_rememberDiv { width: 0px; height: 0px; display:none }  
1 -BrowserHistoryUtils = {  
2 - addEvent: function(elm, evType, fn, useCapture) {  
3 - useCapture = useCapture || false;  
4 - if (elm.addEventListener) {  
5 - elm.addEventListener(evType, fn, useCapture);  
6 - return true;  
7 - }  
8 - else if (elm.attachEvent) {  
9 - var r = elm.attachEvent('on' + evType, fn);  
10 - return r;  
11 - }  
12 - else {  
13 - elm['on' + evType] = fn;  
14 - }  
15 - }  
16 -}  
17 -  
18 -BrowserHistory = (function() {  
19 - // type of browser  
20 - var browser = {  
21 - ie: false,  
22 - ie8: false,  
23 - firefox: false,  
24 - safari: false,  
25 - opera: false,  
26 - version: -1  
27 - };  
28 -  
29 - // Default app state URL to use when no fragment ID present  
30 - var defaultHash = '';  
31 -  
32 - // Last-known app state URL  
33 - var currentHref = document.location.href;  
34 -  
35 - // Initial URL (used only by IE)  
36 - var initialHref = document.location.href;  
37 -  
38 - // Initial URL (used only by IE)  
39 - var initialHash = document.location.hash;  
40 -  
41 - // History frame source URL prefix (used only by IE)  
42 - var historyFrameSourcePrefix = 'history/historyFrame.html?';  
43 -  
44 - // History maintenance (used only by Safari)  
45 - var currentHistoryLength = -1;  
46 -  
47 - // Flag to denote the existence of onhashchange  
48 - var browserHasHashChange = false;  
49 -  
50 - var historyHash = [];  
51 -  
52 - var initialState = createState(initialHref, initialHref + '#' + initialHash, initialHash);  
53 -  
54 - var backStack = [];  
55 - var forwardStack = [];  
56 -  
57 - var currentObjectId = null;  
58 -  
59 - //UserAgent detection  
60 - var useragent = navigator.userAgent.toLowerCase();  
61 -  
62 - if (useragent.indexOf("opera") != -1) {  
63 - browser.opera = true;  
64 - } else if (useragent.indexOf("msie") != -1) {  
65 - browser.ie = true;  
66 - browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));  
67 - if (browser.version == 8)  
68 - {  
69 - browser.ie = false;  
70 - browser.ie8 = true;  
71 - }  
72 - } else if (useragent.indexOf("safari") != -1) {  
73 - browser.safari = true;  
74 - browser.version = parseFloat(useragent.substring(useragent.indexOf('safari') + 7));  
75 - } else if (useragent.indexOf("gecko") != -1) {  
76 - browser.firefox = true;  
77 - }  
78 -  
79 - if (browser.ie == true && browser.version == 7) {  
80 - window["_ie_firstload"] = false;  
81 - }  
82 -  
83 - function hashChangeHandler()  
84 - {  
85 - currentHref = document.location.href;  
86 - var flexAppUrl = getHash();  
87 - //ADR: to fix multiple  
88 - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {  
89 - var pl = getPlayers();  
90 - for (var i = 0; i < pl.length; i++) {  
91 - pl[i].browserURLChange(flexAppUrl);  
92 - }  
93 - } else {  
94 - getPlayer().browserURLChange(flexAppUrl);  
95 - }  
96 - }  
97 -  
98 - // Accessor functions for obtaining specific elements of the page.  
99 - function getHistoryFrame()  
100 - {  
101 - return document.getElementById('ie_historyFrame');  
102 - }  
103 -  
104 - function getFormElement()  
105 - {  
106 - return document.getElementById('safari_formDiv');  
107 - }  
108 -  
109 - function getRememberElement()  
110 - {  
111 - return document.getElementById("safari_remember_field");  
112 - }  
113 -  
114 - // Get the Flash player object for performing ExternalInterface callbacks.  
115 - // Updated for changes to SWFObject2.  
116 - function getPlayer(id) {  
117 - var i;  
118 -  
119 - if (id && document.getElementById(id)) {  
120 - var r = document.getElementById(id);  
121 - if (typeof r.SetVariable != "undefined") {  
122 - return r;  
123 - }  
124 - else {  
125 - var o = r.getElementsByTagName("object");  
126 - var e = r.getElementsByTagName("embed");  
127 - for (i = 0; i < o.length; i++) {  
128 - if (typeof o[i].browserURLChange != "undefined")  
129 - return o[i];  
130 - }  
131 - for (i = 0; i < e.length; i++) {  
132 - if (typeof e[i].browserURLChange != "undefined")  
133 - return e[i];  
134 - }  
135 - }  
136 - }  
137 - else {  
138 - var o = document.getElementsByTagName("object");  
139 - var e = document.getElementsByTagName("embed");  
140 - for (i = 0; i < e.length; i++) {  
141 - if (typeof e[i].browserURLChange != "undefined")  
142 - {  
143 - return e[i];  
144 - }  
145 - }  
146 - for (i = 0; i < o.length; i++) {  
147 - if (typeof o[i].browserURLChange != "undefined")  
148 - {  
149 - return o[i];  
150 - }  
151 - }  
152 - }  
153 - return undefined;  
154 - }  
155 -  
156 - function getPlayers() {  
157 - var i;  
158 - var players = [];  
159 - if (players.length == 0) {  
160 - var tmp = document.getElementsByTagName('object');  
161 - for (i = 0; i < tmp.length; i++)  
162 - {  
163 - if (typeof tmp[i].browserURLChange != "undefined")  
164 - players.push(tmp[i]);  
165 - }  
166 - }  
167 - if (players.length == 0 || players[0].object == null) {  
168 - var tmp = document.getElementsByTagName('embed');  
169 - for (i = 0; i < tmp.length; i++)  
170 - {  
171 - if (typeof tmp[i].browserURLChange != "undefined")  
172 - players.push(tmp[i]);  
173 - }  
174 - }  
175 - return players;  
176 - }  
177 -  
178 - function getIframeHash() {  
179 - var doc = getHistoryFrame().contentWindow.document;  
180 - var hash = String(doc.location.search);  
181 - if (hash.length == 1 && hash.charAt(0) == "?") {  
182 - hash = "";  
183 - }  
184 - else if (hash.length >= 2 && hash.charAt(0) == "?") {  
185 - hash = hash.substring(1);  
186 - }  
187 - return hash;  
188 - }  
189 -  
190 - /* Get the current location hash excluding the '#' symbol. */  
191 - function getHash() {  
192 - // It would be nice if we could use document.location.hash here,  
193 - // but it's faulty sometimes.  
194 - var idx = document.location.href.indexOf('#');  
195 - return (idx >= 0) ? document.location.href.substr(idx+1) : '';  
196 - }  
197 -  
198 - /* Get the current location hash excluding the '#' symbol. */  
199 - function setHash(hash) {  
200 - // It would be nice if we could use document.location.hash here,  
201 - // but it's faulty sometimes.  
202 - if (hash == '') hash = '#'  
203 - document.location.hash = hash;  
204 - }  
205 -  
206 - function createState(baseUrl, newUrl, flexAppUrl) {  
207 - return { 'baseUrl': baseUrl, 'newUrl': newUrl, 'flexAppUrl': flexAppUrl, 'title': null };  
208 - }  
209 -  
210 - /* Add a history entry to the browser.  
211 - * baseUrl: the portion of the location prior to the '#'  
212 - * newUrl: the entire new URL, including '#' and following fragment  
213 - * flexAppUrl: the portion of the location following the '#' only  
214 - */  
215 - function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {  
216 -  
217 - //delete all the history entries  
218 - forwardStack = [];  
219 -  
220 - if (browser.ie) {  
221 - //Check to see if we are being asked to do a navigate for the first  
222 - //history entry, and if so ignore, because it's coming from the creation  
223 - //of the history iframe  
224 - if (flexAppUrl == defaultHash && document.location.href == initialHref && window['_ie_firstload']) {  
225 - currentHref = initialHref;  
226 - return;  
227 - }  
228 - if ((!flexAppUrl || flexAppUrl == defaultHash) && window['_ie_firstload']) {  
229 - newUrl = baseUrl + '#' + defaultHash;  
230 - flexAppUrl = defaultHash;  
231 - } else {  
232 - // for IE, tell the history frame to go somewhere without a '#'  
233 - // in order to get this entry into the browser history.  
234 - getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl;  
235 - }  
236 - setHash(flexAppUrl);  
237 - } else {  
238 -  
239 - //ADR  
240 - if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {  
241 - initialState = createState(baseUrl, newUrl, flexAppUrl);  
242 - } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {  
243 - backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);  
244 - }  
245 -  
246 - if (browser.safari && !browserHasHashChange) {  
247 - // for Safari, submit a form whose action points to the desired URL  
248 - if (browser.version <= 419.3) {  
249 - var file = window.location.pathname.toString();  
250 - file = file.substring(file.lastIndexOf("/")+1);  
251 - getFormElement().innerHTML = '<form name="historyForm" action="'+file+'#' + flexAppUrl + '" method="GET"></form>';  
252 - //get the current elements and add them to the form  
253 - var qs = window.location.search.substring(1);  
254 - var qs_arr = qs.split("&");  
255 - for (var i = 0; i < qs_arr.length; i++) {  
256 - var tmp = qs_arr[i].split("=");  
257 - var elem = document.createElement("input");  
258 - elem.type = "hidden";  
259 - elem.name = tmp[0];  
260 - elem.value = tmp[1];  
261 - document.forms.historyForm.appendChild(elem);  
262 - }  
263 - document.forms.historyForm.submit();  
264 - } else {  
265 - top.location.hash = flexAppUrl;  
266 - }  
267 - // We also have to maintain the history by hand for Safari  
268 - historyHash[history.length] = flexAppUrl;  
269 - _storeStates();  
270 - } else {  
271 - // Otherwise, just tell the browser to go there  
272 - setHash(flexAppUrl);  
273 - }  
274 - }  
275 - backStack.push(createState(baseUrl, newUrl, flexAppUrl));  
276 - }  
277 -  
278 - function _storeStates() {  
279 - if (browser.safari) {  
280 - getRememberElement().value = historyHash.join(",");  
281 - }  
282 - }  
283 -  
284 - function handleBackButton() {  
285 - //The "current" page is always at the top of the history stack.  
286 - var current = backStack.pop();  
287 - if (!current) { return; }  
288 - var last = backStack[backStack.length - 1];  
289 - if (!last && backStack.length == 0){  
290 - last = initialState;  
291 - }  
292 - forwardStack.push(current);  
293 - }  
294 -  
295 - function handleForwardButton() {  
296 - //summary: private method. Do not call this directly.  
297 -  
298 - var last = forwardStack.pop();  
299 - if (!last) { return; }  
300 - backStack.push(last);  
301 - }  
302 -  
303 - function handleArbitraryUrl() {  
304 - //delete all the history entries  
305 - forwardStack = [];  
306 - }  
307 -  
308 - /* Called periodically to poll to see if we need to detect navigation that has occurred */  
309 - function checkForUrlChange() {  
310 -  
311 - if (browser.ie) {  
312 - if (currentHref != document.location.href && currentHref + '#' != document.location.href) {  
313 - //This occurs when the user has navigated to a specific URL  
314 - //within the app, and didn't use browser back/forward  
315 - //IE seems to have a bug where it stops updating the URL it  
316 - //shows the end-user at this point, but programatically it  
317 - //appears to be correct. Do a full app reload to get around  
318 - //this issue.  
319 - if (browser.version < 7) {  
320 - currentHref = document.location.href;  
321 - document.location.reload();  
322 - } else {  
323 - if (getHash() != getIframeHash()) {  
324 - // this.iframe.src = this.blankURL + hash;  
325 - var sourceToSet = historyFrameSourcePrefix + getHash();  
326 - getHistoryFrame().src = sourceToSet;  
327 - currentHref = document.location.href;  
328 - }  
329 - }  
330 - }  
331 - }  
332 -  
333 - if (browser.safari && !browserHasHashChange) {  
334 - // For Safari, we have to check to see if history.length changed.  
335 - if (currentHistoryLength >= 0 && history.length != currentHistoryLength) {  
336 - //alert("did change: " + history.length + ", " + historyHash.length + "|" + historyHash[history.length] + "|>" + historyHash.join("|"));  
337 - var flexAppUrl = getHash();  
338 - if (browser.version < 528.16 /* Anything earlier than Safari 4.0 */)  
339 - {  
340 - // If it did change and we're running Safari 3.x or earlier,  
341 - // then we have to look the old state up in our hand-maintained  
342 - // array since document.location.hash won't have changed,  
343 - // then call back into BrowserManager.  
344 - currentHistoryLength = history.length;  
345 - flexAppUrl = historyHash[currentHistoryLength];  
346 - }  
347 -  
348 - //ADR: to fix multiple  
349 - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {  
350 - var pl = getPlayers();  
351 - for (var i = 0; i < pl.length; i++) {  
352 - pl[i].browserURLChange(flexAppUrl);  
353 - }  
354 - } else {  
355 - getPlayer().browserURLChange(flexAppUrl);  
356 - }  
357 - _storeStates();  
358 - }  
359 - }  
360 - if (browser.firefox && !browserHasHashChange) {  
361 - if (currentHref != document.location.href) {  
362 - var bsl = backStack.length;  
363 -  
364 - var urlActions = {  
365 - back: false,  
366 - forward: false,  
367 - set: false  
368 - }  
369 -  
370 - if ((window.location.hash == initialHash || window.location.href == initialHref) && (bsl == 1)) {  
371 - urlActions.back = true;  
372 - // FIXME: could this ever be a forward button?  
373 - // we can't clear it because we still need to check for forwards. Ugg.  
374 - // clearInterval(this.locationTimer);  
375 - handleBackButton();  
376 - }  
377 -  
378 - // first check to see if we could have gone forward. We always halt on  
379 - // a no-hash item.  
380 - if (forwardStack.length > 0) {  
381 - if (forwardStack[forwardStack.length-1].flexAppUrl == getHash()) {  
382 - urlActions.forward = true;  
383 - handleForwardButton();  
384 - }  
385 - }  
386 -  
387 - // ok, that didn't work, try someplace back in the history stack  
388 - if ((bsl >= 2) && (backStack[bsl - 2])) {  
389 - if (backStack[bsl - 2].flexAppUrl == getHash()) {  
390 - urlActions.back = true;  
391 - handleBackButton();  
392 - }  
393 - }  
394 -  
395 - if (!urlActions.back && !urlActions.forward) {  
396 - var foundInStacks = {  
397 - back: -1,  
398 - forward: -1  
399 - }  
400 -  
401 - for (var i = 0; i < backStack.length; i++) {  
402 - if (backStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {  
403 - arbitraryUrl = true;  
404 - foundInStacks.back = i;  
405 - }  
406 - }  
407 - for (var i = 0; i < forwardStack.length; i++) {  
408 - if (forwardStack[i].flexAppUrl == getHash() && i != (bsl - 2)) {  
409 - arbitraryUrl = true;  
410 - foundInStacks.forward = i;  
411 - }  
412 - }  
413 - handleArbitraryUrl();  
414 - }  
415 -  
416 - // Firefox changed; do a callback into BrowserManager to tell it.  
417 - currentHref = document.location.href;  
418 - var flexAppUrl = getHash();  
419 - //ADR: to fix multiple  
420 - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {  
421 - var pl = getPlayers();  
422 - for (var i = 0; i < pl.length; i++) {  
423 - pl[i].browserURLChange(flexAppUrl);  
424 - }  
425 - } else {  
426 - getPlayer().browserURLChange(flexAppUrl);  
427 - }  
428 - }  
429 - }  
430 - }  
431 -  
432 - var _initialize = function () {  
433 -  
434 - browserHasHashChange = ("onhashchange" in document.body);  
435 -  
436 - if (browser.ie)  
437 - {  
438 - var scripts = document.getElementsByTagName('script');  
439 - for (var i = 0, s; s = scripts[i]; i++) {  
440 - if (s.src.indexOf("history.js") > -1) {  
441 - var iframe_location = (new String(s.src)).replace("history.js", "historyFrame.html");  
442 - }  
443 - }  
444 - historyFrameSourcePrefix = iframe_location + "?";  
445 - var src = historyFrameSourcePrefix;  
446 -  
447 - var iframe = document.createElement("iframe");  
448 - iframe.id = 'ie_historyFrame';  
449 - iframe.name = 'ie_historyFrame';  
450 - iframe.src = 'javascript:false;';  
451 -  
452 - try {  
453 - document.body.appendChild(iframe);  
454 - } catch(e) {  
455 - setTimeout(function() {  
456 - document.body.appendChild(iframe);  
457 - }, 0);  
458 - }  
459 - }  
460 -  
461 - if (browser.safari && !browserHasHashChange)  
462 - {  
463 - var rememberDiv = document.createElement("div");  
464 - rememberDiv.id = 'safari_rememberDiv';  
465 - document.body.appendChild(rememberDiv);  
466 - rememberDiv.innerHTML = '<input type="text" id="safari_remember_field" style="width: 500px;">';  
467 -  
468 - var formDiv = document.createElement("div");  
469 - formDiv.id = 'safari_formDiv';  
470 - document.body.appendChild(formDiv);  
471 -  
472 - var reloader_content = document.createElement('div');  
473 - reloader_content.id = 'safarireloader';  
474 - var scripts = document.getElementsByTagName('script');  
475 - for (var i = 0, s; s = scripts[i]; i++) {  
476 - if (s.src.indexOf("history.js") > -1) {  
477 - html = (new String(s.src)).replace(".js", ".html");  
478 - }  
479 - }  
480 - reloader_content.innerHTML = '<iframe id="safarireloader-iframe" src="about:blank" frameborder="no" scrolling="no"></iframe>';  
481 - document.body.appendChild(reloader_content);  
482 - reloader_content.style.position = 'absolute';  
483 - reloader_content.style.left = reloader_content.style.top = '-9999px';  
484 - iframe = reloader_content.getElementsByTagName('iframe')[0];  
485 -  
486 - if (document.getElementById("safari_remember_field").value != "" ) {  
487 - historyHash = document.getElementById("safari_remember_field").value.split(",");  
488 - }  
489 - }  
490 -  
491 - if (browserHasHashChange)  
492 - document.body.onhashchange = hashChangeHandler;  
493 - }  
494 -  
495 - return {  
496 - historyHash: historyHash,  
497 - backStack: function() { return backStack; },  
498 - forwardStack: function() { return forwardStack },  
499 - getPlayer: getPlayer,  
500 - initialize: function(src) {  
501 - _initialize(src);  
502 - },  
503 - setURL: function(url) {  
504 - document.location.href = url;  
505 - },  
506 - getURL: function() {  
507 - return document.location.href;  
508 - },  
509 - getTitle: function() {  
510 - return document.title;  
511 - },  
512 - setTitle: function(title) {  
513 - try {  
514 - backStack[backStack.length - 1].title = title;  
515 - } catch(e) { }  
516 - //if on safari, set the title to be the empty string.  
517 - if (browser.safari) {  
518 - if (title == "") {  
519 - try {  
520 - var tmp = window.location.href.toString();  
521 - title = tmp.substring((tmp.lastIndexOf("/")+1), tmp.lastIndexOf("#"));  
522 - } catch(e) {  
523 - title = "";  
524 - }  
525 - }  
526 - }  
527 - document.title = title;  
528 - },  
529 - setDefaultURL: function(def)  
530 - {  
531 - defaultHash = def;  
532 - def = getHash();  
533 - //trailing ? is important else an extra frame gets added to the history  
534 - //when navigating back to the first page. Alternatively could check  
535 - //in history frame navigation to compare # and ?.  
536 - if (browser.ie)  
537 - {  
538 - window['_ie_firstload'] = true;  
539 - var sourceToSet = historyFrameSourcePrefix + def;  
540 - var func = function() {  
541 - getHistoryFrame().src = sourceToSet;  
542 - window.location.replace("#" + def);  
543 - setInterval(checkForUrlChange, 50);  
544 - }  
545 - try {  
546 - func();  
547 - } catch(e) {  
548 - window.setTimeout(function() { func(); }, 0);  
549 - }  
550 - }  
551 -  
552 - if (browser.safari)  
553 - {  
554 - currentHistoryLength = history.length;  
555 - if (historyHash.length == 0) {  
556 - historyHash[currentHistoryLength] = def;  
557 - var newloc = "#" + def;  
558 - window.location.replace(newloc);  
559 - } else {  
560 - //alert(historyHash[historyHash.length-1]);  
561 - }  
562 - setInterval(checkForUrlChange, 50);  
563 - }  
564 -  
565 -  
566 - if (browser.firefox || browser.opera)  
567 - {  
568 - var reg = new RegExp("#" + def + "$");  
569 - if (window.location.toString().match(reg)) {  
570 - } else {  
571 - var newloc ="#" + def;  
572 - window.location.replace(newloc);  
573 - }  
574 - setInterval(checkForUrlChange, 50);  
575 - }  
576 -  
577 - },  
578 -  
579 - /* Set the current browser URL; called from inside BrowserManager to propagate  
580 - * the application state out to the container.  
581 - */  
582 - setBrowserURL: function(flexAppUrl, objectId) {  
583 - if (browser.ie && typeof objectId != "undefined") {  
584 - currentObjectId = objectId;  
585 - }  
586 - //fromIframe = fromIframe || false;  
587 - //fromFlex = fromFlex || false;  
588 - //alert("setBrowserURL: " + flexAppUrl);  
589 - //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ;  
590 -  
591 - var pos = document.location.href.indexOf('#');  
592 - var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : document.location.href;  
593 - var newUrl = baseUrl + '#' + flexAppUrl;  
594 -  
595 - if (document.location.href != newUrl && document.location.href + '#' != newUrl) {  
596 - currentHref = newUrl;  
597 - addHistoryEntry(baseUrl, newUrl, flexAppUrl);  
598 - currentHistoryLength = history.length;  
599 - }  
600 - },  
601 -  
602 - browserURLChange: function(flexAppUrl) {  
603 - var objectId = null;  
604 - if (browser.ie && currentObjectId != null) {  
605 - objectId = currentObjectId;  
606 - }  
607 -  
608 - if (typeof BrowserHistory_multiple != "undefined" && BrowserHistory_multiple == true) {  
609 - var pl = getPlayers();  
610 - for (var i = 0; i < pl.length; i++) {  
611 - try {  
612 - pl[i].browserURLChange(flexAppUrl);  
613 - } catch(e) { }  
614 - }  
615 - } else {  
616 - try {  
617 - getPlayer(objectId).browserURLChange(flexAppUrl);  
618 - } catch(e) { }  
619 - }  
620 -  
621 - currentObjectId = null;  
622 - },  
623 - getUserAgent: function() {  
624 - return navigator.userAgent;  
625 - },  
626 - getPlatform: function() {  
627 - return navigator.platform;  
628 - }  
629 -  
630 - }  
631 -  
632 -})();  
633 -  
634 -// Initialization  
635 -  
636 -// Automated unit testing and other diagnostics  
637 -  
638 -function setURL(url)  
639 -{  
640 - document.location.href = url;  
641 -}  
642 -  
643 -function backButton()  
644 -{  
645 - history.back();  
646 -}  
647 -  
648 -function forwardButton()  
649 -{  
650 - history.forward();  
651 -}  
652 -  
653 -function goForwardOrBackInHistory(step)  
654 -{  
655 - history.go(step);  
656 -}  
657 -  
658 -//BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });  
659 -(function(i) {  
660 - var u =navigator.userAgent;var e=/*@cc_on!@*/false;  
661 - var st = setTimeout;  
662 - if(/webkit/i.test(u)){  
663 - st(function(){  
664 - var dr=document.readyState;  
665 - if(dr=="loaded"||dr=="complete"){i()}  
666 - else{st(arguments.callee,10);}},10);  
667 - } else if((/mozilla/i.test(u)&&!/(compati)/.test(u)) || (/opera/i.test(u))){  
668 - document.addEventListener("DOMContentLoaded",i,false);  
669 - } else if(e){  
670 - (function(){  
671 - var t=document.createElement('doc:rdy');  
672 - try{t.doScroll('left');  
673 - i();t=null;  
674 - }catch(e){st(arguments.callee,0);}})();  
675 - } else{  
676 - window.onload=i;  
677 - }  
678 -})( function() {BrowserHistory.initialize();} );  
1 -<html>  
2 - <head>  
3 - <META HTTP-EQUIV="Pragma" CONTENT="no-cache">  
4 - <META HTTP-EQUIV="Expires" CONTENT="-1">  
5 - </head>  
6 - <body>  
7 - <script>  
8 - function processUrl()  
9 - {  
10 -  
11 - var pos = url.indexOf("?");  
12 - url = pos != -1 ? url.substr(pos + 1) : "";  
13 - if (!parent._ie_firstload) {  
14 - parent.BrowserHistory.setBrowserURL(url);  
15 - try {  
16 - parent.BrowserHistory.browserURLChange(url);  
17 - } catch(e) { }  
18 - } else {  
19 - parent._ie_firstload = false;  
20 - }  
21 - }  
22 -  
23 - var url = document.location.href;  
24 - processUrl();  
25 - document.write(encodeURIComponent(url));  
26 - </script>  
27 - Hidden frame for Browser History support.  
28 - </body>  
29 -</html>  
1 -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
2 -<!-- saved from url=(0014)about:internet -->  
3 -<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">  
4 - <!--  
5 - Smart developers always View Source.  
6 -  
7 - This application was built using Adobe Flex, an open source framework  
8 - for building rich Internet applications that get delivered via the  
9 - Flash Player or to desktops via Adobe AIR.  
10 -  
11 - Learn more about Flex at http://flex.org  
12 - // -->  
13 - <head>  
14 - <title>${title}</title>  
15 - <meta name="google" value="notranslate" />  
16 - <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
17 - <!-- Include CSS to eliminate any default margins/padding and set the height of the html element and  
18 - the body element to 100%, because Firefox, or any Gecko based browser, interprets percentage as  
19 - the percentage of the height of its parent container, which has to be set explicitly. Fix for  
20 - Firefox 3.6 focus border issues. Initially, don't display flashContent div so it won't show  
21 - if JavaScript disabled.  
22 - -->  
23 - <style type="text/css" media="screen">  
24 - html, body { height:100%; }  
25 - body { margin:0; padding:0; overflow:auto; text-align:center;  
26 - background-color: ${bgcolor}; }  
27 - object:focus { outline:none; }  
28 - #flashContent { display:none; }  
29 - </style>  
30 -  
31 - <!-- Enable Browser History by replacing useBrowserHistory tokens with two hyphens -->  
32 - <!-- BEGIN Browser History required section ${useBrowserHistory}>  
33 - <link rel="stylesheet" type="text/css" href="history/history.css" />  
34 - <script type="text/javascript" src="history/history.js"></script>  
35 - <!${useBrowserHistory} END Browser History required section -->  
36 -  
37 - <script type="text/javascript" src="swfobject.js"></script>  
38 - <script type="text/javascript">  
39 - // For version detection, set to min. required Flash Player version, or 0 (or 0.0.0), for no version detection.  
40 - var swfVersionStr = "${version_major}.${version_minor}.${version_revision}";  
41 - // To use express install, set to playerProductInstall.swf, otherwise the empty string.  
42 - var xiSwfUrlStr = "${expressInstallSwf}";  
43 - var flashvars = {};  
44 - var params = {};  
45 - params.quality = "high";  
46 - params.bgcolor = "${bgcolor}";  
47 - params.allowscriptaccess = "sameDomain";  
48 - params.allowfullscreen = "true";  
49 - var attributes = {};  
50 - attributes.id = "${application}";  
51 - attributes.name = "${application}";  
52 - attributes.align = "middle";  
53 - swfobject.embedSWF(  
54 - "${swf}.swf", "flashContent",  
55 - "${width}", "${height}",  
56 - swfVersionStr, xiSwfUrlStr,  
57 - flashvars, params, attributes);  
58 - // JavaScript enabled so display the flashContent div in case it is not replaced with a swf object.  
59 - swfobject.createCSS("#flashContent", "display:block;text-align:left;");  
60 - </script>  
61 - </head>  
62 - <body>  
63 - <!-- SWFObject's dynamic embed method replaces this alternative HTML content with Flash content when enough  
64 - JavaScript and Flash plug-in support is available. The div is initially hidden so that it doesn't show  
65 - when JavaScript is disabled.  
66 - -->  
67 - <div id="flashContent">  
68 - <p>  
69 - To view this page ensure that Adobe Flash Player version  
70 - ${version_major}.${version_minor}.${version_revision} or greater is installed.  
71 - </p>  
72 - <script type="text/javascript">  
73 - var pageHost = ((document.location.protocol == "https:") ? "https://" : "http://");  
74 - document.write("<a href='http://www.adobe.com/go/getflashplayer'><img src='"  
75 - + pageHost + "www.adobe.com/images/shared/download_buttons/get_flash_player.gif' alt='Get Adobe Flash player' /></a>" );  
76 - </script>  
77 - </div>  
78 -  
79 - <noscript>  
80 - <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="${width}" height="${height}" id="${application}">  
81 - <param name="movie" value="${swf}.swf" />  
82 - <param name="quality" value="high" />  
83 - <param name="bgcolor" value="${bgcolor}" />  
84 - <param name="allowScriptAccess" value="sameDomain" />  
85 - <param name="allowFullScreen" value="true" />  
86 - <!--[if !IE]>-->  
87 - <object type="application/x-shockwave-flash" data="${swf}.swf" width="${width}" height="${height}">  
88 - <param name="quality" value="high" />  
89 - <param name="bgcolor" value="${bgcolor}" />  
90 - <param name="allowScriptAccess" value="sameDomain" />  
91 - <param name="allowFullScreen" value="true" />  
92 - <!--<![endif]-->  
93 - <!--[if gte IE 6]>-->  
94 - <p>  
95 - Either scripts and active content are not permitted to run or Adobe Flash Player version  
96 - ${version_major}.${version_minor}.${version_revision} or greater is not installed.  
97 - </p>  
98 - <!--<![endif]-->  
99 - <a href="http://www.adobe.com/go/getflashplayer">  
100 - <img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash Player" />  
101 - </a>  
102 - <!--[if !IE]>-->  
103 - </object>  
104 - <!--<![endif]-->  
105 - </object>  
106 - </noscript>  
107 - </body>  
108 -</html>  
1 -/*! SWFObject v2.2 <http://code.google.com/p/swfobject/>  
2 - is released under the MIT License <http://www.opensource.org/licenses/mit-license.php>  
3 -*/  
4 -  
5 -var swfobject = function() {  
6 -  
7 - var UNDEF = "undefined",  
8 - OBJECT = "object",  
9 - SHOCKWAVE_FLASH = "Shockwave Flash",  
10 - SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",  
11 - FLASH_MIME_TYPE = "application/x-shockwave-flash",  
12 - EXPRESS_INSTALL_ID = "SWFObjectExprInst",  
13 - ON_READY_STATE_CHANGE = "onreadystatechange",  
14 -  
15 - win = window,  
16 - doc = document,  
17 - nav = navigator,  
18 -  
19 - plugin = false,  
20 - domLoadFnArr = [main],  
21 - regObjArr = [],  
22 - objIdArr = [],  
23 - listenersArr = [],  
24 - storedAltContent,  
25 - storedAltContentId,  
26 - storedCallbackFn,  
27 - storedCallbackObj,  
28 - isDomLoaded = false,  
29 - isExpressInstallActive = false,  
30 - dynamicStylesheet,  
31 - dynamicStylesheetMedia,  
32 - autoHideShow = true,  
33 -  
34 - /* Centralized function for browser feature detection  
35 - - User agent string detection is only used when no good alternative is possible  
36 - - Is executed directly for optimal performance  
37 - */  
38 - ua = function() {  
39 - var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF,  
40 - u = nav.userAgent.toLowerCase(),  
41 - p = nav.platform.toLowerCase(),  
42 - windows = p ? /win/.test(p) : /win/.test(u),  
43 - mac = p ? /mac/.test(p) : /mac/.test(u),  
44 - webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit  
45 - 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  
46 - playerVersion = [0,0,0],  
47 - d = null;  
48 - if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {  
49 - d = nav.plugins[SHOCKWAVE_FLASH].description;  
50 - 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+  
51 - plugin = true;  
52 - ie = false; // cascaded feature detection for Internet Explorer  
53 - d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");  
54 - playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);  
55 - playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);  
56 - playerVersion[2] = /[a-zA-Z]/.test(d) ? parseInt(d.replace(/^.*[a-zA-Z]+(.*)$/, "$1"), 10) : 0;  
57 - }  
58 - }  
59 - else if (typeof win.ActiveXObject != UNDEF) {  
60 - try {  
61 - var a = new ActiveXObject(SHOCKWAVE_FLASH_AX);  
62 - if (a) { // a will return null when ActiveX is disabled  
63 - d = a.GetVariable("$version");  
64 - if (d) {  
65 - ie = true; // cascaded feature detection for Internet Explorer  
66 - d = d.split(" ")[1].split(",");  
67 - playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];  
68 - }  
69 - }  
70 - }  
71 - catch(e) {}  
72 - }  
73 - return { w3:w3cdom, pv:playerVersion, wk:webkit, ie:ie, win:windows, mac:mac };  
74 - }(),  
75 -  
76 - /* Cross-browser onDomLoad  
77 - - Will fire an event as soon as the DOM of a web page is loaded  
78 - - Internet Explorer workaround based on Diego Perini's solution: http://javascript.nwbox.com/IEContentLoaded/  
79 - - Regular onload serves as fallback  
80 - */  
81 - onDomLoad = function() {  
82 - if (!ua.w3) { return; }  
83 - 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  
84 - callDomLoadFunctions();  
85 - }  
86 - if (!isDomLoaded) {  
87 - if (typeof doc.addEventListener != UNDEF) {  
88 - doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, false);  
89 - }  
90 - if (ua.ie && ua.win) {  
91 - doc.attachEvent(ON_READY_STATE_CHANGE, function() {  
92 - if (doc.readyState == "complete") {  
93 - doc.detachEvent(ON_READY_STATE_CHANGE, arguments.callee);  
94 - callDomLoadFunctions();  
95 - }  
96 - });  
97 - if (win == top) { // if not inside an iframe  
98 - (function(){  
99 - if (isDomLoaded) { return; }  
100 - try {  
101 - doc.documentElement.doScroll("left");  
102 - }  
103 - catch(e) {  
104 - setTimeout(arguments.callee, 0);  
105 - return;  
106 - }  
107 - callDomLoadFunctions();  
108 - })();  
109 - }  
110 - }  
111 - if (ua.wk) {  
112 - (function(){  
113 - if (isDomLoaded) { return; }  
114 - if (!/loaded|complete/.test(doc.readyState)) {  
115 - setTimeout(arguments.callee, 0);  
116 - return;  
117 - }  
118 - callDomLoadFunctions();  
119 - })();  
120 - }  
121 - addLoadEvent(callDomLoadFunctions);  
122 - }  
123 - }();  
124 -  
125 - function callDomLoadFunctions() {  
126 - if (isDomLoaded) { return; }  
127 - try { // test if we can really add/remove elements to/from the DOM; we don't want to fire it too early  
128 - var t = doc.getElementsByTagName("body")[0].appendChild(createElement("span"));  
129 - t.parentNode.removeChild(t);  
130 - }  
131 - catch (e) { return; }  
132 - isDomLoaded = true;  
133 - var dl = domLoadFnArr.length;  
134 - for (var i = 0; i < dl; i++) {  
135 - domLoadFnArr[i]();  
136 - }  
137 - }  
138 -  
139 - function addDomLoadEvent(fn) {  
140 - if (isDomLoaded) {  
141 - fn();  
142 - }  
143 - else {  
144 - domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+  
145 - }  
146 - }  
147 -  
148 - /* Cross-browser onload  
149 - - Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/  
150 - - Will fire an event as soon as a web page including all of its assets are loaded  
151 - */  
152 - function addLoadEvent(fn) {  
153 - if (typeof win.addEventListener != UNDEF) {  
154 - win.addEventListener("load", fn, false);  
155 - }  
156 - else if (typeof doc.addEventListener != UNDEF) {  
157 - doc.addEventListener("load", fn, false);  
158 - }  
159 - else if (typeof win.attachEvent != UNDEF) {  
160 - addListener(win, "onload", fn);  
161 - }  
162 - else if (typeof win.onload == "function") {  
163 - var fnOld = win.onload;  
164 - win.onload = function() {  
165 - fnOld();  
166 - fn();  
167 - };  
168 - }  
169 - else {  
170 - win.onload = fn;  
171 - }  
172 - }  
173 -  
174 - /* Main function  
175 - - Will preferably execute onDomLoad, otherwise onload (as a fallback)  
176 - */  
177 - function main() {  
178 - if (plugin) {  
179 - testPlayerVersion();  
180 - }  
181 - else {  
182 - matchVersions();  
183 - }  
184 - }  
185 -  
186 - /* Detect the Flash Player version for non-Internet Explorer browsers  
187 - - Detecting the plug-in version via the object element is more precise than using the plugins collection item's description:  
188 - a. Both release and build numbers can be detected  
189 - b. Avoid wrong descriptions by corrupt installers provided by Adobe  
190 - c. Avoid wrong descriptions by multiple Flash Player entries in the plugin Array, caused by incorrect browser imports  
191 - - Disadvantage of this method is that it depends on the availability of the DOM, while the plugins collection is immediately available  
192 - */  
193 - function testPlayerVersion() {  
194 - var b = doc.getElementsByTagName("body")[0];  
195 - var o = createElement(OBJECT);  
196 - o.setAttribute("type", FLASH_MIME_TYPE);  
197 - var t = b.appendChild(o);  
198 - if (t) {  
199 - var counter = 0;  
200 - (function(){  
201 - if (typeof t.GetVariable != UNDEF) {  
202 - var d = t.GetVariable("$version");  
203 - if (d) {  
204 - d = d.split(" ")[1].split(",");  
205 - ua.pv = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];  
206 - }  
207 - }  
208 - else if (counter < 10) {  
209 - counter++;  
210 - setTimeout(arguments.callee, 10);  
211 - return;  
212 - }  
213 - b.removeChild(o);  
214 - t = null;  
215 - matchVersions();  
216 - })();  
217 - }  
218 - else {  
219 - matchVersions();  
220 - }  
221 - }  
222 -  
223 - /* Perform Flash Player and SWF version matching; static publishing only  
224 - */  
225 - function matchVersions() {  
226 - var rl = regObjArr.length;  
227 - if (rl > 0) {  
228 - for (var i = 0; i < rl; i++) { // for each registered object element  
229 - var id = regObjArr[i].id;  
230 - var cb = regObjArr[i].callbackFn;  
231 - var cbObj = {success:false, id:id};  
232 - if (ua.pv[0] > 0) {  
233 - var obj = getElementById(id);  
234 - if (obj) {  
235 - if (hasPlayerVersion(regObjArr[i].swfVersion) && !(ua.wk && ua.wk < 312)) { // Flash Player version >= published SWF version: Houston, we have a match!  
236 - setVisibility(id, true);  
237 - if (cb) {  
238 - cbObj.success = true;  
239 - cbObj.ref = getObjectById(id);  
240 - cb(cbObj);  
241 - }  
242 - }  
243 - else if (regObjArr[i].expressInstall && canExpressInstall()) { // show the Adobe Express Install dialog if set by the web page author and if supported  
244 - var att = {};  
245 - att.data = regObjArr[i].expressInstall;  
246 - att.width = obj.getAttribute("width") || "0";  
247 - att.height = obj.getAttribute("height") || "0";  
248 - if (obj.getAttribute("class")) { att.styleclass = obj.getAttribute("class"); }  
249 - if (obj.getAttribute("align")) { att.align = obj.getAttribute("align"); }  
250 - // parse HTML object param element's name-value pairs  
251 - var par = {};  
252 - var p = obj.getElementsByTagName("param");  
253 - var pl = p.length;  
254 - for (var j = 0; j < pl; j++) {  
255 - if (p[j].getAttribute("name").toLowerCase() != "movie") {  
256 - par[p[j].getAttribute("name")] = p[j].getAttribute("value");  
257 - }  
258 - }  
259 - showExpressInstall(att, par, id, cb);  
260 - }  
261 - 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  
262 - displayAltContent(obj);  
263 - if (cb) { cb(cbObj); }  
264 - }  
265 - }  
266 - }  
267 - 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)  
268 - setVisibility(id, true);  
269 - if (cb) {  
270 - var o = getObjectById(id); // test whether there is an HTML object element or not  
271 - if (o && typeof o.SetVariable != UNDEF) {  
272 - cbObj.success = true;  
273 - cbObj.ref = o;  
274 - }  
275 - cb(cbObj);  
276 - }  
277 - }  
278 - }  
279 - }  
280 - }  
281 -  
282 - function getObjectById(objectIdStr) {  
283 - var r = null;  
284 - var o = getElementById(objectIdStr);  
285 - if (o && o.nodeName == "OBJECT") {  
286 - if (typeof o.SetVariable != UNDEF) {  
287 - r = o;  
288 - }  
289 - else {  
290 - var n = o.getElementsByTagName(OBJECT)[0];  
291 - if (n) {  
292 - r = n;  
293 - }  
294 - }  
295 - }  
296 - return r;  
297 - }  
298 -  
299 - /* Requirements for Adobe Express Install  
300 - - only one instance can be active at a time  
301 - - fp 6.0.65 or higher  
302 - - Win/Mac OS only  
303 - - no Webkit engines older than version 312  
304 - */  
305 - function canExpressInstall() {  
306 - return !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac) && !(ua.wk && ua.wk < 312);  
307 - }  
308 -  
309 - /* Show the Adobe Express Install dialog  
310 - - Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75  
311 - */  
312 - function showExpressInstall(att, par, replaceElemIdStr, callbackFn) {  
313 - isExpressInstallActive = true;  
314 - storedCallbackFn = callbackFn || null;  
315 - storedCallbackObj = {success:false, id:replaceElemIdStr};  
316 - var obj = getElementById(replaceElemIdStr);  
317 - if (obj) {  
318 - if (obj.nodeName == "OBJECT") { // static publishing  
319 - storedAltContent = abstractAltContent(obj);  
320 - storedAltContentId = null;  
321 - }  
322 - else { // dynamic publishing  
323 - storedAltContent = obj;  
324 - storedAltContentId = replaceElemIdStr;  
325 - }  
326 - att.id = EXPRESS_INSTALL_ID;  
327 - if (typeof att.width == UNDEF || (!/%$/.test(att.width) && parseInt(att.width, 10) < 310)) { att.width = "310"; }  
328 - if (typeof att.height == UNDEF || (!/%$/.test(att.height) && parseInt(att.height, 10) < 137)) { att.height = "137"; }  
329 - doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";  
330 - var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",  
331 - fv = "MMredirectURL=" + encodeURI(window.location).toString().replace(/&/g,"%26") + "&MMplayerType=" + pt + "&MMdoctitle=" + doc.title;  
332 - if (typeof par.flashvars != UNDEF) {  
333 - par.flashvars += "&" + fv;  
334 - }  
335 - else {  
336 - par.flashvars = fv;  
337 - }  
338 - // 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,  
339 - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work  
340 - if (ua.ie && ua.win && obj.readyState != 4) {  
341 - var newObj = createElement("div");  
342 - replaceElemIdStr += "SWFObjectNew";  
343 - newObj.setAttribute("id", replaceElemIdStr);  
344 - obj.parentNode.insertBefore(newObj, obj); // insert placeholder div that will be replaced by the object element that loads expressinstall.swf  
345 - obj.style.display = "none";  
346 - (function(){  
347 - if (obj.readyState == 4) {  
348 - obj.parentNode.removeChild(obj);  
349 - }  
350 - else {  
351 - setTimeout(arguments.callee, 10);  
352 - }  
353 - })();  
354 - }  
355 - createSWF(att, par, replaceElemIdStr);  
356 - }  
357 - }  
358 -  
359 - /* Functions to abstract and display alternative content  
360 - */  
361 - function displayAltContent(obj) {  
362 - if (ua.ie && ua.win && obj.readyState != 4) {  
363 - // 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,  
364 - // because you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work  
365 - var el = createElement("div");  
366 - obj.parentNode.insertBefore(el, obj); // insert placeholder div that will be replaced by the alternative content  
367 - el.parentNode.replaceChild(abstractAltContent(obj), el);  
368 - obj.style.display = "none";  
369 - (function(){  
370 - if (obj.readyState == 4) {  
371 - obj.parentNode.removeChild(obj);  
372 - }  
373 - else {  
374 - setTimeout(arguments.callee, 10);  
375 - }  
376 - })();  
377 - }  
378 - else {  
379 - obj.parentNode.replaceChild(abstractAltContent(obj), obj);  
380 - }  
381 - }  
382 -  
383 - function abstractAltContent(obj) {  
384 - var ac = createElement("div");  
385 - if (ua.win && ua.ie) {  
386 - ac.innerHTML = obj.innerHTML;  
387 - }  
388 - else {  
389 - var nestedObj = obj.getElementsByTagName(OBJECT)[0];  
390 - if (nestedObj) {  
391 - var c = nestedObj.childNodes;  
392 - if (c) {  
393 - var cl = c.length;  
394 - for (var i = 0; i < cl; i++) {  
395 - if (!(c[i].nodeType == 1 && c[i].nodeName == "PARAM") && !(c[i].nodeType == 8)) {  
396 - ac.appendChild(c[i].cloneNode(true));  
397 - }  
398 - }  
399 - }  
400 - }  
401 - }  
402 - return ac;  
403 - }  
404 -  
405 - /* Cross-browser dynamic SWF creation  
406 - */  
407 - function createSWF(attObj, parObj, id) {  
408 - var r, el = getElementById(id);  
409 - if (ua.wk && ua.wk < 312) { return r; }  
410 - if (el) {  
411 - if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content  
412 - attObj.id = id;  
413 - }  
414 - if (ua.ie && ua.win) { // Internet Explorer + the HTML object element + W3C DOM methods do not combine: fall back to outerHTML  
415 - var att = "";  
416 - for (var i in attObj) {  
417 - if (attObj[i] != Object.prototype[i]) { // filter out prototype additions from other potential libraries  
418 - if (i.toLowerCase() == "data") {  
419 - parObj.movie = attObj[i];  
420 - }  
421 - else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword  
422 - att += ' class="' + attObj[i] + '"';  
423 - }  
424 - else if (i.toLowerCase() != "classid") {  
425 - att += ' ' + i + '="' + attObj[i] + '"';  
426 - }  
427 - }  
428 - }  
429 - var par = "";  
430 - for (var j in parObj) {  
431 - if (parObj[j] != Object.prototype[j]) { // filter out prototype additions from other potential libraries  
432 - par += '<param name="' + j + '" value="' + parObj[j] + '" />';  
433 - }  
434 - }  
435 - el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';  
436 - objIdArr[objIdArr.length] = attObj.id; // stored to fix object 'leaks' on unload (dynamic publishing only)  
437 - r = getElementById(attObj.id);  
438 - }  
439 - else { // well-behaving browsers  
440 - var o = createElement(OBJECT);  
441 - o.setAttribute("type", FLASH_MIME_TYPE);  
442 - for (var m in attObj) {  
443 - if (attObj[m] != Object.prototype[m]) { // filter out prototype additions from other potential libraries  
444 - if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword  
445 - o.setAttribute("class", attObj[m]);  
446 - }  
447 - else if (m.toLowerCase() != "classid") { // filter out IE specific attribute  
448 - o.setAttribute(m, attObj[m]);  
449 - }  
450 - }  
451 - }  
452 - for (var n in parObj) {  
453 - if (parObj[n] != Object.prototype[n] && n.toLowerCase() != "movie") { // filter out prototype additions from other potential libraries and IE specific param element  
454 - createObjParam(o, n, parObj[n]);  
455 - }  
456 - }  
457 - el.parentNode.replaceChild(o, el);  
458 - r = o;  
459 - }  
460 - }  
461 - return r;  
462 - }  
463 -  
464 - function createObjParam(el, pName, pValue) {  
465 - var p = createElement("param");  
466 - p.setAttribute("name", pName);  
467 - p.setAttribute("value", pValue);  
468 - el.appendChild(p);  
469 - }  
470 -  
471 - /* Cross-browser SWF removal  
472 - - Especially needed to safely and completely remove a SWF in Internet Explorer  
473 - */  
474 - function removeSWF(id) {  
475 - var obj = getElementById(id);  
476 - if (obj && obj.nodeName == "OBJECT") {  
477 - if (ua.ie && ua.win) {  
478 - obj.style.display = "none";  
479 - (function(){  
480 - if (obj.readyState == 4) {  
481 - removeObjectInIE(id);  
482 - }  
483 - else {  
484 - setTimeout(arguments.callee, 10);  
485 - }  
486 - })();  
487 - }  
488 - else {  
489 - obj.parentNode.removeChild(obj);  
490 - }  
491 - }  
492 - }  
493 -  
494 - function removeObjectInIE(id) {  
495 - var obj = getElementById(id);  
496 - if (obj) {  
497 - for (var i in obj) {  
498 - if (typeof obj[i] == "function") {  
499 - obj[i] = null;  
500 - }  
501 - }  
502 - obj.parentNode.removeChild(obj);  
503 - }  
504 - }  
505 -  
506 - /* Functions to optimize JavaScript compression  
507 - */  
508 - function getElementById(id) {  
509 - var el = null;  
510 - try {  
511 - el = doc.getElementById(id);  
512 - }  
513 - catch (e) {}  
514 - return el;  
515 - }  
516 -  
517 - function createElement(el) {  
518 - return doc.createElement(el);  
519 - }  
520 -  
521 - /* Updated attachEvent function for Internet Explorer  
522 - - Stores attachEvent information in an Array, so on unload the detachEvent functions can be called to avoid memory leaks  
523 - */  
524 - function addListener(target, eventType, fn) {  
525 - target.attachEvent(eventType, fn);  
526 - listenersArr[listenersArr.length] = [target, eventType, fn];  
527 - }  
528 -  
529 - /* Flash Player and SWF content version matching  
530 - */  
531 - function hasPlayerVersion(rv) {  
532 - var pv = ua.pv, v = rv.split(".");  
533 - v[0] = parseInt(v[0], 10);  
534 - v[1] = parseInt(v[1], 10) || 0; // supports short notation, e.g. "9" instead of "9.0.0"  
535 - v[2] = parseInt(v[2], 10) || 0;  
536 - return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;  
537 - }  
538 -  
539 - /* Cross-browser dynamic CSS creation  
540 - - Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php  
541 - */  
542 - function createCSS(sel, decl, media, newStyle) {  
543 - if (ua.ie && ua.mac) { return; }  
544 - var h = doc.getElementsByTagName("head")[0];  
545 - if (!h) { return; } // to also support badly authored HTML pages that lack a head element  
546 - var m = (media && typeof media == "string") ? media : "screen";  
547 - if (newStyle) {  
548 - dynamicStylesheet = null;  
549 - dynamicStylesheetMedia = null;  
550 - }  
551 - if (!dynamicStylesheet || dynamicStylesheetMedia != m) {  
552 - // create dynamic stylesheet + get a global reference to it  
553 - var s = createElement("style");  
554 - s.setAttribute("type", "text/css");  
555 - s.setAttribute("media", m);  
556 - dynamicStylesheet = h.appendChild(s);  
557 - if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {  
558 - dynamicStylesheet = doc.styleSheets[doc.styleSheets.length - 1];  
559 - }  
560 - dynamicStylesheetMedia = m;  
561 - }  
562 - // add style rule  
563 - if (ua.ie && ua.win) {  
564 - if (dynamicStylesheet && typeof dynamicStylesheet.addRule == OBJECT) {  
565 - dynamicStylesheet.addRule(sel, decl);  
566 - }  
567 - }  
568 - else {  
569 - if (dynamicStylesheet && typeof doc.createTextNode != UNDEF) {  
570 - dynamicStylesheet.appendChild(doc.createTextNode(sel + " {" + decl + "}"));  
571 - }  
572 - }  
573 - }  
574 -  
575 - function setVisibility(id, isVisible) {  
576 - if (!autoHideShow) { return; }  
577 - var v = isVisible ? "visible" : "hidden";  
578 - if (isDomLoaded && getElementById(id)) {  
579 - getElementById(id).style.visibility = v;  
580 - }  
581 - else {  
582 - createCSS("#" + id, "visibility:" + v);  
583 - }  
584 - }  
585 -  
586 - /* Filter to avoid XSS attacks  
587 - */  
588 - function urlEncodeIfNecessary(s) {  
589 - var regex = /[\\\"<>\.;]/;  
590 - var hasBadChars = regex.exec(s) != null;  
591 - return hasBadChars && typeof encodeURIComponent != UNDEF ? encodeURIComponent(s) : s;  
592 - }  
593 -  
594 - /* Release memory to avoid memory leaks caused by closures, fix hanging audio/video threads and force open sockets/NetConnections to disconnect (Internet Explorer only)  
595 - */  
596 - var cleanup = function() {  
597 - if (ua.ie && ua.win) {  
598 - window.attachEvent("onunload", function() {  
599 - // remove listeners to avoid memory leaks  
600 - var ll = listenersArr.length;  
601 - for (var i = 0; i < ll; i++) {  
602 - listenersArr[i][0].detachEvent(listenersArr[i][1], listenersArr[i][2]);  
603 - }  
604 - // cleanup dynamically embedded objects to fix audio/video threads and force open sockets and NetConnections to disconnect  
605 - var il = objIdArr.length;  
606 - for (var j = 0; j < il; j++) {  
607 - removeSWF(objIdArr[j]);  
608 - }  
609 - // cleanup library's main closures to avoid memory leaks  
610 - for (var k in ua) {  
611 - ua[k] = null;  
612 - }  
613 - ua = null;  
614 - for (var l in swfobject) {  
615 - swfobject[l] = null;  
616 - }  
617 - swfobject = null;  
618 - });  
619 - }  
620 - }();  
621 -  
622 - return {  
623 - /* Public API  
624 - - Reference: http://code.google.com/p/swfobject/wiki/documentation  
625 - */  
626 - registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr, callbackFn) {  
627 - if (ua.w3 && objectIdStr && swfVersionStr) {  
628 - var regObj = {};  
629 - regObj.id = objectIdStr;  
630 - regObj.swfVersion = swfVersionStr;  
631 - regObj.expressInstall = xiSwfUrlStr;  
632 - regObj.callbackFn = callbackFn;  
633 - regObjArr[regObjArr.length] = regObj;  
634 - setVisibility(objectIdStr, false);  
635 - }  
636 - else if (callbackFn) {  
637 - callbackFn({success:false, id:objectIdStr});  
638 - }  
639 - },  
640 -  
641 - getObjectById: function(objectIdStr) {  
642 - if (ua.w3) {  
643 - return getObjectById(objectIdStr);  
644 - }  
645 - },  
646 -  
647 - embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj, callbackFn) {  
648 - var callbackObj = {success:false, id:replaceElemIdStr};  
649 - if (ua.w3 && !(ua.wk && ua.wk < 312) && swfUrlStr && replaceElemIdStr && widthStr && heightStr && swfVersionStr) {  
650 - setVisibility(replaceElemIdStr, false);  
651 - addDomLoadEvent(function() {  
652 - widthStr += ""; // auto-convert to string  
653 - heightStr += "";  
654 - var att = {};  
655 - if (attObj && typeof attObj === OBJECT) {  
656 - for (var i in attObj) { // copy object to avoid the use of references, because web authors often reuse attObj for multiple SWFs  
657 - att[i] = attObj[i];  
658 - }  
659 - }  
660 - att.data = swfUrlStr;  
661 - att.width = widthStr;  
662 - att.height = heightStr;  
663 - var par = {};  
664 - if (parObj && typeof parObj === OBJECT) {  
665 - for (var j in parObj) { // copy object to avoid the use of references, because web authors often reuse parObj for multiple SWFs  
666 - par[j] = parObj[j];  
667 - }  
668 - }  
669 - if (flashvarsObj && typeof flashvarsObj === OBJECT) {  
670 - for (var k in flashvarsObj) { // copy object to avoid the use of references, because web authors often reuse flashvarsObj for multiple SWFs  
671 - if (typeof par.flashvars != UNDEF) {  
672 - par.flashvars += "&" + k + "=" + flashvarsObj[k];  
673 - }  
674 - else {  
675 - par.flashvars = k + "=" + flashvarsObj[k];  
676 - }  
677 - }  
678 - }  
679 - if (hasPlayerVersion(swfVersionStr)) { // create SWF  
680 - var obj = createSWF(att, par, replaceElemIdStr);  
681 - if (att.id == replaceElemIdStr) {  
682 - setVisibility(replaceElemIdStr, true);  
683 - }  
684 - callbackObj.success = true;  
685 - callbackObj.ref = obj;  
686 - }  
687 - else if (xiSwfUrlStr && canExpressInstall()) { // show Adobe Express Install  
688 - att.data = xiSwfUrlStr;  
689 - showExpressInstall(att, par, replaceElemIdStr, callbackFn);  
690 - return;  
691 - }  
692 - else { // show alternative content  
693 - setVisibility(replaceElemIdStr, true);  
694 - }  
695 - if (callbackFn) { callbackFn(callbackObj); }  
696 - });  
697 - }  
698 - else if (callbackFn) { callbackFn(callbackObj); }  
699 - },  
700 -  
701 - switchOffAutoHideShow: function() {  
702 - autoHideShow = false;  
703 - },  
704 -  
705 - ua: ua,  
706 -  
707 - getFlashPlayerVersion: function() {  
708 - return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };  
709 - },  
710 -  
711 - hasFlashPlayerVersion: hasPlayerVersion,  
712 -  
713 - createSWF: function(attObj, parObj, replaceElemIdStr) {  
714 - if (ua.w3) {  
715 - return createSWF(attObj, parObj, replaceElemIdStr);  
716 - }  
717 - else {  
718 - return undefined;  
719 - }  
720 - },  
721 -  
722 - showExpressInstall: function(att, par, replaceElemIdStr, callbackFn) {  
723 - if (ua.w3 && canExpressInstall()) {  
724 - showExpressInstall(att, par, replaceElemIdStr, callbackFn);  
725 - }  
726 - },  
727 -  
728 - removeSWF: function(objElemIdStr) {  
729 - if (ua.w3) {  
730 - removeSWF(objElemIdStr);  
731 - }  
732 - },  
733 -  
734 - createCSS: function(selStr, declStr, mediaStr, newStyleBoolean) {  
735 - if (ua.w3) {  
736 - createCSS(selStr, declStr, mediaStr, newStyleBoolean);  
737 - }  
738 - },  
739 -  
740 - addDomLoadEvent: addDomLoadEvent,  
741 -  
742 - addLoadEvent: addLoadEvent,  
743 -  
744 - getQueryParamValue: function(param) {  
745 - var q = doc.location.search || doc.location.hash;  
746 - if (q) {  
747 - if (/\?/.test(q)) { q = q.split("?")[1]; } // strip question mark  
748 - if (param == null) {  
749 - return urlEncodeIfNecessary(q);  
750 - }  
751 - var pairs = q.split("&");  
752 - for (var i = 0; i < pairs.length; i++) {  
753 - if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {  
754 - return urlEncodeIfNecessary(pairs[i].substring((pairs[i].indexOf("=") + 1)));  
755 - }  
756 - }  
757 - }  
758 - return "";  
759 - },  
760 -  
761 - // For internal usage only  
762 - expressInstallCallback: function() {  
763 - if (isExpressInstallActive) {  
764 - var obj = getElementById(EXPRESS_INSTALL_ID);  
765 - if (obj && storedAltContent) {  
766 - obj.parentNode.replaceChild(storedAltContent, obj);  
767 - if (storedAltContentId) {  
768 - setVisibility(storedAltContentId, true);  
769 - if (ua.ie && ua.win) { storedAltContent.style.display = "block"; }  
770 - }  
771 - if (storedCallbackFn) { storedCallbackFn(storedCallbackObj); }  
772 - }  
773 - isExpressInstallActive = false;  
774 - }  
775 - }  
776 - };  
777 -}();  
1 -package  
2 -{  
3 - import SrsClass.SrsElapsedTimer;  
4 - import SrsClass.SrsSettings;  
5 -  
6 - import fl.controls.Button;  
7 - import fl.controls.Label;  
8 - import fl.controls.ProgressBar;  
9 - import fl.controls.ProgressBarDirection;  
10 - import fl.controls.ProgressBarMode;  
11 - import fl.controls.TextArea;  
12 -  
13 - import flash.display.Loader;  
14 - import flash.display.LoaderInfo;  
15 - import flash.display.MovieClip;  
16 - import flash.display.Sprite;  
17 - import flash.display.StageAlign;  
18 - import flash.display.StageScaleMode;  
19 - import flash.events.Event;  
20 - import flash.events.IOErrorEvent;  
21 - import flash.events.MouseEvent;  
22 - import flash.events.NetStatusEvent;  
23 - import flash.events.TimerEvent;  
24 - import flash.external.ExternalInterface;  
25 - import flash.media.SoundTransform;  
26 - import flash.media.Video;  
27 - import flash.net.NetConnection;  
28 - import flash.net.NetStream;  
29 - import flash.net.ObjectEncoding;  
30 - import flash.net.URLLoader;  
31 - import flash.net.URLRequest;  
32 - import flash.system.System;  
33 - import flash.text.TextField;  
34 - import flash.text.TextFormat;  
35 - import flash.ui.*;  
36 - import flash.utils.Timer;  
37 - import flash.utils.clearTimeout;  
38 - import flash.utils.setTimeout;  
39 -  
40 - public class SrsBW extends Sprite  
41 - {  
42 - private var addressInput : TextArea;  
43 - private var okButton : Button;  
44 - private var logCenter : TextArea;  
45 - private var progressBar : ProgressBar;  
46 -  
47 - private var connection:NetConnection;  
48 -  
49 - private var publishTimer:Timer;  
50 -  
51 - private var stopPublishMarker:Boolean = false;  
52 -  
53 - private var progressTextLabel:Label;  
54 -  
55 -  
56 - private var loader:Loader;  
57 -  
58 - private var elapTimer:SrsElapsedTimer;  
59 -  
60 - private var server_ip:String;  
61 - private var play_kbps:Number;  
62 - private var pub_kbps:Number;  
63 -  
64 - private var settings:SrsSettings = new SrsSettings;  
65 -  
66 - // set NetConnection ObjectEncoding to AMF0  
67 - NetConnection.defaultObjectEncoding = ObjectEncoding.AMF0;  
68 -  
69 - public function SrsBW()  
70 - {  
71 - this.stage.scaleMode = StageScaleMode.NO_SCALE;  
72 - this.stage.align = StageAlign.TOP_LEFT;  
73 -  
74 - this.graphics.beginFill(0x464645, 0.8);  
75 - this.graphics.drawRect(0, 0, 700, 400);  
76 - this.graphics.endFill();  
77 -  
78 - var request:URLRequest = new URLRequest("ui.swf");  
79 - loader = new Loader()  
80 - loader.contentLoaderInfo.addEventListener(Event.COMPLETE, __loadedSWF);  
81 - loader.load(request);  
82 - loader.x = 0;  
83 - loader.y = 0;  
84 -  
85 - // NetConnection  
86 - connection = new NetConnection;  
87 - connection.client = this;  
88 - connection.addEventListener(NetStatusEvent.NET_STATUS, onStatus);  
89 -  
90 - var myMenu:ContextMenu = new ContextMenu();  
91 - myMenu.hideBuiltInItems();  
92 - myMenu.customItems.push(new ContextMenuItem("Srs 带宽测试工具 0.1", true));  
93 - this.contextMenu = myMenu;  
94 -  
95 - publishTimer = new Timer(50);  
96 - publishTimer.addEventListener(TimerEvent.TIMER, onTimerEventHandle);  
97 - addChild(loader);  
98 - }  
99 -  
100 - public function __loadedSWF(e:Event):void {  
101 - var contents:MovieClip=e.target.content as MovieClip;  
102 -  
103 - progressBar = contents.progressBar;  
104 - progressBar.setProgress(50, 100);  
105 - progressBar.indeterminate = false;  
106 - progressBar.mode = ProgressBarMode.MANUAL;  
107 - progressBar.maximum = 100;  
108 - progressBar.value = 0;  
109 -  
110 - var startButton:Button = contents.startButton;  
111 - startButton.height = 30;  
112 - startButton.addEventListener(MouseEvent.CLICK, onOKButtonClicked);  
113 -  
114 - progressTextLabel = contents.stateLabel;  
115 - addressInput = contents.addressLineEdit;  
116 -  
117 - var txt:TextFormat = new TextFormat();  
118 - txt.size = 12;  
119 - addressInput.setStyle("textFormat", txt);  
120 - progressTextLabel.setStyle("textFormat", txt);  
121 - startButton.setStyle("textFormat", txt);  
122 - contents.addressLabel.setStyle("textFormat", txt);  
123 - addressInput.setStyle("textFormat", txt);  
124 -  
125 - // restore text  
126 - addressInput.text = settings.addressText();  
127 - }  
128 -  
129 - public function onOKButtonClicked(evt:Event) : void  
130 - {  
131 - if(connection.connected){  
132 - return;  
133 - }  
134 -  
135 - connection.connect(addressInput.text);  
136 -  
137 - stopPublishMarker = false;  
138 -  
139 - // store the address into cookie  
140 - settings.addAddressText(addressInput.text);  
141 - }  
142 -  
143 - public function onStatus(evt:NetStatusEvent) : void{  
144 - trace(evt.info.code);  
145 - switch(evt.info.code){  
146 - case "NetConnection.Connect.Failed":  
147 - updateState("连接服务器失败!");  
148 - break;  
149 - case "NetConnection.Connect.Rejected":  
150 - updateState("服务器拒绝连接!");  
151 - break;  
152 - case "NetConnection.Connect.Success":  
153 - server_ip = evt.info.data.srs_server_ip;  
154 - updateState("连接服务器成功: " + server_ip);  
155 - break;  
156 - }  
157 - }  
158 -  
159 - public function close():void{  
160 - trace("close");  
161 - }  
162 -  
163 - public function onSrsBandCheckStartPlayBytes(evt:Object):void{  
164 - var duration_ms:Number = evt.duration_ms;  
165 - var interval_ms:Number = evt.interval_ms;  
166 -  
167 - connection.call("onSrsBandCheckStartingPlayBytes", null);  
168 - updateState("测试下行带宽(" + server_ip + ")");  
169 -  
170 - elapTimer = new SrsElapsedTimer;  
171 - progressBar.maximum = evt.duration_ms;  
172 - progressBar.value = 0;  
173 -  
174 - publishTimer.start();  
175 - }  
176 -  
177 - public function onSrsBandCheckPlaying(evt:Object):void{  
178 - //progressBar.value = elapTimer.elapsed();  
179 - }  
180 -  
181 - public function onTimerEventHandle(evt:TimerEvent):void  
182 - {  
183 - progressBar.value += 50;  
184 - }  
185 -  
186 - public function onSrsBandCheckStopPlayBytes(evt:Object):void{  
187 - var duration_ms:Number = evt.duration_ms;  
188 - var interval_ms:Number = evt.interval_ms;  
189 - var duration_delta:Number = evt.duration_delta;  
190 - var bytes_delta:Number = evt.bytes_delta;  
191 -  
192 - var kbps:Number = 0;  
193 - if(duration_delta > 0){  
194 - kbps = bytes_delta * 8.0 / duration_delta; // b/ms == kbps  
195 - }  
196 - kbps = (int(kbps * 10))/10.0;  
197 - play_kbps = kbps;  
198 -  
199 - flash.utils.setTimeout(stopPlayTest, 0);  
200 - progressBar.value = elapTimer.elapsed();  
201 - progressBar.value = progressBar.maximum;  
202 - }  
203 -  
204 - private function stopPlayTest():void{  
205 - connection.call("onSrsBandCheckStoppedPlayBytes", null);  
206 - publishTimer.stop();  
207 - }  
208 -  
209 - private function publisher():void{  
210 -  
211 - if(stopPublishMarker) {  
212 - return;  
213 - }  
214 -  
215 - var data:Array = new Array();  
216 - for(var i:int; i < 2000; i++){  
217 - data.push("SrS band check data from client's publishing......");  
218 - }  
219 - connection.call("onSrsBandCheckPublishing", null, data);  
220 -  
221 - flash.utils.setTimeout(publisher, 0);  
222 -  
223 - progressBar.value = elapTimer.elapsed();  
224 - }  
225 -  
226 - public function onSrsBandCheckStartPublishBytes(evt:Object):void{  
227 - var duration_ms:Number = evt.duration_ms;  
228 - var interval_ms:Number = evt.interval_ms;  
229 -  
230 - connection.call("onSrsBandCheckStartingPublishBytes", null);  
231 - updateState("测试上行带宽(" + server_ip + ")");  
232 -  
233 - flash.utils.setTimeout(publisher, 0);  
234 -  
235 - elapTimer.restart();  
236 - progressBar.maximum = duration_ms;  
237 - progressBar.value = 0;  
238 - }  
239 -  
240 - public function onSrsBandCheckStopPublishBytes(evt:Object):void{  
241 - var duration_ms:Number = evt.duration_ms;  
242 - var interval_ms:Number = evt.interval_ms;  
243 - var duration_delta:Number = evt.duration_delta;  
244 - var bytes_delta:Number = evt.bytes_delta;  
245 -  
246 - var kbps:Number = 0;  
247 - if(duration_delta > 0){  
248 - kbps = bytes_delta * 8.0 / duration_delta; // b/ms == kbps  
249 - }  
250 - kbps = (int(kbps * 10))/10.0;  
251 - pub_kbps = kbps;  
252 - progressBar.value = progressBar.maximum;  
253 -  
254 - stopPublishMarker = true;  
255 - stopPublishTest();  
256 - }  
257 -  
258 - private function stopPublishTest():void{  
259 - if(connection.connected){  
260 - connection.call("onSrsBandCheckStoppedPublishBytes", null);  
261 - }  
262 - }  
263 -  
264 - public function onSrsBandCheckFinished(evt:Object):void{  
265 - var code:Number = evt.code;  
266 - var start_time:Number = evt.start_time;  
267 - var end_time:Number = evt.end_time;  
268 - var play_kbps:Number = evt.play_kbps;  
269 - var publish_kbps:Number = evt.publish_kbps;  
270 - var play_bytes:Number = evt.play_bytes;  
271 - var play_time:Number = evt.play_time;  
272 - var publish_bytes:Number = evt.publish_bytes;  
273 - var publish_time:Number = evt.publish_time;  
274 -  
275 - updateState("检测结束: 服务器: " + server_ip + " 上行: " + publish_kbps + " kbps" + " 下行: " + play_kbps + " kbps");  
276 -  
277 - connection.call("finalClientPacket", null);  
278 - }  
279 -  
280 - public function onBWDone():void{  
281 - // do nothing  
282 - }  
283 -  
284 - private function updateState(text:String):void{  
285 - progressTextLabel.text = text;  
286 - }  
287 - }  
288 -}  
1 -package SrsClass  
2 -{  
3 - import flash.system.System;  
4 -  
5 - public class SrsElapsedTimer  
6 - {  
7 - private var beginDate:Date;  
8 - public function SrsElapsedTimer()  
9 - {  
10 - beginDate = new Date;  
11 - }  
12 -  
13 - public function elapsed():Number{  
14 - var endDate:Date = new Date;  
15 -  
16 - // get deiff by ms  
17 - return (endDate.time - beginDate.time);  
18 - }  
19 -  
20 - public function restart():void{  
21 - beginDate = new Date;  
22 - }  
23 - }  
24 -}  
1 -package SrsClass  
2 -{  
3 - import flash.net.SharedObject;  
4 -  
5 - public class SrsSettings  
6 - {  
7 - private var settings:SharedObject;  
8 - private var key:String = "SrsBandCheck";  
9 -  
10 - public function SrsSettings()  
11 - {  
12 - settings = SharedObject.getLocal(key);  
13 - }  
14 -  
15 - public function addAddressText(val:String):void{  
16 - settings.data.address_text = val;  
17 - }  
18 -  
19 - public function addressText():String{  
20 - return settings.data.address_text;  
21 - }  
22 -  
23 - static public function instance():SrsSettings{  
24 - return new SrsSettings;  
25 - }  
26 - }  
27 -}  
不能预览此文件类型