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 2012/09/05 11:49:44 UTC

svn commit: r1381115 - in /incubator/openmeetings/trunk/singlewebapp: ./ src/META-INF/ src/org/openmeetings/web/app/ src/org/openmeetings/web/components/ src/org/openmeetings/web/pages/

Author: solomax
Date: Wed Sep  5 09:49:43 2012
New Revision: 1381115

URL: http://svn.apache.org/viewvc?rev=1381115&view=rev
Log:
Additional components are refactored to work in single page interface

Added:
    incubator/openmeetings/trunk/singlewebapp/backup_22_07_2012_22_38_12.zip   (with props)
    incubator/openmeetings/trunk/singlewebapp/backup_26_07_2012_13_59_48.zip   (with props)
    incubator/openmeetings/trunk/singlewebapp/backup_31_07_2012_13_33_23.zip   (with props)
    incubator/openmeetings/trunk/singlewebapp/rtl.patch
    incubator/openmeetings/trunk/singlewebapp/rtl_timur_1.9.1.diff
    incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/HeaderPanel.html
    incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/HeaderPanel.java
    incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/MenuPanel.html
    incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/MenuPanel.java
Modified:
    incubator/openmeetings/trunk/singlewebapp/src/META-INF/mysql_persistence.xml
    incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/app/Application.java
    incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/BasePage.html
    incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/BasePage.java
    incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/MainPage.html
    incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/MainPage.java

Added: incubator/openmeetings/trunk/singlewebapp/backup_22_07_2012_22_38_12.zip
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/backup_22_07_2012_22_38_12.zip?rev=1381115&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/openmeetings/trunk/singlewebapp/backup_22_07_2012_22_38_12.zip
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/openmeetings/trunk/singlewebapp/backup_26_07_2012_13_59_48.zip
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/backup_26_07_2012_13_59_48.zip?rev=1381115&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/openmeetings/trunk/singlewebapp/backup_26_07_2012_13_59_48.zip
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/openmeetings/trunk/singlewebapp/backup_31_07_2012_13_33_23.zip
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/backup_31_07_2012_13_33_23.zip?rev=1381115&view=auto
==============================================================================
Binary file - no diff available.

