From ddb461f596d9f013afe4f215fabc0eabc62b1fb0 Mon Sep 17 00:00:00 2001
From: Marius Cramer <m.cramer@pixcept.de>
Date: Tue, 07 Jan 2014 10:28:05 -0500
Subject: [PATCH] Merge remote-tracking branch 'origin/stable-3.0.5'

---
 interface/web/sites/templates/web_vhost_subdomain_advanced.htm |    2 
 interface/web/login/lib/lang/en.lng                            |    1 
 interface/web/themes/blue/css/styles.css                       | 1868 ++++++++++++++++++++++++++++++++++++++
 interface/web/client/templates/resellers_list.htm              |    2 
 interface/lib/classes/aps_guicontroller.inc.php                |    1 
 interface/web/login/lib/lang/ja_login_as.lng                   |    0 
 install/tpl/apache_apps.vhost.master                           |    7 
 interface/web/login/lib/lang/it_login_as.lng                   |    0 
 interface/web/login/index.php                                  |   57 +
 interface/web/client/templates/client_edit_address.htm         |    8 
 interface/web/client/lib/lang/en_client.lng                    |    2 
 interface/web/login/lib/lang/hr_login_as.lng                   |    0 
 server/conf/vhost.conf.master                                  |    8 
 interface/web/admin/lib/lang/de_server_config.lng              |    3 
 interface/web/themes/blue/icons/x32_sprite.png                 |    0 
 install/sql/ispconfig3.sql                                     |   12 
 interface/web/themes/blue/images/lists_thead_bg.png            |    0 
 interface/web/login/lib/lang/de.lng                            |    1 
 interface/web/login/lib/lang/nl_login_as.lng                   |    0 
 interface/web/sites/templates/web_domain_backup.htm            |    4 
 interface/lib/classes/ispcmail.inc.php                         |    4 
 interface/web/login/lib/lang/id_login_as.lng                   |    0 
 interface/web/sites/form/web_domain.tform.php                  |   34 
 server/plugins-available/backup_plugin.inc.php                 |  153 +-
 server/conf/apache_apps.vhost.master                           |   28 
 interface/lib/classes/session.inc.php                          |   48 
 interface/web/sites/lib/lang/de_web_domain.lng                 |    5 
 interface/web/admin/lib/lang/de_system_config.lng              |    6 
 interface/web/login/lib/lang/el_login_as.lng                   |    0 
 interface/web/sites/lib/lang/en_web_domain.lng                 |    5 
 interface/web/login/templates/index.htm                        |   10 
 interface/web/themes/blue/ispconfig_version                    |    1 
 interface/web/client/domain_edit.php                           |    3 
 interface/web/login/lib/lang/de_login_as.lng                   |    0 
 interface/web/login/lib/lang/en_login_as.lng                   |    0 
 interface/web/admin/form/system_config.tform.php               |   42 
 interface/lib/config.inc.php                                   |    4 
 interface/web/mail/lib/lang/de_mail_user.lng                   |    1 
 interface/web/mail/lib/lang/en_mail_user.lng                   |    1 
 interface/web/mail/form/mail_user.tform.php                    |   10 
 interface/web/client/form/reseller.tform.php                   |   50 +
 interface/web/login/lib/lang/ro_login_as.lng                   |    0 
 interface/web/tools/import_ispconfig.php                       |    2 
 interface/web/client/templates/reseller_edit_address.htm       |    8 
 interface/web/admin/templates/system_config_misc_edit.htm      |   24 
 interface/web/login/lib/lang/es_login_as.lng                   |    0 
 interface/web/sites/templates/web_domain_advanced.htm          |    8 
 interface/web/login/lib/lang/pt_login_as.lng                   |    0 
 interface/web/themes/blue/images/lists_tfoot_bg.png            |    0 
 install/tpl/system.ini.master                                  |    5 
 interface/web/tools/lib/menu.d/import.menu.php                 |    3 
 interface/web/sites/lib/lang/en_web_vhost_subdomain.lng        |    4 
 interface/web/login/lib/lang/ar_login_as.lng                   |    0 
 interface/web/client/lib/lang/en_reseller.lng                  |    6 
 install/tpl/server.ini.master                                  |    2 
 interface/web/admin/form/server_config.tform.php               |   14 
 interface/web/admin/templates/server_config_server_edit.htm    |   10 
 interface/web/login/logout.php                                 |    7 
 interface/web/login/lib/lang/pl_login_as.lng                   |    0 
 interface/web/login/lib/lang/br_login_as.lng                   |    0 
 interface/web/client/client_edit.php                           |   40 
 install/lib/install.lib.php                                    |    2 
 interface/web/login/lib/lang/ru_login_as.lng                   |    0 
 interface/web/client/templates/reseller_edit_limits.htm        |   12 
 interface/web/themes/blue/images/ajax-loader.gif               |    0 
 interface/web/login/lib/lang/fr_login_as.lng                   |    0 
 interface/web/admin/lib/lang/en_system_config.lng              |    6 
 interface/web/login/lib/lang/bg_login_as.lng                   |    0 
 interface/web/client/reseller_edit.php                         |   21 
 interface/web/login/lib/lang/se_login_as.lng                   |    0 
 interface/web/login/login_as.php                               |   25 
 interface/web/sites/form/web_vhost_subdomain.tform.php         |   12 
 interface/web/client/form/client.tform.php                     |   22 
 interface/web/themes/blue/images/header_bg.png                 |    0 
 interface/web/themes/default/templates/main.tpl.htm            |    2 
 interface/web/login/lib/lang/sk_login_as.lng                   |    0 
 interface/web/themes/blue/templates/main.tpl.htm               |  187 +++
 interface/web/admin/lib/lang/en_server_config.lng              |    2 
 interface/web/sites/web_domain_edit.php                        |   11 
 interface/web/client/templates/clients_list.htm                |    4 
 interface/web/login/lib/lang/hu_login_as.lng                   |    0 
 interface/web/login/lib/lang/tr_login_as.lng                   |    0 
 interface/web/login/lib/lang/cz_login_as.lng                   |    0 
 interface/web/sites/templates/web_vhost_subdomain_backup.htm   |    4 
 interface/web/login/lib/lang/fi_login_as.lng                   |    0 
 interface/lib/app.inc.php                                      |   27 
 interface/web/sites/lib/lang/de_web_vhost_subdomain.lng        |    4 
 interface/web/admin/system_config_edit.php                     |    7 
 88 files changed, 2,727 insertions(+), 135 deletions(-)

diff --git a/install/lib/install.lib.php b/install/lib/install.lib.php
index 30ba04e..eac79e9 100644
--- a/install/lib/install.lib.php
+++ b/install/lib/install.lib.php
@@ -811,6 +811,8 @@
 		exec('date +%Z', $tzinfo);
 		$timezone = $tzinfo[0];
 	}
+	
+	if(substr($timezone, 0, 1) === '/') $timezone = substr($timezone, 1);
 
 	return $timezone;
 }
diff --git a/install/sql/ispconfig3.sql b/install/sql/ispconfig3.sql
index 3d09f42..533151b 100644
--- a/install/sql/ispconfig3.sql
+++ b/install/sql/ispconfig3.sql
@@ -236,6 +236,11 @@
   `tmp_data` mediumblob,
   `id_rsa` varchar(2000) NOT NULL DEFAULT '',
   `ssh_rsa` varchar(600) NOT NULL DEFAULT '',
+  `customer_no_template` varchar(255) DEFAULT 'C[CUSTOMER_NO]',
+  `customer_no_start` int(11) NOT NULL DEFAULT '1',
+  `customer_no_counter` int(11) NOT NULL DEFAULT '0',
+  `added_date` date NOT NULL DEFAULT '0000-00-00',
+  `added_by` varchar(255) DEFAULT NULL,
   PRIMARY KEY (`client_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
@@ -977,7 +982,7 @@
 -- Dumping data for table `openvz_ostemplate`
 --
 
-INSERT INTO `openvz_ostemplate` (`ostemplate_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `template_name`, `template_file`, `server_id`, `allservers`, `active`, `description`) VALUES(1, 1, 1, 'riud', 'riud', '', 'Debian minimal', 'debian-minimal-x86', 1, 'y', 'y', 'Debain minmal image.');
+INSERT INTO `openvz_ostemplate` (`ostemplate_id`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `template_name`, `template_file`, `server_id`, `allservers`, `active`, `description`) VALUES(1, 1, 1, 'riud', 'riud', '', 'Debian minimal', 'debian-minimal-x86', 1, 'y', 'y', 'Debian minimal image.');
 
 -- --------------------------------------------------------
 
@@ -1606,6 +1611,7 @@
   `session_id` varchar(64) NOT NULL DEFAULT '',
   `date_created` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
   `last_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
+  `permanent` enum('n','y') NOT NULL DEFAULT 'n',
   `session_data` longtext,
   PRIMARY KEY (`session_id`),
   KEY `last_updated` (`last_updated`)
@@ -1820,12 +1826,15 @@
   `custom_php_ini` mediumtext,
   `backup_interval` VARCHAR( 255 ) NOT NULL DEFAULT 'none',
   `backup_copies` INT NOT NULL DEFAULT '1',
+  `backup_excludes` mediumtext,
   `active` enum('n','y') NOT NULL default 'y',
   `traffic_quota_lock` enum('n','y') NOT NULL default 'n',
   `fastcgi_php_version` varchar(255) DEFAULT NULL,
   `proxy_directives` mediumtext,
   `last_quota_notification` date NULL default NULL,
   `rewrite_rules` mediumtext,
+  `added_date` date NOT NULL DEFAULT '0000-00-00',
+  `added_by` varchar(255) DEFAULT NULL,
   PRIMARY KEY  (`domain_id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
 
@@ -2240,5 +2249,6 @@
 --
 
 INSERT INTO sys_config VALUES ('1','db','db_version','3.0.5.3');
+INSERT INTO sys_config VALUES ('2','interface','session_timeout','0');
 
 SET FOREIGN_KEY_CHECKS = 1;
diff --git a/install/tpl/apache_apps.vhost.master b/install/tpl/apache_apps.vhost.master
index 068158c..cfedb9e 100644
--- a/install/tpl/apache_apps.vhost.master
+++ b/install/tpl/apache_apps.vhost.master
@@ -11,6 +11,10 @@
   ServerAdmin webmaster@localhost
   {apps_vhost_servername}
   
+  <FilesMatch "\.ph(p3?|tml)$">
+    SetHandler None
+  </FilesMatch>
+  
   <IfModule mod_php5.c>
     DocumentRoot {apps_vhost_dir}
     AddType application/x-httpd-php .php
@@ -31,12 +35,11 @@
       AllowOverride AuthConfig Indexes Limit Options FileInfo
       AddHandler fcgid-script .php
       FCGIWrapper {website_basedir}/php-fcgi-scripts/apps/.php-fcgi-starter .php
+	  # FcgidBusyTimeout 3600
       Order allow,deny
       Allow from all
     </Directory>
   </IfModule>
-  
-  ServerSignature Off
 
 </VirtualHost>
 
diff --git a/install/tpl/server.ini.master b/install/tpl/server.ini.master
index d27a3e2..b31d604 100644
--- a/install/tpl/server.ini.master
+++ b/install/tpl/server.ini.master
@@ -16,6 +16,8 @@
 loglevel=2
 admin_notify_events=1
 backup_dir=/var/backup
+backup_dir_is_mount=n
+backup_dir_mount_cmd=
 backup_mode=rootgz
 monit_url=
 monit_user=
diff --git a/install/tpl/system.ini.master b/install/tpl/system.ini.master
index abb8931..82373e7 100644
--- a/install/tpl/system.ini.master
+++ b/install/tpl/system.ini.master
@@ -47,3 +47,8 @@
 reseller_dashlets_right=
 client_dashlets_left=
 client_dashlets_right=
