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/10/08 21:05:17 UTC

svn commit: r1707605 - in /openmeetings: branches/3.0.x/src/main/webapp/css/ branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/ branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/connection/ branches/3.0.x/src/web/java/org/apache...

Author: solomax
Date: Thu Oct  8 19:05:16 2015
New Revision: 1707605

URL: http://svn.apache.org/viewvc?rev=1707605&view=rev
Log:
[OPENMEETINGS-1264] old style confirm dialogs are replaced

Added:
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java
      - copied, changed from r1705517, openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java
      - copied, changed from r1706187, openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java
Removed:
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmCallListener.java
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmCallListener.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java
Modified:
    openmeetings/branches/3.0.x/src/main/webapp/css/forms.css
    openmeetings/branches/3.0.x/src/main/webapp/css/theme.css
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.html
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.java
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.java
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.html
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.html
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.java
    openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.html
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangForm.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.html
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/forms.css
    openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css

Modified: openmeetings/branches/3.0.x/src/main/webapp/css/forms.css
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/webapp/css/forms.css?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/main/webapp/css/forms.css (original)
+++ openmeetings/branches/3.0.x/src/main/webapp/css/forms.css Thu Oct  8 19:05:16 2015
@@ -65,8 +65,9 @@ div.formRefreshButton input {
 	margin-top: 2px;
 }
 
-div.formCancelButton input {
+div.formCancelButton div {
 	background: url(images/forms/cancel_icon.png) no-repeat;
+	display: inline-block;
 	float: left;
 	cursor: pointer;
 	width: 18px;

Modified: openmeetings/branches/3.0.x/src/main/webapp/css/theme.css
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/main/webapp/css/theme.css?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/main/webapp/css/theme.css (original)
+++ openmeetings/branches/3.0.x/src/main/webapp/css/theme.css Thu Oct  8 19:05:16 2015
@@ -39,6 +39,7 @@ html, body {
 	padding-right: 5px;
 	padding-left: 5px;
 	border-right: 1px solid black;
+	white-space: nowrap;
 }
 
 #topLinks span:last-child {

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.html
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.html?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.html (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.html Thu Oct  8 19:05:16 2015
@@ -24,7 +24,7 @@
 			<input type="submit" value="" wicket:id="ajax-new-button" wicket:message="title:155" />
 		</div>
 		<div class="formCancelButton">
-			<input type="submit" value="" wicket:id="ajax-cancel-button" wicket:message="title:157" />
+			<div wicket:id="ajax-cancel-button" wicket:message="title:157"></div>
 		</div>
 		<span wicket:id="newRecord"></span>
 	</wicket:extend>

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.java (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/AdminSavePanel.java Thu Oct  8 19:05:16 2015
@@ -19,10 +19,9 @@
 package org.apache.openmeetings.web.admin;
 
 import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.common.ConfirmCallListener;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.FormSaveRefreshPanel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
@@ -31,9 +30,11 @@ import org.apache.wicket.model.Model;
 public abstract class AdminSavePanel<T> extends FormSaveRefreshPanel<T> {
 	private static final long serialVersionUID = 1L;
 	private Label newRecord;
+	private final Form<T> form;
 	
 	public AdminSavePanel(String id, final Form<T> form) {
 		super(id, form);
+		this.form = form;
 		
 		newRecord = new Label("newRecord", Model.of(Application.getString(344L)));
 		add(newRecord.setVisible(false).setOutputMarkupId(true));
@@ -58,31 +59,29 @@ public abstract class AdminSavePanel<T>
 				onNewError(target, form);
 			}
 		});
-
+	}
+	
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
 		// add a cancel button that can be used to submit the form via ajax
-		add(new AjaxButton("ajax-cancel-button", form) {
+		add(new ConfirmableAjaxBorder("ajax-cancel-button", getString("80"), getString("833"), form) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-				super.updateAjaxAttributes(attributes);
-				attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
-			}
-			
-			@Override
-			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
-				// repaint the feedback panel so that it is hidden
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
 				target.add(feedback);
 				hideNewRecord();
-				onDeleteSubmit(target, form);
+				onDeleteError(target, form);
 			}
 
 			@Override
-			protected void onError(AjaxRequestTarget target, Form<?> form) {
-				// repaint the feedback panel so errors are shown
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so that it is hidden
 				target.add(feedback);
 				hideNewRecord();
-				onDeleteError(target, form);
+				onDeleteSubmit(target, form);
 			}
 		});
 	}

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java Thu Oct  8 19:05:16 2015
@@ -37,7 +37,7 @@ import org.apache.openmeetings.web.admin
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebClient;
 import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.PagedEntityListPanel;
 import org.apache.openmeetings.web.data.SearchableDataProvider;
 import org.apache.wicket.AttributeModifier;
@@ -45,6 +45,7 @@ import org.apache.wicket.ajax.AjaxEventB
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.RepeatingView;
 
@@ -99,11 +100,11 @@ public class ConnectionsPanel extends Ad
 				item.add(new Label("since", c.getConnectedSince()));
 				item.add(new Label("scope", c.getScope()));
 				item.add(new Label("server", c.getServer() == null ? "no cluster" : c.getServer().getAddress())); //FIXME localization