Propchange: incubator/openmeetings/trunk/singlewebapp/backup_31_07_2012_13_33_23.zip
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/openmeetings/trunk/singlewebapp/rtl.patch
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/rtl.patch?rev=1381115&view=auto
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/rtl.patch (added)
+++ incubator/openmeetings/trunk/singlewebapp/rtl.patch Wed Sep  5 09:49:43 2012
@@ -0,0 +1,549 @@
+Index: src/org/openmeetings/app/remote/LanguageService.java
+===================================================================
+--- src/org/openmeetings/app/remote/LanguageService.java	(revision 1333795)
++++ src/org/openmeetings/app/remote/LanguageService.java	(working copy)
+@@ -68,6 +68,10 @@
+ 		return fieldLanguageDaoImpl.getLanguages();
+ 	}
+ 
++	public FieldLanguage getLanguage(Long language_id) {
++		return fieldLanguageDaoImpl.getFieldLanguageById(language_id);
++	}
++	
+ 	/**
+ 	 * get all fields of a given Language_id
+ 	 * 
+Index: WebContent/src/base/auth/checkLoginData.lzx
+===================================================================
+--- WebContent/src/base/auth/checkLoginData.lzx	(revision 1333795)
++++ WebContent/src/base/auth/checkLoginData.lzx	(working copy)
+@@ -297,7 +297,7 @@
+                             	
+                             	new lz.labelerrorPopup(canvas,{error:'SIP Applet is not ready!'});
+                             	
+-                            	hib.getLanguageByIdAndMax.doCall();
++                            	hib.getLanguage.doCall();
+                                 canvas.focusOnItem = null;
+                                 parent.close();
+                             
+Index: WebContent/src/base/components/text/customEdittext.lzx
+===================================================================
+--- WebContent/src/base/components/text/customEdittext.lzx	(revision 1333795)
++++ WebContent/src/base/components/text/customEdittext.lzx	(working copy)
+@@ -21,7 +21,7 @@
+ <library>
+ 
+ <class name="customEdittext" extends="inputtext" bgcolor="0xFFFFFF" fontsize="11" height="20" >
+-	
++	<attribute name="isrtl" value="false" type="boolean"/>
+ 	<view name="v_border" height="1"       bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" width="$once{parent.width}" />
+     <view name="h_border" width="1"  y="1" bgcolor="$once{ canvas.getThemeColor('secondBorderColor') }" height="$once{parent.height -1}" />
+ 	
+@@ -37,27 +37,34 @@
+ 	<handler name="onfocus" args="f">
+     	this.preText = this.getText();
+     </handler>
+-    
++
++	<handler name="onisrtl">
++		if(this.isrtl){
++			this.setAttribute('textalign', 'right');
++		} else{
++			this.setAttribute('textalign', 'left');
++		}
++	</handler>
++	
+     <handler name="oninit">
+     	//this.field.setAttribute("bgcolor",0xFFFFFF);
+     </handler>
+     
+     <handler name="ontext" args="txt">
+     	<![CDATA[
+-            
+-    	    //
+-    	   
++	        if (txt == null || txt.length == 0) {
++	        	return;
++	        }
++			if (this.isrtl) {
++				this.setAttribute('text', canvas.rtl(txt));
++			}
++	        
+     	    if (System.capabilities.os.indexOf('Linux')==-1) { 
+                 return; 
+ 	        }
+ 	        
+ 	        //if ($debug) Debug.write("System.capabilities.os -- START ",System.capabilities.os,txt);
+ 	        
+-	        if (txt == null || txt.length == 0) {
+-	        	return;
+-	        }
+-	        
+-	        
+ 	        //UTF8 character remappings
+             var cp1252 = new Object();
+             cp1252[0x20ac]=0x80;
+Index: WebContent/src/base/components/text/customInputtext.lzx
+===================================================================
+--- WebContent/src/base/components/text/customInputtext.lzx	(revision 1333795)
++++ WebContent/src/base/components/text/customInputtext.lzx	(working copy)
+@@ -21,29 +21,36 @@
+ <library>
+ 
+ <class name="customInputtext" extends="inputtext">
+-	  
+-	 <handler name="onfocus">
+-	 
+-	 	if ($debug) Debug.write("customInputtext onFocus : ", canvas.isrtl);
+-	 		
+-	 
+-		 if(canvas.isrtl == 'true'){
+-	 		if ($debug) Debug.write("customInputtext onFocus : RTL is set");
+-	 		this.setAttribute('textalign', 'right');
+-        }
+-        else{
+-        	if ($debug) Debug.write("customInputtext onFocus : RTL is NOT set");
+-      		this.setAttribute('textalign', 'left');
+-        
+-        }
+-	 </handler>	  
+-	  
+-	 <handler name="ontext" args="txt">
+-        <![CDATA[
+-            
+-            //
+-           
+-            if (System.capabilities.os.indexOf('Linux')==-1) { 
++	<attribute name="isrtl" value="false" type="boolean"/>
++	<handler name="oninit">
++		if (this.isrtl) {
++			this.setAttribute('textalign', 'right');
++		} else {
++			this.setAttribute('textalign', 'left');
++		}
++	</handler>
++	
++	<handler name="onisrtl">
++		if (this.isrtl) {
++			this.setAttribute('textalign', 'right');
++		} else {
++			this.setAttribute('textalign', 'left');
++		}
++	</handler>
++		  
++	<handler name="ontext" args="txt">
++		<![CDATA[
++			//if ($debug) Debug.write("ontext", txt);
++			
++			if (txt == null || txt.length == 0) {
++				return;
++			}
++			
++			if (this.isrtl) {
++				this.setAttribute('text', canvas.rtl(txt));
++			}
++			
++			if (System.capabilities.os.indexOf('Linux') == -1) {
+                 return; 
+             }
+             
+Index: WebContent/src/base/components/text/library.lzx
+===================================================================
+--- WebContent/src/base/components/text/library.lzx	(revision 1333795)
++++ WebContent/src/base/components/text/library.lzx	(working copy)
+@@ -26,5 +26,6 @@
+     <include href="customEdittext.lzx" />
+     <include href="customscrollEdittext.lzx" />
+     <include href="customInputtext.lzx" />
++    <include href="rtl.lzx" />
+ 
+ </library>
+Index: WebContent/src/base/hibernate/hibRtmpConnection.lzx
+===================================================================
+--- WebContent/src/base/hibernate/hibRtmpConnection.lzx	(revision 1333795)
++++ WebContent/src/base/hibernate/hibRtmpConnection.lzx	(working copy)
+@@ -259,6 +259,7 @@
+ 	            userlang = canvas.language_id;
+ 	        } else if (userlang == -1) {
+ 	            var lang_id = canvas.default_lang_id;
++	            var rtl = canvas.isrtl;
+ 	            
+ 	            var browserLang = flash.external.ExternalInterface.call("function(){return window.navigator.systemLanguage || window.navigator.userLanguage || window.navigator.language;}");
+ 	            if (browserLang == null) {
+@@ -291,11 +292,15 @@
+ 	                    i = (fullMatch != -1) ? fullMatch : partMatch;
+ 	                    xpath = "languagesSet:/item[" + i + "]/language_id/text()";
+ 	                    lang_id = languagesSet.getPointer().xpathQuery(xpath);
++	                    xpath = "boolean(languagesSet:/item[" + i + "]/rtl/text())";
++	                    rtl = languagesSet.getPointer().xpathQuery(xpath);
++	                    if($debug) Debug.write("RTL: ", rtl);
+ 	                }
+ 	            }
+ 	            
+ 	            if (canvas.language_id == 0) {
+ 	                userlang = lang_id;
++	                canvas.isrtl = rtl;
+ 	            } else {
+ 	                userlang = canvas.language_id;
+ 	            }
+@@ -519,7 +524,18 @@
+         </handler>   
+     </netRemoteCallHib>
+         
+-    <netRemoteCallHib name="getLanguageByIdAndMax" funcname="languageservice.getLanguageByIdAndMax" >
++	<netRemoteCallHib name="getLanguage" funcname="languageservice.getLanguage" >
++		<netparam><method name="getValue">return parent.parent.userlang;</method></netparam>
++		<handler name="ondata" args="value">
++		<![CDATA[
++			if($debug) Debug.write("hibRtmpConnection/getLanguage: ", value);
++			canvas.setAttribute('isrtl', value.rtl);
++			parent.getLanguageByIdAndMax.doCall();
++		]]>
++		</handler>
++	</netRemoteCallHib>
++	
++	<netRemoteCallHib name="getLanguageByIdAndMax" funcname="languageservice.getLanguageByIdAndMax" >
+         <attribute name="start" value="0" type="number" />
+         <attribute name="step" value="100" type="number" /> 
+         <attribute name="max" value="1300" type="number" />    
+@@ -791,7 +807,7 @@
+                                 
+                             }
+                         } else {
+-                            hib.getLanguageByIdAndMax.doCall();
++                            hib.getLanguage.doCall();
+                             canvas.focusOnItem = null;
+                         }
+                     } else {
+Index: WebContent/src/modules/chat/overAllChatTabBottom.lzx
+===================================================================
+--- WebContent/src/modules/chat/overAllChatTabBottom.lzx	(revision 1333795)
++++ WebContent/src/modules/chat/overAllChatTabBottom.lzx	(working copy)
+@@ -34,10 +34,10 @@
+             return this._ctext.getText();
+         </method>
+         <method name="setText" args="txt">
+-            this._ctext.setAttribute('text',txt);
++            this._ctext.setAttribute('text', txt);
+         </method>
+         <customInputtext name="_ctext" width="${ parent.width-81 }" height="$once{ parent.height-2 }"
+-            x="1" y="1" bgcolor="white" >
++            x="1" y="1" bgcolor="white" isrtl="${parent.parent._inverseWording.getValue()}" >
+             <handler name="onkeyup" args="key">
+                 <![CDATA[
+                 // 13 is return
+@@ -59,7 +59,6 @@
+                 parent.objMessage[2] = 'newtextmessage';
+                 parent.objMessage[3] = hib.userobject.login;
+                 var message = this.parent.getText();
+-                if (parent.parent._inverseWording.getValue()) message = canvas.reverseWordingsBySplit(message)
+                 parent.objMessage[4] = message;
+                 parent.objMessage[5] = canvas.currentusercolor;
+                 parent.objMessage[6] = canvas.publicSID;
+Index: WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx
+===================================================================
+--- WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx	(revision 1333795)
++++ WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx	(working copy)
+@@ -32,12 +32,9 @@
+ 				this._ctext.setAttribute('text',txt);
+ 			</method>
+ 			<customInputtext name="_ctext" width="${ parent.width-2 }" height="$once{ parent.height-2 }"
+-				x="1" y="1" bgcolor="white" >
++				x="1" y="1" bgcolor="white" isrtl="${parent.parent._inverseWording.getValue()}" >
+ 				<handler name="onkeyup" args="key">
+ 	                <![CDATA[
+-	                var reverse = canvas.reverseAll(parent.getText());
+-	                
+-	                // parent.setText(reverse);
+ 	                // 13 is return
+ 	                if ((key==27) || (key==13)) {
+ 	                	this.parent._button.onclick.sendEvent();
+Index: WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx
+===================================================================
+--- WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx	(revision 1333795)
++++ WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx	(working copy)
+@@ -54,12 +54,9 @@
+ 	        //Debug.write("downloadurl "+downloadurl);
+ 	        this._userpic.setAttribute('src',downloadurl);	
+ 	        
+-	        if(canvas.isrtl == 'true'){
++	        if(canvas.isrtl){
+ 	         	if($debug) Debug.write("chatTabItemEmoticons RTL is set");
+ 	       
+-	        	this.header_user.setAttribute('textalign', 'right');
+-	        	this.header_time.setAttribute('align', 'left');
+-	        	this.header_time.setAttribute('x', '40');
+ 	        	this.multi.setAttribute('textalign', 'right');
+ 	        	this.multi.setAttribute('align', 'right');
+ 	        }
+@@ -90,7 +87,7 @@
+         </handler>
+ 	</image>
+ 	
+-	<text text="$once{ parent.username }" x="40" resize="false" fontsize="11" multiline="true"
++	<text text="$once{ canvas.isrtl ? canvas.reverseWordingsBySplit(parent.username) : parent.username }" x="40" resize="false" fontsize="11" multiline="true"
+ 		  width="140" height="$once{ parent.height }"
+ 		  name="header_user">
+ 	</text>
+Index: WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx
+===================================================================
+--- WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx	(revision 1333795)
++++ WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx	(working copy)
+@@ -70,6 +70,7 @@
+   	
+   	<!-- "plain", "bold" , "italic" or "bolditalic". -->
+   	<attribute name="currentlayerstyle" value="plain" type="string" setter="this.setNewLayerStyle(currentlayerstyle)" />
++  	<attribute name="isrtl" value="$once{canvas.isrtl}" type="boolean"/>
+     
+     <method name="setNewLayerLetter" args="cl">
+         this.currentlayerletter=cl;
+@@ -132,22 +133,22 @@
+ 		]]>
+ 	</method>
+   	
+-		<method name="drawTextField" args="textforfield,width,height,x,y" >
++		<method name="drawTextField" args="textforfield,width,height,x,y,isrtl" >
+ 
+ 			//Debug.write("drawTextField: ",textforfield,width,x,y);
+ 			var tempO = this.newTextField(this, 'letter' + this.getCounter(),
+ 					textforfield, width, height, x, y, this.currentlayersize,
+-					this.currentlayerletter, this.currentlayerstyle);
++					this.currentlayerletter, this.currentlayerstyle,isrtl);
+ 			this.layers.push(tempO);
+ 			this.drawTextFieldregister(textforfield, width, x, y,
+ 					this.currentlayersize, this.currentlayerletter,
+ 					this.currentlayerstyle, tempO.height, this
+-							.getSWFDocumentStatus(), this.getZIndex());
++							.getSWFDocumentStatus(), this.getZIndex(), isrtl);
+ 		</method>
+ 	
+ 	<!-- editModus -->
+-	<method name="setTextFieldByName" args="txtName,textforfield,width,x,y,height" >
+-		if ($debug) Debug.write("drawTextFieldByName ",txtName,textforfield,width,x,y);
++	<method name="setTextFieldByName" args="txtName,textforfield,width,x,y,height,isrtl" >
++		if ($debug) Debug.write("drawTextFieldByName ",txtName,textforfield,width,x,y,isrtl);
+ 		//this.checkForChanges(txtName,textforfield,width,x,y,height);
+ 		this.edittextLetterObject.setAttribute('text',textforfield);
+ 		this.edittextLetterObject.setTextEncoded(textforfield);
+@@ -157,6 +158,7 @@
+ 		this.edittextLetterObject.setAttribute('fontsize',this.currentlayersize);
+ 		this.edittextLetterObject.setAttribute('fgcolor',this.currentlayerletter);
+ 		this.edittextLetterObject.setAttribute('fontstyle',this.currentlayerstyle);
++		this.edittextLetterObject.setAttribute('textalign', isrtl ? 'right' : 'left');
+ 		this.updateObjectBounds();
+ 		this.updateByEditLetterObject();
+ 		//this.setModus('hand');
+@@ -234,7 +236,8 @@
+ 			    this.baseactionobjectList[eg][1] = this.edittextLetterObject.text;
+ 			    this.baseactionobjectList[eg][2] = this.edittextLetterObject.fgcolor;
+ 			    this.baseactionobjectList[eg][3] = this.edittextLetterObject.fontsize;
+-			    this.baseactionobjectList[eg][4] = this.edittextLetterObject.fontstyle;			
++			    this.baseactionobjectList[eg][4] = this.edittextLetterObject.fontstyle;
++			    this.baseactionobjectList[eg][5] = this.edittextLetterObject.isrtl;
+ 				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] = this.edittextLetterObject.x
+ 				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] = this.edittextLetterObject.y;
+ 				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3] = this.edittextLetterObject.width;
+@@ -259,6 +262,7 @@
+ 		editObj.setAttribute('fontsize',actionObject[3]);
+ 		editObj.setAttribute('fgcolor',actionObject[2]);
+ 		editObj.setAttribute('fontstyle',actionObject[4]);
++		editObj.setAttribute('isrtl',actionObject[5]);
+ 	</method>
+ 	
+ 	<method name="checkForChanges" args="txtName,textforfield,width,x,y,height">
+@@ -274,12 +278,13 @@
+ 		this.newTextField(obj,actionObject[actionObject.length-1],actionObject[1],
+ 		              actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+ 		              actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+-		              actionObject[3],actionObject[2],actionObject[4]);
++		              actionObject[3],actionObject[2],actionObject[4], actionObject[5]);
+ 		              
+ 		this.doSWFDocumentStatus(this.currentlayer,actionObject[actionObject.length-7]);
+ 	</method>
+ 	
+-		<method name="newTextField" args="obj,naming,textforfield,width,height,x,y,fontsize,fgcolor,fontstyle">
++		<method name="newTextField" args="obj,naming,textforfield,width,height,x,y,fontsize,fgcolor,fontstyle,isrtl">
++			if ($debug) Debug.write(obj,naming,textforfield,width,height,x,y,fontsize,fgcolor,fontstyle,isrtl);
+ 			this.currentlayer = new lz.whiteBoardTextField(obj, {
+ 						name : naming,
+ 						x : x,
+@@ -290,28 +295,30 @@
+ 						text : textforfield,
+ 						fontsize : fontsize,
+ 						fgcolor : fgcolor,
+-						fontstyle : fontstyle
++						fontstyle : fontstyle,
++						textalign: isrtl ? 'right' : 'left'
+ 					});
+ 			this.currentlayer.setTextEncoded(textforfield);
+ 			//Add Layer to global Layer  	
+ 			return this.currentlayer;
+ 		</method>
+ 	
+-	<method name="drawTextFieldregister" args="textforfield,width,x,y,fontsize,fgcolor,fontstyle,height,swfObj,zIndex">
++	<method name="drawTextFieldregister" args="textforfield,width,x,y,fontsize,fgcolor,fontstyle,height,swfObj,zIndex,isrtl">
+ 		var actionObject = new Array();
+ 	    actionObject[0] = "letter";
+ 	    actionObject[1] = textforfield;
+ 	    actionObject[2] = fgcolor;
+ 	    actionObject[3] = fontsize;
+ 	    actionObject[4] = fontstyle;
+-	    actionObject[5] = zIndex;//-8
+-	    actionObject[6] = swfObj;//-7
+-		actionObject[7] = this.counter;//-6
+-	    actionObject[8] = x;//-5
+-	    actionObject[9] = y;//-4
+-	    actionObject[10] = width;//-3
+-	    actionObject[11] = height;//-2
+-	    actionObject[12] = this.currentlayer.name;//-1	    	    
++	    actionObject[5] = isrtl;
++	    actionObject[6] = zIndex;//-8
++	    actionObject[7] = swfObj;//-7
++		actionObject[8] = this.counter;//-6
++	    actionObject[9] = x;//-5
++	    actionObject[10] = y;//-4
++	    actionObject[11] = width;//-3
++	    actionObject[12] = height;//-2
++	    actionObject[13] = this.currentlayer.name;//-1	    	    
+ 	    this.baseactionobjectList.push(actionObject);	
+ 	    this.checkStepLayers();
+ 	    this.onsharedMessage('draw',actionObject);	
+Index: WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx
+===================================================================
+--- WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx	(revision 1333795)
++++ WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx	(working copy)
+@@ -97,7 +97,7 @@
+ 			
+         	this.refObj.drawTextField(this._textview._textview.getURLEncodedText(),
+                     this._textview._textview.width,
+-                    this._textview._textview.height,x,y);
++                    this._textview._textview.height,x,y, this._inverseWording.getValue());
+                     
+         } else if (this._textview._textview.getURLEncodedText().length!=0 && this.inittext.length!=0){
+             
+@@ -116,7 +116,7 @@
+         	this.refObj.setTextFieldByName(this.initTextName,
+                 this._textview._textview.getURLEncodedText(),
+                 this._textview._textview.width,
+-                x,y,this._textview._textview.height);
++                x,y,this._textview._textview.height, this._inverseWording.getValue());
+                 
+         } else {
+ 			if ($debug) Debug.write("text smaller then 0",this._textview._textview.getURLEncodedText());
+@@ -137,12 +137,14 @@
+ 		//startAdjustHight is set to true later, cause otherwise update 
+ 		//Events would set the height to 
+ 		//text field default height
++		if ($debug) Debug.write("oninit this.refObj.isrtl ",this.refObj.isrtl);
+ 		this.refObj.letterObjectClose(this);
+         var t = new lz.styleableInput(this._textview,{
+ 	                name:'_textview',text:this.inittext,
+ 	                fontstyle:this.refObj.currentlayerstyle,
+ 	                fontsize:this.refObj.currentlayersize,
+-	                fgcolor:this.refObj.currentlayerletter
++	                fgcolor:this.refObj.currentlayerletter,
++	                isrtl:this.refObj.isrtl
+                 });
+         //if ( this.inittext.length==0 ) this.setAttribute('height',40);
+ 		if ( this.inittext.length!=0 ) {
+@@ -165,12 +167,14 @@
+         //if ($debug) Debug.write("callNew height-4 ",this.getHeight());
+         
+ 		this._textview._textview.destroy();
++		if ($debug) Debug.write("callNew this.refObj.isrtl ",this.refObj.isrtl);
+ 		var t = new lz.styleableInput(this._textview,{
+ 			        setFocusOnInit:false,
+                     name:'_textview',text:txxt,
+                     fontstyle:this.refObj.currentlayerstyle,
+                     fontsize:this.refObj.currentlayersize,
+-                    fgcolor:this.refObj.currentlayerletter
++                    fgcolor:this.refObj.currentlayerletter,
++                    isrtl:this.refObj.isrtl
+                 });
+         this.setAttribute("height",h);
+ 	</method>
+@@ -185,6 +189,21 @@
+     
+     <view name="_textview" width="${ parent.width }" height="${ parent.height }" />
+     
++	<labelCheckbox name="_inverseWording" x="2" y="${ parent.height - this.height}" labelid="580">
++		<attribute name="doUpdate" value="false" type="boolean" />
++		<handler name="oninit">
++			this.setValue(parent.refObj.isrtl);
++			this.setAttribute('doUpdate', true);
++		</handler>
++		<handler name="onvalue" args="v">
++			if (this.doUpdate) {
++				parent.refObj.setAttribute('isrtl', this.getValue());
++				parent._textview._textview.setAttribute('isrtl', this.getValue());
++			}
++		</handler>
++		<labelTooltip labelid="581" />
++	</labelCheckbox>
++	
+     <resizestate name="rs" >
+     	<text x="2" y="2" text="${ 'w: '+parent.width+' h: '+parent.height }" bgcolor="white"/>
+     </resizestate>
+Index: WebContent/src/base/components/text/rtl.lzx
+===================================================================
+--- WebContent/src/base/components/text/rtl.lzx	(revision 0)
++++ WebContent/src/base/components/text/rtl.lzx	(working copy)
+@@ -0,0 +1,57 @@
++<?xml version="1.0" encoding="UTF-8" ?>
++<!--
++  Licensed to the Apache Software Foundation (ASF) under one
++  or more contributor license agreements.  See the NOTICE file
++  distributed with this work for additional information
++  regarding copyright ownership.  The ASF licenses this file
++  to you under the Apache License, Version 2.0 (the
++  "License"); you may not use this file except in compliance
++  with the License.  You may obtain a copy of the License at
++  
++      http://www.apache.org/licenses/LICENSE-2.0
++    	  
++  Unless required by applicable law or agreed to in writing,
++  software distributed under the License is distributed on an
++  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
++  KIND, either express or implied.  See the License for the
++  specific language governing permissions and limitations
++  under the License.
++  
++-->
++<library>
++	<method name="rtl" args="txt">
++	<![CDATA[
++		var caret_i = Selection.getCaretIndex() - 1;
++		//if ($debug) Debug.write("caret_i: ", caret_i, "txt.charAt(caret_i): ", txt.charAt(caret_i));
++		if(txt.charAt(caret_i) == ' ') {
++			if(caret_i == txt.length - 1 || caret_i < txt.length - 1 && txt.charAt(caret_i+1) == ' ') {
++				//if ($debug) Debug.write("txt.substr(0, caret_i): ", txt.substr(0, caret_i));
++				//if ($debug) Debug.write("(caret_i < txt.length-1): ", (caret_i < txt.length-1));
++				//if ($debug) Debug.write("txt.slice(caret_i + 1, txt.length): ", txt.slice(caret_i + 1, txt.length));
++				txt = txt.substr(0, caret_i) + ((caret_i < txt.length - 1) ? txt.slice(caret_i + 1, txt.length) : "");
++				//if ($debug) Debug.write("remove whitespace: ", txt);
++			}
++			var found = false;
++			for(var i = caret_i - 1; i >= 0; i--) {
++				if(txt.charAt(i) == ' ') {
++					found = true;
++					txt = txt.slice(0, i) + " " + txt.slice(i + 1, txt.length)
++					//if ($debug) Debug.write("next word: ", i, txt);
++					Selection.setSelection(i, i);
++					break;
++				} else if(txt.charAt(i) == '\n' || txt.charAt(i) == '\r') {
++					found = true;
++					txt = txt.slice(0, i + 1) + " " + txt.slice(i + 1, txt.length)
++					Selection.setSelection(i + 1, i + 1);
++					break;
++				}
++			}
++			if(!found) {
++				txt = " " + txt;
++				Selection.setSelection(0, 0);
++			}
++		}
++	    return txt;
++	]]>
++	</method>
++</library>
+\ No newline at end of file

Added: incubator/openmeetings/trunk/singlewebapp/rtl_timur_1.9.1.diff
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/rtl_timur_1.9.1.diff?rev=1381115&view=auto
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/rtl_timur_1.9.1.diff (added)
+++ incubator/openmeetings/trunk/singlewebapp/rtl_timur_1.9.1.diff Wed Sep  5 09:49:43 2012
@@ -0,0 +1,732 @@
+Index: src/app/org/openmeetings/app/remote/LanguageService.java
+===================================================================
+--- src/app/org/openmeetings/app/remote/LanguageService.java	(revision 4707)
++++ src/app/org/openmeetings/app/remote/LanguageService.java	(working copy)
+@@ -50,6 +50,10 @@
+ 		return fieldLanguageDaoImpl.getLanguages();
+ 	}
+ 
++    public FieldLanguage getLanguage(Long language_id) {
++		return fieldLanguageDaoImpl.getFieldLanguageById(language_id);
++	}
++
+ 	/**
+ 	 * get all fields of a given Language_id
+ 	 * 
+Index: WebContent/src/modules/chat/overAllChatTabBottom.lzx
+===================================================================
+--- WebContent/src/modules/chat/overAllChatTabBottom.lzx	(revision 4707)
++++ WebContent/src/modules/chat/overAllChatTabBottom.lzx	(working copy)
+@@ -13,7 +13,7 @@
+             this._ctext.setAttribute('text',txt);
+         </method>
+         <customInputtext name="_ctext" width="${ parent.width-2 }" height="$once{ parent.height-2 }"
+-            x="1" y="1" bgcolor="white" >
++            x="1" y="1" bgcolor="white" isrtl="${parent.parent._inverseWording.getValue()}">
+             <handler name="onkeyup" args="key">
+                 <![CDATA[
+                 // 13 is return
+@@ -62,7 +62,7 @@
+                 parent.objMessage[2] = 'newtextmessage';
+                 parent.objMessage[3] = hib.userobject.login;
+                 var message = this.parent.parent.message.getText();
+-                if (parent.parent._inverseWording.getValue()) message = canvas.reverseWordingsBySplit(message)
++                //if (parent.parent._inverseWording.getValue()) message = canvas.reverseWordingsBySplit(message)
+                 parent.objMessage[4] = message;
+                 parent.objMessage[5] = canvas.currentusercolor;
+                 parent.objMessage[6] = canvas.publicSID;
+Index: WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx
+===================================================================
+--- WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx	(revision 4707)
++++ WebContent/src/modules/conference/whiteboard/base/baseDrawWords.lzx	(working copy)
+@@ -2,7 +2,7 @@
+ <library>
+ 
+ <class name="styleableInput" extends="customInputtext" x="1" y="1" bgcolor="0xFFFFFF" multiline="true"
+-		width="${ parent.width-2 }" height="${ parent.height-2 }" >
++		width="${ parent.width-2 }" height="${ parent.height-2 }">
+ 
+ 	<attribute name="startAdjustHight" value="false" type="boolean" />
+ 	
+@@ -78,7 +78,7 @@
+ 			
+         	this.refObj.drawTextField(this._textview._textview.getURLEncodedText(),
+                     this._textview._textview.width,
+-                    this._textview._textview.height,x,y);
++                    this._textview._textview.height,x,y,this._inverseWording.getValue());
+                     
+         } else if (this._textview._textview.getURLEncodedText().length!=0 && this.inittext.length!=0){
+             
+@@ -97,7 +97,7 @@
+         	this.refObj.setTextFieldByName(this.initTextName,
+                 this._textview._textview.getURLEncodedText(),
+                 this._textview._textview.width,
+-                x,y,this._textview._textview.height);
++                x,y,this._textview._textview.height, this._inverseWording.getValue());
+                 
+         } else {
+ 			if ($debug) Debug.write("text smaller then 0",this._textview._textview.getURLEncodedText());
+@@ -119,11 +119,14 @@
+ 		//Events would set the height to 
+ 		//text field default height
+ 		this.refObj.letterObjectClose(this);
++        if ($debug) Debug.write("oninit this.refObj.isrtl ",this.refObj.isrtl);
++
+         var t = new lz.styleableInput(this._textview,{
+ 	                name:'_textview',text:this.inittext,
+ 	                fontstyle:this.refObj.currentlayerstyle,
+ 	                fontsize:this.refObj.currentlayersize,
+-	                fgcolor:this.refObj.currentlayerletter
++	                fgcolor:this.refObj.currentlayerletter,
++                    isrtl:this.refObj.isrtl
+                 });
+         //if ( this.inittext.length==0 ) this.setAttribute('height',40);
+ 		if ( this.inittext.length!=0 ) {
+@@ -146,12 +149,14 @@
+         //if ($debug) Debug.write("callNew height-4 ",this.getHeight());
+         
+ 		this._textview._textview.destroy();
++        if ($debug) Debug.write("callNew this.refObj.isrtl ",this.refObj.isrtl);
+ 		var t = new lz.styleableInput(this._textview,{
+ 			        setFocusOnInit:false,
+                     name:'_textview',text:txxt,
+                     fontstyle:this.refObj.currentlayerstyle,
+                     fontsize:this.refObj.currentlayersize,
+-                    fgcolor:this.refObj.currentlayerletter
++                    fgcolor:this.refObj.currentlayerletter,
++                    isrtl:this.refObj.isrtl
+                 });
+         this.setAttribute("height",h);
+ 	</method>
+@@ -165,6 +170,21 @@
+     </method>
+     
+     <view name="_textview" width="${ parent.width }" height="${ parent.height }" />
++
++    <labelCheckbox name="_inverseWording" x="2" y="${ parent.height - this.height}" labelid="580">
++        <attribute name="doUpdate" value="false" type="boolean" />
++        <handler name="oninit">
++            this.setValue(parent.refObj.isrtl);
++            this.setAttribute('doUpdate', true);
++        </handler>
++        <handler name="onvalue" args="v">
++            if (this.doUpdate) {
++                parent.refObj.setAttribute('isrtl', this.getValue());
++                parent._textview._textview.setAttribute('isrtl', this.getValue());
++            }
++        </handler>
++        <labelTooltip labelid="581" />
++    </labelCheckbox>
+     
+     <resizestate name="rs" >
+     	<text x="2" y="2" text="${ 'w: '+parent.width+' h: '+parent.height }" bgcolor="white"/>
+Index: WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx
+===================================================================
+--- WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx	(revision 4707)
++++ WebContent/src/modules/conference/whiteboard/base/baseDrawLetter.lzx	(working copy)
+@@ -48,6 +48,8 @@
+   	
+   	<!-- "plain", "bold" , "italic" or "bolditalic". -->
+   	<attribute name="currentlayerstyle" value="plain" type="string" setter="this.setNewLayerStyle(currentlayerstyle)" />
++
++    <attribute name="isrtl" value="$once{canvas.isrtl}" type="boolean"/>
+     
+     <method name="setNewLayerLetter" args="cl">
+         this.currentlayerletter=cl;
+@@ -110,22 +112,22 @@
+ 		]]>
+ 	</method>
+   	
+-		<method name="drawTextField" args="textforfield,width,height,x,y" >
++		<method name="drawTextField" args="textforfield,width,height,x,y,isrtl" >
+ 
+ 			//Debug.write("drawTextField: ",textforfield,width,x,y);
+ 			var tempO = this.newTextField(this, 'letter' + this.getCounter(),
+ 					textforfield, width, height, x, y, this.currentlayersize,
+-					this.currentlayerletter, this.currentlayerstyle);
++					this.currentlayerletter, this.currentlayerstyle,isrtl);
+ 			this.layers.push(tempO);
+ 			this.drawTextFieldregister(textforfield, width, x, y,
+ 					this.currentlayersize, this.currentlayerletter,
+ 					this.currentlayerstyle, tempO.height, this
+-							.getSWFDocumentStatus(), this.getZIndex());
++							.getSWFDocumentStatus(), this.getZIndex(), isrtl);
+ 		</method>
+ 	
+ 	<!-- editModus -->
+-	<method name="setTextFieldByName" args="txtName,textforfield,width,x,y,height" >
+-		if ($debug) Debug.write("drawTextFieldByName ",txtName,textforfield,width,x,y);
++	<method name="setTextFieldByName" args="txtName,textforfield,width,x,y,height,isrtl" >
++		if ($debug) Debug.write("drawTextFieldByName ",txtName,textforfield,width,x,y,isrtl);
+ 		//this.checkForChanges(txtName,textforfield,width,x,y,height);
+ 		this.edittextLetterObject.setAttribute('text',textforfield);
+ 		this.edittextLetterObject.setTextEncoded(textforfield);
+@@ -135,6 +137,7 @@
+ 		this.edittextLetterObject.setAttribute('fontsize',this.currentlayersize);
+ 		this.edittextLetterObject.setAttribute('fgcolor',this.currentlayerletter);
+ 		this.edittextLetterObject.setAttribute('fontstyle',this.currentlayerstyle);
++        this.edittextLetterObject.setAttribute('textalign', isrtl ? 'right' : 'left');
+ 		this.updateObjectBounds();
+ 		this.updateByEditLetterObject();
+ 		//this.setModus('hand');
+@@ -212,7 +215,8 @@
+ 			    this.baseactionobjectList[eg][1] = this.edittextLetterObject.text;
+ 			    this.baseactionobjectList[eg][2] = this.edittextLetterObject.fgcolor;
+ 			    this.baseactionobjectList[eg][3] = this.edittextLetterObject.fontsize;
+-			    this.baseactionobjectList[eg][4] = this.edittextLetterObject.fontstyle;			
++			    this.baseactionobjectList[eg][4] = this.edittextLetterObject.fontstyle;
++			    this.baseactionobjectList[eg][5] = this.edittextLetterObject.isrtl;
+ 				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-5] = this.edittextLetterObject.x
+ 				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-4] = this.edittextLetterObject.y;
+ 				this.baseactionobjectList[eg][this.baseactionobjectList[eg].length-3] = this.edittextLetterObject.width;
+@@ -237,6 +241,7 @@
+ 		editObj.setAttribute('fontsize',actionObject[3]);
+ 		editObj.setAttribute('fgcolor',actionObject[2]);
+ 		editObj.setAttribute('fontstyle',actionObject[4]);
++        editObj.setAttribute('isrtl',actionObject[5]);
+ 	</method>
+ 	
+ 	<method name="checkForChanges" args="txtName,textforfield,width,x,y,height">
+@@ -252,12 +257,13 @@
+ 		this.newTextField(obj,actionObject[actionObject.length-1],actionObject[1],
+ 		              actionObject[actionObject.length-3],actionObject[actionObject.length-2],
+ 		              actionObject[actionObject.length-5],actionObject[actionObject.length-4],
+-		              actionObject[3],actionObject[2],actionObject[4]);
++		              actionObject[3],actionObject[2],actionObject[4], actionObject[5]);
+ 		              
+ 		this.doSWFDocumentStatus(this.currentlayer,actionObject[actionObject.length-7]);
+ 	</method>
+ 	
+-		<method name="newTextField" args="obj,naming,textforfield,width,height,x,y,fontsize,fgcolor,fontstyle">
++		<method name="newTextField" args="obj,naming,textforfield,width,height,x,y,fontsize,fgcolor,fontstyle,isrtl">
++            if ($debug) Debug.write(obj,naming,textforfield,width,height,x,y,fontsize,fgcolor,fontstyle,isrtl);
+ 			this.currentlayer = new lz.whiteBoardTextField(obj, {
+ 						name : naming,
+ 						x : x,
+@@ -268,29 +274,31 @@
+ 						text : textforfield,
+ 						fontsize : fontsize,
+ 						fgcolor : fgcolor,
+-						fontstyle : fontstyle
++						fontstyle : fontstyle,
++                        textalign: isrtl ? 'right' : 'left'
+ 					});
+ 			this.currentlayer.setTextEncoded(textforfield);
+ 			//Add Layer to global Layer  	
+ 			return this.currentlayer;
+ 		</method>
+ 	
+-	<method name="drawTextFieldregister" args="textforfield,width,x,y,fontsize,fgcolor,fontstyle,height,swfObj,zIndex">
++	<method name="drawTextFieldregister" args="textforfield,width,x,y,fontsize,fgcolor,fontstyle,height,swfObj,zIndex,isrtl">
+ 		var actionObject = new Array();
+ 	    actionObject[0] = "letter";
+ 	    actionObject[1] = textforfield;
+ 	    actionObject[2] = fgcolor;
+ 	    actionObject[3] = fontsize;
+ 	    actionObject[4] = fontstyle;
+-	    actionObject[5] = zIndex;//-8
+-	    actionObject[6] = swfObj;//-7
+-		actionObject[7] = this.counter;//-6
+-	    actionObject[8] = x;//-5
+-	    actionObject[9] = y;//-4
+-	    actionObject[10] = width;//-3
+-	    actionObject[11] = height;//-2
+-	    actionObject[12] = this.currentlayer.name;//-1	    	    
+-	    this.baseactionobjectList.push(actionObject);	
++        actionObject[5] = isrtl;
++	    actionObject[6] = zIndex;//-8
++	    actionObject[7] = swfObj;//-7
++		actionObject[8] = this.counter;//-6
++	    actionObject[9] = x;//-5
++	    actionObject[10] = y;//-4
++	    actionObject[11] = width;//-3
++	    actionObject[12] = height;//-2
++	    actionObject[13] = this.currentlayer.name;//-1
++	    this.baseactionobjectList.push(actionObject);
+ 	    this.checkStepLayers();
+ 	    this.onsharedMessage('draw',actionObject);	
+ 	</method>
+Index: WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx
+===================================================================
+--- WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx	(revision 4707)
++++ WebContent/src/modules/conference/tabcontent/chat/chatTabItemEmoticons.lzx	(working copy)
+@@ -35,12 +35,12 @@
+ 	        //Debug.write("downloadurl "+downloadurl);
+ 	        this._userpic.setAttribute('src',downloadurl);	
+ 	        
+-	        if(canvas.isrtl == 'true'){
++	        if(canvas.isrtl){
+ 	         	if($debug) Debug.write("chatTabItemEmoticons RTL is set");
+ 	       
+-	        	this.header_user.setAttribute('textalign', 'right');
+-	        	this.header_time.setAttribute('align', 'left');
+-	        	this.header_time.setAttribute('x', '40');
++	        	//this.header_user.setAttribute('textalign', 'right');
++	        	//this.header_time.setAttribute('align', 'left');
++	        	//this.header_time.setAttribute('x', '40');
+ 	        	this.multi.setAttribute('textalign', 'right');
+ 	        	this.multi.setAttribute('align', 'right');
+ 	        }
+@@ -63,7 +63,7 @@
+ 	</image>
+ 	
+ 	
+-	<text text="$once{ parent.username }" x="40" resize="false" fontsize="10"
++	<text text="$once{ canvas.isrtl ? canvas.reverseWordingsBySplit(parent.username) : parent.username }" x="40" resize="false" fontsize="10"
+ 		  width="$once{ parent.width - 40 }" bgcolor="$once{ parent.usercolor }"
+ 		  name="header_user" />
+ 		  
+@@ -149,7 +149,7 @@
+ 	<!-- space between each line of text -->
+ 	<attribute name="leading" value="5" type="number" />
+ 	
+-	<text multiline="true" x="40" y="20" width="$once{ parent.width - 40 }" fontsize="11" selectable="true" name="multi" >
++	<text multiline="true" x="40" y="20" width="$once{ parent.width - 40 }" fontsize="11" selectable="true" name="multi">
+ 		<handler name="oninit">
+ 			<![CDATA[
+ 				
+Index: WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx
+===================================================================
+--- WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx	(revision 4707)
++++ WebContent/src/modules/conference/tabcontent/chat/chatTabBottom.lzx	(working copy)
+@@ -13,15 +13,9 @@
+ 				this._ctext.setAttribute('text',txt);
+ 			</method>
+ 			<customInputtext name="_ctext" width="${ parent.width-2 }" height="$once{ parent.height-2 }"
+-				x="1" y="1" bgcolor="white" >
++				x="1" y="1" bgcolor="white" isrtl="${parent.parent._inverseWording.getValue()}">
+ 				<handler name="onkeyup" args="key">
+ 	                <![CDATA[
+-	                if ($debug) Debug.write("onkeyup");
+-	                
+-	                var reverse = canvas.reverseAll(parent.getText());
+-	                if ($debug) Debug.write("reverse : ", reverse);
+-	                
+-	               // parent.setText(reverse);
+ 	                // 13 is return
+ 	                if ((key==27) || (key==13)) {
+ 	                	this.parent.parent._button._button.onclick.sendEvent();
+Index: WebContent/src/base/mainMethods.lzx
+===================================================================
+--- WebContent/src/base/mainMethods.lzx	(revision 4707)
++++ WebContent/src/base/mainMethods.lzx	(working copy)
+@@ -9,7 +9,7 @@
+             
+             if($debug) Debug.write("reInit");
+             
+-            if(canvas.isrtl == 'true'){
++            if(canvas.isrtl){
+                 if($debug) Debug.write("reInit : resetting key");
+             
+                 this.setAttribute('key', '');
+Index: WebContent/src/base/components/text/customEdittext.lzx
+===================================================================
+--- WebContent/src/base/components/text/customEdittext.lzx	(revision 4707)
++++ WebContent/src/base/components/text/customEdittext.lzx	(working copy)
+@@ -2,7 +2,11 @@
+ <library>
+ 
+ <class name="customEdittext" extends="inputtext" bgcolor="0xFFFFFF" fontsize="11" height="20" >
+-	
++
++    <include href="rtl.lzx" />
++    
++    <attribute name="isrtl" value="false" type="boolean"/>
++
+ 	<view name="v_border" height="1"       bgcolor="black" width="$once{parent.width}" />
+     <view name="h_border" width="1"  y="1" bgcolor="black" height="$once{parent.height -1}" />
+ 	
+@@ -18,6 +22,14 @@
+ 	<handler name="onfocus" args="f">
+     	this.preText = this.getText();
+     </handler>
++
++    <handler name="onisrtl">
++        if(this.isrtl){
++            this.setAttribute('textalign', 'right');
++        } else{
++            this.setAttribute('textalign', 'left');
++        }
++    </handler>
+     
+     <handler name="oninit">
+     	//this.field.setAttribute("bgcolor",0xFFFFFF);
+@@ -26,19 +38,23 @@
+     <handler name="ontext" args="txt">
+     	<![CDATA[
+             
+-    	    //
+-    	   
++    	    //if ($debug) Debug.write("ontext", txt);
++
++    	    if (txt == null || txt.length == 0) {
++	        	return;
++	        }
++
++            if(this.isrtl) {
++	            this.setAttribute('text', this.rtl(txt));
++	        }
++
+     	    if (System.capabilities.os.indexOf('Linux')==-1) { 
+                 return; 
+ 	        }
+ 	        
+ 	        //if ($debug) Debug.write("System.capabilities.os -- START ",System.capabilities.os,txt);
+ 	        
+-	        if (txt == null || txt.length == 0) {
+-	        	return;
+-	        }
+ 	        
+-	        
+ 	        //UTF8 character remappings
+             var cp1252 = new Object();
+             cp1252[0x20ac]=0x80;
+@@ -75,9 +91,10 @@
+                     
+             var i=Selection.getCaretIndex()-1; 
+             
+-            //if ($debug) Debug.write("i",i,Selection.getCaretIndex());
++            if ($debug) Debug.write("i",i,Selection.getCaretIndex());
+             
+             var d=i;
++
+             
+             //if ($debug) Debug.write("DO WHILE -1- ",t.charCodeAt(i),cp1252[t.charCodeAt(i)],i,0x80,0xBF);
+             
+@@ -122,7 +139,6 @@
+             }
+             
+             //if ($debug) Debug.write("-- END ",this.text);
+-            
+     	]]>
+     </handler>
+ 	
+@@ -185,7 +201,6 @@
+         </handler>
+     </browserjavascriptcallback>    	
+ 
+-    
+     <method name="setLabelId" args="_labelid" >
+         this.labelid = _labelid;
+         this.setAttribute('text',canvas.getLabelName(this.labelid));
+Index: WebContent/src/base/components/text/customInputtext.lzx
+===================================================================
+--- WebContent/src/base/components/text/customInputtext.lzx	(revision 4707)
++++ WebContent/src/base/components/text/customInputtext.lzx	(working copy)
+@@ -2,39 +2,44 @@
+ <library>
+ 
+ <class name="customInputtext" extends="inputtext">
+-	  
+-	 <handler name="onfocus">
+-	 
+-	 	if ($debug) Debug.write("customInputtext onFocus : ", canvas.isrtl);
+-	 		
+-	 
+-		 if(canvas.isrtl == 'true'){
+-	 		if ($debug) Debug.write("customInputtext onFocus : RTL is set");
+-	 		this.setAttribute('textalign', 'right');
++
++    <include href="rtl.lzx"/>
++    
++    <attribute name="isrtl" value="false" type="boolean"/>
++
++    <handler name="oninit">
++        if(this.isrtl){
++            this.setAttribute('textalign', 'right');
++        } else{
++            this.setAttribute('textalign', 'left');
+         }
+-        else{
+-        	if ($debug) Debug.write("customInputtext onFocus : RTL is NOT set");
+-      		this.setAttribute('textalign', 'left');
+-        
++    </handler>
++
++    <handler name="onisrtl">
++        if(this.isrtl){
++            this.setAttribute('textalign', 'right');
++        } else{
++            this.setAttribute('textalign', 'left');
+         }
+-	 </handler>	  
+-	  
+-	 <handler name="ontext" args="txt">
++    </handler>
++
++    <handler name="ontext" args="txt">
+         <![CDATA[
+-            
+-            //
+-           
+-            if (System.capabilities.os.indexOf('Linux')==-1) { 
+-                return; 
+-            }
+-            
+-            //if ($debug) Debug.write("System.capabilities.os -- START ",System.capabilities.os,txt);
+-            
+-            if (txt == null || txt.length == 0) {
++            //if ($debug) Debug.write("ontext", txt);
++
++    	    if (txt == null || txt.length == 0) {
++	        	return;
++	        }
++
++            if(this.isrtl) {
++	            this.setAttribute('text', this.rtl(txt));
++	        }
++
++    	    if (System.capabilities.os.indexOf('Linux')==-1) {
+                 return;
+-            }
+-            
+-            
++	        }
++
++
+             //UTF8 character remappings
+             var cp1252 = new Object();
+             cp1252[0x20ac]=0x80;
+@@ -64,35 +69,35 @@
+             cp1252[0x0153]=0x9c;
+             cp1252[0x017e]=0x9e;
+             cp1252[0x0178]=0x9f;
+-        
+-            
+-            var s=eval(Selection.getFocus()); 
++
++
++            var s=eval(Selection.getFocus());
+             var t=txt;
+-                    
+-            var i=Selection.getCaretIndex()-1; 
+-            
++
++            var i=Selection.getCaretIndex()-1;
++
+             //if ($debug) Debug.write("i",i,Selection.getCaretIndex());
+-            
++
+             var d=i;
+-            
++
+             //if ($debug) Debug.write("DO WHILE -1- ",t.charCodeAt(i),cp1252[t.charCodeAt(i)],i,0x80,0xBF);
+-            
++
+             while (((t.charCodeAt(i)>=0x80 && t.charCodeAt(i)<=0xBF) || (cp1252[t.charCodeAt(i)])) && i>0) {
+-                
++
+                 //if ($debug) Debug.write("DO WHILE -2- ",t.charCodeAt(i),cp1252[t.charCodeAt(i)],i);
+-                
++
+                 if (cp1252[t.charCodeAt(i)]) {
+                     t=t.substr(0,i)+String.fromCharCode(cp1252[t.charCodeAt(i)])+t.substr(i+1);
+                 }
+                 i--;
+             }
+-            if (i==d) { 
++            if (i==d) {
+                 //if ($debug) Debug.write("i == d NOTHING TO REPLACE!");
+-                return; 
++                return;
+             }
+-        
++
+             var u=0;
+-            
++
+             if (t.charCodeAt(i)>=0xC2 && t.charCodeAt(i)<=0xDF && d-i==1) {
+                  // two-byte sequence
+                 u= (t.charCodeAt(i+1) & 0x3F)       +
+@@ -106,23 +111,22 @@
+                   ((t.charCodeAt(i+1) & 0x3C) << 6 ) +
+                   ((t.charCodeAt(i  ) & 0x0F) << 12);
+             }
+-        
++
+             if (u!=0) {
+                 //if ($debug) Debug.write("Replace String -1- ",txt,u,"Replace With ",String.fromCharCode(u));
+-                
++
+                 this.setAttribute("text",t.slice(0,i)+String.fromCharCode(u)+t.slice(d+1));
+-                
++
+                 //if ($debug) Debug.write("Replace String -2- ",txt,u);
+-                
++
+                 this.setAttribute("text",this.text.split(String.fromCharCode(0x03)).join(''));
+             }
+-            
++
+             //if ($debug) Debug.write("-- END ",this.text);
+-            
++
+         ]]>
+     </handler>
+-  	
+-    
++
+ </class>
+ 
+ </library>
+Index: WebContent/src/base/components/text/rtl.lzx
+===================================================================
+--- WebContent/src/base/components/text/rtl.lzx	(revision 0)
++++ WebContent/src/base/components/text/rtl.lzx	(revision 0)
+@@ -0,0 +1,33 @@
++<method name="rtl" args="txt"><![CDATA[
++    var caret_i = Selection.getCaretIndex()-1;
++        //if ($debug) Debug.write("caret_i: ", caret_i, "txt.charAt(caret_i): ", txt.charAt(caret_i));
++        if(txt.charAt(caret_i) == ' ') {
++            if(caret_i == txt.length-1 || caret_i < txt.length-1 && txt.charAt(caret_i+1) == ' ') {
++                //if ($debug) Debug.write("txt.substr(0, caret_i): ", txt.substr(0, caret_i));
++                //if ($debug) Debug.write("(caret_i < txt.length-1): ", (caret_i < txt.length-1));
++                //if ($debug) Debug.write("txt.slice(caret_i + 1, txt.length): ", txt.slice(caret_i + 1, txt.length));
++                txt = txt.substr(0, caret_i) + ((caret_i < txt.length-1) ? txt.slice(caret_i + 1, txt.length) : "");
++                //if ($debug) Debug.write("remove whitespace: ", txt);
++            }
++            var found = false;
++            for(var i = caret_i-1; i>=0; i--) {
++                if(txt.charAt(i) == ' ') {
++                    found = true;
++                    txt = txt.slice(0, i) + " " + txt.slice(i + 1, txt.length)
++                    //if ($debug) Debug.write("next word: ", i, txt);
++                    Selection.setSelection(i,i);
++                    break;
++                } else if(txt.charAt(i) == '\n' || txt.charAt(i) == '\r') {
++                    found = true;
++                    txt = txt.slice(0, i+1) + " " + txt.slice(i + 1, txt.length)
++                    Selection.setSelection(i+1,i+1);
++                    break;
++                }
++            }
++            if(!found) {
++                txt = " " + txt;
++                Selection.setSelection(0,0);
++            }
++        }
++        return txt;
++]]></method>
+Index: WebContent/src/base/hibernate/hibRtmpConnection.lzx
+===================================================================
+--- WebContent/src/base/hibernate/hibRtmpConnection.lzx	(revision 4707)
++++ WebContent/src/base/hibernate/hibRtmpConnection.lzx	(working copy)
+@@ -234,6 +234,7 @@
+ 			userlang = canvas.language_id;
+ 		} else if (userlang == -1) {
+ 			var lang_id = canvas.default_lang_id;
++			var rtl = canvas.isrtl;
+ 			
+ 			var browserLang = flash.external.ExternalInterface.call("function(){return window.navigator.systemLanguage || window.navigator.userLanguage || window.navigator.language;}");
+ 			if (browserLang == null) {
+@@ -266,11 +267,15 @@
+ 					i = (fullMatch != -1) ? fullMatch : partMatch;
+ 					xpath = "languagesSet:/item[" + i + "]/language_id/text()";
+ 					lang_id = languagesSet.getPointer().xpathQuery(xpath);
++					xpath = "boolean(languagesSet:/item[" + i + "]/rtl/text())";
++					rtl = languagesSet.getPointer().xpathQuery(xpath);
++					if($debug) Debug.write("RTL: ", rtl);
+ 				}
+ 			}
+-			
+             if (canvas.language_id == 0) {
++
+             	userlang = lang_id;
++            	canvas.isrtl = rtl;
+             } else {
+             	userlang = canvas.language_id;
+             }
+@@ -488,6 +493,17 @@
+             ]]>
+         </handler>   
+     </netRemoteCallHib>
++
++    <netRemoteCallHib name="getLanguage" funcname="languageservice.getLanguage" >
++        <netparam><method name="getValue">return parent.parent.userlang;</method></netparam>
++        <handler name="ondata" args="value">
++        <![CDATA[
++            if($debug) Debug.write("hibRtmpConnection/getLanguage: ", value);
++            canvas.setAttribute('isrtl', value.rtl);
++            parent.getLanguageByIdAndMax.doCall();
++        ]]>
++        </handler>
++    </netRemoteCallHib>
+         
+     <netRemoteCallHib name="getLanguageByIdAndMax" funcname="languageservice.getLanguageByIdAndMax" >
+     	<attribute name="start" value="0" type="number" />
+@@ -499,7 +515,7 @@
+         <handler name="ondata" args="value">
+         	<![CDATA[
+ 			if($debug) Debug.write("hibRtmpConnection/userlang:[",parent.userlang,"]");
+-        		//if($debug) Debug.write("hibRtmpConnection/getLanguageByIdAndMax:[",value,"]");
++        		if($debug) Debug.write("hibRtmpConnection/getLanguageByIdAndMax:[",value,"]");
+         		setLabelObjectByHundred(this.start,value);
+ 	            //The onResult-Handler will be called be the rtmpconnection
+ 	            if (this.start <= max){
+@@ -784,7 +800,7 @@
+                             	
+                             }
+                         } else {
+-                        	hib.getLanguageByIdAndMax.doCall();
++                        	hib.getLanguage.doCall();
+                         	canvas.focusOnItem = null;
+                         }
+                     } else {
+Index: WebContent/src/base/auth/checkLoginData.lzx
+===================================================================
+--- WebContent/src/base/auth/checkLoginData.lzx	(revision 4707)
++++ WebContent/src/base/auth/checkLoginData.lzx	(working copy)
+@@ -373,7 +373,7 @@
+                             }
+                         } else {
+                         	
+-                        	hib.getLanguageByIdAndMax.doCall();
++                        	hib.getLanguage.doCall();
+                         	canvas.focusOnItem = null;
+                             parent.close();
+                             
+Index: build.xml
+===================================================================
+--- build.xml	(revision 4707)
++++ build.xml	(working copy)
+@@ -157,7 +157,7 @@
+ 		<mkdir dir="${main.out.dir}" />
+ 	</target>
+ 	
+-	<condition property="db.provider" value="${db}" else="derby">
++	<condition property="db.provider" value="${db}" else="mysql">
+ 		<isset property="db" />
+ 	</condition>
+ 
+@@ -460,7 +460,7 @@
+ 		</signjar>
+ 	</target>
+ 
+-	<target name = "compile.laszlo.main" depends="compile.laszlo.main.debug">
++    <target name = "compile.laszlo.rtl">
+ 		<java classname = "org.openlaszlo.compiler.Main" fork = "true"
+ 	        newenvironment="true"
+ 	        failonerror="true"
+@@ -472,6 +472,22 @@
+ 			<jvmarg value = "-Dlzproxied=${laszlo.proxied}"/>
+ 			<jvmarg value = "-Xms1024M"/>
+ 			<jvmarg value = "-Xmx1024M"/>
++			<arg line="--runtime=swf8 --dir ${out.dir.swf} --mcache on --onerror warn rtl.lzx" />
++		</java>
++	</target>
++
++	<target name = "compile.laszlo.main">
++		<java classname = "org.openlaszlo.compiler.Main" fork = "true"
++	        newenvironment="true"
++	        failonerror="true"
++	        dir = "${laszlo.src.dir}"
++	        classpathref="laszlo.lib"
++	       >
++			<jvmarg value = "-DLPS_HOME=${laszlo.home}"/>
++			<jvmarg value = "-Dlzdebug=${laszlo.debug}"/>
++			<jvmarg value = "-Dlzproxied=${laszlo.proxied}"/>
++			<jvmarg value = "-Xms1024M"/>
++			<jvmarg value = "-Xmx1024M"/>
+ 			<arg line="--runtime=swf8 --dir ${out.dir.swf} --mcache on --onerror warn main.lzx" />
+ 		</java>
+ 	</target>

Modified: incubator/openmeetings/trunk/singlewebapp/src/META-INF/mysql_persistence.xml
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/META-INF/mysql_persistence.xml?rev=1381115&r1=1381114&r2=1381115&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/META-INF/mysql_persistence.xml (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/META-INF/mysql_persistence.xml Wed Sep  5 09:49:43 2012
@@ -77,7 +77,7 @@
             <property name="openjpa.ConnectionDriverName" value="org.apache.commons.dbcp.BasicDataSource" />
 			<property name="openjpa.ConnectionProperties"
 				value="DriverClassName=com.mysql.jdbc.Driver
-					, Url=jdbc:mysql://localhost:3306/openmeetings?autoReconnect=true&amp;useUnicode=true&amp;createDatabaseIfNotExist=true&amp;characterEncoding=utf-8&amp;connectionCollation=utf8_general_ci&amp;cachePrepStmts=true&amp;cacheCallableStatements=true&amp;cacheServerConfiguration=true&amp;useLocalSessionState=true&amp;elideSetAutoCommits=true&amp;alwaysSendSetIsolation=false&amp;enableQueryTimeouts=false&amp;prepStmtCacheSize=3000&amp;prepStmtCacheSqlLimit=1000
+					, Url=jdbc:mysql://192.168.72.105:3306/openmeetings_win?autoReconnect=true&amp;useUnicode=true&amp;createDatabaseIfNotExist=true&amp;characterEncoding=utf-8&amp;connectionCollation=utf8_general_ci&amp;cachePrepStmts=true&amp;cacheCallableStatements=true&amp;cacheServerConfiguration=true&amp;useLocalSessionState=true&amp;elideSetAutoCommits=true&amp;alwaysSendSetIsolation=false&amp;enableQueryTimeouts=false&amp;prepStmtCacheSize=3000&amp;prepStmtCacheSqlLimit=1000
 					, MaxActive=100
 					, MaxWait=10000
 					, TestOnBorrow=true

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/app/Application.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/app/Application.java?rev=1381115&r1=1381114&r2=1381115&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/app/Application.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/app/Application.java Wed Sep  5 09:49:43 2012
@@ -26,6 +26,10 @@ import org.apache.wicket.markup.MarkupPa
 import org.apache.wicket.markup.MarkupResourceStream;
 import org.apache.wicket.markup.html.WebPage;
 import org.apache.wicket.protocol.http.WebApplication;
+import org.apache.wicket.request.IRequestHandler;
+import org.apache.wicket.request.IRequestMapper;
+import org.apache.wicket.request.Request;
+import org.apache.wicket.request.Url;
 import org.apache.wicket.settings.IPageSettings;
 import org.openmeetings.web.pages.MainPage;
 import org.openmeetings.web.pages.auth.SignInPage;
@@ -48,6 +52,26 @@ public class Application extends Authent
 		});
 		super.init();
 		mountPage("signin", getSignInPageClass());
+		//TODO custom mapper to hack URL
+		/*
+		getRootRequestMapperAsCompound().add(new IRequestMapper() {
+			
+			public IRequestHandler mapRequest(Request request) {
+				// TODO Auto-generated method stub
+				return null;
+			}
+			
+			public Url mapHandler(IRequestHandler requestHandler) {
+				// TODO Auto-generated method stub
+				return null;
+			}
+			
+			public int getCompatibilityScore(Request request) {
+				// TODO Auto-generated method stub
+				return 0;
+			}
+		});
+		*/
 	}
 	
 	@Override

