function gyujto( array, onover, onout, onclick )
{
	var self = this;
	var i;
	this.array = new Array();
	this.over = new Array();
	this.onover = onover;
	this.onout = onout;
	this.onclick = onclick;
	this.update = function()
	{
		var b = false;
		for ( i = 0; !b && i < this.over.length; ++i ) if ( this.over[ i ] == true ) b = true;
		if ( b ) this.onover();
		else this.onout();
	}
	this.set = function( target )
	{
		var i;
		for ( i = 0; i < this.array.length; ++i ) if ( this.array[ i ].id == target.id ) this.over[ i ] = true;
		this.update();
	}
	this.reset = function( target )
	{
		var i;
		for ( i = 0; i < this.array.length; ++i ) if ( this.array[ i ].id == target.id ) this.over[ i ] = false;
		this.update();
	}
	this.add = function( element )
	{
		if ( !Array_inArray(this.array, element) )
		{
			this.array.push( element );
			this.over.push( false );
			var x;
			var h = handler( element/*, x = new Array( element.onmouseover, element.onmouseout, element.onclick )*/ );
			//alert( element + " : " + element.id + " : " + x );
			
			h.onmouseover = function(element, event, funcs) { self.set(element); }
			h.onmouseout =  function(element, event, funcs) { self.reset(element); }
			h.onclick =     function(element, event, funcs) { if (self.onclick) self.onclick(); }
		}
	}
	this.addrec = function( element )
	{
		if (element)
		{
			//var x,y='';for(x in element)y+="\n"+x;alert(y);
			if ( element.nodeType && element.nodeType == 1/*ELEMENT_NODE*/ ) this.add( element );
			if ( element.childNodes )
			{
				var i;
				for ( i = 0; i < element.childNodes.length; ++i ) this.addrec( element.childNodes[ i ] );
			}
		}
	}
	for ( i = 0; i < array.length; ++i )
	{
		var element = document.getElementById( array[ i ] );
		if ( element ) this.addrec( element );
	}
	this.resetAll = function()
	{
		this.over  = new Array();
		//this.array = new Array();
		this.update();
	}
}
