(function ($) {
	$.fn.fixedDock = function(cfn) {
		
		var o = {
			offsetHorizonal: 0,
			offsetTop: 0,
			toRight: false,
			zIndex: 100,
			movedTop:  true,
			button: {
				top: 10,
				bottom: 10,
				space: 5
			}
		}	
		

		var e = {}
		
		e.click = function togle(box,i) {
			if( box.mi[i].old.isOpen ) {
				e.close( box,i );
			} else {
				e.closeAll(box);	
				e.open( box,i );
			}
		}
		
		e.open = function(box,i,speed) {
			if(speed!=undefined) speed = 200;
			var m = box.mi[i];
			m.old.width = m.width();
			m.css('z-index', box.o.zIndex + 1);
			// m.width( m.old.width + m.find('.toggler:first').outerWidth());
			m.stop().animate({
				clip: 'rect(auto, 800px, auto, auto)',
				"marginLeft": m.old.marginLeft
			},200, function() { m.old.isOpen = true;  })
		}
		
		e.close = function(box,i,speed) {
			if(speed!=undefined) speed = 200			
			var m = box.mi[i];
			m.old.width = m.width();
			m.css('z-index', box.o.zIndex + 2);
			m.stop().animate({
				clip: 'rect(auto, 800px, auto, ' + m.old.marginLeftClose *(-1) +'px)',
				'marginLeft': m.old.marginLeftClose
			}, speed, function() { m.old.isOpen = false; } )
		}

		e.closeAll = function(box) {
			for(i=0; i<box.mi.length;i++) {
				// if(box.mi[i].old.isOpen)
				e.close(box,i);
			}
		}
		
		o.test = function () { alert('test')}
		
		o.init = function( box ) {
			$(box).find('.float-widget').each( function( ) 
			{
				var i = box.mi.length;
				box.mi[i] = $(this).css('display','inline').css('position','absolute');
				box.mi[i].old = {};
				o.build(box, i);
				o.setPos(box,i);
				e.close(box,i,1);
	
			});
		}
		
		o.build = function( box, i) {
			var m = box.mi[i];
			var b = $(m).find('.toggler:first');

			b.css('position','absolute');
			

						
			if(box.o.toRight) {
				// @todo to right = true position
			} else {
				b.css('margin-left', parseInt( m.outerWidth() ) );
			}
			
			// m.css( 'margin-top', box.nextOffset );
			if(box.nextOffset == 0) {
				box.nextOffset = box.nextOffset + box.o.button.top;				
			} else {
				box.nextOffset = box.nextOffset + m.find('.toggler:first').outerHeight() + box.o.button.space;
			}
			
			b.css('margin-top', box.nextOffset);
			
			b.click( function () { e.click( box, i )} );
			
		}
		
		o.setPos = function(box,i) {
			var m = box.mi[i];
			m.old.isOpen = false;
			m.css('z-index', box.o.zIndex + 2);
			if(box.o.toRight) {
				
			} else {
				m.old.marginLeft = parseInt ( m.css('margin-left') ) + box.o.offsetHorizonal;
				m.old.marginLeftClose = -m.outerWidth();
				m.css('margin-left', m.old.marginLeftClose );	
			}
			
		}
		
		o.updateHeight = function () {
			var minHeight = this.nextOffset + this.o.button.bottom + $(this).find('.toggler:last').outerHeight();
			for(var i = 0; i< this.mi.length; i++) {
				var m = this.mi[i];
				if( m.height() < minHeight) {
					// alert(minHeight);
					m.height(minHeight);
				}
			}
		}
		
		o.updateTop = function( box ) {
			if(box.o.movedTop) {

				if($(box).css('position') != 'absolute') return;
				
				clearTimeout(this.movetToTimeStamp)
				var scrollTop = $(document).scrollTop();
				this.movetToTimeStamp = setTimeout( function() {

					$(box).animate({
						"top" : parseInt( scrollTop + box.o.offsetTop )
					})

				}, 300)				
			}	
		}
		
		
		
		
		return this.each(function(){
			
			this.o = $.extend({}, o, cfn);
			this.mi = []; 				// menu elements instance
			this.nextOffset = 0;		// ofsset o jaki zostanie przesuniety w pionie nastepny element
			this.updateHeight = o.updateHeight;
		 			

			if(parseInt($(this).css('z-index')) > 0) {
				this.o.zIndex = parseInt($(this).css('z-index')); 
			}

			if( $(this).css('top') != 'auto' ) {
				this.o.offsetTop = parseInt($(this).css('top'));
				$(this).css('top',-5000);
			}
			
			this.o.init(this);
			this.updateHeight();
			var box = this;
			$(document).scroll( function() { o.updateTop( box ) });
			o.updateTop( box );	
			
			return $(this);
			
				 
		});
		
		
	}
})(jQuery);

		var sv = function sv(m,v) {
			alert( m.old );
			// m.width(v);

		}

