From 2a189307eb0a6693a8d64b62e3845ca87c58d1eb Mon Sep 17 00:00:00 2001
From: ftimme <ft@falkotimme.com>
Date: Fri, 18 May 2012 12:34:18 +0000
Subject: [PATCH] - Added "Repeat Password" field to all forms where a password
 has to be set.

---
 interface/web/admin/lib/lang/de_remote_user.lng |  3 +++
 interface/web/admin/lib/lang/de_users.lng       |  3 +++
 interface/web/admin/lib/lang/en_remote_user.lng |  3 +++
 interface/web/admin/lib/lang/en_users.lng       |  3 +++
 .../web/admin/templates/remote_user_edit.htm    |  8 +++++++-
 .../web/admin/templates/users_user_edit.htm     |  8 +++++++-
 interface/web/client/lib/lang/de_client.lng     |  3 +++
 interface/web/client/lib/lang/de_reseller.lng   |  3 +++
 interface/web/client/lib/lang/en_client.lng     |  3 +++
 interface/web/client/lib/lang/en_reseller.lng   |  3 +++
 .../client/templates/client_edit_address.htm    |  8 +++++++-
 .../client/templates/reseller_edit_address.htm  |  8 +++++++-
 interface/web/js/scrigo.js.php                  | 17 +++++++++++++++++
 .../web/mail/lib/lang/de_mail_mailinglist.lng   |  3 +++
 interface/web/mail/lib/lang/de_mail_user.lng    |  7 +++++--
 .../web/mail/lib/lang/en_mail_mailinglist.lng   |  3 +++
 interface/web/mail/lib/lang/en_mail_user.lng    |  3 +++
 .../mail/templates/mail_mailinglist_edit.htm    |  8 +++++++-
 .../mail/templates/mail_user_mailbox_edit.htm   |  8 +++++++-
 .../mailuser/lib/lang/en_mail_user_password.lng |  4 ++++
 .../templates/mail_user_password_edit.htm       |  8 +++++++-
 interface/web/sites/lib/lang/de_database.lng    |  2 ++
 interface/web/sites/lib/lang/de_ftp_user.lng    |  3 +++
 interface/web/sites/lib/lang/de_shell_user.lng  |  3 +++
 interface/web/sites/lib/lang/de_web_domain.lng  |  3 +++
 .../web/sites/lib/lang/de_web_folder_user.lng   |  3 +++
 interface/web/sites/lib/lang/de_webdav_user.lng |  3 +++
 interface/web/sites/lib/lang/en_database.lng    |  3 +++
 interface/web/sites/lib/lang/en_ftp_user.lng    |  3 +++
 interface/web/sites/lib/lang/en_shell_user.lng  |  3 +++
 interface/web/sites/lib/lang/en_web_domain.lng  |  3 +++
 .../web/sites/lib/lang/en_web_folder_user.lng   |  3 +++
 interface/web/sites/lib/lang/en_webdav_user.lng |  3 +++
 interface/web/sites/templates/database_edit.htm |  8 +++++++-
 interface/web/sites/templates/ftp_user_edit.htm |  8 +++++++-
 .../web/sites/templates/shell_user_edit.htm     |  8 +++++++-
 .../web/sites/templates/web_domain_stats.htm    |  8 +++++++-
 .../sites/templates/web_folder_user_edit.htm    |  8 +++++++-
 .../web/sites/templates/webdav_user_edit.htm    |  8 +++++++-
 .../web/themes/default/css/screen/uni-form.css  |  4 ++--
 .../web/tools/lib/lang/de_usersettings.lng      |  3 +++
 .../web/tools/lib/lang/en_usersettings.lng      |  3 +++
 interface/web/tools/templates/user_settings.htm | 12 +++++++-----
 interface/web/tools/user_settings.php           |  2 +-
 interface/web/vm/lib/lang/de_openvz_vm.lng      |  1 -
 interface/web/vm/lib/lang/en_openvz_vm.lng      |  1 -
 interface/web/vm/templates/openvz_vm_edit.htm   |  2 +-
 47 files changed, 202 insertions(+), 26 deletions(-)

diff --git a/interface/web/admin/lib/lang/de_remote_user.lng b/interface/web/admin/lib/lang/de_remote_user.lng
index 3bf7e62197..036eda2c69 100644
--- a/interface/web/admin/lib/lang/de_remote_user.lng
+++ b/interface/web/admin/lib/lang/de_remote_user.lng
@@ -41,4 +41,7 @@ $wb['DNS srv functions'] = 'DNS srv Funktionen';
 $wb['DNS txt functions'] = 'DNS txt Funktionen';
 $wb['Mail mailing list functions'] = 'Mail mailinglist functions';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
+$wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 ?>
diff --git a/interface/web/admin/lib/lang/de_users.lng b/interface/web/admin/lib/lang/de_users.lng
index 6145d1f6a8..1ead952e53 100644
--- a/interface/web/admin/lib/lang/de_users.lng
+++ b/interface/web/admin/lib/lang/de_users.lng
@@ -26,4 +26,7 @@ $wb['username_unique'] = 'Es gibt bereits einen Benutzer mit diesem Namen';
 $wb['startmodule_err'] = 'Start Modul ist nicht innerhalb der Module.';
 $wb['password_strength_txt'] = 'Passwortkomplexität';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
