Index: /extensions/Float/js/masonry.js
===================================================================
--- /extensions/Float/js/masonry.js	(revision 25980)
+++ /extensions/Float/js/masonry.js	(revision 25980)
@@ -0,0 +1,460 @@
+/**
+ * jQuery Masonry v2.0.110517 beta
+ * The flip-side of CSS Floats.
+ * jQuery plugin that rearranges item elements to a grid.
+ * http://masonry.desandro.com
+ *
+ * Licensed under the MIT license.
+ * Copyright 2011 David DeSandro
+ */
+ 
+(function( window, $, undefined ){
+
+  /*
+   * smartresize: debounced resize event for jQuery
+   *
+   * latest version and complete README available on Github:
+   * https://github.com/louisremi/jquery.smartresize.js
+   *
+   * Copyright 2011 @louis_remi
+   * Licensed under the MIT license.
+   */
+
+  var $event = $.event,
+      resizeTimeout;
+
+  $event.special.smartresize = {
+    setup: function() {
+      $(this).bind( "resize", $event.special.smartresize.handler );
+    },
+    teardown: function() {
+      $(this).unbind( "resize", $event.special.smartresize.handler );
+    },
+    handler: function( event, execAsap ) {
+      // Save the context
+      var context = this,
+          args = arguments;
+
+      // set correct event type
+      event.type = "smartresize";
+
+      if ( resizeTimeout ) { clearTimeout( resizeTimeout ); }
+      resizeTimeout = setTimeout(function() {
+        jQuery.event.handle.apply( context, args );
+      }, execAsap === "execAsap"? 0 : 100 );
+    }
+  };
+
+  $.fn.smartresize = function( fn ) {
+    return fn ? this.bind( "smartresize", fn ) : this.trigger( "smartresize", ["execAsap"] );
+  };
+
+
+
+// ========================= Masonry ===============================
+
+
+  // our "Widget" object constructor
+  $.Mason = function( options, element ){
+    this.element = $( element );
+
+    this._create( options );
+    this._init();
+  };
+  
+  // styles of container element we want to keep track of
+  var masonryContainerStyles = [ 'position', 'height' ];
+  
+  $.Mason.settings = {
+    isResizable: true,
+    isAnimated: false,
+    animationOptions: {
+      queue: false,
+      duration: 500
+    },
+    gutterWidth: 0,
+    isRTL: false,
+    isFitWidth: false
+  };
+
+  $.Mason.prototype = {
+
+    _getBricks: function( $elems ) {
+      var selector = this.options.itemSelector,
+          // if there is a selector
+          // filter/find appropriate item elements
+          $bricks = !selector ? $elems : 
+            $elems.filter( selector ).add( $elems.find( selector ) );
+      $bricks
+        .css({ position: 'absolute' })
+        .addClass('masonry-brick');
+      return $bricks;
+    },
+    
+    // sets up widget
+    _create : function( options ) {
+      
+      this.options = $.extend( true, {}, $.Mason.settings, options );
+      
+      this.styleQueue = [];
+      // need to get bricks
+      this.reloadItems();
+
+
+      // get original styles in case we re-apply them in .destroy()
+      var elemStyle = this.element[0].style;
+      this.originalStyle = {};
+      for ( var i=0, len = masonryContainerStyles.length; i < len; i++ ) {
+        var prop = masonryContainerStyles[i];
+        this.originalStyle[ prop ] = elemStyle[ prop ] || null;
+      }
+
+      this.element.css({
+        position : 'relative'
+      });
+      
+      this.horizontalDirection = this.options.isRTL ? 'right' : 'left';
+      this.offset = {};
+      
+      // get top left position of where the bricks should be
+      var $cursor = $( document.createElement('div') );
+      this.element.prepend( $cursor );
+      this.offset.y = Math.round( $cursor.position().top );
+      // get horizontal offset
+      if ( this.options.isRTL ) {
+        this.offset.x = Math.round( $cursor.position().left );
+      } else {
+        $cursor.css({ 'float': 'right', display: 'inline-block'});
+        this.offset.x = Math.round( this.element.outerWidth() - $cursor.position().left );
+      }
+      $cursor.remove();
+
+      // add masonry class first time around
+      var instance = this;
+      setTimeout( function() {
+        instance.element.addClass('masonry');
+      }, 0 );
+      
+      // bind resize method
+      if ( this.options.isResizable ) {
+        $(window).bind( 'smartresize.masonry', function() { 
+          instance.resize();
+        });
+      }
+      
+    },
+  
+    // _init fires when your instance is first created
+    // (from the constructor above), and when you
+    // attempt to initialize the widget again (by the bridge)
+    // after it has already been initialized.
+    _init : function( callback ) {
+      
+      this.reLayout( callback );
+
+    },
+
+    option: function( key, value ){
+      
+      // get/change options AFTER initialization:
+      // you don't have to support all these cases,
+      // but here's how:
+    
+      // signature: $('#foo').bar({ cool:false });
+      if ( $.isPlainObject( key ) ){
+        this.options = $.extend(true, this.options, key);
+    
+      // signature: $('#foo').option('cool');  - getter
+      } else if ( key && typeof value === "undefined" ){
+        return this.options[ key ];
+        
+      // signature: $('#foo').bar('option', 'baz', false);
+      } else {
+        this.options[ key ] = value;
+      }
+    
+      return this; // make sure to return the instance!
+    },
+    
+    // ====================== General Layout ======================
+
+    // used on collection of atoms (should be filtered, and sorted before )
+    // accepts atoms-to-be-laid-out to start with
+    layout : function( $bricks, callback ) {
+
+      // layout logic
+      var $brick, colSpan, groupCount, groupY, groupColY, j;
+      
+      for (var i=0, len = $bricks.length; i < len; i++) {
+        $brick = $( $bricks[i] );
+        //how many columns does this brick span
+        colSpan = Math.ceil( $brick.outerWidth(true) / this.columnWidth );
+        colSpan = Math.min( colSpan, this.cols );
+
+        if ( colSpan === 1 ) {
+          // if brick spans only one column, just like singleMode
+          this._placeBrick( $brick, this.cols, this.colYs );
+        } else {
+          // brick spans more than one column
+          // how many different places could this brick fit horizontally
+          groupCount = this.cols + 1 - colSpan;
+          groupY = [];
+
+          // for each group potential horizontal position
+          for ( j=0; j < groupCount; j++ ) {
+            // make an array of colY values for that one group
+            groupColY = this.colYs.slice( j, j+colSpan );
+            // and get the max value of the array
+            groupY[j] = Math.max.apply( Math, groupColY );
+          }
+        
+          this._placeBrick( $brick, groupCount, groupY );
+        }
+      }
+      
+      // set the size of the container
+      var containerSize = {};
+      containerSize.height = Math.max.apply( Math, this.colYs ) - this.offset.y;
+      if ( this.options.isFitWidth ) {
+        containerSize.width = this.cols * this.columnWidth - this.options.gutterWidth;
+      }
+      this.styleQueue.push({ $el: this.element, style: containerSize });
+
+      // are we animating the layout arrangement?
+      // use plugin-ish syntax for css or animate
+      var styleFn = !this.isLaidOut ? 'css' : (
+            this.options.isAnimated ? 'animate' : 'css'
+          ),
+          animOpts = this.options.animationOptions;
+
+      // process styleQueue
+      var obj;
+      for (i=0, len = this.styleQueue.length; i < len; i++) {
+        obj = this.styleQueue[i];
+        obj.$el[ styleFn ]( obj.style, animOpts );
+      }
+
+      // clear out queue for next time
+      this.styleQueue = [];
+
+      // provide $elems as context for the callback
+      if ( callback ) {
+        callback.call( $bricks );
+      }
+      
+      this.isLaidOut = true;
+
+      return this;
+    },
+    
+    // calculates number of columns
+    // i.e. this.columnWidth = 200
+    _getColumns : function() {
+      var container = this.options.isFitWidth ? this.element.parent() : this.element,
+          containerWidth = container.width();
+      
+      this.columnWidth = this.options.columnWidth ||
+                    // or use the size of the first item
+                    this.$bricks.outerWidth(true) ||
+                    // if there's no items, use size of container
+                    containerWidth;
+
+      this.columnWidth += this.options.gutterWidth;
+
+      this.cols = Math.floor( ( containerWidth + this.options.gutterWidth ) / this.columnWidth );
+      this.cols = Math.max( this.cols, 1 );
+
+      return this;
+
+    },
+
+    _placeBrick : function( $brick, setCount, setY ) {
+          // get the minimum Y value from the columns
+      var minimumY  = Math.min.apply( Math, setY ),
+          setHeight = minimumY + $brick.outerHeight(true),
+          i         = setY.length,
+          shortCol  = i,
+          setSpan   = this.cols + 1 - i,
+          position  = {};
+      // Which column has the minY value, closest to the left
+      while (i--) {
+        if ( setY[i] === minimumY ) {
+          shortCol = i;
+        }
+      }
+
+      // position the brick
+      position.top = minimumY;
+      // position.left or position.right
+      position[ this.horizontalDirection ] = this.columnWidth * shortCol + this.offset.x;
+      this.styleQueue.push({ $el: $brick, style: position });
+
+      // apply setHeight to necessary columns
+      for ( i=0; i < setSpan; i++ ) {
+        this.colYs[ shortCol + i ] = setHeight;
+      }
+
+    },
+    
+    
+    resize : function() {
+      var prevColCount = this.cols;
+      // get updated colCount
+      this._getColumns('masonry');
+      if ( this.cols !== prevColCount ) {
+        // if column count has changed, do a new column cound
+        this._reloadLayout();
+      }
+    },
+    
+    
+    reLayout : function( callback ) {
+      this._getColumns('masonry');
+      this._reloadLayout( callback );
+    },
+    
+    _reloadLayout : function( callback ) {
+      // reset columns
+      var i = this.cols;
+      this.colYs = [];
+      while (i--) {
+        this.colYs.push( this.offset.y );
+      }
+      // apply layout logic to all bricks
+      this.layout( this.$bricks, callback );
+    },
+    
+    // ====================== Convenience methods ======================
+    
+    // goes through all children again and gets bricks in proper order
+    reloadItems : function() {
+      this.$bricks = this._getBricks( this.element.children() );
+    },
+    
+    
+    reload : function( callback ) {
+      this.reloadItems();
+      this.reLayout( callback );
+    },
+    
+
+    // convienence method for working with Infinite Scroll
+    appended : function( $content, callback ) {
+      var $newBricks = this._getBricks( $content );
+      // add new bricks to brick pool
+      this.$bricks = this.$bricks.add( $newBricks );
+      this.layout( $newBricks, callback );
+    },
+    
+    // removes elements from Masonry widget
+    remove : function( $content ) {
+      this.$bricks = this.$bricks.not( $content );
+      $content.remove();
+    },
+    
+    // destroys widget, returns elements and container back (close) to original style
+    destroy : function() {
+
+      this.$bricks
+        .removeClass('masonry-brick')
+        .each(function(){
+          this.style.position = null;
+          this.style.top = null;
+          this.style.left = null;
+        });
+      
+      // re-apply saved container styles
+      var elemStyle = this.element[0].style;
+      for ( var i=0, len = masonryContainerStyles.length; i < len; i++ ) {
+        var prop = masonryContainerStyles[i];
+        elemStyle[ prop ] = this.originalStyle[ prop ];
+      }
+      
+      this.element
+        .unbind('.masonry')
+        .removeClass('masonry')
+        .removeData('masonry');
+      
+      $(window).unbind('.masonry');
+
+    }
+    
+  };
+  
+  
+  // ======================= imagesLoaded Plugin  ===============================
+  // A fork of http://gist.github.com/268257 by Paul Irish
+
+  // mit license. paul irish. 2010.
+  // webkit fix from Oren Solomianik. thx!
+
+  $.fn.imagesLoaded = function(callback){
+    var elems = this.find('img'),
+        len   = elems.length,
+        blank = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==",
+        _this = this;
+
+    // if no images, trigger immediately
+    if ( !len ) {
+      callback.call( this );
+      return this;
+    }
+    
+    elems.bind('load', function() {
+      if ( --len <= 0 && this.src !== blank ) {
+        callback.call( _this ); 
+      }
+    }).each(function(){
+      // cached images don't fire load sometimes, so we reset src.
+      if (this.complete || this.complete === undefined){
+        var src = this.src;
+        // webkit hack from http://groups.google.com/group/jquery-dev/browse_thread/thread/eee6ab7b2da50e1f
+        // data uri bypasses webkit log warning (thx doug jones)
+        this.src = blank;
+        this.src = src;
+      }  
+    }); 
+
+    return this;
+  };
+
+  
+  // =======================  Plugin bridge  ===============================
+  // leverages data method to either create or return $.Mason constructor
+  // A bit from jQuery UI
+  //   https://github.com/jquery/jquery-ui/blob/master/ui/jquery.ui.widget.js
+  // A bit from jcarousel 
+  //   https://github.com/jsor/jcarousel/blob/master/lib/jquery.jcarousel.js
+
+  $.fn.masonry = function( options ) {
+    if ( typeof options === 'string' ) {
+      // call method
+      var args = Array.prototype.slice.call( arguments, 1 );
+
+      return this.each(function(){
+        var instance = $.data( this, 'masonry' );
+        if ( !instance ) {
+          return $.error( "cannot call methods on masonry prior to initialization; " +
+            "attempted to call method '" + options + "'" );
+        }
+        if ( !$.isFunction( instance[options] ) || options.charAt(0) === "_" ) {
+          return $.error( "no such method '" + options + "' for masonry instance" );
+        }
+        // apply method
+        instance[ options ].apply( instance, args );
+      });
+    } else {
+      return this.each(function() {
+        var instance = $.data( this, 'masonry' );
+        if ( instance ) {
+          // apply options & init
+          instance.option( options || {} )._init();
+        } else {
+          // initialize new instance
+          $.data( this, 'masonry', new $.Mason( options, this ) );
+        }
+      });
+    }
+  };
+
+})( window, jQuery );
Index: tensions/Float/js/masonry.min.js
===================================================================
--- /extensions/Float/js/masonry.min.js	(revision 25979)
+++ 	(revision )
@@ -1,10 +1,0 @@
-/**
- * Vanilla Masonry v1.0.02
- * Dynamic layouts for the flip-side of CSS Floats
- * http://vanilla-masonry.desandro.com
- *
- * Licensed under the MIT license.
- * Copyright 2011 David DeSandro
- */
-(function(a,b){function r(a,b){if(!!a){this.element=a,this.options={};for(var c in r.defaults)this.options[c]=r.defaults[c];for(c in b)this.options[c]=b[c];this._create(),this.build()}}function q(a,b,c){a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent&&(a.detachEvent("on"+b,a[b+c]),a[b+c]=null,a["e"+b+c]=null)}function p(b,c,d){b.addEventListener?b.addEventListener(c,d,!1):b.attachEvent&&(b["e"+c+d]=d,b[c+d]=function(){b["e"+c+d](a.event)},b.attachEvent("on"+c,b[c+d]))}function o(a,b,c){var d=b!=="height",e=d?a.offsetWidth:a.offsetHeight,f=d?"Left":"Top",g=d?"Right":"Bottom",h=j(a),i=parseFloat(h["padding"+f])||0,k=parseFloat(h["padding"+g])||0,l=parseFloat(h["border"+f+"Width"])||0,o=parseFloat(h["border"+g+"Width"])||0,p=h["margin"+f],q=h["margin"+g],r,s;m||(p=n(a,h,p),q=n(a,h,q)),r=parseFloat(p)||0,s=parseFloat(q)||0;if(e>0)c?e+=r+s:e-=i+k+l+o;else{e=h[b];if(e<0||e==null)e=a.style[b]||0;e=parseFloat(e)||0,c&&(e+=i+k+r+s+l+o)}return e}function n(a,b,c){if(c.indexOf("%")===-1)return c;var d=a.style,e=d.width,f;d.width=c,f=b.width,d.width=e;return f}function e(a){return new RegExp("(^|\\s+)"+a+"(\\s+|$)")}"use strict";var c=a.document,d="classList"in c.createElement("div"),f=d?function(a,b){return a.classList.contains(b)}:function(a,b){return e(b).test(a.className)},g=d?function(a,b){a.classList.add(b)}:function(a,b){f(a,b)||(a.className=a.className+" "+b)},h=d?function(a,b){a.classList.remove(b)}:function(a,b){a.className=a.className.replace(e(b)," ")},i=c.defaultView,j=i&&i.getComputedStyle?function(a){return i.getComputedStyle(a,null)}:function(a){return a.currentStyle},k=c.getElementsByTagName("body")[0],l=c.createElement("div");l.style.marginTop="1%",k.appendChild(l);var m=j(l).marginTop!=="1%";k.removeChild(l);var s=["position","height"];r.defaults={isResizable:!0,gutterWidth:0,isRTL:!1,isFitWidth:!1},r.prototype={_getBricks:function(a){var b;for(var c=0,d=a.length;c<d;c++)b=a[c],b.style.position="absolute",g(b,"masonry-brick"),this.bricks.push(b)},_create:function(){this.reloadItems();var b=this.element.style;this._originalStyle={};for(var c=0,d=s.length;c<d;c++){var e=s[c];this._originalStyle[e]=b[e]||""}this.element.style.position="relative",this.horizontalDirection=this.options.isRTL?"right":"left",this.offset={};var f=j(this.element),h=this.options.isRTL?"paddingRight":"paddingLeft";this.offset.y=parseFloat(f.paddingTop)||0,this.offset.x=parseFloat(f[h])||0,this.isFluid=this.options.columnWidth&&typeof this.options.columnWidth=="function";var i=this;setTimeout(function(){g(i.element,"masonry")}),this.options.isResizable&&p(a,"resize",function(){i._handleResize()})},build:function(a){this._getColumns(),this._reLayout(a)},_getColumns:function(){var a=this.options.isFitWidth?this.element.parentNode:this.element,b=o(a,"width");this.columnWidth=this.isFluid?this.options.columnWidth(b):this.options.columnWidth||o(this.bricks[0],"width",!0)||b,this.columnWidth+=this.options.gutterWidth,this.cols=Math.floor((b+this.options.gutterWidth)/this.columnWidth),this.cols=Math.max(this.cols,1)},reloadItems:function(){this.bricks=[],this._getBricks(this.element.children)},_reLayout:function(a){var b=this.cols;this.colYs=[];while(b--)this.colYs.push(0);this.layout(this.bricks,a)},layout:function(a,b){var c,d,e,f,g,h,i;for(var j=0,k=a.length;j<k;j++){c=a[j];if(c.nodeType!==1)continue;d=Math.ceil(o(c,"width",!0)/(this.columnWidth+this.options.gutterWidth)),d=Math.min(d,this.cols);if(d===1)i=this.colYs;else{e=this.cols+1-d,i=[];for(h=0;h<e;h++)g=this.colYs.slice(h,h+d),i[h]=Math.max.apply(Math,g)}var l=Math.min.apply(Math,i);for(var m=0,n=i.length;m<n;m++)if(i[m]===l)break;c.style.top=l+this.offset.y+"px",c.style[this.horizontalDirection]=this.columnWidth*m+this.offset.x+"px";var p=l+o(c,"height",!0),q=this.cols+1-n;for(h=0;h<q;h++)this.colYs[m+h]=p}var r={};this.element.style.height=Math.max.apply(Math,this.colYs)+"px";if(this.options.isFitWidth){var s=0;j=this.cols;while(--j){if(this.colYs[j]!==0)break;s++}this.element.style.width=(this.cols-s)*this.columnWidth-this.options.gutterWidth+"px"}b&&b.call(a)},_handleResize:function(){function b(){a.resize(),a._resizeTimeout=null}var a=this;this._resizeTimeout&&clearTimeout(this._resizeTimeout),this._resizeTimeout=setTimeout(b,100)},resize:function(){var a=this.cols;this._getColumns(),(this.isFluid||this.cols!==a)&&this._reLayout()},reload:function(a){this.reloadItems(),this.build(a)},appended:function(a,b,c){var d=this,e=function(){d._appended(a,c)};if(b){var f=o(this.element,"height")+"px";for(var g=0,h=a.length;g<h;g++)a[g].style.top=f;setTimeout(e,1)}else e()},_appended:function(a,b){this._getBricks(a),this.layout(a,b)},destroy:function(){var b;for(var c=0,d=this.bricks.length;c<d;c++)b=this.bricks[c],b.style.position="",b.style.top="",b.style.left="",h(b,"masonry-brick");var e=this.element.style;d=s.length;for(c=0;c<d;c++){var f=s[c];e[f]=this._originalStyle[f]}h(this.element,"masonry"),this.resizeHandler&&q(a,"resize",this.resizeHandler)}},r.getWH=o,a.Masonry=r})(window);
-
Index: /extensions/Float/local_head.tpl
===================================================================
--- /extensions/Float/local_head.tpl	(revision 25979)
+++ /extensions/Float/local_head.tpl	(revision 25980)
@@ -1,5 +1,1 @@
-	<!--[if lt IE 8]>
-		<link rel="stylesheet" type="text/css" href="{$ROOT_URL}themes/elegant/fix-ie7.css">
-	<![endif]-->
-	
-{combine_script id='jquery.masonry.min' require='jquery' path='themes/Float/js/masonry.min.js' load='footer'}
+{combine_script id='jquery.masonry.min' require='jquery' path='themes/Float/js/masonry.js' load='footer'}
Index: tensions/Float/template/index.tpl
===================================================================
--- /extensions/Float/template/index.tpl	(revision 25979)
+++ 	(revision )
@@ -1,221 +1,0 @@
-{$MENUBAR}
-{if !empty($PLUGIN_INDEX_CONTENT_BEFORE)}{$PLUGIN_INDEX_CONTENT_BEFORE}{/if}
-
-
-<div id="content" class="content{if isset($MENUBAR)} contentWithMenu{/if}">
-
-<div class="titrePage{if isset($chronology.TITLE)} calendarTitleBar{/if}">
-	<ul class="categoryActions">
-{if !empty($image_orders)}
-		<li>{strip}<a id="sortOrderLink" title="{'Sort order'|@translate}" class="pwg-state-default pwg-button" rel="nofollow">
-			<span class="pwg-icon pwg-icon-sort">&nbsp;</span><span class="pwg-button-text">{'Sort order'|@translate}</span>
-		</a>
-		<div id="sortOrderBox" class="switchBox">
-			<div class="switchBoxTitle">{'Sort order'|@translate}</div>
-			{foreach from=$image_orders item=image_order name=loop}{if !$smarty.foreach.loop.first}<br>{/if}
-			{if $image_order.SELECTED}
-			<span>&#x2714; </span>{$image_order.DISPLAY}
-			{else}
-			<span style="visibility:hidden">&#x2714; </span><a href="{$image_order.URL}" rel="nofollow">{$image_order.DISPLAY}</a>
-			{/if}
-			{/foreach}
-		</div>
-		{/strip}</li>
-{/if}
-{if !empty($image_derivatives)}
-		<li>{strip}<a id="derivativeSwitchLink" title="{'Photo sizes'|@translate}" class="pwg-state-default pwg-button" rel="nofollow">
-			<span class="pwg-icon pwg-icon-sizes">&nbsp;</span><span class="pwg-button-text">{'Photo sizes'|@translate}</span>
-		</a>
-		<div id="derivativeSwitchBox" class="switchBox">
-			<div class="switchBoxTitle">{'Photo sizes'|@translate}</div>
-			{foreach from=$image_derivatives item=image_derivative name=loop}{if !$smarty.foreach.loop.first}<br>{/if}
-			{if $image_derivative.SELECTED}
-			<span>&#x2714; </span>{$image_derivative.DISPLAY}
-			{else}
-			<span style="visibility:hidden">&#x2714; </span><a href="{$image_derivative.URL}" rel="nofollow">{$image_derivative.DISPLAY}</a>
-			{/if}
-			{/foreach}
-		</div>
-		{/strip}</li>
-{/if}
-
-
-{if isset($favorite)}
-		<li><a href="{$favorite.U_FAVORITE}" title="{'delete all photos from your favorites'|@translate}" class="pwg-state-default pwg-button" rel="nofollow">
-			<span class="pwg-icon pwg-icon-favorite-del">&nbsp;</span><span class="pwg-button-text">{'delete all photos from your favorites'|@translate}</span>
-		</a></li>
-{/if}
-{if isset($U_CADDIE)}
-		<li><a href="{$U_CADDIE}" title="{'Add to caddie'|@translate}" class="pwg-state-default pwg-button">
-			<span class="pwg-icon pwg-icon-caddie-add">&nbsp;</span><span class="pwg-button-text">{'Caddie'|@translate}</span>
-		</a></li>
-{/if}
-{if isset($U_EDIT)}
-		<li><a href="{$U_EDIT}" title="{'Edit album'|@translate}" class="pwg-state-default pwg-button">
-			<span class="pwg-icon pwg-icon-category-edit">&nbsp;</span><span class="pwg-button-text">{'Edit'|@translate}</span>
-		</a></li>
-{/if}
-{if isset($U_SEARCH_RULES)}
-		{combine_script id='core.scripts' load='async' path='themes/default/js/scripts.js'}
-		<li><a href="{$U_SEARCH_RULES}" onclick="popuphelp(this.href); return false;" title="{'Search rules'|@translate}" class="pwg-state-default pwg-button" rel="nofollow">
-			<span class="pwg-icon pwg-icon-help">&nbsp;</span><span class="pwg-button-text">(?)</span>
-		</a></li>
-{/if}
-{if isset($U_SLIDESHOW)}
-		<li>{strip}<a href="{$U_SLIDESHOW}" title="{'slideshow'|@translate}" class="pwg-state-default pwg-button" rel="nofollow">
-			<span class="pwg-icon pwg-icon-slideshow">&nbsp;</span><span class="pwg-button-text">{'slideshow'|@translate}</span>
-		</a>{/strip}</li>
-{/if}
-{if isset($U_MODE_FLAT)}
-		<li>{strip}<a href="{$U_MODE_FLAT}" title="{'display all photos in all sub-albums'|@translate}" class="pwg-state-default pwg-button" rel="nofollow">
-			<span class="pwg-icon pwg-icon-category-view-flat">&nbsp;</span><span class="pwg-button-text">{'display all photos in all sub-albums'|@translate}</span>
-		</a>{/strip}</li>
-{/if}
-{if isset($U_MODE_NORMAL)}
-		<li>{strip}<a href="{$U_MODE_NORMAL}" title="{'return to normal view mode'|@translate}" class="pwg-state-default pwg-button">
-			<span class="pwg-icon pwg-icon-category-view-normal">&nbsp;</span><span class="pwg-button-text">{'return to normal view mode'|@translate}</span>
-		</a>{/strip}</li>
-{/if}
-{if isset($U_MODE_POSTED)}
-		<li>{strip}<a href="{$U_MODE_POSTED}" title="{'display a calendar by posted date'|@translate}" class="pwg-state-default pwg-button" rel="nofollow">
-			<span class="pwg-icon pwg-icon-calendar">&nbsp;</span><span class="pwg-button-text">{'Calendar'|@translate}</span>
-		</a>{/strip}</li>
-{/if}
-{if isset($U_MODE_CREATED)}
-		<li>{strip}<a href="{$U_MODE_CREATED}" title="{'display a calendar by creation date'|@translate}" class="pwg-state-default pwg-button" rel="nofollow">
-			<span class="pwg-icon pwg-icon-camera-calendar">&nbsp;</span><span class="pwg-button-text">{'Calendar'|@translate}</span>
-		</a>{/strip}</li>
-{/if}
-{if !empty($PLUGIN_INDEX_ACTIONS)}{$PLUGIN_INDEX_ACTIONS}{/if}
-
-
-
-
-	</ul>
-
-
-
-
-
-
-
-
-
-
-<h2>{$TITLE}</h2>
-
-
-
-
-
-
-
-{if isset($chronology_views)}
-<div class="calendarViews">{'View'|@translate}:
-	<select onchange="document.location = this.options[this.selectedIndex].value;">
-		{foreach from=$chronology_views item=view}
-		<option value="{$view.VALUE}"{if $view.SELECTED} selected="selected"{/if}>{$view.CONTENT}</option>
-		{/foreach}
-	</select>
-</div>
-{/if}
-
-
-{if isset($chronology.TITLE)}
-<h2 class="calendarTitle">{$chronology.TITLE}</h2>
-{/if}
-
-
-
-
-
-
-
-
-
-
-
-
-
-</div>{* <!-- titrePage --> *}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-{if isset($errors) or not empty($infos)}
-{include file='infos_errors.tpl'}
-{/if}
-{if !empty($PLUGIN_INDEX_CONTENT_BEGIN)}{$PLUGIN_INDEX_CONTENT_BEGIN}{/if}
-
-
-
-{if !empty($category_search_results)}
-<div style="font-size:16px;margin:10px 16px">{'Album results for'|@translate} <strong>{$QUERY_SEARCH}</strong> :
-	<em><strong>
-	{foreach from=$category_search_results item=res name=res_loop}
-	{if !$smarty.foreach.res_loop.first} &mdash; {/if}
-	{$res}
-	{/foreach}
-	</strong></em>
-</div>
-{/if}
-
-
-
-
-{if !empty($tag_search_results)}
-<div style="font-size:16px;margin:10px 16px">{'Tag results for'|@translate} <strong>{$QUERY_SEARCH}</strong> :
-	<em><strong>
-	{foreach from=$tag_search_results item=res name=res_loop}
-	{if !$smarty.foreach.res_loop.first} &mdash; {/if}
-	{$res}
-	{/foreach}
-	</strong></em>
-</div>
-{/if}
-
-
-
-
-
-{if isset($FILE_CHRONOLOGY_VIEW)}
-{include file=$FILE_CHRONOLOGY_VIEW}
-{/if}
-
-
-{if !empty($CONTENT_DESCRIPTION)}
-<div class="additional_info">
-	{$CONTENT_DESCRIPTION}
-</div>
-{/if}
-
-
-
-
-{if !empty($CATEGORIES)}{$CATEGORIES}{/if}
-{if !empty($THUMBNAILS)}
-
-{$THUMBNAILS}
-
-{/if}
-
-
-{if !empty($navbar)}{include file='navigation_bar.tpl'|@get_extent:'navbar'}{/if}
-
-{if !empty($PLUGIN_INDEX_CONTENT_END)}{$PLUGIN_INDEX_CONTENT_END}{/if}
-</div>{* <!-- content --> *}
-{if !empty($PLUGIN_INDEX_CONTENT_AFTER)}{$PLUGIN_INDEX_CONTENT_AFTER}{/if}
-
-
-
Index: /extensions/Float/template/mainpage_categories.tpl
===================================================================
--- /extensions/Float/template/mainpage_categories.tpl	(revision 25979)
+++ /extensions/Float/template/mainpage_categories.tpl	(revision 25980)
@@ -1,4 +1,4 @@
+{define_derivative name='derivative_params' type='xsmall'}
 {html_style}
