You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openmeetings.apache.org by so...@apache.org on 2015/07/07 19:35:18 UTC

svn commit: r1689717 - in /openmeetings: branches/3.0.x/WebContent/src/base/ branches/3.0.x/WebContent/src/base/hibernate/ branches/3.0.x/WebContent/src/modules/conference/flexibleConferenceRoom/ branches/3.0.x/WebContent/src/modules/conference/testset...

Author: solomax
Date: Tue Jul  7 17:35:18 2015
New Revision: 1689717

URL: http://svn.apache.org/r1689717
Log:
[OPENMEETINGS-1230] cluster seems to work as expected, additional testing is required

Modified:
    openmeetings/branches/3.0.x/WebContent/src/base/hibernate/hibRtmpConnection.lzx
    openmeetings/branches/3.0.x/WebContent/src/base/mainAttributes.lzx
    openmeetings/branches/3.0.x/WebContent/src/base/mainDatasets.lzx
    openmeetings/branches/3.0.x/WebContent/src/base/mainMethods.lzx
    openmeetings/branches/3.0.x/WebContent/src/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx
    openmeetings/branches/3.0.x/WebContent/src/modules/conference/testsetup/testSetup.lzx
    openmeetings/branches/3.0.x/WebContent/swf10/base/mainDatasets.lzx
    openmeetings/branches/3.0.x/WebContent/swf10/main.as3.lzx
    openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/ConferenceService.java
    openmeetings/branches/3.0.x/src/main/webapp/js/history.js
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/rooms/RoomPanel.java
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/OmUrlFragment.java
    openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/js/history.js

Modified: openmeetings/branches/3.0.x/WebContent/src/base/hibernate/hibRtmpConnection.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/src/base/hibernate/hibRtmpConnection.lzx?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/WebContent/src/base/hibernate/hibRtmpConnection.lzx (original)
+++ openmeetings/branches/3.0.x/WebContent/src/base/hibernate/hibRtmpConnection.lzx Tue Jul  7 17:35:18 2015
@@ -114,34 +114,19 @@
     
     <method name="getPort">
     	if (canvas.useSSL) {
-    		if (canvas.isSlaveHosted) {
-    			return canvas.slaveRtmpsslport;
-    		}
             return canvas.rtmpsslport;
         }
     	if (this.useRTMPT) {
-    		if (canvas.isSlaveHosted) {
-    			return canvas.red5httpport; //TODO probably slave equivalent need to be added (or maybe this is not used)
-    		}
     		return canvas.red5httpport;
     	}
-    	if (canvas.isSlaveHosted) {
-    		return canvas.slaveRtmpport;
-    	}
     	return canvas.rtmpport;
     </method>
     
     <method name="getHost">
-    	if (canvas.isSlaveHosted) {
-    		return canvas.slaveRtmphostlocal;
-    	}
     	return canvas.rtmphostlocal;
     </method>
     
     <method name="getWebappRootKey">
-    	if (canvas.isSlaveHosted) {
-    		return canvas.slaveWebAppRootKey;
-    	}
     	return canvas.webAppRootKey;
     </method>
          

Modified: openmeetings/branches/3.0.x/WebContent/src/base/mainAttributes.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/src/base/mainAttributes.lzx?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/WebContent/src/base/mainAttributes.lzx (original)
+++ openmeetings/branches/3.0.x/WebContent/src/base/mainAttributes.lzx Tue Jul  7 17:35:18 2015
@@ -101,16 +101,7 @@ these properties will be overwritten by
 #############################################################
 Attributes needed for clustering -->
 
-<attribute name="isSlaveHosted" value="false" type="boolean" />
-
-<!-- server object's address (not loaded from public/config.xml cause this variable is empty by default) -->
-<attribute name="slaveRtmphostlocal" value="" type="string" />
-<!-- rtmpport from slave's public/config.xml  --> 
-<attribute name="slaveRtmpport" value="5080" type="string" />
-<!-- rtmpsslport from slave's public/config.xml -->
-<attribute name="slaveRtmpsslport" value="443" type="string" />
-<!-- from slave's public/config.xml -->
-<attribute name="slaveWebAppRootKey" value="" type="string" /> 
+<attribute name="isCluster" value="false" type="boolean" />
 
 <!--
 #############################################################

Modified: openmeetings/branches/3.0.x/WebContent/src/base/mainDatasets.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/src/base/mainDatasets.lzx?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/WebContent/src/base/mainDatasets.lzx (original)
+++ openmeetings/branches/3.0.x/WebContent/src/base/mainDatasets.lzx Tue Jul  7 17:35:18 2015
@@ -23,11 +23,35 @@
 
 <library>
 
+	<method name="getServerBaseUrl">
+	<![CDATA[
+		var protocol = lz.Browser.getInitArg('protocol');
+		var host = lz.Browser.getInitArg('host');
+		var port = lz.Browser.getInitArg('port');
+		var context = lz.Browser.getInitArg('context');
+		if (protocol != undefined && host != undefined && port != undefined && !isNaN(port) && context != undefined) {
+			canvas.setAttribute('isCluster', true);
+			canvas.setAttribute('rtmphostlocal', host);
+			return protocol + "://" + host + ":" + port + "/" + context + "/public/";
+		} else {
+			var urlObject = lz.Browser.getBaseURL();
+			//If Port is Null or undefinied use port 80
+			var port = (urlObject.port != null && urlObject.port != undefined) ? urlObject.port : 80;
+			//if($debug) Debug.write("getBaseUrl:: [urlObject, port]", urlObject, port);
+			var url = "" + urlObject.protocol + "://" + urlObject.host + (port != 80 ? ":" + port : "") + urlObject.path;
+			//if($debug) Debug.write("!!!!!!! getBaseUrl:: [urlObject, port, url]", urlObject, port, url);
+			url = url + (url.slice(-1) == '/' ? '' : '/');
+			//if($debug) Debug.write("!!!!!!! getBaseUrl:: [last, url]", url.slice(-1), url);
+			return url;
+		}
+	]]>
+	</method>
+
 <!-- get values from public/config.xml -->
 <dataset type="http" name="myConfigSet" request="false" ondata="parent.mainTheme.loadTheme()">
     <handler name="oninit">
         var d = new Date();
-        this.setAttribute("src","config.xml?random="+d.getTime());
+        this.setAttribute("src", canvas.getServerBaseUrl() + "config.xml?random=" + d.getTime());
         this.doRequest();
     </handler>
     <handler name="ondata">
@@ -45,7 +69,7 @@
 <dataset type="http" name="mainTheme" request="false" ondata="canvas.myinit()">
     <method name="loadTheme">
         var d = new Date();
-        this.setAttribute("src","theme.xml?random="+d.getTime());
+        this.setAttribute("src", canvas.getServerBaseUrl() + "theme.xml?random=" + d.getTime());
         this.doRequest();
     </method>
     <handler name="ondata">

Modified: openmeetings/branches/3.0.x/WebContent/src/base/mainMethods.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/src/base/mainMethods.lzx?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/WebContent/src/base/mainMethods.lzx (original)
+++ openmeetings/branches/3.0.x/WebContent/src/base/mainMethods.lzx Tue Jul  7 17:35:18 2015
@@ -152,23 +152,9 @@
 	]]>
 	</method>
 