+customer_no_template=C[CUSTOMER_NO]
+customer_no_start=1
+customer_no_counter=0
+session_timeout=0
+session_allow_endless=0
diff --git a/interface/lib/app.inc.php b/interface/lib/app.inc.php
index e1929d3..64d2248 100755
--- a/interface/lib/app.inc.php
+++ b/interface/lib/app.inc.php
@@ -66,6 +66,31 @@
 		if($this->_conf['start_session'] == true) {
 
 			$this->uses('session');
+			$tmp = $this->db->queryOneRecord("SELECT `value` FROM sys_config WHERE `config_id` = 2 AND `group` = 'interface' AND `name` = 'session_timeout'");
+			if($tmp && $tmp['value'] > 0) {
+				/* check if user wants to stay logged in */
+				if(isset($_POST['s_mod']) && isset($_POST['s_pg']) && $_POST['s_mod'] == 'login' && $_POST['s_pg'] == 'index' && isset($_POST['stay']) && $_POST['stay'] == '1') {
+					/* check if staying logged in is allowed */
+					$this->uses('ini_parser');
+					$tmp = $this->db->queryOneRecord('SELECT config FROM sys_ini WHERE sysini_id = 1');
+					$tmp = $this->ini_parser->parse_ini_string(stripslashes($tmp['config']));
+					if(!isset($tmp['misc']['session_allow_endless']) || $tmp['misc']['session_allow_endless'] != 'y') {
+						$this->session->set_timeout($tmp['value']);
+						session_set_cookie_params(($tmp['value'] * 60) + 300); // make the cookie live 5 minutes longer
+					} else {
+						// we are doing login here, so we need to set the session data
+						$this->session->set_permanent(true);
+						$this->session->set_timeout(365 * 24 * 3600); // one year
+						session_set_cookie_params(365 * 24 * 3600); // make the cookie live 5 minutes longer
+					}
+				} else {
+					$this->session->set_timeout($tmp['value']);
+					session_set_cookie_params(($tmp['value'] * 60) + 300); // make the cookie live 5 minutes longer
+				}
+			} else {
+				session_set_cookie_params(0); // until browser is closed
+			}
+			
 			session_set_save_handler( array($this->session, 'open'),
 				array($this->session, 'close'),
 				array($this->session, 'read'),
@@ -74,7 +99,7 @@
 				array($this->session, 'gc'));
 
 			session_start();
-
+			
 			//* Initialize session variables
 			if(!isset($_SESSION['s']['id']) ) $_SESSION['s']['id'] = session_id();
 			if(empty($_SESSION['s']['theme'])) $_SESSION['s']['theme'] = $conf['theme'];
diff --git a/interface/lib/classes/aps_guicontroller.inc.php b/interface/lib/classes/aps_guicontroller.inc.php
index a231a5b..7c4208f 100644
--- a/interface/lib/classes/aps_guicontroller.inc.php
+++ b/interface/lib/classes/aps_guicontroller.inc.php
@@ -155,6 +155,7 @@
             CONCAT(version, '-', CAST(`release` AS CHAR)) AS current_version
             FROM aps_packages
             WHERE name = (SELECT name FROM aps_packages WHERE id = ".$app->db->quote($id).")
+            AND package_status = 2
             ORDER BY REPLACE(version, '.', '')+0 DESC, `release` DESC");
 
 		if(!empty($result) && ($id != $result['id'])) return $result['id'];
diff --git a/interface/lib/classes/ispcmail.inc.php b/interface/lib/classes/ispcmail.inc.php
index dff71f3..16247ab 100644
--- a/interface/lib/classes/ispcmail.inc.php
+++ b/interface/lib/classes/ispcmail.inc.php
@@ -697,11 +697,11 @@
 				$recipname = $this->_encodeHeader($recipname, $this->mail_charset);
 
 				//Email From
-				fputs($this->_smtp_conn, 'MAIL FROM: ' . $this->_mail_sender . $this->_crlf);
+				fputs($this->_smtp_conn, 'MAIL FROM: <' . $this->_mail_sender . '>' . $this->_crlf);
 				$response = fgets($this->_smtp_conn, 515);
 
 				//Email To
-				fputs($this->_smtp_conn, 'RCPT TO: ' . $recip . $this->_crlf);
+				fputs($this->_smtp_conn, 'RCPT TO: <' . $recip . '>' . $this->_crlf);
 				$response = fgets($this->_smtp_conn, 515);
 
 				//The Email
diff --git a/interface/lib/classes/session.inc.php b/interface/lib/classes/session.inc.php
index be0ca84..dcb187b 100644
--- a/interface/lib/classes/session.inc.php
+++ b/interface/lib/classes/session.inc.php
@@ -32,9 +32,22 @@
 
 	private $session_array = array();
 	private $db;
+	private $timeout = 0;
+	private $permanent = false;
 
-	function __construct() {
+	function __construct($session_timeout = 0) {
 		$this->db = new db;
+		$this->timeout = $session_timeout;
+	}
+	
+	function set_timeout($session_timeout = 0) {
+		$old_timeout = $this->timeout;
+		$this->timeout = $session_timeout;
+		return $old_timeout;
+	}
+	
+	function set_permanent($value = false) {
+		$this->permanent = $value;
 	}
 
 	function open ($save_path, $session_name) {
@@ -51,8 +64,12 @@
 	}
 
 	function read ($session_id) {
-
-		$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = '".$this->db->quote($session_id)."'");
+		
+		if($this->timeout > 0) {
+			$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = '".$this->db->quote($session_id)."' AND (`permanent` = 'y' OR last_updated >= DATE_SUB(NOW(), INTERVAL " . intval($this->timeout) . " MINUTE))");
+		} else {
+			$rec = $this->db->queryOneRecord("SELECT * FROM sys_session WHERE session_id = '".$this->db->quote($session_id)."'");
+		}
 
 		if (is_array($rec)) {
 			$this->session_array = $rec;
@@ -82,14 +99,14 @@
 			$date_created = date('Y-m-d H:i:s');
 			$last_updated = date('Y-m-d H:i:s');
 			$session_data = $this->db->quote($session_data);
-			$sql = "INSERT INTO sys_session (session_id,date_created,last_updated,session_data) VALUES ('$session_id','$date_created','$last_updated','$session_data')";
+			$sql = "INSERT INTO sys_session (session_id,date_created,last_updated,session_data,permanent) VALUES ('$session_id','$date_created','$last_updated','$session_data','" . ($this->permanent ? 'y' : 'n') . "')";
 			$this->db->query($sql);
 
 		} else {
 			$session_id   = $this->db->quote($session_id);
 			$last_updated = date('Y-m-d H:i:s');
 			$session_data = $this->db->quote($session_data);
-			$sql = "UPDATE sys_session SET last_updated = '$last_updated', session_data = '$session_data' WHERE session_id = '$session_id'";
+			$sql = "UPDATE sys_session SET last_updated = '$last_updated', session_data = '$session_data'" . ($this->permanent ? ", `permanent` = 'y'" : "") . " WHERE session_id = '$session_id'";
 			$this->db->query($sql);
 
 		}
@@ -108,12 +125,23 @@
 
 	function gc ($max_lifetime) {
 
-		$real_now = date('Y-m-d H:i:s');
-		$dt1 = strtotime("$real_now -$max_lifetime seconds");
-		$dt2 = date('Y-m-d H:i:s', $dt1);
+		/*if($this->timeout > 0) {
+			$this->db->query("DELETE FROM sys_session WHERE last_updated < DATE_SUB(NOW(), INTERVAL " . intval($this->timeout) . " MINUTE)");
+		} else {*/
+			$real_now = date('Y-m-d H:i:s');
+			$dt1 = strtotime("$real_now -$max_lifetime seconds");
+			$dt2 = date('Y-m-d H:i:s', $dt1);
 
-		$sql = "DELETE FROM sys_session WHERE last_updated < '$dt2'";
-		$this->db->query($sql);
+			$sql = "DELETE FROM sys_session WHERE last_updated < '$dt2' AND `permanent` != 'y'";
+			$this->db->query($sql);
+			
+			/* delete very old even if they are permanent */
+			$dt1 = strtotime("$real_now -365 days");
+			$dt2 = date('Y-m-d H:i:s', $dt1);
+
+			$sql = "DELETE FROM sys_session WHERE last_updated < '$dt2'";
+			$this->db->query($sql);
+		//}
 
 		return true;
 
diff --git a/interface/lib/config.inc.php b/interface/lib/config.inc.php
index 7de46b7..a27ee16 100644
--- a/interface/lib/config.inc.php
+++ b/interface/lib/config.inc.php
@@ -44,14 +44,14 @@
 
 //** Application
 define('ISPC_APP_TITLE', 'ISPConfig');
-define('ISPC_APP_VERSION', '3.0.2');
+define('ISPC_APP_VERSION', '3.0.5.3');
 define('DEVSYSTEM', 0);
 
 
 //** Database
 $conf['db_type'] = 'mysql';
 $conf['db_host'] = 'localhost';
-$conf['db_database'] = 'ispconfig3';
+$conf['db_database'] = 'ispconfig3_305';
 $conf['db_user'] = 'root';
 $conf['db_password'] = '';
 $conf['db_charset'] = 'utf8'; // same charset as html-charset - (HTML --> MYSQL: "utf-8" --> "utf8", "iso-8859-1" --> "latin1")
diff --git a/interface/web/admin/form/server_config.tform.php b/interface/web/admin/form/server_config.tform.php
index ade8c13..cde19e4 100644
--- a/interface/web/admin/form/server_config.tform.php
+++ b/interface/web/admin/form/server_config.tform.php
@@ -173,6 +173,20 @@
 			'width' => '40',
 			'maxlength' => '255'
 		),
+		'backup_dir_is_mount' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value' => array(0 => 'n', 1 => 'y')
+		),
+		'backup_dir_mount_cmd' => array(
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value' => '',
+			'width' => '40',
+			'maxlength' => '255'
+		),
 		'backup_mode' => array(
 			'datatype' => 'VARCHAR',
 			'formtype' => 'SELECT',
diff --git a/interface/web/admin/form/system_config.tform.php b/interface/web/admin/form/system_config.tform.php
index 155eeeb..6c0e8da 100644
--- a/interface/web/admin/form/system_config.tform.php
+++ b/interface/web/admin/form/system_config.tform.php
@@ -469,6 +469,48 @@
 			'default' => '',
 			'value'  => ''
 		),
+		'customer_no_template' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
+					'errmsg'=> 'customer_no_template_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'customer_no_start' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'customer_no_counter' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'session_timeout' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'session_allow_endless' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'CHECKBOX',
+			'default' => 'n',
+			'value'  => array(0 => 'n', 1 => 'y')
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
diff --git a/interface/web/admin/lib/lang/de_server_config.lng b/interface/web/admin/lib/lang/de_server_config.lng
index 6ae048b..769da88 100644
--- a/interface/web/admin/lib/lang/de_server_config.lng
+++ b/interface/web/admin/lib/lang/de_server_config.lng
@@ -191,4 +191,5 @@
 $wb['munin_password_txt'] = 'Munin-Passwort';
 $wb['munin_url_error_regex'] = 'Ungültige Munin-URL';
 $wb['munin_url_note_txt'] = 'Platzhalter:';
-?>
+$wb['backup_dir_is_mount_txt'] = 'Backupverzeichnis ist ein eigener Mount?';
+$wb['backup_dir_mount_cmd_txt'] = 'Mount-Befehl, falls Backupverzeichnis nicht gemountet';
diff --git a/interface/web/admin/lib/lang/de_system_config.lng b/interface/web/admin/lib/lang/de_system_config.lng
index 1ba5ca8..1c9f17d 100644
--- a/interface/web/admin/lib/lang/de_system_config.lng
+++ b/interface/web/admin/lib/lang/de_system_config.lng
@@ -60,4 +60,10 @@
 $wb['reseller_dashlets_right_txt'] = 'Reseller-Dashlets rechts';
 $wb['client_dashlets_left_txt'] = 'Kunden-Dashlets links';
 $wb['client_dashlets_right_txt'] = 'Kunden-Dashlets rechts';
+$wb['customer_no_template_txt'] = 'Kundennummer-Vorlage';
+$wb['customer_no_template_error_regex_txt'] = 'Die Kundennummer-Vorlage enthält ungültige Zeichen';
+$wb['customer_no_start_txt'] = 'Kundennummer Startwert';
+$wb['customer_no_counter_txt'] = 'Kundennummer Zähler';
+$wb['session_timeout_txt'] = 'Session-Timeout (Minuten)';
+$wb['session_allow_endless_txt'] = '"Eingeloggt bleiben" aktivieren';
 ?>
diff --git a/interface/web/admin/lib/lang/en_server_config.lng b/interface/web/admin/lib/lang/en_server_config.lng
index 749899a..385ff9f 100644
--- a/interface/web/admin/lib/lang/en_server_config.lng
+++ b/interface/web/admin/lib/lang/en_server_config.lng
@@ -194,4 +194,6 @@
 $wb["v6_prefix_txt"] = 'IPv6 Prefix';
 $wb["vhost_rewrite_v6_txt"] = 'Rewrite IPv6 on Mirror';
 $wb["v6_prefix_length"] = 'Prefix too long according to defined IPv6 ';
+$wb['backup_dir_is_mount_txt'] = 'Backup directory is a mount?';
+$wb['backup_dir_mount_cmd_txt'] = 'Mount command, if backup directory not mounted';
 ?>
diff --git a/interface/web/admin/lib/lang/en_system_config.lng b/interface/web/admin/lib/lang/en_system_config.lng
index 7c5fe6e..755efd9 100644
--- a/interface/web/admin/lib/lang/en_system_config.lng
+++ b/interface/web/admin/lib/lang/en_system_config.lng
@@ -62,4 +62,10 @@
 $wb['reseller_dashlets_right_txt'] = 'Right Reseller Dashlets';
 $wb['client_dashlets_left_txt'] = 'Left Client Dashlets';
 $wb['client_dashlets_right_txt'] = 'Right Client Dashlets';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['session_timeout_txt'] = 'Session timeout (minutes)';
+$wb['session_allow_endless_txt'] = 'Enable "stay logged in"';
 ?>
diff --git a/interface/web/admin/system_config_edit.php b/interface/web/admin/system_config_edit.php
index eab73f6..35140b4 100644
--- a/interface/web/admin/system_config_edit.php
+++ b/interface/web/admin/system_config_edit.php
@@ -141,14 +141,17 @@
 		*/
 
 		$new_config = $app->tform->encode($this->dataRecord, $section);
-		if($section == 'sites' && $new_config['vhost_subdomains'] != 'y' && $server_config_array['vhost_subdomains'] == 'y') {
+		if($section == 'sites' && $new_config['vhost_subdomains'] != 'y' && $server_config_array['sites']['vhost_subdomains'] == 'y') {
 			// check for existing vhost subdomains, if found the mode cannot be disabled
 			$check = $app->db->queryOneRecord("SELECT COUNT(*) as `cnt` FROM `web_domain` WHERE `type` = 'vhostsubdomain'");
 			if($check['cnt'] > 0) {
 				$new_config['vhost_subdomains'] = 'y';
 			}
 		} elseif($section == 'mail') {
-			if($new_config['smtp_pass'] == '') $new_config['smtp_pass'] = $server_config_array['smtp_pass'];
+			if($new_config['smtp_pass'] == '') $new_config['smtp_pass'] = $server_config_array['mail']['smtp_pass'];
+		} elseif($section == 'misc' && $new_config['session_timeout'] != $server_config_array['misc']['session_timeout']) {
+			$app->db->query("DELETE FROM sys_config WHERE `config_id` = 2 AND `group` = 'interface' AND `name` = 'session_timeout'");
+			$app->db->query("INSERT INTO sys_config (`config_id`, `group`, `name`, `value`) VALUES (2, 'interface', 'session_timeout', '" . intval($new_config['session_timeout']) . "')");
 		}
 		$server_config_array[$section] = $new_config;
 		$server_config_str = $app->ini_parser->get_ini_string($server_config_array);
diff --git a/interface/web/admin/templates/server_config_server_edit.htm b/interface/web/admin/templates/server_config_server_edit.htm
index 6dab52f..7c0c7b7 100644
--- a/interface/web/admin/templates/server_config_server_edit.htm
+++ b/interface/web/admin/templates/server_config_server_edit.htm
@@ -58,6 +58,16 @@
                 <label for="backup_dir">{tmpl_var name='backup_dir_txt'}</label>
                 <input name="backup_dir" id="backup_dir" value="{tmpl_var name='backup_dir'}" size="40" maxlength="255" type="text" class="textInput" />
             </div>
+			<div class="ctrlHolder">
+                <p class="label">{tmpl_var name='backup_dir_is_mount_txt'}</p>
+                <div class="multiField">
+                    {tmpl_var name='backup_dir_is_mount'}
+                </div>
+            </div>
+			<div class="ctrlHolder">
+                <label for="backup_dir_mount_cmd">{tmpl_var name='backup_dir_mount_cmd_txt'}</label>
+                <input name="backup_dir_mount_cmd" id="backup_dir_mount_cmd" value="{tmpl_var name='backup_dir_mount_cmd'}" size="40" maxlength="255" type="text" class="textInput" />
+            </div>
             <div class="ctrlHolder">
                 <label for="backup_mode">{tmpl_var name='backup_mode_txt'}</label>
                 <select name="backup_mode" id="backup_mode" class="selectInput">
diff --git a/interface/web/admin/templates/system_config_misc_edit.htm b/interface/web/admin/templates/system_config_misc_edit.htm
index 6538236..ea9844e 100644
--- a/interface/web/admin/templates/system_config_misc_edit.htm
+++ b/interface/web/admin/templates/system_config_misc_edit.htm
@@ -69,7 +69,29 @@
                     {tmpl_var name='use_combobox'}<br/>{tmpl_var name='f5_to_reload_js_txt'}
                 </div>
             </div>
-            <div class="ctrlHolder">
+			<div class="ctrlHolder">
+                <label for="customer_no_template">{tmpl_var name='customer_no_template_txt'}</label>
+                <input name="customer_no_template" id="customer_no_template" value="{tmpl_var name='customer_no_template'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+            </div>
+			<div class="ctrlHolder">
+                <label for="customer_no_start">{tmpl_var name='customer_no_start_txt'}</label>
+                <input name="customer_no_start" id="customer_no_start" value="{tmpl_var name='customer_no_start'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+            </div>
+			<div class="ctrlHolder">
+                <label for="customer_no_counter">{tmpl_var name='customer_no_counter_txt'}</label>
+                <input name="customer_no_counter" id="customer_no_counter" value="{tmpl_var name='customer_no_counter'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+            </div>
+			<div class="ctrlHolder">
+                <label for="session_timeout">{tmpl_var name='session_timeout_txt'}</label>
+                <input name="session_timeout" id="session_timeout" value="{tmpl_var name='session_timeout'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+            </div>
+			<div class="ctrlHolder">
+                <p class="label">{tmpl_var name='session_allow_endless_txt'}</p>
+                <div class="multiField">
+                    {tmpl_var name='session_allow_endless'}
+                </div>
+            </div>
+			<div class="ctrlHolder">
                 <p class="label">{tmpl_var name='maintenance_mode_txt'}</p>
                 <div class="multiField">
                     {tmpl_var name='maintenance_mode'}
diff --git a/interface/web/client/client_edit.php b/interface/web/client/client_edit.php
index eb54c2d..d12f39e 100644
--- a/interface/web/client/client_edit.php
+++ b/interface/web/client/client_edit.php
@@ -171,7 +171,47 @@
 
 		$app->tpl->setVar('template_additional_list', $text);
 		$app->tpl->setVar('app_module', 'client');
+		
 
+		//* Set the 'customer no' default value
+		if($this->id == 0) {
+			
+			if($app->auth->is_admin()) {
+				//* Logged in User is admin
+				//* get the system config
+				$app->uses('getconf');
+				$system_config = $app->getconf->get_global_config();
+				if($system_config['misc']['customer_no_template'] != '') {
+				
+					//* Set customer no default
+					$customer_no = $app->functions->intval($system_config['misc']['customer_no_start']+$system_config['misc']['customer_no_counter']);
+					$customer_no_string = str_replace('[CUSTOMER_NO]',$customer_no,$system_config['misc']['customer_no_template']);
+					$app->tpl->setVar('customer_no',$customer_no_string);
+				
+					//* save new counter value
+					$system_config['misc']['customer_no_counter']++;
+					$system_config_str = $app->ini_parser->get_ini_string($system_config);
+					$app->db->datalogUpdate('sys_ini', "config = '".$app->db->quote($system_config_str)."'", 'sysini_id', 1);
+				}
+			} else {
+				//* Logged in user must be a reseller
+				//* get the record of the reseller
+				$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
+				$reseller = $app->db->queryOneRecord("SELECT client.client_id, client.customer_no_template, client.customer_no_counter, client.customer_no_start FROM sys_group,client WHERE client.client_id = sys_group.client_id and sys_group.groupid = ".$client_group_id);
+				
+				if($reseller['customer_no_template'] != '') {
+					//* Set customer no default
+					$customer_no = $app->functions->intval($reseller['customer_no_start']+$reseller['customer_no_counter']);
+					$customer_no_string = str_replace('[CUSTOMER_NO]',$customer_no,$reseller['customer_no_template']);
+					$app->tpl->setVar('customer_no',$customer_no_string);
+					
+					//* save new counter value
+					$customer_no_counter = $app->functions->intval($reseller['customer_no_counter']+1);
+					$app->db->query("UPDATE client SET customer_no_counter = $customer_no_counter WHERE client_id = ".$app->functions->intval($reseller['client_id']));
+				}
+			}
+		}
+		
 		parent::onShowEnd();
 
 	}
diff --git a/interface/web/client/domain_edit.php b/interface/web/client/domain_edit.php
index 3c20ddb..24a4c81 100644
--- a/interface/web/client/domain_edit.php
+++ b/interface/web/client/domain_edit.php
@@ -69,7 +69,8 @@
 
 		if($_SESSION["s"]["user"]["typ"] == 'admin') {
 			// Getting Clients of the user
-			$sql = "SELECT groupid, name FROM sys_group WHERE client_id > 0 ORDER BY name";
+			//$sql = "SELECT groupid, name FROM sys_group WHERE client_id > 0 ORDER BY name";
+			$sql = "SELECT sys_group.groupid, sys_group.name, CONCAT(IF(client.company_name != '', CONCAT(client.company_name, ' :: '), ''), client.contact_name, ' (', client.username, IF(client.customer_no != '', CONCAT(', ', client.customer_no), ''), ')') as contactname FROM sys_group, client WHERE sys_group.client_id = client.client_id AND sys_group.client_id > 0 ORDER BY sys_group.name";
 			$clients = $app->db->queryAllRecords($sql);
 			$client_select = '';
 			if($_SESSION["s"]["user"]["typ"] == 'admin') $client_select .= "<option value='0'></option>";
diff --git a/interface/web/client/form/client.tform.php b/interface/web/client/form/client.tform.php
index 6f7092b..aeb89fe 100644
--- a/interface/web/client/form/client.tform.php
+++ b/interface/web/client/form/client.tform.php
@@ -472,6 +472,28 @@
 			'default' => 'n',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'added_date' => array (
+			'datatype'	=> 'DATE',
+			'formtype'	=> 'TEXT',
+			'default'	=> date($app->lng('conf_format_dateshort')),
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '15',
+			'maxlength'	=> '15',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'added_by' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => $_SESSION['s']['user']['username'],
+			'value'  => '',
+			'separator' => '',
+			'width'  => '30',
+			'maxlength' => '255',
+			'rows'  => '',
+			'cols'  => ''
+		),
 		//#################################
 		// END Datatable fields
 		//#################################
diff --git a/interface/web/client/form/reseller.tform.php b/interface/web/client/form/reseller.tform.php
index 4c871dd..eb74ce7 100644
--- a/interface/web/client/form/reseller.tform.php
+++ b/interface/web/client/form/reseller.tform.php
@@ -469,6 +469,28 @@
 			'default' => 'n',
 			'value'  => array(0 => 'n', 1 => 'y')
 		),
+		'added_date' => array (
+			'datatype'	=> 'DATE',
+			'formtype'	=> 'TEXT',
+			'default'	=> date($app->lng('conf_format_dateshort')),
+			'value'		=> '',
+			'separator'	=> '',
+			'width'		=> '15',
+			'maxlength'	=> '15',
+			'rows'		=> '',
+			'cols'		=> ''
+		),
+		'added_by' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'default' => $_SESSION['s']['user']['username'],
+			'value'  => '',
+			'separator' => '',
+			'width'  => '30',
+			'maxlength' => '255',
+			'rows'  => '',
+			'cols'  => ''
+		),
 		//#################################
 		// END Datatable fields
 		//#################################
@@ -1153,6 +1175,34 @@
 			'rows'  => '',
 			'cols'  => ''
 		),
+		'customer_no_template' => array (
+			'datatype' => 'VARCHAR',
+			'formtype' => 'TEXT',
+			'validators' => array ( 0 => array ( 'type' => 'REGEX',
+					'regex' => '/^[a-zA-Z0-0\-\_\[\]]{0,50}$/',
+					'errmsg'=> 'customer_no_template_error_regex'),
+			),
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'customer_no_start' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
+		'customer_no_counter' => array (
+			'datatype' => 'INTEGER',
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
 		//#################################
 		// END Datatable fields
 		//#################################
diff --git a/interface/web/client/lib/lang/en_client.lng b/interface/web/client/lib/lang/en_client.lng
index 9f1512d..d4ab57a 100644
--- a/interface/web/client/lib/lang/en_client.lng
+++ b/interface/web/client/lib/lang/en_client.lng
@@ -168,4 +168,6 @@
 $wb["mail_servers_placeholder"] = 'Select Mailservers';
 $wb['no_mail_server_error'] = 'At least one Mailserver must be selected.';
 $wb['mail_servers_used'] = 'The server you are trying to remove from this client is used as a Mailserver. Be sure that this server is not used by this client before to remove it.';
+$wb['added_by_txt'] = 'Added by';
+$wb['added_date_txt'] = 'Added date';
 ?>
diff --git a/interface/web/client/lib/lang/en_reseller.lng b/interface/web/client/lib/lang/en_reseller.lng
index e13076a..c70e324 100644
--- a/interface/web/client/lib/lang/en_reseller.lng
+++ b/interface/web/client/lib/lang/en_reseller.lng
@@ -166,4 +166,10 @@
 $wb["mail_servers_placeholder"] = 'Select Mailservers';
 $wb['no_mail_server_error'] = 'At least one Mailserver must be selected.';
 $wb['mail_servers_used'] = 'The server you are trying to remove from this client is used as a Mailserver. Be sure that this server is not used by this client before to remove it.';
+$wb['customer_no_template_txt'] = 'Customer No. template';
+$wb['customer_no_template_error_regex_txt'] = 'The customer No. template contains invalid characters';
+$wb['customer_no_start_txt'] = 'Customer No. start value';
+$wb['customer_no_counter_txt'] = 'Customer No. counter';
+$wb['added_by_txt'] = 'Added by';
+$wb['added_date_txt'] = 'Added date';
 ?>
diff --git a/interface/web/client/reseller_edit.php b/interface/web/client/reseller_edit.php
index 6c67aee..f982856 100644
--- a/interface/web/client/reseller_edit.php
+++ b/interface/web/client/reseller_edit.php
@@ -139,7 +139,26 @@
 		}
 
 		$app->tpl->setVar('template_additional_list', $text);
-
+		
+		//* Set the 'customer no' default value
+		if($this->id == 0) {
+			//* get the system config
+			$app->uses('getconf');
+			$system_config = $app->getconf->get_global_config();
+			if($system_config['misc']['customer_no_template'] != '') {
+				
+				//* Set customer no default
+				$customer_no = $app->functions->intval($system_config['misc']['customer_no_start']+$system_config['misc']['customer_no_counter']);
+				$customer_no_string = str_replace('[CUSTOMER_NO]',$customer_no,$system_config['misc']['customer_no_template']);
+				$app->tpl->setVar('customer_no',$customer_no_string);
+				
+				//* save new counter value
+				$system_config['misc']['customer_no_counter']++;
+				$system_config_str = $app->ini_parser->get_ini_string($system_config);
+				$app->db->datalogUpdate('sys_ini', "config = '".$app->db->quote($system_config_str)."'", 'sysini_id', 1);
+			}
+		}
+		
 		parent::onShowEnd();
 
 	}
diff --git a/interface/web/client/templates/client_edit_address.htm b/interface/web/client/templates/client_edit_address.htm
index 018d1d5..8392820 100644
--- a/interface/web/client/templates/client_edit_address.htm
+++ b/interface/web/client/templates/client_edit_address.htm
@@ -136,6 +136,14 @@
                 <label for="paypal_email">{tmpl_var name='paypal_email_txt'}</label>
                 <input name="paypal_email" id="paypal_email" value="{tmpl_var name='paypal_email'}" size="30" maxlength="255" type="text" class="textInput" />
             </div>
+			<div class="ctrlHolder">
+                <label for="added_date">{tmpl_var name='added_date_txt'}</label>
+                <input name="added_date" id="added_date" value="{tmpl_var name='added_date'}" size="10" maxlength="255" type="text" class="textInput" />
+            </div>
+			<div class="ctrlHolder">
+                <label for="added_by">{tmpl_var name='added_by_txt'}</label>
+                <input name="added_by" id="added_by" value="{tmpl_var name='added_by'}" size="10" maxlength="255" type="text" class="textInput" />
+            </div>
             <div class="ctrlHolder">
                 <label for="notes">{tmpl_var name='notes_txt'}</label>
                 <textarea name="notes" id="notes" rows='10' cols='30'>{tmpl_var name='notes'}</textarea>
diff --git a/interface/web/client/templates/clients_list.htm b/interface/web/client/templates/clients_list.htm
index 8f33ace..820e27c 100644
--- a/interface/web/client/templates/clients_list.htm
+++ b/interface/web/client/templates/clients_list.htm
@@ -52,7 +52,9 @@
                             <td class="tbl_col_country"><a href="#" onclick="loadContent('client/client_edit.php?id={tmpl_var name='id'}');"><div class="country-{tmpl_var name="countryiso"}" style="float:left"></div>{tmpl_var name="country"}</a></td>
                             <td class="tbl_col_buttons">
                                 <tmpl_if name="is_admin">
-                                    <a class="button icons16 icoLoginAs" href="javascript: loadContent('admin/login_as.php?cid={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
+                                    <a class="button icons16 icoLoginAs" href="javascript: loadContent('login/login_as.php?cid={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
+                                <tmpl_elseif name="is_reseller">
+                                    <a class="button icons16 icoLoginAs" href="javascript: loadContent('login/login_as.php?cid={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
                                 </tmpl_if>
                                 <a class="button icons16 icoDelete" href="javascript: del_record('client/client_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
                             </td>
diff --git a/interface/web/client/templates/reseller_edit_address.htm b/interface/web/client/templates/reseller_edit_address.htm
index 4ffd78a..86acccd 100644
--- a/interface/web/client/templates/reseller_edit_address.htm
+++ b/interface/web/client/templates/reseller_edit_address.htm
@@ -136,6 +136,14 @@
                 <label for="paypal_email">{tmpl_var name='paypal_email_txt'}</label>
                 <input name="paypal_email" id="paypal_email" value="{tmpl_var name='paypal_email'}" size="30" maxlength="255" type="text" class="textInput" />
             </div>
+			<div class="ctrlHolder">
+                <label for="added_date">{tmpl_var name='added_date_txt'}</label>
+                <input name="added_date" id="added_date" value="{tmpl_var name='added_date'}" size="10" maxlength="255" type="text" class="textInput" />
+            </div>
+			<div class="ctrlHolder">
+                <label for="added_by">{tmpl_var name='added_by_txt'}</label>
+                <input name="added_by" id="added_by" value="{tmpl_var name='added_by'}" size="10" maxlength="255" type="text" class="textInput" />
+            </div>
             <div class="ctrlHolder">
                 <label for="notes">{tmpl_var name='notes_txt'}</label>
                 <textarea name="notes" id="notes" rows='10' cols='30'>{tmpl_var name='notes'}</textarea>
diff --git a/interface/web/client/templates/reseller_edit_limits.htm b/interface/web/client/templates/reseller_edit_limits.htm
index eb7505e..e12726e 100644
--- a/interface/web/client/templates/reseller_edit_limits.htm
+++ b/interface/web/client/templates/reseller_edit_limits.htm
@@ -30,6 +30,18 @@
                 <label for="limit_client">{tmpl_var name='limit_client_txt'}</label>
                 <input name="limit_client" id="limit_client" value="{tmpl_var name='limit_client'}" size="10" maxlength="10" type="text" class="textInput formLengthLimit" />
             </div>
+			<div class="ctrlHolder">
+                <label for="customer_no_template">{tmpl_var name='customer_no_template_txt'}</label>
+                <input name="customer_no_template" id="customer_no_template" value="{tmpl_var name='customer_no_template'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+            </div>
+			<div class="ctrlHolder">
+                <label for="customer_no_start">{tmpl_var name='customer_no_start_txt'}</label>
+                <input name="customer_no_start" id="customer_no_start" value="{tmpl_var name='customer_no_start'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+            </div>
+			<div class="ctrlHolder">
+                <label for="customer_no_counter">{tmpl_var name='customer_no_counter_txt'}</label>
+                <input name="customer_no_counter" id="customer_no_counter" value="{tmpl_var name='customer_no_counter'}" size="30" maxlength="255" type="text" class="textInput formLengthHalf" />
+            </div>
             <div class="subsectiontoggle"><span class="showing"></span>{tmpl_var name='web_limits_txt'}<em class="showing"></em></div>
             <div>
                 <div class="ctrlHolder">
diff --git a/interface/web/client/templates/resellers_list.htm b/interface/web/client/templates/resellers_list.htm
index 66cb06a..5074497 100644
--- a/interface/web/client/templates/resellers_list.htm
+++ b/interface/web/client/templates/resellers_list.htm
@@ -51,7 +51,7 @@
                             <td class="tbl_col_city"><a href="#" onclick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="city"}</a></td>
                             <td class="tbl_col_country"><a href="#" onclick="loadContent('client/reseller_edit.php?id={tmpl_var name='id'}');"><div class="country-{tmpl_var name="countryiso"}" style="float:left"></div>{tmpl_var name="country"}</a></td>
                             <td class="tbl_col_buttons">
-                                <a class="button icons16 icoLoginAs" href="javascript: loadContent('admin/login_as.php?cid={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
+                                <a class="button icons16 icoLoginAs" href="javascript: loadContent('login/login_as.php?cid={tmpl_var name='id'}');"><span>{tmpl_var name='login_as_txt'}</span></a>
                                 <a class="button icons16 icoDelete" href="javascript: del_record('client/reseller_del.php?id={tmpl_var name='id'}&phpsessid={tmpl_var name='phpsessid'}','{tmpl_var name='delete_confirmation'}');"><span>{tmpl_var name='delete_txt'}</span></a>
                             </td>
                         </tr>
