	/* 
		JS Drag and Drop 0.9
		Kod autorstwa Damiana Wielgosika
		http://ferrante.pl

		Ten skrypt jest dostępny na licencji Creative Commons Uznanie autorstwa-Bez utworów zależnych 2.5 Polska
		http://creativecommons.org/licenses/by-nd/2.5/pl/
	*/

	var d = document;
	
	var $ = function (id)
	{
		return d.getElementById(id);
	};
	
	
	var DragnDrop = 
	{
		Elements: new Array(),
		El: '',
		Left: '',
		Top: '',
		AddEvent: function(element, event, func, o)
		{
			if (element.addEventListener)
			{
				element.addEventListener(event, func, false);
			}
			else
			{
				element.attachEvent("on"+event, func);
			}
		},
		RemoveEvent: function(element, event, func)
		{
			if (element.removeEventListener)
			{
				element.removeEventListener(event, func, false); 
			}
			else
			{
				element.detachEvent("on"+event, func);
			}	
		},
		GetPosition: function(event)
		{
			if (event.pageX || event.pageY)
			{
				return {x:event.pageX, y:event.pageY};
			}
			return {x:event.clientX+d.body.scrollLeft-d.body.clientLeft, y:event.clientY+d.body.scrollTop-d.body.clientTop};
		},
		InitDrag: function(elRef, elArea)
		{
			if (!elRef)
			{
				return false;
			}
			if (!elArea)
			{
				elArea = document;
			}
			if (!this.Elements[elRef.id])
			{
				this.Elements[elRef.id] = new Array();
			}
			if (elRef.style.position != 'absolute')
			{
				elRef.style.position = 'absolute';
			}

			this.AddEvent(elRef, "mousedown", this.StartDrag, false);
			this.AddEvent(document, "mousemove", this.Drag, false);
			this.AddEvent(document, "mouseup", this.Drop, false);
			
			this.Elements[elRef.id].MaxLeft = elArea.offsetLeft;
			this.Elements[elRef.id].MaxRight = elArea.offsetLeft + parseInt(elArea.offsetWidth) ;
			this.Elements[elRef.id].MaxTop = elArea.offsetTop;
			this.Elements[elRef.id].MaxBottom= elArea.offsetTop + parseInt(elArea.offsetHeight);
			if (!document.addEventListener)
			{
				var border = parseInt(elArea.parentNode.style.borderWidth);
				
				if (!border)
				{
					return false;
				}
				for (i in this.Elements[elRef.id])
				{
					this.Elements[elRef.id][i] = this.Elements[elRef.id][i]+border;
				}
			}
		},
		RemoveDrag: function(elRefID)
		{
		
			if (this.Elements[elRefID])
			{
				this.RemoveEvent(document, "mouseup", this.StartDrag);
				this.RemoveEvent(document, "mousemove", this.Drag);
				this.RemoveEvent($(elRefID), "mousedown", this.Drop);
				this.Elements.slice(elRefID,1);
				this.El = '';
			}	
		},
		StartDrag: function(event)
		{
			if (window.event && window.event.srcElement)
			{
				var el = window.event.srcElement;
			}
			else
			{
				var el = this;
			}
			
			var event = event||e;
			
			DragnDrop.El = el;
			position = DragnDrop.GetPosition(event);
			
			DragnDrop.Left = position.x - DragnDrop.El.offsetLeft;
			DragnDrop.Top = position.y - DragnDrop.El.offsetTop;
			DragnDrop.Elements[DragnDrop.El.id].enabled = true;
		},
		Drag: function(event)
		{
			if (!DragnDrop.Elements[DragnDrop.El.id] || !DragnDrop.Elements[DragnDrop.El.id].enabled)
			{
				return false;
			}
			
			var event = event||e;
			var position = DragnDrop.GetPosition(event);
					
			DragnDrop.El.style.left = (position.x-DragnDrop.Left)+"px";
			DragnDrop.El.style.top = (position.y-DragnDrop.Top)+"px";

			if (parseInt(DragnDrop.El.style.left) <= DragnDrop.Elements[DragnDrop.El.id].MaxLeft)
			{
				DragnDrop.El.style.left = DragnDrop.Elements[DragnDrop.El.id].MaxLeft+"px";
			}
			if (parseInt(DragnDrop.El.style.top) <= DragnDrop.Elements[DragnDrop.El.id].MaxTop)
			{
				DragnDrop.El.style.top = DragnDrop.Elements[DragnDrop.El.id].MaxTop+"px";
			}
			if ((parseInt(DragnDrop.El.style.top) + parseInt(DragnDrop.El.offsetHeight)) >= DragnDrop.Elements[DragnDrop.El.id].MaxBottom)
			{
				DragnDrop.El.style.top = (DragnDrop.Elements[DragnDrop.El.id].MaxBottom - parseInt(DragnDrop.El.offsetHeight))+"px";	
			}
			if ((parseInt(DragnDrop.El.style.left) + parseInt(DragnDrop.El.offsetWidth)) >= DragnDrop.Elements[DragnDrop.El.id].MaxRight)
			{
				DragnDrop.El.style.left = (DragnDrop.Elements[DragnDrop.El.id].MaxRight - parseInt(DragnDrop.El.offsetWidth))+"px";	
			}
		},
		Drop: function()
		{
			if (DragnDrop.Elements[DragnDrop.El.id])
			{
				DragnDrop.Elements[DragnDrop.El.id].enabled = false;
			}
		}
	}