-				item.add(new ConfirmableAjaxLink("kick", 605) {
+				item.add(new ConfirmableAjaxBorder("kick", getString("603"), getString("605")) {
 					private static final long serialVersionUID = 1L;
 
 					@Override
-					public void onClick(AjaxRequestTarget target) {
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 						Client c = item.getModelObject();
 						getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
 								, c.getServer() == null ? 0 : c.getServer().getId());
@@ -155,11 +156,11 @@ public class ConnectionsPanel extends Ad
 				item.add(new Label("login", getBean(UserService.class).getUserById(getSid(), c.getUserId()).getLogin()));
 				item.add(new Label("since", c.getConnectedSince()));
 				item.add(new Label("scope", "hibernate"));
-				item.add(new ConfirmableAjaxLink("kick", 605) {
+				item.add(new ConfirmableAjaxBorder("kick", getString("603"), getString("605")) {
 					private static final long serialVersionUID = 1L;
 
 					@Override
-					public void onClick(AjaxRequestTarget target) {
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 						WebClient c = item.getModelObject();
 						getBean(IUserService.class).kickUserBySessionId(getSid(), c.getUserId()
 								, c.getSessionId());

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html Thu Oct  8 19:05:16 2015
@@ -35,7 +35,7 @@
                         <tr wicket:id="userList" class="ui-widget-content">
                             <td style="width: 34px"><input type="checkbox" wicket:id="isModerator"/></td>
                             <td style="width: 360px"><div style="width: 360px"><span wicket:id="label"></span></div></td>
-                            <td style="width: 34px"><div style="width: 34px"><div class="formCancelButton" wicket:id="deleteUserBtn" wicket:message="title:274"><input/></div></div></td>
+                            <td style="width: 34px"><div style="width: 34px"><div class="formCancelButton" wicket:id="deleteUserBtn" wicket:message="title:274"></div></div></td>
                         </tr>
                     </tbody>
                 </table>

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java Thu Oct  8 19:05:16 2015
@@ -28,17 +28,15 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.admin.SearchableDataView;
 import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.common.ConfirmCallListener;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.PagedEntityListPanel;
 import org.apache.openmeetings.web.data.SearchableDataProvider;
-import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
 import org.apache.wicket.behavior.AttributeAppender;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.markup.repeater.Item;
 
@@ -74,17 +72,11 @@ public class GroupUsersPanel extends Pan
 					label.add(AttributeAppender.append("class", "newItem"));
 				}
 				item.add(label);
-				item.add(new WebMarkupContainer("deleteUserBtn").add(new AjaxEventBehavior("onclick"){
+				item.add(new ConfirmableAjaxBorder("deleteUserBtn", getString("80"), getString("833")) {
 					private static final long serialVersionUID = 1L;
 
 					@Override
-					protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-						super.updateAjaxAttributes(attributes);
-						attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
-					}
-					
-					@Override
-					protected void onEvent(AjaxRequestTarget target) {
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 						if (orgUser.getOrganisation_users_id() == null) {
 							for (int i = 0; i < users2add.size(); ++i) {
 								//FIXME ineffective
@@ -98,7 +90,7 @@ public class GroupUsersPanel extends Pan
 						}
 						target.add(GroupUsersPanel.this);
 					}
-				}));
+				});
 			}
 		};
 		add(dataView).setOutputMarkupId(true);

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.java (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/labels/LangForm.java Thu Oct  8 19:05:16 2015
@@ -25,10 +25,8 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.openmeetings.db.dao.label.LabelDao;
-import org.apache.openmeetings.web.common.ConfirmCallListener;
-import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
 import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -100,24 +98,18 @@ public class LangForm extends Form<Void>
 		});
 		add(languages);
 
-		add(new WebMarkupContainer("deleteLangBtn").add(new AjaxEventBehavior("onclick"){
+		add(new ConfirmableAjaxBorder("deleteLangBtn", getString("80"), getString("833")) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-				super.updateAjaxAttributes(attributes);
-				attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
-			}
-			
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 				LabelDao.delete(langPanel.language.getValue());
 				List<Map.Entry<Long, Locale>> langs = getLanguages();
 				langPanel.language = langs.isEmpty() ? null : langs.get(0);
 				languages.setChoices(langs);
 				target.add(languages, listContainer);
 			}
-		})); 
+		});
 
 		// attach an ajax validation behavior to all form component's keydown
 		// event and throttle it down to once per second

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.html?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.html (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/labels/LangPanel.html Thu Oct  8 19:05:16 2015
@@ -43,7 +43,7 @@
 									onclick="$('#addLanguage :text').val(''); $('#addLanguage').dialog('open');"><input type="button" title=""/></div>
 							</td>
 							<td>
-								<div wicket:id="deleteLangBtn" class="formCancelButton" wicket:message="title:363"><input type="button" title=""/></div>
+								<div wicket:id="deleteLangBtn" class="formCancelButton" wicket:message="title:363"></div>
 							</td>
 							<td>
 								<select wicket:id="language"></select>

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java Thu Oct  8 19:05:16 2015
@@ -42,11 +42,9 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.web.admin.AdminBaseForm;
 import org.apache.openmeetings.web.admin.AdminUserChoiceProvider;
 import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.common.ConfirmCallListener;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.util.RoomTypeDropDown;
-import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
 import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
@@ -188,24 +186,18 @@ public class RoomForm extends AdminBaseF
 				Client client = item.getModelObject();
 				item.add(new Label("clientId", "" + client.getId()))
 					.add(new Label("clientLogin", "" + client.getUsername()))
-					.add(new WebMarkupContainer("clientDelete").add(new AjaxEventBehavior("onclick"){
+					.add(new ConfirmableAjaxBorder("clientDelete", getString("80"), getString("833")) {
 						private static final long serialVersionUID = 1L;
-	
-						@Override
-						protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-							super.updateAjaxAttributes(attributes);
-							attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
-						}
-						
+
 						@Override
-						protected void onEvent(AjaxRequestTarget target) {
+						protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 							Client c = item.getModelObject();
 							getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
 									, c.getServer() == null ? 0 : c.getServer().getId());
 							
 							updateClients(target);
 						}
-					}));
+					});
 			}
 		};
 		add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
