function Toggler(listName, autoClass) {
	var that = this;
	this.listName = listName;
	this.defaultOpen = -1;
	this.togglerOpenText = "- Close all"; 
	this.togglerClosedText = "+ View all";
	this.toggleState = 'none';
	
	this.walkTheDOM = function(node, func) {
		func(node);
		node = node.firstChild;
		while (node) {
			this.walkTheDOM(node, func);
			node = node.nextSibling;
		}
	};
	
		this.getElementsByClassName = function(classNames) {
		var results = [];
		var k = 0;
		this.walkTheDOM(document.body, function(node) {
			var a, c = node.className, i;
			
			if (c) {
				a = c.split(' ');
				found = false
				for (var i = 0; i < a.length; i++) {
					for (var j=0;j<classNames.length;j++) {
						if (a[i] === classNames[j]) {
							if (typeof(results[j]) === 'undefined') {
								results[j] = [];
							}
							node.id = classNames[j]+results[j].length;
							results[j].push(node.id);
							found = true;
							
							if (j===0) {
								var partnerId = classNames[1] + (results[j].length-1)
								node.partner = partnerId;
								node.classOn = classNames[0] + '_on';
								node.classOff = classNames[0];
								node.onclick = function(){
									element = document.getElementById(this.partner);
									if (element.style.display !== 'none') {
										element.style.display = 'none';
										this.className = this.classOff;
									} else {
										element.style.display = 'block';
										this.className = this.classOn;
									}
								};
							} else {
								node.style.display = 'none';
							}
						}
					}
					if (found) {
						break;
					}
				}
				
			}
			
		});
		return results;
	};
	
	this.init = function(control,info) {
		that.elements = this.getElementsByClassName([control,info]);
		if (that.defaultOpen === "all") {
			that.openAll();
		} else if (that.defaultOpen > -1) {
			oControl = document.getElementById(that.elements[0][that.defaultOpen]);
			oInfo = document.getElementById(that.elements[1][that.defaultOpen]);
			
			oControl.className = oControl.classOn;
			oInfo.style.display = 'block';
		}
	};
	
	this.openAll = function() {
		var partner;
		for (var i=0;i<that.elements[0].length;i++) {
			document.getElementById(that.elements[1][i]).style.display = 'block';
			document.getElementById(that.elements[0][i]).className = document.getElementById(that.elements[0][i]).classOn;
		}
	}
	
	this.closeAll = function() {
		var partner;
		for (var i=0;i<that.elements[0].length;i++) {
			document.getElementById(that.elements[1][i]).style.display = 'none';
			document.getElementById(that.elements[0][i]).className = document.getElementById(that.elements[0][i]).classOff;
		}
	}
	
	this.toggleAll = function(togglerId) {
		var togglerElement = document.getElementById(togglerId);
		if (that.toggleState === 'all') {
			that.toggleState = 'none'
			this.closeAll();
			togglerElement.innerHTML = that.togglerClosedText;
		} else {
			that.toggleState = 'all';
			this.openAll();
			togglerElement.innerHTML = that.togglerOpenText;
		}
	}
	
}