From 9021d7fc7ee308c0df84ad29da0bf316f592ce89 Mon Sep 17 00:00:00 2001
From: Marius Cramer <m.cramer@pixcept.de>
Date: Tue, 13 Jan 2015 10:48:15 -0500
Subject: [PATCH] - cleaned up javascript

---
 interface/lib/classes/tform_tpl_generator.inc.php                 |    2 
 interface/web/monitor/templates/show_log.htm                      |    2 
 interface/web/login/login_as.php                                  |    2 
 interface/web/admin/software_package_list.php                     |    2 
 interface/web/login/templates/password_reset.htm                  |    2 
 interface/web/themes/default/templates/main.tpl.htm               |   91 ---
 interface/web/admin/templates/system_config_branding_edit.html    |    2 
 interface/web/monitor/show_sys_state.php                          |   86 +-
 interface/web/monitor/lib/module.conf.php                         |    2 
 interface/web/sites/templates/backup_stats_list.htm               |   10 
 interface/web/sites/templates/aps_update_packagelist.htm          |    2 
 interface/web/themes/default/assets/javascripts/responsive.min.js |    2 
 interface/web/login/logout.php                                    |    2 
 interface/web/admin/software_update_list.php                      |   26 
 interface/web/themes/default/assets/javascripts/responsive.js     |    2 
 interface/lib/classes/listform_tpl_generator.inc.php              |    4 
 interface/web/index.php                                           |    8 
 interface/web/monitor/templates/show_sys_state.htm                |    2 
 interface/web/themes/default/assets/javascripts/ispconfig.min.js  |    2 
 interface/web/dns/templates/dns_dmarc_edit.htm                    |    2 
 interface/lib/classes/listform.inc.php                            |   10 
 interface/web/themes/default/assets/javascripts/ispconfig.js      |  709 ++++++++++++++++++++++++++
 interface/web/js/scrigo.js.php                                    |  641 -----------------------
 23 files changed, 789 insertions(+), 824 deletions(-)

diff --git a/interface/lib/classes/listform.inc.php b/interface/lib/classes/listform.inc.php
index ef4d088..cc3f761 100644
--- a/interface/lib/classes/listform.inc.php
+++ b/interface/lib/classes/listform.inc.php
@@ -354,23 +354,23 @@
 		
 		//* Show Back
 		if(isset($vars['show_page_back']) && $vars['show_page_back'] == 1){
-			$content .= '<li><a href="'."javascript:loadContent('".$vars['list_file'].'?page=0'.$vars['page_params']."');".'" aria-label="First">
+			$content .= '<li><a href="#" data-load-content="'.$vars['list_file'].'?page=0'.$vars['page_params'].'" aria-label="First">
 			<span aria-hidden="true">&laquo;</span></a></li>';
-			$content .= '<li><a href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['last_page'].$vars['page_params']."');".'" aria-label="Previous">
+			$content .= '<li><a href="#" data-load-content='.$vars['list_file'].'?page='.$vars['last_page'].$vars['page_params'].'" aria-label="Previous">
 			<span aria-hidden="true">&lsaquo;</span></a></li>';
 		}
 		$prev = -1;
 		foreach($show_pages as $p) {
 			if($prev != -1 && $p > $prev + 1) $content .= '<li class="disabled"><a href="#">…</a></li>';
-			$content .= '<li' . ($p == $vars['page'] ? ' class="active"' : '') . '><a href="'."javascript:loadContent('".$vars['list_file'].'?page='.$p.$vars['page_params']."');".'">'. ($p+1) .'</a></li>';
+			$content .= '<li' . ($p == $vars['page'] ? ' class="active"' : '') . '><a href="#" data-load-content="'.$vars['list_file'].'?page='.$p.$vars['page_params'].'">'. ($p+1) .'</a></li>';
 			$prev = $p;
 		}
 		//.$vars['next_page'].' '.$this->lng('page_of_txt').' '.$vars['max_pages'].' &nbsp; ';
 		//* Show Next
 		if(isset($vars['show_page_next']) && $vars['show_page_next'] == 1){
-			$content .= '<li><a href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['next_page'].$vars['page_params']."');".'" aria-label="Next">
+			$content .= '<li><a href="#" data-load-content="'.$vars['list_file'].'?page='.$vars['next_page'].$vars['page_params'].'" aria-label="Next">
 			<span aria-hidden="true">&rsaquo;</span></a></li>';
-			$content .= '<li><a href="'."javascript:loadContent('".$vars['list_file'].'?page='.$vars['pages'].$vars['page_params']."');".'" aria-label="Last">
+			$content .= '<li><a href="#" data-load-content="'.$vars['list_file'].'?page='.$vars['pages'].$vars['page_params'].'" aria-label="Last">
 			<span aria-hidden="true">&raquo;</span></a></li>';
 		}
 		$content .= '</ul></nav>';
diff --git a/interface/lib/classes/listform_tpl_generator.inc.php b/interface/lib/classes/listform_tpl_generator.inc.php
index b8a26a7..6d4138a 100644
--- a/interface/lib/classes/listform_tpl_generator.inc.php
+++ b/interface/lib/classes/listform_tpl_generator.inc.php
@@ -44,7 +44,7 @@
   <div class="pnl_toolsarea">
     <fieldset><legend>{tmpl_var name="toolsarea_head_txt"}</legend>
       <div class="buttons">
-        <button class="iconstxt icoAdd" type="button" onclick="'."loadContent('".$module."/".$listDef["edit_file"]."');".'">
+        <button class="iconstxt icoAdd" type="button" data-load-content="'.$module."/".$listDef["edit_file"].'">
           <span>{tmpl_var name="add_new_record_txt"}</span>
         </button>
       </div>
@@ -91,7 +91,7 @@
 
 		foreach($listDef["item"] as $field) {
 			$key = $field["field"];
-			$html .= "            <td class=\"tbl_col_".$key."\"><a href=\"#\" onclick=\"loadContent('".$module."/".$listDef["edit_file"]."?id={tmpl_var name='id'}');\">{tmpl_var name=\"".$key."\"}</a></td>\n";
+			$html .= "            <td class=\"tbl_col_".$key."\"><a href=\"#\" data-load-content=\"".$module."/".$listDef["edit_file"]."?id={tmpl_var name='id'}\">{tmpl_var name=\"".$key."\"}</a></td>\n";
 		}
 
 		$html .= "            <td class=\"tbl_col_buttons\">
diff --git a/interface/lib/classes/tform_tpl_generator.inc.php b/interface/lib/classes/tform_tpl_generator.inc.php
index 49fd274..634db79 100644
--- a/interface/lib/classes/tform_tpl_generator.inc.php
+++ b/interface/lib/classes/tform_tpl_generator.inc.php
@@ -137,7 +137,7 @@
 
     <div class=\"buttonHolder buttons\">
       <button class=\"positive iconstxt icoPositive\" type=\"button\" value=\"{tmpl_var name='btn_save_txt'}\" onclick=\"submitForm('pageForm','".$module."/".$formDef["action"]."');\"><span>{tmpl_var name='btn_save_txt'}</span></button>
-      <button class=\"negative iconstxt icoNegative\" type=\"button\" value=\"{tmpl_var name='btn_cancel_txt'}\" onclick=\"loadContent('".$module."/".$formDef["list_default"]."');\"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+      <button class=\"negative iconstxt icoNegative\" type=\"button\" value=\"{tmpl_var name='btn_cancel_txt'}\" data-load-content=\"".$module."/".$formDef["list_default"]."\"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
     </div>
   </div>
 
diff --git a/interface/web/admin/software_package_list.php b/interface/web/admin/software_package_list.php
index 489b6fb..f7bf25b 100644
--- a/interface/web/admin/software_package_list.php
+++ b/interface/web/admin/software_package_list.php
@@ -165,7 +165,7 @@
 				if($p['package_installable'] == 'no') {
 					$installed_txt .= $s['server_name'].": ".$app->lng("Package can not be installed.")."<br />";
 				} else {
-					$installed_txt .= $s['server_name'].": <a href=\"#\" onclick=\"loadContent('admin/software_package_install.php?package=".$p["package_name"]."&server_id=".$s["server_id"]."');\">Install now</a><br />";
+					$installed_txt .= $s['server_name'].": <a href=\"#\" data-load-content=\"admin/software_package_install.php?package=".$p["package_name"]."&server_id=".$s["server_id"]."\">Install now</a><br />";
 				}
 			}
 		}
diff --git a/interface/web/admin/software_update_list.php b/interface/web/admin/software_update_list.php
index 8bc8b79..321c42b 100644
--- a/interface/web/admin/software_update_list.php
+++ b/interface/web/admin/software_update_list.php
@@ -176,37 +176,13 @@
 
 			foreach($updates as $key => $u) {
 				$version = $u['v1'].'.'.$u['v2'].'.'.$u['v3'].'.'.$u['v4'];
-				$installed_txt = "<a href=\"#\" onclick=\"loadContent('admin/software_update_list.php?action=install&package=".$u["package_name"]."&id=".$u["software_update_id"]."&server_id=".$server_id."');\">Install Update</a><br />";
+				$installed_txt = "<a href=\"#\" data-load-content=\"admin/software_update_list.php?action=install&package=".$u["package_name"]."&id=".$u["software_update_id"]."&server_id=".$server_id."\">Install Update</a><br />";
 				$records_out[] = array('version' => $version, 'update_title' => $u["update_title"], 'installed' => $installed_txt);
 
 			}
 		}
 	}
 }
-
-/*
-$updates = $app->db->queryAllRecords('SELECT software_update.update_title, software_update.software_update_id, software_update.package_name, v1, v2, v3, v4, software_update_inst.status
-		FROM software_update LEFT JOIN software_update_inst ON ( software_update.software_update_id = software_update_inst.software_update_id )
-		WHERE server_id = '.$server_id.'
-		GROUP BY software_update.package_name
-		ORDER BY software_update.package_name ASC, v1 DESC , v2 DESC , v3 DESC , v4 DESC');
-
-if(is_array($updates)) {
-	foreach($updates as $key => $u) {
-		$installed_txt = '';
-
-		$version = $u['v1'].'.'.$u['v2'].'.'.$u['v3'].'.'.$u['v4'];
-		$updates[$key]['version'] = $version;
-		if($u['status'] == 'installed' || $u['status'] == 'installing' || $u['status'] == 'deleting') {
-			$installed_txt .= "Installed version $version<br />";
-		} else {
-			$installed_txt .= "<a href=\"#\" onclick=\"loadContent('admin/software_update_list.php?action=install&package=".$u["package_name"]."&id=".$u["software_update_id"]."&server_id=".$server_id."');\">Install now</a><br />";
-		}
-		$updates[$key]['installed'] = $installed_txt;
-
-	}
-}
-*/
 
 
 
diff --git a/interface/web/admin/templates/system_config_branding_edit.html b/interface/web/admin/templates/system_config_branding_edit.html
index 2c4c2e1..7199616 100644
--- a/interface/web/admin/templates/system_config_branding_edit.html
+++ b/interface/web/admin/templates/system_config_branding_edit.html
@@ -15,7 +15,7 @@
         <input type="hidden" name="id" value="{tmpl_var name='id'}">
         <div class="buttonHolder buttons">
             <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" onClick="submitForm('pageForm','admin/system_config_edit.php');"><span>{tmpl_var name='btn_save_txt'}</span></button>
-            <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onClick="loadContent('admin/server_list.php');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+            <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="admin/server_list.php"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
         </div>
     </div>
     
diff --git a/interface/web/dns/templates/dns_dmarc_edit.htm b/interface/web/dns/templates/dns_dmarc_edit.htm
index 9e0a219..422d259 100644
--- a/interface/web/dns/templates/dns_dmarc_edit.htm
+++ b/interface/web/dns/templates/dns_dmarc_edit.htm
@@ -92,7 +92,7 @@
             
         <div class="buttonHolder buttons">
             <button class="positive iconstxt icoPositive" type="button" value="{tmpl_var name='btn_save_txt'}" data-submit-form="pageForm" data-form-action="dns/dns_dmarc_edit.php"><span>{tmpl_var name='btn_save_txt'}</span></button>