@@ -269,21 +261,15 @@ public class RoomForm extends AdminBaseF
 					.add(new Label("userId", "" + moderator.getUser().getUser_id()))
 					.add(name)
 					.add(new Label("email", moderator.getUser().getAdresses().getEmail()))
-					.add(new WebMarkupContainer("delete").add(new AjaxEventBehavior("onclick"){
+					.add(new ConfirmableAjaxBorder("delete", getString("80"), getString("833")) {
 						private static final long serialVersionUID = 1L;
-	
-						@Override
-						protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-							super.updateAjaxAttributes(attributes);
-							attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
-						}
-						
+
 						@Override
-						protected void onEvent(AjaxRequestTarget target) {
+						protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 							RoomForm.this.getModelObject().getModerators().remove(item.getIndex());
 							target.add(moderatorContainer);
 						}
-					}));
+					});
 			}
 		}).setOutputMarkupId(true));
 

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html Thu Oct  8 19:05:16 2015
@@ -192,7 +192,7 @@
 							    		<tr wicket:id="clients">
 											<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="clientId"></span></div></td>
 											<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="clientLogin"></span></div></td>
-											<td class="three_column_layout_column3"><div class="formCancelButton" wicket:id="clientDelete" wicket:message="title:604"><input/></div></td>
+											<td class="three_column_layout_column3"><div class="formCancelButton" wicket:id="clientDelete" wicket:message="title:604"></div></td>
 										</tr>
 									</tbody>
 								</table>
@@ -228,7 +228,7 @@
 												<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="userId"></span></div></td>
 												<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="uName"></span></div></td>
 												<td class="three_column_layout_column4"><div class="three_column_layout_divcolumn4" style="overflow: hidden;"><span wicket:id="email"></span></div></td>
-						                        <td style="width: 50px"><div style="width: 50px"><div class="formCancelButton" wicket:id="delete" wicket:message="title:274"><input/></div></div></td>
+						                        <td style="width: 50px"><div style="width: 50px"><div class="formCancelButton" wicket:id="delete" wicket:message="title:274"></div></div></td>
 											</tr>
 										</tbody>
 									</table>

Added: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html?rev=1707605&view=auto
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html (added)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html Thu Oct  8 19:05:16 2015
@@ -0,0 +1,26 @@
+<?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:wicket="http://wicket.apache.org">
+<wicket:border>
+	<wicket:body/>
+	<form wicket:id="form" style="display: inline;"><div wicket:id="dialog"></div></form>
+</wicket:border>
+</html>

Copied: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java (from r1705517, openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java)
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java?p2=openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java&p1=openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java&r1=1705517&r2=1707605&rev=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java Thu Oct  8 19:05:16 2015
@@ -18,22 +18,116 @@
  */
 package org.apache.openmeetings.web.common;
 
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.border.Border;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
 
-public abstract class ConfirmableAjaxLink extends AjaxLink<Void> {
-	private static final long serialVersionUID = 7301747891668537168L;
-	private long confirmId;
-
-	public ConfirmableAjaxLink(String id, long confirmId) {
-		super(id);
-		this.confirmId = confirmId;
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageFormDialog;
+
+public abstract class ConfirmableAjaxBorder extends Border {
+	private static final long serialVersionUID = 1L;
+	private final Form<?> form = new Form<>("form");
+	private final Form<?> userForm;
+	private final IModel<String> title;
+	private final IModel<String> message;
+
+	public ConfirmableAjaxBorder(String id, String title, String message) {
+		this(id, Model.of(title), Model.of(message), null);
+	}
+	
+	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> form) {
+		this(id, Model.of(title), Model.of(message), form);
+	}
+	
+	public ConfirmableAjaxBorder(String id, IModel<String> title, IModel<String> message, Form<?> form) {
+		super(id, message);
+		this.title = title;
+		this.message = message;
+		this.userForm = form;
 		setOutputMarkupId(true);
 	}
 
 	@Override
-	protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-		super.updateAjaxAttributes(attributes);
-		attributes.getAjaxCallListeners().add(new ConfirmCallListener(confirmId, "hideBusyIndicator();"));
+	protected void onInitialize() {
+		super.onInitialize();
+		final AbstractFormDialog<?> dialog = newFormDialog("dialog", title, message);
+		add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				dialog.open(target);
+			}
+		});
+		addToBorder(form.add(dialog));
+	}
+
+	/**
+	 * Triggered when the form is submitted, but the validation failed
+	 *
+	 * @param target the {@link AjaxRequestTarget}
+	 * @param form the {@link Form}
+	 */
+	protected void onError(AjaxRequestTarget target, Form<?> form) {
+	}
+
+	/**
+	 * Triggered when the form is submitted, and the validation succeed
+	 *
+	 * @param target the {@link AjaxRequestTarget}
+	 * @param form the {@link Form}
+	 */
+	protected abstract void onSubmit(AjaxRequestTarget target, Form<?> form);
+
+	// Factories //
+
+	/**
+	 * Create the dialog instance<br/>
+	 * <b>Warning:</b> to be overridden with care!
+	 *
+	 * @param id the markupId
+	 * @param title the title of the dialog
+	 * @param message the message to be displayed
+	 * @return the dialog instance
+	 */
+	protected AbstractFormDialog<?> newFormDialog(String id, IModel<String> title, IModel<String> message) {
+		return new MessageFormDialog(id, title, message, DialogButtons.OK_CANCEL, DialogIcon.WARN) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected DialogButton getSubmitButton() {
+				return this.findButton(OK);
+			}
+
+			@Override
+			public Form<?> getForm() {
+				return userForm == null ? form : userForm;
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target) {
+				super.close(target, null); // closes the dialog on error.
+				ConfirmableAjaxBorder.this.onError(target, this.getForm());
+			}
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				ConfirmableAjaxBorder.this.onSubmit(target, this.getForm());
+			}
+		};
+	}
+	
+	@Override
+	protected void onDetach() {
+		super.onDetach();
+		title.detach();
+		message.detach();
 	}
 }

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.html
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.html?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.html (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.html Thu Oct  8 19:05:16 2015
@@ -42,7 +42,7 @@
 			<div id="topLinks"><span 
 				id="contactsAndMessages"><a wicket:id="messages"><wicket:message key="1188"/></a></span><span 
 				id="profile"><a wicket:id="profile"><wicket:message key="5"/></a></span><span 
-				id="logout"><a wicket:id="logout"><wicket:message key="310"/></a></span><span 
+				id="logout"><a wicket:id="logout" href="#"><wicket:message key="310"/></a></span><span 
 				id="reportBug"><a target="_blank" wicket:id="bug"><wicket:message key="284"/></a></span><span><a 
 				wicket:id="about"><wicket:message key="1549"/></a></span>
 				</div>

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.java (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/pages/MainPage.java Thu Oct  8 19:05:16 2015
@@ -32,7 +32,7 @@ import org.apache.openmeetings.web.app.A
 import org.apache.openmeetings.web.app.WebClient;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.BasePanel;
-import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.MenuPanel;
 import org.apache.openmeetings.web.user.AboutDialog;
 import org.apache.openmeetings.web.user.ChatPanel;
@@ -46,6 +46,7 @@ import org.apache.wicket.ajax.markup.htm
 import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
 import org.apache.wicket.devutils.debugbar.DebugBar;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.link.ExternalLink;
 import org.apache.wicket.markup.html.panel.EmptyPanel;
 import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
@@ -82,11 +83,11 @@ public class MainPage extends BaseInited
 				updateContents(PROFILE_MESSAGES, target);
 			}
 		});