diff --git a/interface/web/login/index.php b/interface/web/login/index.php
index 950c692..951dbaf 100644
--- a/interface/web/login/index.php
+++ b/interface/web/login/index.php
@@ -85,21 +85,59 @@
 				 */
 				if (isset($_SESSION['s']['user']) && $_SESSION['s']['user']['active'] == 1){
 					/*
-					 * only the admin can "login as" so if the user is NOT a admin, we
+					 * only the admin or reseller can "login as" so if the user is NOT an admin or reseller, we
 					 * open the startpage (after killing the old session), so the user
 					 * is logout and has to start again!
 					 */
-					if ($_SESSION['s']['user']['typ'] != 'admin') {
+					if ($_SESSION['s']['user']['typ'] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
 						/*
-						 * The actual user is NOT a admin, but maybe the admin
-						 * has logged in as "normal" user bevore...
+						 * The actual user is NOT a admin or reseller, but maybe he
+						 * has logged in as "normal" user before...
 						 */
-						if (isset($_SESSION['s_old'])&& ($_SESSION['s_old']['user']['typ'] == 'admin')){
-							/* The "old" user is admin, so everything is ok */
+						
+						if (isset($_SESSION['s_old'])&& ($_SESSION['s_old']['user']['typ'] == 'admin' || $app->auth->has_clients($_SESSION['s_old']['user']['userid']))){
+							/* The "old" user is admin or reseller, so everything is ok
+							 * if he is reseller, we need to check if he logs in to one of his clients
+							 */
+							if($_SESSION['s_old']['user']['typ'] != 'admin') {
+								
+								/* this is the one currently logged in (normal user) */
+								$old_client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
+								$old_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $old_client_group_id");
+								
+								/* this is the reseller, that shall be re-logged in */
+								$sql = "SELECT * FROM sys_user WHERE USERNAME = '$username' and PASSWORT = '". $passwort. "'";
+								$tmp = $app->db->queryOneRecord($sql);
+								$client_group_id = $app->functions->intval($tmp['default_group']);
+								$tmp_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+								
+								if(!$tmp_client || $old_client["parent_client_id"] != $tmp_client["client_id"] || $tmp["default_group"] != $_SESSION["s_old"]["user"]["default_group"] ) {
+									die("You don't have the right to 'login as' this user!");
+								}
+								unset($old_client);
+								unset($tmp_client);
+								unset($tmp);
+							}
 						}
 						else {
 							die("You don't have the right to 'login as'!");
 						}
+					} elseif($_SESSION['s']['user']['typ'] != 'admin' && (!isset($_SESSION['s_old']['user']) || $_SESSION['s_old']['user']['typ'] != 'admin')) {
+						/* a reseller wants to 'login as', we need to check if he is allowed to */
+						$res_client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
+						$res_client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $res_client_group_id");
+						
+						/* this is the user the reseller wants to 'login as' */
+						$sql = "SELECT * FROM sys_user WHERE USERNAME = '$username' and PASSWORT = '". $passwort. "'";
+						$tmp = $app->db->queryOneRecord($sql);
+						$tmp_client = $app->db->queryOneRecord("SELECT client.client_id, client.parent_client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = " . $app->functions->intval($tmp["default_group"]));
+						
+						if(!$tmp || $tmp_client["parent_client_id"] != $res_client["client_id"]) {
+							die("You don't have the right to login as this user!");
+						}
+						unset($res_client);
+						unset($tmp);
+						unset($tmp_client);
 					}
 					$loginAs = true;
 				}
@@ -192,7 +230,7 @@
 								$_SESSION['s']['user']['theme'] = isset($user['app_theme']) ? $user['app_theme'] : 'default';
 								$_SESSION['s']['language'] = $user['language'];
 								$_SESSION["s"]['theme'] = $_SESSION['s']['user']['theme'];
-
+								
 								if(is_file($_SESSION['s']['user']['startmodule'].'/lib/module.conf.php')) {
 									include_once $_SESSION['s']['user']['startmodule'].'/lib/module.conf.php';
 									$menu_dir = ISPC_WEB_PATH.'/' . $_SESSION['s']['user']['startmodule'] . '/lib/menu.d';
@@ -279,12 +317,15 @@
 		if($error != ''){
 			$error = '<div class="box box_error"><h1>Error</h1>'.$error.'</div>';
 		}
-
+		
 		$app->tpl->setVar('error', $error);
 		$app->tpl->setVar('pw_lost_txt', $app->lng('pw_lost_txt'));
 		$app->tpl->setVar('username_txt', $app->lng('username_txt'));
 		$app->tpl->setVar('password_txt', $app->lng('password_txt'));
+		$app->tpl->setVar('stay_logged_in_txt', $app->lng('stay_logged_in_txt'));
 		$app->tpl->setVar('login_button_txt', $app->lng('login_button_txt'));
+		$app->tpl->setVar('session_timeout', $server_config_array['session_timeout']);
+		$app->tpl->setVar('session_allow_endless', $server_config_array['session_allow_endless']);
 		$app->tpl->setInclude('content_tpl', 'login/templates/index.htm');
 		$app->tpl_defaults();
 
diff --git a/interface/web/admin/lib/lang/ar_login_as.lng b/interface/web/login/lib/lang/ar_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/ar_login_as.lng
rename to interface/web/login/lib/lang/ar_login_as.lng
diff --git a/interface/web/admin/lib/lang/bg_login_as.lng b/interface/web/login/lib/lang/bg_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/bg_login_as.lng
rename to interface/web/login/lib/lang/bg_login_as.lng
diff --git a/interface/web/admin/lib/lang/br_login_as.lng b/interface/web/login/lib/lang/br_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/br_login_as.lng
rename to interface/web/login/lib/lang/br_login_as.lng
diff --git a/interface/web/admin/lib/lang/cz_login_as.lng b/interface/web/login/lib/lang/cz_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/cz_login_as.lng
rename to interface/web/login/lib/lang/cz_login_as.lng
diff --git a/interface/web/login/lib/lang/de.lng b/interface/web/login/lib/lang/de.lng
index 439fa02..551fe7e 100644
--- a/interface/web/login/lib/lang/de.lng
+++ b/interface/web/login/lib/lang/de.lng
@@ -22,4 +22,5 @@
 $wb['error_maintenance_mode'] = 'Diese ISPConfig Installation wird gerade gewartet. Wir sind in Kürze wieder für Sie da. Vielen Dank für Ihre Geduld.';
 $wb['theme_not_compatible'] = 'Das gewählte Design ist mit dieser ISPConfig Version nicht kompatibel. Bitte prüfen Sie, ob ein Update des Themes verfügbar ist.<br />Es wurde nun automatisch das Standard Design aktiviert.';
 $wb['back_txt'] = 'Zur&uuml;ck';
+$wb['stay_logged_in_txt'] = 'Dauerhaft eingeloggt bleiben';
 ?>
diff --git a/interface/web/admin/lib/lang/de_login_as.lng b/interface/web/login/lib/lang/de_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/de_login_as.lng
rename to interface/web/login/lib/lang/de_login_as.lng
diff --git a/interface/web/admin/lib/lang/el_login_as.lng b/interface/web/login/lib/lang/el_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/el_login_as.lng
rename to interface/web/login/lib/lang/el_login_as.lng
diff --git a/interface/web/login/lib/lang/en.lng b/interface/web/login/lib/lang/en.lng
index 082d1c2..768eaba 100644
--- a/interface/web/login/lib/lang/en.lng
+++ b/interface/web/login/lib/lang/en.lng
@@ -27,4 +27,5 @@
 $wb['error_maintenance_mode'] = 'This ISPConfig installation is currently under maintenance. We should be back shortly. Thank you for your patience.';
 
 $wb['theme_not_compatible'] = 'The chosen theme is not compatible with the current ISPConfig version. Please check for a new version of the theme.<br />The default theme as been activated automatically.';
+$wb['stay_logged_in_txt'] = 'Keep me logged in';
 ?>
\ No newline at end of file
diff --git a/interface/web/admin/lib/lang/en_login_as.lng b/interface/web/login/lib/lang/en_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/en_login_as.lng
rename to interface/web/login/lib/lang/en_login_as.lng
diff --git a/interface/web/admin/lib/lang/es_login_as.lng b/interface/web/login/lib/lang/es_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/es_login_as.lng
rename to interface/web/login/lib/lang/es_login_as.lng
diff --git a/interface/web/admin/lib/lang/fi_login_as.lng b/interface/web/login/lib/lang/fi_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/fi_login_as.lng
rename to interface/web/login/lib/lang/fi_login_as.lng
diff --git a/interface/web/admin/lib/lang/fr_login_as.lng b/interface/web/login/lib/lang/fr_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/fr_login_as.lng
rename to interface/web/login/lib/lang/fr_login_as.lng
diff --git a/interface/web/admin/lib/lang/hr_login_as.lng b/interface/web/login/lib/lang/hr_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/hr_login_as.lng
rename to interface/web/login/lib/lang/hr_login_as.lng
diff --git a/interface/web/admin/lib/lang/hu_login_as.lng b/interface/web/login/lib/lang/hu_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/hu_login_as.lng
rename to interface/web/login/lib/lang/hu_login_as.lng
diff --git a/interface/web/admin/lib/lang/id_login_as.lng b/interface/web/login/lib/lang/id_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/id_login_as.lng
rename to interface/web/login/lib/lang/id_login_as.lng
diff --git a/interface/web/admin/lib/lang/it_login_as.lng b/interface/web/login/lib/lang/it_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/it_login_as.lng
rename to interface/web/login/lib/lang/it_login_as.lng
diff --git a/interface/web/admin/lib/lang/ja_login_as.lng b/interface/web/login/lib/lang/ja_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/ja_login_as.lng
rename to interface/web/login/lib/lang/ja_login_as.lng
diff --git a/interface/web/admin/lib/lang/nl_login_as.lng b/interface/web/login/lib/lang/nl_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/nl_login_as.lng
rename to interface/web/login/lib/lang/nl_login_as.lng
diff --git a/interface/web/admin/lib/lang/pl_login_as.lng b/interface/web/login/lib/lang/pl_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/pl_login_as.lng
rename to interface/web/login/lib/lang/pl_login_as.lng
diff --git a/interface/web/admin/lib/lang/pt_login_as.lng b/interface/web/login/lib/lang/pt_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/pt_login_as.lng
rename to interface/web/login/lib/lang/pt_login_as.lng
diff --git a/interface/web/admin/lib/lang/ro_login_as.lng b/interface/web/login/lib/lang/ro_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/ro_login_as.lng
rename to interface/web/login/lib/lang/ro_login_as.lng
diff --git a/interface/web/admin/lib/lang/ru_login_as.lng b/interface/web/login/lib/lang/ru_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/ru_login_as.lng
rename to interface/web/login/lib/lang/ru_login_as.lng
diff --git a/interface/web/admin/lib/lang/se_login_as.lng b/interface/web/login/lib/lang/se_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/se_login_as.lng
rename to interface/web/login/lib/lang/se_login_as.lng
diff --git a/interface/web/admin/lib/lang/sk_login_as.lng b/interface/web/login/lib/lang/sk_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/sk_login_as.lng
rename to interface/web/login/lib/lang/sk_login_as.lng
diff --git a/interface/web/admin/lib/lang/tr_login_as.lng b/interface/web/login/lib/lang/tr_login_as.lng
similarity index 100%
rename from interface/web/admin/lib/lang/tr_login_as.lng
rename to interface/web/login/lib/lang/tr_login_as.lng
diff --git a/interface/web/admin/login_as.php b/interface/web/login/login_as.php
similarity index 75%
rename from interface/web/admin/login_as.php
rename to interface/web/login/login_as.php
index 3d0fbf8..ed2dc9e 100644
--- a/interface/web/admin/login_as.php
+++ b/interface/web/login/login_as.php
@@ -31,11 +31,13 @@
 require_once '../../lib/config.inc.php';
 require_once '../../lib/app.inc.php';
 
-/* Check permissions for module */
-$app->auth->check_module_permissions('admin');
+/* check if the user is logged in */
+if(!isset($_SESSION['s']['user'])) {
+	die ("You have to be logged in to login as other user!");
+}
 
-/* for security reasons ONLY the admin can login as other user */
-if ($_SESSION["s"]["user"]["typ"] != 'admin') {
+/* for security reasons ONLY the admin or a reseller can login as other user */
+if ($_SESSION["s"]["user"]["typ"] != 'admin' && !$app->auth->has_clients($_SESSION['s']['user']['userid'])) {
 	die ("You don't have the right to login as other user!");
 }
 
@@ -45,13 +47,26 @@
 }
 
 if(isset($_GET['id'])) {
+	if($_SESSION["s"]["user"]["typ"] != 'admin') {
+		die ("You don't have the right to login as system user!");
+	}
 	$userId = $app->functions->intval($_GET['id']);
 	$backlink = 'admin/users_list.php';
 } else {
 	$client_id = $app->functions->intval($_GET['cid']);
-	$tmp_client = $app->db->queryOneRecord("SELECT username FROM client WHERE client_id = $client_id");
+	$tmp_client = $app->db->queryOneRecord("SELECT username, parent_client_id FROM client WHERE client_id = $client_id");
 	$tmp_sys_user = $app->db->queryOneRecord("SELECT userid FROM sys_user WHERE username = '".$app->db->quote($tmp_client['username'])."'");
 	$userId = $app->functions->intval($tmp_sys_user['userid']);
+	/* check if this client belongs to reseller that tries to log in, if we are not admin */
+	if($_SESSION["s"]["user"]["typ"] != 'admin') {
+		$client_group_id = $app->functions->intval($_SESSION["s"]["user"]["default_group"]);
+		$client = $app->db->queryOneRecord("SELECT client.client_id FROM sys_group, client WHERE sys_group.client_id = client.client_id and sys_group.groupid = $client_group_id");
+		if(!$client || $tmp_client["parent_client_id"] != $client["client_id"]) {
+			die("You don't have the right to login as this user!");
+		}
+		unset($client);
+	}
+	
 	unset($tmp_client);
 	unset($tmp_sys_user);
 	$backlink = 'client/client_list.php';
diff --git a/interface/web/login/logout.php b/interface/web/login/logout.php
index b2b1ac2..5e79629 100644
--- a/interface/web/login/logout.php
+++ b/interface/web/login/logout.php
@@ -40,11 +40,12 @@
  * if the admin is logged in as client, then ask, if the admin want't to
  * "re-login" as admin again
  */
-if ((isset($_SESSION['s_old']) && ($_SESSION['s_old']['user']['typ'] == 'admin')) &&
+if ((isset($_SESSION['s_old']) && ($_SESSION['s_old']['user']['typ'] == 'admin' || $app->auth->has_clients($_SESSION['s_old']['user']['userid']))) &&
 	(!$forceLogout)){
+	$utype = ($_SESSION['s_old']['user']['typ'] == 'admin' ? 'admin' : 'reseller');
 	echo '
 		<br /> <br />	<br /> <br />
-		Do you want to re-login as admin or log out?<br />
+		Do you want to re-login as ' . $utype . ' or log out?<br />
 		<div style="visibility:hidden">
 			<input type="text" name="username" value="' . $_SESSION['s_old']['user']['username'] . '" />
 			<input type="password" name="passwort" value="' . $_SESSION['s_old']['user']['passwort'] .'" />
@@ -52,7 +53,7 @@
 		<input type="hidden" name="s_mod" value="login" />
 		<input type="hidden" name="s_pg" value="index" />
 	    <div class="wf_actions buttons">
-	      <button class="positive iconstxt icoPositive" type="button" value="Yes, re-login as Admin" onclick="submitLoginForm(' . "'pageForm'" . ');"><span>Yes, re-login as Admin</span></button>
+	      <button class="positive iconstxt icoPositive" type="button" value="Yes, re-login as ' . $utype . '" onclick="submitLoginForm(' . "'pageForm'" . ');"><span>Yes, re-login as ' . $utype . '</span></button>
 	      <button class="negative iconstxt icoNegative" type="button" value="No, logout" onclick="loadContent('. "'login/logout.php?l=1'" . ');"><span>No, logout</span></button>
 	    </div>
 	';
diff --git a/interface/web/login/templates/index.htm b/interface/web/login/templates/index.htm
index a956701..eaf9e08 100644
--- a/interface/web/login/templates/index.htm
+++ b/interface/web/login/templates/index.htm
@@ -19,7 +19,15 @@
             <div class="ctrlHolder">
                 <label for="passwort">{tmpl_var name='password_txt'}</label>
                 <input name="passwort" id="passwort" value="" size="30" maxlength="255" type="password" class="formLengthEmailUser"  onkeypress="if (event.keyCode && event.keyCode == 13) {submitLoginForm('pageForm'); return false;};" />
-            </div>			
+            </div>
+            <tmpl_if name="session_timeout" op=">" value="0">
+				<tmpl_if name="session_allow_endless" value="y">
+            <div class="ctrlHolder">
+                <label for="passwort">{tmpl_var name='stay_logged_in_txt'}</label>
+                <input name="stay" id="stay" value="1" type="checkbox" onkeypress="if (event.keyCode && event.keyCode == 13) {submitLoginForm('pageForm'); return false;};" />
+            </div>
+				</tmpl_if>
+            </tmpl_if>
         </fieldset>
 
         <input type="hidden" name="s_mod" value="login" />
diff --git a/interface/web/mail/form/mail_user.tform.php b/interface/web/mail/form/mail_user.tform.php
index 03f458a..ce3c195 100644
--- a/interface/web/mail/form/mail_user.tform.php
+++ b/interface/web/mail/form/mail_user.tform.php
@@ -58,7 +58,7 @@
 $form["auth_preset"]["perm_group"] = 'riud'; //r = read, i = insert, u = update, d = delete
 $form["auth_preset"]["perm_other"] = ''; //r = read, i = insert, u = update, d = delete
 
-$form["tabs"]['mailuser'] = array (
+$form["tabs"]['mailuser'] = array(
 	'title'  => "Mailbox",
 	'width'  => 100,
 	'template'  => "templates/mail_user_mailbox_edit.htm",
@@ -109,7 +109,7 @@
 				0 => array (  'type'  => 'UNIQUE',
 					'errmsg'=> 'login_error_unique'),
 				1 => array (  'type'  => 'REGEX',
-					'regex' => '/^[a-z0-9][\w\.\-_\+@]{1,63}$/',
+					'regex' => '/^[_a-z0-9][\w\.\-_\+@]{1,63}$/',
 					'errmsg'=> 'login_error_regex'),
 			),
 			'default' => '',
@@ -232,6 +232,12 @@
 	)
 );
 
+if($global_config['mail']['mail_password_onlyascii'] == 'y') {
+	$form['tabs']['mailuser']['fields']['password']['validators'] = array( 0 => array( 'type' => 'ISASCII',
+		'errmsg' => 'email_error_isascii')
+	);
+}
+
 if ($global_config['mail']['mailbox_show_autoresponder_tab'] === 'y') {
 	$form["tabs"]['autoresponder'] = array (
 		'title'  => "Autoresponder",
diff --git a/interface/web/mail/lib/lang/de_mail_user.lng b/interface/web/mail/lib/lang/de_mail_user.lng
index 87a5563..20f8526 100644
--- a/interface/web/mail/lib/lang/de_mail_user.lng
+++ b/interface/web/mail/lib/lang/de_mail_user.lng
@@ -47,4 +47,5 @@
 $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.';
+$wb['email_error_isascii'] = 'Bitte verwenden Sie keine Umlaute im Passwort. Dies kann zu Problemen mit Ihrem E-Mail-Programm führen.';
 ?>
diff --git a/interface/web/mail/lib/lang/en_mail_user.lng b/interface/web/mail/lib/lang/en_mail_user.lng
index c275c1a..fd2b110 100644
--- a/interface/web/mail/lib/lang/en_mail_user.lng
+++ b/interface/web/mail/lib/lang/en_mail_user.lng
@@ -53,4 +53,5 @@
 $wb['daily_backup_txt'] = 'Daily';
 $wb['weekly_backup_txt'] = 'Weekly';
 $wb['monthly_backup_txt'] = 'Monthly';
+$wb['email_error_isascii'] = 'Please do not use special unicode characters for your password. This could lead to problems with your mail client.';
 ?>
diff --git a/interface/web/sites/form/web_domain.tform.php b/interface/web/sites/form/web_domain.tform.php
index ff3365a..84f8cd5 100644
--- a/interface/web/sites/form/web_domain.tform.php
+++ b/interface/web/sites/form/web_domain.tform.php
@@ -523,6 +523,18 @@
 			'default' => '',
 			'value'  => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10')
 		),
+		'backup_excludes' => array (
+			'datatype' => 'VARCHAR',
+			'validators' => array (  0 => array ( 'type' => 'REGEX',
+					'regex' => '@^(?!.*\.\.)[-a-zA-Z0-9_/.~,*]*$@',
+					'errmsg'=> 'backup_excludes_error_regex'),
+			),
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
@@ -721,6 +733,28 @@
 				'width'  => '30',
 				'maxlength' => '255'
 			),
+			'added_date' => array (
+				'datatype'	=> 'DATE',
+				'formtype'	=> 'TEXT',
+				'default'	=> date($app->lng('conf_format_dateshort')),
+				'value'		=> '',
+				'separator'	=> '',
+				'width'		=> '15',
+				'maxlength'	=> '15',
+				'rows'		=> '',
+				'cols'		=> ''
+			),
+			'added_by' => array (
+				'datatype' => 'VARCHAR',
+				'formtype' => 'TEXT',
+				'default' => $_SESSION['s']['user']['username'],
+				'value'  => '',
+				'separator' => '',
+				'width'  => '30',
+				'maxlength' => '255',
+				'rows'  => '',
+				'cols'  => ''
+			),
 			//#################################
 			// ENDE Datatable fields
 			//#################################
diff --git a/interface/web/sites/form/web_vhost_subdomain.tform.php b/interface/web/sites/form/web_vhost_subdomain.tform.php
index a4a323f..2e30efa 100644
--- a/interface/web/sites/form/web_vhost_subdomain.tform.php
+++ b/interface/web/sites/form/web_vhost_subdomain.tform.php
@@ -513,6 +513,18 @@
 			'default' => '',
 			'value'  => array('1' => '1', '2' => '2', '3' => '3', '4' => '4', '5' => '5', '6' => '6', '7' => '7', '8' => '8', '9' => '9', '10' => '10')
 		),
+		'backup_excludes' => array (
+			'datatype' => 'VARCHAR',
+			'validators' => array (  0 => array ( 'type' => 'REGEX',
+					'regex' => '@^(?!.*\.\.)[-a-zA-Z0-9_/.~,*]*$@',
+					'errmsg'=> 'backup_excludes_error_regex'),
+			),
+			'formtype' => 'TEXT',
+			'default' => '',
+			'value'  => '',
+			'width'  => '30',
+			'maxlength' => '255'
+		),
 		//#################################
 		// ENDE Datatable fields
 		//#################################
diff --git a/interface/web/sites/lib/lang/de_web_domain.lng b/interface/web/sites/lib/lang/de_web_domain.lng
index 5c14553..069b185 100644
--- a/interface/web/sites/lib/lang/de_web_domain.lng
+++ b/interface/web/sites/lib/lang/de_web_domain.lng
@@ -121,4 +121,9 @@
 $wb['allowed_rewrite_rule_directives_txt'] = 'Erlaubte Direktiven:';
 $wb['configuration_error_txt'] = 'KONFIGURATIONSFEHLER';
 $wb['variables_txt'] = 'Variablen';
+$wb['added_by_txt'] = 'Hinzugefügt von';
+$wb['added_date_txt'] = 'Hinzugefügt am';
+$wb['backup_excludes_txt'] = 'Auszuschließende Verzeichnisse';
+$wb['backup_excludes_note_txt'] = '(Mehrere Verzeichnisse mit Kommas trennen. Beispiel: web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = 'Die auszuschließenden Verzeichnisse enthalten ungültige Zeichen.';
 ?>
diff --git a/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng
index 311a68b..e43803f 100644
--- a/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/de_web_vhost_subdomain.lng
@@ -119,4 +119,8 @@
 $wb['invalid_rewrite_rules_txt'] = 'Unzulässige Rewrite Rules';
 $wb['allowed_rewrite_rule_directives_txt'] = 'Erlaubte Direktiven:';
 $wb['configuration_error_txt'] = 'KONFIGURATIONSFEHLER';
+$wb['variables_txt'] = 'Variablen';
+$wb['backup_excludes_txt'] = 'Auszuschließende Verzeichnisse';
+$wb['backup_excludes_note_txt'] = '(Mehrere Verzeichnisse mit Kommas trennen. Beispiel: web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = 'Die auszuschließenden Verzeichnisse enthalten ungültige Zeichen.';
 ?>
diff --git a/interface/web/sites/lib/lang/en_web_domain.lng b/interface/web/sites/lib/lang/en_web_domain.lng
index 1a7a02b..8390066 100644
--- a/interface/web/sites/lib/lang/en_web_domain.lng
+++ b/interface/web/sites/lib/lang/en_web_domain.lng
@@ -122,4 +122,9 @@
 $wb['configuration_error_txt'] = "CONFIGURATION ERROR";
 $wb['server_chosen_not_ok'] = 'The selected server is not allowed for this account.';
 $wb['variables_txt'] = 'Variables';
+$wb['added_by_txt'] = 'Added by';
+$wb['added_date_txt'] = 'Added date';
+$wb['backup_excludes_txt'] = 'Excluded Directories';
+$wb['backup_excludes_note_txt'] = '(Separate multiple directories with commas. Example: web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng b/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng
index ae88738..3c9009e 100644
--- a/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng
+++ b/interface/web/sites/lib/lang/en_web_vhost_subdomain.lng
@@ -120,4 +120,8 @@
 $wb['invalid_rewrite_rules_txt'] = 'Invalid Rewrite Rules';
 $wb['allowed_rewrite_rule_directives_txt'] = 'Allowed Directives:';
 $wb['configuration_error_txt'] = "CONFIGURATION ERROR";
+$wb['variables_txt'] = 'Variables';
+$wb['backup_excludes_txt'] = 'Excluded Directories';
+$wb['backup_excludes_note_txt'] = '(Separate multiple directories with commas. Example: web/cache/*,web/backup)';
+$wb['backup_excludes_error_regex'] = 'The excluded directories contain invalid characters.';
 ?>
\ No newline at end of file
diff --git a/interface/web/sites/templates/web_domain_advanced.htm b/interface/web/sites/templates/web_domain_advanced.htm
index 3cc7d2e..0afe57a 100644
--- a/interface/web/sites/templates/web_domain_advanced.htm
+++ b/interface/web/sites/templates/web_domain_advanced.htm
@@ -16,6 +16,14 @@
         <fieldset class="inlineLabels">
             <input name="document_root" id="document_root" value="{tmpl_var name='document_root'}" size="30" maxlength="255" type="hidden" class="textInput" />
             <div class="ctrlHolder">
+                <label for="added_date">{tmpl_var name='added_date_txt'}</label>
+                <input name="added_date" id="added_date" value="{tmpl_var name='added_date'}" size="10" maxlength="255" type="text" class="textInput" />
+            </div>
+			<div class="ctrlHolder">
+                <label for="added_by">{tmpl_var name='added_by_txt'}</label>
+                <input name="added_by" id="added_by" value="{tmpl_var name='added_by'}" size="10" maxlength="255" type="text" class="textInput" />
+            </div>
+			<div class="ctrlHolder">
                 <label for="system_user">{tmpl_var name='system_user_txt'}</label>
                 <label for="system_user">{tmpl_var name='system_user'}</label>
                 <input name="system_user" id="system_user" value="{tmpl_var name='system_user'}" type="hidden" />
diff --git a/interface/web/sites/templates/web_domain_backup.htm b/interface/web/sites/templates/web_domain_backup.htm
index cfe4337..e5829e5 100644
--- a/interface/web/sites/templates/web_domain_backup.htm
+++ b/interface/web/sites/templates/web_domain_backup.htm
@@ -26,6 +26,10 @@
                     {tmpl_var name='backup_copies'}
                 </select>
             </div>
+			<div class="ctrlHolder">
+                <label for="backup_excludes">{tmpl_var name='backup_excludes_txt'}</label>
+                <input name="backup_excludes" id="backup_excludes" value="{tmpl_var name='backup_excludes'}" size="30" type="text" class="textInput" />&nbsp;{tmpl_var name='backup_excludes_note_txt'}
+            </div>
         </fieldset>
 
         {tmpl_var name='backup_records'}
diff --git a/interface/web/sites/templates/web_vhost_subdomain_advanced.htm b/interface/web/sites/templates/web_vhost_subdomain_advanced.htm
index cffd3fa..52fb5c7 100644
--- a/interface/web/sites/templates/web_vhost_subdomain_advanced.htm
+++ b/interface/web/sites/templates/web_vhost_subdomain_advanced.htm
@@ -75,7 +75,7 @@
             </div>
             <div class="ctrlHolder nginx">
                 <label for="nginx_directives">{tmpl_var name='nginx_directives_txt'}</label>
-                <textarea name="nginx_directives" id="nginx_directives" rows='10' cols='50' style="width:400px;">{tmpl_var name='nginx_directives'}</textarea>&nbsp;<b>{tmpl_var name="available_nginx_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="nginx_directive_snippets_txt"}
+                <textarea name="nginx_directives" id="nginx_directives" rows='10' cols='50' style="width:400px;">{tmpl_var name='nginx_directives'}</textarea>&nbsp;<b>{tmpl_var name="available_nginx_directive_snippets_txt"}</b><br><br>&nbsp;{tmpl_var name="nginx_directive_snippets_txt"}<br>----<br><b>&nbsp;{tmpl_var name='variables_txt'}:</b> <a href="javascript:void(0);" class="addPlaceholder">{DOCROOT}</a>, <a href="javascript:void(0);" class="addPlaceholder">{FASTCGIPASS}</a>
             </div>
 			<div class="ctrlHolder proxy">
                 <label for="proxy_directives">{tmpl_var name='proxy_directives_txt'}</label>
diff --git a/interface/web/sites/templates/web_vhost_subdomain_backup.htm b/interface/web/sites/templates/web_vhost_subdomain_backup.htm
index 6c55e50..d76afdf 100644
--- a/interface/web/sites/templates/web_vhost_subdomain_backup.htm
+++ b/interface/web/sites/templates/web_vhost_subdomain_backup.htm
@@ -17,6 +17,10 @@
                     {tmpl_var name='backup_copies'}
                 </select>
             </div>
+			<div class="ctrlHolder">
+                <label for="backup_excludes">{tmpl_var name='backup_excludes_txt'}</label>
+                <input name="backup_excludes" id="backup_excludes" value="{tmpl_var name='backup_excludes'}" size="30" type="text" class="textInput" />&nbsp;{tmpl_var name='backup_excludes_note_txt'}
+            </div>
         </fieldset>
 
         {tmpl_var name='backup_records'}
diff --git a/interface/web/sites/web_domain_edit.php b/interface/web/sites/web_domain_edit.php
index dde0b09..2d9c774 100644
--- a/interface/web/sites/web_domain_edit.php
+++ b/interface/web/sites/web_domain_edit.php
@@ -611,6 +611,13 @@
 			if($client['limit_wildcard'] != 'y' && $this->dataRecord['subdomain'] == '*') $this->dataRecord['subdomain'] = '-';
 			if($client['limit_ssl'] != 'y') $this->dataRecord['ssl'] = '-';
 
+			// only generate quota and traffic warnings if value has changed
+			if($this->id > 0) {
+				$old_web_values = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$app->functions->intval($this->id));
+			}  else {
+				$old_web_values = array();
+			}
+
 			//* Check the website quota of the client
 			if(isset($_POST["hd_quota"]) && $client["limit_web_quota"] >= 0 && $_POST["hd_quota"] != $old_web_values["hd_quota"]) {
 				$tmp = $app->db->queryOneRecord("SELECT sum(hd_quota) as webquota FROM web_domain WHERE domain_id != ".$app->functions->intval($this->id)." AND type = 'vhost' AND ".$app->tform->getAuthSQL('u'));
@@ -855,8 +862,10 @@
 		$php_open_basedir = str_replace("[website_path]", $document_root, $web_config["php_open_basedir"]);
 		$php_open_basedir = $app->db->quote(str_replace("[website_domain]", $web_rec['domain'], $php_open_basedir));
 		$htaccess_allow_override = $app->db->quote($web_config["htaccess_allow_override"]);
+		$added_date = date($app->lng('conf_format_dateshort'));
+		$added_by = $app->db->quote($_SESSION['s']['user']['username']);
 
-		$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group', document_root = '$document_root', allow_override = '$htaccess_allow_override', php_open_basedir = '$php_open_basedir'  WHERE domain_id = ".$this->id;
+		$sql = "UPDATE web_domain SET system_user = '$system_user', system_group = '$system_group', document_root = '$document_root', allow_override = '$htaccess_allow_override', php_open_basedir = '$php_open_basedir', added_date = '$added_date', added_by = '$added_by'  WHERE domain_id = ".$this->id;
 		$app->db->query($sql);
 	}
 
diff --git a/interface/web/themes/blue/css/styles.css b/interface/web/themes/blue/css/styles.css
new file mode 100644
index 0000000..b988938
--- /dev/null
+++ b/interface/web/themes/blue/css/styles.css
@@ -0,0 +1,1868 @@
+@charset "UTF-8";
+/* 
+    Document   : styles.css
+    Created on : 06.07.2012, 12:21:59
+    Author     : Christian Foellmann (foe-services.de)
+    Description:
+        Basis was css-code from the "ISPConfig 3: default theme" which was based on
+        "Yet Another Multicolumn Layout" - (X)HTML/CSS Framework 3.0.6
+        by Copyright 2005-2008, Dirk Jesse (http://www.yaml.de)
+*/
+
+/* overall
+-------------------------------------------------------------- */
+* {
+    margin: 0;
+    padding: 0;
+}
+html * { font-size: 100.01% }
+body {
+    font-family: "Trebuchet MS", sans-serif;
+    font-size: 75.00%; 
+    color: #444;
+    background: url("../../default/images/screen_bg.png") repeat-x top left fixed #EEEEEE;
+    padding: 10px 0;
+}
+ul, ol, dl { line-height: 1.5em; margin: 0 0 1em 1em }
+li { margin-left: 1.5em; line-height: 1.5em }
+dt { font-weight: bold }
+dd { margin: 0 0 1em 2em }
+a {
+    color: #444;
+    text-decoration:none;
+}
+a:focus,
+a:hover,
+a:active {
+    color:#182E7A;
+    text-decoration:underline;
+}
+hr {
+    color: #fff;
+    background:transparent;
+    margin: 0 0 0.5em 0;
+    padding: 0 0 0.5em 0;
+    border:0;
+    border-bottom: 1px #eee solid;
+}
+textarea, pre, tt, code {
+    font-family: Consolas,"Lucida Console","Courier New",monospace;
+    font-size: 0.9em;	
+}
+
+h1,h2,h3,h4,h5,h6 { 
+    font-family: "Trebuchet MS", sans-serif;
+    font-weight:bold; 
+    color:#666;
+    margin: 0 0 0.25em 0; 
+}
+h1 { font-size: 200% }                        /* 24px */
+h2 { font-size: 200% }                        /* 24px */
+h3 { font-size: 150% }                        /* 18px */
+h4 { font-size: 133.33% }                     /* 16px */
+h5 { font-size: 116.67% }                     /* 14px */
+h6 { font-size: 116.67%; font-style:italic }  /* 14px */
+
+p { line-height: 1.5em; margin: 0 0 1em 0; }
+
+cite, blockquote { font-style:italic }
+blockquote { margin: 0 0 1em 1.5em }
+
+strong,b { font-weight: bold }
+em,i { font-style:italic }
+
+pre, code { font-family: monospace; font-size: 1.1em; }
+
+acronym, abbr {
+    letter-spacing: .07em;
+    border-bottom: .1em dashed #c00;
+    cursor: help;
+}
+
+header, #nav, #main, footer {
+    clear: both;
+}
+#page {
+    min-width: 980px;
+    max-width: 80%;
+    background: #fff;
+    text-align:left;
+    margin: 0 auto;
+    padding: 10px;
+}
+.skip, .hideme, .print {
+    height: 1px;
+    left: -1000em;
+    position: absolute;
+    top: -1000em;
+    width: 1px;
+}
+
+/* header
+-------------------------------------------------------------- */
+header {
+    position: relative;
+    color: #faf0e6;
+    padding: 15px 2em 5px 20px;
+    background: url("../images/header_bg.png") repeat-x top left #6da1ed;
+}
+header h1 {
+    font-size:2.5em;
+    letter-spacing:-2px;
+    line-height:65%;
+    color: silver;
+}
+header span {
+    color: #333333;
+}
+
+/* header/topsubnav
+-------------------------------------------------------------- */
+#topsubnav {
+    position:absolute;
+    top: 10px;
+    right: 10px;
+    text-align: right;
+}
+#topsubnav a { 
+    color: #6da0ed;
+    font-weight: normal;
+    background:transparent;
+    text-decoration:none;
+}
+#topsubnav a:focus, 
+#topsubnav a:hover,
+#topsubnav a:active {
+    text-decoration:underline;
+    background-color: transparent;
+}
+
+/* nav
+-------------------------------------------------------------- */
+#topNav ul {
+    list-style: none;
+    padding: 0 0 0 20px;
+    margin: 0;
+    background: #6da1ed
+}
+
+#topNav ul li {
+    display: inline;
+    margin: 0 2px 0 0;
+}
+
+#topNav a {
+    background: url("../icons/x32_sprite.png") no-repeat #6DA1ED;
+    border-top-left-radius:5px;
+    border-top-right-radius:5px;
+    color:black;
+    display:inline-block;
+    height:20px;
+    padding-top:37px;
+    text-align:center;
+    text-decoration:none;
+    min-width:78px;
+}
+
+#topNav a:hover {
+    background-color: #eeeeee;
+    color: #000000;
+}
+
+#topNav #topNav_current a {
+    font-weight: bold;
+    color: black;
+    background-color: #ffffff;
+}
+.topnav-tools { background-position: 22px -10px !important; }
+.topnav-admin { background-position: 22px -74px !important; }
+.topnav-sites { background-position: 22px -523px !important; }
+.topnav-monitor { background-position: 22px -585px !important; }
+.topnav- { background-position: 22px -650px !important; }
+.topnav-help { background-position: 22px -715px !important; }
+.topnav-mail { background-position: 22px -780px !important; }
+.topnav-mailuser { background-position: 22px -780px !important; }
+.topnav-vm { background-position: 22px -842px !important; }
+.topnav-domain { background-position: 22px -905px !important; }
+.topnav-dns { background-position: 22px -970px !important; }
+.topnav-dashboard { background-position: 22px -1035px !important; }
+.topnav-client { background-position: 22px -1098px !important; }
+.topnav-billing { background-position: 22px -1162px !important; }
+#topNav a span {
+            padding: 0 3px;
+        }
+/* main
+-------------------------------------------------------------- */
+#main { 
+    background: #fff;
+    padding: 1em 0;
+}
+
+/* main/sideNav + submenu
+-------------------------------------------------------------- */
+#sideNav { 
+    width: 200px; 
+    float:left;
+    padding: 0 10px 0 0; 
+}
+
+#submenu {
+    width: 100%;
+    overflow: hidden;
+    margin: 0px;
+    list-style-type: none;
+    border-bottom: 2px #ddd solid;
+}
+
+#submenu ul {
+    list-style-type: none;
+    margin:0;
+    padding: 0;
+}
+#submenu li {
+    float:left;
+    width: 100%;
+    margin:0;
+    padding: 0;
+    font-size:0.9em;
+}
+
+#submenu a,
+#submenu strong {
+    display:block;
+    width: 90%;
+    padding: 2px 0px 2px 10%;
+    text-decoration: none;
+    background-color:#fff;
+    color: #444;
+    border-bottom: 1px #eee solid;
+}
+
+/* Menu Title */
+#submenu li.title {
+    width: 100%;
+    padding: 0px;
+    font-weight: bold;
+    color: #444;
+    background-color: #fff;
+    border-top: 2px #888 solid;
+    font-size: 1.1em;
+}
+
+#submenu li.title a {
+    background-color: #444;
+    color: #fff;
+}
+#submenu li.title a:hover {
+    color: white;
+}
+
+#submenu li span {
+    display:block;
+    width: 90%;
+    padding: 3px 0px 3px 10%;
+    font-weight: bold;
+    border-bottom: 1px #ddd solid;
+}
+
+/* Level 1 */
+#submenu li.active,
+#submenu li strong {
+    width: 90%;
+    padding: 3px 0px 3px 10%;
+    font-weight: bold;
+    color: #fff;
+    background-color:#aab;
+    border-bottom: 1px #eee solid;
+}
+
+#submenu li a {
+    width: 90%;
+    padding-left: 10%;
+    background-color:#fff;
+    color: #444;
+}
+#submenu li a:focus,
+#submenu li a:hover,
+#submenu li a:active {
+    background-color:#444;
+    color: #fff;
+}
+
+/* Form-Elements in the Menu*/
+#submenu * select#server_id {
+    margin: 3px 10%;
+    padding: 1px;
+    width: 80%;
+}
+
+/* main/content
+-------------------------------------------------------------- */
+#content { 
+    margin-left: 200px; 
+    margin-right: 0;
+    padding: 0px 10px 10px 20px;
+    border-left: 1px #ddd solid;
+}
+
+/* footer
+-------------------------------------------------------------- */
+
+footer { 
+    color:#666; 
+    background: #f9f9f9;
+    padding: 10px 20px;
+    border-top: 5px #efefef solid;
+    font-size: 0.8em;
+    text-align: center;
+}
+footer a {
+    color: #999;
+    background:transparent;
+    font-weight: bold;
+}
+footer a:hover, footer a:active {
+    color: #4D87C7; 
+    background-color: transparent; 
+    text-decoration:underline;
+}
+
+/* Set a background-color, no system backgorund used anymore */
+select, input, textarea {
+    background: #FFFFFF;
+    border: 1px solid #DFDFDF;
+    padding: 1px;
+    outline:none;
+}
+
+table { width: auto; border-collapse:collapse; margin-bottom: 0.5em; }
+table.full { width: 100%; }
+table.fixed { table-layout:fixed }
+
+table.list td {
+    max-width: 350px;
+    min-width: 32px;
+    white-space: nowrap;
+    overflow:hidden;
+    text-overflow: ellipsis;
+    -o-text-overflow: ellipsis;
+    -icab-text-overflow: ellipsis;
+    -khtml-text-overflow: ellipsis;
+    -moz-text-overflow: ellipsis;
+    -webkit-text-overflow: ellipsis;
+}
+th,
+td {
+    padding: 0.5em;
+    text-align:left;
+}
+thead th {
+    background: #444 url("../images/lists_thead_bg.png") repeat-x;
+    color: #fff;
+}
+tbody th {
+    background: #ccc;
+    color: #333;
+}
+tbody th.sub {
+    background: #ddd;
+    color: #333;
+}
+table.list th[class$="_pid"],
+table.list td[class$="_pid"],
+table.list th[class$="_active"],
+table.list td[class$="_active"],
+table.list th.tbl_col_autoresponder,
+table.list td.tbl_col_autoresponder {
+    width: 70px;
+    text-align: center;
+}
+table.list .tbl_col_buttons,
+table.list .tbl_col_limit {
+    width: 150px;
+}
+.tbl_col_client_pid input {
+    width: 50px;
+}
+.pnl_listarea th[class^="tbl_col"] { cursor:pointer; }
+.pnl_listarea th[class^="tbl_col"]:hover { background-position:0 -15px!important; }
+.pnl_listarea th.tbl_col_nosort { cursor:default; }
+.pnl_listarea th.tbl_col_nosort:hover { background-position:0 0!important; }
+
+.pageForm_description { font-size: 12px; }
+
+/* Tab-Box */
+.tabbox_tabs { border-bottom: 1px solid #d3d3d3; }
+.tabbox_tabs ul {
+    list-style: none;
+    padding: 0;
+    margin: 0;
+}
+.tabbox_tabs li {
+    display: inline;
+    margin: 0 2px 0 0;
+}
+.tabbox_tabs a {
+    padding: 0 1em;
+    text-decoration: none;
+    color: black;
+    background: #d3d3d3;
+    border: 1px solid #d3d3d3;
+}
+.tabbox_tabs a:hover {
+    background: #fc0;
+    color: #540;
+}
+.tabbox_tabs .active a {
+    font-weight: bold;
+    color: #ff6600;
+    background: #ffffff;
+}
+.pnl_toolsarea fieldset, .pnl_listarea fieldset, .pnl_formsarea fieldset {
+    border-top: 1px solid #949494;
+    margin: 20px 0;
+}
+.pnl_toolsarea fieldset legend , .pnl_listarea fieldset legend {
+    font-weight: bold;
+    color: #6299c5;
+}
+.pnl_formarea fieldset {
+    font-weight: bold;
+}
+/* hide line and legend when inside tabbed content */
+#tabbox_content * .pnl_toolsarea fieldset, #tabbox_content * .pnl_listarea fieldset, #tabbox_content * .pnl_formsarea fieldset { border: none !important; }
+#tabbox_content * .pnl_toolsarea fieldset legend, #tabbox_content * .pnl_listarea fieldset legend, #tabbox_content * .pnl_formsarea fieldset legend { display: none !important; }
+.codeview {
+    margin:20px 0;
+    padding:2px;
+    border: 1px solid #ffcc00;
+    background: #fffaea;
+    font-family: Consolas, "Lucida Console", "Courier New", monospace;
+    font-size: 0.9em;
+}
+/* Lists */
+table.list {
+    width: 100%;
+    border: 1px solid #d3d3d3 !important;
+}
+table.list thead th { font-size: 10px; }
+table.list tbody { border: 1px solid #d3d3d3 !important; }
+table.list tfoot td { text-align: center;  background: #444 url("../images/lists_tfoot_bg.png") repeat-x bottom left;  padding: 24px 8px 8px 8px; }
+table.list .tbl_paging img { vertical-align: top; }
+table.list .tbl_row_even { background: #fcfcfc; }
+table.list .tbl_row_uneven { background: #c2d2ea; }
+table.list tr:hover { background: #cffaaf; }
+table.list td { word-wrap:break-word;white-space:pre-wrap; }
+table.list td.tbl_col_buttons { word-wrap:normal;white-space:normal;overflow:visible; }
+
+/* Password Strength */
+#passBar {
+    width: 101px; height: 10px;
+    background: url("../../default/images/meter_bg.gif") repeat-x bottom left;
+    margin: 2px 0;
+    float: left;
+}
+#passText {
+    padding: 0;
+    float: left;
+}
+
+/* Systemmonitor */
+.systemmonitor-server,
+.systemmonitor-ve,
+.systemmonitor-state {
+    margin: 10px 5px;
+    font-family: Consolas, "Lucida Console", "Courier New", monospace;
+    font-size: 0.9em;
+    float: left;
+    width: 100%;
+}
+.systemmonitor-server:hover,
+.systemmonitor-vm:hover { background-color: #FFFACD; }
+.state-no_state,
+.state-no_state-ve {
+    border-top: 4px solid #95A19F;
+    background-color: #f8f8ff;
+}
+.state-unknown,
+.state-unknown-ve {
+    border-top: 4px solid #30302e;
+    background-color: #cecfc5;
+}
+.state-ok,
+.state-ok-ve {
+    border-top: 4px solid #23fb00;
+    background-color: #adffa2;
+}
+.state-info,
+.state-info-ve {
+    border-top: 4px solid #183e99;
+    background-color: #d4e2ff;
+}
+.state-warning,
+.state-warning-ve {
+    border-top: 4px solid #ffa800;
+    background-color: #ffda93;
+}
+.state-critical,
+.state-critical-ve {
+    border-top: 4px solid #ff0000;
+    background-color: #ffb9b9;
+}
+.state-error,
+.state-error-ve {
+    border-top: 4px solid #ff0000;
+    background-color: #ff7f7f;
+}       
+div.icoDevice {
+    float: left;
+    width: 64px;
+    height: 64px;
+    margin: 5px;
+    background: url("../../default/icons/device_sprite.png") no-repeat transparent;
+}
+.systemmonitor-server div.icoDevice { background-position: 0 0; }
+.systemmonitor-ve div.icoDevice { background-position: -64px 0; }
+.systemmonitor-network div.icoDevice { background-position: -128px 0; }
+div.statusDevice,
+div.statusMsg { float: left; }
+div.statusMsg p { 
+    float: left;
+    padding: 5px;
+}
+.systemmonitor-state .status {
+    margin: 5px;
+}
+.status {
+    float: right;
+    width: 32px;
+    height: 32px;
+    background: url("../icons/x32_sprite.png") no-repeat transparent;
+}
+div.status {
+    float: left !important;
+}
+.state-warning .status,
+.state-warning-ve .status { background-position: 0 -143px; }
+.state-no_state .status,
+.state-no_state-ve .status,
+.state-unknown .status,
+.state-unknown-ve .status { background-position: 0 -207px; }
+.state-ok .status,
+.state-ok-ve .status { background-position: 0 -270px; }
+.state-info .status,
+.state-info-ve .status { background-position: 0 -336px; }
+.state-error .status,
+.state-error-ve .status { background-position: 0 -400px; }
+.state-critical .status,
+.state-critical-ve .status { background-position: 0 -463px; }
+
+/* Usage unknown  
+.systemmonitor-content table {
+    border: none;
+    margin-top: 10px;
+}
+
+.systemmonitor-content * .online {
+    border: 1px solid #ffffff;
+    background-color: #E3FFB8;
+    color: #000000;
+    padding:0px 5px;
+}
+.systemmonitor-content * .offline {
+    border: 1px solid #ffffff;
+    background-color: #d12f19; 
+    color:#ffffff;
+    padding:0px 5px;
+}*/
+
+/* Dashboard */
+.dashboard-modules {
+    float:left;
+    width:60px;
+    height: 60px;
+    border:1px dotted #888888;
+    border-radius:5px;
+    background-color: #cccccc;
+    margin:10px;
+    background-position: center 5px;
+    background-repeat: no-repeat;
+    text-align: center;
+}
+.dashboard-modules a, 
+.dashboard-modules a:hover {
+    background: url("../icons/x32_sprite.png") no-repeat transparent;
+    color:Black;
+    display:block;
+    font-weight:bold;
+    height:30px;
+    padding-top:42px;
+    width:60px;
+    text-decoration: none;
+}
+.dashboard-modules.tools a { background-position: 12px -9px; }
+.dashboard-modules.admin a { background-position: 12px -73px; }
+.dashboard-modules.sites a { background-position: 12px -520px; }
+.dashboard-modules.monitor a { background-position: 13px -585px; }
+.dashboard-modules.help a { background-position: 13px -716px; }
+.dashboard-modules.mail a { background-position: 12px -776px; }
+.dashboard-modules.vm a { background-position: 14px -842px; }
+.dashboard-modules.domain a { background-position: 12px -905px; }
+.dashboard-modules.dns a { background-position: 12px -970px; }
+.dashboard-modules.client a { background-position: 13px -1096px; }
+.dashboard-modules.billing a { background-position: 14px -1162px; }
+
+.panel_dashboard h2 { font-size:20px; }
+
+/* Image-Replacement */
+.swap { background-repeat:no-repeat; }
+.swap span { display:none; height:16px; } 
+#ir-HeaderLogo {
+    background-image: url("../../default/images/header_logo.png");
+    height:32px;
+    margin:0 0 0.2em;
+} 
+div#ir-Yes,
+div#ir-No {
+    text-align: center;
+    background: url("../../default/icons/x16_sprite.png") no-repeat transparent;
+}
+#ir-Yes {
+    background-position: center -342px !important;
+    height: 16px;
+}
+#ir-No {
+    background-position: center -362px !important;
+    height: 16px;
+}
+.swap {
+    background-repeat: no-repeat;
+}
+.swap span {
+    display: none;
+    height: 16px;
+}
+/* BUTTONS */
+a.button,
+.button,
+.buttons button {
+    display: inline-block;
+    margin: 0 2px;
+    padding: 2px 5px;
+    color: #525252;
+    text-shadow: 0px 1px 1px #fff;
+    border: 1px solid #c6c6c6;
+    border-radius: 4px;
+    background-color: #f7f7f7;
+    box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+    -o-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+    -webkit-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+    -moz-box-shadow: 0 1px 1px 0 rgba(140, 140, 140, 0.3);
+    text-decoration: none;
+}
+a.button:focus,
+input.button:focus,
+.buttons button:focus {
+    border-color: #4fadd5;
+    box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+    -moz-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+    -webkit-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+    -o-box-shadow: 0 0 2px 1px rgba(71,135,177, 0.6);
+    outline: none;
+}
+.buttons button[type]{
+    padding:5px 10px 5px 7px; /* Firefox */
+    line-height:17px; /* Safari */
+    white-space: nowrap;
+}
+*:first-child+html button[type]{
+    padding:4px 10px 3px 7px; /* IE7 */
+}
+.buttons button img,
+.buttons a img {
+    margin:0 3px -3px 0 !important;
+    padding:0;
+    border:none;
+    width:16px;
+    height:16px;
+}
+.topbuttons {
+    margin-bottom: 10px;
+}
+/* BUTTONS STANDARD */
+button:hover,
+.buttons a:hover {
+    background-color:#dff4ff;
+    border:1px solid #c2e1ef;
+    color:#336699;
+}
+.buttons a:active {
+    background-color:#6299c5;
+    border:1px solid #6299c5;
+    color:#fff;
+}
+
+/* BUTTONS POSITIVE */
+button.positive,
+.buttons a.positive { color:#529214; }
+.buttons a.positive:hover,
+button.positive:hover {
+    background-color:#E6EFC2;
+    border:1px solid #C6D880;
+    color:#529214;
+}
+.buttons a.positive:active {
+    background-color:#529214;
+    border:1px solid #529214;
+    color:#fff;
+}
+
+/* BUTTONS NEGATIVE */
+.buttons a.negative,
+button.negative {
+    color:#d12f19;
+}
+.buttons a.negative:hover,
+button.negative:hover {
+    background-color:#fbe3e4;
+    border:1px solid #fbc2c4;
+    color:#d12f19;
+}
+.buttons a.negative:active {
+    background-color:#d12f19;
+    border:1px solid #d12f19;
+    color:#fff;
+}
+
+/* Button with icon and text */
+.iconstxt { background: url("../../default/icons/button_sprite.png") no-repeat transparent; }
+.iconstxt span { padding-left: 20px; font-weight: bold; }
+.iconstxt.icoPositive { background-position: 6px -130px; }
+.iconstxt.icoNegative { background-position: 6px -98px; }
+.iconstxt.icoAdd { background-position: 6px -66px; }
+.iconstxt.icoKey { background-position: 6px -1px; }
+.iconstxt.icoDelete { background-position: 6px -34px; }
+.iconstxt.icoDownload { background-position: 6px -1px; }
+.iconstxt.icoRestore { background-position: 6px -1px; }
+
+/* Button with icon and without text */
+.icons16 { position: relative; }
+.icons16>span {
+    opacity: 0;
+    visibility: hidden;
+    -webkit-transition: opacity 1s linear;
+    -moz-transition: opacity 1s linear;
+    -o-transition: opacity 1s linear;
+    -ms-transition: opacity 1s linear;
+    transition: opacity 1s linear;
+    position: absolute;
+    right: 23px;
+    top: -1px;
+    padding: 1px 2px;
+    border: 1px solid rgb(155,155,11);
+    background: rgb(255,255,111);
+    white-space: nowrap;
+}
+.icons16:hover>span {
+    opacity: 1.0;
+    visibility: visible;
+}
+a.icons16 {
+    height: 18px;
+    width: 18px;
+    padding: 0;
+    background: url("../../default/icons/x16_sprite.png") no-repeat transparent;
+}
+button.icons16 {
+    height: 20px;
+    width: 20px;
+    padding: 0;
+    background: url("../../default/icons/x16_sprite.png") no-repeat transparent;
+}
+.icons16.icoEdit { background-position: -1px -1px; }
+.icons16.icoLoginAs { background-position: -1px -21px; }
+.icons16.icoPDF { background-position: -1px -61px; }
+.icons16.icoDelete { background-position: -1px -81px; }
+.icons16.icoWebmailer { background-position: -1px -101px; }
+.icons16.icoFilter { background-position: -1px -161px; }
+.icons16.icoDbAdmin { background-position: -1px -221px; }
+.icons16.icoAction { background-position: -1px -241px; }
+.icons16.icoLink { background-position: -1px -422px; float: right; }
+
+div.group-icon {
+    float: left;
+    padding: 2px 0;
+}
+.group-admin,
+.group-user {
+    height: 20px;
+    width: 20px;
+    padding: 0;
+    float: left;
+    background: url("../../default/icons/x16_sprite.png") no-repeat transparent;
+}
+.group-admin { background-position: 0 -380px; }
+.group-user { background-position: 0 -400px; }
+
+span.marked { color: #cc0000; }
+span.small { font-size: 0.9em; }
+
+#ajaxloader {
+    position: absolute;
+    width: 325px;
+    height: 150px;
+    background: #ffffff url('../images/ajax-loader.gif') no-repeat center center;
+    border: solid 2px #e1e1e1;
+    border-radius: 10px;
+    /*background: rgba(255, 255, 255, 0.85);*/
+    padding: 20px;
+    text-align:center;
+    z-index: 100;
+}
+.blockLabel.email_at {
+    width: 20px !important;
+    margin: 1.6em 0.3em 0 0 !important;
+}
+.textDisplay { display: block; }
+
+/* Form Length Classes */
+.textInput.formLengthBool { width: 25px !important; }
+.selectInput.formLengthBool { width: 60px !important; }
+.textInput.formLengthLimit { width: 50px !important; }
+.selectInput.formLengthLimit { width: 85px !important; }
+.formLengthDate { width: 75px !important; }
+.formLengthIPv4 { width: 125px !important; }
+.formLengthIPv6 { }
+.formLengthEmailUser { width: 30% !important; }
+.formLengthEmailDomain { width: 30% !important; }
+.formLengthHalf { width: 15% !important; }
+.formLengthDouble { width: 50% !important; }
+
+/* Individual Form Lengths */
+.textInput#username, 
+.textInput#password,
+.textInput#passwort,
+.textInput#source_password { width: 100px; }
+.selectInput#language {	width: 75px; }
+.selectInput#client_group_id, .selectInput#default_group { width: 125px; }
+input#refresh, input#retry, input#expire, input#minimum, input#ttl { width: 50px !important; }
+
+/* --- */
+
+a[href $="#logout"] {
+    padding-right: 20px;
+    background: url("../../default/icons/x16_sprite.png") no-repeat right -143px transparent !important;
+}
+
+/* Select Menu with Images */
+select.withicons option {
+    background-repeat:no-repeat;
+    background-position: 1px;
+    padding-left:24px;
+}	
+div[class^=country-] {
+    background-image: url("../../default/icons/flags_sprite.png");
+    background-repeat: no-repeat;
+    height: 20px;
+    width: 26px;
+}
+li[class^=country-] {
+    background-image: url("../../default/icons/flags_sprite.png");
+    background-repeat: no-repeat;
+    text-indent: 24px;
+}
+li[class^=country-] a.ui-state-hover { background: transparent; }
+div[class^=country-] span {
+    display: none;
+}
+select.flags option {
+    background-image: url("../../default/icons/flags_sprite.png");
+    background-repeat: no-repeat;
+    padding: 1px 0 1px 30px;
+}
+select.flags option[value=EL] {background-position:0 -1475px}
+select.flags option[value=AD], select.flags option[value=ad], .country-AD {background-position:0 -1px}
+select.flags option[value=AE], select.flags option[value=ae], .country-AE {background-position:0 -23px}
+select.flags option[value=AF], select.flags option[value=af], .country-AF {background-position:0 -45px}
+select.flags option[value=AG], select.flags option[value=ag], .country-AG {background-position:0 -67px}
+select.flags option[value=AI], select.flags option[value=ai], .country-AI {background-position:0 -89px}
+select.flags option[value=AL], select.flags option[value=al], .country-AL {background-position:0 -111px}
+select.flags option[value=AM], select.flags option[value=am], .country-AM {background-position:0 -133px}
+select.flags option[value=AN], select.flags option[value=an], .country-AN {background-position:0 -155px}
+select.flags option[value=AO], select.flags option[value=ao], .country-AO {background-position:0 -177px}
+select.flags option[value=AQ], select.flags option[value=aq], .country-AQ {background-position:0 -199px}
+select.flags option[value=AR], select.flags option[value=ar], .country-AR {background-position:0 -221px}
+select.flags option[value=AS], select.flags option[value=as], .country-AS {background-position:0 -243px}
+select.flags option[value=AT], select.flags option[value=at], .country-AT {background-position:0 -265px}
+select.flags option[value=AU], select.flags option[value=au], .country-AU {background-position:0 -287px}
+select.flags option[value=AW], select.flags option[value=aw], .country-AW {background-position:0 -309px}
+select.flags option[value=AX], select.flags option[value=ax], .country-AX {background-position:0 -331px}
+select.flags option[value=AZ], select.flags option[value=az], .country-AZ {background-position:0 -353px}
+select.flags option[value=BA], select.flags option[value=ba], .country-BA {background-position:0 -375px}
+select.flags option[value=BB], select.flags option[value=bb], .country-BB {background-position:0 -397px}
+select.flags option[value=BD], select.flags option[value=bd], .country-BD {background-position:0 -419px}
+select.flags option[value=BE], select.flags option[value=be], .country-BE {background-position:0 -441px}
+select.flags option[value=BF], select.flags option[value=bf], .country-BF {background-position:0 -463px}
+select.flags option[value=BG], select.flags option[value=bg], .country-BG {background-position:0 -485px}
+select.flags option[value=BH], select.flags option[value=bh], .country-BH {background-position:0 -507px}
+select.flags option[value=BI], select.flags option[value=bi], .country-BI {background-position:0 -529px}
+select.flags option[value=BJ], select.flags option[value=bj], .country-BJ {background-position:0 -551px}
+select.flags option[value=BM], select.flags option[value=bm], .country-BM {background-position:0 -573px}
+select.flags option[value=BN], select.flags option[value=bn], .country-BN {background-position:0 -595px}
+select.flags option[value=BO], select.flags option[value=bo], .country-BO {background-position:0 -617px}
+select.flags option[value=BR], select.flags option[value=br], .country-BR {background-position:0 -639px}
+select.flags option[value=BS], select.flags option[value=bs], .country-BS {background-position:0 -661px}
+select.flags option[value=BT], select.flags option[value=bt], .country-BT {background-position:0 -683px}
+select.flags option[value=BV], select.flags option[value=bv], .country-BV {background-position:0 -705px}
+select.flags option[value=BW], select.flags option[value=bw], .country-BW {background-position:0 -727px}
+select.flags option[value=BY], select.flags option[value=by], .country-BY {background-position:0 -749px}
+select.flags option[value=BZ], select.flags option[value=bz], .country-BZ {background-position:0 -771px}
+select.flags option[value=CA], select.flags option[value=ca], .country-CA {background-position:0 -793px}
+select.flags option[value=CC], select.flags option[value=cc], .country-CC {background-position:0 -837px}
+select.flags option[value=CD], select.flags option[value=cd], .country-CD {background-position:0 -859px}
+select.flags option[value=CF], select.flags option[value=cf], .country-CF {background-position:0 -881px}
+select.flags option[value=CG], select.flags option[value=cg], .country-CG {background-position:0 -903px}
+select.flags option[value=CH], select.flags option[value=ch], .country-CH {background-position:0 -925px}
+select.flags option[value=CI], select.flags option[value=ci], .country-CI {background-position:0 -947px}
+select.flags option[value=CK], select.flags option[value=ck], .country-CK {background-position:0 -969px}
+select.flags option[value=CL], select.flags option[value=cl], .country-CL {background-position:0 -991px}
+select.flags option[value=CM], select.flags option[value=cm], .country-CM {background-position:0 -1013px}
+select.flags option[value=CN], select.flags option[value=cn], .country-CN {background-position:0 -1035px}
+select.flags option[value=CO], select.flags option[value=co], .country-CO {background-position:0 -1057px}
+select.flags option[value=CR], select.flags option[value=cr], .country-CR {background-position:0 -1079px}
+select.flags option[value=CS], select.flags option[value=cs], .country-CS {background-position:0 -1101px}
+select.flags option[value=CU], select.flags option[value=cu], .country-CU {background-position:0 -1123px}
+select.flags option[value=CV], select.flags option[value=cv], .country-CV {background-position:0 -1145px}
+select.flags option[value=CX], select.flags option[value=cx], .country-CX {background-position:0 -1167px}
+select.flags option[value=CY], select.flags option[value=cy], .country-CY {background-position:0 -1189px}
+select.flags option[value=CZ], select.flags option[value=cz], .country-CZ {background-position:0 -1211px}
+select.flags option[value=DE], select.flags option[value=de], .country-DE {background-position:0 -1233px}
+select.flags option[value=DJ], select.flags option[value=dj], .country-DJ {background-position:0 -1255px}
+select.flags option[value=DK], select.flags option[value=dk], .country-DK {background-position:0 -1277px}
+select.flags option[value=DM], select.flags option[value=dm], .country-DM {background-position:0 -1299px}
+select.flags option[value=DO], select.flags option[value=do], .country-DO {background-position:0 -1321px}
+select.flags option[value=DZ], select.flags option[value=dz], .country-DZ {background-position:0 -1343px}
+select.flags option[value=EC], select.flags option[value=ec], .country-EC {background-position:0 -1365px}
+select.flags option[value=EE], select.flags option[value=ee], .country-EE {background-position:0 -1387px}
+select.flags option[value=EG], select.flags option[value=eg], .country-EG {background-position:0 -1409px}
+select.flags option[value=EH], select.flags option[value=eh], .country-EH {background-position:0 -1431px}
+select.flags option[value=ER], select.flags option[value=er], .country-ER {background-position:0 -1475px}
+select.flags option[value=ES], select.flags option[value=es], .country-ES {background-position:0 -1497px}
+select.flags option[value=ET], select.flags option[value=ET], select.flags option[value=et], .country-ET {background-position:0 -1519px}
+select.flags option[value=FI], select.flags option[value=fi], .country-FI {background-position:0 -1585px}
+select.flags option[value=FJ], select.flags option[value=fj], .country-FJ {background-position:0 -1607px}
+select.flags option[value=FK], select.flags option[value=fk], .country-FK {background-position:0 -1629px}
+select.flags option[value=FM], select.flags option[value=fm], .country-FM {background-position:0 -1651px}
+select.flags option[value=FO], select.flags option[value=fo], .country-FO {background-position:0 -1673px}
+select.flags option[value=FR], select.flags option[value=fr], .country-FR {background-position:0 -1695px}
+select.flags option[value=GA], select.flags option[value=ga], .country-GA {background-position:0 -1717px}
+select.flags option[value=GB], select.flags option[value=en], select.flags option[value=gb], .country-GB, .country-EN {background-position:0 -1739px}
+select.flags option[value=GD], select.flags option[value=gd], .country-GD {background-position:0 -1761px}
+select.flags option[value=GE], select.flags option[value=ge], .country-GE {background-position:0 -1783px}
+select.flags option[value=GF], select.flags option[value=gf], .country-GF {background-position:0 -1805px}
+select.flags option[value=GH], select.flags option[value=gh], .country-GH {background-position:0 -1827px}
+select.flags option[value=GI], select.flags option[value=gi], .country-GI {background-position:0 -1849px}
+select.flags option[value=GL], select.flags option[value=gl], .country-GL {background-position:0 -1871px}
+select.flags option[value=GM], select.flags option[value=gm], .country-GM {background-position:0 -1893px}
+select.flags option[value=GN], select.flags option[value=gn], .country-GN {background-position:0 -1915px}
+select.flags option[value=GP], select.flags option[value=gp], .country-GP {background-position:0 -1937px}
+select.flags option[value=GQ], select.flags option[value=gq], .country-GQ {background-position:0 -1959px}
+select.flags option[value=GR], select.flags option[value=el], select.flags option[value=gr], .country-GR, .country-EL {background-position:0 -1981px}
+select.flags option[value=GS], select.flags option[value=gs], .country-GS {background-position:0 -2003px}
+select.flags option[value=GT], select.flags option[value=gt], .country-GT {background-position:0 -2025px}
+select.flags option[value=GU], select.flags option[value=gu], .country-GU {background-position:0 -2047px}
+select.flags option[value=GW], select.flags option[value=gw], .country-GW {background-position:0 -2069px}
+select.flags option[value=GY], select.flags option[value=gy], .country-GY {background-position:0 -2091px}
+select.flags option[value=HK], select.flags option[value=hk], .country-HK {background-position:0 -2113px}
+select.flags option[value=HM], select.flags option[value=hm], .country-HM {background-position:0 -2135px}
+select.flags option[value=HN], select.flags option[value=hn], .country-HN {background-position:0 -2157px}
+select.flags option[value=HR], select.flags option[value=hr], .country-HR {background-position:0 -2179px}
+select.flags option[value=HT], select.flags option[value=ht], .country-HT {background-position:0 -2201px}
+select.flags option[value=HU], select.flags option[value=hu], .country-HU {background-position:0 -2223px}
+select.flags option[value=ID], select.flags option[value=id], .country-ID {background-position:0 -2245px}
+select.flags option[value=IE], select.flags option[value=ie], .country-IE {background-position:0 -2267px}
+select.flags option[value=IL], select.flags option[value=il], .country-IL {background-position:0 -2289px}
+select.flags option[value=IN], select.flags option[value=in], .country-IN {background-position:0 -2311px}
+select.flags option[value=IO], select.flags option[value=io], .country-IO {background-position:0 -2333px}
+select.flags option[value=IQ], select.flags option[value=iq], .country-IQ {background-position:0 -2355px}
+select.flags option[value=IR], select.flags option[value=ir], .country-IR {background-position:0 -2377px}
+select.flags option[value=IS], select.flags option[value=is], .country-IS {background-position:0 -2399px}
+select.flags option[value=IT], select.flags option[value=it], .country-IT {background-position:0 -2421px}
+select.flags option[value=JM], select.flags option[value=jm], .country-JM {background-position:0 -2443px}
+select.flags option[value=JO], select.flags option[value=jo], .country-JO {background-position:0 -2465px}
+select.flags option[value=JP], select.flags option[value=ja], select.flags option[value=jp], .country-JP, .country-JA {background-position:0 -2487px}
+select.flags option[value=KE], select.flags option[value=ke], .country-KE {background-position:0 -2509px}
+select.flags option[value=KG], select.flags option[value=kg], .country-KG {background-position:0 -2531px}
+select.flags option[value=KH], select.flags option[value=kh], .country-KH {background-position:0 -2553px}
+select.flags option[value=KI], select.flags option[value=ki], .country-KI {background-position:0 -2575px}
+select.flags option[value=KM], select.flags option[value=km], .country-KM {background-position:0 -2597px}
+select.flags option[value=KN], select.flags option[value=kn], .country-KN {background-position:0 -2619px}
+select.flags option[value=KP], select.flags option[value=kp], .country-KP {background-position:0 -2641px}
+select.flags option[value=KR], select.flags option[value=kr], .country-KR {background-position:0 -2663px}
+select.flags option[value=KW], select.flags option[value=kw], .country-KW {background-position:0 -2685px}
+select.flags option[value=KY], select.flags option[value=ky], .country-KY {background-position:0 -2707px}
+select.flags option[value=KZ], select.flags option[value=kz], .country-KZ {background-position:0 -2729px}
+select.flags option[value=LA], select.flags option[value=la], .country-LA {background-position:0 -2751px}
+select.flags option[value=LB], select.flags option[value=lb], .country-LB {background-position:0 -2773px}
+select.flags option[value=LC], select.flags option[value=lc], .country-LC {background-position:0 -2795px}
+select.flags option[value=LI], select.flags option[value=li], .country-LI {background-position:0 -2817px}
+select.flags option[value=LK], select.flags option[value=lk], .country-LK {background-position:0 -2839px}
+select.flags option[value=LR], select.flags option[value=lr], .country-LR {background-position:0 -2861px}
+select.flags option[value=LS], select.flags option[value=ls], .country-LS {background-position:0 -2883px}
+select.flags option[value=LT], select.flags option[value=lt], .country-LT {background-position:0 -2905px}
+select.flags option[value=LU], select.flags option[value=lu], .country-LU {background-position:0 -2927px}
+select.flags option[value=LV], select.flags option[value=lv], .country-LV {background-position:0 -2949px}
+select.flags option[value=LY], select.flags option[value=ly], .country-LY {background-position:0 -2971px}
+select.flags option[value=MA], select.flags option[value=ma], .country-MA {background-position:0 -2993px}
+select.flags option[value=MC], select.flags option[value=mc], .country-MC {background-position:0 -3015px}
+select.flags option[value=MD], select.flags option[value=md], .country-MD {background-position:0 -3037px}
+select.flags option[value=ME], select.flags option[value=me], .country-ME {background-position:0 -3059px}
+select.flags option[value=MG], select.flags option[value=mg], .country-MG {background-position:0 -3081px}
+select.flags option[value=MH], select.flags option[value=mh], .country-MH {background-position:0 -3103px}
+select.flags option[value=MK], select.flags option[value=mk], .country-MK {background-position:0 -3125px}
+select.flags option[value=ML], select.flags option[value=ml], .country-ML {background-position:0 -3147px}
+select.flags option[value=MM], select.flags option[value=mm], .country-MM {background-position:0 -3169px}
+select.flags option[value=MN], select.flags option[value=mn], .country-MN {background-position:0 -3191px}
+select.flags option[value=MO], select.flags option[value=mo], .country-MO {background-position:0 -3213px}
+select.flags option[value=MP], select.flags option[value=mp], .country-MP {background-position:0 -3235px}
+select.flags option[value=MQ], select.flags option[value=mq], .country-MQ {background-position:0 -3257px}
+select.flags option[value=MR], select.flags option[value=mr], .country-MR {background-position:0 -3279px}
+select.flags option[value=MS], select.flags option[value=ms], .country-MS {background-position:0 -3301px}
+select.flags option[value=MT], select.flags option[value=mt], .country-MT {background-position:0 -3323px}
+select.flags option[value=MU], select.flags option[value=mu], .country-MU {background-position:0 -3345px}
+select.flags option[value=MV], select.flags option[value=mv], .country-MV {background-position:0 -3367px}
+select.flags option[value=MW], select.flags option[value=mw], .country-MW {background-position:0 -3389px}
+select.flags option[value=MX], select.flags option[value=mx], .country-MX {background-position:0 -3411px}
+select.flags option[value=MY], select.flags option[value=my], .country-MY {background-position:0 -3433px}
+select.flags option[value=MZ], select.flags option[value=mz], .country-MZ {background-position:0 -3455px}
+select.flags option[value=NA], select.flags option[value=na], .country-NA {background-position:0 -3477px}
+select.flags option[value=NC], select.flags option[value=nc], .country-NC {background-position:0 -3499px}
+select.flags option[value=NE], select.flags option[value=ne], .country-NE {background-position:0 -3521px}
+select.flags option[value=NF], select.flags option[value=nf], .country-NF {background-position:0 -3543px}
+select.flags option[value=NG], select.flags option[value=ng], .country-NG {background-position:0 -3565px}
+select.flags option[value=NI], select.flags option[value=ni], .country-NI {background-position:0 -3587px}
+select.flags option[value=NL], select.flags option[value=nl], .country-NL {background-position:0 -3609px}
+select.flags option[value=NO], select.flags option[value=no], .country-NO {background-position:0 -3631px}
+select.flags option[value=NP], select.flags option[value=np], .country-NP {background-position:0 -3653px}
+select.flags option[value=NR], select.flags option[value=nr], .country-NR {background-position:0 -3675px}
+select.flags option[value=NU], select.flags option[value=nu], .country-NU {background-position:0 -3697px}
+select.flags option[value=NZ], select.flags option[value=nz], .country-NZ {background-position:0 -3719px}
+select.flags option[value=OM], select.flags option[value=om], .country-OM {background-position:0 -3741px}
+select.flags option[value=PA], select.flags option[value=pa], .country-PA {background-position:0 -3763px}
+select.flags option[value=PE], select.flags option[value=pe], .country-PE {background-position:0 -3785px}
+select.flags option[value=PF], select.flags option[value=pf], .country-PF {background-position:0 -3807px}
+select.flags option[value=PG], select.flags option[value=pg], .country-PG {background-position:0 -3829px}
+select.flags option[value=PH], select.flags option[value=ph], .country-PH {background-position:0 -3851px}
+select.flags option[value=PK], select.flags option[value=pk], .country-PK {background-position:0 -3873px}
+select.flags option[value=PL], select.flags option[value=pl], .country-PL {background-position:0 -3895px}
+select.flags option[value=PM], select.flags option[value=pm], .country-PM {background-position:0 -3917px}
+select.flags option[value=PN], select.flags option[value=pn], .country-PN {background-position:0 -3939px}
+select.flags option[value=PR], select.flags option[value=pr], .country-PR {background-position:0 -3961px}
+select.flags option[value=PS], select.flags option[value=ps], .country-PS {background-position:0 -3983px}
+select.flags option[value=PT], select.flags option[value=pt], .country-PT {background-position:0 -4005px}
+select.flags option[value=PW], select.flags option[value=pw], .country-PW {background-position:0 -4027px}
+select.flags option[value=PY], select.flags option[value=py], .country-PY {background-position:0 -4049px}
+select.flags option[value=QA], select.flags option[value=qa], .country-QA {background-position:0 -4071px}
+select.flags option[value=RE], select.flags option[value=re], .country-RE {background-position:0 -4093px}
+select.flags option[value=RO], select.flags option[value=ro], .country-RO {background-position:0 -4115px}
+select.flags option[value=RS], select.flags option[value=rs], .country-RS {background-position:0 -4137px}
+select.flags option[value=RU], select.flags option[value=ru], .country-RU {background-position:0 -4159px}
+select.flags option[value=RW], select.flags option[value=rw], .country-RW {background-position:0 -4181px}
+select.flags option[value=SA], select.flags option[value=sa], .country-SA {background-position:0 -4203px}
+select.flags option[value=SB], select.flags option[value=sb], .country-SB {background-position:0 -4225px}
+select.flags option[value=SC], select.flags option[value=sc], .country-SC {background-position:0 -4247px}
+select.flags option[value=SD], select.flags option[value=sd], .country-SD {background-position:0 -4291px}
+select.flags option[value=SE], select.flags option[value=se], .country-SE {background-position:0 -4313px}
+select.flags option[value=SG], select.flags option[value=sg], .country-SG {background-position:0 -4335px}
+select.flags option[value=SH], select.flags option[value=sh], .country-SH {background-position:0 -4357px}
+select.flags option[value=SI], select.flags option[value=si], .country-SI {background-position:0 -4379px}
+select.flags option[value=SJ], select.flags option[value=sj], .country-SJ {background-position:0 -4401px}
+select.flags option[value=SK], select.flags option[value=sk], .country-SK {background-position:0 -4423px}
+select.flags option[value=SL], select.flags option[value=sl], .country-SL {background-position:0 -4445px}
+select.flags option[value=SM], select.flags option[value=sm], .country-SM {background-position:0 -4467px}
+select.flags option[value=SN], select.flags option[value=sn], .country-SN {background-position:0 -4489px}
+select.flags option[value=SO], select.flags option[value=so], .country-SO {background-position:0 -4511px}
+select.flags option[value=SR], select.flags option[value=sr], .country-SR {background-position:0 -4533px}
+select.flags option[value=ST], select.flags option[value=st], .country-ST {background-position:0 -4555px}
+select.flags option[value=SV], select.flags option[value=sv], .country-SV {background-position:0 -4577px}
+select.flags option[value=SY], select.flags option[value=sy], .country-SY {background-position:0 -4599px}
+select.flags option[value=SZ], select.flags option[value=sz], .country-SZ {background-position:0 -4621px}
+select.flags option[value=TC], select.flags option[value=tc], .country-TC {background-position:0 -4643px}
+select.flags option[value=TD], select.flags option[value=td], .country-TD {background-position:0 -4665px}
+select.flags option[value=TF], select.flags option[value=tf], .country-TF {background-position:0 -4687px}
+select.flags option[value=TG], select.flags option[value=tg], .country-TG {background-position:0 -4709px}
+select.flags option[value=TH], select.flags option[value=th], .country-TH {background-position:0 -4731px}
+select.flags option[value=TJ], select.flags option[value=tj], .country-TJ {background-position:0 -4753px}
+select.flags option[value=TK], select.flags option[value=tk], .country-TK {background-position:0 -4775px}
+select.flags option[value=TL], select.flags option[value=tl], .country-TL {background-position:0 -4797px}
+select.flags option[value=TM], select.flags option[value=tm], .country-TM {background-position:0 -4819px}
+select.flags option[value=TN], select.flags option[value=tn], .country-TN {background-position:0 -4841px}
+select.flags option[value=TO], select.flags option[value=to], .country-TO {background-position:0 -4863px}
+select.flags option[value=TR], select.flags option[value=tr], .country-TR {background-position:0 -4885px}
+select.flags option[value=TT], select.flags option[value=tt], .country-TT {background-position:0 -4907px}
+select.flags option[value=TV], select.flags option[value=tv], .country-TV {background-position:0 -4929px}
+select.flags option[value=TW], select.flags option[value=tw], .country-TW {background-position:0 -4951px}
+select.flags option[value=TZ], select.flags option[value=tz], .country-TZ {background-position:0 -4973px}
+select.flags option[value=UA], select.flags option[value=ua], .country-UA {background-position:0 -4995px}
+select.flags option[value=UG], select.flags option[value=ug], .country-UG {background-position:0 -5017px}
+select.flags option[value=UM], select.flags option[value=um], .country-UM {background-position:0 -5039px}
+select.flags option[value=US], select.flags option[value=us], .country-US {background-position:0 -5061px}
+select.flags option[value=UY], select.flags option[value=uy], .country-UY {background-position:0 -5083px}
+select.flags option[value=UZ], select.flags option[value=uz], .country-UZ {background-position:0 -5105px}
+select.flags option[value=VA], select.flags option[value=va], .country-VA {background-position:0 -5127px}
+select.flags option[value=VC], select.flags option[value=vc], .country-VC {background-position:0 -5149px}
+select.flags option[value=VE], select.flags option[value=ve], .country-VE {background-position:0 -5171px}
+select.flags option[value=VG], select.flags option[value=vg], .country-VG {background-position:0 -5193px}
+select.flags option[value=VI], select.flags option[value=vi], .country-VI {background-position:0 -5215px}
+select.flags option[value=VN], select.flags option[value=vn], .country-VN {background-position:0 -5237px}
+select.flags option[value=VU], select.flags option[value=vu], .country-VU {background-position:0 -5259px}
+select.flags option[value=WF], select.flags option[value=wf], .country-WF {background-position:0 -5303px}
+select.flags option[value=WS], select.flags option[value=ws], .country-WS {background-position:0 -5325px}
+select.flags option[value=YE], select.flags option[value=ye], .country-YE {background-position:0 -5347px}
+select.flags option[value=YT], select.flags option[value=yt], .country-YT {background-position:0 -5369px}
+select.flags option[value=ZA], select.flags option[value=za], .country-ZA {background-position:0 -5391px}
+select.flags option[value=ZM], select.flags option[value=zm], .country-ZM {background-position:0 -5413px}
+select.flags option[value=ZW], select.flags option[value=zw], .country-ZW {background-position:0 -5435px}
+
+.panel_login {
+    max-width: 80%;
+    min-width: 680px;
+}
+div.subsectiontoggle {
+    border:1px solid #ccc;
+    font-weight:bold;
+    font-size:14px;
+    padding-top:10px;
+    padding-bottom:0;
+    margin-top:5px;
+    text-indent:15px;
+    cursor:pointer;
+    margin-bottom:10px;
+    background-color:#f4f4f4;
+    -moz-border-radius:5px;
+    -webkit-border-radius:5px;
+    -khtml-border-radius:5px;
+    -o-border-radius:5px;
+    -ms-border-radius:5px;
+    border-radius:5px;
+}
+div.subsectiontoggle span {
+    display:inline-block;
+    margin-bottom:-3px;
+    margin-right:10px;
+    width:16px;
+    height:16px;
+    background: url("../../default/icons/button_sprite.png") 0 -72px no-repeat transparent;
+}
+div.subsectiontoggle span.showing{
+    background-position: 0 -40px;
+}
+div.subsectiontoggle em {
+    display:block;
+    position:relative;
+    left:425px;
+    top:-13px;
+    margin-bottom:-3px;
+    width:13px;
+    height:13px;
+    background:url("../../default/images/chevron.png") top left no-repeat;
+    -webkit-transform:none;
+    -moz-transform:none;
+    -khtml-transform:none;
+    -o-transform:none;
+    -ms-transform:none;
+    transform:none;
+    -webkit-transition-duration: .2s;
+    -moz-transition-duration: .2s;
+    -khtml-transition-duration: .2s;
+    -o-transition-duration: .2s;
+    -ms-transition-duration: .2s;
+    transition-duration: .2s;
+    -webkit-transition-property: -webkit-transform;
+    -moz-transition-property: -moz-transform;
+    -khtml-transition-property: -khtml-transform;
+    -o-transition-property: -o-transform;
+    -ms-transition-property: -ms-transform;
+    transition-property: transform;
+}
+div.subsectiontoggle em.showing {
+    display:block;
+    position:relative;
+    left:425px;
+    top:-13px;
+    background:url("../../default/images/chevron.png") top left no-repeat;
+    width:13px;
+    height:13px;
+    -webkit-transform:rotate(90deg);
+    -moz-transform:rotate(90deg);
+    -khtml-transform:rotate(90deg);
+    -o-transform:rotate(90deg);
+    -ms-transform:rotate(90deg);
+    transform:rotate(90deg);
+}
+div.subsectiontoggle:hover em {
+    -webkit-transform:rotate(90deg);
+    -moz-transform:rotate(90deg);
+    -khtml-transform:rotate(90deg);
+    -o-transform:rotate(90deg);
+    -ms-transform:rotate(90deg);
+    transform:rotate(90deg);
+}
+
+
+div.gs-container {
+    margin-top:10px;
+}
+div.gs-container * {
+    margin: 0;
+    padding: 0;
+    background-position: 0 0;
+    text-decoration: none;
+    font-size: 1em;
+}
+div.gs-container input {
+    background: url("../../default/icons/x16_sprite.png") no-repeat 2px -119px #FFFFFF;
+    height:20px;
+    border:1px solid #444;
+    padding:0 22px 2px;
+    color:#444;
+    -moz-border-radius:5px;
+    -webkit-border-radius:5px;
+    -khtml-border-radius:5px;
+    -o-border-radius:5px;
+    -ms-border-radius:5px;
+    border-radius:5px;
+}
+input.gs-loading {
+    background-image: url("../../default/images/loading.gif");
+    background-repeat: no-repeat;
+    background-position: center right;
+}
+ul.gs-resultbox {
+    margin: 0 !important;
+    padding: 0 !important;
+    width: 300px;
+    z-index: 999999;
+    border: 1px solid #777;
+    font-size: 11px;
+    background: #fff;
+    -moz-box-shadow: 2px 2px 5px 0 #c5c5c5;
+    -webkit-box-shadow: 2px 2px 5px 0 #c5c5c5;
+    -khtml-box-shadow: 2px 2px 5px 0 #c5c5c5;
+    -o-box-shadow: 2px 2px 5px 0 #c5c5c5;
+    -ms-box-shadow: 2px 2px 5px 0 #c5c5c5;
+    box-shadow: 2px 2px 5px 0 #c5c5c5;
+    list-style: none;
+    -moz-border-radius:5px;
+    -webkit-border-radius:5px;
+    -khtml-border-radius:5px;
+    -o-border-radius:5px;
+    -ms-border-radius:5px;
+    border-radius:5px;
+    max-height:500px;
+    overflow:auto;
+}
+ul.gs-resultbox li {
+    float: left;
+    width: 100%;
+    clear: both;
+    cursor: pointer;
+}
+ul.gs-resultbox li.gs-cheader {
+    height: 13px;
+    overflow: hidden;
+    padding: 5px 0;
+    color: #fff;
+    background: #6ea6d1;
+    cursor:default;
+    padding-bottom:10px;
+}
+ul.gs-resultbox li.gs-cheader p.gs-cheader-title {
+    margin: 0 !important;
+    padding: 0 0 0 10px !important;
+    float: left;
+    font-size: 12px;
+    font-weight: bold;
+}
+ul.gs-resultbox li.gs-cheader p.gs-cheader-limit {
+    margin: 0 !important;
+    padding: 0 10px 0 0 !important;
+    float: right;
+    font-size: 11px;
+    font-weight: normal;
+}
+ul.gs-resultbox li.gs-cdata {
+    margin: 0 !important;
+    padding: 0 !important;
+    border-bottom: 1px solid #c5c5c5;
+}
+ul.gs-resultbox li.gs-cdata:last-child {
+    border-bottom: none;
+}
+ul.gs-resultbox li.gs-cdata:hover {
+    background: #eaf4fd;
+}
+ul.gs-resultbox li.gs-cdata a {
+    display: block;
+    padding: 5px 10px;
+    text-decoration: none !important;
+    background: #fff;
+}
+ul.gs-resultbox li.gs-cdata a:hover {
+    background: #cde0ff;
+}
+ul.gs-resultbox li.gs-cdata img {
+    margin-right: 12px;
+}
+ul.gs-resultbox li.gs-cdata p {
+    margin: 0 !important;
+    padding: 0 !important;
+    color: #444;
+    font-size: 10px;
+    min-height:30px;
+}
+ul.gs-resultbox li.gs-cdata p span.gs-cdata-title {
+    display: inline !important;
+    margin: 0 !important;
+    padding: 0 !important;
+    font-size: 11px;
+    font-weight: bold;
+    color: #000;
+}
+ul.gs-resultbox li:first-child {
+    -moz-border-radius:5px 5px 0 0;
+    -webkit-border-radius:5px 5px 0 0;
+    -khtml-border-radius:5px 5px 0 0;
+    -o-border-radius:5px 5px 0 0;
+    -ms-border-radius:5px 5px 0 0;
+    border-radius:5px 5px 0 0;
+}
+ul.gs-resultbox li:last-child {
+    -moz-border-radius:0 0 5px 5px;
+    -webkit-border-radius:0 0 5px 5px;
+    -khtml-border-radius:0 0 5px 5px;
+    -o-border-radius:0 0 5px 5px;
+    -ms-border-radius:0 0 5px 5px;
+    border-radius:0 0 5px 5px;
+}
+
+div.df-container {
+}
+div.df-container * {
+    margin: 0;
+    padding: 0;
+    background-position: 0 0;
+    text-decoration: none;
+    font-size: 1em;
+}
+div.df-container input {
+}
+input.df-loading {
+    background-image: url("../../default/images/loading.gif");
+    background-repeat: no-repeat;
+    background-position: center right;
+}
+ul.df-resultbox {
+    margin: 0 !important;
+    padding: 0 !important;
+    min-width: 250px;
+    max-width: 500px;
+    z-index: 999999;
+    border: 1px solid #777;
+    font-size: 11px;
+    background: #fff;
+    -moz-box-shadow: 2px 2px 5px 0 #c5c5c5;
+    -webkit-box-shadow: 2px 2px 5px 0 #c5c5c5;
+    -khtml-box-shadow: 2px 2px 5px 0 #c5c5c5;
+    -o-box-shadow: 2px 2px 5px 0 #c5c5c5;
+    -ms-box-shadow: 2px 2px 5px 0 #c5c5c5;
+    box-shadow: 2px 2px 5px 0 #c5c5c5;
+    list-style: none;
+    -moz-border-radius:5px;
+    -webkit-border-radius:5px;
+    -khtml-border-radius:5px;
+    -o-border-radius:5px;
+    -ms-border-radius:5px;
+    border-radius:5px;
+}
+ul.df-resultbox li {
+    float: left;
+    width: 100%;
+    clear: both;
+    cursor: pointer;
+}
+ul.df-resultbox li.df-cheader {
+    height: 13px;
+    overflow: hidden;
+    padding: 5px 0;
+    color: #fff;
+    background: #6ea6d1;
+    cursor:default;
+    padding-bottom:10px;
+}
+ul.df-resultbox li.df-cheader p.df-cheader-title {
+    margin: 0 !important;
+    padding: 0 0 0 10px !important;
+    float: left;
+    font-size: 12px;
+    font-weight: bold;
+}
+ul.df-resultbox li.df-cheader p.df-cheader-limit {
+    margin: 0 !important;
+    padding: 0 10px 0 0 !important;
+    float: right;
+    font-size: 11px;
+    font-weight: normal;
+}
+ul.df-resultbox li.df-cdata {
+    margin: 0 !important;
+    padding: 0 !important;
+    border-bottom: 1px solid #c5c5c5;
+}
+ul.df-resultbox li.df-cdata:last-child {
+    border-bottom: none;
+}
+ul.df-resultbox li.df-cdata:hover {
+    background: #eaf4fd;
+}
+ul.df-resultbox li.df-cdata a {
+    display: block;
+    padding: 5px 10px;
+    text-decoration: none !important;
+    background: #fff;
+}
+ul.df-resultbox li.df-cdata a:hover {
+    background: #cde0ff;
+}
+ul.df-resultbox li.df-cdata img {
+    margin-right: 12px;
+}
+ul.df-resultbox li.df-cdata p {
+    margin: 0 !important;
+    padding: 0 !important;
+    color: #444;
+    font-size: 10px;
+    min-height:30px;
+}
+ul.df-resultbox li.df-cdata p span.df-cdata-title {
+    display: inline !important;
+    margin: 0 !important;
+    padding: 0 !important;
+    font-size: 11px;
+    font-weight: bold;
+    color: #000;
+}
+ul.df-resultbox li:first-child {
+    -moz-border-radius:5px 5px 0 0;
+    -webkit-border-radius:5px 5px 0 0;
+    -khtml-border-radius:5px 5px 0 0;
+    -o-border-radius:5px 5px 0 0;
+    -ms-border-radius:5px 5px 0 0;
+    border-radius:5px 5px 0 0;
+}
+ul.df-resultbox li:last-child {
+    -moz-border-radius:0 0 5px 5px;
+    -webkit-border-radius:0 0 5px 5px;
+    -khtml-border-radius:0 0 5px 5px;
+    -o-border-radius:0 0 5px 5px;
+    -ms-border-radius:0 0 5px 5px;
+    border-radius:0 0 5px 5px;
+}
+
+span.icons16-empty {
+    float:left;
+    display:block;
+    height:20px;
+    width:20px;
+    margin:0 7px 0 0;
+}
+
+.ttip {
+    width:16px;
+    height:16px;
+    cursor:pointer;
+    background: url("../../default/icons/x16_sprite.png") no-repeat -2px -42px transparent;
+    float:right;
+    display:inline;
+    position:relative;
+    right:-2px;
+    top:-2px;
+}
+
+p.prefix {
+    float: left;
+    margin: 0;
+    text-align: right;
+}
+p.label {
+    float: left;
+    margin: 5px 15px 0 0;
+}
+p.value {
+    float:left;
+    margin: 0 0 0 2px;
+}
+
+/* content_ispc
+-------------------------------------------------------------- */
+.tipsy {
+    font-size: 10px;
+    position: absolute;
+    padding: 5px;
+    z-index: 100000;
+}
+.tipsy-inner {
+    background-color: #000;
+    color: #FFF;
+    max-width: 350px;
+    padding: 5px 8px 4px 8px;
+    text-align: left;
+}
+
+/* Rounded corners */
+.tipsy-inner {
+    border-radius: 5px;
+    -moz-border-radius: 5px;
+    -webkit-border-radius: 5px;
+}
+
+/* Uncomment for shadow */
+/*.tipsy-inner { box-shadow: 0 0 5px #000000; -webkit-box-shadow: 0 0 5px #000000; -moz-box-shadow: 0 0 5px #000000; }*/
+
+.tipsy-arrow {
+    position: absolute;
+    width: 0;
+    height: 0;
+    line-height: 0;
+    border: 5px dashed #000;
+}
+/* Rules to colour arrows */
+.tipsy-arrow-n { border-bottom-color: #000; }
+.tipsy-arrow-s { border-top-color: #000; }
+.tipsy-arrow-e { border-left-color: #000; }
+.tipsy-arrow-w { border-right-color: #000; }
+
+.tipsy-n .tipsy-arrow { top: 0px; left: 50%; margin-left: -5px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent; }
+.tipsy-nw .tipsy-arrow { top: 0; left: 10px; border-bottom-style: solid; border-top: none; border-left-color: transparent; border-right-color: transparent;}
+.tipsy-ne .tipsy-arrow { top: 0; right: 10px; border-bottom-style: solid; border-top: none;  border-left-color: transparent; border-right-color: transparent;}
+.tipsy-s .tipsy-arrow { bottom: 0; left: 50%; margin-left: -5px; border-top-style: solid; border-bottom: none;  border-left-color: transparent; border-right-color: transparent; }
+.tipsy-sw .tipsy-arrow { bottom: 0; left: 10px; border-top-style: solid; border-bottom: none;  border-left-color: transparent; border-right-color: transparent; }
+.tipsy-se .tipsy-arrow { bottom: 0; right: 10px; border-top-style: solid; border-bottom: none; border-left-color: transparent; border-right-color: transparent; }
+.tipsy-e .tipsy-arrow { right: 0; top: 50%; margin-top: -5px; border-left-style: solid; border-right: none; border-top-color: transparent; border-bottom-color: transparent; }
+.tipsy-w .tipsy-arrow { left: 0; top: 50%; margin-top: -5px; border-right-style: solid; border-left: none; border-top-color: transparent; border-bottom-color: transparent; }
+
+/* uni-form-generic
+-------------------------------------------------------------- */
+
+/* Uni-Form by Dragan Babic [Superawesome Industries]  - http: //sprawsm.com/uni-form/ */ 
+/* Some rights reserved - http: //creativecommons.org/licenses/by-sa/2.5/ */
+/* Do not edit this file directly, make your changes to uni-form.css in the same folder */
+
+.uniForm{ margin: 0; padding: 0; position: relative; z-index: 1; } /* reset stuff */
+
+/* Some generals and more resets */
+.uniForm fieldset{ border: none; margin: 0; padding: 0; }
+.uniForm fieldset legend{ margin: 0; padding: 0; }
+
+/* This is the main unit that contains our form elements */
+.uniForm .ctrlHolder,
+.uniForm .buttonHolder{ margin: 0; padding: 0; clear: both; }
+
+/* Clear all floats */ 
+.uniForm:after,
+.uniForm .buttonHolder:after, 
+.uniForm .ctrlHolder:after, 
+.uniForm .ctrlHolder .multiField:after,
+.uniForm .inlineLabel:after{ content: "."; display: block; height: 0; line-height: 0; font-size: 0; clear: both; min-height: 0; visibility: hidden; }
+
+/* A class to be used on a label that contains a checkbox or a radio button */
+.uniForm .inlineLabel,
+.uniForm .inlineLabels .inlineLabel,
+.uniForm .blockLabels .inlineLabel{ width: auto; float: none; margin: 0; display: block; }
+/* IE shows borders & padding on checkboxes and radio buttons if they are declared on an input element, remove them */
+/* Legacy/Inheritance fix */
+.uniForm .inlineLabel input,
+.uniForm .inlineLabels .inlineLabel input,
+.uniForm .blockLabels .inlineLabel input{ border: none; padding: 0; margin: 0; }
+
+/* Styles for form controls where labels are above the input elements */
+/* Set the class of the parent (preferably to a fieldset) to .blockLabels */
+
+.uniForm label,
+.uniForm .label,
+.uniForm .blockLabels label,
+.uniForm .blockLabels .label{ display: block; float: none; padding: 0; line-height: 100%; width: auto; }
+
+/* Float the input elements */
+.uniForm .textInput,
+.uniForm .blockLabels .textInput,
+.uniForm .blockLabels .fileUpload,
+.uniForm .selectInput,
+.uniForm .blockLabels .selectInput,
+.uniForm .blockLabels select,
+.uniForm textarea,
+.uniForm .blockLabels textarea{ float: left; }
+
+/* Postition the hints */
+.uniForm .formHint,
+.uniForm .blockLabels .formHint{ float: right; margin: 0; clear: none; }
+
+/* Position the elements inside combo boxes (multiple selects/checkboxes/radio buttons per unit) */
+.uniForm .multiField,
+.uniForm .blockLabels .multiField{ width: auto; float: left; }
+.uniForm .multiField .inlineLabel,
+.uniForm .blockLabels .multiField .inlineLabel{ display: block; margin: 0 0 .5em 0; }
+.uniForm .multiField .blockLabel,
+.uniForm .blockLabels .multiField .blockLabel{ float: left; width: auto; margin: 0; }
+.uniForm .multiField .blockLabel .textInput,
+.uniForm .multiField .blockLabel .selectInput,
+.uniForm .multiField .blockLabel select,
+.uniForm .blockLabels .multiField .blockLabel .textInput,
+.uniForm .blockLabels .multiField .blockLabel .selectInput,
+.uniForm .blockLabels .multiField .blockLabel select{ width: 100%; margin: 0; }
+
+/* Styles for form controls where labels are in line with the input elements */
+/* Set the class of the parent (preferably to a fieldset) to .inlineLabels */
+.uniForm .inlineLabels label,
+.uniForm .inlineLabels .label{ float: left; margin: 0; padding: 0; line-height: 100%; position: relative; }
+
+/* Float the input elements */
+.uniForm .inlineLabels .textInput,
+.uniForm .inlineLabels .fileUpload,        
+.uniForm .inlineLabels .selectInput,
+.uniForm .inlineLabels select,
+.uniForm .inlineLabels textarea{ float: left; }
+
+/* Postition the hints */
+.uniForm .inlineLabels .formHint{ clear: both; float: none; }
+.uniForm .inlineLabels .multiField{ float: left; }
+.uniForm .inlineLabels .multiField .inlineLabel{}
+.uniForm .inlineLabels .multiField .blockLabel{}
+.uniForm .inlineLabels .multiField .blockLabel .textInput,
+.uniForm .inlineLabels .multiField .blockLabel .selectInput,
+.uniForm .inlineLabels .multiField .blockLabel select{ display: block; width: 100%; float: none; }
+.uniForm .inlineLabels .multiField select{ float: left; }
+
+/* Required fields asterisk styling for .blockLabels */
+.uniForm label em,
+.uniForm .label em,
+.uniForm .blockLabels label em,
+.uniForm .blockLabels .label em{ position: absolute; left: -7px; }
+
+/* Required fields asterisk styling for .inlineLabels */
+.uniForm .inlineLabels label em,
+.uniForm .inlineLabels .label em{ display: block; position: absolute; left: auto; right: 0; font-style: normal; font-weight: bold; }
+.uniForm .inlineLabel em{ position: absolute; left: 7px; }
+
+/* Messages */
+.uniForm #errorMsg,
+.uniForm .error{}
+.uniForm #errorMsg dt,
+.uniForm #errorMsg h3{}
+.uniForm #errorMsg dd{}
+.uniForm #errorMsg ol{}
+.uniForm #errorMsg ol li{}
+.uniForm .errorField{}
+.uniForm #OKMsg{}
+
+/* Columns */
+
+.uniForm .col{ float: left; }
+.uniForm .col.first{}
+.uniForm .col.last{}
+
+/* uni-form
+-------------------------------------------------------------- */
+
+/* Keep in mind that wherever you see "Required property" it means that the property must exist */
+
+/* ------------------------------------------------------------------------------ */
+
+/* Generals */
+.uniForm fieldset{}
+.uniForm fieldset legend{ color: #333; font-weight: bold; font-size: 100%; margin: 0; padding: 1.5em 1.5em 1.5em 0; }
+
+/* This is the main unit that contains our form elements */
+.uniForm .ctrlHolder{ padding: 3px; border-bottom: 1px dotted #dfdfdf; }
+
+.uniForm .buttonHolder{ 
+    text-align: left; 
+    background: #CEDEEF url("../../default/images/buttonHolder_bg.gif") no-repeat right;
+    margin: 3em 0 1em;
+    padding: 8px;
+}
+.uniForm .resetButton{ float: left; }
+.uniForm .primaryAction{ font-weight: bold; }
+
+/* This class gets added to div.ctrlHolder to highlight the row */
+.uniForm .focused{ background: #fffcdf; }
+
+/* .inlineLabel is used for inputs within labels - checkboxes and radio buttons */
+.uniForm .inlineLabel input,
+.uniForm .inlineLabels .inlineLabel input,
+.uniForm .blockLabels .inlineLabel input{ float: left; margin: 0 .4em 0 0; }
+.uniForm .inlineLabel span{ float: left; width: 90%; }
+
+/* ------------------------------------------------------------------------------ */
+
+/* .blockLabels (default style, will be applied even if you don"t class the parent element) */
+.uniForm .blockLabels .ctrlHolder{}
+
+.uniForm label,
+.uniForm .blockLabels label,
+.uniForm .blockLabels .label{ margin: 0 0 .5em 0; }
+
+.uniForm .textInput,
+.uniForm .blockLabels .textInput,
+.uniForm .blockLabels .fileUpload{ width: 43%; /* <- Required property */ }
+
+.uniForm .selectInput,
+.uniForm select,
+.uniForm .blockLabels .selectInput,
+.uniForm .blockLabels select{ width: 43.5%; /* <- Required property */ }
+.uniForm textarea,
+.uniForm .blockLabels textarea{ width: 43%; /* <- Required property */ height: 12em; }
+
+.uniForm .formHint,
+.uniForm .blockLabels .formHint{ width: 55%; /* <- Required property */ font-size: .9em; color: #777; position: relative; top: -.5em; }
+
+.uniForm .multiField,
+.uniForm .blockLabels .multiField{ width: 43%; }
+.uniForm .multiField .inlineLabel,
+.uniForm .blockLabels .multiField .inlineLabel{ display: block; margin: 0 0 .5em 0; }
+.uniForm .multiField .blockLabel,
+.uniForm .blockLabels .multiField .blockLabel{ width: 30%; margin: 0 10px 0 0; }
+.uniForm .multiField .blockLabel .textInput,
+.uniForm .multiField .blockLabel .selectInput,
+.uniForm .multiField .blockLabel select,
+.uniForm .blockLabels .multiField .blockLabel .textInput,
+.uniForm .blockLabels .multiField .blockLabel .selectInput,
+.uniForm .blockLabels .multiField .blockLabel select{ width: 100%; margin: .3em 0 0 0; }
+
+/* ------------------------------------------------------------------------------ */
+
+/* .inlineLabels */
+.uniForm .inlineLabels .ctrlHolder{}
+
+.uniForm .inlineLabels label,
+.uniForm .inlineLabels .label{ width: 20%; /* <- Required property */ margin: .3em 2% 0 0; /* <- Required property */ }
+
+.uniForm .inlineLabels .textInput,
+.uniForm .inlineLabels .fileUpload{ width: 35%; /* <- Required property */ }
+
+.uniForm .inlineLabels .selectInput,
+.uniForm .inlineLabels select{ width: 35%; /* <- Required property */ }
+
+.uniForm .inlineLabels textarea{  width: 35%; /* <- Required property */ height: 12em; }
+
+.uniForm .inlineLabels .formHint{ margin-top: 0; margin-left: 22%; font-size: .9em; color: #777; position: static; }
+
+.uniForm .inlineLabels .multiField{ width: 60%; /* <- Required property */ margin: 0 0 .3em 0; }
+.uniForm .inlineLabels .multiField .inlineLabel{ display: block; margin: 0 0 .5em 0; }
+.uniForm .inlineLabels .multiField .blockLabel{ float: left; width: 26%; margin: 0 3% 0 0; }
+.uniForm .inlineLabels .multiField .blockLabel .textInput,
+.uniForm .inlineLabels .multiField .blockLabel .selectInput,
+.uniForm .inlineLabels .multiField .blockLabel select{ width: 100%; margin: .3em 0 0 0; }
+
+/* Focus pseudoclasses */
+.uniForm .ctrlHolder .textInput:focus{ outline: none; /* Get rid of the "glow" effect in WebKit, optional */ }
+.uniForm .ctrlHolder textarea:focus{ outline: none; /* Get rid of the "glow" effect in WebKit, optional */ }
+.uniForm div.focused .formHint{ color: #333; }
+
+/* Columns (they are floated left by default) */
+.uniForm .col{ width: 37.9%; /* <- Required property */ margin: 0 2% 20px 0; }
+/* Use .first and .last classes to control the layout/spacing of your columns */
+.uniForm .col.first{ width: 39%; /* <- Required property */ float: left; clear: none; }
+.uniForm .col.last{ width: 39%; /* <- Required property */ float: right; clear: none; margin-right: 0; }
+
+/* Messages */
+.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; }
+.uniForm #errorMsg dd{ margin: 0; padding: 0; }
+.uniForm #errorMsg ol{ margin: 0; padding: 0; list-style:none;}
+.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, .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; }
+
+/* ------------------------------------------------------------------------------ */
+
+/* This is the main unit that contains our form elements */
+
+.uniForm .textInput, .uniForm .selectInput, .uniForm textarea {
+    background:#FFFFFF none repeat scroll 0 0;
+    color: #000000;
+    border: 1px solid #DFDFDF;
+    padding: 1px;
+}
+
+/* jquery-ui-custom
+-------------------------------------------------------------- */
+.ui-datepicker-calendar thead tr th {
+    background-image:none;
+    background-color:#FFFFFF;
+    color:#000000;
+}
+.ui-widget { font-family: "Trebuchet MS", Arial, sans-serif; font-size: 100%; }
+.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: "Trebuchet MS", Arial, sans-serif; font-size: 100%; }
+ul.ui-autocomplete { max-height: 250px; overflow-y: auto; min-width: 85px;}
+.ui-combobox { position: relative; display: inline-block; margin-right: 17px; }
+.ui-combobox-toggle { position: absolute !important; top: 0; bottom: 0; margin-left: -1px; padding: 1px !important; background: none repeat scroll 0 0 #FFFFFF !important; border: 1px solid #DFDFDF !important;}
+.ui-combobox-input { background: none repeat scroll 0 0 #FFFFFF !important; border: 1px solid #DFDFDF !important; padding: 1px; font-weight: normal !important; }
+.panel_install_package .ui-combobox { float: left; }
+.clear-float { clear: both; }
+
+a.link-page, span.page-spacer {
+    display: inline-block;
+    text-align: center;
+    padding: 2px;
+    line-height: 16px;
+    text-decoration: none !important;
+    color: #fff;
+    min-width: 16px;
+}
+a.link-page {
+    border: 1px solid #444;
+    margin: 0 5px;
+}
+
+a.link-page:hover {
+    background-color: #444;
+    color: #e8ff25;
+}
+
+span.page-spacer {
+    margin: 0 -5px;
+}
+
+a.link-page.current-page {
+    background-color: #444;
+    color: #e8ff25;
+    font-weight: bold;
+}
+
+.command {
+    padding: 1em;
+    border: 1px dashed #2f6fab;
+    color: black;
+    background-color: #f9f9f9;
+    line-height: 1.1em;
+    font-family: Courier New, Courier, mono;
+    font-size: 12px;
+    font-style: italic;
+}
+.system {
+    color: black;
+    font-family: Courier New, Courier, mono;
+    font-size: 12px;
+    font-style: italic;
+}
+.highlight {
+    color: #FF0000;
+    font-family: Georgia, "Times New Roman", Times, serif;
+    font-size: 12px;
+    text-decoration: underline;
+}
\ No newline at end of file
diff --git a/interface/web/themes/blue/icons/x32_sprite.png b/interface/web/themes/blue/icons/x32_sprite.png
new file mode 100644
index 0000000..b1ef1b8
--- /dev/null
+++ b/interface/web/themes/blue/icons/x32_sprite.png
Binary files differ
diff --git a/interface/web/themes/blue/images/ajax-loader.gif b/interface/web/themes/blue/images/ajax-loader.gif
new file mode 100644
index 0000000..715f6a9
--- /dev/null
+++ b/interface/web/themes/blue/images/ajax-loader.gif
Binary files differ
diff --git a/interface/web/themes/blue/images/header_bg.png b/interface/web/themes/blue/images/header_bg.png
new file mode 100644
index 0000000..ec0265f
--- /dev/null
+++ b/interface/web/themes/blue/images/header_bg.png
Binary files differ
diff --git a/interface/web/themes/blue/images/lists_tfoot_bg.png b/interface/web/themes/blue/images/lists_tfoot_bg.png
new file mode 100644
index 0000000..61f3334
--- /dev/null
+++ b/interface/web/themes/blue/images/lists_tfoot_bg.png
Binary files differ
diff --git a/interface/web/themes/blue/images/lists_thead_bg.png b/interface/web/themes/blue/images/lists_thead_bg.png
new file mode 100644
index 0000000..6813b53
--- /dev/null
+++ b/interface/web/themes/blue/images/lists_thead_bg.png
Binary files differ
diff --git a/interface/web/themes/blue/ispconfig_version b/interface/web/themes/blue/ispconfig_version
new file mode 100644
index 0000000..7440a5b
--- /dev/null
+++ b/interface/web/themes/blue/ispconfig_version
@@ -0,0 +1 @@
+3.0.5.3
diff --git a/interface/web/themes/blue/templates/main.tpl.htm b/interface/web/themes/blue/templates/main.tpl.htm
new file mode 100644
index 0000000..8d6ffde
--- /dev/null
+++ b/interface/web/themes/blue/templates/main.tpl.htm
@@ -0,0 +1,187 @@
+<!DOCTYPE html>
+<html dir="ltr" lang="en-US">      
+    <head>
+        <!--Possible? Vars in lang= ?-->
+        <meta charset="<tmpl_var name="html_content_encoding">" />
+        <title><tmpl_var name="app_title"> <tmpl_var name="app_version"></title>
+        <meta http-equiv="X-UA-Compatible" content="IE=9"/>
+        <link href="themes/blue/css/styles.css" rel="stylesheet" media="screen" type="text/css" />
+        <link href="themes/default/css/print.css" rel="stylesheet" media="print" type="text/css" />
+        <!--[if IE 9]><link href="themes/default/css/iehacks.css" rel="stylesheet" type="text/css" /><![endif]-->
+        <!--[if lte IE 8]><script type="text/javascript" src="themes/default/js/html5shiv.js"></script><![endif]-->
+        <!--[if lte IE 7]><link href="themes/default/css/iehacks.css" rel="stylesheet" type="text/css" /><![endif]-->
+        <link href="themes/default/css/jquery-ui-1.8.16.custom.css" rel="stylesheet" type="text/css" />
+        <link rel="shortcut icon" href="/themes/default/images/favicon.ico" />
+        <script type="text/javascript" src="js/jquery-1.6.3.min.js"></script>
+        <script type="text/javascript" src="js/jquery-ui-1.8.16.custom.min.js"></script>
+        <script type="text/javascript" src="js/scrigo.js.php"></script>
+        <script type="text/javascript" src="js/uni-form/uni-form.jquery.js"></script>
+        <script type="text/javascript" src="js/jquery.ispconfigsearch.js"></script>
+        <script type="text/javascript" src="js/jquery.tipsy.js"></script>
+        <script language="JavaScript" type="text/javascript">
+            jQuery(document).ready(function() {
+                loadInitContent();
+				
+				$('form').attr('autocomplete','off');
+                
+                $("#pageForm").submit(function(e){
+                    //Prevent form submit: e.preventDefault() in lists
+                    if ($(".panel #Filter").length > 0) {
+                        e.preventDefault();
+                    }
+                });
+                
+                jQuery('.subsectiontoggle').live("click", function(){
+                    jQuery(this).children().toggleClass('showing').end().next().slideToggle();
+                });
+                
+                jQuery('#globalsearch').ispconfigSearch({
+                    dataSrc: '/dashboard/ajax_get_json.php?type=globalsearch',
+                    resultsLimit: '$ <tmpl_var name="globalsearch_resultslimit_of_txt"> % <tmpl_var name="globalsearch_resultslimit_results_txt">',
+                    noResultsText: '<tmpl_var name="globalsearch_noresults_text_txt">',
+                    noResultsLimit: '<tmpl_var name="globalsearch_noresults_limit_txt">',
+                    searchFieldWatermark: '<tmpl_var name="globalsearch_searchfield_watermark_txt">'
+                });
+                
+                jQuery('.ttip').tipsy({live: true, gravity: 'ne', html: true});
+                
+                tabChangeDiscard = '<tmpl_var name="tabchange_discard_enabled>';
+                tabChangeWarning = '<tmpl_var name="tabchange_warning_enabled>';
+                tabChangeWarningTxt = '<tmpl_var name="global_tabchange_warning_txt">';
+                tabChangeDiscardTxt = '<tmpl_var name="global_tabchange_discard_txt">';
+				
+				// Store password in browser; works in Firefox, but not Chrome
+				$('#username').live("blur", function(){
+					if($('#username').val() == '') {
+						return true;
+					}
+					if($('#dummy_username').val() == '' || $('#dummy_username').val() != $(this).val()){
+						$('#dummy_login').show();
+						$('#dummy_username').attr('value', $(this).val()).trigger('focus').trigger('blur');
+						$('#dummy_login').hide();
+					}
+					if($('#dummy_username').val() == $(this).val() && $(this).val() != ''){
+						$('#passwort').val($('#dummy_passwort').val());
+					} else {
+						$('#passwort').val('');
+					}
+					$('#passwort').focus();
+				});
+				
+				$('#username').live("keyup", function(){
+					$('#dummy_username').val('');
+					$('#dummy_passwort').val('');
+					$('#passwort').val('');
+				});
+				
+            });
+            
+            
+            jQuery(document).bind("change", function(event) {
+                var elName = event.target.localName;
+                if (jQuery(".panel #Filter").length > 0 && elName == 'select') {
+                    event.preventDefault();
+                    jQuery(".panel #Filter").trigger('click');
+                }
+                if(elName == 'select' || elName == 'input' || elName == 'textarea') {
+                    if(jQuery(event.target).hasClass('no-page-form-change') == false) {
+                        // set marker that something was changed
+                        pageFormChanged = true;
+                    }
+                }
+            });
+            
+            jQuery(document).bind("keypress", function(event) {
+                //Use jQuery submit with keypress Enter in panel filterbar
+                if (event.which == '13' && jQuery(".panel #Filter").length > 0 && jQuery(event.target).hasClass('ui-autocomplete-input') == false ) {
+                    event.preventDefault();
+                    jQuery(".panel #Filter").trigger('click');
+                }
+                //Use jQuery submit with keypress Enter in forms
+                if (event.which == '13' && jQuery(".pnl_formsarea button.positive").length > 0 && event.target.localName != 'textarea' && jQuery(event.target).is(':input')) {
+                    event.preventDefault();
+                    jQuery(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger('click');
+                }
+            });
+            
+            jQuery(document).delegate('.pnl_listarea th', 'click', function(event) {
+                if(jQuery(this).attr('class').length > 0 && jQuery(".panel #Filter").length > 0 && jQuery(this).hasClass('tbl_col_buttons') == false && jQuery(this).hasClass('tbl_col_limit') == false && jQuery(this).hasClass('tbl_col_nosort') == false) {
+                  event.preventDefault();
+                  var clickevent = jQuery('#Filter').attr('onclick');
+                  var element = jQuery(this).attr('class');
+                  if(typeof clickevent == 'string') {
+                      jQuery('#Filter').attr('onclick', clickevent.replace(".php')", ".php?orderby=" + element + "')"));
+                  }
+                  jQuery(".panel #Filter").trigger('click');
+                  
+                  jQuery("#pageForm").ajaxComplete(function() {
+                      if(jQuery("th."+element).css("background-position") == '0px -15px') {
+                        if(jQuery("th."+element).css("text-align") == "right") {
+                          jQuery("th."+element).css("text-align","left");
+                        } else {
+                          jQuery("th."+element).css("text-align","right");
+                        }
+                      } else {
+                        jQuery(".pnl_listarea th").css("text-align","");
+                      }
+                      jQuery(".pnl_listarea th").css("background-position","0 0");
+                      jQuery("th."+element).css("background-position","0 -15px");
+                  });
+                }
+            });
+            
+        </script>
+    </head>
+    <body>
+        <div id="page">
+            <!-- begin: header -->
+            <header>
+                <nav id="topsubnav">
+                    <!-- start: skip link navigation -->
+                    <a class="skip" href="#navigation" title="skip link">Skip to the navigation</a><span class="hideme">.</span>
+                    <a class="skip" href="#content" title="skip link">Skip to the content</a><span class="hideme">.</span>
+                    <!-- end: skip link navigation -->
+                    <tmpl_if name="cpuser">
+                        <a href="#logout" onclick="loadContent('login/logout.php');"><tmpl_var format="strtoupper" name="logout_txt"> <tmpl_var format="strtoupper" name="cpuser"></a><!-- | <a href="#" onclick="capp('help')">Help</a> | <a href="#">Imprint</a>-->
+                        <tmpl_if name='usertype' op='==' value='normaluser'><input type="text" id="globalsearch" size="25" value="" /></tmpl_if>
+                    </tmpl_if>
+                </nav>
+                <h1 id="ir-HeaderLogo" class="swap" style="background-image:url('{tmpl_var name='app_logo'}');"><span>ISPConfig 3</span></h1>
+                <span>hosting control panel</span>
+            </header>
+            <!-- end: header -->
+            <a id="navigation" name="navigation"></a><!-- skiplink anchor: navigation -->
+            <!-- begin: main navigation #nav -->
+            <nav id="topNav">&nbsp;</nav>
+            <!-- end: main navigation -->
+
+            <!-- begin: main content area #main -->
+            <section id="main" name="content">
+                <nav id="sideNav" class="clearfix">&nbsp;</nav>
+                <!-- begin: #content -->
+                <section id="content">
+                    <form method="post" action="" id="pageForm" name="pageForm" enctype="multipart/form-data" class="uniForm">
+                        <div id="pageContent"><!-- AJAX CONTENT --></div>
+                    </form>
+                    <div id="ie_clearing">&nbsp;</div>
+                    <!-- End: IE Column Clearing -->
+                </section>
+                <!-- end: #content -->
+            </section>
+            <!-- end: #main -->
+            <!-- begin: footer -->
+            <footer>
+                Powered by <a href="<tmpl_var name="app_link">" target="_blank"><tmpl_var name="app_title"></a>
+            </footer><!-- end: footer -->
+        </div>
+		
+<div id="dummy_login" style="display:none;position:absolute;top:-1000px;left:-1000px;">
+<form action="" method="post" target="dummy_login" id="dummy_login_form">
+<input name="username" id="dummy_username" type="text" autocomplete="on" value="" />
+<input name="passwort" id="dummy_passwort" type="password" autocomplete="on" value="" />
+<input type="submit" value="Login" id="dummy_submit"/>
+</form>
+<iframe id="dummy_iframe" src="dummy_login.html" name="dummy_login" style="display:none;"></iframe>
+</div>
+    </body>
+</html>
diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index c503718..8c20f75 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -24,6 +24,8 @@
         <script language="JavaScript" type="text/javascript">
             jQuery(document).ready(function() {
                 loadInitContent();
+				
+				$('form').attr('autocomplete','off');
                 
                 $("#pageForm").submit(function(e){
                     //Prevent form submit: e.preventDefault() in lists
diff --git a/interface/web/tools/import_ispconfig.php b/interface/web/tools/import_ispconfig.php
index 9a42510..75e5992 100644
--- a/interface/web/tools/import_ispconfig.php
+++ b/interface/web/tools/import_ispconfig.php
@@ -150,7 +150,7 @@
 	if($sys_userid == 0) $error .= 'Inavlid Userid<br />';
 
 	//* Get the mail server ID
-	$tmp = $app->db->queryOneRecord("SELECT server_id FROM server WHERE mail_server = 1 LIMIT 0,1");
+	$tmp = $app->db->queryOneRecord("SELECT server_id FROM server WHERE mail_server = 1 and mirror_server_id = 0 LIMIT 0,1");
 	$server_id = intval($tmp['server_id']);
 	unset($tmp);
 	if($server_id == 0) $server_id = 1;
diff --git a/interface/web/tools/lib/menu.d/import.menu.php b/interface/web/tools/lib/menu.d/import.menu.php
index a41bb0b..d4a64ce 100644
--- a/interface/web/tools/lib/menu.d/import.menu.php
+++ b/interface/web/tools/lib/menu.d/import.menu.php
@@ -1,6 +1,5 @@
 <?php
 
-
 // Menu
 
 if($app->auth->is_admin()) {
@@ -28,4 +27,6 @@
 	unset($items);
 }
 
+
+
 ?>
diff --git a/server/conf/apache_apps.vhost.master b/server/conf/apache_apps.vhost.master
index 299ad44..ff6d4da 100644
--- a/server/conf/apache_apps.vhost.master
+++ b/server/conf/apache_apps.vhost.master
@@ -11,18 +11,9 @@
   ServerAdmin webmaster@localhost
   {apps_vhost_servername}
   
-  <IfModule mod_fcgid.c>
-    DocumentRoot {apps_vhost_dir}
-    SuexecUserGroup ispapps ispapps
-    <Directory {apps_vhost_dir}>
-      Options Indexes FollowSymLinks MultiViews +ExecCGI
-      AllowOverride AuthConfig Indexes Limit Options FileInfo
-      AddHandler fcgid-script .php
-      FCGIWrapper {apps_vhost_basedir}/php-fcgi-scripts/apps/.php-fcgi-starter .php
-      Order allow,deny
-      Allow from all
-    </Directory>
-  </IfModule>
+  <FilesMatch "\.ph(p3?|tml)$">
+    SetHandler None
+  </FilesMatch>
   
   <IfModule mod_php5.c>
     DocumentRoot {apps_vhost_dir}
@@ -35,7 +26,18 @@
     </Directory>
   </IfModule>
   
-  ServerSignature Off
+  <IfModule mod_fcgid.c>
+    DocumentRoot {apps_vhost_dir}
+    SuexecUserGroup ispapps ispapps
+    <Directory {apps_vhost_dir}>
+      Options Indexes FollowSymLinks MultiViews +ExecCGI
+      AllowOverride AuthConfig Indexes Limit Options FileInfo
+      AddHandler fcgid-script .php
+      FCGIWrapper {apps_vhost_basedir}/php-fcgi-scripts/apps/.php-fcgi-starter .php
+      Order allow,deny
+      Allow from all
+    </Directory>
+  </IfModule>
 
 </VirtualHost>
 
diff --git a/server/conf/vhost.conf.master b/server/conf/vhost.conf.master
index cf33b6f..5d74512 100644
--- a/server/conf/vhost.conf.master
+++ b/server/conf/vhost.conf.master
@@ -205,8 +205,8 @@
 				FcgidMinProcessesPerClass 0
 				FcgidMaxProcessesPerClass 100
 				FcgidConnectTimeout 3
-				FcgidIOTimeout 360
-				FcgidBusyTimeout 300
+				FcgidIOTimeout 600
+				FcgidBusyTimeout 3600
 				FcgidMaxRequestLen 1073741824
 <tmpl_else>
 				IdleTimeout 300
@@ -215,8 +215,8 @@
 				DefaultMinClassProcessCount 0
 				DefaultMaxClassProcessCount 100
 				IPCConnectTimeout 3
-				IPCCommTimeout 360
-				BusyTimeout 300
+				IPCCommTimeout 600
+				BusyTimeout 3600
 </tmpl_if>
 		</IfModule>
 		<Directory {tmpl_var name='web_document_root_www'}>
diff --git a/server/plugins-available/backup_plugin.inc.php b/server/plugins-available/backup_plugin.inc.php
index d2590b4..f5f2cb0 100644
--- a/server/plugins-available/backup_plugin.inc.php
+++ b/server/plugins-available/backup_plugin.inc.php
@@ -66,89 +66,104 @@
 
 		if(is_array($backup)) {
 
-			$app->uses('ini_parser,file,getconf');
+			$app->uses('ini_parser,file,getconf,system');
 
 			$web = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$backup['parent_domain_id']);
 			$server_config = $app->getconf->get_server_config($conf['server_id'], 'server');
 			$backup_dir = $server_config['backup_dir'].'/web'.$web['domain_id'];
-
-			//* Make backup available for download
-			if($action_name == 'backup_download') {
-				//* Copy the backup file to the backup folder of the website
-				if(file_exists($backup_dir.'/'.$backup['filename']) && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
-					copy($backup_dir.'/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename']);
-					chgrp($web['document_root'].'/backup/'.$backup['filename'], $web['system_group']);
-					$app->log('cp '.$backup_dir.'/'.$backup['filename'].' '.$web['document_root'].'/backup/'.$backup['filename'], LOGLEVEL_DEBUG);
+			
+			//* mount backup directory, if necessary
+			$backup_dir_is_ready = true;
+			$server_config['backup_dir_mount_cmd'] = trim($server_config['backup_dir_mount_cmd']);
+			if($server_config['backup_dir_is_mount'] == 'y' && $server_config['backup_dir_mount_cmd'] != ''){
+				if(!$app->system->is_mounted($backup_dir)){
+					exec(escapeshellcmd($server_config['backup_dir_mount_cmd']));
+					sleep(1);
+					if(!$app->system->is_mounted($backup_dir)) $backup_dir_is_ready = false;
 				}
 			}
 
-			//* Restore a MongoDB backup
-			if($action_name == 'backup_restore' && $backup['backup_type'] == 'mongodb') {
-				if(file_exists($backup_dir.'/'.$backup['filename'])) {
-					//$parts = explode('_',$backup['filename']);
-					//$db_name = $parts[1];
-					preg_match('@^db_(.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.tar\.gz$@', $backup['filename'], $matches);
-					$db_name = $matches[1];
-
-					// extract tar.gz archive
-					$dump_directory = str_replace(".tar.gz", "", $backup['filename']);
-					$extracted = "/usr/local/ispconfig/server/temp";
-					exec("tar -xzvf ".escapeshellarg($backup_dir.'/'.$backup['filename'])." --directory=".escapeshellarg($extracted));
-					$restore_directory = $extracted."/".$dump_directory."/".$db_name;
-
-					// mongorestore -h 127.0.0.1 -u root -p 123456 --authenticationDatabase admin -d c1debug --drop ./toRestore
-					$command = "mongorestore -h 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin -d ".$db_name." --drop ".escapeshellarg($restore_directory);
-					exec($command);
-					exec("rm -rf ".escapeshellarg($extracted."/".$dump_directory));
-				}
-
-				unset($clientdb_host);
-				unset($clientdb_user);
-				unset($clientdb_password);
-				$app->log('Restored MongoDB backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
-			}
-
-			//* Restore a mysql backup
-			if($action_name == 'backup_restore' && $backup['backup_type'] == 'mysql') {
-				//* Load sql dump into db
-				include 'lib/mysql_clientdb.conf';
-
-				if(file_exists($backup_dir.'/'.$backup['filename'])) {
-					//$parts = explode('_',$backup['filename']);
-					//$db_name = $parts[1];
-					preg_match('@^db_(.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql\.gz$@', $backup['filename'], $matches);
-					$db_name = $matches[1];
-					$command = "gunzip --stdout ".escapeshellarg($backup_dir.'/'.$backup['filename'])." | mysql -h '".escapeshellcmd($clientdb_host)."' -u '".escapeshellcmd($clientdb_user)."' -p'".escapeshellcmd($clientdb_password)."' '".$db_name."'";
-					exec($command);
-				}
-				unset($clientdb_host);
-				unset($clientdb_user);
-				unset($clientdb_password);
-				$app->log('Restored MySQL backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
-			}
-
-			//* Restore a web backup
-			if($action_name == 'backup_restore' && $backup['backup_type'] == 'web') {
-				if($backup['backup_mode'] == 'userzip') {
-					if(file_exists($backup_dir.'/'.$backup['filename']) && $web['document_root'] != '' && $web['document_root'] != '/' && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
-						if(file_exists($web['document_root'].'/backup/'.$backup['filename'])) rename($web['document_root'].'/backup/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename'].'.bak');
+			if($backup_dir_is_ready){
+				//* Make backup available for download
+				if($action_name == 'backup_download') {
+					//* Copy the backup file to the backup folder of the website
+					if(file_exists($backup_dir.'/'.$backup['filename']) && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
 						copy($backup_dir.'/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename']);
 						chgrp($web['document_root'].'/backup/'.$backup['filename'], $web['system_group']);
-						//chown($web['document_root'].'/backup/'.$backup['filename'],$web['system_user']);
-						$command = 'sudo -u '.escapeshellarg($web['system_user']).' unzip -qq -o  '.escapeshellarg($web['document_root'].'/backup/'.$backup['filename']).' -d '.escapeshellarg($web['document_root']).' 2> /dev/null';
-						exec($command);
-						unlink($web['document_root'].'/backup/'.$backup['filename']);
-						if(file_exists($web['document_root'].'/backup/'.$backup['filename'].'.bak')) rename($web['document_root'].'/backup/'.$backup['filename'].'.bak', $web['document_root'].'/backup/'.$backup['filename']);
-						$app->log('Restored Web backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
+						$app->log('cp '.$backup_dir.'/'.$backup['filename'].' '.$web['document_root'].'/backup/'.$backup['filename'], LOGLEVEL_DEBUG);
 					}
 				}
-				if($backup['backup_mode'] == 'rootgz') {
-					if(file_exists($backup_dir.'/'.$backup['filename']) && $web['document_root'] != '' && $web['document_root'] != '/' && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
-						$command = 'tar xzf '.escapeshellarg($backup_dir.'/'.$backup['filename']).' --directory '.escapeshellarg($web['document_root']);
+
+				//* Restore a MongoDB backup
+				if($action_name == 'backup_restore' && $backup['backup_type'] == 'mongodb') {
+					if(file_exists($backup_dir.'/'.$backup['filename'])) {
+						//$parts = explode('_',$backup['filename']);
+						//$db_name = $parts[1];
+						preg_match('@^db_(.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.tar\.gz$@', $backup['filename'], $matches);
+						$db_name = $matches[1];
+
+						// extract tar.gz archive
+						$dump_directory = str_replace(".tar.gz", "", $backup['filename']);
+						$extracted = "/usr/local/ispconfig/server/temp";
+						exec("tar -xzvf ".escapeshellarg($backup_dir.'/'.$backup['filename'])." --directory=".escapeshellarg($extracted));
+						$restore_directory = $extracted."/".$dump_directory."/".$db_name;
+
+						// mongorestore -h 127.0.0.1 -u root -p 123456 --authenticationDatabase admin -d c1debug --drop ./toRestore
+						$command = "mongorestore -h 127.0.0.1 --port 27017 -u root -p 123456 --authenticationDatabase admin -d ".$db_name." --drop ".escapeshellarg($restore_directory);
 						exec($command);
-						$app->log('Restored Web backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
+						exec("rm -rf ".escapeshellarg($extracted."/".$dump_directory));
+					}
+
+					unset($clientdb_host);
+					unset($clientdb_user);
+					unset($clientdb_password);
+					$app->log('Restored MongoDB backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
+				}
+
+				//* Restore a mysql backup
+				if($action_name == 'backup_restore' && $backup['backup_type'] == 'mysql') {
+					//* Load sql dump into db
+					include 'lib/mysql_clientdb.conf';
+
+					if(file_exists($backup_dir.'/'.$backup['filename'])) {
+						//$parts = explode('_',$backup['filename']);
+						//$db_name = $parts[1];
+						preg_match('@^db_(.+)_\d{4}-\d{2}-\d{2}_\d{2}-\d{2}\.sql\.gz$@', $backup['filename'], $matches);
+						$db_name = $matches[1];
+						$command = "gunzip --stdout ".escapeshellarg($backup_dir.'/'.$backup['filename'])." | mysql -h '".escapeshellcmd($clientdb_host)."' -u '".escapeshellcmd($clientdb_user)."' -p'".escapeshellcmd($clientdb_password)."' '".$db_name."'";
+						exec($command);
+					}
+					unset($clientdb_host);
+					unset($clientdb_user);
+					unset($clientdb_password);
+					$app->log('Restored MySQL backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
+				}
+
+				//* Restore a web backup
+				if($action_name == 'backup_restore' && $backup['backup_type'] == 'web') {
+					if($backup['backup_mode'] == 'userzip') {
+						if(file_exists($backup_dir.'/'.$backup['filename']) && $web['document_root'] != '' && $web['document_root'] != '/' && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
+							if(file_exists($web['document_root'].'/backup/'.$backup['filename'])) rename($web['document_root'].'/backup/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename'].'.bak');
+							copy($backup_dir.'/'.$backup['filename'], $web['document_root'].'/backup/'.$backup['filename']);
+							chgrp($web['document_root'].'/backup/'.$backup['filename'], $web['system_group']);
+							//chown($web['document_root'].'/backup/'.$backup['filename'],$web['system_user']);
+							$command = 'sudo -u '.escapeshellarg($web['system_user']).' unzip -qq -o  '.escapeshellarg($web['document_root'].'/backup/'.$backup['filename']).' -d '.escapeshellarg($web['document_root']).' 2> /dev/null';
+							exec($command);
+							unlink($web['document_root'].'/backup/'.$backup['filename']);
+							if(file_exists($web['document_root'].'/backup/'.$backup['filename'].'.bak')) rename($web['document_root'].'/backup/'.$backup['filename'].'.bak', $web['document_root'].'/backup/'.$backup['filename']);
+							$app->log('Restored Web backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
+						}
+					}
+					if($backup['backup_mode'] == 'rootgz') {
+						if(file_exists($backup_dir.'/'.$backup['filename']) && $web['document_root'] != '' && $web['document_root'] != '/' && !stristr($backup_dir.'/'.$backup['filename'], '..') && !stristr($backup_dir.'/'.$backup['filename'], 'etc')) {
+							$command = 'tar xzf '.escapeshellarg($backup_dir.'/'.$backup['filename']).' --directory '.escapeshellarg($web['document_root']);
+							exec($command);
+							$app->log('Restored Web backup '.$backup_dir.'/'.$backup['filename'], LOGLEVEL_DEBUG);
+						}
 					}
 				}
+			} else {
+				$app->log('Backup directory not ready.', LOGLEVEL_DEBUG);
 			}
 		//* Restore a mail backup - florian@schaal-24.de
 		} elseif (is_array($mail_backup) && $action_name == 'backup_restore') {

--
Gitblit v1.9.1