-
 {if $derivative_params->max_width() > 600}
 .thumbLegend {ldelim}font-size: 130%}
@@ -14,9 +14,8 @@
 <div class="thumbContent">
 
-<div id="container" >
+<div id="container">
 
 {foreach from=$category_thumbnails item=cat name=cat_loop}
-	<div class="box photo colMainpage">
-	<li class="{if $smarty.foreach.comment_loop.index is odd}odd{else}even{/if}">
+	<div class="box {if $smarty.foreach.comment_loop.index is odd}odd{else}even{/if}">
 		<div class="thumbnailCategory">
 			<div class="illustration">
@@ -44,5 +43,4 @@
 			</div>
 		</div>
-	</li>
 	</div>
 {/foreach}
@@ -51,15 +49,16 @@
 </div>
 {footer_script require='jquery'}{literal}
-			window.onload = function() {
-			  var wall1 = new Masonry( document.getElementById('container'), {
-				gutterWidth: 10,
-				isFitWidth: true,
-			  });
-				var wall2 = new Masonry( document.getElementById('containerThumb'), {
-				gutterWidth: 10,
-				isFitWidth: true,
-			  });
+  $(function(){
 
-			};
+    var $container = $('#container');
+  
+    $container.imagesLoaded( function(){
+      $container.masonry({
+        itemSelector : '.box',
+		isFitWidth: true
+      });
+    });
+  
+  });
 {/literal}{/footer_script}
 </div>