-		add(new ConfirmableAjaxLink("logout", 634L) {
-			private static final long serialVersionUID = -2994610981053570537L;
+		add(new ConfirmableAjaxBorder("logout", getString("310"), getString("634")) {
+			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target) {
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 				getSession().invalidate();
 				setResponsePage(Application.get().getSignInPageClass());
 			}

Modified: openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java (original)
+++ openmeetings/branches/3.0.x/src/web/java/org/apache/openmeetings/web/user/record/RecordingsPanel.java Thu Oct  8 19:05:16 2015
@@ -37,7 +37,7 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.Organisation_Users;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.AddFolderDialog;
-import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.UserPanel;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxEventBehavior;
@@ -48,6 +48,7 @@ import org.apache.wicket.extensions.mark
 import org.apache.wicket.extensions.markup.html.repeater.tree.content.Folder;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.repeater.RepeatingView;
 import org.apache.wicket.markup.repeater.ReuseIfModelsEqualStrategy;
 import org.apache.wicket.model.CompoundPropertyModel;
@@ -134,11 +135,11 @@ public class RecordingsPanel extends Use
 				target.add(trees); //FIXME add correct refresh
 			}
 		}));
-		trashToolbar.add(new ConfirmableAjaxLink("trash", 713) {
+		trashToolbar.add(new ConfirmableAjaxBorder("trash", getString("80"), getString("713")) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target) {
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 				delete(rm.getObject(), target);
 			}
 		});

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.html?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.html Thu Oct  8 19:05:16 2015
@@ -24,7 +24,7 @@
 			<input type="submit" value="" wicket:id="ajax-new-button" wicket:message="title:155" />
 		</div>
 		<div class="formCancelButton">
-			<input type="submit" value="" wicket:id="ajax-cancel-button" wicket:message="title:157" />
+			<div wicket:id="ajax-cancel-button" wicket:message="title:157"></div>
 		</div>
 		<span wicket:id="newRecord"></span>
 	</wicket:extend>

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/AdminSavePanel.java Thu Oct  8 19:05:16 2015
@@ -19,10 +19,9 @@
 package org.apache.openmeetings.web.admin;
 
 import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.common.ConfirmCallListener;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.FormSaveRefreshPanel;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.markup.html.form.AjaxButton;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.Form;
@@ -31,9 +30,11 @@ import org.apache.wicket.model.Model;
 public abstract class AdminSavePanel<T> extends FormSaveRefreshPanel<T> {
 	private static final long serialVersionUID = 1L;
 	private Label newRecord;
+	private final Form<T> form;
 	
 	public AdminSavePanel(String id, final Form<T> form) {
 		super(id, form);
+		this.form = form;
 		
 		newRecord = new Label("newRecord", Model.of(Application.getString(344L)));
 		add(newRecord.setVisible(false).setOutputMarkupId(true));
@@ -58,31 +59,29 @@ public abstract class AdminSavePanel<T>
 				onNewError(target, form);
 			}
 		});
