src/pyams_skin/resources/js/myams.js
changeset 256 b1bb02205451
parent 254 08b3bb9121c9
child 262 62ea7078d7c9
--- a/src/pyams_skin/resources/js/myams.js	Thu Dec 28 12:31:46 2017 +0100
+++ b/src/pyams_skin/resources/js/myams.js	Sun Jan 14 14:53:41 2018 +0100
@@ -2,7 +2,7 @@
  * MyAMS
  * « My Application Management Skin »
  *
- * $Tag$ (rev. 1)
+ * $Tag: 0.1.11 $ (rev. 1)
  * A bootstrap based application/administration skin
  *
  * Custom administration and application skin tools
@@ -2975,30 +2975,31 @@
 				if (hints.length > 0) {
 					ams.ajax.check($.fn.tipsy,
 								   ams.baseURL + 'ext/jquery-tipsy' + ams.devext + '.js',
-								   function () {
+								   function() {
 									   ams.getCSS(ams.baseURL + '../css/ext/jquery-tipsy' + ams.devext + '.css',
-												  'jquery-tipsy');
-									   hints.each(function () {
-										   var hint = $(this);
-										   var data = hint.data();
-										   var dataOptions = {
-											   html: data.amsHintHtml,
-											   title: ams.getFunctionByName(data.amsHintTitleGetter) || function () {
-												   var hint = $(this);
-												   var result = hint.attr('original-title') ||
-																hint.attr(data.amsHintTitleAttr || 'title') ||
-																(data.amsHintHtml ? hint.html() : hint.text());
-												   result = result.replace(/\?_="/, '?_=' + new Date().getTime() + '"');
-												   return result;
-											   },
-											   opacity: data.amsHintOpacity || 0.95,
-											   gravity: data.amsHintGravity || 'sw',
-											   offset: data.amsHintOffset || 0
-										   };
-										   var settings = $.extend({}, dataOptions, data.amsHintOptions);
-										   settings = ams.executeFunctionByName(data.amsHintInitCallback, hint, settings) || settings;
-										   var plugin = hint.tipsy(settings);
-										   ams.executeFunctionByName(data.amsHintAfterInitCallback, hint, plugin, settings);
+												  'jquery-tipsy', function() {
+										   hints.each(function () {
+											   var hint = $(this);
+											   var data = hint.data();
+											   var dataOptions = {
+												   html: data.amsHintHtml,
+												   title: ams.getFunctionByName(data.amsHintTitleGetter) || function () {
+													   var hint = $(this);
+													   var result = hint.attr('original-title') ||
+																	hint.attr(data.amsHintTitleAttr || 'title') ||
+																	(data.amsHintHtml ? hint.html() : hint.text());
+													   result = result.replace(/\?_="/, '?_=' + new Date().getTime() + '"');
+													   return result;
+												   },
+												   opacity: data.amsHintOpacity || 0.95,
+												   gravity: data.amsHintGravity || 'sw',
+												   offset: data.amsHintOffset || 0
+											   };
+											   var settings = $.extend({}, dataOptions, data.amsHintOptions);
+											   settings = ams.executeFunctionByName(data.amsHintInitCallback, hint, settings) || settings;
+											   var plugin = hint.tipsy(settings);
+											   ams.executeFunctionByName(data.amsHintAfterInitCallback, hint, plugin, settings);
+										   });
 									   });
 								   });
 				}
@@ -3301,57 +3302,58 @@
 				if (treeviews.length > 0) {
 					ams.ajax.check($.fn.treview,
 								   ams.baseURL + 'ext/bootstrap-treeview' + ams.devext + '.js',
-								   function(first_load) {
-										if (first_load) {
-											ams.getCSS(ams.baseURL + '../css/ext/bootstrap-treeview' + ams.devext + '.css', 'bootstrap-treeview');
-										}
-										treeviews.each(function() {
-											var treeview = $(this);
-											var data = treeview.data();
-											var dataOptions = {
-												data: data.amsTreeviewData,
-												levels: data.amsTreeviewLevels,
-												injectStyle: data.amsTreeviewInjectStyle,
-												expandIcon: data.amsTreeviewExpandIcon || 'fa fa-fw fa-plus-square-o',
-												collapseIcon: data.amsTreeviewCollaspeIcon || 'fa fa-fw fa-minus-square-o',
-												emptyIcon: data.amsTreeviewEmptyIcon || 'fa fa-fw',
-												nodeIcon: data.amsTreeviewNodeIcon,
-												selectedIcon: data.amsTreeviewSelectedIcon,
-												checkedIcon: data.amsTreeviewCheckedIcon || 'fa fa-fw fa-check-square-o',
-												uncheckedIcon: data.amsTreeviewUncheckedIcon || 'fa fa-fw fa-square-o',
-												color: data.amsTreeviewColor,
-												backColor: data.amsTreeviewBackColor,
-												borderColor: data.amsTreeviewBorderColor,
-												onHoverColor: data.amsTreeviewHoverColor,
-												selectedColor: data.amsTreeviewSelectedColor,
-												selectedBackColor: data.amsTreeviewSelectedBackColor,
-												unselectableColor: data.amsTreeviewUnselectableColor || 'rgba(1,1,1,0.25)',
-												unselectableBackColor: data.amsTreeviewUnselectableBackColor || 'rgba(1,1,1,0.25)',
-												enableLinks: data.amsTreeviewEnableLinks,
-												highlightSelected: data.amsTreeviewHighlightSelected,
-												highlightSearchResults: data.amsTreeviewhighlightSearchResults,
-												showBorder: data.amsTreeviewShowBorder,
-												showIcon: data.amsTreeviewShowIcon,
-												showCheckbox: data.amsTreeviewShowCheckbox,
-												showTags: data.amsTreeviewShowTags,
-												toggleUnselectable: data.amsTreeviewToggleUnselectable,
-												multiSelect: data.amsTreeviewMultiSelect,
-												onNodeChecked: ams.getFunctionByName(data.amsTreeviewNodeChecked),
-												onNodeCollapsed: ams.getFunctionByName(data.amsTreeviewNodeCollapsed),
-												onNodeDisabled: ams.getFunctionByName(data.amsTreeviewNodeDisabled),
-												onNodeEnabled: ams.getFunctionByName(data.amsTreeviewNodeEnabled),
-												onNodeExpanded: ams.getFunctionByName(data.amsTreeviewNodeExpanded),
-												onNodeSelected: ams.getFunctionByName(data.amsTreeviewNodeSelected),
-												onNodeUnchecked: ams.getFunctionByName(data.amsTreeviewNodeUnchecked),
-												onNodeUnselected: ams.getFunctionByName(data.amsTreeviewNodeUnselected),
-												onSearchComplete: ams.getFunctionByName(data.amsTreeviewSearchComplete),
-												onSearchCleared: ams.getFunctionByName(data.amsTreeviewSearchCleared)
-											};
-											var settings = $.extend({}, dataOptions, data.amsTreeviewOptions);
-											settings = ams.executeFunctionByName(data.amsTreeviewInitcallback, treeview, settings) || settings;
-											var plugin = treeview.treeview(settings);
-											ams.executeFunctionByName(data.amsTreeviewAfterInitCallback, treeview, plugin, settings);
-										});
+								   function() {
+										ams.getCSS(ams.baseURL + '../css/ext/bootstrap-treeview' + ams.devext + '.css',
+												   'bootstrap-treeview',
+												   function() {
+													   treeviews.each(function () {
+														   var treeview = $(this);
+														   var data = treeview.data();
+														   var dataOptions = {
+															   data: data.amsTreeviewData,
+															   levels: data.amsTreeviewLevels,
+															   injectStyle: data.amsTreeviewInjectStyle,
+															   expandIcon: data.amsTreeviewExpandIcon || 'fa fa-fw fa-plus-square-o',
+															   collapseIcon: data.amsTreeviewCollaspeIcon || 'fa fa-fw fa-minus-square-o',
+															   emptyIcon: data.amsTreeviewEmptyIcon || 'fa fa-fw',
+															   nodeIcon: data.amsTreeviewNodeIcon,
+															   selectedIcon: data.amsTreeviewSelectedIcon,
+															   checkedIcon: data.amsTreeviewCheckedIcon || 'fa fa-fw fa-check-square-o',
+															   uncheckedIcon: data.amsTreeviewUncheckedIcon || 'fa fa-fw fa-square-o',
+															   color: data.amsTreeviewColor,
+															   backColor: data.amsTreeviewBackColor,
+															   borderColor: data.amsTreeviewBorderColor,
+															   onHoverColor: data.amsTreeviewHoverColor,
+															   selectedColor: data.amsTreeviewSelectedColor,
+															   selectedBackColor: data.amsTreeviewSelectedBackColor,
+															   unselectableColor: data.amsTreeviewUnselectableColor || 'rgba(1,1,1,0.25)',
+															   unselectableBackColor: data.amsTreeviewUnselectableBackColor || 'rgba(1,1,1,0.25)',
+															   enableLinks: data.amsTreeviewEnableLinks,
+															   highlightSelected: data.amsTreeviewHighlightSelected,
+															   highlightSearchResults: data.amsTreeviewhighlightSearchResults,
+															   showBorder: data.amsTreeviewShowBorder,
+															   showIcon: data.amsTreeviewShowIcon,
+															   showCheckbox: data.amsTreeviewShowCheckbox,
+															   showTags: data.amsTreeviewShowTags,
+															   toggleUnselectable: data.amsTreeviewToggleUnselectable,
+															   multiSelect: data.amsTreeviewMultiSelect,
+															   onNodeChecked: ams.getFunctionByName(data.amsTreeviewNodeChecked),
+															   onNodeCollapsed: ams.getFunctionByName(data.amsTreeviewNodeCollapsed),
+															   onNodeDisabled: ams.getFunctionByName(data.amsTreeviewNodeDisabled),
+															   onNodeEnabled: ams.getFunctionByName(data.amsTreeviewNodeEnabled),
+															   onNodeExpanded: ams.getFunctionByName(data.amsTreeviewNodeExpanded),
+															   onNodeSelected: ams.getFunctionByName(data.amsTreeviewNodeSelected),
+															   onNodeUnchecked: ams.getFunctionByName(data.amsTreeviewNodeUnchecked),
+															   onNodeUnselected: ams.getFunctionByName(data.amsTreeviewNodeUnselected),
+															   onSearchComplete: ams.getFunctionByName(data.amsTreeviewSearchComplete),
+															   onSearchCleared: ams.getFunctionByName(data.amsTreeviewSearchCleared)
+														   };
+														   var settings = $.extend({}, dataOptions, data.amsTreeviewOptions);
+														   settings = ams.executeFunctionByName(data.amsTreeviewInitcallback, treeview, settings) || settings;
+														   var plugin = treeview.treeview(settings);
+														   ams.executeFunctionByName(data.amsTreeviewAfterInitCallback, treeview, plugin, settings);
+													   });
+												   });
 								   });
 				}
 			},
@@ -3619,26 +3621,29 @@
 								   ams.baseURL + 'ext/jquery-datetimepicker' + ams.devext + '.js',
 								   function(first_load) {
 										if (first_load) {
-											ams.getCSS(ams.baseURL + '../css/ext/jquery-datetimepicker' + ams.devext + '.css', 'jquery-datetimepicker');
 											ams.dialog.registerHideCallback(ams.helpers.datetimepickerDialogHiddenCallback);
 										}
-										datepickers.each(function() {
-											var input = $(this);
-											var data = input.data();
-											var dataOptions = {
-												lang: data.amsDatetimepickerLang || ams.lang,
-												format: data.amsDatetimepickerFormat || 'd/m/y',
-												datepicker: true,
-												dayOfWeekStart: 1,
-												timepicker: false,
-												closeOnDateSelect: data.amsDatetimepickerCloseOnSelect === undefined ? true : data.amsDatetimepickerCloseOnSelect,
-												weeks: data.amsDatetimepickerWeeks
-											};
-											var settings = $.extend({}, dataOptions, data.amsDatetimepickerOptions);
-											settings = ams.executeFunctionByName(data.amsDatetimepickerInitCallback, input, settings) || settings;
-											var plugin = input.datetimepicker(settings);
-											ams.executeFunctionByName(data.amsDatetimepickerAfterInitCallback, input, plugin, settings);
-										});
+										ams.getCSS(ams.baseURL + '../css/ext/jquery-datetimepicker' + ams.devext + '.css',
+												   'jquery-datetimepicker',
+												   function () {
+													   datepickers.each(function () {
+														   var input = $(this);
+														   var data = input.data();
+														   var dataOptions = {
+															   lang: data.amsDatetimepickerLang || ams.lang,
+															   format: data.amsDatetimepickerFormat || 'd/m/y',
+															   datepicker: true,
+															   dayOfWeekStart: 1,
+															   timepicker: false,
+															   closeOnDateSelect: data.amsDatetimepickerCloseOnSelect === undefined ? true : data.amsDatetimepickerCloseOnSelect,
+															   weeks: data.amsDatetimepickerWeeks
+														   };
+														   var settings = $.extend({}, dataOptions, data.amsDatetimepickerOptions);
+														   settings = ams.executeFunctionByName(data.amsDatetimepickerInitCallback, input, settings) || settings;
+														   var plugin = input.datetimepicker(settings);
+														   ams.executeFunctionByName(data.amsDatetimepickerAfterInitCallback, input, plugin, settings);
+													   });
+												   });
 								   });
 				}
 			},
@@ -3653,27 +3658,30 @@
 								   ams.baseURL + 'ext/jquery-datetimepicker' + ams.devext + '.js',
 								   function(first_load) {
 										if (first_load) {
-											ams.getCSS(ams.baseURL + '../css/ext/jquery-datetimepicker' + ams.devext + '.css', 'jquery-datetimepicker');
 											ams.dialog.registerHideCallback(ams.helpers.datetimepickerDialogHiddenCallback);
 										}
-										datetimepickers.each(function() {
-											var input = $(this);
-											var data = input.data();
-											var dataOptions = {
-												lang: data.amsDatetimepickerLang || ams.lang,
-												format: data.amsDatetimepickerFormat || 'd/m/y H:i',
-												datepicker: true,
-												dayOfWeekStart: 1,
-												timepicker: true,
-												closeOnDateSelect: data.amsDatetimepickerCloseOnSelect === undefined ? true : data.amsDatetimepickerCloseOnSelect,
-												closeOnTimeSelect: data.amsDatetimepickerCloseOnSelect === undefined ? true : data.amsDatetimepickerCloseOnSelect,
-												weeks: data.amsDatetimepickerWeeks
-											};
-											var settings = $.extend({}, dataOptions, data.amsDatetimepickerOptions);
-											settings = ams.executeFunctionByName(data.amsDatetimepickerInitCallback, input, settings) || settings;
-											var plugin = input.datetimepicker(settings);
-											ams.executeFunctionByName(data.amsDatetimepickerAfterInitCallback, input, plugin, settings);
-										});
+										ams.getCSS(ams.baseURL + '../css/ext/jquery-datetimepicker' + ams.devext + '.css',
+												   'jquery-datetimepicker',
+												   function () {
+													   datetimepickers.each(function () {
+														   var input = $(this);
+														   var data = input.data();
+														   var dataOptions = {
+															   lang: data.amsDatetimepickerLang || ams.lang,
+															   format: data.amsDatetimepickerFormat || 'd/m/y H:i',
+															   datepicker: true,
+															   dayOfWeekStart: 1,
+															   timepicker: true,
+															   closeOnDateSelect: data.amsDatetimepickerCloseOnSelect === undefined ? true : data.amsDatetimepickerCloseOnSelect,
+															   closeOnTimeSelect: data.amsDatetimepickerCloseOnSelect === undefined ? true : data.amsDatetimepickerCloseOnSelect,
+															   weeks: data.amsDatetimepickerWeeks
+														   };
+														   var settings = $.extend({}, dataOptions, data.amsDatetimepickerOptions);
+														   settings = ams.executeFunctionByName(data.amsDatetimepickerInitCallback, input, settings) || settings;
+														   var plugin = input.datetimepicker(settings);
+														   ams.executeFunctionByName(data.amsDatetimepickerAfterInitCallback, input, plugin, settings);
+													   });
+												   });
 								   });
 				}
 			},