Index: /extensions/Float/template/thumbnails.tpl
===================================================================
--- /extensions/Float/template/thumbnails.tpl	(revision 25979)
+++ /extensions/Float/template/thumbnails.tpl	(revision 25980)
@@ -1,2 +1,3 @@
+{define_derivative name='derivative_params' type='xsmall'}
 {if !empty($thumbnails)}{strip}
 
@@ -41,5 +42,5 @@
 
 <div class="thumbContent">
-<div id="containerThumb" class="clearfix">
+<div id="containerThumb">
 
 {foreach from=$thumbnails item=thumbnail}
@@ -90,15 +91,16 @@
 </div>		
 {footer_script require='jquery'}{literal}
-			window.onload = function() {
-			  var wall1 = new Masonry( document.getElementById('container'), {
-				gutterWidth: 10,
-				isFitWidth: true
-			  });
-				var wall2 = new Masonry( document.getElementById('containerThumb'), {
-				gutterWidth: 10,
-				isFitWidth: true
-			  });
+  $(function(){
 
-			};
+    var $container = $('#containerThumb');
+  
+    $container.imagesLoaded( function(){
+      $container.masonry({
+        itemSelector : '.box',
+		isFitWidth: true
+      });
+    });
+  
+  });
 {/literal}{/footer_script}
 </div>