-	<method name="getAppBaseUrlWithoutSwfSuffix">
-	<![CDATA[
-		var urlObject = lz.Browser.getBaseURL();
-		//If Port is Null or undefinied use port 80
-		var port = (urlObject.port != null && urlObject.port != undefined) ? urlObject.port : 80;
-		//if($debug) Debug.write("getBaseUrl:: [urlObject, port]", urlObject, port);
-		var url = "" + urlObject.protocol + "://" + urlObject.host + (port != 80 ? ":" + port : "") + urlObject.path;
-		//if($debug) Debug.write("!!!!!!! getBaseUrl:: [urlObject, port, url]", urlObject, port, url);
-		url = url + (url.slice(-1) == '/' ? '' : '/');
-		//if($debug) Debug.write("!!!!!!! getBaseUrl:: [last, url]", url.slice(-1), url);
-		return url.substring(0, url.length - 7); // the length of "public/"
-	]]>
-	</method>
-
 	<method name="getAppBaseUrl">
 	<![CDATA[
-		return getAppBaseUrlWithoutSwfSuffix() + "swf"
+		return canvas.getServerBaseUrl() + "swf"
 	]]>
 	</method>
 
@@ -178,7 +164,7 @@
 			? hib.currentdomainObj.organisation_id : 1;
 		if ($debug) Debug.write("mainMethods::getScreenSharingUrl ", hib.userobject, hib.currentdomainObj);
 		
-		var appBase = canvas.getAppBaseUrlWithoutSwfSuffix();
+		var appBase = canvas.getServerBaseUrl();
 		if ($debug) Debug.write("appBase=" + appBase);
 		var downloadurl = appBase + 'screen.upload?'
 			+'rtmphostlocal=' + canvas.getHttpHost()
@@ -195,13 +181,6 @@
 	]]>
 	</method>
 	
-    <dataset type="http" name="languageData" request="false" 
-        src="${ canvas.currentlanguage+'.xml' }" proxied="false">
-        <handler name="ondata" args="value">
-            parent.parseLanugageObject(value);
-        </handler>
-    </dataset>
-
     <method name="myinit">
         <![CDATA[
         canvas.mediaerrortimeout = 30000;
@@ -210,7 +189,9 @@
         if($debug) Debug.write("main.lzx/config.xml ondata",this);
         
         //Set Config-values by public/config.xml, see comments on public/config.xml
-        this.setAttribute('rtmphostlocal',canvas.myConfigSet.getPointer().xpathQuery('config/rtmphostlocal/text()'));   
+        if (!canvas.isCluster) {
+        	this.setAttribute('rtmphostlocal',canvas.myConfigSet.getPointer().xpathQuery('config/rtmphostlocal/text()'));
+        }   
         this.setAttribute('rtmpport',Number(canvas.myConfigSet.getPointer().xpathQuery('config/rtmpport/text()')));  
         this.setAttribute('rtmpsslport',Number(canvas.myConfigSet.getPointer().xpathQuery('config/rtmpsslport/text()'))); 
         
@@ -700,62 +681,6 @@
 	    ]]>
 	</method>
 	
