Author: solomax
Date: Wed Jul 13 05:35:16 2016
New Revision: 1752366

URL: http://svn.apache.org/viewvc?rev=1752366&view=rev
Log:
no jira: annoying dev-console JS error is fixed

Modified:
    
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/js/history.js
    
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/js/history.js
    
openmeetings/application/trunk/openmeetings-web/src/main/webapp/js/history.js

Modified: 
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/js/history.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/js/history.js?rev=1752366&r1=1752365&r2=1752366&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/js/history.js
 (original)
+++ 
openmeetings/application/branches/3.1.x/openmeetings-web/src/main/webapp/js/history.js
 Wed Jul 13 05:35:16 2016
@@ -105,7 +105,10 @@ BrowserHistory = (function() {
                 pl[i].browserURLChange(flexAppUrl);
             }
         } else {
-            getPlayer().browserURLChange(flexAppUrl);
+               var p = getPlayer();
+               if (p) {
+                       p.browserURLChange(flexAppUrl);
+               }
         }
     }
 
@@ -370,7 +373,10 @@ BrowserHistory = (function() {
                         pl[i].browserURLChange(flexAppUrl);
                     }
                 } else {
-                    getPlayer().browserURLChange(flexAppUrl);
+                       var p = getPlayer();
+                       if (p) {
+                               p.browserURLChange(flexAppUrl);
+                       }
                 }
                 _storeStates();
             }
@@ -441,7 +447,10 @@ BrowserHistory = (function() {
                         pl[i].browserURLChange(flexAppUrl);
                     }
                 } else {
-                    getPlayer().browserURLChange(flexAppUrl);
+                       var p = getPlayer();
+                       if (p) {
+                               p.browserURLChange(flexAppUrl);
+                       }
                 }
             }
         }
@@ -630,9 +639,10 @@ BrowserHistory = (function() {
                     } catch (e) {}
                 }
             } else {
-                try {
-                    getPlayer(objectId).browserURLChange(flexAppUrl);
-                } catch (e) {}
+               var p = getPlayer(objectId);
+               if (p) {
+                       p.browserURLChange(flexAppUrl);
+               }
             }
 
             currentObjectId = null;

Modified: 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/js/history.js
URL: 
http://svn.apache.org/viewvc/openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/js/history.js?rev=1752366&r1=1752365&r2=1752366&view=diff
==============================================================================
--- 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/js/history.js
 (original)
+++ 
openmeetings/application/branches/3.2.x/openmeetings-web/src/main/webapp/js/history.js
 Wed Jul 13 05:35:16 2016