-
+	}
+	
+	@Override
+	protected void onInitialize() {
+		super.onInitialize();
 		// add a cancel button that can be used to submit the form via ajax
-		add(new AjaxButton("ajax-cancel-button", form) {
+		add(new ConfirmableAjaxBorder("ajax-cancel-button", getString("80"), getString("833"), form) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-				super.updateAjaxAttributes(attributes);
-				attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
-			}
-			
-			@Override
-			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
-				// repaint the feedback panel so that it is hidden
+			protected void onError(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so errors are shown
 				target.add(feedback);
 				hideNewRecord();
-				onDeleteSubmit(target, form);
+				onDeleteError(target, form);
 			}
 
 			@Override
-			protected void onError(AjaxRequestTarget target, Form<?> form) {
-				// repaint the feedback panel so errors are shown
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
+				// repaint the feedback panel so that it is hidden
 				target.add(feedback);
 				hideNewRecord();
-				onDeleteError(target, form);
+				onDeleteSubmit(target, form);
 			}
 		});
 	}

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/connection/ConnectionsPanel.java Thu Oct  8 19:05:16 2015
@@ -35,7 +35,7 @@ import org.apache.openmeetings.web.admin
 import org.apache.openmeetings.web.admin.SearchableDataView;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.PagedEntityListPanel;
 import org.apache.openmeetings.web.data.SearchableDataProvider;
 import org.apache.wicket.AttributeModifier;
@@ -44,6 +44,7 @@ import org.apache.wicket.ajax.AjaxReques
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.RepeatingView;
 
@@ -83,11 +84,11 @@ public class ConnectionsPanel extends Ad
 				item.add(new Label("since", c.getConnectedSince()));
 				item.add(new Label("scope", c.getScope()));
 				item.add(new Label("server", c.getServer() == null ? "no cluster" : c.getServer().getAddress())); //FIXME localization