@@ -3688,24 +3696,27 @@
 								   ams.baseURL + 'ext/jquery-datetimepicker' + ams.devext + '.js',
 								   function(first_load) {
 										if (first_load) {
-											ams.getCSS(ams.baseURL + '../css/ext/jquery-datetimepicker' + ams.devext + '.css', 'jquery-datetimepicker');
 											ams.dialog.registerHideCallback(ams.helpers.datetimepickerDialogHiddenCallback);
 										}
-										timepickers.each(function() {
-											var input = $(this);
-											var data = input.data();
-											var dataOptions = {
-												lang: data.amsDatetimepickerLang || ams.lang,
-												format: data.amsDatetimepickerFormat || 'H:i',
-												datepicker: false,
-												timepicker: true,
-												closeOnTimeSelect: data.amsDatetimepickerCloseOnSelect === undefined ? true : data.amsDatetimepickerCloseOnSelect
-											};
-											var settings = $.extend({}, dataOptions, data.amsDatetimepickerOptions);
-											settings = ams.executeFunctionByName(data.amsDatetimepickerInitCallback, input, settings) || settings;
-											var plugin = input.datetimepicker(settings);
-											ams.executeFunctionByName(data.amsDatetimepickerAfterInitCallback, input, plugin, settings);
-										});
+										ams.getCSS(ams.baseURL + '../css/ext/jquery-datetimepicker' + ams.devext + '.css',
+												   'jquery-datetimepicker',
+												   function() {
+													   timepickers.each(function () {
+														   var input = $(this);
+														   var data = input.data();
+														   var dataOptions = {
+															   lang: data.amsDatetimepickerLang || ams.lang,
+															   format: data.amsDatetimepickerFormat || 'H:i',
+															   datepicker: false,
+															   timepicker: true,
+															   closeOnTimeSelect: data.amsDatetimepickerCloseOnSelect === undefined ? true : data.amsDatetimepickerCloseOnSelect
+														   };
+														   var settings = $.extend({}, dataOptions, data.amsDatetimepickerOptions);
+														   settings = ams.executeFunctionByName(data.amsDatetimepickerInitCallback, input, settings) || settings;
+														   var plugin = input.datetimepicker(settings);
+														   ams.executeFunctionByName(data.amsDatetimepickerAfterInitCallback, input, plugin, settings);
+													   });
+												   });
 								   });
 				}
 			},