@@ -17,667 +17,644 @@
  *
  */
 BrowserHistoryUtils = {
-       addEvent : function(elm, evType, fn, useCapture) {
-               useCapture = useCapture || false;
-               if (elm.addEventListener) {
-                       elm.addEventListener(evType, fn, useCapture);
-                       return true;
-               } else if (elm.attachEvent) {
-                       var r = elm.attachEvent('on' + evType, fn);
-                       return r;
-               } else {
-                       elm['on' + evType] = fn;
-               }
-       }
+    addEvent: function(elm, evType, fn, useCapture) {
+        useCapture = useCapture || false;
+        if (elm.addEventListener) {
+            elm.addEventListener(evType, fn, useCapture);
+            return true;
+        } else if (elm.attachEvent) {
+            var r = elm.attachEvent('on' + evType, fn);
+            return r;
+        } else {
+            elm['on' + evType] = fn;
+        }
+    }
 }
 
 BrowserHistory = (function() {
-       // type of browser
-       var browser = {
-               ie : false,
-               ie8 : false,
-               firefox : false,
-               safari : false,
-               opera : false,
-               version : -1
-       };
-
-       // Default app state URL to use when no fragment ID present
-       var defaultHash = '';
-
-       // Last-known app state URL
-       var currentHref = document.location.href;
-
-       // Initial URL (used only by IE)
-       var initialHref = document.location.href;
-
-       // Initial URL (used only by IE)
-       var initialHash = document.location.hash;
-
-       // History frame source URL prefix (used only by IE)
-       var historyFrameSourcePrefix = 'history/historyFrame.html?';
-
-       // History maintenance (used only by Safari)
-       var currentHistoryLength = -1;
-
-       // Flag to denote the existence of onhashchange
-       var browserHasHashChange = false;
-
-       var historyHash = [];
-
-       var initialState = createState(initialHref,
-                       initialHref + '#' + initialHash, initialHash);
-
-       var backStack = [];
-       var forwardStack = [];
-
-       var currentObjectId = null;
-
-       //UserAgent detection
-       var useragent = navigator.userAgent.toLowerCase();
-
-       if (useragent.indexOf("opera") != -1) {
-               browser.opera = true;
-       } else if (useragent.indexOf("msie") != -1) {
-               browser.ie = true;
-               browser.version = parseFloat(useragent.substring(useragent
-                               .indexOf('msie') + 4));
-               if (browser.version == 8) {
-                       browser.ie = false;
-                       browser.ie8 = true;
-               }
-       } else if (useragent.indexOf("safari") != -1) {
-               browser.safari = true;
-               browser.version = parseFloat(useragent.substring(useragent
-                               .indexOf('safari') + 7));
-       } else if (useragent.indexOf("gecko") != -1) {
-               browser.firefox = true;
-       }
-
-       if (browser.ie == true && browser.version == 7) {
-               window["_ie_firstload"] = false;
-       }
-
-       function hashChangeHandler() {
-               currentHref = document.location.href;
-               var flexAppUrl = getHash();
-               //ADR: to fix multiple
-               if (typeof BrowserHistory_multiple != "undefined"
-                               && BrowserHistory_multiple == true) {
-                       var pl = getPlayers();
-                       for (var i = 0; i < pl.length; i++) {
-                               pl[i].browserURLChange(flexAppUrl);
-                       }
-               } else {
-                       var p = getPlayer();
-                       if (p) {
-                               p.browserURLChange(flexAppUrl);
-                       }
-               }
-       }
-
-       // Accessor functions for obtaining specific elements of the page.
-
-       function getHistoryFrame() {
-               return document.getElementById('ie_historyFrame');
-       }
-
-       function getFormElement() {
-               return document.getElementById('safari_formDiv');
-       }
-
-       function getRememberElement() {
-               return document.getElementById("safari_remember_field");
-       }
-
-       // Get the Flash player object for performing ExternalInterface 
callbacks.
-       // Updated for changes to SWFObject2.
-
-       function getPlayer(id) {
-               var i;
-
-               if (id && document.getElementById(id)) {
-                       var r = document.getElementById(id);
-                       if (typeof r.SetVariable != "undefined") {
-                               return r;
-                       } else {
-                               var o = r.getElementsByTagName("object");
-                               var e = r.getElementsByTagName("embed");
-                               for (i = 0; i < o.length; i++) {
-                                       if (typeof o[i].browserURLChange != 
"undefined")
-                                               return o[i];
-                               }
-                               for (i = 0; i < e.length; i++) {
-                                       if (typeof e[i].browserURLChange != 
"undefined")
-                                               return e[i];
-                               }
-                       }
-               } else {
-                       var o = document.getElementsByTagName("object");
-                       var e = document.getElementsByTagName("embed");
-                       for (i = 0; i < e.length; i++) {
-                               if (typeof e[i].browserURLChange != 
"undefined") {
-                                       return e[i];
-                               }
-                       }
-                       for (i = 0; i < o.length; i++) {
-                               if (typeof o[i].browserURLChange != 
"undefined") {
-                                       return o[i];
-                               }
-                       }
-               }
-               return undefined;
-       }
-
-       function getPlayers() {
-               var i;
-               var players = [];
-               if (players.length == 0) {
-                       var tmp = document.getElementsByTagName('object');
-                       for (i = 0; i < tmp.length; i++) {
-                               if (typeof tmp[i].browserURLChange != 
"undefined")
-                                       players.push(tmp[i]);
-                       }
-               }
-               if (players.length == 0 || players[0].object == null) {
-                       var tmp = document.getElementsByTagName('embed');
-                       for (i = 0; i < tmp.length; i++) {
-                               if (typeof tmp[i].browserURLChange != 
"undefined")
-                                       players.push(tmp[i]);
-                       }
-               }
-               return players;
-       }
-
-       function getIframeHash() {
-               var doc = getHistoryFrame().contentWindow.document;
-               var hash = String(doc.location.search);
-               if (hash.length == 1 && hash.charAt(0) == "?") {
-                       hash = "";
-               } else if (hash.length >= 2 && hash.charAt(0) == "?") {
-                       hash = hash.substring(1);
-               }
-               return hash;
-       }
-
-       /* Get the current location hash excluding the '#' symbol. */
-
-       function getHash() {
-               // It would be nice if we could use document.location.hash here,
-               // but it's faulty sometimes.
-               var idx = document.location.href.indexOf('#');
-               return (idx >= 0) ? document.location.href.substr(idx + 1) : '';
-       }
-
-       /* Get the current location hash excluding the '#' symbol. */
-
-       function setHash(hash) {
-               // It would be nice if we could use document.location.hash here,
-               // but it's faulty sometimes.
-               if (hash == '')
-                       hash = '#'
-               document.location.hash = hash;
-       }
-
-       function createState(baseUrl, newUrl, flexAppUrl) {
-               return {
-                       'baseUrl' : baseUrl,
-                       'newUrl' : newUrl,
-                       'flexAppUrl' : flexAppUrl,
-                       'title' : null
-               };
-       }
-
-       /* Add a history entry to the browser.
-        *   baseUrl: the portion of the location prior to the '#'
-        *   newUrl: the entire new URL, including '#' and following fragment
-        *   flexAppUrl: the portion of the location following the '#' only
-        */
-
-       function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {
-
-               //delete all the history entries
-               forwardStack = [];
-
-               if (browser.ie) {
-                       //Check to see if we are being asked to do a navigate 
for the first
-                       //history entry, and if so ignore, because it's coming 
from the creation
-                       //of the history iframe
-                       if (flexAppUrl == defaultHash
-                                       && document.location.href == initialHref
-                                       && window['_ie_firstload']) {
-                               currentHref = initialHref;
-                               return;
-                       }
-                       if ((!flexAppUrl || flexAppUrl == defaultHash)
-                                       && window['_ie_firstload']) {
-                               newUrl = baseUrl + '#' + defaultHash;
-                               flexAppUrl = defaultHash;
-                       } else {
-                               // for IE, tell the history frame to go 
somewhere without a '#'
-                               // in order to get this entry into the browser 
history.
-                               getHistoryFrame().src = 
historyFrameSourcePrefix + flexAppUrl;
-                       }
-                       setHash(flexAppUrl);
-               } else {
-
-                       //ADR
-                       if (backStack.length == 0 && initialState.flexAppUrl == 
flexAppUrl) {
-                               initialState = createState(baseUrl, newUrl, 
flexAppUrl);
-                       } else if (backStack.length > 0
-                                       && backStack[backStack.length - 
1].flexAppUrl == flexAppUrl) {
-                               backStack[backStack.length - 1] = 
createState(baseUrl, newUrl,
-                                               flexAppUrl);
-                       }
-
-                       if (browser.safari && !browserHasHashChange) {
-                               // for Safari, submit a form whose action 
points to the desired URL
-                               if (browser.version <= 419.3) {
-                                       var file = 
window.location.pathname.toString();
-                                       file = 
file.substring(file.lastIndexOf("/") + 1);
-                                       getFormElement().innerHTML = '<form 
name="historyForm" action="'
-                                                       + file
-                                                       + '#'
-                                                       + flexAppUrl
-                                                       + '" 
method="GET"></form>';
-                                       //get the current elements and add them 
to the form
-                                       var qs = 
window.location.search.substring(1);
-                                       var qs_arr = qs.split("&");
-                                       for (var i = 0; i < qs_arr.length; i++) 
{
-                                               var tmp = qs_arr[i].split("=");
-                                               var elem = 
document.createElement("input");
-                                               elem.type = "hidden";
-                                               elem.name = tmp[0];
-                                               elem.value = tmp[1];
-                                               
document.forms.historyForm.appendChild(elem);
-                                       }
-                                       document.forms.historyForm.submit();
-                               } else {
-                                       top.location.hash = flexAppUrl;
-                               }
-                               // We also have to maintain the history by hand 
for Safari
-                               historyHash[history.length] = flexAppUrl;
-                               _storeStates();
-                       } else {
-                               // Otherwise, just tell the browser to go there
-                               setHash(flexAppUrl);
-                       }
-               }
-               backStack.push(createState(baseUrl, newUrl, flexAppUrl));
-       }
-
-       function _storeStates() {
-               if (browser.safari) {
-                       getRememberElement().value = historyHash.join(",");
-               }
-       }
-
-       function handleBackButton() {
-               //The "current" page is always at the top of the history stack.
-               var current = backStack.pop();
-               if (!current) {
-                       return;
-               }
-               var last = backStack[backStack.length - 1];
-               if (!last && backStack.length == 0) {
-                       last = initialState;
-               }
-               forwardStack.push(current);
-       }
-
-       function handleForwardButton() {
-               //summary: private method. Do not call this directly.
-
-               var last = forwardStack.pop();
-               if (!last) {
-                       return;
-               }
-               backStack.push(last);
-       }
-
-       function handleArbitraryUrl() {
-               //delete all the history entries
-               forwardStack = [];
-       }
-
-       /* Called periodically to poll to see if we need to detect navigation 
that has occurred */
-
-       function checkForUrlChange() {
-
-               if (browser.ie) {
-                       if (currentHref != document.location.href
-                                       && currentHref + '#' != 
document.location.href) {
-                               //This occurs when the user has navigated to a 
specific URL
-                               //within the app, and didn't use browser 
back/forward
-                               //IE seems to have a bug where it stops 
updating the URL it
-                               //shows the end-user at this point, but 
programatically it
-                               //appears to be correct.  Do a full app reload 
to get around
-                               //this issue.
-                               if (browser.version < 7) {
-                                       currentHref = document.location.href;
-                                       document.location.reload();
-                               } else {
-                                       if (getHash() != getIframeHash()) {
-                                               // this.iframe.src = 
this.blankURL + hash;
-                                               var sourceToSet = 
historyFrameSourcePrefix + getHash();
-                                               getHistoryFrame().src = 
sourceToSet;
-                                               currentHref = 
document.location.href;
-                                       }
-                               }
-                       }
-               }
-
-               if (browser.safari && !browserHasHashChange) {
-                       // For Safari, we have to check to see if 
history.length changed.
-                       if (currentHistoryLength >= 0
-                                       && history.length != 
currentHistoryLength) {
-                               //alert("did change: " + history.length + ", " 
+ historyHash.length + "|" + historyHash[history.length] + "|>" + 
historyHash.join("|"));
-                               var flexAppUrl = getHash();
-                               if (browser.version < 528.16 /* Anything 
earlier than Safari 4.0 */) {
-                                       // If it did change and we're running 
Safari 3.x or earlier, 
-                                       // then we have to look the old state 
up in our hand-maintained 
-                                       // array since document.location.hash 
won't have changed, 
-                                       // then call back into BrowserManager.
-                                       currentHistoryLength = history.length;
-                                       flexAppUrl = 
historyHash[currentHistoryLength];
-                               }
-
-                               //ADR: to fix multiple
-                               if (typeof BrowserHistory_multiple != 
"undefined"
-                                               && BrowserHistory_multiple == 
true) {
-                                       var pl = getPlayers();
-                                       for (var i = 0; i < pl.length; i++) {
-                                               
pl[i].browserURLChange(flexAppUrl);
-                                       }
-                               } else {
-                                       
getPlayer().browserURLChange(flexAppUrl);
-                               }
-                               _storeStates();
-                       }
-               }
-               if (browser.firefox && !browserHasHashChange) {
-                       if (currentHref != document.location.href) {
-                               var bsl = backStack.length;
-
-                               var urlActions = {
-                                       back : false,
-                                       forward : false,
-                                       set : false
-                               }
-
-                               if ((window.location.hash == initialHash || 
window.location.href == initialHref)
-                                               && (bsl == 1)) {
-                                       urlActions.back = true;
-                                       // FIXME: could this ever be a forward 
button?
-                                       // we can't clear it because we still 
need to check for forwards. Ugg.
-                                       // clearInterval(this.locationTimer);
-                                       handleBackButton();
-                               }
-
-                               // first check to see if we could have gone 
forward. We always halt on
-                               // a no-hash item.
-                               if (forwardStack.length > 0) {
-                                       if (forwardStack[forwardStack.length - 
1].flexAppUrl == getHash()) {
-                                               urlActions.forward = true;
-                                               handleForwardButton();
-                                       }
-                               }
-
-                               // ok, that didn't work, try someplace back in 
the history stack
-                               if ((bsl >= 2) && (backStack[bsl - 2])) {
-                                       if (backStack[bsl - 2].flexAppUrl == 
getHash()) {
-                                               urlActions.back = true;
-                                               handleBackButton();
-                                       }
-                               }
-
-                               if (!urlActions.back && !urlActions.forward) {
-                                       var foundInStacks = {
-                                               back : -1,
-                                               forward : -1
-                                       }
-
-                                       for (var i = 0; i < backStack.length; 
i++) {
-                                               if (backStack[i].flexAppUrl == 
getHash()
-                                                               && i != (bsl - 
2)) {
-                                                       arbitraryUrl = true;
-                                                       foundInStacks.back = i;
-                                               }
-                                       }
-                                       for (var i = 0; i < 
forwardStack.length; i++) {
-                                               if (forwardStack[i].flexAppUrl 
== getHash()
-                                                               && i != (bsl - 
2)) {
-                                                       arbitraryUrl = true;
-                                                       foundInStacks.forward = 
i;
-                                               }
-                                       }
-                                       handleArbitraryUrl();
-                               }
-
-                               // Firefox changed; do a callback into 
BrowserManager to tell it.
-                               currentHref = document.location.href;
-                               var flexAppUrl = getHash();
-                               //ADR: to fix multiple
-                               if (typeof BrowserHistory_multiple != 
"undefined"
-                                               && BrowserHistory_multiple == 
true) {
-                                       var pl = getPlayers();
-                                       for (var i = 0; i < pl.length; i++) {
-                                               
pl[i].browserURLChange(flexAppUrl);
-                                       }
-                               } else {
-                                       
getPlayer().browserURLChange(flexAppUrl);
-                               }
-                       }
-               }
-       }
-
-       var _initialize = function() {
-
-               browserHasHashChange = ("onhashchange" in document.body);
-
-               if (browser.ie) {
-                       var scripts = document.getElementsByTagName('script');
-                       for (var i = 0, s; s = scripts[i]; i++) {
-                               if (s.src.indexOf("history.js") > -1) {
-                                       var iframe_location = (new 
String(s.src)).replace(
-                                                       "history.js", 
"historyFrame.html");
-                               }
-                       }
-                       historyFrameSourcePrefix = iframe_location + "?";
-                       var src = historyFrameSourcePrefix;
-
-                       var iframe = document.createElement("iframe");
-                       iframe.id = 'ie_historyFrame';
-                       iframe.name = 'ie_historyFrame';
-                       iframe.src = 'javascript:false;';
-
-                       try {
-                               document.body.appendChild(iframe);
-                       } catch (e) {
-                               setTimeout(function() {
-                                       document.body.appendChild(iframe);
-                               }, 0);
-                       }
-               }
-
-               if (browser.safari && !browserHasHashChange) {
-                       var rememberDiv = document.createElement("div");
-                       rememberDiv.id = 'safari_rememberDiv';
-                       document.body.appendChild(rememberDiv);
-                       rememberDiv.innerHTML = '<input type="text" 
id="safari_remember_field" style="width: 500px;">';
-
-                       var formDiv = document.createElement("div");
-                       formDiv.id = 'safari_formDiv';
-                       document.body.appendChild(formDiv);
-
-                       var reloader_content = document.createElement('div');
-                       reloader_content.id = 'safarireloader';
-                       var scripts = document.getElementsByTagName('script');
-                       for (var i = 0, s; s = scripts[i]; i++) {
-                               if (s.src.indexOf("history.js") > -1) {
-                                       html = (new 
String(s.src)).replace(".js", ".html");
-                               }
-                       }
-                       reloader_content.innerHTML = '<iframe 
id="safarireloader-iframe" src="about:blank" frameborder="no" 
scrolling="no"></iframe>';
-                       document.body.appendChild(reloader_content);
-                       reloader_content.style.position = 'absolute';
-                       reloader_content.style.left = 
reloader_content.style.top = '-9999px';
-                       iframe = 
reloader_content.getElementsByTagName('iframe')[0];
-
-                       if 
(document.getElementById("safari_remember_field").value != "") {
-                               historyHash = 
document.getElementById("safari_remember_field").value
-                                               .split(",");
-                       }
-               }
-
-               if (browserHasHashChange)
-                       document.body.onhashchange = hashChangeHandler;
-       }
-
-       return {
-               historyHash : historyHash,
-               backStack : function() {
-                       return backStack;
-               },
-               forwardStack : function() {
-                       return forwardStack
-               },
-               getPlayer : getPlayer,
-               initialize : function(src) {
-                       _initialize(src);
-               },
-               setURL : function(url) {
-                       document.location.href = url;
-               },
-               getURL : function() {
-                       return document.location.href;
-               },
-               getTitle : function() {
-                       return document.title;
-               },
-               setTitle : function(title) {
-                       try {
-                               backStack[backStack.length - 1].title = title;
-                       } catch (e) {
-                       }
-                       //if on safari, set the title to be the empty string. 
-                       if (browser.safari) {
-                               if (title == "") {
-                                       try {
-                                               var tmp = 
window.location.href.toString();
-                                               title = 
tmp.substring((tmp.lastIndexOf("/") + 1), tmp
-                                                               
.lastIndexOf("#"));
-                                       } catch (e) {
-                                               title = "";
-                                       }
-                               }
-                       }
-                       document.title = title;
-               },
-               setDefaultURL : function(def) {
-                       defaultHash = def;
-                       def = getHash();
-                       //trailing ? is important else an extra frame gets 
added to the history
-                       //when navigating back to the first page.  
Alternatively could check
-                       //in history frame navigation to compare # and ?.
-                       if (browser.ie) {
-                               window['_ie_firstload'] = true;
-                               var sourceToSet = historyFrameSourcePrefix + 
def;
-                               var func = function() {
-                                       getHistoryFrame().src = sourceToSet;
-                                       window.location.replace("#" + def);
-                                       setInterval(checkForUrlChange, 50);
-                               }
-                               try {
-                                       func();
-                               } catch (e) {
-                                       window.setTimeout(function() {
-                                               func();
-                                       }, 0);
-                               }
-                       }
-
-                       if (browser.safari) {
-                               currentHistoryLength = history.length;
-                               if (historyHash.length == 0) {
-                                       historyHash[currentHistoryLength] = def;
-                                       var newloc = "#" + def;
-                                       window.location.replace(newloc);
-                               } else {
-                                       
//alert(historyHash[historyHash.length-1]);
-                               }
-                               setInterval(checkForUrlChange, 50);
-                       }
-
-                       if (browser.firefox || browser.opera) {
-                               var reg = new RegExp("#" + def + "$");
-                               if (window.location.toString().match(reg)) {
-                               } else {
-                                       var newloc = "#" + def;
-                                       window.location.replace(newloc);
-                               }
-                               setInterval(checkForUrlChange, 50);
-                       }
-
-               },
-
-               /* Set the current browser URL; called from inside 
BrowserManager to propagate
-                * the application state out to the container.
-                */
-               setBrowserURL : function(flexAppUrl, objectId) {
-                       if (browser.ie && typeof objectId != "undefined") {
-                               currentObjectId = objectId;
-                       }
-                       //fromIframe = fromIframe || false;
-                       //fromFlex = fromFlex || false;
-                       //alert("setBrowserURL: " + flexAppUrl);
-                       //flexAppUrl = (flexAppUrl == "") ? defaultHash : 
flexAppUrl ;
-
-                       var pos = document.location.href.indexOf('#');
-                       var baseUrl = pos != -1 ? 
document.location.href.substr(0, pos)
-                                       : document.location.href;
-                       var newUrl = baseUrl + '#' + flexAppUrl;
-
-                       if (document.location.href != newUrl
-                                       && document.location.href + '#' != 
newUrl) {
-                               currentHref = newUrl;
-                               addHistoryEntry(baseUrl, newUrl, flexAppUrl);
-                               currentHistoryLength = history.length;
-                       }
-               },
-
-               browserURLChange : function(flexAppUrl) {
-                       var objectId = null;
-                       if (browser.ie && currentObjectId != null) {
-                               objectId = currentObjectId;
-                       }
-
-                       if (typeof BrowserHistory_multiple != "undefined"
-                                       && BrowserHistory_multiple == true) {
-                               var pl = getPlayers();
-                               for (var i = 0; i < pl.length; i++) {
-                                       try {
-                                               
pl[i].browserURLChange(flexAppUrl);
-                                       } catch (e) {
-                                       }
-                               }
-                       } else {
-                               try {
-                                       
getPlayer(objectId).browserURLChange(flexAppUrl);
-                               } catch (e) {
-                               }
-                       }
-
-                       currentObjectId = null;
-               },
-               getUserAgent : function() {
-                       return navigator.userAgent;
-               },
-               getPlatform : function() {
-                       return navigator.platform;
-               }
+    // type of browser
+    var browser = {
+        ie: false,
+        ie8: false,
+        firefox: false,
+        safari: false,
+        opera: false,
+        version: -1
+    };
+
+    // Default app state URL to use when no fragment ID present
+    var defaultHash = '';
+
+    // Last-known app state URL
+    var currentHref = document.location.href;
+
+    // Initial URL (used only by IE)
+    var initialHref = document.location.href;
+
+    // Initial URL (used only by IE)
+    var initialHash = document.location.hash;
+
+    // History frame source URL prefix (used only by IE)
+    var historyFrameSourcePrefix = 'history/historyFrame.html?';
+
+    // History maintenance (used only by Safari)
+    var currentHistoryLength = -1;
+
+    // Flag to denote the existence of onhashchange
+    var browserHasHashChange = false;
+
+    var historyHash = [];
+
+    var initialState = createState(initialHref, initialHref + '#' + 
initialHash, initialHash);
+
+    var backStack = [];
+    var forwardStack = [];
+
+    var currentObjectId = null;
+
+    //UserAgent detection
+    var useragent = navigator.userAgent.toLowerCase();
+
+    if (useragent.indexOf("opera") != -1) {
+        browser.opera = true;
+    } else if (useragent.indexOf("msie") != -1) {
+        browser.ie = true;
+        browser.version = 
parseFloat(useragent.substring(useragent.indexOf('msie') + 4));
+        if (browser.version == 8) {
+            browser.ie = false;
+            browser.ie8 = true;
+        }
+    } else if (useragent.indexOf("safari") != -1) {
+        browser.safari = true;
+        browser.version = 
parseFloat(useragent.substring(useragent.indexOf('safari') + 7));
+    } else if (useragent.indexOf("gecko") != -1) {
+        browser.firefox = true;
+    }
+
+    if (browser.ie == true && browser.version == 7) {
+        window["_ie_firstload"] = false;
+    }
+
+    function hashChangeHandler() {
+        currentHref = document.location.href;
+        var flexAppUrl = getHash();
+        //ADR: to fix multiple
+        if (typeof BrowserHistory_multiple != "undefined" && 
BrowserHistory_multiple == true) {
+            var pl = getPlayers();
+            for (var i = 0; i < pl.length; i++) {
+                pl[i].browserURLChange(flexAppUrl);
+            }
+        } else {
+               var p = getPlayer();
+               if (p) {
+                       p.browserURLChange(flexAppUrl);
+               }
+        }
+    }
+
+    // Accessor functions for obtaining specific elements of the page.
+
+    function getHistoryFrame() {
+        return document.getElementById('ie_historyFrame');
+    }
+
+    function getFormElement() {
+        return document.getElementById('safari_formDiv');
+    }
+
+    function getRememberElement() {
+        return document.getElementById("safari_remember_field");
+    }
+
+    // Get the Flash player object for performing ExternalInterface callbacks.
+    // Updated for changes to SWFObject2.
+
+    function getPlayer(id) {
+        var i;
+
+        if (id && document.getElementById(id)) {
+            var r = document.getElementById(id);
+            if (typeof r.SetVariable != "undefined") {
+                return r;
+            } else {
+                var o = r.getElementsByTagName("object");
+                var e = r.getElementsByTagName("embed");
+                for (i = 0; i < o.length; i++) {
+                    if (typeof o[i].browserURLChange != "undefined")
+                        return o[i];
+                }
+                for (i = 0; i < e.length; i++) {
+                    if (typeof e[i].browserURLChange != "undefined")
+                        return e[i];
+                }
+            }
+        } else {
+            var o = document.getElementsByTagName("object");
+            var e = document.getElementsByTagName("embed");
+            for (i = 0; i < e.length; i++) {
+                if (typeof e[i].browserURLChange != "undefined") {
+                    return e[i];
+                }
+            }
+            for (i = 0; i < o.length; i++) {
+                if (typeof o[i].browserURLChange != "undefined") {
+                    return o[i];
+                }
+            }
+        }
+        return undefined;
+    }
+
+    function getPlayers() {
+        var i;
+        var players = [];
+        if (players.length == 0) {
+            var tmp = document.getElementsByTagName('object');
+            for (i = 0; i < tmp.length; i++) {
+                if (typeof tmp[i].browserURLChange != "undefined")
+                    players.push(tmp[i]);
+            }
+        }
+        if (players.length == 0 || players[0].object == null) {
+            var tmp = document.getElementsByTagName('embed');
+            for (i = 0; i < tmp.length; i++) {
+                if (typeof tmp[i].browserURLChange != "undefined")
+                    players.push(tmp[i]);
+            }
+        }
+        return players;
+    }
+
+    function getIframeHash() {
+        var doc = getHistoryFrame().contentWindow.document;
+        var hash = String(doc.location.search);
+        if (hash.length == 1 && hash.charAt(0) == "?") {
+            hash = "";
+        } else if (hash.length >= 2 && hash.charAt(0) == "?") {
+            hash = hash.substring(1);
+        }
+        return hash;
+    }
+
+    /* Get the current location hash excluding the '#' symbol. */
+
+    function getHash() {
+        // It would be nice if we could use document.location.hash here,
+        // but it's faulty sometimes.
+        var idx = document.location.href.indexOf('#');
+        return (idx >= 0) ? document.location.href.substr(idx + 1) : '';
+    }
+
+    /* Get the current location hash excluding the '#' symbol. */
+
+    function setHash(hash) {
+        // It would be nice if we could use document.location.hash here,
+        // but it's faulty sometimes.
+        if (hash == '') hash = '#'
+        document.location.hash = hash;
+    }
+
+    function createState(baseUrl, newUrl, flexAppUrl) {
+        return {
+            'baseUrl': baseUrl,
+            'newUrl': newUrl,
+            'flexAppUrl': flexAppUrl,
+            'title': null
+        };
+    }
+
+    /* Add a history entry to the browser.
+     *   baseUrl: the portion of the location prior to the '#'
+     *   newUrl: the entire new URL, including '#' and following fragment
+     *   flexAppUrl: the portion of the location following the '#' only
+     */
+
+    function addHistoryEntry(baseUrl, newUrl, flexAppUrl) {
+
+        //delete all the history entries
+        forwardStack = [];
+
+        if (browser.ie) {
+            //Check to see if we are being asked to do a navigate for the first
+            //history entry, and if so ignore, because it's coming from the 
creation
+            //of the history iframe
+            if (flexAppUrl == defaultHash && document.location.href == 
initialHref && window['_ie_firstload']) {
+                currentHref = initialHref;
+                return;
+            }
+            if ((!flexAppUrl || flexAppUrl == defaultHash) && 
window['_ie_firstload']) {
+                newUrl = baseUrl + '#' + defaultHash;
+                flexAppUrl = defaultHash;
+            } else {
+                // for IE, tell the history frame to go somewhere without a '#'
+                // in order to get this entry into the browser history.
+                getHistoryFrame().src = historyFrameSourcePrefix + flexAppUrl;
+            }
+            setHash(flexAppUrl);
+        } else {
+
+            //ADR
+            if (backStack.length == 0 && initialState.flexAppUrl == 
flexAppUrl) {
+                initialState = createState(baseUrl, newUrl, flexAppUrl);
+            } else if (backStack.length > 0 && backStack[backStack.length - 
1].flexAppUrl == flexAppUrl) {
+                backStack[backStack.length - 1] = createState(baseUrl, newUrl, 
flexAppUrl);
+            }
+
+            if (browser.safari && !browserHasHashChange) {
+                // for Safari, submit a form whose action points to the 
desired URL
+                if (browser.version <= 419.3) {
+                    var file = window.location.pathname.toString();
+                    file = file.substring(file.lastIndexOf("/") + 1);
+                    getFormElement().innerHTML = '<form name="historyForm" 
action="' + file + '#' + flexAppUrl + '" method="GET"></form>';
+                    //get the current elements and add them to the form
+                    var qs = window.location.search.substring(1);
+                    var qs_arr = qs.split("&");
+                    for (var i = 0; i < qs_arr.length; i++) {
+                        var tmp = qs_arr[i].split("=");
+                        var elem = document.createElement("input");
+                        elem.type = "hidden";
+                        elem.name = tmp[0];
+                        elem.value = tmp[1];
+                        document.forms.historyForm.appendChild(elem);
+                    }
+                    document.forms.historyForm.submit();
+                } else {
+                    top.location.hash = flexAppUrl;
+                }
+                // We also have to maintain the history by hand for Safari
+                historyHash[history.length] = flexAppUrl;
+                _storeStates();
+            } else {
+                // Otherwise, just tell the browser to go there
+                setHash(flexAppUrl);
+            }
+        }
+        backStack.push(createState(baseUrl, newUrl, flexAppUrl));
+    }
+
+    function _storeStates() {
+        if (browser.safari) {
+            getRememberElement().value = historyHash.join(",");
+        }
+    }
+
+    function handleBackButton() {
+        //The "current" page is always at the top of the history stack.
+        var current = backStack.pop();
+        if (!current) {
+            return;
+        }
+        var last = backStack[backStack.length - 1];
+        if (!last && backStack.length == 0) {
+            last = initialState;
+        }
+        forwardStack.push(current);
+    }
+
+    function handleForwardButton() {
+        //summary: private method. Do not call this directly.
+
+        var last = forwardStack.pop();
+        if (!last) {
+            return;
+        }
+        backStack.push(last);
+    }
+
+    function handleArbitraryUrl() {
+        //delete all the history entries
+        forwardStack = [];
+    }
+
+    /* Called periodically to poll to see if we need to detect navigation that 
has occurred */
+
+    function checkForUrlChange() {
+
+        if (browser.ie) {
+            if (currentHref != document.location.href && currentHref + '#' != 
document.location.href) {
+                //This occurs when the user has navigated to a specific URL
+                //within the app, and didn't use browser back/forward
+                //IE seems to have a bug where it stops updating the URL it
+                //shows the end-user at this point, but programatically it
+                //appears to be correct.  Do a full app reload to get around
+                //this issue.
+                if (browser.version < 7) {
+                    currentHref = document.location.href;
+                    document.location.reload();
+                } else {
+                    if (getHash() != getIframeHash()) {
+                        // this.iframe.src = this.blankURL + hash;
+                        var sourceToSet = historyFrameSourcePrefix + getHash();
+                        getHistoryFrame().src = sourceToSet;
+                        currentHref = document.location.href;
+                    }
+                }
+            }
+        }
+
+        if (browser.safari && !browserHasHashChange) {
+            // For Safari, we have to check to see if history.length changed.
+            if (currentHistoryLength >= 0 && history.length != 
currentHistoryLength) {
+                //alert("did change: " + history.length + ", " + 
historyHash.length + "|" + historyHash[history.length] + "|>" + 
historyHash.join("|"));
+                var flexAppUrl = getHash();
+                if (browser.version < 528.16 /* Anything earlier than Safari 
4.0 */ ) {
+                    // If it did change and we're running Safari 3.x or 
earlier, 
+                    // then we have to look the old state up in our 
hand-maintained 
+                    // array since document.location.hash won't have changed, 
+                    // then call back into BrowserManager.
+                    currentHistoryLength = history.length;
+                    flexAppUrl = historyHash[currentHistoryLength];
+                }
+
+                //ADR: to fix multiple
+                if (typeof BrowserHistory_multiple != "undefined" && 
BrowserHistory_multiple == true) {
+                    var pl = getPlayers();
+                    for (var i = 0; i < pl.length; i++) {
+                        pl[i].browserURLChange(flexAppUrl);
+                    }
+                } else {
+                       var p = getPlayer();
+                       if (p) {
+                               p.browserURLChange(flexAppUrl);
+                       }
+                }
+                _storeStates();
+            }
+        }
+        if (browser.firefox && !browserHasHashChange) {
+            if (currentHref != document.location.href) {
+                var bsl = backStack.length;
+
+                var urlActions = {
+                    back: false,
+                    forward: false,
+                    set: false
+                }
+
+                if ((window.location.hash == initialHash || 
window.location.href == initialHref) && (bsl == 1)) {
+                    urlActions.back = true;
+                    // FIXME: could this ever be a forward button?
+                    // we can't clear it because we still need to check for 
forwards. Ugg.
+                    // clearInterval(this.locationTimer);
+                    handleBackButton();
+                }
+
+                // first check to see if we could have gone forward. We always 
halt on
+                // a no-hash item.
+                if (forwardStack.length > 0) {
+                    if (forwardStack[forwardStack.length - 1].flexAppUrl == 
getHash()) {
+                        urlActions.forward = true;
+                        handleForwardButton();
+                    }
+                }
+
+                // ok, that didn't work, try someplace back in the history 
stack
+                if ((bsl >= 2) && (backStack[bsl - 2])) {
+                    if (backStack[bsl - 2].flexAppUrl == getHash()) {
+                        urlActions.back = true;
+                        handleBackButton();
+                    }
+                }
+
+                if (!urlActions.back && !urlActions.forward) {
+                    var foundInStacks = {
+                        back: -1,
+                        forward: -1
+                    }
+
+                    for (var i = 0; i < backStack.length; i++) {
+                        if (backStack[i].flexAppUrl == getHash() && i != (bsl 
- 2)) {
+                            arbitraryUrl = true;
+                            foundInStacks.back = i;
+                        }
+                    }
+                    for (var i = 0; i < forwardStack.length; i++) {
+                        if (forwardStack[i].flexAppUrl == getHash() && i != 
(bsl - 2)) {
+                            arbitraryUrl = true;
+                            foundInStacks.forward = i;
+                        }
+                    }
+                    handleArbitraryUrl();
+                }
+
+                // Firefox changed; do a callback into BrowserManager to tell 
it.
+                currentHref = document.location.href;
+                var flexAppUrl = getHash();
+                //ADR: to fix multiple
+                if (typeof BrowserHistory_multiple != "undefined" && 
BrowserHistory_multiple == true) {
+                    var pl = getPlayers();
+                    for (var i = 0; i < pl.length; i++) {
+                        pl[i].browserURLChange(flexAppUrl);
+                    }
+                } else {
+                       var p = getPlayer();
+                       if (p) {
+                               p.browserURLChange(flexAppUrl);
+                       }
+                }
+            }
+        }
+    }
+
+    var _initialize = function() {
+
+        browserHasHashChange = ("onhashchange" in document.body);
+
+        if (browser.ie) {
+            var scripts = document.getElementsByTagName('script');
+            for (var i = 0, s; s = scripts[i]; i++) {
+                if (s.src.indexOf("history.js") > -1) {
+                    var iframe_location = (new 
String(s.src)).replace("history.js", "historyFrame.html");
+                }
+            }
+            historyFrameSourcePrefix = iframe_location + "?";
+            var src = historyFrameSourcePrefix;
+
+            var iframe = document.createElement("iframe");
+            iframe.id = 'ie_historyFrame';
+            iframe.name = 'ie_historyFrame';
+            iframe.src = 'javascript:false;';
+
+            try {
+                document.body.appendChild(iframe);
+            } catch (e) {
+                setTimeout(function() {
+                    document.body.appendChild(iframe);
+                }, 0);
+            }
+        }
+
+        if (browser.safari && !browserHasHashChange) {
+            var rememberDiv = document.createElement("div");
+            rememberDiv.id = 'safari_rememberDiv';
+            document.body.appendChild(rememberDiv);
+            rememberDiv.innerHTML = '<input type="text" 
id="safari_remember_field" style="width: 500px;">';
+
+            var formDiv = document.createElement("div");
+            formDiv.id = 'safari_formDiv';
+            document.body.appendChild(formDiv);
+
+            var reloader_content = document.createElement('div');
+            reloader_content.id = 'safarireloader';
+            var scripts = document.getElementsByTagName('script');
+            for (var i = 0, s; s = scripts[i]; i++) {
+                if (s.src.indexOf("history.js") > -1) {
+                    html = (new String(s.src)).replace(".js", ".html");
+                }
+            }
+            reloader_content.innerHTML = '<iframe id="safarireloader-iframe" 
src="about:blank" frameborder="no" scrolling="no"></iframe>';
+            document.body.appendChild(reloader_content);
+            reloader_content.style.position = 'absolute';
+            reloader_content.style.left = reloader_content.style.top = 
'-9999px';
+            iframe = reloader_content.getElementsByTagName('iframe')[0];
+
+            if (document.getElementById("safari_remember_field").value != "") {
+                historyHash = 
document.getElementById("safari_remember_field").value.split(",");
+            }
+        }
+
+        if (browserHasHashChange)
+            document.body.onhashchange = hashChangeHandler;
+    }
+
+    return {
+        historyHash: historyHash,
+        backStack: function() {
+            return backStack;
+        },
+        forwardStack: function() {
+            return forwardStack
+        },
+        getPlayer: getPlayer,
+        initialize: function(src) {
+            _initialize(src);
+        },
+        setURL: function(url) {
+            document.location.href = url;
+        },
+        getURL: function() {
+            return document.location.href;
+        },
+        getTitle: function() {
+            return document.title;
+        },
+        setTitle: function(title) {
+            try {
+                backStack[backStack.length - 1].title = title;
+            } catch (e) {}
+            //if on safari, set the title to be the empty string. 
+            if (browser.safari) {
+                if (title == "") {
+                    try {
+                        var tmp = window.location.href.toString();
+                        title = tmp.substring((tmp.lastIndexOf("/") + 1), 
tmp.lastIndexOf("#"));
+                    } catch (e) {
+                        title = "";
+                    }
+                }
+            }
+            document.title = title;
+        },
+        setDefaultURL: function(def) {
+            defaultHash = def;
+            def = getHash();
+            //trailing ? is important else an extra frame gets added to the 
history
+            //when navigating back to the first page.  Alternatively could 
check
+            //in history frame navigation to compare # and ?.
+            if (browser.ie) {
+                window['_ie_firstload'] = true;
+                var sourceToSet = historyFrameSourcePrefix + def;
+                var func = function() {
+                    getHistoryFrame().src = sourceToSet;
+                    window.location.replace("#" + def);
+                    setInterval(checkForUrlChange, 50);
+                }
+                try {
+                    func();
+                } catch (e) {
+                    window.setTimeout(function() {
+                        func();
+                    }, 0);
+                }
+            }
+
+            if (browser.safari) {
+                currentHistoryLength = history.length;
+                if (historyHash.length == 0) {
+                    historyHash[currentHistoryLength] = def;
+                    var newloc = "#" + def;
+                    window.location.replace(newloc);
+                } else {
+                    //alert(historyHash[historyHash.length-1]);
+                }
+                setInterval(checkForUrlChange, 50);
+            }
+
+
+            if (browser.firefox || browser.opera) {
+                var reg = new RegExp("#" + def + "$");
+                if (window.location.toString().match(reg)) {} else {
+                    var newloc = "#" + def;
+                    window.location.replace(newloc);
+                }
+                setInterval(checkForUrlChange, 50);
+            }
+
+        },
+
+        /* Set the current browser URL; called from inside BrowserManager to 
propagate
+         * the application state out to the container.
+         */
+        setBrowserURL: function(flexAppUrl, objectId) {
+            if (browser.ie && typeof objectId != "undefined") {
+                currentObjectId = objectId;
+            }
+            //fromIframe = fromIframe || false;
+            //fromFlex = fromFlex || false;
+            //alert("setBrowserURL: " + flexAppUrl);
+            //flexAppUrl = (flexAppUrl == "") ? defaultHash : flexAppUrl ;
+
+            var pos = document.location.href.indexOf('#');
+            var baseUrl = pos != -1 ? document.location.href.substr(0, pos) : 
document.location.href;
+            var newUrl = baseUrl + '#' + flexAppUrl;
+
+            if (document.location.href != newUrl && document.location.href + 
'#' != newUrl) {
+                currentHref = newUrl;
+                addHistoryEntry(baseUrl, newUrl, flexAppUrl);
+                currentHistoryLength = history.length;
+            }
+        },
+
+        browserURLChange: function(flexAppUrl) {
+            var objectId = null;
+            if (browser.ie && currentObjectId != null) {
+                objectId = currentObjectId;
+            }
+
+            if (typeof BrowserHistory_multiple != "undefined" && 
BrowserHistory_multiple == true) {
+                var pl = getPlayers();
+                for (var i = 0; i < pl.length; i++) {
+                    try {
+                        pl[i].browserURLChange(flexAppUrl);
+                    } catch (e) {}
+                }
+            } else {
+               var p = getPlayer(objectId);
+               if (p) {
+                       p.browserURLChange(flexAppUrl);
+               }
+            }
+
+            currentObjectId = null;
+        },
+        getUserAgent: function() {
+            return navigator.userAgent;
+        },
+        getPlatform: function() {
+            return navigator.platform;
+        }
 
-       }
+    }
 
 })();
 