-				item.add(new ConfirmableAjaxLink("kick", 605) {
+				item.add(new ConfirmableAjaxBorder("kick", getString("603"), getString("605")) {
 					private static final long serialVersionUID = 1L;
 
 					@Override
-					public void onClick(AjaxRequestTarget target) {
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 						Client c = item.getModelObject();
 						getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
 								, c.getServer() == null ? 0 : c.getServer().getId());
@@ -154,11 +155,11 @@ public class ConnectionsPanel extends Ad
 				item.add(new Label("login", getBean(UserService.class).getUserById(getSid(), c.getUserId()).getLogin()));
 				item.add(new Label("since", c.getConnectedSince()));
 				item.add(new Label("scope", "hibernate"));
-				item.add(new ConfirmableAjaxLink("kick", 605) {
+				item.add(new ConfirmableAjaxBorder("kick", getString("603"), getString("605")) {
 					private static final long serialVersionUID = 1L;
 
 					@Override
-					public void onClick(AjaxRequestTarget target) {
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 						org.apache.openmeetings.web.app.Client c = item.getModelObject();
 						getBean(IUserService.class).kickUserBySessionId(getSid(), c.getUserId()
 								, c.getSessionId());

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.html Thu Oct  8 19:05:16 2015
@@ -35,7 +35,7 @@
                         <tr wicket:id="userList" class="ui-widget-content">
                             <td style="width: 34px"><input type="checkbox" wicket:id="isModerator"/></td>
                             <td style="width: 360px"><div style="width: 360px"><span wicket:id="label"></span></div></td>
-                            <td style="width: 34px"><div style="width: 34px"><div class="formCancelButton" wicket:id="deleteUserBtn" wicket:message="title:274"><input/></div></div></td>
+                            <td style="width: 34px"><div style="width: 34px"><div class="formCancelButton" wicket:id="deleteUserBtn" wicket:message="title:274"></div></div></td>
                         </tr>
                     </tbody>
                 </table>

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/groups/GroupUsersPanel.java Thu Oct  8 19:05:16 2015
@@ -28,17 +28,15 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.admin.SearchableDataView;
 import org.apache.openmeetings.web.app.WebSession;
-import org.apache.openmeetings.web.common.ConfirmCallListener;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.PagedEntityListPanel;
 import org.apache.openmeetings.web.data.SearchableDataProvider;
-import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
 import org.apache.wicket.behavior.AttributeAppender;
-import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
 import org.apache.wicket.markup.html.form.CheckBox;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.markup.repeater.Item;
 
@@ -74,17 +72,11 @@ public class GroupUsersPanel extends Pan
 					label.add(AttributeAppender.append("class", "newItem"));
 				}
 				item.add(label);
-				item.add(new WebMarkupContainer("deleteUserBtn").add(new AjaxEventBehavior("onclick"){
+				item.add(new ConfirmableAjaxBorder("deleteUserBtn", getString("80"), getString("833")) {
 					private static final long serialVersionUID = 1L;
 
 					@Override
-					protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-						super.updateAjaxAttributes(attributes);
-						attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
-					}
-					
-					@Override
-					protected void onEvent(AjaxRequestTarget target) {
+					protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 						if (orgUser.getId() == null) {
 							for (int i = 0; i < users2add.size(); ++i) {
 								//FIXME ineffective
@@ -98,7 +90,7 @@ public class GroupUsersPanel extends Pan
 						}
 						target.add(GroupUsersPanel.this);
 					}
-				}));
+				});
 			}
 		};
 		add(dataView).setOutputMarkupId(true);

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangForm.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangForm.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangForm.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangForm.java Thu Oct  8 19:05:16 2015
@@ -25,10 +25,8 @@ import java.util.Locale;
 import java.util.Map;
 
 import org.apache.openmeetings.db.dao.label.LabelDao;
-import org.apache.openmeetings.web.common.ConfirmCallListener;
-import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
 import org.apache.wicket.ajax.form.OnChangeAjaxBehavior;
 import org.apache.wicket.markup.html.WebMarkupContainer;
@@ -100,24 +98,18 @@ public class LangForm extends Form<Void>
 		});
 		add(languages);
 
-		add(new WebMarkupContainer("deleteLangBtn").add(new AjaxEventBehavior("onclick") {
+		add(new ConfirmableAjaxBorder("deleteLangBtn", getString("80"), getString("833")) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-				super.updateAjaxAttributes(attributes);
-				attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
-			}
-			
-			@Override
-			protected void onEvent(AjaxRequestTarget target) {
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 				LabelDao.delete(langPanel.language.getValue());
 				List<Map.Entry<Long, Locale>> langs = getLanguages();
 				langPanel.language = langs.isEmpty() ? null : langs.get(0);
 				languages.setChoices(langs);
 				target.add(languages, listContainer);
 			}
-		})); 
+		});
 
 		// attach an ajax validation behavior to all form component's keydown
 		// event and throttle it down to once per second

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.html?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/labels/LangPanel.html Thu Oct  8 19:05:16 2015
@@ -43,7 +43,7 @@
 									onclick="$('#addLanguage :text').val(''); $('#addLanguage').dialog('open');"><input type="button" title=""/></div>
 							</td>
 							<td>
-								<div wicket:id="deleteLangBtn" class="formCancelButton" wicket:message="title:363"><input type="button" title=""/></div>
+								<div wicket:id="deleteLangBtn" class="formCancelButton" wicket:message="title:363"></div>
 							</td>
 							<td>
 								<select wicket:id="language"></select>

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomForm.java Thu Oct  8 19:05:16 2015
@@ -29,24 +29,22 @@ import java.util.List;
 
 import org.apache.openmeetings.db.dao.room.RoomDao;
 import org.apache.openmeetings.db.dao.server.ISessionManager;
-import org.apache.openmeetings.db.dao.user.IUserService;
 import org.apache.openmeetings.db.dao.user.GroupDao;
+import org.apache.openmeetings.db.dao.user.IUserService;
 import org.apache.openmeetings.db.dao.user.UserDao;
 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.RoomGroup;
+import org.apache.openmeetings.db.entity.room.RoomModerator;
 import org.apache.openmeetings.db.entity.user.Address;
 import org.apache.openmeetings.db.entity.user.Group;
 import org.apache.openmeetings.db.entity.user.User;
 import org.apache.openmeetings.web.admin.AdminBaseForm;
 import org.apache.openmeetings.web.admin.AdminUserChoiceProvider;
 import org.apache.openmeetings.web.app.Application;
-import org.apache.openmeetings.web.common.ConfirmCallListener;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.util.RoomTypeDropDown;
-import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
 import org.apache.wicket.ajax.form.AjaxFormComponentUpdatingBehavior;
 import org.apache.wicket.ajax.form.AjaxFormValidatingBehavior;
 import org.apache.wicket.ajax.markup.html.form.AjaxCheckBox;
@@ -188,24 +186,18 @@ public class RoomForm extends AdminBaseF
 				Client client = item.getModelObject();
 				item.add(new Label("clientId", "" + client.getId()))
 					.add(new Label("clientLogin", "" + client.getUsername()))
-					.add(new WebMarkupContainer("clientDelete").add(new AjaxEventBehavior("onclick"){
+					.add(new ConfirmableAjaxBorder("clientDelete", getString("80"), getString("833")) {
 						private static final long serialVersionUID = 1L;
-	
-						@Override
-						protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-							super.updateAjaxAttributes(attributes);
-							attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
-						}
-						
+
 						@Override
-						protected void onEvent(AjaxRequestTarget target) {
+						protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 							Client c = item.getModelObject();
 							getBean(IUserService.class).kickUserByStreamId(getSid(), c.getStreamid()
 									, c.getServer() == null ? 0 : c.getServer().getId());
 							
 							updateClients(target);
 						}
-					}));
+					});
 			}
 		};
 		add(clientsContainer.add(clients.setOutputMarkupId(true)).setOutputMarkupId(true));
@@ -269,21 +261,15 @@ public class RoomForm extends AdminBaseF
 					.add(new Label("userId", "" + moderator.getUser().getId()))
 					.add(name)
 					.add(new Label("email", moderator.getUser().getAddress().getEmail()))
-					.add(new WebMarkupContainer("delete").add(new AjaxEventBehavior("onclick"){
+					.add(new ConfirmableAjaxBorder("delete", getString("80"), getString("833")) {
 						private static final long serialVersionUID = 1L;
-	
-						@Override
-						protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-							super.updateAjaxAttributes(attributes);
-							attributes.getAjaxCallListeners().add(new ConfirmCallListener(833L));
-						}
-						
+
 						@Override
-						protected void onEvent(AjaxRequestTarget target) {
+						protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 							RoomForm.this.getModelObject().getModerators().remove(item.getIndex());
 							target.add(moderatorContainer);
 						}
-					}));
+					});
 			}
 		}).setOutputMarkupId(true));
 

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/admin/rooms/RoomsPanel.html Thu Oct  8 19:05:16 2015
@@ -192,7 +192,7 @@
 							    		<tr wicket:id="clients">
 											<td class="three_column_layout_column1"><div class="three_column_layout_divcolumn1"><span wicket:id="clientId"></span></div></td>
 											<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="clientLogin"></span></div></td>