Added: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/HeaderPanel.html
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/HeaderPanel.html?rev=1381115&view=auto
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/HeaderPanel.html (added)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/HeaderPanel.html Wed Sep  5 09:49:43 2012
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" 
+	xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.5-strict.dtd" lang="en">
+	<wicket:panel>
+		<div id="header">
+			<span id="logo"></span><span wicket:id="appName"></span>
+		</div>
+	</wicket:panel>
+</html>
\ No newline at end of file

Added: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/HeaderPanel.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/HeaderPanel.java?rev=1381115&view=auto
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/HeaderPanel.java (added)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/HeaderPanel.java Wed Sep  5 09:49:43 2012
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.openmeetings.web.components;
+
+import org.apache.wicket.markup.html.basic.Label;
+
+public class HeaderPanel extends BasePanel {
+	private static final long serialVersionUID = 9020842845946685193L;
+
+	public HeaderPanel(String id, String appName) {
+		super(id);
+		add(new Label("appName", appName));
+	}
+}

Added: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/MenuPanel.html
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/MenuPanel.html?rev=1381115&view=auto
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/MenuPanel.html (added)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/MenuPanel.html Wed Sep  5 09:49:43 2012
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  Licensed to the Apache Software Foundation (ASF) under one
+  or more contributor license agreements.  See the NOTICE file
+  distributed with this work for additional information
+  regarding copyright ownership.  The ASF licenses this file
+  to you under the Apache License, Version 2.0 (the
+  "License"); you may not use this file except in compliance
+  with the License.  You may obtain a copy of the License at
+  
+      http://www.apache.org/licenses/LICENSE-2.0
+    	  
+  Unless required by applicable law or agreed to in writing,
+  software distributed under the License is distributed on an
+  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  KIND, either express or implied.  See the License for the
+  specific language governing permissions and limitations
+  under the License.
+  
+-->
+<html xmlns="http://www.w3.org/1999/xhtml" 
+	xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.5-strict.dtd" lang="en">
+	<wicket:head>
+		<link media="screen" type="text/css" rel="stylesheet" href="css/jMenu.jquery.css"/>
+	</wicket:head>
+	<wicket:panel>
+		<script type="text/javascript" src="js/jMenu.jquery.min.js"></script>
+		<script type="text/javascript">
+			$(function() {
+				$("#jMenu").jMenu({
+					openClick : false
+					, ulWidth : 'auto'
+					, effects : {
+						effectSpeedOpen : 300
+						, effectSpeedClose : 300
+						, effectTypeOpen : 'slide'
+						, effectTypeClose : 'slide'
+						, effectOpen : 'linear'
+						, effectClose : 'linear'
+					}
+					, TimeBeforeOpening : 100
+					, TimeBeforeClosing : 400
+					, animatedText : false
+					, paddingLeft: 1
+				});
+			});
+		</script>
+		<ul id="jMenu">
+			<li wicket:id="mainItem">
+				<a class="fNiv" href="#"><span wicket:id="label"></span></a>
+				<ul wicket:enclosure="childItem">
+					<li class="arrow" style="width: 97px; "></li>
+					<li wicket:id="childItem">
+						<a wicket:id="link" href="#">
+						<span wicket:id="name"></span><br />
+						<span wicket:id="description"></span>
+						</a>
+					</li>
+				</ul>
+			</li>
+		</ul>
+	</wicket:panel>
+</html>
\ No newline at end of file