@@ -3718,21 +3729,22 @@
 				if (colorpickers.length > 0) {
 					ams.ajax.check($.fn.minicolors,
 								   ams.baseURL + 'ext/jquery-minicolors' + ams.devext + '.js',
-								   function(first_load) {
-										if (first_load) {
-											ams.getCSS(ams.baseURL + '../css/ext/jquery-minicolors' + ams.devext + '.css', 'jquery-minicolors');
-										}
-										colorpickers.each(function() {
-											var input = $(this);
-											var data = input.data();
-											var dataOptions = {
-												position: data.amsColorpickerPosition || input.closest('label.input').data('ams-colorpicker-position') || 'bottom left'
-											};
-											var settings = $.extend({}, dataOptions, data.amsColorpickerOptions);
-											settings = ams.executeFunctionByName(data.amsColorpickerInitCallback, input, settings) || settings;
-											var plugin = input.minicolors(settings);
-											ams.executeFunctionByName(data.amsDatetimepickerAfterInitCallback, input, plugin, settings);
-										});
+								   function() {
+										ams.getCSS(ams.baseURL + '../css/ext/jquery-minicolors' + ams.devext + '.css',
+												   'jquery-minicolors',
+												   function () {
+													   colorpickers.each(function () {
+														   var input = $(this);
+														   var data = input.data();
+														   var dataOptions = {
+															   position: data.amsColorpickerPosition || input.closest('label.input').data('ams-colorpicker-position') || 'bottom left'
+														   };
+														   var settings = $.extend({}, dataOptions, data.amsColorpickerOptions);
+														   settings = ams.executeFunctionByName(data.amsColorpickerInitCallback, input, settings) || settings;
+														   var plugin = input.minicolors(settings);
+														   ams.executeFunctionByName(data.amsDatetimepickerAfterInitCallback, input, plugin, settings);
+													   });
+												   });
 								   });
 				}
 			},
