function CONSOLE() {
    this.msgCount = 0;
    this.div = document.getElementById('debug');
    this.hide();
};

CONSOLE.prototype.println = function(msg) {
    this.print(msg);
    if(this.div) {
    	this.div.appendChild(document.createElement("br")); // newline
	}
}

CONSOLE.prototype.print = function(msg) {
	if(this.div) {
	    this.msgCount++;
	    var last = this.div.childNodes.length;
	    if (typeof msg == "object") {
	    	// This is must likely an exception
	    	// loop through all properties and print it out
	    	var first = true;
	    	for (var prop in msg) {
	    		if (first) {
	    			first = false;
	    		} else {
	    			this.div.appendChild(document.createElement("br"));
	    		}
	    		this.printFormattedMsg(prop + ":" + msg[prop]);
	    	}
	    } else {
	    	this.printFormattedMsg(msg);
	    }
	    this.updateCount();
	    this.div.scrollTop = 10000000;
	}
}

CONSOLE.prototype.printFormattedMsg = function(msg) {
	if(this.div) {
		msg = msg + ''; // turn to string
		var msgArray = msg.split("\n");
		for (var i = 0; i < msgArray.length; i++) {
			if (i > 0) {
				this.div.appendChild(document.createElement("br"));
			}
			this.div.appendChild(document.createTextNode(msgArray[i]));
		}
	}
}

CONSOLE.prototype.printTime = function() {
    var curDate = new Date();
    this.println(curDate + " (" + curDate.getTime() + ")");
}

CONSOLE.prototype.showHide = function() {
    if(this.curState == 'hidden') {
        this.show();
    } else {
        this.hide();
    }
}

CONSOLE.prototype.show = function() {
	if(this.div) {
	    this.curState = 'shown';
	    this.div.style.display = "";
	    document.getElementById('showHide').innerHTML = "hide";
	    this.updateCount();
	}
}

CONSOLE.prototype.hide = function() {
	if(this.div) {
	    this.curState = 'hidden';
	    this.div.style.display = "none";
	    document.getElementById('showHide').innerHTML = "show";
	}
}



CONSOLE.prototype.updateCount = function() {
    if(this.curState == 'hidden' && (this.msgCount > 0)) {
        document.getElementById('count').innerHTML = "<B>" + this.msgCount + " entries</B>";
    } else {
        document.getElementById('count').innerHTML = this.msgCount + " entries";
    }
}

CONSOLE.prototype.clearMessages = function() {
    this.div.innerHTML = "";

    this.msgCount = 0;
    this.updateCount();
}

var Console = new CONSOLE();
window.Console = Console;