-            <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" onclick="loadContent('dns/dns_soa_edit.php?id={tmpl_var name='zone'}');"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
+            <button class="negative iconstxt icoNegative" type="button" value="{tmpl_var name='btn_cancel_txt'}" data-load-content="dns/dns_soa_edit.php?id={tmpl_var name='zone'}"><span>{tmpl_var name='btn_cancel_txt'}</span></button>
         </div>
     </div>
   
diff --git a/interface/web/index.php b/interface/web/index.php
index 50f98ae..f6929ba 100644
--- a/interface/web/index.php
+++ b/interface/web/index.php
@@ -51,6 +51,14 @@
 	$app->tpl->setVar('global_tabchange_discard_txt', $app->lng('global_tabchange_discard_txt'));
 }
 
+if($sys_config['use_loadindicator'] == 'y') {
+	$app->tpl->setVar('use_loadindicator', 'y');
+}
+if($sys_config['use_combobox'] == 'y') {
+	$app->tpl->setVar('use_combobox', 'y');
+}
+
+
 if(isset($_SESSION['show_info_msg'])) {
 	$app->tpl->setVar('show_info_msg', $_SESSION['show_info_msg']);
 	unset($_SESSION['show_info_msg']);
diff --git a/interface/web/js/scrigo.js.php b/interface/web/js/scrigo.js.php
index f21fc9d..7ba19d1 100644
--- a/interface/web/js/scrigo.js.php
+++ b/interface/web/js/scrigo.js.php
@@ -9,533 +9,6 @@
 $server_config_array = $app->getconf->get_global_config();
 ?>
 
-var ISPConfig = {
-	pageFormChanged: false,
-	tabChangeWarningTxt: '',
-	tabChangeDiscardTxt: '',
-	tabChangeWarning: false,
-	tabChangeDiscard: false,
-	requestsRunning: 0,
-	indicatorPaddingH: -1,
-	indicatorPaddingW: -1,
-	indicatorCompleted: false,
-	registeredHooks: new Array(),
-	redirect: '',
-
-	reportError: function(request) {
-		/* Error reporting is disabled by default as some browsers like safari
-		   sometimes throw errors when a ajax request is delayed even if the
-		   ajax request worked. */
-
-		/*alert(request);*/
-	},
-	
-	registerHook: function(name, callback) {
-		if(!registeredHooks[name]) registeredHooks[name] = new Array();
-		var newindex = registeredHooks[name].length;
-		registeredHooks[name][newindex] = callback;
-	},
-	
-	callHook: function(name, params) {
-		if(!registeredHooks[name]) return;
-		for(var i = 0; i < registeredHooks[name].length; i++) {
-			var callback = registeredHooks[name][i];
-			callback(name, params);
-		}
-	},
-	
-	resetFormChanged: function() {
-		pageFormChanged = false;
-	},
-
-	showLoadIndicator: function() {
-		document.body.style.cursor = 'wait';
-
-<?php
-if($server_config_array['misc']['use_loadindicator'] == 'y'){
-?>
-    requestsRunning += 1;
-
-    if(requestsRunning < 2) {
-        var indicator = jQuery('#ajaxloader');
-        if(indicator.length < 1) {
-            indicator = jQuery('<div id="ajaxloader" style="display: none;"></div>');
-            indicator.appendTo('body');
-        }
-        var parent = jQuery('#content');
-        if(parent.length < 1) return;
-        indicatorCompleted = false;
-
-        var atx = parent.offset().left + 150; //((parent.outerWidth(true) - indicator.outerWidth(true)) / 2);
-        var aty = parent.offset().top + 150;
-        indicator.css( {'left': atx, 'top': aty } ).fadeIn('fast', function() {
-            // check if loader should be hidden immediately
-            indicatorCompleted = true;
-            if(requestsRunning < 1) $(this).fadeOut('fast', function() { $(this).hide();});
-        });
-    }
-<?php
-}
-?>
-	},
-
-	hideLoadIndicator: function() {
-		document.body.style.cursor = '';
-
-		requestsRunning -= 1;
-		if(requestsRunning < 1) {
-			requestsRunning = 0; // just for the case...
-			if(indicatorCompleted == true) jQuery('#ajaxloader').fadeOut('fast', function() { jQuery('#ajaxloader').hide(); } );
-		}
-	}
-
-	onAfterSideNavLoaded: function() {
-	<?php
-if($server_config_array['misc']['use_combobox'] == 'y'){
-?>
-		$('#sidebar').find("select:not(.chosen-select)").select2({
-			placeholder: '',
-			width: 'element',
-			selectOnBlur: true,
-			allowClear: true,
-		});
-<?php
-}
-?>
-	},
-
-	onAfterContentLoad: function(url, data) {
-		if(!data) data = '';
-		else data = '&' + data;
-<?php
-if($server_config_array['misc']['use_combobox'] == 'y'){
-?>
-
-
-		$('#pageContent').find("select:not(.chosen-select)").select2({
-			placeholder: '',
-			width: 'element',
-			selectOnBlur: true,
-			allowClear: true,
-			formatResult: function(o) {
-				if(o.id && $(o.element).parent().hasClass('flags')) return '<span class="flags flag-' + o.id.toLowerCase() + '">' + o.text + '</span>';
-				else return o.text;
-			},
-			formatSelection: function(o) {
-				if(o.id && $(o.element).parent().hasClass('flags')) return '<span class="flags flag-' + o.id.toLowerCase() + '">' + o.text + '</span>';
-				else return o.text;
-			}
-		}).on('change', function(e) {
-			if (jQuery("#pageForm .table #Filter").length > 0) {
-				jQuery("#pageForm .table #Filter").trigger('click');
-			}
-		});
-		/* TODO: find a better way! */
-		//$('.chosen-select').chosen({no_results_text: "<?php echo $wb['globalsearch_noresults_text_txt']; ?>", width: '300px'});
-<?php
-}
-?>
-		callHook('onAfterContentLoad', {'url': url, 'data': data });
-	},
-
-	/* THIS ONE SHOULD BE REMOVED AFTER CREATING THE STATIC LOGIN PAGE!!! */
-	submitLoginForm: function(formname) {
-		//* Validate form. TODO: username and password with strip();
-		var frm = document.getElementById(formname);
-		var userNameObj = frm.username;
-		if(userNameObj.value == ''){
-			userNameObj.focus();
-			return;
-		}
-		var passwordObj = frm.passwort;
-		if(passwordObj.value == ''){
-			passwordObj.focus();
-			return;
-		}
-
-		$('#dummy_username').val(userNameObj.value);
-		$('#dummy_passwort').val(passwordObj.value);
-		$('#dummy_login_form').submit();
-
-		var submitFormObj = jQuery.ajax({
-			type: "POST",
-			url: "content.php",
-			data: jQuery('#'+formname).serialize(),
-			dataType: "html",
-			beforeSend: function() {
-				showLoadIndicator();
-			},
-			success: function(data, textStatus, jqXHR) {
-				if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-					var parts = jqXHR.responseText.split(':');
-					//alert(parts[1]);
-					loadContent(parts[1]);
-					//redirect = parts[1];
-					//window.setTimeout('loadContent(redirect)', 1000);
-				} else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
-					// Go to the login page
-					document.location.href = 'index.php';
-				} else {
-					jQuery('#pageContent').html(jqXHR.responseText);
-					onAfterContentLoad('content.php', jQuery('#'+formname).serialize());
-					pageFormChanged = false;
-				}
-				loadMenus();
-				hideLoadIndicator();
-			},
-			error: function() {
-				hideLoadIndicator();
-				reportError('Ajax Request was not successful.110');
-			}
-		});
-	},
-
-	submitForm: function(formname, target, confirmation) {
-		var successMessage = arguments[3];
-		if(!confirmation) confirmation = false;
-		
-		if(!confirmation || window.confirm(confirmation)) {
-			var submitFormObj = jQuery.ajax({
-				type: "POST",
-				url: target,
-				data: jQuery('#'+formname).serialize(),
-				dataType: "html",
-				beforeSend: function() {
-					showLoadIndicator();
-				},
-				success: function(data, textStatus, jqXHR) {
-					if(successMessage) alert(successMessage);
-					if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-						var parts = jqXHR.responseText.split(':');
-						//alert(parts[1]);
-						loadContent(parts[1]);
-						//redirect = parts[1];
-						//window.setTimeout('loadContent(redirect)', 1000);
-					} else {
-						jQuery('#pageContent').html(jqXHR.responseText);
-						onAfterContentLoad(target, jQuery('#'+formname).serialize());
-						pageFormChanged = false;
-					}
-					hideLoadIndicator();
-				},
-				error: function(jqXHR, textStatus, errorThrown) {
-					hideLoadIndicator();
-					var parts = jqXHR.responseText.split(':');
-					reportError('Ajax Request was not successful. 111');
-				}
-			});
-		}
-	},
-
-	submitUploadForm: function(formname, target) {
-		var handleResponse = function(loadedFrame) {
-			var response, responseStr = loadedFrame.contentWindow.document.body.innerHTML;
-
-			try {
-				response = JSON.parse(responseStr);
-			} catch(e) {
-				response = responseStr;
-			}
-			var msg = '';
-			var okmsg = jQuery('#OKMsg',response).html();
-			if(okmsg){
-				msg = '<div id="OKMsg">'+okmsg+'</div>';
-			}
-			var errormsg = jQuery('#errorMsg',response).html();
-			if(errormsg){
-				msg = msg+'<div id="errorMsg">'+errormsg+'</div>';
-			}
-			return msg;
-
-		};
-
-		var frame_id = 'ajaxUploader-iframe-' + Math.round(new Date().getTime() / 1000);
-		jQuery('body').after('<iframe width="0" height="0" style="display:none;" name="'+frame_id+'" id="'+frame_id+'"/>');
-		jQuery('input[type="file"]').closest("form").attr({target: frame_id, action: target}).submit();
-		jQuery('#'+frame_id).load(function() {
-			var msg = handleResponse(this);
-			jQuery('#errorMsg').remove();
-			jQuery('#OKMsg').remove();
-			jQuery('input[name="id"]').before(msg);
-			jQuery(this).remove();
-		  });
-	},
-
-	function capp(module, redirect) {
-		var submitFormObj = jQuery.ajax({
-			type: "GET",
-			url: "capp.php",
-			data: "mod="+module+((redirect != undefined) ? '&redirect='+redirect : ''),
-			dataType: "html",
-			beforeSend: function() {
-				showLoadIndicator();
-			},
-			success: function(data, textStatus, jqXHR) {
-				if(jqXHR.responseText != '') {
-					if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-						var parts = jqXHR.responseText.split(':');
-						loadContent(parts[1]);
-					} else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
-						var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
-						document.location.href = newUrl;
-					} else {
-						//alert(jqXHR.responseText);
-					}
-				}
-				loadMenus();
-				hideLoadIndicator();
-			},
-			error: function() {
-				hideLoadIndicator();
-				reportError('Ajax Request was not successful.'+module);
-			}
-		});
-	},
-	
-	loadContent: function(pagename) {
-		var params = arguments[1];
-		var pageContentObject2 = jQuery.ajax({
-			type: "GET",
-			url: pagename,
-			data: (params ? params : null),
-			dataType: "html",
-			beforeSend: function() {
-				showLoadIndicator();
-			},
-			success: function(data, textStatus, jqXHR) {
-				if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-					var parts = jqXHR.responseText.split(':');
-					loadContent(parts[1]);
-				} else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
-					var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
-					document.location.href = newUrl;
-				} else {
-					//document.getElementById('pageContent').innerHTML = jqXHR.responseText;
-					//var reponse = jQuery(jqXHR.responseText);
-					//var reponseScript = reponse.filter("script");
-					//jQuery.each(reponseScript, function(idx, val) { eval(val.text); } );
-
-					jQuery('#pageContent').html(jqXHR.responseText);
-					onAfterContentLoad(pagename, (params ? params : null));
-					pageFormChanged = false;
-				}
-				hideLoadIndicator();
-			},
-			error: function() {
-				hideLoadIndicator();
-				reportError('Ajax Request was not successful. 113');
-			}
-		});
-	},
-
-	loadContentRefresh: function(pagename) {
-		if($('#refreshinterval').val() > 0) {
-			var pageContentObject2 = jQuery.ajax({
-				type: "GET",
-				url: pagename,
-				data: "refresh="+document.getElementById('refreshinterval').value,
-				dataType: "html",
-				beforeSend: function() {
-					showLoadIndicator();
-				},
-				success: function(data, textStatus, jqXHR) {
-					hideLoadIndicator();
-					jQuery('#pageContent').html(jqXHR.responseText);
-					onAfterContentLoad(pagename, "refresh="+document.getElementById('refreshinterval').value);
-					pageFormChanged = false;
-				},
-				error: function() {
-					hideLoadIndicator();
-					reportError('Ajax Request was not successful.'+pagename);
-				}
-			});
-			setTimeout( "ISPConfig.loadContentRefresh('"+pagename+"&refresh="+document.getElementById('refreshinterval').value+"')", document.getElementById('refreshinterval').value*1000*60 );
-		}
-	},
-
-
-	loadInitContent: function() {
-		var pageContentObject = jQuery.ajax({
-			type: "GET",
-			url: "content.php",
-			data: "s_mod=login&s_pg=index",
-			dataType: "html",
-			beforeSend: function() {
-				showLoadIndicator();
-			},
-			success: function(data, textStatus, jqXHR) {
-				if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
-					var parts = jqXHR.responseText.split(":");
-					loadContent(parts[1]);
-				} else {
-					jQuery('#pageContent').html(jqXHR.responseText);
-					onAfterContentLoad('content.php', "s_mod=login&s_pg=index");
-					pageFormChanged = false;
-				}
-				hideLoadIndicator();
-			},
-			error: function() {
-				hideLoadIndicator();
-				reportError('Ajax Request was not successful. 114');
-			}
-		});
-		
-		loadMenus();
-		keepalive();
-		setTimeout(function() {
-			try {
-				jQuery('form#pageForm').find('input[name="username"]').focus();
-			} catch (e) {
-			
-			}
-		}, 1000);
-	},
-	
-	loadMenus: function() {
-		var sideNavObject = jQuery.ajax({
-			type: "GET",
-			url: "nav.php",
-			data: "nav=side",
-			dataType: "html",
-			beforeSend: function() {
-				showLoadIndicator();
-			},
-			success: function(data, textStatus, jqXHR) {
-				hideLoadIndicator();
-				jQuery('#sidebar').html(jqXHR.responseText);
-				onAfterSideNavLoaded();
-				loadPushyMenu();
-			},
-			error: function() {
-				hideLoadIndicator();
-				reportError('Ajax Request was not successful. 115');
-			}
-		});
-
-		var topNavObject = jQuery.ajax({
-			type: "GET",
-			url: "nav.php",
-			data: "nav=top",
-			dataType: "html",
-			beforeSend: function() {
-				showLoadIndicator();
-			},
-			success: function(data, textStatus, jqXHR) {
-				hideLoadIndicator();
-				jQuery('#topnav-container').html(jqXHR.responseText);
-				loadPushyMenu();
-			},
-			error: function(o) {
-				hideLoadIndicator();
-				reportError('Ajax Request was not successful. 116');
-			}
-		});
-	},
-
-	changeTab: function(tab, target, force) {
-		if(requestsRunning > 0) return false;
-	
-		document.pageForm.next_tab.value = tab;
-
-		var idel = jQuery('form#pageForm').find('[name="id"]');
-		var id = null;
-		if(idel.length > 0) id = idel.val();
-		if(tabChangeDiscard == 'y' && !force) {
-			if((idel.length < 1 || id) && (pageFormChanged == false || window.confirm(tabChangeDiscardTxt))) {
-				var next_tab = tab;
-				if(id) loadContent(target, {'next_tab': next_tab, 'id': id});
-				else loadContent(target, {'next_tab': next_tab});
-			} else {
-				return false;
-			}
-		} else {
-			if(id && tabChangeWarning == 'y' && pageFormChanged == true) {
-				if(window.confirm(tabChangeWarningTxt)) {
-					submitForm('pageForm', target);
-				} else {
-					var next_tab = tab;
-					if(id) loadContent(target, {'next_tab': next_tab, 'id': id});
-					else loadContent(target, {'next_tab': next_tab});
-				}
-			} else {
-				submitForm('pageForm',target);
-			}
-		}
-	},
-
-function del_record(link,confirmation) {
-  if(window.confirm(confirmation)) {
-          loadContent(link);
-  }
-}
-
-function confirm_action(link,confirmation) {
-  if(window.confirm(confirmation)) {
-          loadContent(link);
-  }
-}
-
-function loadContentInto(elementid,pagename) {
-  var pageContentObject2 = jQuery.ajax({	type: "GET",
-											url: pagename,
-											dataType: "html",
-											beforeSend: function() {
-//												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-//                                                hideLoadIndicator();
-												jQuery('#'+elementid).html(jqXHR.responseText);
-											},
-											error: function() {
-//                                                hideLoadIndicator();
-												reportError('Ajax Request was not successful. 118');
-											}
-										});
-}
-
-function loadOptionInto(elementid,pagename) {
-	var pageContentObject2 = jQuery.ajax({	type: "GET",
-											url: pagename,
-											dataType: "html",
-											beforeSend: function() {
-//												showLoadIndicator();
-											},
-											success: function(data, textStatus, jqXHR) {
-//                                                hideLoadIndicator();
-												var teste = jqXHR.responseText;
-												var elemente = teste.split('#');
-												el=document.getElementById(elementid);
-												el.innerHTML='';
-												for (var i = 0; i < elemente.length; ++i){
-
-													var foo2 = document.createElement("option");
-													foo2.appendChild(document.createTextNode(elemente[i]));
-													foo2.value=elemente[i];
-													el.appendChild(foo2);
-												}
-											},
-											error: function() {
-//                                                hideLoadIndicator();
-												reportError('Ajax Request was not successful. 119');
-											}
-										});
-}
-
-function keepalive() {
-	var pageContentObject3 = jQuery.ajax({	type: "GET",
-											url: "keepalive.php",
-											dataType: "html",
-											success: function(data, textStatus, jqXHR) {
-												setTimeout( keepalive, 1000000 );
-											},
-											error: function() {
-												reportError('Session expired. Please login again.');
-											}
-										});
-  	//setTimeout( keepalive, 1000000 );
-}
-
-
 <?php
 $min_password_length = 5;
 if(isset($server_config_array['misc']['min_password_length'])) {
@@ -672,82 +145,7 @@
 	return false;
 }
 
