Pascal Dreissen
2016-07-05 d75040c9027195bd6a80ad67aea1eb0a792c5a18
interface/web/themes/default/assets/javascripts/ispconfig.js
@@ -1,6 +1,773 @@
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) {
   },
   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');
            }
         });
      }
      $('input[data-input-element="date"]').datetimepicker({
         'language': 'en', // TODO
         'todayHighlight': true,
         'todayBtn': 'linked',
         'bootcssVer': 3,
         'fontAwesome': true,
         'autoclose': true,
         'minView': 'month'
      });
      $('input[data-input-element="datetime"]').datetimepicker({
         'language': 'en', // TODO
         'todayHighlight': true,
         'todayBtn': 'linked',
         'bootcssVer': 3,
         'fontAwesome': true,
         'autoclose': true
      });
      $('[data-toggle="tooltip"]').tooltip({
      });
      ISPConfig.callHook('onAfterContentLoad', {'url': url, 'data': data });
   },
   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 if (jqXHR.responseText.indexOf('LOGIN_REDIRECT:') > -1) {
                  // Go to the login page
                  document.location.href = '/index.php';
               } 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 $response = $('<div></div>').html(response);
         var msg = '';
         var okmsg = $response.find('#OKMsg').html();
         if(okmsg){
            msg = '<div id="OKMsg">'+okmsg+'</div>';
         }
         var errormsg = $response.find('#errorMsg').html();
         if(errormsg){
            msg = msg+'<div id="errorMsg">'+errormsg+'</div>';
         }
         var csrf_key = $response.find('input[name="_csrf_key"]').val();
         var csrf_id = $response.find('input[name="_csrf_id"]').val();
         msg = msg + '<input type="hidden" name="_csrf_id" value="' + csrf_id + '" /><input type="hidden" name="_csrf_key" value="' + csrf_key + '" />';
         return msg;
      };
      var frame_id = 'ajaxUploader-iframe-' + Math.round(new Date().getTime() / 1000);
      $('body').append('<iframe width="0" height="0" style="display:none;" name="'+frame_id+'" id="'+frame_id+'"/>');
      $('#'+frame_id).load(function() {
         var msg = handleResponse(this);
         $('#errorMsg').remove();
         $('#OKMsg').remove();
         $('input[name="_csrf_key"]').remove();
         $('input[name="_csrf_id"]').remove();
         $('input[name="id"]').before(msg);
         $(this).remove();
        });
      $('input[type="file"]').closest("form").attr({target: frame_id, action: target}).submit();
   },
   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 {
               $('#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 startpage = $('#pageContent').attr('data-startpage');
      if(!startpage) startpage = 'dashboard/dashboard.php';
      var pageContentObject = $.ajax({
         type: "GET",
         url: startpage,
         data: "",
         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('dashboard/dashboard.php', "");
               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) {
         console.log('tab change interrupted, request still running.');
         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,callback) {
      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);
            }
            if (typeof(callback) != 'undefined') {
               callback(elementid,pagename);
            }
         },
         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( function() { ISPConfig.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;
      }
   }
});
var $page = $('html, body');
$(document).on('click', 'a[data-load-content],button[data-load-content]', function(e) {
   e.preventDefault();
   if(ISPConfig.requestsRunning > 0) {
      console.log('preventing click because there is still a request running.');
      return;
   }
   $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
   $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
   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();
   if(ISPConfig.requestsRunning > 0) {
      console.log('preventing click because there is still a request running.');
      return;
   }
   $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
   $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
   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();
   if(ISPConfig.requestsRunning > 0) {
      console.log('preventing click because there is still a request running.');
      return;
   }
   $page.on('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); });
   $page.animate({scrollTop: 0}, 1000, function() { $page.off('scroll mousedown wheel DOMMouseScroll mousewheel keyup touchmove', function() { $page.stop(); }); });
   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' && $(".tab-content button.formbutton-success").length > 0 && event.target.localName != 'textarea' && $(event.target).is(':input')) {
      event.preventDefault();
      $(".tab-content button.formbutton-success").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');
      var dir = $self.attr('data-ordered');
      var separator = '?';
      if(act.indexOf("?") >= 0){
         separator = '&';
      }
      act = act + separator + 'orderby=' + column;
      ISPConfig.submitForm(form, act);
      $(document).ajaxComplete(function() {
         var $self = $('#pageForm .table th[data-column="' + column + '"]');
         $self.parent().children('th[data-column]').removeAttr('data-ordered');
         if(dir && dir == 'asc') $self.attr('data-ordered', 'desc');
         else $self.attr('data-ordered', 'asc');
      });
   }
});
$(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("click", "[data-check-fields] > input[type='checkbox']", function() {
   if($(this).is(':checked')) {
      var flds = $(this).parent().attr('data-check-fields');
      var tmp = flds.split(/,/);
      for(var i = 0; i < tmp.length; i++) {
         var fname = tmp[i];
         $('input[type="checkbox"][name="' + fname + '"]').prop('checked', true);
      }
   }
});
$(document).on("click", "[data-uncheck-fields] > input[type='checkbox']", function() {
   if($(this).is(':checked') == false) {
      var flds = $(this).parent().attr('data-uncheck-fields');
      var tmp = flds.split(/,/);
      for(var i = 0; i < tmp.length; i++) {
         var fname = tmp[i];
         $('input[type="checkbox"][name="' + fname + '"]').prop('checked', false);
      }
   }
});
$(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();
      }
   });
   $.fn.setCursorPosition = function(pos) {
      var self = $(this).get(0);
      if(self.setSelectionRange) {
         self.setSelectionRange(pos, pos);
      } else if(self.createTextRange) {
         var range = self.createTextRange();
         range.collapse(true);
         if(pos < 0) {
            pos = $(this).val().length + pos;
         }
         range.moveEnd('character', pos);
         range.moveStart('character', pos);
         range.select();
      }
   };
   $.fn.getCursorPosition = function() {
      var iCaretPos = 0;
      var self = $(this).get(0);
      if(typeof self.selectionStart === 'number') {
         iCaretPos = self.selectionDirection == 'backward' ? self.selectionStart : self.selectionEnd;
      } else if(document.selection) {
         this.focus();
         var oSel = document.selection.createRange();
         oSel.moveStart('character', -self.value.length);
         iCaretPos = oSel.text.length;
      }
      return iCaretPos;
   };
});