-	<!-- Data Source Definition -->
-	<dataset name="getSessionVarsData" request="false" proxied="false"
-	    querytype="POST" src="${ 'http://'+canvas.rtmphost+'/webrooms/checksession.php' }" 
-	    type="http" >
-	    <handler name="ondata" args="value">
-	    
-	        //Debug.write(value);
-	        canvas.setAttribute('currentcourse',value.childNodes[0].childNodes[0].childNodes[0].childNodes[0].data);
-	        canvas.setAttribute('currentcourseName',canvas.currentcourse);
-	        canvas.setAttribute('currentcourseNameLong',value.childNodes[0].childNodes[0].childNodes[1].childNodes[0].data);
-	        canvas.setAttribute('currentlanguage',value.childNodes[0].childNodes[0].childNodes[8].childNodes[0].data);
-	
-	        canvas.setAttribute('currentusename',value.childNodes[0].childNodes[1].childNodes[2].childNodes[0].data+' '+value.childNodes[0].childNodes[1].childNodes[1].childNodes[0].data);
-	        
-	        canvas.setAttribute('user_id',value.childNodes[0].childNodes[1].childNodes[0].childNodes[0].data);
-	        canvas.setAttribute('firstName',value.childNodes[0].childNodes[1].childNodes[1].childNodes[0].data);
-	        canvas.setAttribute('lastName',value.childNodes[0].childNodes[1].childNodes[2].childNodes[0].data);
-	        canvas.setAttribute('mail',value.childNodes[0].childNodes[1].childNodes[3].childNodes[0].data);
-	        canvas.setAttribute('lastLogin','');
-	        canvas.setAttribute('official_code',value.childNodes[0].childNodes[1].childNodes[5].childNodes[0].data);
-	        canvas.setAttribute('picture_uri','');
-	        canvas.setAttribute('language',value.childNodes[0].childNodes[1].childNodes[7].childNodes[0].data);
-	
-	        //Debug.write(value.childNodes[0].childNodes[1].childNodes[0].childNodes[0].data);
-	        //Debug.write(value.childNodes[0].childNodes[1].childNodes[1].childNodes[0].data);
-	        //Debug.write(value.childNodes[0].childNodes[1].childNodes[2].childNodes[0].data);
-	        //Debug.write(value.childNodes[0].childNodes[1].childNodes[3].childNodes[0].data);
-	        //Debug.write(value.childNodes[0].childNodes[1].childNodes[4].childNodes[0].data);
-	        //Debug.write(value.childNodes[0].childNodes[1].childNodes[5].childNodes[0].data);
-	        //Debug.write(value.childNodes[0].childNodes[1].childNodes[6].childNodes[0].data);
-	        //Debug.write(value.childNodes[0].childNodes[1].childNodes[7].childNodes[0].data);
-	        
-	        switch (canvas.currentlanguage){
-	            case 'english':
-	            break;
-	            case 'german':
-	            break;
-	            case 'french':
-	            break;          
-	            default:
-	            canvas.setAttribute('currentlanguage','english');
-	            break;
-	        }
-	        
-	        var addIt='conf';
-	        if (!canvas.isConference){
-	            addIt='meet'
-	        }
-	        canvas.setAttribute('currentcourse',canvas.rtmphost+canvas.currentcourse+addIt);
-	        canvas.setAttribute('currentuser',value.childNodes[0].childNodes[1].childNodes[5].childNodes[0].data);
-	        
-	        canvas.setAttribute('loadingmessage','loading language data');
-	        canvas.languageData.doRequest();
-	    </handler>
-	</dataset>
-	
 	<method name="addBrowserTabHistory" args="value">
 	    <![CDATA[
 	    //Debug.write("addBrowserTabHistory: ",value);

Modified: openmeetings/branches/3.0.x/WebContent/src/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/src/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/WebContent/src/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx (original)
+++ openmeetings/branches/3.0.x/WebContent/src/modules/conference/flexibleConferenceRoom/baseConferenceRoom.lzx Tue Jul  7 17:35:18 2015
@@ -195,9 +195,6 @@
 			canvas.currentActivityList = null;
 		}
 		
-		//reset if the user was connected to any slave
-		canvas.isSlaveHosted = false;
-		
 		//@deprecated we will not use old screen sharing implementation
 		//canvas._screens.clearAllSessions();
 		this.logicalRoomLeave.doCall();

Modified: openmeetings/branches/3.0.x/WebContent/src/modules/conference/testsetup/testSetup.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/src/modules/conference/testsetup/testSetup.lzx?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/WebContent/src/modules/conference/testsetup/testSetup.lzx (original)
+++ openmeetings/branches/3.0.x/WebContent/src/modules/conference/testsetup/testSetup.lzx Tue Jul  7 17:35:18 2015
@@ -46,84 +46,19 @@ RTMP-host, RTMP/RTMPT-port for the sessi
     then the window just closed -->
     <attribute name="doJustClose" value="false" type="boolean" />
     
-    <handler name="oninit">
-    	<![CDATA[
-            this.getServerForSession.doCall();
-    	]]>
-    </handler>
-    
-    <!-- 
-    public Server getServerForSession(String SID, long roomId)
-     -->
-   	<netRemoteCallHib name="getServerForSession" funcname="conferenceservice.getServerForSession" remotecontext="$once{ canvas.thishib }" >      
-		<netparam><method name="getValue"> return canvas.sessionId; </method></netparam>
-		<netparam><method name="getValue"> return parent.parent.roomObj.rooms_id; </method></netparam>
-		<handler name="ondata" args="value">
-			if ($debug) Debug.write("getServerForSession ",value);
-			//if return value is null, everything stays the same, session is on the current host
-			if (value != null){
-				//is not loaded from public/config.xml from slave as this is variable is empty by default!
-				canvas.slaveRtmphostlocal = value.address;
-				
-				var slaveUrl = value.protocol + "://" + value.address + ":" + value.port + "/" + value.webapp + "/";
-				
-				var d = new Date();
-		        parent.myConfigSet.setAttribute("src", slaveUrl + "public/config.xml?random="+d.getTime());
-		        parent.myConfigSet.doRequest();
-				
-			} else {
-				//Hosted on master
-				canvas.isSlaveHosted = false;
-				this.parent.startConference();
-			}
-		</handler>
-	</netRemoteCallHib>	
-	
-	<!-- get values from public/config.xml from slave -->
-	<dataset type="http" name="myConfigSet" request="false" ondata="parent.parseResultsToSlaveClusterConfig()">
-	    <handler name="ondata">
-	        if ($debug) Debug.write("ondata");
-	    </handler>
-	    <handler name="onerror" args="e">
-	        if ($debug) Debug.write("onerror",e);
-	    </handler>
-	    <handler name="ontimeout" args="e">
-	        if ($debug) Debug.write("ontimeout",e);
-	    </handler>
-	</dataset>
-	
-	<!-- 
-		Parse the results so that the RTMP traffic points to the slave
-		and the HTTP traffic points to the master
-	 -->
-	<method name="parseResultsToSlaveClusterConfig">
-		
-        canvas.slaveRtmpport = Number(this.myConfigSet.getPointer().xpathQuery('config/rtmpport/text()'));  
-        canvas.slaveRtmpsslport = Number(this.myConfigSet.getPointer().xpathQuery('config/rtmpsslport/text()')); 
-        canvas.slaveWebAppRootKey = this.myConfigSet.getPointer().xpathQuery('config/webAppRootKey/text()'); 
-		
-		if ($debug) Debug.write("parseResults: ",canvas.slaveRtmphostlocal,canvas.slaveRtmpport,canvas.slaveRtmpsslport,canvas.slaveWebAppRootKey);
+	<handler name="oninit">
+	<![CDATA[
+		clearStageContent();
+		if ($debug) Debug.warn("roomClassname : ", this.roomClassName);
+		if ($debug) Debug.warn("canvas.currentRoomObj will be : ", this.roomObj);
+		canvas.currentRoomObj = this.roomObj;
 		
-		//Hosted on slave
-		canvas.isSlaveHosted = true;
-		this.startConference();
-	</method>
-    
-    <method name="startConference">
-    	<![CDATA[
-            clearStageContent();
-            if ($debug) Debug.warn("roomClassname : ", this.roomClassName);
-            if ($debug) Debug.warn("canvas.currentRoomObj will be : ", this.roomObj);
-            canvas.currentRoomObj = this.roomObj;
-            
-            new lz[this.roomClassName](canvas.main_content._content.inner, {
-                        roomobj:this.roomObj
-                    });
-    	
-            this.destroy();
-    	]]>
-    </method>
-
+		new lz[this.roomClassName](canvas.main_content._content.inner, {
+					roomobj:this.roomObj
+					});
+		this.destroy();
+	]]>
+	</handler>
 </class>
 
 

Modified: openmeetings/branches/3.0.x/WebContent/swf10/base/mainDatasets.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/swf10/base/mainDatasets.lzx?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/WebContent/swf10/base/mainDatasets.lzx (original)
+++ openmeetings/branches/3.0.x/WebContent/swf10/base/mainDatasets.lzx Tue Jul  7 17:35:18 2015
@@ -23,11 +23,39 @@
 
 <library>
 
+	<method name="getLocalBaseUrl">
+	<![CDATA[
+		var urlObject = lz.Browser.getBaseURL();
+		//If Port is Null or undefinied use port 80
+		var port = (urlObject.port != null && urlObject.port != undefined) ? urlObject.port : 80;
+		//if($debug) Debug.write("getBaseUrl:: [urlObject, port]", urlObject, port);
+		var url = "" + urlObject.protocol + "://" + urlObject.host + (port != 80 ? ":" + port : "") + urlObject.path;
+		//if($debug) Debug.write("!!!!!!! getBaseUrl:: [urlObject, port, url]", urlObject, port, url);
+		url = url + (url.slice(-1) == '/' ? '' : '/');
+		//if($debug) Debug.write("!!!!!!! getBaseUrl:: [last, url]", url.slice(-1), url);
+		return url;
+	]]>
+	</method>
+
+	<method name="getServerBaseUrl">
+	<![CDATA[
+		var protocol = lz.Browser.getInitArg('protocol');
+		var host = lz.Browser.getInitArg('host');
+		var port = lz.Browser.getInitArg('port');
+		var context = lz.Browser.getInitArg('context');
+		if (protocol != undefined && host != undefined && port != undefined && !isNaN(port) && context != undefined) {
+			return protocol + "://" + host + ":" + port + "/" + context + "/public/";
+		} else {
+			return getLocalBaseUrl();
+		}
+	]]>
+	</method>
+
 <!-- get values from public/config.xml -->
 <dataset type="http" name="myConfigSet" request="false" ondata="parent.mainTheme.loadTheme()" proxied="false">
     <handler name="oninit">
         var d = new Date();
-        this.setAttribute("src","config.xml?random="+d.getTime());
+        this.setAttribute("src", canvas.getServerBaseUrl() + "config.xml?random=" + d.getTime());
         this.doRequest();
     </handler>
     <handler name="ondata">
@@ -49,7 +77,7 @@
 <dataset type="http" name="mainTheme" request="false" ondata="canvas.myinit()" proxied="false">
     <method name="loadTheme">
         var d = new Date();
-        this.setAttribute("src","theme.xml?random="+d.getTime());
+        this.setAttribute("src", canvas.getServerBaseUrl() + "theme.xml?random=" + d.getTime());
         this.doRequest();
     </method>
     <handler name="ondata">

Modified: openmeetings/branches/3.0.x/WebContent/swf10/main.as3.lzx
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/WebContent/swf10/main.as3.lzx?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/WebContent/swf10/main.as3.lzx (original)
+++ openmeetings/branches/3.0.x/WebContent/swf10/main.as3.lzx Tue Jul  7 17:35:18 2015
@@ -93,26 +93,12 @@
         return "" + Math.floor(999999*Math.random());
     </method>
 
-	<method name="getAppBaseUrlWithoutSwfSuffix">
-	<![CDATA[
-		var urlObject = lz.Browser.getBaseURL();
-		//If Port is Null or undefinied use port 80
-		var port = (urlObject.port != null && urlObject.port != undefined) ? urlObject.port : 80;
-		//if($debug) Debug.write("getBaseUrl:: [urlObject, port]", urlObject, port);
-		var url = "" + urlObject.protocol + "://" + urlObject.host + (port != 80 ? ":" + port : "") + urlObject.path;
-		//if($debug) Debug.write("!!!!!!! getBaseUrl:: [urlObject, port, url]", urlObject, port, url);
-		url = url + (url.slice(-1) == '/' ? '' : '/');
-		//if($debug) Debug.write("!!!!!!! getBaseUrl:: [last, url]", url.slice(-1), url);
-		return url;
-	]]>
-	</method>
-
     <handler name="oninit"><![CDATA[
 		doDebugInit();
     
         var tInitArgsArry = new Array('secureHash','invitationHash','sid','roomid','directRoomId'
         	,'language','hash','cuser','tAccept','moodleRoom','becomemoderator','wwwroot','user_id'
-        	,'picture','scopeRoomId', 'wicketsid', 'wicketroomid');
+        	,'picture','scopeRoomId', 'wicketsid', 'wicketroomid', 'protocol', 'host', 'port', 'context');
     
         this.setAttribute('lc_SID', this.getLCSID());
         this.setAttribute('vid_lc_name', lc_SID + '__videoLC');
@@ -136,7 +122,7 @@
             }
         }
         
