text: /*
   * This file is part of Contao.
   *
   * (c) Leo Feyer
   *
   * @license LGPL-3.0-or-later
   */
  
  var Theme = {
  
  	/**
  	 * Colorize a table row when hovering over it
  	 *
  	 * @param {object} el    The DOM element
  	 * @param {int}    state The current state
  	 */
  	hoverRow: function(el, state) {
  		var items = $(el).getChildren();
  		for (var i=0; i<items.length; i++) {
  			if (items[i].nodeName.toLowerCase() == 'td') {
  				items[i].setStyle('background-color', (state ? '#ebfdd7' : ''));
  			}
  		}
  	},
  
  	/**
  	 * Colorize a layer when hovering over it
  	 *
  	 * @param {object} el    The DOM element
  	 * @param {int}    state The current state
  	 */
  	hoverDiv: function(el, state) {
  		if (!state) {
  			el.removeAttribute('data-visited');
  		}
  		$(el).setStyle('background-color', (state ? '#ebfdd7' : ''));
  	},
  
  	/**
  	 * Work around the missing :last-child support in IE7 and IE8 (see #4017)
  	 */
  	fixLabelLastChild: function() {
  		if (Browser.ie7 || Browser.ie8) {
  			$$('.tl_checkbox_container label:last-child').each(function(el) {
  				el.setStyle('margin-bottom', 0);
  			});
  		}
  	},
  
  	/**
  	 * Stop the propagation of click events of certain elements
  	 */
  	stopClickPropagation: function() {
  
  		// Do not propagate the click events of the icons
  		$$('.picker_selector').each(function(ul) {
  			ul.getElements('a').each(function(el) {
  				el.addEvent('click', function(e) {
  					e.stopPropagation();
  				});
  			});
  		});
  
  		// Do not propagate the click events of the checkboxes
  		$$('.picker_selector,.click2edit').each(function(ul) {
  			ul.getElements('input[type="checkbox"]').each(function(el) {
  				el.addEvent('click', function(e) {
  					e.stopPropagation();
  				});
  			});
  		});
  	},
  
  	/**
  	 * Set up the [Ctrl] + click to edit functionality
  	 */
  	setupCtrlClick: function() {
  		$$('.click2edit').each(function(el) {
  
  			// Do not propagate the click events of the default buttons (see #5731)
  			el.getElements('a').each(function(a) {
  				a.addEvent('click', function(e) {
  					e.stopPropagation();
  				});
  			});
  
  			// Set up regular click events on touch devices
  			if (Browser.Features.Touch) {
  				el.addEvent('click', function() {
  					if (!el.getAttribute('data-visited')) {
  						el.setAttribute('data-visited', '1');
  					} else {
  						el.getElements('a').each(function(a) {
  							if (a.hasClass('edit')) {
  								document.location.href = a.href;
  							}
  						});
  						el.removeAttribute('data-visited');
  					}
  				});
  			} else {
  				el.addEvent('click', function(e) {
  					var key = Browser.Platform.mac ?
  							e.event.metaKey : e.event.ctrlKey;
  					if (key && e.event.shiftKey) {
  						el.getElements('a').each(function(a) {
  							if (a.hasClass('editheader')) {
  								document.location.href = a.href;
  							}
  						});
  					} else if (key) {
  						el.getElements('a').each(function(a) {
  							if (a.hasClass('edit')) {
  								document.location.href = a.href;
  							}
  						});
  					}
  				});
  			}
  		});
  	},
  
  	/**
  	 * Set up the textarea resizing
  	 */
  	setupTextareaResizing: function() {
  		$$('.tl_textarea').each(function(el) {
  			if (Browser.ie6 || Browser.ie7 || Browser.ie8) return;
  			if (el.hasClass('noresize') || el.retrieve('autogrow')) return;
  
  			// Set up the dummy element
  			var dummy = new Element('div', {
  				html: 'X',
  				styles: {
  					'position':'absolute',
  					'top':0,
  					'left':'-999em',
  					'overflow-x':'hidden'
  				}
  			}).setStyles(
  				el.getStyles('font-size', 'font-family', 'width', 'line-height')
  			).inject(document.body);
  
  			// Single line height
  			var line = dummy.clientHeight;
  
  			// Respond to the "input" event
  			el.addEvent('input', function() {
  				dummy.set('html', this.get('value')
  					.replace(/</g, '&lt;')
  					.replace(/>/g, '&gt;')
  					.replace(/\n|\r\n/g, '<br>X'));
  				var height = Math.max(line, dummy.getSize().y);
  				if (this.clientHeight != height) this.tween('height', height);
  			}).set('tween', { 'duration':100 }).setStyle('height', line + 'px');
  
  			// Fire the event
  			el.fireEvent('input');
  			el.store('autogrow', true);
  		});
  	}
  };
  
  // Initialize
  window.addEvent('domready', function() {
  	Theme.fixLabelLastChild();
  	Theme.stopClickPropagation();
  	Theme.setupCtrlClick();
  	Theme.setupTextareaResizing();
  });
  
  // Respond to Ajax changes
  window.addEvent('ajax_change', function() {
  	Theme.stopClickPropagation();
  	Theme.setupCtrlClick();
  	Theme.setupTextareaResizing();
  });
  