/**
 * @class de_epages.design.inc.editorMenu
 * 
 */

/*
 * @copyright   © Copyright 2006-2012, epages GmbH, All Rights Reserved.
 *
 * @module      de_epages.design.inc.editorMenu
 */

define("de_epages/design/inc/editormenu", [
	"jquery",
	"util/storage",
	"$dict!de_epages/design/inc/editormenu",
	"$tmpl!de_epages/design/inc/editormenu"
], function ($, storage, dictEditormenu, tmplEditormenu) {

	return {
		/**
		 * description
		 * 
		 * The `de_epages.design.inc.editorMenu.init()` creates overlay into the content are to select between different editors.
		 * 
		 * ### Examples
		 * Init the overlay
		 * 
		 * JavaScript:
		 * 
		 *     jQuery.ready('de_epages.design.inc.editormenu', function ($) {
		 *     de_epages.design.inc.editorMenu.init(
		 *     {
		 *      editor: 'Content',
		 *      customiseDesign: #Shop.FeatureMaxValue.CustomiseDesign
		 *     }
		 *     );
		 *     });
		 * 
		 * CSS:
		 * 
		 *     @import url('inc/editormenu-bo.css');
		 * 
		 * 
		 * ### Dependencies
		 * 
		 *  + `jQuery.tmpl, jQuery.dect`
		 * 
		 * @param {Object} [options] A map of additional options pass to the function.
		 * @param {String} options.editor A string indicating which editor is currently active.
		 * @param {undefined} options.customiseDesign An integer indicating if the feature customiseDesign is active
		 * 
		 * @method init
		 * @static 
		 * @member de_epages.design.inc.editorMenu
		 * 
		 * @since 6.15.x
		 */
		init: function (options) {
			var cssClassMap = {
					Content: 'ico_l_contentpreview',
					StyleWizard: 'ico_l_stylewizard',
					StyleEditor: 'ico_l_styleeditor'
				},

				o = $.extend({
						// defaults
						editor: 'Content',
						customiseDesign: 'NotAllowed'
					}, options),

				// render template
				renderedTemplate = tmplEditormenu({
						activeEditorClass: cssClassMap[o.editor],
						customiseDesign: o.customiseDesign
					})
					.dictParse(dictEditormenu, true),
				
				// elements from the template
				elements = renderedTemplate.tmplItem('elements'),

				// get storage informations about already closed tooltips
				stored = storage.localStorage('EditorTooltipMessage') || false,

				// cache often used DOM elements
				$message = elements.message,
				
				$selector = elements.editorSelector,
				
				$list = elements.list,
				
				$opener = elements.opener;

			// save closed tooltips in local storage on close
			$message.on('close', function () {
				storage.localStorage('EditorTooltipMessage', true);
				$(this)
					.addClass('HideElement');
			});

			// simulate a delayed hover status with *jQuery.delay*
			($selector)
				.on('mouseenter', function () {
					$(this)
						.clearQueue();
					// only hide not close the tooltip on hover
					$message.addClass('HideElement');
					$selector.addClass('open')
						.css('height', (o.customiseDesign === 'Allowed' ? 139 : 93) + 'px');
				})
				.on('mouseleave', function () {
					$(this)
						.delay(250)
						.queue(function (next) {
							$selector.removeClass('open')
								.css('height', '');
							next();
						});
				});

			// trigger close event for tooltip
			elements.closeButton
				.on('click', function () {
					$message.trigger('close');
				});

			// set click events for location change
			elements.contentItem
				.on('click', function () {
					location.href = '?ViewAction=MBO-ViewContent&ObjectID=' + epages.vars.CategoriesID;
				});

			elements.styleWizardItem
				.on('click', function () {
					location.href = '?ViewAction=MBO-ViewStyleWizard&ObjectID=' + epages.vars.StyleId;
				});

			if (o.customiseDesign === 'Allowed') {
				elements.styleEditorItem
					.on('click', function () {
						location.href = '?ViewAction=MBO-ViewStyleEditor&ObjectID=' + epages.vars.StyleId;
					});
			}
			
			// set current editor to acitve in the list
			$list.find('.Open' + o.editor)
				.addClass('active')
				.off('click');

			// if the tooltip has been close do not show it again
			if (stored === true) {
				$message.addClass('HideElement');
			}

			if (o.editor === 'Content') {
				$('#LeftSidebar')
					.find('.CloseButton')
					.on('click', function () {
						renderedTemplate.addClass('left-margin');
					});

				$('#LeftSidebar')
					.find('.MinimizeNode')
					.on('click', function () {
						renderedTemplate.removeClass('left-margin');
					});
			}

			$('#epages_cartridges_de_epages_presentation_widget_Toolvisualaid_0')
				.on('click', function () {
					if ($(this).children('i').is(".ico_s_visualaid_hidden")) {
						renderedTemplate.hide();
					} else {
						renderedTemplate.show();
					}
				});

			// insert the template into the DOM
			$('.ContentSpacer')
				.prepend(renderedTemplate);
		}
	};
});