-											<td class="three_column_layout_column3"><div class="formCancelButton" wicket:id="clientDelete" wicket:message="title:604"><input/></div></td>
+											<td class="three_column_layout_column3"><div class="formCancelButton" wicket:id="clientDelete" wicket:message="title:604"></div></td>
 										</tr>
 									</tbody>
 								</table>
@@ -208,7 +208,7 @@
 	                        <div class="formelement">
 					            <label><wicket:message key="816" /></label><input type="hidden" wicket:id="moderator2add" class="input"/>
 				            </div>
-				            <div class="formelement" wicket:id="moderatorContainer">
+				            <div class="formelement" wicket:id="moderatorContainer">
 								<table class="adminListTableSmall">
 									<thead>
 										<tr>
@@ -228,7 +228,7 @@
 												<td class="three_column_layout_column2"><div class="three_column_layout_divcolumn2"><span wicket:id="userId"></span></div></td>
 												<td class="three_column_layout_column3"><div class="three_column_layout_divcolumn3"><span wicket:id="uName"></span></div></td>
 												<td class="three_column_layout_column4"><div class="three_column_layout_divcolumn4" style="overflow: hidden;"><span wicket:id="email"></span></div></td>
-						                        <td style="width: 50px"><div style="width: 50px"><div class="formCancelButton" wicket:id="delete" wicket:message="title:274"><input/></div></div></td>
+						                        <td style="width: 50px"><div style="width: 50px"><div class="formCancelButton" wicket:id="delete" wicket:message="title:274"></div></div></td>
 											</tr>
 										</tbody>
 									</table>

Added: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html?rev=1707605&view=auto
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html (added)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.html Thu Oct  8 19:05:16 2015
@@ -0,0 +1,26 @@
+<?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:wicket="http://wicket.apache.org">
+<wicket:border>
+	<wicket:body/>
+	<form wicket:id="form" style="display: inline;"><div wicket:id="dialog"></div></form>
+</wicket:border>
+</html>

Copied: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java (from r1706187, openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java)
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java?p2=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java&p1=openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java&r1=1706187&r2=1707605&rev=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxLink.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/ConfirmableAjaxBorder.java Thu Oct  8 19:05:16 2015
@@ -18,22 +18,116 @@
  */
 package org.apache.openmeetings.web.common;
 
-import org.apache.wicket.ajax.attributes.AjaxRequestAttributes;
-import org.apache.wicket.ajax.markup.html.AjaxLink;
+import org.apache.wicket.ajax.AjaxEventBehavior;
+import org.apache.wicket.ajax.AjaxRequestTarget;
+import org.apache.wicket.markup.html.border.Border;
+import org.apache.wicket.markup.html.form.Form;
+import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
 
-public abstract class ConfirmableAjaxLink extends AjaxLink<Void> {
+import com.googlecode.wicket.jquery.ui.widget.dialog.AbstractFormDialog;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButton;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogButtons;
+import com.googlecode.wicket.jquery.ui.widget.dialog.DialogIcon;
+import com.googlecode.wicket.jquery.ui.widget.dialog.MessageFormDialog;
+
+public abstract class ConfirmableAjaxBorder extends Border {
 	private static final long serialVersionUID = 1L;
-	private long confirmId;
+	private final Form<?> form = new Form<>("form");
+	private final Form<?> userForm;
+	private final IModel<String> title;
+	private final IModel<String> message;
 
-	public ConfirmableAjaxLink(String id, long confirmId) {
-		super(id);
-		this.confirmId = confirmId;
+	public ConfirmableAjaxBorder(String id, String title, String message) {
+		this(id, Model.of(title), Model.of(message), null);
+	}
+	
+	public ConfirmableAjaxBorder(String id, String title, String message, Form<?> form) {
+		this(id, Model.of(title), Model.of(message), form);
+	}
+	
+	public ConfirmableAjaxBorder(String id, IModel<String> title, IModel<String> message, Form<?> form) {
+		super(id, message);
+		this.title = title;
+		this.message = message;
+		this.userForm = form;
 		setOutputMarkupId(true);
 	}
 
 	@Override
-	protected void updateAjaxAttributes(AjaxRequestAttributes attributes) {
-		super.updateAjaxAttributes(attributes);
-		attributes.getAjaxCallListeners().add(new ConfirmCallListener(confirmId, "hideBusyIndicator();"));
+	protected void onInitialize() {
+		super.onInitialize();
+		final AbstractFormDialog<?> dialog = newFormDialog("dialog", title, message);
+		add(new AjaxEventBehavior("click") {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected void onEvent(AjaxRequestTarget target) {
+				dialog.open(target);
+			}
+		});
+		addToBorder(form.add(dialog));
+	}
+
+	/**
+	 * Triggered when the form is submitted, but the validation failed
+	 *
+	 * @param target the {@link AjaxRequestTarget}
+	 * @param form the {@link Form}
+	 */
+	protected void onError(AjaxRequestTarget target, Form<?> form) {
+	}
+
+	/**
+	 * Triggered when the form is submitted, and the validation succeed
+	 *
+	 * @param target the {@link AjaxRequestTarget}
+	 * @param form the {@link Form}
+	 */
+	protected abstract void onSubmit(AjaxRequestTarget target, Form<?> form);
+
+	// Factories //
+
+	/**
+	 * Create the dialog instance<br/>
+	 * <b>Warning:</b> to be overridden with care!
+	 *
+	 * @param id the markupId
+	 * @param title the title of the dialog
+	 * @param message the message to be displayed
+	 * @return the dialog instance
+	 */
+	protected AbstractFormDialog<?> newFormDialog(String id, IModel<String> title, IModel<String> message) {
+		return new MessageFormDialog(id, title, message, DialogButtons.OK_CANCEL, DialogIcon.WARN) {
+			private static final long serialVersionUID = 1L;
+
+			@Override
+			protected DialogButton getSubmitButton() {
+				return this.findButton(OK);
+			}
+
+			@Override
+			public Form<?> getForm() {
+				return userForm == null ? form : userForm;
+			}
+
+			@Override
+			protected void onError(AjaxRequestTarget target) {
+				super.close(target, null); // closes the dialog on error.
+				ConfirmableAjaxBorder.this.onError(target, this.getForm());
+			}
+
+			@Override
+			protected void onSubmit(AjaxRequestTarget target) {
+				ConfirmableAjaxBorder.this.onSubmit(target, this.getForm());
+			}
+		};
+	}
+	
+	@Override
+	protected void onDetach() {
+		super.onDetach();
+		title.detach();
+		message.detach();
 	}
 }

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/common/tree/FileTreePanel.java Thu Oct  8 19:05:16 2015
@@ -31,13 +31,14 @@ import org.apache.openmeetings.db.entity
 import org.apache.openmeetings.db.entity.record.Recording;
 import org.apache.openmeetings.web.app.Application;
 import org.apache.openmeetings.web.common.AddFolderDialog;
-import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.wicket.Component;
 import org.apache.wicket.ajax.AjaxEventBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.ajax.AjaxSelfUpdatingTimerBehavior;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.markup.repeater.RepeatingView;
 import org.apache.wicket.model.CompoundPropertyModel;
@@ -109,11 +110,11 @@ public abstract class FileTreePanel exte
 				target.add(trees); //FIXME add correct refresh
 			}
 		}));