Index: /extensions/Float/theme.css
===================================================================
--- /extensions/Float/theme.css	(revision 25979)
+++ /extensions/Float/theme.css	(revision 25980)
@@ -50,6 +50,6 @@
 ul#topnav #loger ul li a:hover,ul#topnav .sub ul li a:hover,ul#topnav .sub #menuTagCloud div a:hover,ul#topnav .liSub dt a:hover{color:#c2c2c2}
 #topnav .liSub{background:none}
-#topnav .sub, #topnav #loger{top:35px;border-radius:0;box-shadow:5px 5px 20px #000;background:rgba(0, 0, 0, 0.8)}
-ul#topnav .sub ul li,ul#topnav #loger ul li,ul#topnav .sub #menuTagCloud div{border:none}
+ul#topnav li .sub, ul#topnav li #loger{top:35px;border-radius:0;box-shadow:5px 5px 20px #000;background:rgba(0, 0, 0, 0.95)}
+ul#topnav .sub ul li,ul#topnav #loger ul li,ul#topnav .sub #menuTagCloud div{border:1px solid #2c2c2c}
 ul#topnav .sub ul li a,ul#topnav #loger ul li a{background:none}
 ul#topnav .sub ul li a:hover,ul#topnav .sub #menuTagCloud div a:hover{color:#c2c2c2}
