


function ListClass (id)
{
	this.id = id;
}


ListClass.prototype = {
	
	init : function (move)
	{
		if (move) this.move = move;
		this.Obj = getObj(this.id);
		
		if (!this.Obj) return;
		
		for (var i=0; i<this.Obj.childNodes.length; i++)
			if (this.Obj.childNodes[i].nodeName != 'LI') {
				this.Obj.removeChild(this.Obj.childNodes[i]);
				i--;
			}
		
		this.Obj.className = this.Obj.className + ' ' + this.Obj.className + 'enable';
		
		this.Items = this.Obj.getElementsByTagName('li');
		
		for (var i=0; i<this.Items.length; i++) {
			
			var item = this.Items[i];
			var list = this;
			
			(function (item) {
				item.onmousedown = function (e) {list.initMove(e, item)};
				item.style.position = 'relative';
			})(item)
			
		}
		
		this.DragItem = document.createElement('LI');
		this.DragItem = this.Obj.appendChild(this.DragItem);
		this.DragItem.id = this.id + '_dragitem';
		
		this.DragDrop = new DragDrop (this.DragItem.id, this.move);
		this.DragDrop.init(this.Obj);
		
		this.Obj.style.position = 'relative';
		this.DragItem.style.position = 'absolute';
		this.DragItem.style.display = 'none';
		this.DragItem.className = 'dragged';
		/*
		this.Obj.style.MozUserSelect = 'none';
		addEvent(this.Obj, 'selectstart', function (e) {return false});
		addEvent(this.Obj, 'dragstart', function (e) {return false});
		*/
		var List = this;
		this.DragDrop.onMoveStop = function () { List.morfing(); List.onMoveStop(); }
		this.DragDrop.onMove = function () { List.checkPosition(); }
	},
	
	initMove : function (e, item)
	{
		this.onMoveInit(e, item);
		
		if (this.cancelMove) {
			this.cancelMove = false;
			return false;
		}
		if (this.timerID) this.endMorfing();

		this.MovedItem = item;
		this.DragItem.style.left = item.offsetLeft + 'px';
		this.DragItem.style.top = item.offsetTop + 'px';
		this.DragItem.style.height = item.offsetHeight + 'px';
		this.DragItem.style.width = item.offsetWidth + 'px';
		this.DragItem.innerHTML = item.innerHTML;
		this.DragItem.style.display = '';
		this.DragDrop.initMove(e);
		
		this.MovedItem.className = 'inDrag';
	},
	
	
	
	
	morfing : function ()
	{
		if (this.DragItem.offsetLeft > (this.MovedItem.offsetLeft+this.MovedItem.offsetWidth)) this.DragItem.style.left = this.DragItem.offsetLeft - 10 + 'px'
		if (this.DragItem.offsetLeft < (this.MovedItem.offsetLeft-this.MovedItem.offsetWidth)) this.DragItem.style.left = this.DragItem.offsetLeft + 10 + 'px'

		if (this.DragItem.offsetLeft > (this.MovedItem.offsetLeft + 20)) this.DragItem.style.left = this.DragItem.offsetLeft - 5 + 'px'
		if (this.DragItem.offsetLeft < (this.MovedItem.offsetLeft - 20)) this.DragItem.style.left = this.DragItem.offsetLeft + 5 + 'px';
		
		if (this.DragItem.offsetLeft > this.MovedItem.offsetLeft) this.DragItem.style.left = this.DragItem.offsetLeft - 1 + 'px';
		if (this.DragItem.offsetLeft < this.MovedItem.offsetLeft) this.DragItem.style.left = this.DragItem.offsetLeft + 1 + 'px'

		
		
		if (this.DragItem.offsetTop > (this.MovedItem.offsetTop+this.MovedItem.offsetHeight)) this.DragItem.style.top = this.DragItem.offsetTop - 10 + 'px'
		if (this.DragItem.offsetTop < (this.MovedItem.offsetTop-this.MovedItem.offsetHeight)) this.DragItem.style.top = this.DragItem.offsetTop + 10 + 'px'

		if (this.DragItem.offsetTop > (this.MovedItem.offsetTop + 20)) this.DragItem.style.top = this.DragItem.offsetTop - 5 + 'px'
		if (this.DragItem.offsetTop < (this.MovedItem.offsetTop - 20)) this.DragItem.style.top = this.DragItem.offsetTop + 5 + 'px';

		if (this.DragItem.offsetTop > this.MovedItem.offsetTop) this.DragItem.style.top = this.DragItem.offsetTop - 1 + 'px';
		if (this.DragItem.offsetTop < this.MovedItem.offsetTop) this.DragItem.style.top = this.DragItem.offsetTop + 1 + 'px'
		
		if (this.DragItem.offsetLeft != this.MovedItem.offsetLeft || this.DragItem.offsetTop != this.MovedItem.offsetTop) {
			
			var List = this;
			this.timerID = setTimeout(function () {
				List.morfing();
			}, 0);
		
		} else this.endMorfing();
	},

	endMorfing : function ()
	{
		this.DragItem.style.display = 'none';
		this.MovedItem.className = '';
		if (this.timerID) clearInterval(this.timerID);
		this.timerID = false;
		this.MovedItem = false;
	},
	
	
	checkPosition : function ()
	{
		if (this.DragItem.offsetTop + this.DragItem.offsetHeight/2 < this.MovedItem.offsetTop)
			if (this.MovedItem.previousSibling) this.MovedItem = this.Obj.insertBefore(this.MovedItem, this.MovedItem.previousSibling);
		
		if (this.DragItem.offsetTop + this.DragItem.offsetHeight/2 > this.MovedItem.offsetTop+this.MovedItem.offsetHeight)
			if (this.MovedItem.nextSibling&&this.MovedItem.nextSibling != this.DragItem) this.Obj.insertBefore(this.MovedItem.nextSibling, this.MovedItem);
		
	},
	
	
	
	
	onMoveStop : function () {},
	onMoveInit : function () {}
	
	
	
}