function helixDisplay() {
	
	this.numEntries = 0;
	this.entries = new Array();
	this.entriesCoord = new Array();
	this.validatedFieldIDs = new Array();
	this.width = 300;
	this.height = 300;
	this.radius = 120;
	this.screenDist = 2000;
	this.minScale = this.screenDist / (this.screenDist + 2.0 * this.radius);
	this.theta = 0;
	this.divId = '';
	this.timerID = 0;
	this.myObjDiv = '';
	var myObj;

	this.initHelix = function (objID) {

		this.divId = objID;
		myObj = this;
		this.myObjDiv = document.getElementById(objID);
		
		for (var i=0; i<this.myObjDiv.childNodes.length; i++) {
			var node = this.myObjDiv.childNodes[i];
			if (node.nodeName=="LI") {
				this.entries[this.numEntries++] = node;
			}
		}
		
		this.width = this.myObjDiv.offsetWidth;
		this.height = this.myObjDiv.offsetHeight;
		this.radius = 0.4 * this.width;
		
		for (var i=0; i<this.numEntries; i++) {
			this.entries[i].style.position = "absolute";
			this.entriesCoord[i] = new Array(this.radius*(1+Math.cos(2*Math.PI*i/this.numEntries)), this.radius*Math.sin(2*Math.PI*i/this.numEntries), this.height*((i/this.numEntries)-0.5) );
		}
		
		this.startAnim();
		
	}

	this.spinHelix = function () {
		
		if (myObj.width != myObj.myObjDiv.offsetWidth) {
			myObj.stopAnim();
			document.location.reload();	
		}
		
		var colorMaxR = 50;
		var colorMaxG = 170;
		var colorMaxB = 170;
		var colorMinR = 50;
		var colorMinG = 50;
		var colorMinB = 50;
		myObj.theta += Math.PI / 200;
		if (myObj.theta > 2 * Math.PI) {
			myObj.theta -= 2 * Math.PI;
		}

		for (var i=0; i<myObj.numEntries; i++) {
			myObj.entriesCoord[i][0] = myObj.radius*(1+Math.cos(myObj.theta + (2*Math.PI*i/myObj.numEntries)));
			myObj.entriesCoord[i][1] = myObj.radius*Math.sin(myObj.theta + (2*Math.PI*i/myObj.numEntries));
			var scaleFactor = myObj.screenDist / (myObj.screenDist + myObj.entriesCoord[i][0]);
			myObj.entries[i].style.left = Math.floor(myObj.width/2 + myObj.entriesCoord[i][1] * scaleFactor) + "px";
			myObj.entries[i].style.top = Math.floor(myObj.height/2 + myObj.entriesCoord[i][2] * scaleFactor) + "px";
			myObj.entries[i].style.fontSize = 100 * scaleFactor + '%';
			var colorR = Math.floor(colorMaxR - (colorMaxR - colorMinR) * (1-scaleFactor) / (1-myObj.minScale));
			var colorG = Math.floor(colorMaxG - (colorMaxG - colorMinG) * (1-scaleFactor) / (1-myObj.minScale));
			var colorB = Math.floor(colorMaxB - (colorMaxB - colorMinB) * (1-scaleFactor) / (1-myObj.minScale));
			if (scaleFactor > 0.99999) {
				myObj.entries[i].style.color = '#00FFFF';
			} else {
				myObj.entries[i].style.color = 'rgb(' + colorR + ',' + colorG + ',' + colorB + ')';
//				for (tmpLnkObj in myObj.entries[i].childNodes[0].childNodes) {
//					tmpLnkObj.style.color = '#00FFFF';
//				}
			}
		}
		
	}
	
	this.startAnim = function () {
		this.timerID = window.setInterval(this.spinHelix,50);
	}
	
	this.stopAnim = function () {
		window.clearInterval(this.timerID);
	}
		

}
