/* simple linked list handler */
function list()
{
	var llist = null;
	var elist = null;

	this.add = function(item)
	{
		var l;

		l = new this.clist(item);
		if (!llist) elist = llist = l;
		else {
			elist.next = l;
			elist = l;
		}
	}
	this.clist = function(item)
	{
		this.item = item;
		this.next = null;
	}
	this.head = function()
	{
		return llist;
	}
	this.locate = function(compare,param)
	{
		var l;

		l = llist;
		do {
			if (compare(param,l) == 0) return l;
			l = l.next;
		}
		while(l && l != llist);
	}
	this.unlink = function(lp)
	{
		var l;

		l = llist;
		if (lp == l) {
			llist = llist.next;
			if (elist.next) elist.next = llist;
			return lp;
		}
		do {
			if (l.next == lp) { 
				if (elist == l.next) elist = l;
				l.next = l.next.next;
				return lp;
			}
			l = l.next;
		}
		while(l && l != llist);
	}
// pop lp after lk.
	this.append = function(lk,lp)
	{
		if (lk == null) {
			lp.next = llist;
			llist = lp;
			if (elist.next) elist.next = lp;
			return;
		}
		lp.next = lk.next;
		lk.next = lp;
		return;
	}
	this.makecircular = function()
	{
		elist.next = llist;
	}
	this.breakcircular = function()
	{
		elist.next = null;
	}
}