@@ -65,5 +65,4 @@
 #go INPUT[type=submit]:active{color:#c2c2c2;background:-moz-linear-gradient(center top , #555555, #2C2C2C);box-shadow:1px 1px 1px #000 inset,0px 1px 0px rgba(255,255,255,0.4)}
 
-
 /*======================================================Panel======================================================*/
 .panel .switchBox{top:60px}
@@ -71,6 +70,28 @@
 
 /*======================================================Vanilla======================================================*/
-#container,#containerThumb{padding:5px;margin-bottom:20px;clear:both;margin-left:auto;margin-right:auto}
-.box li{list-style: none outside none}
-.box img{display:block;margin-left:auto;margin-right:auto}
-.col img{width:100%}
+
+/*.box {
+  margin: 5px;
+  padding: 5px;
+  background: #D8D5D2;
+  font-size: 11px;
+  line-height: 1.4em;
+  float: left;
+  -webkit-border-radius: 5px;
+     -moz-border-radius: 5px;
+          border-radius: 5px;
+}*/
+
+.box img{
+  display: block;
+  width: 100%;
+}
+
+.rtl .box {
+  float: right;
+  text-align: right; 
+  direction: rtl;
+}
+
+#container,#containerThumb { margin: 0 auto; }
+
Index: /extensions/Float/themeconf.inc.php
===================================================================
--- /extensions/Float/themeconf.inc.php	(revision 25979)
+++ /extensions/Float/themeconf.inc.php	(revision 25980)
@@ -2,5 +2,5 @@
 /*
 Theme Name: Float
-Version: auto
+Version: 1.3.0
 Description: Piwigo theme.
 Theme URI: http://piwigo.org/ext/extension_view.php?eid=642