-		trashToolbar.add(new ConfirmableAjaxLink("trash", 713) {
+		trashToolbar.add(new ConfirmableAjaxBorder("trash", getString("80"), getString("713")) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target) {
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 				delete(selectedFile.getObject(), target);
 			}
 		});

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.html Thu Oct  8 19:05:16 2015
@@ -44,7 +44,7 @@
 		<div wicket:id="topLinks"><span 
 			id="contactsAndMessages"><a wicket:id="messages"><wicket:message key="1188"/></a></span><span 
 			id="profile"><a wicket:id="profile"><wicket:message key="5"/></a></span><span 
-			id="logout"><a wicket:id="logout"><wicket:message key="310"/></a></span><span 
+			id="logout"><a wicket:id="logout" href="#"><wicket:message key="310"/></a></span><span 
 			id="reportBug"><a target="_blank" wicket:id="bug"><wicket:message key="284"/></a></span><span><a 
 			wicket:id="about"><wicket:message key="1549"/></a></span>
 		</div>

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/java/org/apache/openmeetings/web/pages/MainPage.java Thu Oct  8 19:05:16 2015
@@ -39,7 +39,7 @@ import org.apache.openmeetings.web.app.A
 import org.apache.openmeetings.web.app.Client;
 import org.apache.openmeetings.web.app.WebSession;
 import org.apache.openmeetings.web.common.BasePanel;
-import org.apache.openmeetings.web.common.ConfirmableAjaxLink;
+import org.apache.openmeetings.web.common.ConfirmableAjaxBorder;
 import org.apache.openmeetings.web.common.menu.MainMenuItem;
 import org.apache.openmeetings.web.common.menu.MenuItem;
 import org.apache.openmeetings.web.common.menu.MenuPanel;
@@ -57,6 +57,7 @@ import org.apache.wicket.authroles.autho
 import org.apache.wicket.core.request.handler.IPartialPageRequestHandler;
 import org.apache.wicket.devutils.debugbar.DebugBar;
 import org.apache.wicket.markup.html.WebMarkupContainer;
+import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.link.ExternalLink;
 import org.apache.wicket.markup.html.panel.EmptyPanel;
 import org.apache.wicket.protocol.ws.api.WebSocketBehavior;
@@ -95,11 +96,11 @@ public class MainPage extends BaseInited
 				updateContents(PROFILE_MESSAGES, target);
 			}
 		});
-		topLinks.add(new ConfirmableAjaxLink("logout", 634L) {
+		topLinks.add(new ConfirmableAjaxBorder("logout", getString("310"), getString("634")) {
 			private static final long serialVersionUID = 1L;
 
 			@Override
-			public void onClick(AjaxRequestTarget target) {
+			protected void onSubmit(AjaxRequestTarget target, Form<?> form) {
 				getSession().invalidate();
 				setResponsePage(Application.get().getSignInPageClass());
 			}

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/forms.css
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/forms.css?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/forms.css (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/forms.css Thu Oct  8 19:05:16 2015
@@ -65,8 +65,9 @@ div.formRefreshButton input {
 	margin-top: 2px;
 }
 
-div.formCancelButton input {
+div.formCancelButton div {
 	background: url(images/forms/cancel_icon.png) no-repeat;
+	display: inline-block;
 	float: left;
 	cursor: pointer;
 	width: 18px;

Modified: openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css
URL: http://svn.apache.org/viewvc/openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css?rev=1707605&r1=1707604&r2=1707605&view=diff
==============================================================================
--- openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css (original)
+++ openmeetings/trunk/singlewebapp/openmeetings-web/src/main/webapp/css/theme.css Thu Oct  8 19:05:16 2015
@@ -40,6 +40,7 @@ html, body {
 	padding-right: 5px;
 	padding-left: 5px;
 	border-right: 1px solid black;
+	white-space: nowrap;
 }
 
 #topLinks span:last-child {