@@ -3745,22 +3757,24 @@
 				if (uploads.length > 0) {
 					ams.ajax.check($.fn.dndupload,
 								   ams.baseURL + 'ext/jquery-dndupload' + ams.devext + '.js',
-								   function(first_load) {
-										ams.getCSS(ams.baseURL + '../css/ext/jquery-dndupload' + ams.devext + '.css', 'jquery-dndupload', function() {
-											uploads.each(function() {
-												var upload = $(this);
-												var data = upload.data();
-												var dataOptions = {
-													action: data.amsDnduploadAction || upload.attr('action') || 'upload-files',
-													fieldname: data.amsDnduploadFieldname || 'files',
-													autosubmit: data.amsDnduploadAutosubmit
-												};
-												var settings = $.extend({}, dataOptions, data.amsDnduploadOptions);
-												settings = ams.executeFunctionByName(data.amsDnduploadInitCallback, upload, settings) || settings;
-												var plugin = upload.dndupload(settings);
-												ams.executeFunctionByName(data.amsDnduploadAfterInitcallback, upload, plugin, settings);
-											});
-										});
+								   function() {
+										ams.getCSS(ams.baseURL + '../css/ext/jquery-dndupload' + ams.devext + '.css',
+												   'jquery-dndupload',
+												   function () {
+													   uploads.each(function () {
+														   var upload = $(this);
+														   var data = upload.data();
+														   var dataOptions = {
+															   action: data.amsDnduploadAction || upload.attr('action') || 'upload-files',
+															   fieldname: data.amsDnduploadFieldname || 'files',
+															   autosubmit: data.amsDnduploadAutosubmit
+														   };
+														   var settings = $.extend({}, dataOptions, data.amsDnduploadOptions);
+														   settings = ams.executeFunctionByName(data.amsDnduploadInitCallback, upload, settings) || settings;
+														   var plugin = upload.dndupload(settings);
+														   ams.executeFunctionByName(data.amsDnduploadAfterInitcallback, upload, plugin, settings);
+													   });
+												   });
 								   });
 				}
 			},