@@ -686,52 +663,51 @@ BrowserHistory = (function() {
 // Automated unit testing and other diagnostics
 
 function setURL(url) {
-       document.location.href = url;
+    document.location.href = url;
 }
 
 function backButton() {
-       history.back();
+    history.back();
 }
 
 function forwardButton() {
-       history.forward();
+    history.forward();
 }
 
 function goForwardOrBackInHistory(step) {
-       history.go(step);
+    history.go(step);
 }
 
 //BrowserHistoryUtils.addEvent(window, "load", function() { 
BrowserHistory.initialize(); });
 (function(i) {
-       var u = navigator.userAgent;
-       var e = /*@cc_on!@*/false;
-       var st = setTimeout;
-       if (/webkit/i.test(u)) {
-               st(function() {
-                       var dr = document.readyState;
-                       if (dr == "loaded" || dr == "complete") {
-                               i()
-                       } else {
-                               st(arguments.callee, 10);
-                       }
-               }, 10);
-       } else if ((/mozilla/i.test(u) && !/(compati)/.test(u))
-                       || (/opera/i.test(u))) {
-               document.addEventListener("DOMContentLoaded", i, false);
-       } else if (e) {
-               (function() {
-                       var t = document.createElement('doc:rdy');
-                       try {
-                               t.doScroll('left');
-                               i();
-                               t = null;
-                       } catch (e) {
-                               st(arguments.callee, 0);
-                       }
-               })();
-       } else {
-               window.onload = i;
-       }
+    var u = navigator.userAgent;
+    var e = /*@cc_on!@*/ false;
+    var st = setTimeout;
+    if (/webkit/i.test(u)) {
+        st(function() {
+            var dr = document.readyState;
+            if (dr == "loaded" || dr == "complete") {
+                i()
+            } else {
+                st(arguments.callee, 10);
+            }
+        }, 10);
+    } else if ((/mozilla/i.test(u) && !/(compati)/.test(u)) || 
(/opera/i.test(u))) {
+        document.addEventListener("DOMContentLoaded", i, false);
+    } else if (e) {
+        (function() {
+            var t = document.createElement('doc:rdy');
+            try {
+                t.doScroll('left');
+                i();
+                t = null;
+            } catch (e) {
+                st(arguments.callee, 0);
+            }
+        })();
+    } else {
+        window.onload = i;
+    }
 })(function() {
-       BrowserHistory.initialize();
+    BrowserHistory.initialize();
 });


Reply via email to