/***************************************************************
*  Copyright notice
*
*  (c) 2007-2011 Ingo Renner <ingo@typo3.org>
*  All rights reserved
*
*  This script is part of the TYPO3 project. The TYPO3 project is
*  free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  The GNU General Public License can be found at
*  http://www.gnu.org/copyleft/gpl.html.
*  A copy is found in the textfile GPL.txt and important notices to the license
*  from the author is found in LICENSE.txt distributed with these scripts.
*
*
*  This script is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/


var ToolbarManager = Class.create({

	/**
	 * hides all toolbar item menus except for the which was clicked
	 */
	hideOthers: function(toolbarItem) {
		var sibling = toolbarItem.next();

			// check whether it is a toolbar item with menu
		if (sibling.hasClassName('toolbar-item-menu')) {
			this.hideAll();
				// show toolbarItem
			toolbarItem.addClassName('toolbar-item-active');
		}
	},

	/**
	 * Hide all expanded toolbar menus
	 */
	hideAll: function() {
		$$('#typo3-toolbar a.toolbar-item + .toolbar-item-menu').invoke('hide');
		$$('#typo3-toolbar a.toolbar-item').each(function(element) {
			element.removeClassName('toolbar-item-active');
		});
	},

	/**
	 * refreshs positioning of all submenus
	 */
	refreshAll: function() {
		$$('.toolbar-item-menu').each(function(element) {
			menuParent = Ext.get(element);
			TYPO3BackendToolbarManager.positionMenu(menuParent.findParentNode('[id$="-menu"]').id);
		});
	},

	/**
	 * positions a toolbar item (has to have .toolbar-item-menu)
	 * @param elementId The parent element ofthe menu to be positioned
	 */
	positionMenu: function(elementId) {
		var calculatedOffset = 0;
		var parentWidth = $(elementId).getWidth();
		var currentToolbarItemLayer = $$('#' + elementId + ' .toolbar-item-menu')[0];
		var ownWidth = currentToolbarItemLayer.getWidth();
		var parentSiblings = $(elementId).previousSiblings();

		parentSiblings.each(function(toolbarItem) {
			calculatedOffset += toolbarItem.getWidth() - 1;
			// -1 to compensate for the margin-right -1px of the list items,
			// which itself is necessary for overlaying the separator with the active state background

			if (toolbarItem.down().hasClassName('no-separator')) {
				calculatedOffset -= 1;
			}
		});
		calculatedOffset = calculatedOffset - ownWidth + parentWidth;

		// border correction
		if (currentToolbarItemLayer.getStyle('display') !== 'none') {
			calculatedOffset += 2;
		}

		$$('#' + elementId + ' .toolbar-item-menu')[0].setStyle({
			left: calculatedOffset + 'px'
		});
	}

});

var TYPO3BackendToolbarManager = new ToolbarManager();