@@ -3868,7 +3882,7 @@
 				if (tables.length > 0) {
 					ams.ajax.check($.fn.dataTable,
 								   ams.baseURL + 'ext/jquery-dataTables-1.9.4' + ams.devext + '.js',
-								   function(first_load) {
+								   function() {
 										ams.ajax.check($.fn.dataTableExt.oPagination.bootstrap_full,
 													   ams.baseURL + 'myams-dataTables' + ams.devext + '.js',
 													   function() {
@@ -4126,7 +4140,7 @@
 				if (tables.length > 0) {
 					ams.ajax.check($.fn.tableDnD,
 								   ams.baseURL + 'ext/jquery-tablednd' + ams.devext + '.js',
-								   function(first_load) {
+								   function() {
 										tables.each(function() {
 											var table = $(this);
 											var data = table.data();
@@ -4197,7 +4211,7 @@
 				if (wizards.length > 0) {
 					ams.ajax.check($.fn.bootstrapWizard,
 								   ams.baseURL + 'ext/bootstrap-wizard-1.4.2' + ams.devext + '.js',
-								   function(first_load) {
+								   function() {
 										wizards.each(function() {
 											var wizard = $(this);
 											var data = wizard.data();
@@ -4319,44 +4333,45 @@
 				if (images.length > 0) {
 					ams.ajax.check($.fn.imgAreaSelect,
 								   ams.baseURL + 'ext/jquery-imgareaselect-0.9.11-rc1' + ams.devext + '.js',
-								   function(first_load) {
-									   if (first_load) {
-										   ams.getCSS(ams.baseURL + '../css/ext/jquery-imgareaselect' + ams.devext + '.css');
-									   }
-									   images.each(function() {
-										   var image = $(this);
-										   var data = image.data();
-										   var parent = data.amsImgareaselectParent ? image.parents(data.amsImgareaselectParent) : 'body';
-										   var dataOptions = {
-											   instance: true,
-											   handles: true,
-											   parent: parent,
-											   x1: data.amsImgareaselectX1 || 0,
-											   y1: data.amsImgareaselectY1 || 0,
-											   x2: data.amsImgareaselectX2 || data.amsImgareaselectImageWidth,
-											   y2: data.amsImgareaselectY2 || data.amsImgareaselectImageHeight,
-											   imageWidth: data.amsImgareaselectImageWidth,
-											   imageHeight: data.amsImgareaselectImageHeight,
-											   minWidth: 128,
-											   minHeight: 128,
-											   aspectRatio: data.amsImgareaselectRatio,
-											   onSelectEnd: ams.getFunctionByName(data.amsImgareaselectSelectEnd) || function(img, selection) {
-												   var target = data.amsImgareaselectTargetField || 'image_';
-												   $('input[name="' + target + 'x1"]', parent).val(selection.x1);
-												   $('input[name="' + target + 'y1"]', parent).val(selection.y1);
-												   $('input[name="' + target + 'x2"]', parent).val(selection.x2);
-												   $('input[name="' + target + 'y2"]', parent).val(selection.y2);
-											   }
-										   };
-										   var settings = $.extend({}, dataOptions, data.amsImgareaselectOptions);
-										   settings = ams.executeFunctionByName(data.amsImgareaselectInitCallback, image, settings) || settings;
-										   var plugin = image.imgAreaSelect(settings);
-										   ams.executeFunctionByName(data.amsImgareaselectAfterInitCallback, image, plugin, settings);
-										   // Add update timeout when plug-in is displayed into a modal dialog
-										   setTimeout(function() {
-											   plugin.update();
-										   }, 250);
-									   });
+								   function() {
+										ams.getCSS(ams.baseURL + '../css/ext/jquery-imgareaselect' + ams.devext + '.css',
+												  'jquery-imgareaselect',
+												   function() {
+													   images.each(function () {
+														   var image = $(this);
+														   var data = image.data();
+														   var parent = data.amsImgareaselectParent ? image.parents(data.amsImgareaselectParent) : 'body';
+														   var dataOptions = {
+															   instance: true,
+															   handles: true,
+															   parent: parent,
+															   x1: data.amsImgareaselectX1 || 0,
+															   y1: data.amsImgareaselectY1 || 0,
+															   x2: data.amsImgareaselectX2 || data.amsImgareaselectImageWidth,
+															   y2: data.amsImgareaselectY2 || data.amsImgareaselectImageHeight,
+															   imageWidth: data.amsImgareaselectImageWidth,
+															   imageHeight: data.amsImgareaselectImageHeight,
+															   minWidth: 128,
+															   minHeight: 128,
+															   aspectRatio: data.amsImgareaselectRatio,
+															   onSelectEnd: ams.getFunctionByName(data.amsImgareaselectSelectEnd) || function (img, selection) {
+																   var target = data.amsImgareaselectTargetField || 'image_';
+																   $('input[name="' + target + 'x1"]', parent).val(selection.x1);
+																   $('input[name="' + target + 'y1"]', parent).val(selection.y1);
+																   $('input[name="' + target + 'x2"]', parent).val(selection.x2);
+																   $('input[name="' + target + 'y2"]', parent).val(selection.y2);
+															   }
+														   };
+														   var settings = $.extend({}, dataOptions, data.amsImgareaselectOptions);
+														   settings = ams.executeFunctionByName(data.amsImgareaselectInitCallback, image, settings) || settings;
+														   var plugin = image.imgAreaSelect(settings);
+														   ams.executeFunctionByName(data.amsImgareaselectAfterInitCallback, image, plugin, settings);
+														   // Add update timeout when plug-in is displayed into a modal dialog
+														   setTimeout(function () {
+															   plugin.update();
+														   }, 250);
+													   });
+												   });
 								   });
 				}
 			},
@@ -4369,91 +4384,92 @@
 				if (fancyboxes.length > 0) {
 					ams.ajax.check($.fn.fancybox,
 								   ams.baseURL + 'ext/jquery-fancybox-2.1.5' + ams.devext + '.js',
-								   function(first_load) {
-										if (first_load) {
-											ams.getCSS(ams.baseURL + '../css/ext/jquery-fancybox-2.1.5' + ams.devext + '.css');
-										}
-										fancyboxes.each(function() {
-											var fancybox = $(this);
-											var data = fancybox.data();
-											var elements = fancybox;
-											if (data.amsFancyboxElements) {
-												elements = $(data.amsFancyboxElements, fancybox);
-											}
-											var helpers = (data.amsFancyboxHelpers || '').split(/\s+/);
-											if (helpers.length > 0) {
-												for (var index=0; index < helpers.length; index++) {
-													var helper = helpers[index];
-													switch (helper) {
-														case 'buttons':
-															ams.ajax.check($.fancybox.helpers.buttons,
-																		   ams.baseURL + 'ext/fancybox-helpers/fancybox-buttons' + ams.devext + '.js');
-															break;
-														case 'thumbs':
-															ams.ajax.check($.fancybox.helpers.thumbs,
-																		   ams.baseURL + 'ext/fancybox-helpers/fancybox-thumbs' + ams.devext + '.js');
-															break;
-														case 'media':
-															ams.ajax.check($.fancybox.helpers.media,
-																		   ams.baseURL + 'ext/fancybox-helpers/fancybox-media' + ams.devext + '.js');
-															break;
-														default:
-															break;
+								   function() {
+										ams.getCSS(ams.baseURL + '../css/ext/jquery-fancybox-2.1.5' + ams.devext + '.css',
+											'jquery-fancybox',
+											function() {
+												fancyboxes.each(function () {
+													var fancybox = $(this);
+													var data = fancybox.data();
+													var elements = fancybox;
+													if (data.amsFancyboxElements) {
+														elements = $(data.amsFancyboxElements, fancybox);
 													}
-												}
-											}
-											var dataOptions = {
-												type: data.amsFancyboxType,
-												padding: data.amsFancyboxPadding || 10,
-												margin: data.amsFancyboxMargin || 10,
-												loop: data.amsFancyboxLoop,
-												beforeLoad: ams.getFunctionByName(data.amsFancyboxBeforeLoad) || function() {
-													var title;
-													if (data.amsFancyboxTitleGetter) {
-														title = ams.executeFunctionByName(data.amsFancyboxTitleGetter, this);
-													}
-													if (!title) {
-														var content = $('*:first', this.element);
-														title = content.attr('original-title') || content.attr('title');
-														if (!title) {
-															title = $(this.element).attr('original-title') || $(this.element).attr('title');
+													var helpers = (data.amsFancyboxHelpers || '').split(/\s+/);
+													if (helpers.length > 0) {
+														for (var index = 0; index < helpers.length; index++) {
+															var helper = helpers[index];
+															switch (helper) {
+																case 'buttons':
+																	ams.ajax.check($.fancybox.helpers.buttons,
+																		ams.baseURL + 'ext/fancybox-helpers/fancybox-buttons' + ams.devext + '.js');
+																	break;
+																case 'thumbs':
+																	ams.ajax.check($.fancybox.helpers.thumbs,
+																		ams.baseURL + 'ext/fancybox-helpers/fancybox-thumbs' + ams.devext + '.js');
+																	break;
+																case 'media':
+																	ams.ajax.check($.fancybox.helpers.media,
+																		ams.baseURL + 'ext/fancybox-helpers/fancybox-media' + ams.devext + '.js');
+																	break;
+																default:
+																	break;
+															}
 														}
 													}
-													this.title = title;
-												},
-												afterLoad: ams.getFunctionByName(data.amsFancyboxAfterLoad),
-												helpers: {
-													title: {
-														type: 'inside'
+													var dataOptions = {
+														type: data.amsFancyboxType,
+														padding: data.amsFancyboxPadding || 10,
+														margin: data.amsFancyboxMargin || 10,
+														loop: data.amsFancyboxLoop,
+														beforeLoad: ams.getFunctionByName(data.amsFancyboxBeforeLoad) || function () {
+															var title;
+															if (data.amsFancyboxTitleGetter) {
+																title = ams.executeFunctionByName(data.amsFancyboxTitleGetter, this);
+															}
+															if (!title) {
+																var content = $('*:first', this.element);
+																title = content.attr('original-title') || content.attr('title');
+																if (!title) {
+																	title = $(this.element).attr('original-title') || $(this.element).attr('title');
+																}
+															}
+															this.title = title;
+														},
+														afterLoad: ams.getFunctionByName(data.amsFancyboxAfterLoad),
+														helpers: {
+															title: {
+																type: 'inside'
+															}
+														}
+													};
+													if (helpers.length > 0) {
+														for (index = 0; index < helpers.length; index++) {
+															helper = helpers[index];
+															switch (helper) {
+																case 'buttons':
+																	dataOptions.helpers.buttons = {
+																		position: data.amsFancyboxButtonsPosition || 'top'
+																	};
+																	break;
+																case 'thumbs':
+																	dataOptions.helpers.thumbs = {
+																		width: data.amsFancyboxThumbsWidth || 50,
+																		height: data.amsFancyboxThumbsHeight || 50
+																	};
+																	break;
+																case 'media':
+																	dataOptions.helpers.media = true;
+																	break;
+															}
+														}
 													}
-												}
-											};
-											if (helpers.length > 0) {
-												for (index = 0; index < helpers.length; index++) {
-													helper = helpers[index];
-													switch (helper) {
-														case 'buttons':
-															dataOptions.helpers.buttons = {
-																position: data.amsFancyboxButtonsPosition || 'top'
-															};
-															break;
-														case 'thumbs':
-															dataOptions.helpers.thumbs = {
-																width: data.amsFancyboxThumbsWidth || 50,
-																height: data.amsFancyboxThumbsHeight || 50
-															};
-															break;
-														case 'media':
-															dataOptions.helpers.media = true;
-															break;
-													}
-												}
-											}
-											var settings = $.extend({}, dataOptions, data.amsFancyboxOptions);
-											settings = ams.executeFunctionByName(data.amsFancyboxInitCallback, fancybox, settings) || settings;
-											var plugin = elements.fancybox(settings);
-											ams.executeFunctionByName(data.amsFancyboxAfterInitCallback, fancybox, plugin, settings);
-										});
+													var settings = $.extend({}, dataOptions, data.amsFancyboxOptions);
+													settings = ams.executeFunctionByName(data.amsFancyboxInitCallback, fancybox, settings) || settings;
+													var plugin = elements.fancybox(settings);
+													ams.executeFunctionByName(data.amsFancyboxAfterInitCallback, fancybox, plugin, settings);
+												});
+											});
 								   });
 				}
 			},
@@ -4527,22 +4543,22 @@
 								   function() {
 										ams.ajax.check($.fn.mCustomScrollbar,
 													   ams.baseURL + 'ext/jquery-mCustomScrollbar' + ams.devext + '.js',
-													   function(first_load) {
-															if (first_load) {
-																ams.getCSS(ams.baseURL + '../css/ext/jquery-mCustomScrollbar.css',
-																		   'jquery-mCustomScrollbar');
-															}
-															scrollbars.each(function() {
-																var scrollbar = $(this);
-																var data = scrollbar.data();
-																var dataOptions = {
-																	theme: data.amsScrollbarTheme || 'light'
-																};
-																var settings = $.extend({}, dataOptions, data.amsScrollbarOptions);
-																settings = ams.executeFunctionByName(data.amsScrollbarInitCallback, scrollbar, settings) || settings;
-																var plugin = scrollbar.mCustomScrollbar(settings);
-																ams.executeFunctionByName(data.amsScrollbarAfterInitCallback, scrollbar, plugin, settings);
-															});
+													   function() {
+															ams.getCSS(ams.baseURL + '../css/ext/jquery-mCustomScrollbar.css',
+																	   'jquery-mCustomScrollbar',
+																	   function () {
+																		   scrollbars.each(function () {
+																			   var scrollbar = $(this);
+																			   var data = scrollbar.data();
+																			   var dataOptions = {
+																				   theme: data.amsScrollbarTheme || 'light'
+																			   };
+																			   var settings = $.extend({}, dataOptions, data.amsScrollbarOptions);
+																			   settings = ams.executeFunctionByName(data.amsScrollbarInitCallback, scrollbar, settings) || settings;
+																			   var plugin = scrollbar.mCustomScrollbar(settings);
+																			   ams.executeFunctionByName(data.amsScrollbarAfterInitCallback, scrollbar, plugin, settings);
+																		   });
+																	   });
 													   });
 									});
 				}
@@ -5588,7 +5604,7 @@
 		}
 
 		// Hide menu button
-		$('#hide-menu >:first-child > A').click(function(e) {
+		$('#hide-menu').find('>:first-child >A').click(function(e) {
 			body.toggleClass("hidden-menu");
 			e.preventDefault();
 		});