-        var tSWFURL = getAppBaseUrlWithoutSwfSuffix() + "main" + ($debug ? "debug" : "") + ".swf8.swf?lzproxied=solo&lc_SID="+lc_SID+tqueryString;
+        var tSWFURL = canvas.getLocalBaseUrl() + "main" + ($debug ? "debug" : "") + ".swf8.swf?lzproxied=solo&lc_SID="+lc_SID+tqueryString;
         
         if ($debug) Debug.write("tSWFURL :: ",tSWFURL);
         

Modified: openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/ConferenceService.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/ConferenceService.java?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/ConferenceService.java (original)
+++ openmeetings/branches/3.0.x/src/main/java/org/apache/openmeetings/remote/ConferenceService.java Tue Jul  7 17:35:18 2015
@@ -23,10 +23,8 @@ import static org.apache.openmeetings.ut
 
 import java.util.ArrayList;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 
 import org.apache.openmeetings.data.calendar.management.AppointmentLogic;
 import org.apache.openmeetings.data.conference.RoomManager;
@@ -40,14 +38,12 @@ import org.apache.openmeetings.db.dao.se
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
 import org.apache.openmeetings.db.dao.user.UserDao;
 import org.apache.openmeetings.db.dto.basic.SearchResult;
-import org.apache.openmeetings.db.dto.server.ServerDTO;
 import org.apache.openmeetings.db.entity.calendar.Appointment;
 import org.apache.openmeetings.db.entity.room.Client;
 import org.apache.openmeetings.db.entity.room.Room;
 import org.apache.openmeetings.db.entity.room.RoomModerator;
 import org.apache.openmeetings.db.entity.room.RoomOrganisation;
 import org.apache.openmeetings.db.entity.room.RoomType;
-import org.apache.openmeetings.db.entity.server.Server;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.db.util.TimezoneUtil;
 import org.apache.openmeetings.util.AuthLevelUtil;
@@ -522,48 +518,4 @@ public class ConferenceService {
 		}
 		return null;
 	}
-
-	/**
-	 * Gives a {@link Server} entity, in case there is a cluster configured
-	 * 
-	 * @param SID
-	 * @param roomId
-	 * @return null means the user should stay on the master, otherwise a
-	 *         {@link Server} entity is returned
-	 */
-	public ServerDTO getServerForSession(String SID, long roomId) {
-		Long users_id = sessiondataDao.checkSession(SID);
-		if (AuthLevelUtil.hasUserLevel(userDao.getRights(users_id))) {
-			List<Server> serverList = serverDao.getActiveServers();
-
-			long minimum = -1;
-			Server result = null;
-			HashMap<Server, List<Long>> activeRoomsMap = new HashMap<Server, List<Long>>();
-			for (Server server : serverList) {
-				List<Long> roomIds = sessionManager.getActiveRoomIdsByServer(server);
-				if (roomIds.contains(roomId)) {
-					// if the room is already opened on a server, redirect the user to that one,
-					log.debug("Room is already opened on a server " + server.getAddress());
-					return new ServerDTO(server);
-				}
-				activeRoomsMap.put(server, roomIds);
-			}
-			for (Map.Entry<Server, List<Long>> entry : activeRoomsMap.entrySet()) {
-				List<Long> roomIds = entry.getValue();
-				Long capacity = roomDao.getRoomsCapacityByIds(roomIds);
-				if (minimum < 0 || capacity < minimum) {
-					minimum = capacity;
-					result = entry.getKey();
-				}
-				log.debug("Checking server: " + entry.getKey() + " Number of rooms " + roomIds.size() + " RoomIds: "
-						+ roomIds + " max(Sum): " + capacity);
-			}
-			return result == null ? null : new ServerDTO(result);
-		}
-
-		log.error("Could not get server for cluster session");
-		// Empty server object
-		return null;
-	}
-	
 }

Modified: openmeetings/branches/3.0.x/src/main/webapp/js/history.js
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/webapp/js/history.js?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/main/webapp/js/history.js (original)
+++ openmeetings/branches/3.0.x/src/main/webapp/js/history.js Tue Jul  7 17:35:18 2015
@@ -22,12 +22,10 @@ BrowserHistoryUtils = {
         if (elm.addEventListener) {
             elm.addEventListener(evType, fn, useCapture);
             return true;
-        }
-        else if (elm.attachEvent) {
+        } else if (elm.attachEvent) {
             var r = elm.attachEvent('on' + evType, fn);
             return r;
-        }
-        else {
+        } else {
             elm['on' + evType] = fn;
         }
     }