-var new_tpl_add_id = 0;
-function addAdditionalTemplate(){
-    var tpl_add = jQuery('#template_additional').val();
-    var addTemplate = jQuery('#tpl_add_select').val().split('|',2);
-	var addTplId = addTemplate[0];
-	var addTplText = addTemplate[1];
-	if(addTplId > 0) {
-        var newVal = tpl_add.split('/');
-        new_tpl_add_id += 1;
-        var delbtn = jQuery('<a href="#"></a>').attr('class', 'button icons16 icoDelete').click(function(e) {
-            e.preventDefault();
-            delAdditionalTemplate($(this).parent().attr('rel'));
-        });
-        newVal[newVal.length] = 'n' + new_tpl_add_id + ':' + addTplId;
-	    jQuery('<li>' + addTplText + '</li>').attr('rel', 'n' + new_tpl_add_id).append(delbtn).appendTo('#template_additional_list ul');
-	    jQuery('#template_additional').val(newVal.join('/'));
-	    alert('additional template ' + addTplText + ' added to customer');
-	} else {
-	    alert('no additional template selcted');
-	}
-}
 
-function delAdditionalTemplate(tpl_id){
-    var tpl_add = jQuery('#template_additional').val();
-	if(tpl_id) {
-        // new style
-		var $el = jQuery('#template_additional_list ul').find('li[rel="' + tpl_id + '"]').eq(0); // only the first
-        var addTplText = $el.text();
-        $el.remove();
-
-		var oldVal = tpl_add.split('/');
-		var newVal = new Array();
-        for(var i = 0; i < oldVal.length; i++) {
-            var tmp = oldVal[i].split(':', 2);
-            if(tmp.length == 2 && tmp[0] == tpl_id) continue;
-            newVal[newVal.length] = oldVal[i];
-        }
-        jQuery('#template_additional').val(newVal.join('/'));
-		alert('additional template ' + addTplText + ' deleted from customer');
-    } else if(tpl_add != '') {
-        // old style
-		var addTemplate = document.getElementById('tpl_add_select').value.split('|',2);
-		var addTplId = addTemplate[0];
-		var addTplText = addTemplate[1];
-
-		jQuery('#template_additional_list ul').find('li:not([rel])').each(function() {
-            var text = jQuery(this).text();
-            if(text == addTplText) {
-                jQuery(this).remove();
-                return false;
-            }
-            return this;
-        });
-
-		var newVal = tpl_add;
-        var repl = new RegExp('(^|\/)' + addTplId + '(\/|$)');
-		newVal = newVal.replace(repl, '');
-		newVal = newVal.replace('//', '/');
-		jQuery('#template_additional').val(newVal);
-		alert('additional template ' + addTplText + ' deleted from customer');
-  } else {
-  	alert('no additional template selcted');
-  }
-
-}
-
-function getInternetExplorerVersion() {
-    var rv = -1; // Return value assumes failure.
-    if (navigator.appName == 'Microsoft Internet Explorer') {
-        var ua = navigator.userAgent;
-        var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
-        if (re.exec(ua) != null)
-            rv = parseFloat(RegExp.$1);
-    }
-    return rv;
-}
 
 function password(minLength, special, num_special){
 	minLength = minLength || 10;
@@ -839,42 +237,3 @@
 function getRandomInt(min, max){
     return Math.floor(Math.random() * (max - min + 1)) + min;
 }
-
-jQuery(document).on("click", ".addPlaceholder", function(){
-	var placeholderText = jQuery(this).text();
-	var template = jQuery(this).siblings(':input');
-	template.insertAtCaret(placeholderText);
-});
-
-jQuery(document).on("click", ".addPlaceholderContent", function(){
-	var placeholderContentText = jQuery(this).find('.addPlaceholderContent').text();
-	var template2 = jQuery(this).siblings(':input');
-	template2.insertAtCaret(placeholderContentText);
-});
-
-jQuery.fn.extend({
-	insertAtCaret: function(myValue){
-		return this.each(function(i) {
-			if (document.selection) {
-				//For browsers like Internet Explorer
-				this.focus();
-				sel = document.selection.createRange();
-				sel.text = myValue;
-				this.focus();
-			} else if (this.selectionStart || this.selectionStart == '0') {
-				//For browsers like Firefox and Webkit based
-				var startPos = this.selectionStart;
-				var endPos = this.selectionEnd;
-				var scrollTop = this.scrollTop;
-				this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
-				this.focus();
-				this.selectionStart = startPos + myValue.length;
-				this.selectionEnd = startPos + myValue.length;
-				this.scrollTop = scrollTop;
-			} else {
-				this.value += myValue;
-				this.focus();
-			}
-		})
-	}
-});
diff --git a/interface/web/login/login_as.php b/interface/web/login/login_as.php
index ed2dc9e..bcbb10a 100644
--- a/interface/web/login/login_as.php
+++ b/interface/web/login/login_as.php
@@ -98,7 +98,7 @@
 	<input type="hidden" name="s_pg" value="index" />
     <div class="wf_actions buttons">
       <button class="positive iconstxt icoPositive" type="button" value="'.$wb['btn_yes_txt'].'" onclick="submitLoginForm(' . "'pageForm'" . ');"><span>'.$wb['btn_yes_txt'].'</span></button>
-      <button class="negative iconstxt icoNegative" type="button" value="'.$wb['btn_back_txt'].'" onclick="loadContent('. "'$backlink'" . ');"><span>'.$wb['btn_back_txt'].'</span></button>
+      <button class="negative iconstxt icoNegative" type="button" value="'.$wb['btn_back_txt'].'" data-load-content="'.$backlink.'"><span>'.$wb['btn_back_txt'].'</span></button>
     </div>
 ';
 ?>
diff --git a/interface/web/login/logout.php b/interface/web/login/logout.php
index 5e79629..8d947d4 100644
--- a/interface/web/login/logout.php
+++ b/interface/web/login/logout.php
@@ -54,7 +54,7 @@
 		<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 ' . $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>
+	      <button class="negative iconstxt icoNegative" type="button" value="No, logout" data-load-content="login/logout.php?l=1"><span>No, logout</span></button>
 	    </div>
 	';
 	exit;
diff --git a/interface/web/login/templates/password_reset.htm b/interface/web/login/templates/password_reset.htm
index c79581d..eabb472 100644
--- a/interface/web/login/templates/password_reset.htm
+++ b/interface/web/login/templates/password_reset.htm
@@ -27,7 +27,7 @@
 
         <div class="clear"><div class="right">
             <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='pw_button_txt'}" data-submit-form="pageForm" data-form-action="login/password_reset.php">{tmpl_var name='pw_button_txt'}</button>