+$wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 ?>
diff --git a/interface/web/admin/lib/lang/en_remote_user.lng b/interface/web/admin/lib/lang/en_remote_user.lng
index 6883c11deb..c488f65516 100644
--- a/interface/web/admin/lib/lang/en_remote_user.lng
+++ b/interface/web/admin/lib/lang/en_remote_user.lng
@@ -41,4 +41,7 @@ $wb['DNS rp functions'] = 'DNS rp functions';
 $wb['DNS srv functions'] = 'DNS srv functions';
 $wb['DNS txt functions'] = 'DNS txt functions';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
diff --git a/interface/web/admin/lib/lang/en_users.lng b/interface/web/admin/lib/lang/en_users.lng
index 573f18a67b..c6a418e0f3 100644
--- a/interface/web/admin/lib/lang/en_users.lng
+++ b/interface/web/admin/lib/lang/en_users.lng
@@ -26,4 +26,7 @@ $wb["groups_txt"] = 'Groups';
 $wb["default_group_txt"] = 'Default Group';
 $wb["startmodule_err"] = 'Start module is not within modules.';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
diff --git a/interface/web/admin/templates/remote_user_edit.htm b/interface/web/admin/templates/remote_user_edit.htm
index 945a297148..6aa3a31b39 100644
--- a/interface/web/admin/templates/remote_user_edit.htm
+++ b/interface/web/admin/templates/remote_user_edit.htm
@@ -13,13 +13,19 @@
 
       <div class="ctrlHolder">
       	<label for="remote_password">{tmpl_var name='password_txt'}</label>