Added: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/MenuPanel.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/MenuPanel.java?rev=1381115&view=auto
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/MenuPanel.java (added)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/components/MenuPanel.java Wed Sep  5 09:49:43 2012
@@ -0,0 +1,131 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License") +  you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.openmeetings.web.components;
+
+import org.apache.wicket.MarkupContainer;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.list.ListItem;
+import org.apache.wicket.markup.html.list.ListView;
+import org.openmeetings.app.data.basic.Navimanagement;
+import org.openmeetings.app.persistence.beans.basic.Naviglobal;
+import org.openmeetings.app.persistence.beans.basic.Navimain;
+import org.openmeetings.web.app.Application;
+import org.openmeetings.web.app.WebSession;
+import org.openmeetings.web.components.admin.UsersPanel;
+
+public class MenuPanel extends BasePanel {
+	private static final long serialVersionUID = 6626039612808753514L;
+
+	private enum MenuActions {
+		dashboardModuleStartScreen
+		, dashboardModuleCalendar
+		, recordModule
+		, conferenceModuleRoomList
+		, eventModuleRoomList
+		, moderatorModuleUser
+		, moderatorModuleRoom
+		, adminModuleUser
+		, adminModuleConnections
+		, adminModuleOrg
+		, adminModuleRoom
+		, adminModuleConfiguration
+		, adminModuleLanguages
+		, adminModuleLDAP
+		, adminModuleBackup
+		, adminModuleServers
+	}
+
+	public MenuPanel(String id, final MarkupContainer contents) {
+		super(id);
+		setMarkupId(id);
+		
+		final Navimanagement man = Application.getBean(Navimanagement.class);
+		add(new ListView<Naviglobal>("mainItem", man.getMainMenu(WebSession.getUserLevel(), WebSession.getUserId(), WebSession.getLanguage())) {
+			private static final long serialVersionUID = 2173926553418745231L;
+
+			@Override
+			protected void populateItem(ListItem<Naviglobal> item) {
+				Naviglobal gl = item.getModelObject();
+				item.add(new Label("label", gl.getLabel().getValue()).setRenderBodyOnly(true));
+				
+				item.add(new ListView<Navimain>("childItem", gl.getMainnavi()) {
+					private static final long serialVersionUID = 3609635268338379087L;
+
+					@Override
+					protected void populateItem(ListItem<Navimain> item) {
+						Navimain m = item.getModelObject();
+						final String name = m.getLabel().getValue();
+						final String desc = m.getTooltip().getValue();
+						final MenuActions action = MenuActions.valueOf(m.getAction());
+						item.add(new AjaxLink<Void>("link") {
+							private static final long serialVersionUID = 5632618935550133709L;
+							{
+								add(new Label("name", name).setRenderBodyOnly(true));
+								add(new Label("description", desc).setRenderBodyOnly(true));
+							}
+							
+							public void onClick(AjaxRequestTarget target) {
+								switch(action) {
+									case dashboardModuleStartScreen:
+										break;
+									case dashboardModuleCalendar:
+										break;
+									case recordModule:
+										break;
+									case conferenceModuleRoomList:
+										//requires params
+										break;
+									case eventModuleRoomList:
+										break;
+									case moderatorModuleUser:
+										break;
+									case moderatorModuleRoom:
+										break;
+									case adminModuleUser:
+										target.add(contents.replace(new UsersPanel("child")));
+										//link = new BookmarkablePageLink<Void>("link", UsersPanel.class);
+										break;
+									case adminModuleConnections:
+										break;
+									case adminModuleOrg:
+										break;
+									case adminModuleRoom:
+										break;
+									case adminModuleConfiguration:
+										break;
+									case adminModuleLanguages:
+										break;
+									case adminModuleLDAP:
+										break;
+									case adminModuleBackup:
+										break;
+									case adminModuleServers:
+										break;
+								}
+							};
+						});
+					}
+				}.setReuseItems(true));
+			}
+		}.setReuseItems(true));
+	}
+
+}

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/BasePage.html
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/BasePage.html?rev=1381115&r1=1381114&r2=1381115&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/BasePage.html (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/BasePage.html Wed Sep  5 09:49:43 2012
@@ -24,9 +24,7 @@
 		<title><span wicket:id="pageTitle">[title]</span></title>
 	</head>
 	<body>
-		<div id="header">
-			<span id="logo"></span><span id="appName" wicket:id="appName"></span>
-		</div>
+		<div wicket:id="header"></div>
 		<wicket:child />
 	</body>
 </html>
\ No newline at end of file

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/BasePage.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/BasePage.java?rev=1381115&r1=1381114&r2=1381115&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/BasePage.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/BasePage.java Wed Sep  5 09:49:43 2012
@@ -22,6 +22,7 @@ import org.apache.wicket.markup.html.Web
 import org.apache.wicket.markup.html.basic.Label;
 import org.openmeetings.app.data.basic.Configurationmanagement;
 import org.openmeetings.web.app.Application;
+import org.openmeetings.web.components.HeaderPanel;
 
 public abstract class BasePage extends WebPage {
 	private static final long serialVersionUID = -6237917782433412496L;
@@ -29,6 +30,6 @@ public abstract class BasePage extends W
 	public BasePage() {
 		String appName = Application.getBean(Configurationmanagement.class).getAppName();
 		add(new Label("pageTitle", appName).setRenderBodyOnly(true));
-		add(new Label("appName", appName));
+		add(new HeaderPanel("header", appName));
 	}
 }

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/MainPage.html
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/MainPage.html?rev=1381115&r1=1381114&r2=1381115&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/MainPage.html (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/MainPage.html Wed Sep  5 09:49:43 2012
@@ -21,31 +21,13 @@
 <html xmlns="http://www.w3.org/1999/xhtml" 
 	xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.5-strict.dtd" lang="en">
 	<wicket:head>
-		<link media="screen" type="text/css" rel="stylesheet" href="css/jMenu.jquery.css"/>
 		<link media="screen" type="text/css" rel="stylesheet" href="css/theme.css"/>
 		
 		<script type="text/javascript" src="js/jquery-1.7.2.min.js"></script>
 		<script type="text/javascript" src="js/jquery-ui-1.8.23.custom.min.js"></script>
-		<script type="text/javascript" src="js/jMenu.jquery.min.js"></script>
 		<link media="screen" type="text/css" rel="stylesheet" href="css/jquery-ui-1.8.23.custom.css"/>
 		<script type="text/javascript">
 			$(function() {
-				$("#jMenu").jMenu({
-					openClick : false
-					, ulWidth : 'auto'
-					, effects : {
-						effectSpeedOpen : 300
-						, effectSpeedClose : 300
-						, effectTypeOpen : 'slide'
-						, effectTypeClose : 'slide'
-						, effectOpen : 'linear'
-						, effectClose : 'linear'
-					}
-					, TimeBeforeOpening : 100
-					, TimeBeforeClosing : 400
-					, animatedText : false
-					, paddingLeft: 1
-				});
 				Wicket.Event.subscribe('/ajax/call/failure'
 					, function(jqEvent, attributes, jqXHR, errorThrown, textStatus) { $('#busy_indicator').hide();});
 				Wicket.Event.subscribe('/ajax/call/before'
@@ -58,22 +40,7 @@
 	<wicket:extend>
 		<div id="topLinks"><wicket:ommessage key="1188"/>|<wicket:ommessage key="5"/>|<wicket:ommessage key="310"/>|<wicket:ommessage key="284"/></div>
 		<div id="busy_indicator">Loading ...</div>
-		<div id="menu">
-			<ul id="jMenu">
-				<li wicket:id="mainItem">
-					<a class="fNiv" href="#"><span wicket:id="label"></span></a>
-					<ul wicket:enclosure="childItem">
-						<li class="arrow" style="width: 97px; "></li>
-						<li wicket:id="childItem">
-							<a wicket:id="link" href="#">
-							<span wicket:id="name"></span><br />
-							<span wicket:id="description"></span>
-							</a>
-						</li>
-					</ul>
-				</li>
-			</ul>
-		</div>
+		<div wicket:id="menu"></div>
 		<div wicket:id="contents"><div wicket:id="child"></div></div>
 	</wicket:extend>
 </html>
\ No newline at end of file

Modified: incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/MainPage.java
URL: http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/MainPage.java?rev=1381115&r1=1381114&r2=1381115&view=diff
==============================================================================
--- incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/MainPage.java (original)
+++ incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/web/pages/MainPage.java Wed Sep  5 09:49:43 2012
@@ -19,115 +19,20 @@
 package org.openmeetings.web.pages;
 
 import org.apache.wicket.MarkupContainer;
-import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
 import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
-import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxLink;
 import org.apache.wicket.markup.html.WebMarkupContainer;
-import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.list.ListItem;
-import org.apache.wicket.markup.html.list.ListView;
-import org.openmeetings.app.data.basic.Navimanagement;
-import org.openmeetings.app.persistence.beans.basic.Naviglobal;
-import org.openmeetings.app.persistence.beans.basic.Navimain;
-import org.openmeetings.web.app.Application;
-import org.openmeetings.web.app.WebSession;
-import org.openmeetings.web.components.admin.UsersPanel;
+import org.openmeetings.web.components.MenuPanel;
 
 @AuthorizeInstantiation("USER")
 public class MainPage extends BasePage {
 	private static final long serialVersionUID = 6421960759218157999L;
-	public enum MenuActions {
-		dashboardModuleStartScreen
-		, dashboardModuleCalendar
-		, recordModule
-		, conferenceModuleRoomList
-		, eventModuleRoomList
-		, moderatorModuleUser
-		, moderatorModuleRoom
-		, adminModuleUser
-		, adminModuleConnections
-		, adminModuleOrg
-		, adminModuleRoom
-		, adminModuleConfiguration
-		, adminModuleLanguages
-		, adminModuleLDAP
-		, adminModuleBackup
-		, adminModuleServers
-	}
+	private final MenuPanel menu;
 	
 	public MainPage() {
-		final MarkupContainer contents = new WebMarkupContainer("contents");
+		MarkupContainer contents = new WebMarkupContainer("contents");
 		contents.add(new WebMarkupContainer("child")).setOutputMarkupId(true);
 		add(contents);
-		
-		final Navimanagement man = Application.getBean(Navimanagement.class);
-		add(new ListView<Naviglobal>("mainItem", man.getMainMenu(WebSession.getUserLevel(), WebSession.getUserId(), WebSession.getLanguage())) {
-			private static final long serialVersionUID = 2173926553418745231L;
-
-			@Override
-			protected void populateItem(ListItem<Naviglobal> item) {
-				Naviglobal gl = item.getModelObject();
-				item.add(new Label("label", gl.getLabel().getValue()).setRenderBodyOnly(true));
-				
-				item.add(new ListView<Navimain>("childItem", gl.getMainnavi()) {
-					private static final long serialVersionUID = 3609635268338379087L;
-
-					@Override
-					protected void populateItem(ListItem<Navimain> item) {
-						Navimain m = item.getModelObject();
-						final String name = m.getLabel().getValue();
-						final String desc = m.getTooltip().getValue();
-						final MenuActions action = MenuActions.valueOf(m.getAction());
-						item.add(new AjaxLink<Void>("link") {
-							private static final long serialVersionUID = 5632618935550133709L;
-							{
-								add(new Label("name", name).setRenderBodyOnly(true));
-								add(new Label("description", desc).setRenderBodyOnly(true));
-							}
-							public void onClick(AjaxRequestTarget target) {
-								switch(action) {
-									case dashboardModuleStartScreen:
-										break;
-									case dashboardModuleCalendar:
-										break;
-									case recordModule:
-										break;
-									case conferenceModuleRoomList:
-										//requires params
-										break;
-									case eventModuleRoomList:
-										break;
-									case moderatorModuleUser:
-										break;
-									case moderatorModuleRoom:
-										break;
-									case adminModuleUser:
-										target.add(contents.replace(new UsersPanel("child")));
-										//link = new BookmarkablePageLink<Void>("link", UsersPanel.class);
-										break;
-									case adminModuleConnections:
-										break;
-									case adminModuleOrg:
-										break;
-									case adminModuleRoom:
-										break;
-									case adminModuleConfiguration:
-										break;
-									case adminModuleLanguages:
-										break;
-									case adminModuleLDAP:
-										break;
-									case adminModuleBackup:
-										break;
-									case adminModuleServers:
-										break;
-								}
-							};
-						});
-					}
-				}.setReuseItems(true));
-			}
-		}.setReuseItems(true));
+		menu = new MenuPanel("menu", contents);
+		add(menu);
 	}
 }