-            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='back_txt'}" onclick="loadInitContent();">{tmpl_var name='back_txt'}</button>
+            <button class="btn btn-default formbutton-default" type="button" value="{tmpl_var name='back_txt'}" onclick="ISPConfig.loadInitContent();">{tmpl_var name='back_txt'}</button>
 
         </div></div>
     </div>
diff --git a/interface/web/monitor/lib/module.conf.php b/interface/web/monitor/lib/module.conf.php
index dc51ae3..6f31204 100644
--- a/interface/web/monitor/lib/module.conf.php
+++ b/interface/web/monitor/lib/module.conf.php
@@ -37,7 +37,7 @@
 
 $servers = $app->db->queryAllRecords("SELECT server_id, server_name FROM server order by server_name");
 
-$dropDown = "<select id='server_id' onchange=\"loadContent('monitor/show_sys_state.php?state=server&server=' + document.getElementById('server_id').value);\">";
+$dropDown = "<select id='server_id' onchange=\"ISPConfig.loadContent('monitor/show_sys_state.php?state=server&server=' + document.getElementById('server_id').value);\">";
 foreach ($servers as $server)
 {
 	$dropDown .= "<option value='" . $server['server_id'] . "|" . $server['server_name'] . "'>" . $server['server_name'] . "</option>";
diff --git a/interface/web/monitor/show_sys_state.php b/interface/web/monitor/show_sys_state.php
index 93d1f95..480dd17 100644
--- a/interface/web/monitor/show_sys_state.php
+++ b/interface/web/monitor/show_sys_state.php
@@ -287,8 +287,8 @@
 	/*
 	 * The normal info also needs a link to the verbose info
 	*/
-	$html_ve .= "<a href='#' onclick='loadContent(\"monitor/show_sys_state.php?state=server&server=" . $serverId . '|' . $serverName . "\");'>" . $app->lng("monitor_serverstate_moreinfo_txt") . "</a>";
-	$html_server .= "<a href='#' onclick='loadContent(\"monitor/show_sys_state.php?state=server&server=" . $serverId . '|' . $serverName . "\");'>" . $app->lng("monitor_serverstate_moreinfo_txt") . "</a>";
+	$html_ve .= "<a href='#' data-load-content='monitor/show_sys_state.php?state=server&server=" . $serverId . '|' . $serverName . "'>" . $app->lng("monitor_serverstate_moreinfo_txt") . "</a>";
+	$html_server .= "<a href='#' data-load-content='monitor/show_sys_state.php?state=server&server=" . $serverId . '|' . $serverName . "'>" . $app->lng("monitor_serverstate_moreinfo_txt") . "</a>";
 
 	/*
 	 * Finish all html's
@@ -341,28 +341,28 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_hdok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_hdgoingfull_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'warning':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_hdnearlyfull_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'critical':
 			$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_hdveryfull_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_hdfull_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_hdunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=disk_usage\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=disk_usage'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -373,27 +373,27 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_loadok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_loadheavy_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'warning':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_loadhigh_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'critical':
 			$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_loadhigher_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_loadhighest_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_loadunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=server_load\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=server_load'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -401,16 +401,16 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_servicesonline_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=services'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_servicesoffline_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=services'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_servicesunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=services\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=services'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -418,12 +418,12 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_updatesok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=system_update'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_updatesneeded_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=system_update'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'no_state':
 			/*
@@ -432,7 +432,7 @@
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_updatesunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=system_update\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=system_update'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -441,19 +441,19 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_raidok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=raid_state'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_raidresync_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=raid_state'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'critical':
 			$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_raidfault_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=raid_state'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_raiderror_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=raid_state'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'no_state':
 			/*
@@ -462,7 +462,7 @@
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_raidunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=raid_state\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=raid_state'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -474,23 +474,23 @@
 	//  switch ($record['state']) {
 	//   case 'ok':
 	//    $messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_beancounterok_txt") . ' ' .
-	//      "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+	//      "<a href='#' data-load-content='monitor/show_data.php?type=openvz_beancounter'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 	//    break;
 	//   case 'info':
 	//    $messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_beancounterinfo_txt") . ' ' .
-	//      "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+	//      "<a href='#' data-load-content='monitor/show_data.php?type=openvz_beancounter'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 	//    break;
 	//   case 'warning':
 	//    $messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_beancounterwarning_txt") . ' ' .
-	//      "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+	//      "<a href='#' data-load-content='monitor/show_data.php?type=openvz_beancounter'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 	//    break;
 	//   case 'critical':
 	//    $messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_beancountercritical_txt") . ' ' .
-	//      "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+	//      "<a href='#' data-load-content='monitor/show_data.php?type=openvz_beancounter'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 	//    break;
 	//   case 'error':
 	//    $messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_beancountererror_txt") . ' ' .
-	//      "<a href='#' onclick='loadContent(\"monitor/show_data.php?type=openvz_beancounter\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+	//      "<a href='#' data-load-content='monitor/show_data.php?type=openvz_beancounter'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 	//    break;
 	//   default:
 	//    break;
@@ -502,27 +502,27 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_mailqok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listinfo_txt")][] = $app->lng("monitor_serverstate_mailqheavy_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'warning':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_mailqhigh_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'critical':
 			$messages[$app->lng("monitor_serverstate_listcritical_txt")][] = $app->lng("monitor_serverstate_mailqhigher_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_mailqhighest_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_mailqunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_data.php?type=mailq\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_data.php?type=mailq'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -531,19 +531,19 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_syslogok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/log_list.php'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'warning':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_syslogwarning_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/log_list.php'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'error':
 			$messages[$app->lng("monitor_serverstate_listerror_txt")][] = $app->lng("monitor_serverstate_syslogerror_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/log_list.php'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_syslogunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/log_list.php\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/log_list.php'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
@@ -556,15 +556,15 @@
 		switch ($record['state']) {
 		case 'ok':
 			$messages[$app->lng("monitor_serverstate_listok_txt")][] = $app->lng("monitor_serverstate_fclamok_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_log.php?log=log_freshclam'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		case 'info':
 			$messages[$app->lng("monitor_serverstate_listwarning_txt")][] = $app->lng("monitor_serverstate_fclamoutdated_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_log.php?log=log_freshclam'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		default:
 			$messages[$app->lng("monitor_serverstate_listunknown_txt")][] = $app->lng("monitor_serverstate_fclamunknown_txt") . ' ' .
-				"<a href='#' onclick='loadContent(\"monitor/show_log.php?log=log_freshclam\");'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
+				"<a href='#' data-load-content='monitor/show_log.php?log=log_freshclam'>[" . $app->lng("monitor_serverstate_more_txt") . "]</a>";
 			break;
 		}
 	}
diff --git a/interface/web/monitor/templates/show_log.htm b/interface/web/monitor/templates/show_log.htm
index a9aebdb..dc5792d 100644
--- a/interface/web/monitor/templates/show_log.htm
+++ b/interface/web/monitor/templates/show_log.htm
@@ -8,7 +8,7 @@
             
                 <div class="form-group">
                     <label for="refreshinterval" class="col-sm-3 control-label">{tmpl_var name='refreshinterval_txt'}</label>
-                    <div class="col-sm-9"><select name="refreshinterval" id="refreshinterval" class="form-control" onChange="loadContentRefresh('monitor/show_log.php?log={tmpl_var name="log_id"}')">
+                    <div class="col-sm-9"><select name="refreshinterval" id="refreshinterval" class="form-control" onChange="ISPConfig.loadContentRefresh('monitor/show_log.php?log={tmpl_var name="log_id"}')">
                         {tmpl_var name='refresh'}
                     </select></div>
                 
diff --git a/interface/web/monitor/templates/show_sys_state.htm b/interface/web/monitor/templates/show_sys_state.htm
index 0e9a9a1..4586fc3 100644
--- a/interface/web/monitor/templates/show_sys_state.htm
+++ b/interface/web/monitor/templates/show_sys_state.htm
@@ -8,7 +8,7 @@
             
                 <div class="form-group">
                     <label for="refreshinterval" class="col-sm-3 control-label">&nbsp;</label>
-                    <div class="col-sm-9"><select name="refreshinterval" id="refreshinterval" class="form-control" onChange="loadContentRefresh('monitor/show_sys_state.php?state={tmpl_var name="state_type"}')">
+                    <div class="col-sm-9"><select name="refreshinterval" id="refreshinterval" class="form-control" onChange="ISPConfig.loadContentRefresh('monitor/show_sys_state.php?state={tmpl_var name="state_type"}')">
                         {tmpl_var name='refresh'}
                     </select></div>
                 
diff --git a/interface/web/sites/templates/aps_update_packagelist.htm b/interface/web/sites/templates/aps_update_packagelist.htm
index 1ce4110..a73d8b3 100644
--- a/interface/web/sites/templates/aps_update_packagelist.htm
+++ b/interface/web/sites/templates/aps_update_packagelist.htm
@@ -7,6 +7,6 @@
         <legend>{tmpl_var name="legend_txt"}</legend>
             
             <div class="clear"><div class="right">
-            <button class="btn btn-default formbutton-success" type="button" value="Update Packagelist" onClick="loadContent('sites/aps_cron_apscrawler_if.php')">{tmpl_var name="btn_start_txt"}</button>
+            <button class="btn btn-default formbutton-success" type="button" value="Update Packagelist" data-load-content="sites/aps_cron_apscrawler_if.php">{tmpl_var name="btn_start_txt"}</button>
             <button class="btn btn-default formbutton-default" type="button" value="Cancel" data-load-content="sites/aps_availablepackages_list.php">{tmpl_var name="btn_cancel_txt"}</button>
         </div></div>
diff --git a/interface/web/sites/templates/backup_stats_list.htm b/interface/web/sites/templates/backup_stats_list.htm
index 05d5bbe..8bf1824 100644
--- a/interface/web/sites/templates/backup_stats_list.htm
+++ b/interface/web/sites/templates/backup_stats_list.htm
@@ -17,11 +17,11 @@
 				<tbody>
 					<tmpl_loop name="records">
 					<tr class="tbl_row_{tmpl_if name='__EVEN__'}even{tmpl_else}uneven{/tmpl_if}">
-						<td class="tbl_col_active"> <a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="active"}</a> </td>
-						<td class="tbl_col_domain"> <a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="domain"}</a> </td>
-						<td class="tbl_col_server"> <a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="server_id"}</a> </td>
-						<td class="tbl_col_interval"> <a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="backup_interval"}</a> /  <a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="backup_copies"}</a> </td>
-						<td class="tbl_col_backup_count"> <a href="#" onclick="loadContent('sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}');">{tmpl_var name="backup_copies_exists"}</a> </td>
+						<td class="tbl_col_active"> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="active"}</a> </td>
+						<td class="tbl_col_domain"> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="domain"}</a> </td>
+						<td class="tbl_col_server"> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="server_id"}</a> </td>
+						<td class="tbl_col_interval"> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_interval"}</a> /  <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_copies"}</a> </td>
+						<td class="tbl_col_backup_count"> <a href="#" data-load-content="sites/web_<tmpl_if name='type' op='==' value='vhostsubdomain'>vhost_sub</tmpl_if><tmpl_if name='type' op='==' value='vhostalias'>vhost_alias</tmpl_if>domain_edit.php?id={tmpl_var name='id'}">{tmpl_var name="backup_copies_exists"}</a> </td>
 					</tr>
 					</tmpl_loop>
 				</tbody>
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.js b/interface/web/themes/default/assets/javascripts/ispconfig.js
index cf794d4..3352323 100644
--- a/interface/web/themes/default/assets/javascripts/ispconfig.js
+++ b/interface/web/themes/default/assets/javascripts/ispconfig.js
@@ -1,6 +1,707 @@
+var ISPConfig = {
+	pageFormChanged: false,
+	tabChangeWarningTxt: '',
+	tabChangeDiscardTxt: '',
+	tabChangeWarning: false,
+	tabChangeDiscard: false,
+	requestsRunning: 0,
+	indicatorCompleted: false,
+	registeredHooks: new Array(),
+	new_tpl_add_id: 0,
+	
+	options: {
+		useLoadIndicator: false,
+		useComboBox: false,
+	},
+	
+	setOption: function(key, value) {
+		ISPConfig.options[key] = value;
+	},
+	
+	setOptions: function(opts) {
+		$.extend(ISPConfig.options, opts);
+	},
+	
+	reportError: function(request) {
+		/* Error reporting is disabled by default as some browsers like safari
+		   sometimes throw errors when a ajax request is delayed even if the
+		   ajax request worked. */
+
+		/*alert(request);*/
+	},
+	
+	registerHook: function(name, callback) {
+		if(!ISPConfig.registeredHooks[name]) ISPConfig.registeredHooks[name] = new Array();
+		var newindex = ISPConfig.registeredHooks[name].length;
+		ISPConfig.registeredHooks[name][newindex] = callback;
+	},
+	
+	callHook: function(name, params) {
+		if(!ISPConfig.registeredHooks[name]) return;
+		for(var i = 0; i < ISPConfig.registeredHooks[name].length; i++) {
+			var callback = ISPConfig.registeredHooks[name][i];
+			callback(name, params);
+		}
+	},
+	
+	resetFormChanged: function() {
+		ISPConfig.pageFormChanged = false;
+	},
+
+	showLoadIndicator: function() {
+		document.body.style.cursor = 'wait';
+		
+		if(ISPConfig.options.useLoadIndicator == true) {
+			ISPConfig.requestsRunning += 1;
+
+			if(ISPConfig.requestsRunning < 2) {
+				var indicator = $('#ajaxloader');
+				if(indicator.length < 1) {
+					indicator = $('<div id="ajaxloader" style="display: none;"></div>');
+					indicator.appendTo('body');
+				}
+				var parent = $('#content');
+				if(parent.length < 1) return;
+				ISPConfig.indicatorCompleted = false;
+
+				var atx = parent.offset().left + 150; //((parent.outerWidth(true) - indicator.outerWidth(true)) / 2);
+				var aty = parent.offset().top + 150;
+				indicator.css( {'left': atx, 'top': aty } ).fadeIn('fast', function() {
+					// check if loader should be hidden immediately
+					ISPConfig.indicatorCompleted = true;
+					if(ISPConfig.requestsRunning < 1) $(this).fadeOut('fast', function() { $(this).hide();});
+				});
+			}
+		}
+	},
+
+	hideLoadIndicator: function() {
+		document.body.style.cursor = '';
+
+		ISPConfig.requestsRunning -= 1;
+		if(ISPConfig.requestsRunning < 1) {
+			ISPConfig.requestsRunning = 0; // just for the case...
+			if(ISPConfig.indicatorCompleted == true) $('#ajaxloader').fadeOut('fast', function() { $('#ajaxloader').hide(); } );
+		}
+	},
+
+	onAfterSideNavLoaded: function() {
+		if(ISPConfig.options.useComboBox == true) {
+			$('#sidebar').find("select:not(.chosen-select)").select2({
+				placeholder: '',
+				width: 'element',
+				selectOnBlur: true,
+				allowClear: true,
+			});
+		}
+	},
+
+	onAfterContentLoad: function(url, data) {
+		if(!data) data = '';
+		else data = '&' + data;
+		
+		if(ISPConfig.options.useComboBox == true) {
+			$('#pageContent').find("select:not(.chosen-select)").select2({
+				placeholder: '',
+				width: 'element',
+				selectOnBlur: true,
+				allowClear: true,
+				formatResult: function(o) {
+					if(o.id && $(o.element).parent().hasClass('flags')) return '<span class="flags flag-' + o.id.toLowerCase() + '">' + o.text + '</span>';
+					else return o.text;
+				},
+				formatSelection: function(o) {
+					if(o.id && $(o.element).parent().hasClass('flags')) return '<span class="flags flag-' + o.id.toLowerCase() + '">' + o.text + '</span>';
+					else return o.text;
+				}
+			}).on('change', function(e) {
+				if ($("#pageForm .table #Filter").length > 0) {
+					$("#pageForm .table #Filter").trigger('click');
+				}
+			});
+		}
+		
+		ISPConfig.callHook('onAfterContentLoad', {'url': url, 'data': data });
+	},
+
+	/* THIS ONE SHOULD BE REMOVED AFTER CREATING THE STATIC LOGIN PAGE!!! */
+	submitLoginForm: function(formname) {
+		//* Validate form. TODO: username and password with strip();
+		var frm = document.getElementById(formname);
+		var userNameObj = frm.username;
+		if(userNameObj.value == ''){
+			userNameObj.focus();
+			return;
+		}
+		var passwordObj = frm.passwort;
+		if(passwordObj.value == ''){
+			passwordObj.focus();
+			return;
+		}
+
+		$('#dummy_username').val(userNameObj.value);
+		$('#dummy_passwort').val(passwordObj.value);
+		$('#dummy_login_form').submit();
+
+		var submitFormObj = $.ajax({
+			type: "POST",
+			url: "content.php",
+			data: $('#'+formname).serialize(),
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+					var parts = jqXHR.responseText.split(':');
+					ISPConfig.loadContent(parts[1]);
+				} else if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
+					// Go to the login page
+					document.location.href = 'index.php';
+				} else {
+					$('#pageContent').html(jqXHR.responseText);
+					ISPConfig.onAfterContentLoad('content.php', $('#'+formname).serialize());
+					ISPConfig.pageFormChanged = false;
+				}
+				ISPConfig.loadMenus();
+				ISPConfig.hideLoadIndicator();
+			},
+			error: function() {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful.110');
+			}
+		});
+	},
+
+	submitForm: function(formname, target, confirmation) {
+		var successMessage = arguments[3];
+		if(!confirmation) confirmation = false;
+		
+		if(!confirmation || window.confirm(confirmation)) {
+			var submitFormObj = $.ajax({
+				type: "POST",
+				url: target,
+				data: $('#'+formname).serialize(),
+				dataType: "html",
+				beforeSend: function() {
+					ISPConfig.showLoadIndicator();
+				},
+				success: function(data, textStatus, jqXHR) {
+					if(successMessage) alert(successMessage);
+					if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+						var parts = jqXHR.responseText.split(':');
+						ISPConfig.loadContent(parts[1]);
+					} else {
+						$('#pageContent').html(jqXHR.responseText);
+						ISPConfig.onAfterContentLoad(target, $('#'+formname).serialize());
+						ISPConfig.pageFormChanged = false;
+					}
+					ISPConfig.hideLoadIndicator();
+				},
+				error: function(jqXHR, textStatus, errorThrown) {
+					ISPConfig.hideLoadIndicator();
+					var parts = jqXHR.responseText.split(':');
+					ISPConfig.reportError('Ajax Request was not successful. 111');
+				}
+			});
+		}
+	},
+
+	submitUploadForm: function(formname, target) {
+		var handleResponse = function(loadedFrame) {
+			var response, responseStr = loadedFrame.contentWindow.document.body.innerHTML;
+
+			try {
+				response = JSON.parse(responseStr);
+			} catch(e) {
+				response = responseStr;
+			}
+			var msg = '';
+			var okmsg = $('#OKMsg',response).html();
+			if(okmsg){
+				msg = '<div id="OKMsg">'+okmsg+'</div>';
+			}
+			var errormsg = $('#errorMsg',response).html();
+			if(errormsg){
+				msg = msg+'<div id="errorMsg">'+errormsg+'</div>';
+			}
+			return msg;
+
+		};
+
+		var frame_id = 'ajaxUploader-iframe-' + Math.round(new Date().getTime() / 1000);
+		$('body').after('<iframe width="0" height="0" style="display:none;" name="'+frame_id+'" id="'+frame_id+'"/>');
+		$('input[type="file"]').closest("form").attr({target: frame_id, action: target}).submit();
+		$('#'+frame_id).load(function() {
+			var msg = handleResponse(this);
+			$('#errorMsg').remove();
+			$('#OKMsg').remove();
+			$('input[name="id"]').before(msg);
+			$(this).remove();
+		  });
+	},
+
+	capp: function(module, redirect) {
+		var submitFormObj = $.ajax({
+			type: "GET",
+			url: "capp.php",
+			data: "mod="+module+((redirect != undefined) ? '&redirect='+redirect : ''),
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				if(jqXHR.responseText != '') {
+					if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+						var parts = jqXHR.responseText.split(':');
+						ISPConfig.loadContent(parts[1]);
+					} else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
+						var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
+						document.location.href = newUrl;
+					} else {
+						//alert(jqXHR.responseText);
+					}
+				}
+				ISPConfig.loadMenus();
+				ISPConfig.hideLoadIndicator();
+			},
+			error: function() {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful.'+module);
+			}
+		});
+	},
+	
+	loadContent: function(pagename) {
+		var params = arguments[1];
+		var pageContentObject2 = $.ajax({
+			type: "GET",
+			url: pagename,
+			data: (params ? params : null),
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+					var parts = jqXHR.responseText.split(':');
+					ISPConfig.loadContent(parts[1]);
+				} else if (jqXHR.responseText.indexOf('URL_REDIRECT:') > -1) {
+					var newUrl= jqXHR.responseText.substr(jqXHR.responseText.indexOf('URL_REDIRECT:') + "URL_REDIRECT:".length);
+					document.location.href = newUrl;
+				} else {
+					//document.getElementById('pageContent').innerHTML = jqXHR.responseText;
+					//var reponse = $(jqXHR.responseText);
+					//var reponseScript = reponse.filter("script");
+					//$.each(reponseScript, function(idx, val) { eval(val.text); } );
+
+					$('#pageContent').html(jqXHR.responseText);
+					ISPConfig.onAfterContentLoad(pagename, (params ? params : null));
+					ISPConfig.pageFormChanged = false;
+				}
+				ISPConfig.hideLoadIndicator();
+			},
+			error: function() {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful. 113');
+			}
+		});
+	},
+
+	loadContentRefresh: function(pagename) {
+		if($('#refreshinterval').val() > 0) {
+			var pageContentObject2 = $.ajax({
+				type: "GET",
+				url: pagename,
+				data: "refresh="+document.getElementById('refreshinterval').value,
+				dataType: "html",
+				beforeSend: function() {
+					ISPConfig.showLoadIndicator();
+				},
+				success: function(data, textStatus, jqXHR) {
+					ISPConfig.hideLoadIndicator();
+					$('#pageContent').html(jqXHR.responseText);
+					ISPConfig.onAfterContentLoad(pagename, "refresh="+document.getElementById('refreshinterval').value);
+					ISPConfig.pageFormChanged = false;
+				},
+				error: function() {
+					ISPConfig.hideLoadIndicator();
+					ISPConfig.reportError('Ajax Request was not successful.'+pagename);
+				}
+			});
+			setTimeout( "ISPConfig.loadContentRefresh('"+pagename+"&refresh="+document.getElementById('refreshinterval').value+"')", document.getElementById('refreshinterval').value*1000*60 );
+		}
+	},
+
+	loadInitContent: function() {
+		var pageContentObject = $.ajax({
+			type: "GET",
+			url: "content.php",
+			data: "s_mod=login&s_pg=index",
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				if(jqXHR.responseText.indexOf('HEADER_REDIRECT:') > -1) {
+					var parts = jqXHR.responseText.split(":");
+					ISPConfig.loadContent(parts[1]);
+				} else {
+					$('#pageContent').html(jqXHR.responseText);
+					ISPConfig.onAfterContentLoad('content.php', "s_mod=login&s_pg=index");
+					ISPConfig.pageFormChanged = false;
+				}
+				ISPConfig.hideLoadIndicator();
+			},
+			error: function() {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful. 114');
+			}
+		});
+		
+		ISPConfig.loadMenus();
+		ISPConfig.keepalive();
+		setTimeout(function() {
+			try {
+				$('form#pageForm').find('input[name="username"]').focus();
+			} catch (e) {
+			
+			}
+		}, 1000);
+	},
+	
+	loadMenus: function() {
+		var sideNavObject = $.ajax({
+			type: "GET",
+			url: "nav.php",
+			data: "nav=side",
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				ISPConfig.hideLoadIndicator();
+				$('#sidebar').html(jqXHR.responseText);
+				ISPConfig.onAfterSideNavLoaded();
+				ISPConfig.loadPushyMenu();
+			},
+			error: function() {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful. 115');
+			}
+		});
+
+		var topNavObject = $.ajax({
+			type: "GET",
+			url: "nav.php",
+			data: "nav=top",
+			dataType: "html",
+			beforeSend: function() {
+				ISPConfig.showLoadIndicator();
+			},
+			success: function(data, textStatus, jqXHR) {
+				ISPConfig.hideLoadIndicator();
+				$('#topnav-container').html(jqXHR.responseText);
+				ISPConfig.loadPushyMenu();
+			},
+			error: function(o) {
+				ISPConfig.hideLoadIndicator();
+				ISPConfig.reportError('Ajax Request was not successful. 116');
+			}
+		});
+	},
+
+	changeTab: function(tab, target, force) {
+		if(ISPConfig.requestsRunning > 0) return false;
+	
+		document.pageForm.next_tab.value = tab;
+
+		var idel = $('form#pageForm').find('[name="id"]');
+		var id = null;
+		if(idel.length > 0) id = idel.val();
+		if(ISPConfig.tabChangeDiscard == 'y' && !force) {
+			if((idel.length < 1 || id) && (ISPConfig.pageFormChanged == false || window.confirm(ISPConfig.tabChangeDiscardTxt))) {
+				var next_tab = tab;
+				if(id) ISPConfig.loadContent(target, {'next_tab': next_tab, 'id': id});
+				else ISPConfig.loadContent(target, {'next_tab': next_tab});
+			} else {
+				return false;
+			}
+		} else {
+			if(id && ISPConfig.tabChangeWarning == 'y' && ISPConfig.pageFormChanged == true) {
+				if(window.confirm(ISPConfig.tabChangeWarningTxt)) {
+					ISPConfig.submitForm('pageForm', target);
+				} else {
+					var next_tab = tab;
+					if(id) ISPConfig.loadContent(target, {'next_tab': next_tab, 'id': id});
+					else ISPConfig.loadContent(target, {'next_tab': next_tab});
+				}
+			} else {
+				ISPConfig.submitForm('pageForm',target);
+			}
+		}
+	},
+
+	confirm_action: function(link, confirmation) {
+		if(window.confirm(confirmation)) {
+			ISPConfig.loadContent(link);
+		}
+	},
+
+	loadContentInto: function(elementid,pagename) {
+		var pageContentObject2 = $.ajax({
+			type: "GET",
+			url: pagename,
+			dataType: "html",
+			beforeSend: function() {
+			},
+			success: function(data, textStatus, jqXHR) {
+				$('#'+elementid).html(jqXHR.responseText);
+			},
+			error: function() {
+				ISPConfig.reportError('Ajax Request was not successful. 118');
+			}
+		});
+	},
+
+	loadOptionInto: function(elementid,pagename) {
+		var pageContentObject2 = $.ajax({
+			type: "GET",
+			url: pagename,
+			dataType: "html",
+			beforeSend: function() {
+			},
+			success: function(data, textStatus, jqXHR) {
+				var teste = jqXHR.responseText;
+				var elemente = teste.split('#');
+				el=document.getElementById(elementid);
+				el.innerHTML='';
+				for (var i = 0; i < elemente.length; ++i){
+					var foo2 = document.createElement("option");
+					foo2.appendChild(document.createTextNode(elemente[i]));
+					foo2.value=elemente[i];
+					el.appendChild(foo2);
+				}
+			},
+			error: function() {
+				ISPConfig.reportError('Ajax Request was not successful. 119');
+			}
+		});
+	},
+	
+	keepalive: function() {
+		var pageContentObject3 = $.ajax({
+			type: "GET",
+			url: "keepalive.php",
+			dataType: "html",
+			success: function(data, textStatus, jqXHR) {
+				setTimeout( keepalive, 1000000 );
+			},
+			error: function() {
+				ISPConfig.reportError('Session expired. Please login again.');
+			}
+		});
+	},
+	
+	addAdditionalTemplate: function(){
+		var tpl_add = $('#template_additional').val();
+		var addTemplate = $('#tpl_add_select').val().split('|',2);
+		var addTplId = addTemplate[0];
+		var addTplText = addTemplate[1];
+		if(addTplId > 0) {
+			var newVal = tpl_add.split('/');
+			ISPConfig.new_tpl_add_id += 1;
+			var delbtn = $('<a href="#"></a>').attr('class', 'button icons16 icoDelete').click(function(e) {
+				e.preventDefault();
+				ISPConfig.delAdditionalTemplate($(this).parent().attr('rel'));
+			});
+			newVal[newVal.length] = 'n' + ISPConfig.new_tpl_add_id + ':' + addTplId;
+			$('<li>' + addTplText + '</li>').attr('rel', 'n' + new_tpl_add_id).append(delbtn).appendTo('#template_additional_list ul');
+			$('#template_additional').val(newVal.join('/'));
+			alert('additional template ' + addTplText + ' added to customer');
+		} else {
+			alert('no additional template selcted');
+		}
+	},
+
+	delAdditionalTemplate: function(tpl_id) {
+		var tpl_add = $('#template_additional').val();
+		if(tpl_id) {
+			// new style
+			var $el = $('#template_additional_list ul').find('li[rel="' + tpl_id + '"]').eq(0); // only the first
+			var addTplText = $el.text();
+			$el.remove();
+
+			var oldVal = tpl_add.split('/');
+			var newVal = new Array();
+			for(var i = 0; i < oldVal.length; i++) {
+				var tmp = oldVal[i].split(':', 2);
+				if(tmp.length == 2 && tmp[0] == tpl_id) continue;
+				newVal[newVal.length] = oldVal[i];
+			}
+			$('#template_additional').val(newVal.join('/'));
+			alert('additional template ' + addTplText + ' deleted from customer');
+		} else if(tpl_add != '') {
+			// old style
+			var addTemplate = document.getElementById('tpl_add_select').value.split('|',2);
+			var addTplId = addTemplate[0];
+			var addTplText = addTemplate[1];
+
+			$('#template_additional_list ul').find('li:not([rel])').each(function() {
+				var text = $(this).text();
+				if(text == addTplText) {
+					$(this).remove();
+					return false;
+				}
+				return this;
+			});
+
+			var newVal = tpl_add;
+			var repl = new RegExp('(^|\/)' + addTplId + '(\/|$)');
+			newVal = newVal.replace(repl, '');
+			newVal = newVal.replace('//', '/');
+			$('#template_additional').val(newVal);
+			alert('additional template ' + addTplText + ' deleted from customer');
+	  } else {
+		alert('no additional template selcted');
+	  }
+	}
+};
+
+
+$(document).on("change", function(event) {
+	var elName = event.target.localName;
+	if ($("#pageForm .table #Filter").length > 0 && elName == 'select') {
+		event.preventDefault();
+		$("#pageForm .table #Filter").trigger('click');
+	}
+	if(elName == 'select' || elName == 'input' || elName == 'textarea') {
+		if($(event.target).hasClass('no-page-form-change') == false) {
+			// set marker that something was changed
+			ISPConfig.pageFormChanged = true;
+		}
+	}
+});
+
+$(document).on('click', 'a[data-load-content],button[data-load-content]', function(e) {
+	e.preventDefault();
+	var content_to_load = $(this).attr('data-load-content');
+	if(!content_to_load) return this;
+	
+	ISPConfig.loadContent(content_to_load);
+});
+
+$(document).on('click', 'a[data-capp],button[data-capp]', function(e) {
+	e.preventDefault();
+	var content_to_load = $(this).attr('data-capp');
+	if(!content_to_load) return this;
+	
+	ISPConfig.capp(content_to_load);
+});
+
+$(document).on('click', 'a[data-submit-form],button[data-submit-form]', function(e) {
+	e.preventDefault();
+	
+	var $el = $(this);
+	var act = $el.attr('data-form-action');
+	var form = $el.attr('data-submit-form');
+	
+	if($el.attr('data-form-upload') == 'true') ISPConfig.submitUploadForm(form, act);
+	else ISPConfig.submitForm(form, act);
+});
+
+$(document).bind("keypress", function(event) {
+	//Use $ submit with keypress Enter in panel filterbar
+	if (event.which == '13' && $("#pageForm .table #Filter").length > 0 && $(event.target).hasClass('ui-autocomplete-input') == false ) {
+		event.preventDefault();
+		$("#pageForm .table #Filter").trigger('click');
+	}
+	//Use $ submit with keypress Enter in forms
+	if (event.which == '13' && $(".pnl_formsarea button.positive").length > 0 && event.target.localName != 'textarea' && $(event.target).is(':input')) {
+		event.preventDefault();
+		$(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger('click');
+	}
+});
+
+$(document).on('click', 'th[data-column]', function(e) {
+	var $self = $(this);
+	var column = $self.attr('data-column');
+	if(!column) return this;
+	
+	if($("#pageForm .table #Filter").length > 0 && $self.attr('data-sortable') != 'false') {
+		var $el = $('#Filter');
+		var act = $el.attr('data-form-action');
+		var form = $el.attr('data-submit-form');
+		
+		act = act + '?orderby=' + column;
+		ISPConfig.submitForm(form, act);
+	}
+});
+
+$(document).on("click", ".addPlaceholder", function(){
+	var placeholderText = $(this).text();
+	var template = $(this).siblings(':input');
+	template.insertAtCaret(placeholderText);
+});
+
+$(document).on("click", ".addPlaceholderContent", function(){
+	var placeholderContentText = $(this).find('.addPlaceholderContent').text();
+	var template2 = $(this).siblings(':input');
+	template2.insertAtCaret(placeholderContentText);
+});
+
 $(document).on('ready', function () {
-  // Animierter Ladefortschritt
-  $('.progress .progress-bar').css('width', function () {
-    return $(this).attr('aria-valuenow') + '%';
-  });
+	$.fn.extend({
+		insertAtCaret: function(myValue){
+			return this.each(function(i) {
+				if (document.selection) {
+					//For browsers like Internet Explorer
+					this.focus();
+					sel = document.selection.createRange();
+					sel.text = myValue;
+					this.focus();
+				} else if (this.selectionStart || this.selectionStart == '0') {
+					//For browsers like Firefox and Webkit based
+					var startPos = this.selectionStart;
+					var endPos = this.selectionEnd;
+					var scrollTop = this.scrollTop;
+					this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
+					this.focus();
+					this.selectionStart = startPos + myValue.length;
+					this.selectionEnd = startPos + myValue.length;
+					this.scrollTop = scrollTop;
+				} else {
+					this.value += myValue;
+					this.focus();
+				}
+			})
+		}
+	});
+	
+	// Animierter Ladefortschritt
+	$('.progress .progress-bar').css('width', function () {
+		return $(this).attr('aria-valuenow') + '%';
+	});
+	
+	ISPConfig.loadInitContent();
+
+	$('#searchform').submit(function(e) {
+		e.preventDefault();
+	});
+	
+	$("#pageForm").submit(function(e){
+		//Prevent form submit: e.preventDefault() in lists
+		if ($("#pageForm .table #Filter").length > 0) {
+			e.preventDefault();
+		}
+	});
+	
+	$('#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">',
+		resultBoxPosition: ''
+	});
 });
