text: /**
   * @preserve jLayout JQuery Plugin v0.17
   *
   * Licensed under the new BSD License.
   * Copyright 2008-2009 Bram Stein
   * All rights reserved.
   */
  /*global jQuery jLayout*/
  if (jQuery && jLayout) {
  	(function ($) {
  		/**
  		 * This wraps jQuery objects in another object that supplies
  		 * the methods required for the layout algorithms.
  		 */
  		function wrap(item, resize) {
  			var that = {};
  
  			$.each(['min', 'max'], function (i, name) {
  				that[name + 'imumSize'] = function (value) {
                      var l = item.data('jlayout');
                      
  					if (l) {
  						return l[name + 'imum'](that);
  					} else {
  						return item[name + 'Size'](value);
  					}
  				};
  			});
  
  			$.extend(that, {
  				doLayout: function () {
                      var l = item.data('jlayout');
                      
  					if (l) {
                          l.layout(that);
  					}
  					item.css({position: 'absolute'});
  				},
  				isVisible: function () {
  					return item.isVisible();
  				},
  				insets: function () {
  					var p = item.padding(),
  						b = item.border();
  
  					return {
                          'top': p.top, 
  						'bottom': p.bottom + b.bottom + b.top, 
  						'left': p.left, 
  						'right': p.right + b.right + b.left
                      };
  				},
  				bounds: function (value) {
  					var tmp = {};
  
  					if (value) {
  						if (typeof value.x === 'number') {
  							tmp.left = value.x;
  						}
  						if (typeof value.y === 'number') {
  							tmp.top = value.y;
  						}
  						if (typeof value.width === 'number') {
  							tmp.width = (value.width - (item.outerWidth(true) - item.width()));
  							tmp.width = (tmp.width >= 0) ? tmp.width : 0;
  						}
  						if (typeof value.height === 'number') {
  							tmp.height = value.height - (item.outerHeight(true) - item.height());
  							tmp.height = (tmp.height >= 0) ? tmp.height : 0;
  						}
  						item.css(tmp);
  						return item;
  					} else {
  						tmp = item.position();
  						return {
  							'x': tmp.left,
  							'y': tmp.top,
  							'width': item.outerWidth(false),
  							'height': item.outerHeight(false)
                          };
  					}
  				},
  				preferredSize: function () {
  					var minSize,
  						maxSize,
  						margin = item.margin(),
  						size = {width: 0, height: 0},
                          l = item.data('jlayout');
  
  					if (l && resize) {
  						size = l.preferred(that);
  
  						minSize = that.minimumSize();
  						maxSize = that.maximumSize();
  
  						size.width += margin.left + margin.right;
  						size.height += margin.top + margin.bottom;
  
  						if (size.width < minSize.width || size.height < minSize.height) {
  							size.width = Math.max(size.width, minSize.width);
  							size.height = Math.max(size.height, minSize.height);
  						} else if (size.width > maxSize.width || size.height > maxSize.height) {
  							size.width = Math.min(size.width, maxSize.width);
  							size.height = Math.min(size.height, maxSize.height);
  						}
  					} else {
                          size = that.bounds();
  						size.width += margin.left + margin.right;
  						size.height += margin.top + margin.bottom;
  					}
  					return size;
  				}
  			});
  			return that;
  		}
  
  		$.fn.layout = function (options) {
  			var opts = $.extend({}, $.fn.layout.defaults, options);
  			return $.each(this, function () {
  				var element = $(this),
  					o = ( element.data('layout') ) ? $.extend(opts, element.data('layout')) : opts,
  					elementWrapper = wrap(element, o.resize);
  
  				if (o.type === 'border' && typeof jLayout.border !== 'undefined') {                
  					$.each(['north', 'south', 'west', 'east', 'center'], function (i, name) {
  						if (element.children().hasClass(name)) {
  							o[name] = wrap(element.children('.' + name + ':first'));
  						}
  					});
  					element.data('jlayout', jLayout.border(o));
  				} else if (o.type === 'grid' && typeof jLayout.grid !== 'undefined') {
  					o.items = [];
  					element.children().each(function (i) {
  						if (!$(this).hasClass('ui-resizable-handle')) {
  							o.items[i] = wrap($(this));
  						}
  					});
  					element.data('jlayout', jLayout.grid(o));
  				} else if (o.type === 'flexGrid' && typeof jLayout.flexGrid !== 'undefined') {
  					o.items = [];
  					element.children().each(function (i) {
  						if (!$(this).hasClass('ui-resizable-handle')) {
  							o.items[i] = wrap($(this));
  						}
  					});
  					element.data('jlayout', jLayout.flexGrid(o));
  				} else if (o.type === 'column' && typeof jLayout.column !== 'undefined') {
  					o.items = [];
  					element.children().each(function (i) {
  						if (!$(this).hasClass('ui-resizable-handle')) {
  							o.items[i] = wrap($(this));
  						}
  					});
  					element.data('jlayout', jLayout.column(o));
  				} else if (o.type === 'flow' && typeof jLayout.flow !== 'undefined') {
  					o.items = [];
  					element.children().each(function (i) {
  						if (!$(this).hasClass('ui-resizable-handle')) {
  							o.items[i] = wrap($(this));
  						}
  					});
  					element.data('jlayout', jLayout.flow(o));					
  				}
                  
  				if (o.resize) {
  					elementWrapper.bounds(elementWrapper.preferredSize());
  				}
                  
  				elementWrapper.doLayout();
  				element.css({position: 'relative'});
  				if ($.ui !== undefined) {
  					element.addClass('ui-widget');
  				}
  			});
  		};
  
  		$.fn.layout.defaults = {
  			resize: true,
  			type: 'grid'
  		};
  	}(jQuery));
  }
  