-        <input name="remote_password" id="password" value="{tmpl_var name='remote_password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="remote_password" id="password" value="{tmpl_var name='remote_password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
 			</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
 				<div id="passBar"></div>
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 			</div>
+		<div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
        	 <div class="ctrlHolder">
             <p class="label">{tmpl_var name='function_txt'}</p>
             <div class="multiField">
diff --git a/interface/web/admin/templates/users_user_edit.htm b/interface/web/admin/templates/users_user_edit.htm
index 40622ef255..fffb766bbb 100644
--- a/interface/web/admin/templates/users_user_edit.htm
+++ b/interface/web/admin/templates/users_user_edit.htm
@@ -11,13 +11,19 @@
 			</div>
       <div class="ctrlHolder">
       	<label for="passwort">{tmpl_var name='passwort_txt'}</label>
-        <input name="passwort" id="passwort" value="{tmpl_var name='passwort'}" size="15" maxlength="100" type="password" class="textInput"  onkeyup="pass_check(this.value)"/>&nbsp;<a href="javascript:void(0);" onClick="generatePassword('passwort');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="passwort" id="passwort" value="{tmpl_var name='passwort'}" size="15" maxlength="100" type="password" class="textInput"  onkeyup="pass_check(this.value);checkPassMatch('passwort','repeat_password');"/>&nbsp;<a href="javascript:void(0);" onClick="generatePassword('passwort');">{tmpl_var name='generate_password_txt'}</a>
 			</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
 				<div id="passBar"></div>
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 			</div>
+		<div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('passwort','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='modules_txt'}</p>
 					<div class="multiField">
diff --git a/interface/web/client/lib/lang/de_client.lng b/interface/web/client/lib/lang/de_client.lng
index 88adbff4b8..d2b5201db9 100644
--- a/interface/web/client/lib/lang/de_client.lng
+++ b/interface/web/client/lib/lang/de_client.lng
@@ -119,4 +119,7 @@ $wb["cron_job_limits_txt"] = 'Cron Job-Limits';
 $wb["dns_limits_txt"] = 'DNS-Limits';
 $wb["virtualization_limits_txt"] = 'Virtualisierungs-Limits';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
+$wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 ?>
diff --git a/interface/web/client/lib/lang/de_reseller.lng b/interface/web/client/lib/lang/de_reseller.lng
index e938cde186..8fe5e42648 100644
--- a/interface/web/client/lib/lang/de_reseller.lng
+++ b/interface/web/client/lib/lang/de_reseller.lng
@@ -114,4 +114,7 @@ $wb["cron_job_limits_txt"] = 'Cron Job-Limits';
 $wb["dns_limits_txt"] = 'DNS-Limits';
 $wb["virtualization_limits_txt"] = 'Virtualisierungs-Limits';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
+$wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 ?>
diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng
index d8b3c2c88c..d809fcb642 100644
--- a/interface/web/client/lib/lang/en_client.lng
+++ b/interface/web/client/lib/lang/en_client.lng
@@ -122,4 +122,7 @@ $wb["cron_job_limits_txt"] = 'Cron Job Limits';
 $wb["dns_limits_txt"] = 'DNS Limits';
 $wb["virtualization_limits_txt"] = 'Virtualization Limits';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
diff --git a/interface/web/client/lib/lang/en_reseller.lng b/interface/web/client/lib/lang/en_reseller.lng
index ba2e7bbdd0..433721605e 100644
--- a/interface/web/client/lib/lang/en_reseller.lng
+++ b/interface/web/client/lib/lang/en_reseller.lng
@@ -116,4 +116,7 @@ $wb["cron_job_limits_txt"] = 'Cron Job Limits';
 $wb["dns_limits_txt"] = 'DNS Limits';
 $wb["virtualization_limits_txt"] = 'Virtualization Limits';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
diff --git a/interface/web/client/templates/client_edit_address.htm b/interface/web/client/templates/client_edit_address.htm
index 5799d863da..2c37a97df8 100644
--- a/interface/web/client/templates/client_edit_address.htm
+++ b/interface/web/client/templates/client_edit_address.htm
@@ -23,13 +23,19 @@
 			</div>
       <div class="ctrlHolder">
       	<label for="password">{tmpl_var name='password_txt'}</label>
-        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
 			</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
 				<div id="passBar"></div>
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 			</div>
+		<div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
       <div class="ctrlHolder">
       	<label for="language">{tmpl_var name='language_txt'}</label>
         <select name="language" id="language" class="selectInput withicons">
diff --git a/interface/web/client/templates/reseller_edit_address.htm b/interface/web/client/templates/reseller_edit_address.htm
index 0458aa8d30..bccb22f93c 100644
--- a/interface/web/client/templates/reseller_edit_address.htm
+++ b/interface/web/client/templates/reseller_edit_address.htm
@@ -23,13 +23,19 @@
 			</div>
       <div class="ctrlHolder">
       	<label for="password">{tmpl_var name='password_txt'}</label>
-        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
 			</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
 				<div id="passBar"></div>
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 			</div>
+		<div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
       <div class="ctrlHolder">
       	<label for="language">{tmpl_var name='language_txt'}</label>
         <select name="language" id="language" class="selectInput withicons">
diff --git a/interface/web/js/scrigo.js.php b/interface/web/js/scrigo.js.php
index cc6a80f9d6..7e01c7d236 100644
--- a/interface/web/js/scrigo.js.php
+++ b/interface/web/js/scrigo.js.php
@@ -558,6 +558,23 @@ function generatePassword(passwordFieldID){
 	newPWField.attr('id', passwordFieldID).val(password(10, true)).trigger('keyup');
 }
 
+function checkPassMatch(pwField1,pwField2){
+    var rpass = jQuery('#'+pwField2).val();
+    var npass = jQuery('#'+pwField1).val();
+    if(npass!= rpass) {
+		jQuery('#confirmpasswordOK').hide();
+        jQuery('#confirmpasswordError').show();
+		jQuery('button.positive').attr('disabled','disabled');
+		jQuery('.tabbox_tabs ul li a').attr('onclick','return false;');
+        return false;
+    } else {
+		jQuery('#confirmpasswordError').hide();
+        jQuery('#confirmpasswordOK').show();
+		jQuery('button.positive').removeAttr('disabled');
+		jQuery('.tabbox_tabs ul li a').removeAttr('onclick');
+    }
+}
+
 function getRandomInt(min, max){
     return Math.floor(Math.random() * (max - min + 1)) + min;
 }
diff --git a/interface/web/mail/lib/lang/de_mail_mailinglist.lng b/interface/web/mail/lib/lang/de_mail_mailinglist.lng
index b9dbb7def0..460d4f8670 100644
--- a/interface/web/mail/lib/lang/de_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/de_mail_mailinglist.lng
@@ -13,4 +13,7 @@ $wb['client_txt'] = 'Client';
 $wb['email_txt'] = 'Email';
 $wb['password_txt'] = 'Password';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passw&ouml;rter stimmen nicht &uuml;berein.';
+$wb['password_match_txt'] = 'Die Passw&ouml;rter stimmen &uuml;berein.';
 ?>
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index a85637bdb8..38cfc9c53c 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -32,7 +32,7 @@ $wb['autoresponder_end_date_isgreater'] = 'Enddatum muss angegeben werden und mu
 $wb['move_junk_txt'] = 'Spam E-Mails in den Junk Ordner verschieben';
 $wb['name_txt'] = 'Name';
 $wb['name_optional_txt'] = '(optional)';
-$wb['autoresponder_active'] = 'Enable the autoresponder';
+$wb['autoresponder_active'] = 'Autoresponder aktivieren';
 $wb['cc_txt'] = 'Send copy to';
 $wb['cc_error_isemail'] = 'The Send copy to field does not conatin a valid email address';
 $wb['login_error_unique'] = 'Login wird bereits verwendet.';
@@ -40,6 +40,9 @@ $wb['login_error_regex'] = 'Zulässige Zeichen sind A-Z, a-z, 0-9, ., _ und -.';
 $wb['login_txt'] = 'Login';
 $wb['error_login_email_txt'] = 'Dieser Loginname ist nicht zulässig. Bitte verwenden Sie einen anderen Loginnamen oder die E-Mail-Adresse als Login.';
 $wb['domain_txt'] = 'Domain';
-$wb['now_txt'] = 'Now';
+$wb['now_txt'] = 'Jetzt';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passw&ouml;rter stimmen nicht &uuml;berein.';
+$wb['password_match_txt'] = 'Die Passw&ouml;rter stimmen &uuml;berein.';
 ?>
diff --git a/interface/web/mail/lib/lang/en_mail_mailinglist.lng b/interface/web/mail/lib/lang/en_mail_mailinglist.lng
index 57c6fbb1b5..d42c71be4c 100644
--- a/interface/web/mail/lib/lang/en_mail_mailinglist.lng
+++ b/interface/web/mail/lib/lang/en_mail_mailinglist.lng
@@ -13,4 +13,7 @@ $wb["client_txt"] = 'Client';
 $wb["email_txt"] = 'Email';
 $wb["password_txt"] = 'Password';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
\ No newline at end of file
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index b154973435..f180deea83 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -44,4 +44,7 @@ $wb['login_error_regex'] = 'Valid characters are A-Z, a-z, 0-9, ., _ and -.';
 $wb['login_txt'] = 'Login';
 $wb['error_login_email_txt'] = 'This login is not allowed. Please enter a different login or use the mail address as login.';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
diff --git a/interface/web/mail/templates/mail_mailinglist_edit.htm b/interface/web/mail/templates/mail_mailinglist_edit.htm
index 5072240238..b7f31ef8d9 100644
--- a/interface/web/mail/templates/mail_mailinglist_edit.htm
+++ b/interface/web/mail/templates/mail_mailinglist_edit.htm
@@ -60,13 +60,19 @@
 		</tmpl_if>
 		<div class="ctrlHolder">
 			<label for="password">{tmpl_var name='password_txt'}</label>
-			<input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
+			<input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
 		</div>
 		<div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
 				<div id="passBar"></div>
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 			</div>
+		<div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
     </fieldset>
 
     <input type="hidden" name="id" value="{tmpl_var name='id'}">
diff --git a/interface/web/mail/templates/mail_user_mailbox_edit.htm b/interface/web/mail/templates/mail_user_mailbox_edit.htm
index 9a89f1e7fd..0bc7d87d0d 100644
--- a/interface/web/mail/templates/mail_user_mailbox_edit.htm
+++ b/interface/web/mail/templates/mail_user_mailbox_edit.htm
@@ -23,13 +23,19 @@
       </div></tmpl_if>
       <div class="ctrlHolder">
       	<label for="password">{tmpl_var name='password_txt'}</label>
-        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
 			</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
 				<div id="passBar"></div>
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 			</div>
+		<div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
 			<div class="ctrlHolder">
       	<label for="quota">{tmpl_var name='quota_txt'}</label>
         <input name="quota" id="quota" value="{tmpl_var name='quota'}" size="30" maxlength="255" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;MB</p>
diff --git a/interface/web/mailuser/lib/lang/en_mail_user_password.lng b/interface/web/mailuser/lib/lang/en_mail_user_password.lng
index 77e68419d3..43c114a81c 100644
--- a/interface/web/mailuser/lib/lang/en_mail_user_password.lng
+++ b/interface/web/mailuser/lib/lang/en_mail_user_password.lng
@@ -3,4 +3,8 @@ $wb["mailbox_password_txt"] = 'Mailbox password';
 $wb["password_txt"] = 'Password';
 $wb["password_strength_txt"] = 'Password strength';
 $wb["email_txt"] = 'Email';
+$wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
\ No newline at end of file
diff --git a/interface/web/mailuser/templates/mail_user_password_edit.htm b/interface/web/mailuser/templates/mail_user_password_edit.htm
index c8f5ba9b82..ed1d7ce757 100644
--- a/interface/web/mailuser/templates/mail_user_password_edit.htm
+++ b/interface/web/mailuser/templates/mail_user_password_edit.htm
@@ -11,13 +11,19 @@
 	  </div>
 	  <div class="ctrlHolder">
       	<label for="password">{tmpl_var name='password_txt'}</label>
-        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />
+        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
 	  </div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
 				<div id="passBar"></div>
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 	  </div>
+	  <div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
     </fieldset>
 
     <input type="hidden" name="id" value="{tmpl_var name='id'}">
diff --git a/interface/web/sites/lib/lang/de_database.lng b/interface/web/sites/lib/lang/de_database.lng
index dce54bb3c1..778346eb1e 100644
--- a/interface/web/sites/lib/lang/de_database.lng
+++ b/interface/web/sites/lib/lang/de_database.lng
@@ -23,4 +23,6 @@ $wb['password_strength_txt'] = 'Passwortkomplexität';
 $wb['database_name_error_len'] = 'Datenbank Name - {db} - zu lang. Die max. Datenbank Namen Länge inkl. Präfix ist 64 Zeichen.';
 $wb['database_user_error_len'] = 'Datenbank Benutzername - {user}- zu lang. Die max. Datenbank Benutzernamen Länge inkl. Präfix ist 16 Zeichen.';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb["btn_save_txt"] = 'Speichern';
+$wb["btn_cancel_txt"] = 'Abbrechen';
 ?>
diff --git a/interface/web/sites/lib/lang/de_ftp_user.lng b/interface/web/sites/lib/lang/de_ftp_user.lng
index 13af049247..c977b658f2 100644
--- a/interface/web/sites/lib/lang/de_ftp_user.lng
+++ b/interface/web/sites/lib/lang/de_ftp_user.lng
@@ -28,4 +28,7 @@ $wb['quota_size_error_regex'] = 'Quota: Geben Sie -1 ein für unlimitiert oder e
 $wb['dir_dot_error'] = 'Kein .. im Pfad erlaubt.';
 $wb['dir_slashdot_error'] = 'Kein ./ im Pfad erlaubt.';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
+$wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 ?>
diff --git a/interface/web/sites/lib/lang/de_shell_user.lng b/interface/web/sites/lib/lang/de_shell_user.lng
index fb0a330388..ccf204b76c 100644
--- a/interface/web/sites/lib/lang/de_shell_user.lng
+++ b/interface/web/sites/lib/lang/de_shell_user.lng
@@ -23,4 +23,7 @@ $wb['ssh_rsa_txt'] = 'SSH-RSA Public Key (f&uuml;r key-basierte Logins)';
 $wb['dir_dot_error'] = 'Kein .. im Pfad erlaubt.';
 $wb['dir_slashdot_error'] = 'Kein ./ im Pfad erlaubt.';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
+$wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_domain.lng b/interface/web/sites/lib/lang/de_web_domain.lng
index 4fb8bed331..15d7d1987c 100644
--- a/interface/web/sites/lib/lang/de_web_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_domain.lng
@@ -99,4 +99,7 @@ $wb["pm_process_idle_timeout_error_regex"] = 'PHP-FPM pm.process_idle_timeout mu
 $wb["pm_max_requests_error_regex"] = 'PHP-FPM pm.max_requests mu&szlig; eine ganze Zahl >= 0 sein.';
 $wb["pm_ondemand_hint_txt"] = 'Bitte beachten Sie, daß Ihre PHP-Version >= 5.3.9 sein muß, wenn Sie den ondemand Process-Manager nutzen möchten. Wenn Sie ondemand für eine ältere PHP-Version auswählen, wird PHP nicht mehr starten!';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
+$wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_folder_user.lng b/interface/web/sites/lib/lang/de_web_folder_user.lng
index e53e007331..1bea0dc86e 100644
--- a/interface/web/sites/lib/lang/de_web_folder_user.lng
+++ b/interface/web/sites/lib/lang/de_web_folder_user.lng
@@ -5,4 +5,7 @@ $wb['password_txt'] = 'Passwort';
 $wb['active_txt'] = 'Aktiv';
 $wb['folder_error_empty'] = 'Kein Web-Ordner ausgewählt.';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
+$wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 ?>
diff --git a/interface/web/sites/lib/lang/de_webdav_user.lng b/interface/web/sites/lib/lang/de_webdav_user.lng
index e698775566..6eef2e7ba0 100644
--- a/interface/web/sites/lib/lang/de_webdav_user.lng
+++ b/interface/web/sites/lib/lang/de_webdav_user.lng
@@ -15,4 +15,7 @@ $wb['parent_domain_id_error_empty'] = 'Keine Website ausgewählt.';
 $wb['dir_dot_error'] = 'Kein .. im Pfad erlaubt.';
 $wb['dir_slashdot_error'] = 'Kein ./ im Pfad erlaubt.';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passwörter stimmen nicht überein.';
+$wb['password_match_txt'] = 'Die Passwörter stimmen überein.';
 ?>
diff --git a/interface/web/sites/lib/lang/en_database.lng b/interface/web/sites/lib/lang/en_database.lng
index 8c12d11018..3d21df9d0e 100644
--- a/interface/web/sites/lib/lang/en_database.lng
+++ b/interface/web/sites/lib/lang/en_database.lng
@@ -28,4 +28,7 @@ $wb["select_site_txt"] = '- Select Site -';
 $wb["btn_save_txt"] = 'Save';
 $wb["btn_cancel_txt"] = 'Cancel';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
diff --git a/interface/web/sites/lib/lang/en_ftp_user.lng b/interface/web/sites/lib/lang/en_ftp_user.lng
index 580f8294d4..a515cf843c 100644
--- a/interface/web/sites/lib/lang/en_ftp_user.lng
+++ b/interface/web/sites/lib/lang/en_ftp_user.lng
@@ -29,4 +29,7 @@ $wb["quota_size_error_regex"] = 'Quota: enter a -1 for unlimited or a number > 0
 $wb['dir_dot_error'] = 'No .. in path allowed.';
 $wb['dir_slashdot_error'] = 'No ./ in path allowed.';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
diff --git a/interface/web/sites/lib/lang/en_shell_user.lng b/interface/web/sites/lib/lang/en_shell_user.lng
index 1f7d61e406..296019a7da 100644
--- a/interface/web/sites/lib/lang/en_shell_user.lng
+++ b/interface/web/sites/lib/lang/en_shell_user.lng
@@ -24,4 +24,7 @@ $wb["ssh_rsa_txt"] = 'SSH-RSA Public Key (for key-based logins)';
 $wb['dir_dot_error'] = 'No .. in path allowed.';
 $wb['dir_slashdot_error'] = 'No ./ in path allowed.';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
diff --git a/interface/web/sites/lib/lang/en_web_domain.lng b/interface/web/sites/lib/lang/en_web_domain.lng
index a6169ce909..49a38d1856 100644
--- a/interface/web/sites/lib/lang/en_web_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_domain.lng
@@ -99,4 +99,7 @@ $wb["pm_process_idle_timeout_error_regex"] = 'PHP-FPM pm.process_idle_timeout mu
 $wb["pm_max_requests_error_regex"] = 'PHP-FPM pm.max_requests must be an integer value >= 0.';
 $wb["pm_ondemand_hint_txt"] = 'Please note that you must have PHP version >= 5.3.9 in order to use the ondemand process manager. If you select ondemand for an older PHP version, PHP will not start anymore!';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_web_folder_user.lng b/interface/web/sites/lib/lang/en_web_folder_user.lng
index 684c0e92f0..c2a67105e1 100644
--- a/interface/web/sites/lib/lang/en_web_folder_user.lng
+++ b/interface/web/sites/lib/lang/en_web_folder_user.lng
@@ -5,4 +5,7 @@ $wb["password_txt"] = 'Password';
 $wb["active_txt"] = 'Active';
 $wb["folder_error_empty"] = 'No web folder selecetd.';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_webdav_user.lng b/interface/web/sites/lib/lang/en_webdav_user.lng
index af84617f8b..099226c1cf 100644
--- a/interface/web/sites/lib/lang/en_webdav_user.lng
+++ b/interface/web/sites/lib/lang/en_webdav_user.lng
@@ -16,4 +16,7 @@ $wb['password_strength_txt'] = 'Password strength';
 $wb['dir_dot_error'] = 'No .. in path allowed.';
 $wb['dir_slashdot_error'] = 'No ./ in path allowed.';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
diff --git a/interface/web/sites/templates/database_edit.htm b/interface/web/sites/templates/database_edit.htm
index 9b0cd22eba..558e31110f 100644
--- a/interface/web/sites/templates/database_edit.htm
+++ b/interface/web/sites/templates/database_edit.htm
@@ -50,13 +50,19 @@
 			</div>
       <div class="ctrlHolder">
       	<label for="database_password">{tmpl_var name='database_password_txt'}</label>
-        <input name="database_password" id="database_password" value="{tmpl_var name='database_password'}" size="30" maxlength="255" type="password" class="textInput formLengthHalf" onkeyup="pass_check(this.value)" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('database_password');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="database_password" id="database_password" value="{tmpl_var name='database_password'}" size="30" maxlength="255" type="password" class="textInput formLengthHalf" onkeyup="pass_check(this.value);checkPassMatch('database_password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('database_password');">{tmpl_var name='generate_password_txt'}</a>
 			</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
 				<div id="passBar"></div>
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 			</div>
+		<div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('database_password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
       <div class="ctrlHolder">
 	    <tmpl_if name="edit_disabled">
 		<label for="database_charset_disabled">{tmpl_var name='database_charset_txt'}</label>
diff --git a/interface/web/sites/templates/ftp_user_edit.htm b/interface/web/sites/templates/ftp_user_edit.htm
index e07526fe2a..9f9c6b1d87 100644
--- a/interface/web/sites/templates/ftp_user_edit.htm
+++ b/interface/web/sites/templates/ftp_user_edit.htm
@@ -18,13 +18,19 @@
 			</div>
       <div class="ctrlHolder">
       	<label for="password">{tmpl_var name='password_txt'}</label>
-        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
 			</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
 				<div id="passBar"></div>
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 			</div>
+		<div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
       <div class="ctrlHolder">
       	<label for="quota_size">{tmpl_var name='quota_size_txt'}</label>
         <input name="quota_size" id="quota_size" value="{tmpl_var name='quota_size'}" size="7" maxlength="7" type="text" class="textInput formLengthLimit" /><p class="formInputUnity">&nbsp;MB</p>
diff --git a/interface/web/sites/templates/shell_user_edit.htm b/interface/web/sites/templates/shell_user_edit.htm
index 0f2bc11f3c..c138a8620e 100644
--- a/interface/web/sites/templates/shell_user_edit.htm
+++ b/interface/web/sites/templates/shell_user_edit.htm
@@ -26,13 +26,19 @@
 			</div>
       <div class="ctrlHolder">
       	<label for="password">{tmpl_var name='password_txt'}</label>
-        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)"/>&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');"/>&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
 			</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
 				<div id="passBar"></div>
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 			</div>
+		<div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
       <div class="ctrlHolder">
       	<label for="chroot">{tmpl_var name='chroot_txt'}</label>
         <select name="chroot" id="chroot" class="selectInput formLengthHalf">
diff --git a/interface/web/sites/templates/web_domain_stats.htm b/interface/web/sites/templates/web_domain_stats.htm
index 200cda24bf..7252a775f0 100644
--- a/interface/web/sites/templates/web_domain_stats.htm
+++ b/interface/web/sites/templates/web_domain_stats.htm
@@ -10,9 +10,15 @@
 	  </div>
 	  <div class="ctrlHolder">
       	<label for="stats_password">{tmpl_var name='stats_password_txt'}</label>
-        <input name="stats_password" id="stats_password" value="{tmpl_var name='stats_password'}" size="30" maxlength="255" type="password" class="textInput" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('stats_password');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="stats_password" id="stats_password" value="{tmpl_var name='stats_password'}" size="15" maxlength="100" type="password" class="textInput" style="width:100px;" onkeyup="checkPassMatch('stats_password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('stats_password');">{tmpl_var name='generate_password_txt'}</a>
 	  </div>
 	  <div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('stats_password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
+	  <div class="ctrlHolder">
       	<label for="stats_type">{tmpl_var name='stats_type_txt'}</label>
         <select name="stats_type" id="stats_type" class="selectInput" >
 		  {tmpl_var name='stats_type'}
diff --git a/interface/web/sites/templates/web_folder_user_edit.htm b/interface/web/sites/templates/web_folder_user_edit.htm
index f466e5252b..8908493498 100644
--- a/interface/web/sites/templates/web_folder_user_edit.htm
+++ b/interface/web/sites/templates/web_folder_user_edit.htm
@@ -17,8 +17,14 @@
 			</div>
       <div class="ctrlHolder">
       	<label for="password">{tmpl_var name='password_txt'}</label>
-        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="checkPassMatch('password','repeat_password');" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
 			</div>
+		<div class="ctrlHolder">
+			<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='active_txt'}</p>
 					<div class="multiField">
diff --git a/interface/web/sites/templates/webdav_user_edit.htm b/interface/web/sites/templates/webdav_user_edit.htm
index 5bd7f82a8b..0668d2ee67 100644
--- a/interface/web/sites/templates/webdav_user_edit.htm
+++ b/interface/web/sites/templates/webdav_user_edit.htm
@@ -26,7 +26,7 @@
 			</div>
 			<div class="ctrlHolder">
 				<label for="password">{tmpl_var name='password_txt'}</label>
-				<input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value)"/>&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
+				<input name="password" id="password" value="{tmpl_var name='password'}" size="30" maxlength="255" type="password" class="textInput" onkeyup="pass_check(this.value);checkPassMatch('password','repeat_password');"/>&nbsp;<a href="javascript:void(0);" onClick="generatePassword('password');">{tmpl_var name='generate_password_txt'}</a>
 			</div>
 			<div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
@@ -34,6 +34,12 @@
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 			</div>
 			<div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('password','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
+			<div class="ctrlHolder">
 				<p class="label">{tmpl_var name='active_txt'}</p>
 				<div class="multiField">
 						{tmpl_var name='active'}
diff --git a/interface/web/themes/default/css/screen/uni-form.css b/interface/web/themes/default/css/screen/uni-form.css
index e9e592fe6f..3411d56e4a 100644
--- a/interface/web/themes/default/css/screen/uni-form.css
+++ b/interface/web/themes/default/css/screen/uni-form.css
@@ -100,7 +100,7 @@
 .uniForm .col.last{ width: 39%; /* <- Required property */ float: right; clear: none; margin-right: 0; }
 
 /* Messages */
-.uniForm #errorMsg{ background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px; }
+.uniForm #errorMsg, .confirmpassworderror{ background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px; }
 .uniForm .error{ background: #ffdfdf; border: 1px solid #df7d7d; border-width: 1px 0; }
 
 .uniForm #errorMsg dt, .uniForm #errorMsg h3{ margin: 0 0 .5em 0; font-size: 100%; line-height: 100%; font-weight: bold; }
@@ -109,7 +109,7 @@
 .uniForm #errorMsg ol li{ margin: 0; padding: 2px; list-style-position: inside; border-bottom: 1px dotted #df7d7d; position: relative; }
 .uniForm .errorField{ color: #af4c4c; margin: 0 0 6px 0; padding: 4px; background: #ffbfbf; }
 
-.uniForm #OKMsg{ background: #C8FFBF; border: 1px solid #A2EF95; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px; }
+.uniForm #OKMsg, .confirmpasswordok{ background: #C8FFBF; border: 1px solid #A2EF95; border-width: 1px 0; margin: 1.5em 0 1.5em 0; padding: 7px; }
 .uniForm #OKMsg p{ margin: 0; }
 
 /*
diff --git a/interface/web/tools/lib/lang/de_usersettings.lng b/interface/web/tools/lib/lang/de_usersettings.lng
index 1b09f36758..5783680d82 100644
--- a/interface/web/tools/lib/lang/de_usersettings.lng
+++ b/interface/web/tools/lib/lang/de_usersettings.lng
@@ -6,4 +6,7 @@ $wb['password_strength_txt'] = 'Passwortkomplexit&auml;t';
 $wb['Form to edit the user password and language.'] = 'Formular, um das Benutzerpasswort und die Sprache zu bearbeiten.';
 $wb['Settings'] = 'Einstellungen';
 $wb['generate_password_txt'] = 'Passwort erzeugen';
+$wb['repeat_password_txt'] = 'Passwort wiederholen';
+$wb['password_mismatch_txt'] = 'Die Passw&ouml;rter stimmen nicht &uuml;berein.';
+$wb['password_match_txt'] = 'Die Passw&ouml;rter stimmen &uuml;berein.';
 ?>
diff --git a/interface/web/tools/lib/lang/en_usersettings.lng b/interface/web/tools/lib/lang/en_usersettings.lng
index f864944fdf..efbe6c38df 100644
--- a/interface/web/tools/lib/lang/en_usersettings.lng
+++ b/interface/web/tools/lib/lang/en_usersettings.lng
@@ -6,4 +6,7 @@ $wb["password_mismatch"] = 'The password in the second password field does not m
 $wb["Form to edit the user password and language."] = 'Form to edit the user password and language.';
 $wb["Settings"] = 'Settings';
 $wb['generate_password_txt'] = 'Generate Password';
+$wb['repeat_password_txt'] = 'Repeat Password';
+$wb['password_mismatch_txt'] = 'The passwords do not match.';
+$wb['password_match_txt'] = 'The passwords do match.';
 ?>
diff --git a/interface/web/tools/templates/user_settings.htm b/interface/web/tools/templates/user_settings.htm
index e7c0144793..773a0c3687 100644
--- a/interface/web/tools/templates/user_settings.htm
+++ b/interface/web/tools/templates/user_settings.htm
@@ -7,17 +7,19 @@
     <fieldset class="inlineLabels">
       <div class="ctrlHolder">
       	<label for="passwort">{tmpl_var name='passwort_txt'}</label>
-        <input name="passwort" id="passwort" value="{tmpl_var name='passwort'}" size="15" maxlength="100" type="password" class="textInput" onkeyup="pass_check(this.value)"/>&nbsp;<a href="javascript:void(0);" onClick="generatePassword('passwort');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="passwort" id="passwort" value="{tmpl_var name='passwort'}" size="15" maxlength="100" type="password" class="textInput" onkeyup="pass_check(this.value);checkPassMatch('passwort','repeat_password');"/>&nbsp;<a href="javascript:void(0);" onClick="generatePassword('passwort');">{tmpl_var name='generate_password_txt'}</a>
 			</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='password_strength_txt'}</p>
 				<div id="passBar"></div>
 				<p class="formHint"><span id="passText">&nbsp;</span></p>
 			</div>
-      <div class="ctrlHolder">
-      	<label for="passwort2">{tmpl_var name='passwort_txt'}</label>
-        <input name="passwort2" id="passwort2" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"/>
-			</div>
+		<div class="ctrlHolder">
+      	<label for="repeat_password">{tmpl_var name='repeat_password_txt'}</label>
+        <input name="repeat_password" id="repeat_password" value="" size="15" maxlength="100" type="password" class="textInput" style="width:100px;"  onkeyup="checkPassMatch('passwort','repeat_password');" />
+		</div>
+		<div id="confirmpasswordError" style="display:none;" class="confirmpassworderror">{tmpl_var name='password_mismatch_txt'}</div>
+		<div id="confirmpasswordOK" style="display:none;" class="confirmpasswordok">{tmpl_var name='password_match_txt'}</div>
       <div class="ctrlHolder">
       	<label for="language">{tmpl_var name='language_txt'}</label>
         <select name="language" id="language" class="selectInput withicons">
diff --git a/interface/web/tools/user_settings.php b/interface/web/tools/user_settings.php
index b67a1abb5c..70bbc69ff6 100644
--- a/interface/web/tools/user_settings.php
+++ b/interface/web/tools/user_settings.php
@@ -83,7 +83,7 @@ class page_action extends tform_actions {
 		
 		if($conf['demo_mode'] == true && $this->id <= 3) $app->tform->errorMessage .= 'This function is disabled in demo mode.';
 		
-		if($_POST['passwort'] != $_POST['passwort2']) {
+		if($_POST['passwort'] != $_POST['repeat_password']) {
 			$app->tform->errorMessage = $app->tform->lng('password_mismatch');
 		}
 		$_SESSION['s']['user']['language'] = $_POST['language'];
diff --git a/interface/web/vm/lib/lang/de_openvz_vm.lng b/interface/web/vm/lib/lang/de_openvz_vm.lng
index ee70a9834b..5880ce4cf3 100644
--- a/interface/web/vm/lib/lang/de_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/de_openvz_vm.lng
@@ -37,5 +37,4 @@ $wb['io_priority_error_empty'] = 'I/O Priorit&auml;t ist leer.';
 $wb['template_nameserver_error_empty'] = 'Nameserver ist leer.';
 $wb['Virtual server'] = 'Virtueller Server';
 $wb['Advanced'] = 'Erweitert';
-$wb['generate_password_txt'] = 'Passwort erzeugen';
 ?>
diff --git a/interface/web/vm/lib/lang/en_openvz_vm.lng b/interface/web/vm/lib/lang/en_openvz_vm.lng
index 1594fb4d4f..ddd9903ced 100644
--- a/interface/web/vm/lib/lang/en_openvz_vm.lng
+++ b/interface/web/vm/lib/lang/en_openvz_vm.lng
@@ -37,5 +37,4 @@ $wb["io_priority_error_empty"] = 'I/O priority is empty.';
 $wb["template_nameserver_error_empty"] = 'Nameserver(s) is empty.';
 $wb["Virtual server"] = 'Virtual server';
 $wb["Advanced"] = 'Advanced';
-$wb['generate_password_txt'] = 'Generate Password';
 ?>
\ No newline at end of file
diff --git a/interface/web/vm/templates/openvz_vm_edit.htm b/interface/web/vm/templates/openvz_vm_edit.htm
index 671fd7000a..c6615709c5 100644
--- a/interface/web/vm/templates/openvz_vm_edit.htm
+++ b/interface/web/vm/templates/openvz_vm_edit.htm
@@ -69,7 +69,7 @@
 			</div>
       <div class="ctrlHolder">
       	<label for="vm_password">{tmpl_var name='vm_password_txt'}</label>
-        <input name="vm_password" id="vm_password" value="{tmpl_var name='vm_password'}" size="30" maxlength="255" type="text" class="textInput" />&nbsp;<a href="javascript:void(0);" onClick="generatePassword('vm_password');">{tmpl_var name='generate_password_txt'}</a>
+        <input name="vm_password" id="vm_password" value="{tmpl_var name='vm_password'}" size="30" maxlength="255" type="text" class="textInput" />
 			</div>
       <div class="ctrlHolder">
 				<p class="label">{tmpl_var name='start_boot_txt'}</p>
-- 
GitLab