diff --git a/interface/web/themes/default/assets/javascripts/ispconfig.min.js b/interface/web/themes/default/assets/javascripts/ispconfig.min.js
index d1d3d9c..bc046ba 100644
--- a/interface/web/themes/default/assets/javascripts/ispconfig.min.js
+++ b/interface/web/themes/default/assets/javascripts/ispconfig.min.js
@@ -1 +1 @@
-$(document).on("ready",function(){$(".progress .progress-bar").css("width",function(){return $(this).attr("aria-valuenow")+"%"})});
\ No newline at end of file
+var ISPConfig={pageFormChanged:false,tabChangeWarningTxt:"",tabChangeDiscardTxt:"",tabChangeWarning:false,tabChangeDiscard:false,requestsRunning:0,indicatorCompleted:false,registeredHooks:new Array(),new_tpl_add_id:0,options:{useLoadIndicator:false,useComboBox:false,},setOption:function(a,b){ISPConfig.options[a]=b},setOptions:function(a){$.extend(ISPConfig.options,a)},reportError:function(a){},registerHook:function(a,c){if(!ISPConfig.registeredHooks[a]){ISPConfig.registeredHooks[a]=new Array()}var b=ISPConfig.registeredHooks[a].length;ISPConfig.registeredHooks[a][b]=c},callHook:function(a,c){if(!ISPConfig.registeredHooks[a]){return}for(var b=0;b<ISPConfig.registeredHooks[a].length;b++){var d=ISPConfig.registeredHooks[a][b];d(a,c)}},resetFormChanged:function(){ISPConfig.pageFormChanged=false},showLoadIndicator:function(){document.body.style.cursor="wait";if(ISPConfig.options.useLoadIndicator==true){ISPConfig.requestsRunning+=1;if(ISPConfig.requestsRunning<2){var a=$("#ajaxloader");if(a.length<1){a=$('<div id="ajaxloader" style="display: none;"></div>');a.appendTo("body")}var b=$("#content");if(b.length<1){return}ISPConfig.indicatorCompleted=false;var d=b.offset().left+150;var c=b.offset().top+150;a.css({left:d,top:c}).fadeIn("fast",function(){ISPConfig.indicatorCompleted=true;if(ISPConfig.requestsRunning<1){$(this).fadeOut("fast",function(){$(this).hide()})}})}}},hideLoadIndicator:function(){document.body.style.cursor="";ISPConfig.requestsRunning-=1;if(ISPConfig.requestsRunning<1){ISPConfig.requestsRunning=0;if(ISPConfig.indicatorCompleted==true){$("#ajaxloader").fadeOut("fast",function(){$("#ajaxloader").hide()})}}},onAfterSideNavLoaded:function(){if(ISPConfig.options.useComboBox==true){$("#sidebar").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:true,allowClear:true,})}},onAfterContentLoad:function(a,b){if(!b){b=""}else{b="&"+b}if(ISPConfig.options.useComboBox==true){$("#pageContent").find("select:not(.chosen-select)").select2({placeholder:"",width:"element",selectOnBlur:true,allowClear:true,formatResult:function(c){if(c.id&&$(c.element).parent().hasClass("flags")){return'<span class="flags flag-'+c.id.toLowerCase()+'">'+c.text+"</span>"}else{return c.text}},formatSelection:function(c){if(c.id&&$(c.element).parent().hasClass("flags")){return'<span class="flags flag-'+c.id.toLowerCase()+'">'+c.text+"</span>"}else{return c.text}}}).on("change",function(c){if($("#pageForm .table #Filter").length>0){$("#pageForm .table #Filter").trigger("click")}})}ISPConfig.callHook("onAfterContentLoad",{url:a,data:b})},submitLoginForm:function(d){var c=document.getElementById(d);var b=c.username;if(b.value==""){b.focus();return}var e=c.passwort;if(e.value==""){e.focus();return}$("#dummy_username").val(b.value);$("#dummy_passwort").val(e.value);$("#dummy_login_form").submit();var a=$.ajax({type:"POST",url:"content.php",data:$("#"+d).serialize(),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(g,i,f){if(f.responseText.indexOf("HEADER_REDIRECT:")>-1){var h=f.responseText.split(":");ISPConfig.loadContent(h[1])}else{if(f.responseText.indexOf("LOGIN_REDIRECT:")>-1){document.location.href="index.php"}else{$("#pageContent").html(f.responseText);ISPConfig.onAfterContentLoad("content.php",$("#"+d).serialize());ISPConfig.pageFormChanged=false}}ISPConfig.loadMenus();ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful.110")}})},submitForm:function(d,e,c){var b=arguments[3];if(!c){c=false}if(!c||window.confirm(c)){var a=$.ajax({type:"POST",url:e,data:$("#"+d).serialize(),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(g,i,f){if(b){alert(b)}if(f.responseText.indexOf("HEADER_REDIRECT:")>-1){var h=f.responseText.split(":");ISPConfig.loadContent(h[1])}else{$("#pageContent").html(f.responseText);ISPConfig.onAfterContentLoad(e,$("#"+d).serialize());ISPConfig.pageFormChanged=false}ISPConfig.hideLoadIndicator()},error:function(f,i,h){ISPConfig.hideLoadIndicator();var g=f.responseText.split(":");ISPConfig.reportError("Ajax Request was not successful. 111")}})}},submitUploadForm:function(c,d){var b=function(l){var g,h=l.contentWindow.document.body.innerHTML;try{g=JSON.parse(h)}catch(i){g=h}var j="";var f=$("#OKMsg",g).html();if(f){j='<div id="OKMsg">'+f+"</div>"}var k=$("#errorMsg",g).html();if(k){j=j+'<div id="errorMsg">'+k+"</div>"}return j};var a="ajaxUploader-iframe-"+Math.round(new Date().getTime()/1000);$("body").after('<iframe width="0" height="0" style="display:none;" name="'+a+'" id="'+a+'"/>');$('input[type="file"]').closest("form").attr({target:a,action:d}).submit();$("#"+a).load(function(){var e=b(this);$("#errorMsg").remove();$("#OKMsg").remove();$('input[name="id"]').before(e);$(this).remove()})},capp:function(b,c){var a=$.ajax({type:"GET",url:"capp.php",data:"mod="+b+((c!=undefined)?"&redirect="+c:""),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(e,h,d){if(d.responseText!=""){if(d.responseText.indexOf("HEADER_REDIRECT:")>-1){var g=d.responseText.split(":");ISPConfig.loadContent(g[1])}else{if(d.responseText.indexOf("URL_REDIRECT:")>-1){var f=d.responseText.substr(d.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=f}else{}}}ISPConfig.loadMenus();ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful."+b)}})},loadContent:function(b){var c=arguments[1];var a=$.ajax({type:"GET",url:b,data:(c?c:null),dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(e,h,d){if(d.responseText.indexOf("HEADER_REDIRECT:")>-1){var g=d.responseText.split(":");ISPConfig.loadContent(g[1])}else{if(d.responseText.indexOf("URL_REDIRECT:")>-1){var f=d.responseText.substr(d.responseText.indexOf("URL_REDIRECT:")+"URL_REDIRECT:".length);document.location.href=f}else{$("#pageContent").html(d.responseText);ISPConfig.onAfterContentLoad(b,(c?c:null));ISPConfig.pageFormChanged=false}}ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful. 113")}})},loadContentRefresh:function(b){if($("#refreshinterval").val()>0){var a=$.ajax({type:"GET",url:b,data:"refresh="+document.getElementById("refreshinterval").value,dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(d,e,c){ISPConfig.hideLoadIndicator();$("#pageContent").html(c.responseText);ISPConfig.onAfterContentLoad(b,"refresh="+document.getElementById("refreshinterval").value);ISPConfig.pageFormChanged=false},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful."+b)}});setTimeout("ISPConfig.loadContentRefresh('"+b+"&refresh="+document.getElementById("refreshinterval").value+"')",document.getElementById("refreshinterval").value*1000*60)}},loadInitContent:function(){var a=$.ajax({type:"GET",url:"content.php",data:"s_mod=login&s_pg=index",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(c,e,b){if(b.responseText.indexOf("HEADER_REDIRECT:")>-1){var d=b.responseText.split(":");ISPConfig.loadContent(d[1])}else{$("#pageContent").html(b.responseText);ISPConfig.onAfterContentLoad("content.php","s_mod=login&s_pg=index");ISPConfig.pageFormChanged=false}ISPConfig.hideLoadIndicator()},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful. 114")}});ISPConfig.loadMenus();ISPConfig.keepalive();setTimeout(function(){try{$("form#pageForm").find('input[name="username"]').focus()}catch(b){}},1000)},loadMenus:function(){var b=$.ajax({type:"GET",url:"nav.php",data:"nav=side",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(d,e,c){ISPConfig.hideLoadIndicator();$("#sidebar").html(c.responseText);ISPConfig.onAfterSideNavLoaded();ISPConfig.loadPushyMenu()},error:function(){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful. 115")}});var a=$.ajax({type:"GET",url:"nav.php",data:"nav=top",dataType:"html",beforeSend:function(){ISPConfig.showLoadIndicator()},success:function(d,e,c){ISPConfig.hideLoadIndicator();$("#topnav-container").html(c.responseText);ISPConfig.loadPushyMenu()},error:function(c){ISPConfig.hideLoadIndicator();ISPConfig.reportError("Ajax Request was not successful. 116")}})},changeTab:function(c,e,d){if(ISPConfig.requestsRunning>0){return false}document.pageForm.next_tab.value=c;var b=$("form#pageForm").find('[name="id"]');var f=null;if(b.length>0){f=b.val()}if(ISPConfig.tabChangeDiscard=="y"&&!d){if((b.length<1||f)&&(ISPConfig.pageFormChanged==false||window.confirm(ISPConfig.tabChangeDiscardTxt))){var a=c;if(f){ISPConfig.loadContent(e,{next_tab:a,id:f})}else{ISPConfig.loadContent(e,{next_tab:a})}}else{return false}}else{if(f&&ISPConfig.tabChangeWarning=="y"&&ISPConfig.pageFormChanged==true){if(window.confirm(ISPConfig.tabChangeWarningTxt)){ISPConfig.submitForm("pageForm",e)}else{var a=c;if(f){ISPConfig.loadContent(e,{next_tab:a,id:f})}else{ISPConfig.loadContent(e,{next_tab:a})}}}else{ISPConfig.submitForm("pageForm",e)}}},confirm_action:function(b,a){if(window.confirm(a)){ISPConfig.loadContent(b)}},loadContentInto:function(b,c){var a=$.ajax({type:"GET",url:c,dataType:"html",beforeSend:function(){},success:function(e,f,d){$("#"+b).html(d.responseText)},error:function(){ISPConfig.reportError("Ajax Request was not successful. 118")}})},loadOptionInto:function(b,c){var a=$.ajax({type:"GET",url:c,dataType:"html",beforeSend:function(){},success:function(g,k,f){var h=f.responseText;var j=h.split("#");el=document.getElementById(b);el.innerHTML="";for(var e=0;e<j.length;++e){var d=document.createElement("option");d.appendChild(document.createTextNode(j[e]));d.value=j[e];el.appendChild(d)}},error:function(){ISPConfig.reportError("Ajax Request was not successful. 119")}})},keepalive:function(){var a=$.ajax({type:"GET",url:"keepalive.php",dataType:"html",success:function(c,d,b){setTimeout(keepalive,1000000)},error:function(){ISPConfig.reportError("Session expired. Please login again.")}})},addAdditionalTemplate:function(){var e=$("#template_additional").val();var a=$("#tpl_add_select").val().split("|",2);var d=a[0];var f=a[1];if(d>0){var c=e.split("/");ISPConfig.new_tpl_add_id+=1;var b=$('<a href="#"></a>').attr("class","button icons16 icoDelete").click(function(g){g.preventDefault();ISPConfig.delAdditionalTemplate($(this).parent().attr("rel"))});c[c.length]="n"+ISPConfig.new_tpl_add_id+":"+d;$("<li>"+f+"</li>").attr("rel","n"+new_tpl_add_id).append(b).appendTo("#template_additional_list ul");$("#template_additional").val(c.join("/"));alert("additional template "+f+" added to customer")}else{alert("no additional template selcted")}},delAdditionalTemplate:function(d){var a=$("#template_additional").val();if(d){var l=$("#template_additional_list ul").find('li[rel="'+d+'"]').eq(0);var k=l.text();l.remove();var j=a.split("/");var b=new Array();for(var e=0;e<j.length;e++){var f=j[e].split(":",2);if(f.length==2&&f[0]==d){continue}b[b.length]=j[e]}$("#template_additional").val(b.join("/"));alert("additional template "+k+" deleted from customer")}else{if(a!=""){var c=document.getElementById("tpl_add_select").value.split("|",2);var h=c[0];var k=c[1];$("#template_additional_list ul").find("li:not([rel])").each(function(){var i=$(this).text();if(i==k){$(this).remove();return false}return this});var b=a;var g=new RegExp("(^|/)"+h+"(/|$)");b=b.replace(g,"");b=b.replace("//","/");$("#template_additional").val(b);alert("additional template "+k+" deleted from customer")}else{alert("no additional template selcted")}}}};$(document).on("change",function(a){var b=a.target.localName;if($("#pageForm .table #Filter").length>0&&b=="select"){a.preventDefault();$("#pageForm .table #Filter").trigger("click")}if(b=="select"||b=="input"||b=="textarea"){if($(a.target).hasClass("no-page-form-change")==false){ISPConfig.pageFormChanged=true}}});$(document).on("click","a[data-load-content],button[data-load-content]",function(b){b.preventDefault();var a=$(this).attr("data-load-content");if(!a){return this}ISPConfig.loadContent(a)});$(document).on("click","a[data-capp],button[data-capp]",function(b){b.preventDefault();var a=$(this).attr("data-capp");if(!a){return this}ISPConfig.capp(a)});$(document).bind("keypress",function(a){if(a.which=="13"&&$("#pageForm .table #Filter").length>0&&$(a.target).hasClass("ui-autocomplete-input")==false){a.preventDefault();$("#pageForm .table #Filter").trigger("click")}if(a.which=="13"&&$(".pnl_formsarea button.positive").length>0&&a.target.localName!="textarea"&&$(a.target).is(":input")){a.preventDefault();$(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger("click")}});$(document).on("click","th[data-column]",function(f){var g=$(this);var c=g.attr("data-column");if(!c){return this}if($("#pageForm .table #Filter").length>0&&g.attr("data-sortable")!="false"){var b=$("#Filter");var a=b.attr("data-form-action");var d=b.attr("data-submit-form");a=a+"?orderby="+c;ISPConfig.submitForm(d,a)}});$(document).on("click",".addPlaceholder",function(){var a=$(this).text();var b=$(this).siblings(":input");b.insertAtCaret(a)});$(document).on("click",".addPlaceholderContent",function(){var b=$(this).find(".addPlaceholderContent").text();var a=$(this).siblings(":input");a.insertAtCaret(b)});$(document).on("ready",function(){$.fn.extend({insertAtCaret:function(a){return this.each(function(d){if(document.selection){this.focus();sel=document.selection.createRange();sel.text=a;this.focus()}else{if(this.selectionStart||this.selectionStart=="0"){var c=this.selectionStart;var b=this.selectionEnd;var e=this.scrollTop;this.value=this.value.substring(0,c)+a+this.value.substring(b,this.value.length);this.focus();this.selectionStart=c+a.length;this.selectionEnd=c+a.length;this.scrollTop=e}else{this.value+=a;this.focus()}}})}});$(".progress .progress-bar").css("width",function(){return $(this).attr("aria-valuenow")+"%"});ISPConfig.loadInitContent();$("#searchform").submit(function(a){a.preventDefault()});$("#pageForm").submit(function(a){if($("#pageForm .table #Filter").length>0){a.preventDefault()}});$("#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">',resultBoxPosition:""})});
\ No newline at end of file
diff --git a/interface/web/themes/default/assets/javascripts/responsive.js b/interface/web/themes/default/assets/javascripts/responsive.js
index abdf1ec..49d8814 100644
--- a/interface/web/themes/default/assets/javascripts/responsive.js
+++ b/interface/web/themes/default/assets/javascripts/responsive.js
@@ -1,4 +1,4 @@
-function loadPushyMenu() {
+ISPConfig.loadPushyMenu = function() {
   // Off-Canvas Menü
   var $mainNavigation = $('#main-navigation');
   var $subNavigation = $('#sidebar');
diff --git a/interface/web/themes/default/assets/javascripts/responsive.min.js b/interface/web/themes/default/assets/javascripts/responsive.min.js
index a984d7f..999ed60 100644
--- a/interface/web/themes/default/assets/javascripts/responsive.min.js
+++ b/interface/web/themes/default/assets/javascripts/responsive.min.js
@@ -1 +1 @@
-function loadPushyMenu(){var a=$("#main-navigation");var d=$("#sidebar");var b=$("nav.pushy");b.html("");$("<ul />").appendTo(b);var c=false;$(a).find("a").each(function(){var e=$(this);var i=e.hasClass("active")?' class="active"':"";var g=i!=""?true:false;var h=e.attr("data-capp");if(h){i+=' data-capp="'+h+'"'}h=e.attr("data-load-content");if(h){i+=' data-load-content="'+h+'"'}var f=$('<li><a href="'+e.attr("href")+'"'+i+'><i class="icon '+e.data("icon-class")+'"></i>'+e.text()+"</a></li>");if(g!=""){c=f}b.find("ul").append(f)});if(!c){c=b}$('<ul class="subnavi" />').appendTo(c);$(d).find("a").each(function(){var e=$(this);var f="";var g=e.attr("data-capp");if(g){f+=' data-capp="'+g+'"'}g=e.attr("data-load-content");if(g){f+=' data-load-content="'+g+'"'}g=e.hasClass("subnav-header");if(g){f+=' class="subnav-header"'}b.find("ul.subnavi").append($('<li><a href="'+e.attr("href")+'"'+f+">"+e.text()+"</a></li>"))})};
\ No newline at end of file
+ISPConfig.loadPushyMenu=function(){var a=$("#main-navigation");var d=$("#sidebar");var b=$("nav.pushy");b.html("");$("<ul />").appendTo(b);var c=false;$(a).find("a").each(function(){var e=$(this);var i=e.hasClass("active")?' class="active"':"";var g=i!=""?true:false;var h=e.attr("data-capp");if(h){i+=' data-capp="'+h+'"'}h=e.attr("data-load-content");if(h){i+=' data-load-content="'+h+'"'}var f=$('<li><a href="'+e.attr("href")+'"'+i+'><i class="icon '+e.data("icon-class")+'"></i>'+e.text()+"</a></li>");if(g!=""){c=f}b.find("ul").append(f)});if(!c){c=b}$('<ul class="subnavi" />').appendTo(c);$(d).find("a").each(function(){var e=$(this);var f="";var g=e.attr("data-capp");if(g){f+=' data-capp="'+g+'"'}g=e.attr("data-load-content");if(g){f+=' data-load-content="'+g+'"'}g=e.hasClass("subnav-header");if(g){f+=' class="subnav-header"'}b.find("ul.subnavi").append($('<li><a href="'+e.attr("href")+'"'+f+">"+e.text()+"</a></li>"))})};
\ No newline at end of file
diff --git a/interface/web/themes/default/templates/main.tpl.htm b/interface/web/themes/default/templates/main.tpl.htm
index 61aa5c3..7117bd9 100644
--- a/interface/web/themes/default/templates/main.tpl.htm
+++ b/interface/web/themes/default/templates/main.tpl.htm
@@ -94,94 +94,15 @@
   </tmpl_loop>
   <script>
   <!--
-	$(document).ready(function() {
-		loadInitContent();
-	});
-	
-	$('#searchform').submit(function(e) {
-		e.preventDefault();
-	});
-	
-	$("#pageForm").submit(function(e){
-		//Prevent form submit: e.preventDefault() in lists
-		if ($("#pageForm .table #Filter").length > 0) {
-			e.preventDefault();
-		}
-	});
-	
-	$('#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">',
-		resultBoxPosition: ''
-	});
-	
 	//$('.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">';
+	ISPConfig.tabChangeDiscard = '<tmpl_var name="tabchange_discard_enabled">';
+	ISPConfig.tabChangeWarning = '<tmpl_var name="tabchange_warning_enabled">';
+	ISPConfig.tabChangeWarningTxt = '<tmpl_var name="global_tabchange_warning_txt">';
+	ISPConfig.tabChangeDiscardTxt = '<tmpl_var name="global_tabchange_discard_txt">';
 	
-	$(document).on("change", function(event) {
-		var elName = event.target.localName;
-		if ($("#pageForm .table #Filter").length > 0 && elName == 'select') {
-			event.preventDefault();
-			$("#pageForm .table #Filter").trigger('click');
-		}
-		if(elName == 'select' || elName == 'input' || elName == 'textarea') {
-			if($(event.target).hasClass('no-page-form-change') == false) {
-				// set marker that something was changed
-				pageFormChanged = true;
-			}
-		}
-	});
-	
-	$(document).on('click', 'a[data-load-content],button[data-load-content]', function(e) {
-		e.preventDefault();
-		var content_to_load = $(this).attr('data-load-content');
-		if(!content_to_load) return this;
-		
-		loadContent(content_to_load);
-	});
-
-	$(document).on('click', 'a[data-capp],button[data-capp]', function(e) {
-		e.preventDefault();
-		var content_to_load = $(this).attr('data-capp');
-		if(!content_to_load) return this;
-		
-		capp(content_to_load);
-	});
-
-	$(document).bind("keypress", function(event) {
-		//Use $ submit with keypress Enter in panel filterbar
-		if (event.which == '13' && $("#pageForm .table #Filter").length > 0 && $(event.target).hasClass('ui-autocomplete-input') == false ) {
-			event.preventDefault();
-			$("#pageForm .table #Filter").trigger('click');
-		}
-		//Use $ submit with keypress Enter in forms
-		if (event.which == '13' && $(".pnl_formsarea button.positive").length > 0 && event.target.localName != 'textarea' && $(event.target).is(':input')) {
-			event.preventDefault();
-			$(".pnl_formsarea button.positive:first").not("[disabled='disabled']").trigger('click');
-		}
-	});
-	
-	$(document).on('click', 'th[data-column]', function(e) {
-		var $self = $(this);
-		var column = $self.attr('data-column');
-		if(!column) return this;
-		
-		if($("#pageForm .table #Filter").length > 0 && $self.attr('data-sortable') != 'false') {
-			var $el = $('#Filter');
-			var act = $el.attr('data-form-action');
-			var form = $el.attr('data-submit-form');
-			
-			act = act + '?orderby=' + column;
-			submitForm(form, act);
-		}
-	});
+	<tmpl_if name="use_loadindicator" value="y">ISPConfig.setOption('useLoadIndicator', true);</tmpl_if>
+	<tmpl_if name="use_combobox" value="y">ISPConfig.setOption('useComboBox', true);</tmpl_if>
   //-->
   </script>
 </body>

--
Gitblit v1.9.1