
function byId(id) {
	return document.getElementById(id);
}

function ownAttachEvent(element, eventName, handler) {
	if (element.addEventListener)
	{
		element.addEventListener(eventName, handler, false);
	}
	else
	{
		element.attachEvent("on" + eventName, handler);
	}
}

function getArray(iterable)
{
    if (!iterable) return [];
    if (iterable.toArray) return iterable.toArray();
    var length = iterable.length, results = new Array(length);
    while (length--) results[length] = iterable[length];
    return results;
}

function SimpleTree() {
	this.defaults = {
		treeId: null,
		name: null,
		exclude: false
	};
	
    this.expand = function(event,index) {
    	this.doExpand(index);
    };
    
    this.doExpand = function(index) {
    	var ddNode=byId(this.defaults.treeId).getElementsByTagName("dd")[index];
        if(ddNode.style.display=="none"){
            ddNode.style.display="";
            byId(this.defaults.treeId).getElementsByTagName("dt")[index].className="minus";
            this.doSelect(index);
        }else{
            ddNode.style.display="none";
            byId(this.defaults.treeId).getElementsByTagName("dt")[index].className="plus";
        }
    };
    
    this.doSelect = function(currentIndex){
        var dtNode=byId(this.defaults.treeId).getElementsByTagName("dt");
        for(var i=0;i<dtNode.length;i++){
            var spanNode=dtNode[i].getElementsByTagName("span")[0];
            if(i==currentIndex){
                //spanNode.style.background="#f7f7f7";
                //spanNode.style.border="1px solid gray";
            }else{
                //spanNode.style.background="white";
                //spanNode.style.border="1px solid white";
                if (this.defaults.exclude) {
                	byId(this.defaults.treeId).getElementsByTagName("dd")[i].style.display="none";
                	dtNode[i].className="plus"
                }
            }
        }
    };
    
	this.bindEvent = function() {
		var thisObject = this, args = getArray(arguments), func = args.shift();
		
        return function(event)
        {
            return func.apply(thisObject, [event || window.event].concat(args));
        }
	};

	for (var n in arguments[0]) { this.defaults[n]=arguments[0][n]; };	
	var dtNodes=byId(this.defaults.treeId).getElementsByTagName("dt");
	for(var index=0;index<dtNodes.length;index++){
		//dtNodes[i].setAttribute('onclick','showObj(' + i + ');');
		ownAttachEvent(dtNodes[index], 'click', this.bindEvent(this.expand, index));
		
		dtNodes[index].id=index;
		byId(this.defaults.treeId).getElementsByTagName("dd")[index].style.display="none";
	}
}