@@ -36,11 +34,11 @@ BrowserHistoryUtils = {
 BrowserHistory = (function() {
     // type of browser
     var browser = {
-        ie: false, 
-        ie8: false, 
-        firefox: false, 
-        safari: false, 
-        opera: false, 
+        ie: false,
+        ie8: false,
+        firefox: false,
+        safari: false,
+        opera: false,
         version: -1
     };
 
@@ -61,7 +59,7 @@ BrowserHistory = (function() {
 
     // History maintenance (used only by Safari)
     var currentHistoryLength = -1;
-    
+
     // Flag to denote the existence of onhashchange
     var browserHasHashChange = false;
 
@@ -82,8 +80,7 @@ BrowserHistory = (function() {
     } else if (useragent.indexOf("msie") != -1) {
         browser.ie = true;
         browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));
-        if (browser.version == 8)
-        {
+        if (browser.version == 8) {
             browser.ie = false;
             browser.ie8 = true;
         }
@@ -98,8 +95,7 @@ BrowserHistory = (function() {
         window["_ie_firstload"] = false;
     }
 
-    function hashChangeHandler()
-    {
+    function hashChangeHandler() {
         currentHref = document.location.href;
         var flexAppUrl = getHash();
         //ADR: to fix multiple
@@ -114,34 +110,32 @@ BrowserHistory = (function() {
     }
 
     // Accessor functions for obtaining specific elements of the page.
-    function getHistoryFrame()
-    {
+
+    function getHistoryFrame() {
         return document.getElementById('ie_historyFrame');
     }
 
-    function getFormElement()
-    {
+    function getFormElement() {
         return document.getElementById('safari_formDiv');
     }
 
-    function getRememberElement()
-    {
+    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");
+        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];
@@ -150,42 +144,37 @@ BrowserHistory = (function() {
                     if (typeof e[i].browserURLChange != "undefined")
                         return e[i];
                 }
-			}
-		}
-		else {
-			var o = document.getElementsByTagName("object");
-			var e = document.getElementsByTagName("embed");
+            }
+        } else {
+            var o = document.getElementsByTagName("object");
+            var e = document.getElementsByTagName("embed");
             for (i = 0; i < e.length; i++) {
-                if (typeof e[i].browserURLChange != "undefined")
-                {
+                if (typeof e[i].browserURLChange != "undefined") {
                     return e[i];
                 }
             }
             for (i = 0; i < o.length; i++) {
-                if (typeof o[i].browserURLChange != "undefined")
-                {
+                if (typeof o[i].browserURLChange != "undefined") {
                     return o[i];
                 }
             }
-		}
-		return undefined;
-	}
-    
+        }
+        return undefined;
+    }
+
     function getPlayers() {
         var i;
         var players = [];
         if (players.length == 0) {
             var tmp = document.getElementsByTagName('object');
-            for (i = 0; i < tmp.length; i++)
-            {
+            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++)
-            {
+            for (i = 0; i < tmp.length; i++) {
                 if (typeof tmp[i].browserURLChange != "undefined")
                     players.push(tmp[i]);
             }
@@ -193,36 +182,42 @@ BrowserHistory = (function() {
         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;
-	}
+    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) : '';
+        // 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;
+        // 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 };
+        return {
+            'baseUrl': baseUrl,
+            'newUrl': newUrl,
+            'flexAppUrl': flexAppUrl,
+            'title': null
+        };
     }
 
     /* Add a history entry to the browser.
@@ -230,6 +225,7 @@ BrowserHistory = (function() {
      *   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
@@ -257,7 +253,7 @@ BrowserHistory = (function() {
             //ADR
             if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {
                 initialState = createState(baseUrl, newUrl, flexAppUrl);
-            } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {
+            } else if (backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {
                 backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);
             }
 
@@ -265,8 +261,8 @@ BrowserHistory = (function() {
                 // 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>';
+                    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("&");
@@ -302,9 +298,11 @@ BrowserHistory = (function() {
     function handleBackButton() {
         //The "current" page is always at the top of the history stack.
         var current = backStack.pop();
-        if (!current) { return; }
+        if (!current) {
+            return;
+        }
         var last = backStack[backStack.length - 1];
-        if (!last && backStack.length == 0){
+        if (!last && backStack.length == 0) {
             last = initialState;
         }
         forwardStack.push(current);
@@ -314,7 +312,9 @@ BrowserHistory = (function() {
         //summary: private method. Do not call this directly.
 
         var last = forwardStack.pop();
-        if (!last) { return; }
+        if (!last) {
+            return;
+        }
         backStack.push(last);
     }
 
@@ -324,6 +324,7 @@ BrowserHistory = (function() {
     }
 
     /* Called periodically to poll to see if we need to detect navigation that has occurred */
+
     function checkForUrlChange() {
 
         if (browser.ie) {
@@ -338,12 +339,12 @@ BrowserHistory = (function() {
                     currentHref = document.location.href;
                     document.location.reload();
                 } else {
-					if (getHash() != getIframeHash()) {
-						// this.iframe.src = this.blankURL + hash;
-						var sourceToSet = historyFrameSourcePrefix + getHash();
-						getHistoryFrame().src = sourceToSet;
+                    if (getHash() != getIframeHash()) {
+                        // this.iframe.src = this.blankURL + hash;
+                        var sourceToSet = historyFrameSourcePrefix + getHash();
+                        getHistoryFrame().src = sourceToSet;
                         currentHref = document.location.href;
-					}
+                    }
                 }
             }
         }
@@ -353,13 +354,12 @@ BrowserHistory = (function() {
             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 (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;
+                    currentHistoryLength = history.length;
                     flexAppUrl = historyHash[currentHistoryLength];
                 }
 
@@ -380,8 +380,8 @@ BrowserHistory = (function() {
                 var bsl = backStack.length;
 
                 var urlActions = {
-                    back: false, 
-                    forward: false, 
+                    back: false,
+                    forward: false,
                     set: false
                 }
 
@@ -392,11 +392,11 @@ BrowserHistory = (function() {
                     // 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()) {
+                    if (forwardStack[forwardStack.length - 1].flexAppUrl == getHash()) {
                         urlActions.forward = true;
                         handleForwardButton();
                     }
@@ -409,10 +409,10 @@ BrowserHistory = (function() {
                         handleBackButton();
                     }
                 }
-                
+
                 if (!urlActions.back && !urlActions.forward) {
                     var foundInStacks = {
-                        back: -1, 
+                        back: -1,
                         forward: -1
                     }
 
@@ -447,12 +447,11 @@ BrowserHistory = (function() {
         }
     }
 
-    var _initialize = function () {
-        
+    var _initialize = function() {
+
         browserHasHashChange = ("onhashchange" in document.body);
-        
-        if (browser.ie)
-        {
+
+        if (browser.ie) {
             var scripts = document.getElementsByTagName('script');
             for (var i = 0, s; s = scripts[i]; i++) {
                 if (s.src.indexOf("history.js") > -1) {
@@ -465,19 +464,18 @@ BrowserHistory = (function() {
             var iframe = document.createElement("iframe");
             iframe.id = 'ie_historyFrame';
             iframe.name = 'ie_historyFrame';
-            iframe.src = 'javascript:false;'; 
+            iframe.src = 'javascript:false;';
 
             try {
                 document.body.appendChild(iframe);
-            } catch(e) {
+            } catch (e) {
                 setTimeout(function() {
                     document.body.appendChild(iframe);
                 }, 0);
             }
         }
 
-        if (browser.safari && !browserHasHashChange)
-        {
+        if (browser.safari && !browserHasHashChange) {
             var rememberDiv = document.createElement("div");
             rememberDiv.id = 'safari_rememberDiv';
             document.body.appendChild(rememberDiv);
@@ -501,58 +499,60 @@ BrowserHistory = (function() {
             reloader_content.style.left = reloader_content.style.top = '-9999px';
             iframe = reloader_content.getElementsByTagName('iframe')[0];
 
-            if (document.getElementById("safari_remember_field").value != "" ) {
+            if (document.getElementById("safari_remember_field").value != "") {
                 historyHash = document.getElementById("safari_remember_field").value.split(",");
             }
         }
 
-        if (browserHasHashChange)        
+        if (browserHasHashChange)
             document.body.onhashchange = hashChangeHandler;
     }
 
     return {
-        historyHash: historyHash, 
-        backStack: function() { return backStack; }, 
-        forwardStack: function() { return forwardStack }, 
-        getPlayer: getPlayer, 
+        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) { }
+            } 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) {
+                        var tmp = window.location.href.toString();
+                        title = tmp.substring((tmp.lastIndexOf("/") + 1), tmp.lastIndexOf("#"));
+                    } catch (e) {
                         title = "";
                     }
                 }
             }
             document.title = title;
-        }, 
-        setDefaultURL: function(def)
-        {
+        },
+        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)
-            {
+            if (browser.ie) {
                 window['_ie_firstload'] = true;
                 var sourceToSet = historyFrameSourcePrefix + def;
                 var func = function() {
@@ -562,13 +562,14 @@ BrowserHistory = (function() {
                 }
                 try {
                     func();
-                } catch(e) {
-                    window.setTimeout(function() { func(); }, 0);
+                } catch (e) {
+                    window.setTimeout(function() {
+                        func();
+                    }, 0);
                 }
             }
 
-            if (browser.safari)
-            {
+            if (browser.safari) {
                 currentHistoryLength = history.length;
                 if (historyHash.length == 0) {
                     historyHash[currentHistoryLength] = def;
@@ -579,20 +580,18 @@ BrowserHistory = (function() {
                 }
                 setInterval(checkForUrlChange, 50);
             }
-            
-            
-            if (browser.firefox || browser.opera)
-            {
+
+
+            if (browser.firefox || browser.opera) {
                 var reg = new RegExp("#" + def + "$");
-                if (window.location.toString().match(reg)) {
-                } else {
-                    var newloc ="#" + 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.
@@ -601,39 +600,39 @@ BrowserHistory = (function() {
             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;
-           }
-        }, 
+            //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) { }
+                    } catch (e) {}
                 }
             } else {
                 try {
                     getPlayer(objectId).browserURLChange(flexAppUrl);
-                } catch(e) { }
+                } catch (e) {}
             }
 
             currentObjectId = null;
@@ -653,44 +652,52 @@ BrowserHistory = (function() {
 
 // Automated unit testing and other diagnostics
 
-function setURL(url)
-{
+function setURL(url) {
     document.location.href = url;
 }
 
-function backButton()
-{
+function backButton() {
     history.back();
 }
 
-function forwardButton()
-{
+function forwardButton() {
     history.forward();
 }
 
-function goForwardOrBackInHistory(step)
-{
+function goForwardOrBackInHistory(step) {
     history.go(step);
 }
 
 //BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });
 (function(i) {
-    var u =navigator.userAgent;var e=/*@cc_on!@*/false; 
+    var 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();} );
+    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();
+});
\ No newline at end of file

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/rooms/RoomPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/rooms/RoomPanel.java?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/rooms/RoomPanel.java (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/rooms/RoomPanel.java Tue Jul  7 17:35:18 2015
@@ -18,9 +18,20 @@
  */
 package org.apache.openmeetings.web.user.rooms;
 
+import static org.apache.openmeetings.util.OpenmeetingsVariables.webAppRootKey;
 import static org.apache.openmeetings.web.app.Application.getBean;
+import static org.apache.openmeetings.web.app.WebSession.getLanguage;
+import static org.apache.openmeetings.web.app.WebSession.getSid;
 
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.openmeetings.db.dao.room.RoomDao;
+import org.apache.openmeetings.db.dao.server.ServerDao;
 import org.apache.openmeetings.db.dao.server.SessiondataDao;
+import org.apache.openmeetings.db.entity.server.Server;
+import org.apache.openmeetings.session.SessionManager;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.BasePanel;
 import org.apache.wicket.RuntimeConfigurationType;
@@ -37,9 +48,12 @@ import org.apache.wicket.request.resourc
 import org.apache.wicket.request.resource.ResourceReference;
 import org.apache.wicket.util.string.StringValue;
 import org.apache.wicket.util.time.Duration;
+import org.red5.logging.Red5LoggerFactory;
+import org.slf4j.Logger;
 
 public class RoomPanel extends BasePanel {
-	private static final long serialVersionUID = 2308988314987829510L;
+	private static final long serialVersionUID = 1L;
+	private static final Logger log = Red5LoggerFactory.getLogger(RoomPanel.class, webAppRootKey);
 	
 	public RoomPanel(String id) {
 		this(id, new PageParameters());
@@ -50,6 +64,43 @@ public class RoomPanel extends BasePanel
 				? "maindebug.as3.swf11.swf" : "main.as3.swf11.swf";
 	}
 	
+	private static PageParameters addServer(PageParameters pp, Server s) {
+		return pp.add("protocol", s.getProtocol()).add("host", s.getAddress()).add("port", s.getPort()).add("context", s.getWebapp());
+	}
+	
+	private static PageParameters addServer(long roomId) {
+		PageParameters pp = new PageParameters().add("wicketsid", getSid()).add("wicketroomid", roomId).add("language", getLanguage());
+		List<Server> serverList = getBean(ServerDao.class).getActiveServers();
+
+		long minimum = -1;
+		Server result = null;
+		HashMap<Server, List<Long>> activeRoomsMap = new HashMap<Server, List<Long>>();
+		for (Server server : serverList) {
+			List<Long> roomIds = getBean(SessionManager.class).getActiveRoomIdsByServer(server);
+			if (roomIds.contains(roomId)) {
+				// if the room is already opened on a server, redirect the user to that one,
+				log.debug("Room is already opened on a server " + server.getAddress());
+				return addServer(pp, server);
+			}
+			activeRoomsMap.put(server, roomIds);
+		}
+		for (Map.Entry<Server, List<Long>> entry : activeRoomsMap.entrySet()) {
+			List<Long> roomIds = entry.getValue();
+			Long capacity = getBean(RoomDao.class).getRoomsCapacityByIds(roomIds);
+			if (minimum < 0 || capacity < minimum) {
+				minimum = capacity;
+				result = entry.getKey();
+			}
+			log.debug("Checking server: " + entry.getKey() + " Number of rooms " + roomIds.size() + " RoomIds: "
+					+ roomIds + " max(Sum): " + capacity);
+		}
+		return result == null ? pp : addServer(pp, result);
+	}
+
+	public RoomPanel(String id, long roomId) {
+		this(id, addServer(roomId));
+	}
+	
 	public RoomPanel(String id, PageParameters pp) {
 		super(id);
 

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/OmUrlFragment.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/OmUrlFragment.java?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/OmUrlFragment.java (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/util/OmUrlFragment.java Tue Jul  7 17:35:18 2015
@@ -20,8 +20,6 @@ package org.apache.openmeetings.web.util
 
 import static org.apache.openmeetings.util.OpenmeetingsVariables.CONFIG_DEFAULT_LANDING_ZONE;
 import static org.apache.openmeetings.web.app.Application.getBean;
-import static org.apache.openmeetings.web.app.WebSession.getLanguage;
-import static org.apache.openmeetings.web.app.WebSession.getSid;
 import static org.apache.openmeetings.web.user.profile.SettingsPanel.EDIT_PROFILE_TAB_ID;
 import static org.apache.openmeetings.web.user.profile.SettingsPanel.MESSAGES_TAB_ID;
 
@@ -45,7 +43,6 @@ import org.apache.openmeetings.web.user.
 import org.apache.openmeetings.web.user.record.RecordingsPanel;
 import org.apache.openmeetings.web.user.rooms.RoomPanel;
 import org.apache.openmeetings.web.user.rooms.RoomsSelectorPanel;
-import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 public class OmUrlFragment implements Serializable {
 	private static final long serialVersionUID = 7382435810352033914L;
@@ -259,11 +256,7 @@ public class OmUrlFragment implements Se
 				try {
 					Long roomId = Long.parseLong(type);
 					if (roomId != null) {
-						PageParameters pp = new PageParameters();
-						pp.add("wicketsid", getSid());
-						pp.add("wicketroomid", roomId);
-						pp.add("language", getLanguage());
-						basePanel = new RoomPanel(CHILD_ID, pp);
+						basePanel = new RoomPanel(CHILD_ID, roomId);
 					}
 				} catch(NumberFormatException ne) {
 					//skipit, bad roomid passed

Modified: openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-core/src/main/java/org/apache/openmeetings/core/remote/ConferenceService.java Tue Jul  7 17:35:18 2015
@@ -514,48 +514,4 @@ public class ConferenceService {
 		}
 		return null;
 	}
-
-	/**
-	 * Gives a {@link Server} entity, in case there is a cluster configured
-	 * 
-	 * @param SID
-	 * @param roomId
-	 * @return null means the user should stay on the master, otherwise a
-	 *         {@link Server} entity is returned
-	 */
-	public ServerDTO getServerForSession(String SID, long roomId) {
-		Long userId = sessiondataDao.checkSession(SID);
-		if (AuthLevelUtil.hasUserLevel(userDao.getRights(userId))) {
-			List<Server> serverList = serverDao.getActiveServers();
-
-			long minimum = -1;
-			Server result = null;
-			Map<Server, List<Long>> activeRoomsMap = new HashMap<Server, List<Long>>();
-			for (Server server : serverList) {
-				List<Long> roomIds = sessionManager.getActiveRoomIdsByServer(server);
-				if (roomIds.contains(roomId)) {
-					// if the room is already opened on a server, redirect the user to that one,
-					log.debug("Room is already opened on a server " + server.getAddress());
-					return new ServerDTO(server);
-				}
-				activeRoomsMap.put(server, roomIds);
-			}
-			for (Map.Entry<Server, List<Long>> entry : activeRoomsMap.entrySet()) {
-				List<Long> roomIds = entry.getValue();
-				Long capacity = roomDao.getRoomsCapacityByIds(roomIds);
-				if (minimum < 0 || capacity < minimum) {
-					minimum = capacity;
-					result = entry.getKey();
-				}
-				log.debug("Checking server: " + entry.getKey() + " Number of rooms " + roomIds.size() + " RoomIds: "
-						+ roomIds + " max(Sum): " + capacity);
-			}
-			return result == null ? null : new ServerDTO(result);
-		}
-
-		log.error("Could not get server for cluster session");
-		// Empty server object
-		return null;
-	}
-	
 }

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/js/history.js
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/js/history.js?rev=1689717&r1=1689716&r2=1689717&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/js/history.js (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/js/history.js Tue Jul  7 17:35:18 2015
@@ -22,25 +22,23 @@ BrowserHistoryUtils = {
         if (elm.addEventListener) {
             elm.addEventListener(evType, fn, useCapture);
             return true;
-        }
-        else if (elm.attachEvent) {
+        } else if (elm.attachEvent) {
             var r = elm.attachEvent('on' + evType, fn);
             return r;
-        }
-        else {
+        } else {
             elm['on' + evType] = fn;
         }
     }
-};
+}
 
 BrowserHistory = (function() {
     // type of browser
     var browser = {
-        ie: false, 
-        ie8: false, 
-        firefox: false, 
-        safari: false, 
-        opera: false, 
+        ie: false,
+        ie8: false,
+        firefox: false,
+        safari: false,
+        opera: false,
         version: -1
     };
 
@@ -61,7 +59,7 @@ BrowserHistory = (function() {
 
     // History maintenance (used only by Safari)
     var currentHistoryLength = -1;
-    
+
     // Flag to denote the existence of onhashchange
     var browserHasHashChange = false;
 
@@ -82,8 +80,7 @@ BrowserHistory = (function() {
     } else if (useragent.indexOf("msie") != -1) {
         browser.ie = true;
         browser.version = parseFloat(useragent.substring(useragent.indexOf('msie') + 4));
-        if (browser.version == 8)
-        {
+        if (browser.version == 8) {
             browser.ie = false;
             browser.ie8 = true;
         }
@@ -98,8 +95,7 @@ BrowserHistory = (function() {
         window["_ie_firstload"] = false;
     }
 
-    function hashChangeHandler()
-    {
+    function hashChangeHandler() {
         currentHref = document.location.href;
         var flexAppUrl = getHash();
         //ADR: to fix multiple
@@ -114,34 +110,32 @@ BrowserHistory = (function() {
     }
 
     // Accessor functions for obtaining specific elements of the page.
-    function getHistoryFrame()
-    {
+
+    function getHistoryFrame() {
         return document.getElementById('ie_historyFrame');
     }
 
-    function getFormElement()
-    {
+    function getFormElement() {
         return document.getElementById('safari_formDiv');
     }
 
-    function getRememberElement()
-    {
+    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");
+        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];
@@ -150,42 +144,37 @@ BrowserHistory = (function() {
                     if (typeof e[i].browserURLChange != "undefined")
                         return e[i];
                 }
-			}
-		}
-		else {
-			var o = document.getElementsByTagName("object");
-			var e = document.getElementsByTagName("embed");
+            }
+        } else {
+            var o = document.getElementsByTagName("object");
+            var e = document.getElementsByTagName("embed");
             for (i = 0; i < e.length; i++) {
-                if (typeof e[i].browserURLChange != "undefined")
-                {
+                if (typeof e[i].browserURLChange != "undefined") {
                     return e[i];
                 }
             }
             for (i = 0; i < o.length; i++) {
-                if (typeof o[i].browserURLChange != "undefined")
-                {
+                if (typeof o[i].browserURLChange != "undefined") {
                     return o[i];
                 }
             }
-		}
-		return undefined;
-	}
-    
+        }
+        return undefined;
+    }
+
     function getPlayers() {
         var i;
         var players = [];
         if (players.length == 0) {
             var tmp = document.getElementsByTagName('object');
-            for (i = 0; i < tmp.length; i++)
-            {
+            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++)
-            {
+            for (i = 0; i < tmp.length; i++) {
                 if (typeof tmp[i].browserURLChange != "undefined")
                     players.push(tmp[i]);
             }
@@ -193,36 +182,42 @@ BrowserHistory = (function() {
         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;
-	}
+    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) : '';
+        // 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;
+        // 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 };
+        return {
+            'baseUrl': baseUrl,
+            'newUrl': newUrl,
+            'flexAppUrl': flexAppUrl,
+            'title': null
+        };
     }
 
     /* Add a history entry to the browser.
@@ -230,6 +225,7 @@ BrowserHistory = (function() {
      *   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
@@ -257,7 +253,7 @@ BrowserHistory = (function() {
             //ADR
             if (backStack.length == 0 && initialState.flexAppUrl == flexAppUrl) {
                 initialState = createState(baseUrl, newUrl, flexAppUrl);
-            } else if(backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {
+            } else if (backStack.length > 0 && backStack[backStack.length - 1].flexAppUrl == flexAppUrl) {
                 backStack[backStack.length - 1] = createState(baseUrl, newUrl, flexAppUrl);
             }
 
@@ -265,8 +261,8 @@ BrowserHistory = (function() {
                 // 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>';
+                    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("&");
@@ -302,9 +298,11 @@ BrowserHistory = (function() {
     function handleBackButton() {
         //The "current" page is always at the top of the history stack.
         var current = backStack.pop();
-        if (!current) { return; }
+        if (!current) {
+            return;
+        }
         var last = backStack[backStack.length - 1];
-        if (!last && backStack.length == 0){
+        if (!last && backStack.length == 0) {
             last = initialState;
         }
         forwardStack.push(current);
@@ -314,7 +312,9 @@ BrowserHistory = (function() {
         //summary: private method. Do not call this directly.
 
         var last = forwardStack.pop();
-        if (!last) { return; }
+        if (!last) {
+            return;
+        }
         backStack.push(last);
     }
 
@@ -324,6 +324,7 @@ BrowserHistory = (function() {
     }
 
     /* Called periodically to poll to see if we need to detect navigation that has occurred */
+
     function checkForUrlChange() {
 
         if (browser.ie) {
@@ -338,12 +339,12 @@ BrowserHistory = (function() {
                     currentHref = document.location.href;
                     document.location.reload();
                 } else {
-					if (getHash() != getIframeHash()) {
-						// this.iframe.src = this.blankURL + hash;
-						var sourceToSet = historyFrameSourcePrefix + getHash();
-						getHistoryFrame().src = sourceToSet;
+                    if (getHash() != getIframeHash()) {
+                        // this.iframe.src = this.blankURL + hash;
+                        var sourceToSet = historyFrameSourcePrefix + getHash();
+                        getHistoryFrame().src = sourceToSet;
                         currentHref = document.location.href;
-					}
+                    }
                 }
             }
         }
@@ -353,13 +354,12 @@ BrowserHistory = (function() {
             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 (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;
+                    currentHistoryLength = history.length;
                     flexAppUrl = historyHash[currentHistoryLength];
                 }
 
@@ -380,8 +380,8 @@ BrowserHistory = (function() {
                 var bsl = backStack.length;
 
                 var urlActions = {
-                    back: false, 
-                    forward: false, 
+                    back: false,
+                    forward: false,
                     set: false
                 }
 
@@ -392,11 +392,11 @@ BrowserHistory = (function() {
                     // 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()) {
+                    if (forwardStack[forwardStack.length - 1].flexAppUrl == getHash()) {
                         urlActions.forward = true;
                         handleForwardButton();
                     }
@@ -409,10 +409,10 @@ BrowserHistory = (function() {
                         handleBackButton();
                     }
                 }
-                
+
                 if (!urlActions.back && !urlActions.forward) {
                     var foundInStacks = {
-                        back: -1, 
+                        back: -1,
                         forward: -1
                     }
 
@@ -447,12 +447,11 @@ BrowserHistory = (function() {
         }
     }
 
-    var _initialize = function () {
-        
+    var _initialize = function() {
+
         browserHasHashChange = ("onhashchange" in document.body);
-        
-        if (browser.ie)
-        {
+
+        if (browser.ie) {
             var scripts = document.getElementsByTagName('script');
             for (var i = 0, s; s = scripts[i]; i++) {
                 if (s.src.indexOf("history.js") > -1) {
@@ -465,19 +464,18 @@ BrowserHistory = (function() {
             var iframe = document.createElement("iframe");
             iframe.id = 'ie_historyFrame';
             iframe.name = 'ie_historyFrame';
-            iframe.src = 'javascript:false;'; 
+            iframe.src = 'javascript:false;';
 
             try {
                 document.body.appendChild(iframe);
-            } catch(e) {
+            } catch (e) {
                 setTimeout(function() {
                     document.body.appendChild(iframe);
                 }, 0);
             }
         }
 
-        if (browser.safari && !browserHasHashChange)
-        {
+        if (browser.safari && !browserHasHashChange) {
             var rememberDiv = document.createElement("div");
             rememberDiv.id = 'safari_rememberDiv';
             document.body.appendChild(rememberDiv);
@@ -501,58 +499,60 @@ BrowserHistory = (function() {
             reloader_content.style.left = reloader_content.style.top = '-9999px';
             iframe = reloader_content.getElementsByTagName('iframe')[0];
 
-            if (document.getElementById("safari_remember_field").value != "" ) {
+            if (document.getElementById("safari_remember_field").value != "") {
                 historyHash = document.getElementById("safari_remember_field").value.split(",");
             }
         }
 
-        if (browserHasHashChange)        
+        if (browserHasHashChange)
             document.body.onhashchange = hashChangeHandler;
     }
 
     return {
-        historyHash: historyHash, 
-        backStack: function() { return backStack; }, 
-        forwardStack: function() { return forwardStack }, 
-        getPlayer: getPlayer, 
+        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) { }
+            } 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) {
+                        var tmp = window.location.href.toString();
+                        title = tmp.substring((tmp.lastIndexOf("/") + 1), tmp.lastIndexOf("#"));
+                    } catch (e) {
                         title = "";
                     }
                 }
             }
             document.title = title;
-        }, 
-        setDefaultURL: function(def)
-        {
+        },
+        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)
-            {
+            if (browser.ie) {
                 window['_ie_firstload'] = true;
                 var sourceToSet = historyFrameSourcePrefix + def;
                 var func = function() {
@@ -562,13 +562,14 @@ BrowserHistory = (function() {
                 }
                 try {
                     func();
-                } catch(e) {
-                    window.setTimeout(function() { func(); }, 0);
+                } catch (e) {
+                    window.setTimeout(function() {
+                        func();
+                    }, 0);
                 }
             }
 
-            if (browser.safari)
-            {
+            if (browser.safari) {
                 currentHistoryLength = history.length;
                 if (historyHash.length == 0) {
                     historyHash[currentHistoryLength] = def;
@@ -579,20 +580,18 @@ BrowserHistory = (function() {
                 }
                 setInterval(checkForUrlChange, 50);
             }
-            
-            
-            if (browser.firefox || browser.opera)
-            {
+
+
+            if (browser.firefox || browser.opera) {
                 var reg = new RegExp("#" + def + "$");
-                if (window.location.toString().match(reg)) {
-                } else {
-                    var newloc ="#" + 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.
@@ -601,39 +600,39 @@ BrowserHistory = (function() {
             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;
-           }
-        }, 
+            //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) { }
+                    } catch (e) {}
                 }
             } else {
                 try {
                     getPlayer(objectId).browserURLChange(flexAppUrl);
-                } catch(e) { }
+                } catch (e) {}
             }
 
             currentObjectId = null;
@@ -653,44 +652,52 @@ BrowserHistory = (function() {
 
 // Automated unit testing and other diagnostics
 
-function setURL(url)
-{
+function setURL(url) {
     document.location.href = url;
 }
 
-function backButton()
-{
+function backButton() {
     history.back();
 }
 
-function forwardButton()
-{
+function forwardButton() {
     history.forward();
 }
 
-function goForwardOrBackInHistory(step)
-{
+function goForwardOrBackInHistory(step) {
     history.go(step);
 }
 
 //BrowserHistoryUtils.addEvent(window, "load", function() { BrowserHistory.initialize(); });
 (function(i) {
-    var u =navigator.userAgent;var e=/*@cc_on!@*/false; 
+    var 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();} );
+    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();
+});
\ No newline at end of file