function Float()
{	
	this.floatBy = function(dim, object, padX, padY)
	{
		switch (dim)
		{
			case 1: floatByTopLeft(object, padX, padY); break;
			case 2: floatByTopCenter(object, padX); break;
			case 3: floatByTopRight(object, padX, padY); break;
			
			case 4: floatByMiddleLeft(object, padX, padY); break;
			case 5: floatByMiddleCenter(object); break;
			case 6: floatByMiddleRight(object, padX, padY); break;
			
			case 7: floatByBottomLeft(object, padX, padY); break;
			case 8: floatByBottomCenter(object, padX); break;
			case 9: floatByBottomRight(object, padX, padY); break;
			
			default: floatByMiddleCenter(object);
		}
	}

	function floatByTopLeft(object, padTop, padLeft) // 1
	{
		function move()
		{
			if (object.style.display == 'none')
				return true;
			
			var parm = getParams();
			
			if (!padLeft)
				var left = parm.sl;
			else
				var left = parm.sl + padLeft;
			
			if (!padTop)
				var top = parm.st;
			else
				var top = parm.st + padTop;
				
				
			if (is_n4)
			{
				object.left = left;
				object.top = top;
			}
			else if (is_ie)
			{
				object.style.pixelLeft = left;
				object.style.pixelTop = top;
			}
			else
			{
				object.style.left = left + "px";
				object.style.top = top + "px";
			}
		}
		
		windowOnMove(object, move);		
	}
	
	function floatByTopCenter(object, padTop) // 2
	{
		function move()
		{
			if (object.style.display == 'none')
				return true;
			
			var parm = getParams();
			
			var left = parm.sl + (parm.cw - parseInt(object.style.width)) / 2;
			
			if (!padTop)
				var top = parm.st;
			else
				var top = parm.st + padTop;
				
				
			if (is_n4)
			{
				object.left = left;
				object.top = top;
			}
			else if (is_ie)
			{
				object.style.pixelLeft = left;
				object.style.pixelTop = top;
			}
			else
			{
				object.style.left = left + "px";
				object.style.top = top + "px";
			}
		}
		
		windowOnMove(object, move);		
	}
	
	function floatByTopRight(object, padTop, padRight) // 3
	{
		function move()
		{
			if (object.style.display == 'none')
				return true;
			
			var parm = getParams();
			
			if (!padRight)
				var left = parm.sl + parm.cw - parseInt(object.style.width);
			else
				var left = parm.sl + parm.cw - parseInt(object.style.width) - padRight;
			
			if (!padTop)
				var top = parm.st;
			else
				var top = parm.st + padTop;
				
				
			if (is_n4)
			{
				object.left = left;
				object.top = top;
			}
			else if (is_ie)
			{
				object.style.pixelLeft = left;
				object.style.pixelTop = top;
			}
			else
			{
				object.style.left = left + "px";
				object.style.top = top + "px";
			}
		}
		
		windowOnMove(object, move);		
	}

	function floatByMiddleLeft(object, padLeft) // 4
	{
		function move()
		{
			if (object.style.display == 'none')
				return true;
			
			var parm = getParams();
			
			if (!padLeft)
				var left = parm.sl;
			else
				var left = parm.sl + padLeft;
			
			var top = parm.st + (parm.ch - parseInt(object.style.height)) / 2;
				
			if (is_n4)
			{
				object.left = left;
				object.top = top;
			}
			else if (is_ie)
			{
				object.style.pixelLeft = left;
				object.style.pixelTop = top;
			}
			else
			{
				object.style.left = left + "px";
				object.style.top = top + "px";
			}
		}
		
		windowOnMove(object, move);		
	}
	
	function floatByMiddleCenter(object) // 5
	{
		function move()
		{
			if (object.style.display == 'none')
				return true;
			
			var parm = getParams();
			var left = parm.sl + (parm.cw - parseInt(object.style.width)) / 2;
			var top = parm.st + (parm.ch - parseInt(object.style.height)) / 2;
			
			if (is_n4)
			{
				object.left = left;
				object.top = top;
			}
			else if (is_ie)
			{
				object.style.pixelLeft = left;
				object.style.pixelTop = top;
			}
			else
			{
				object.style.left = left + "px";
				object.style.top = top + "px";
			}
		}
		
		windowOnMove(object, move);
		
	}	
	
	function floatByMiddleRight(object, padRight) // 6
	{
		function move()
		{
			if (object.style.display == 'none')
				return true;
			
			var parm = getParams();
			
			if (!padRight)
				var left = parm.sl + parm.cw - parseInt(object.style.width);
			else
				var left = parm.sl + parm.cw - parseInt(object.style.width) - padRight;
			
			var top = parm.st + (parm.ch - parseInt(object.style.height)) / 2;
				
			if (is_n4)
			{
				object.left = left;
				object.top = top;
			}
			else if (is_ie)
			{
				object.style.pixelLeft = left;
				object.style.pixelTop = top;
			}
			else
			{
				object.style.left = left + "px";
				object.style.top = top + "px";
			}
		}
		
		windowOnMove(object, move);		
	}
	
	function floatByBottomLeft(object, padBottom, padLeft) // 7
	{
		function move()
		{
			if (object.style.display == 'none')
				return true;
			
			var parm = getParams();
			
			if (!padLeft)
				var left = parm.sl;
			else
				var left = parm.sl + padLeft;
			
			if (!padBottom)
				var top = parm.st + parm.ch - parseInt(object.style.height);
			else
				var top = parm.st + parm.ch - parseInt(object.style.height) - padBottom;
				
			if (is_n4)
			{
				object.left = left;
				object.top = top;
			}
			else if (is_ie)
			{
				object.style.pixelLeft = left;
				object.style.pixelTop = top;
			}
			else
			{
				object.style.left = left + "px";
				object.style.top = top + "px";
			}
		}
		
		windowOnMove(object, move);		
	}
	
	function floatByBottomCenter(object, padBottom) // 8
	{
		function move()
		{
			if (object.style.display == 'none')
				return true;
			
			var parm = getParams();
			
			var left = parm.sl + (parm.cw - parseInt(object.style.width)) / 2;
			
			if (!padBottom)
				var top = parm.st + parm.ch - parseInt(object.style.height);
			else
				var top = parm.st + parm.ch - parseInt(object.style.height) - padBottom;
				
				
			if (is_n4)
			{
				object.left = left;
				object.top = top;
			}
			else if (is_ie)
			{
				object.style.pixelLeft = left;
				object.style.pixelTop = top;
			}
			else
			{
				object.style.left = left + "px";
				object.style.top = top + "px";
			}
		}
		
		windowOnMove(object, move);		
	}
	
	function floatByBottomRight(object, padBottom, padRight) // 9 
	{
		function move()
		{
			if (object.style.display == 'none')
				return true;
			
			var parm = getParams();
			
			if (!padRight)
				var left = parm.sl + parm.cw - parseInt(object.style.width);
			else
				var left = parm.sl + parm.cw - parseInt(object.style.width) - padRight;
			
			if (!padBottom)
				var top = parm.st + parm.ch - parseInt(object.style.height);
			else
				var top = parm.st + parm.ch - parseInt(object.style.height) - padBottom;
				
				
			if (is_n4)
			{
				object.left = left;
				object.top = top;
			}
			else if (is_ie)
			{
				object.style.pixelLeft = left;
				object.style.pixelTop = top;
			}
			else
			{
				object.style.left = left + "px";
				object.style.top = top + "px";
			}
		}
		
		windowOnMove(object, move);		
	}	
	
	function windowOnMove(object, functionToRun)
	{
		if (!object)
		{
			alert('no elements to move');
			return false;
		}
		
		// FIXME CODE REPEATING
		/*
		var parm = getParams();
		var left = parm.sl + (parm.cw - parseInt(object.style.width)) / 2;
		var top = parm.st + (parm.ch - parseInt(object.style.height)) / 2;
		
		if (is_n4)
		{
			object.left = left;
			object.top = top;
		}
		else if (is_ie)
		{
			object.style.pixelLeft = left;
			object.style.pixelTop = top;
		}
		else
		{
			object.style.left = left + "px";
			object.style.top = top + "px";
		}
		*/
		//object.style.position = 'absolute';
		//object.style.display = 'block';
		
		if (document.addEventListener && document.attachEvent) // Opera
		{
			document.attachEvent("onscroll", functionToRun, false);
		}
		else if (document.addEventListener) // FF
		{
			document.addEventListener("scroll", functionToRun, false);
		}
		else // dolbanyj IE ne podderzhyvaet multi eventy
		{
			if (typeof window.onscroll == 'function')
			{
				var oldFunction = window.onscroll;
				window.onscroll = function()
				{
					
					oldFunction();
					functionToRun();
				}
			}
			else
			{
				window.onscroll = functionToRun;
			}
		}
		window.onresize = functionToRun;

        var parm = getParams();
        var left = parm.sl + (parm.cw - parseInt(object.style.width)) / 2;
        var top = parm.st + (parm.ch - parseInt(object.style.height)) / 2;
 
        if (is_n4)
        {
            object.left = left;
            object.top = top;
        }
        else if (is_ie)
        {
            object.style.pixelLeft = left;
            object.style.pixelTop = top;
        }
        else
	    {
            object.style.left = left + "px";
            object.style.top = top + "px";
        }

		object.style.position = 'absolute';
		object.style.display = 'block';
		functionToRun();
	}
	
	function getParams()
	{
		var obj = new Object();
		obj.st = (document.body.scrollTop) ? document.body.scrollTop : document.documentElement.scrollTop;
		obj.sl = (document.body.scrollLeft) ? document.body.scrollLeft : document.documentElement.scrollLeft;
			
		if (is_gecko || is_ie)
		{
			obj.ch = document.documentElement.clientHeight;
			obj.cw = document.documentElement.clientWidth;
		}
		else
		{
			obj.ch = document.body.clientHeight;
			obj.cw = document.body.clientWidth;
		}
		
		return obj;	
	}
}
