/*  Starry Widget
 *  @version 1.1 (April 27, 2007)
 *  (c) 2007 Chris Iufer <chris@duarte.com>
 *  Starry is freely distributable under the terms of an MIT-style license.
 *  See the Duarte Design web site: http://www.duarte.com/portfolio/
/*--------------------------------------------------------------------------*/

var debug = false;

var StarryDefaults = {
		sprite: "/images/fdf_stars.gif",
		width: 30,
		height: 15,
		startAt: 1,
		maxLength: 6,
		multiplier: 1,
		showNull: false,
		align: 'left',
		feedback: false
};

// The Starry Class
// new Starry('id_of_element'[, {options}]);
// This is the main starry widget. Create new widgets after window load
var Starry = Class.create();
Starry.prototype = {
	initialize: function(element) {
		this.element = $(element);
		this.element.className = "starry";				
		this.options = {};
		// get our defaults
		Object.extend(this.options, StarryDefaults);
		Object.extend(this.options, arguments[1] || {});		
		this.name = this.options.name || "starry" + id.next();
		this.element.style.height = this.options.height + 'px';		
		if(debug) console.log(this.options.showNull);
		// lets build our array with an extra one for null
		this.children = new Array(this.options.maxLength + 1);
		if(debug) console.log('children length '+ this.children.length);		
		// lets make the hidden form value
		this.hidden = document.createElement("input");
		this.hidden.type = "hidden";
		this.hidden.name = this.name;
		this.hidden.id = this.name;
		this.element.appendChild(this.hidden);				
		// build out each child
		for(i=0; i < this.children.length; i++) {
			this.children[i] = new SingleStar(this, i);
			this.element.appendChild(this.children[i].element);
		}
		if( this.options.feedback ) {
			this.feedback = document.createElement('div');
			this.feedback.className = "feedback";
			this.feedback.style.cssFloat = this.options.align;
			this.element.appendChild(this.feedback);
		}	
		// startup
		this.selected = this.options.startAt;
		this.reset(this.selected);
	},
	set: function(index) {
		if(debug) console.log('set index '+ index);
		// set the child
		for(var i=1; i < this.children.length; i++)
			this.children[i].element.style.backgroundPosition = (i <= index) ? "0 -" + this.options.height * 2 + "px" : "0 0";
		if(this.options.feedback) 
			this.feedback.innerHTML = this.children[index].value;
		this.selected = index;
		// set the form value
		this.hidden.value = this.children[index].value;
		
		if (this.children[index].value==1){document.getElementById('title'+this.hidden.name).innerHTML = "ungen&uuml;gend";};
		if (this.children[index].value==2){document.getElementById('title'+this.hidden.name).innerHTML = "mangelhaft";};
		if (this.children[index].value==3){document.getElementById('title'+this.hidden.name).innerHTML = "aussreichend"};
		if (this.children[index].value==4){document.getElementById('title'+this.hidden.name).innerHTML = "befriedigend"};
		if (this.children[index].value==5){document.getElementById('title'+this.hidden.name).innerHTML = "gut"};
		if (this.children[index].value==6){document.getElementById('title'+this.hidden.name).innerHTML = "sehr gut"};	
		
		if (this.children[index].value==1 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "&Uuml;berhaupt nicht empfehlenswert"};
		if (this.children[index].value==2 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "Nicht empfehlenswert"};
		if (this.children[index].value==3 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "Eher weniger empfehlenswert"};
		if (this.children[index].value==4 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "Neutral"};
		if (this.children[index].value==5 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "Empfehlenswert"};
		if (this.children[index].value==6 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "Sehr empfehlenswert"};

		if(debug) console.log('set value ' + this.hidden.value);
	},
	show: function(index) {
		if(debug) console.log('show index '+ index);		
		// show the child
		for(var i=1; i < this.children.length; i++)
			this.children[i].element.style.backgroundPosition = (i <= index) ? "0 -" + this.options.height + "px" : "0 0";
		if(this.options.feedback)
			this.feedback.innerHTML = this.children[index].value;
			
		if (this.children[index].value==1){document.getElementById('title'+this.hidden.name).innerHTML = "ungen&uuml;gend";};
		if (this.children[index].value==2){document.getElementById('title'+this.hidden.name).innerHTML = "mangelhaft";};
		if (this.children[index].value==3){document.getElementById('title'+this.hidden.name).innerHTML = "aussreichend"};
		if (this.children[index].value==4){document.getElementById('title'+this.hidden.name).innerHTML = "befriedigend"};
		if (this.children[index].value==5){document.getElementById('title'+this.hidden.name).innerHTML = "gut"};
		if (this.children[index].value==6){document.getElementById('title'+this.hidden.name).innerHTML = "sehr gut"};
		
		if (this.children[index].value==1 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "&Uuml;berhaupt nicht empfehlenswert"};
		if (this.children[index].value==2 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "Nicht empfehlenswert"};
		if (this.children[index].value==3 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "Eher weniger empfehlenswert"};
		if (this.children[index].value==4 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "Neutral"};
		if (this.children[index].value==5 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "Empfehlenswert"};
		if (this.children[index].value==6 && this.name == "fsvoting7"){document.getElementById('title'+this.hidden.name).innerHTML = "Sehr empfehlenswert"};
		
	},
	reset: function() { this.set(this.selected); },
	clear: function() {
		for(var i=1; i < this.children.length; i++)
			this.children[i].element.style.backgroundPosition = "0 0";
	}
};

// Class: SingleStar(parent_object, index of that parent's children)
// Not to be called directly, inherits its options from a Starry object
var SingleStar = Class.create();
SingleStar.prototype = {
	initialize: function(parent, index) {
		this.parent = parent;
		this.index = index;
		if(debug) console.log('Creating star at index '+ this.index);
		this.value = this.index * this.parent.options.multiplier;
		if(debug) console.log('value '+ this.value);
		this.element = document.createElement("div");
		this.element.style.width = this.parent.options.width + "px";
		this.element.style.height = this.parent.options.height + "px";
		this.element.style.backgroundImage = "url(" + this.parent.options.sprite + ")";
		this.element.style.backgroundPosition = (this.index == 0) ? "0 -" + this.parent.options.height * 3  +"px" : "0 0";
		this.element.className = "standard_star";
		this.element.style.cssFloat = this.parent.options.align;
		if(!this.parent.options.showNull && this.index == 0) this.element.style.display = "none";
		this.element.onclick = function(){ 
		this.parent.set(this.index); }.bind(this);
		this.element.onmouseover = function() { this.parent.show(this.index); }.bind(this);
		this.element.onmouseout = this.parent.reset.bind(this.parent);
		if (this.index==1){var varalt = "ungenügend";};
		if (this.index==2){var varalt = "mangelhaft";};
		if (this.index==3){var varalt = "aussreichend"};
		if (this.index==4){var varalt = "befriedigend"};
		if (this.index==5){var varalt = "gut"};
		if (this.index==6){var varalt = "sehr gut"};
		
		if (this.index==1 && this.parent.name == "fsvoting7"){var varalt  = "Überhaupt nicht empfehlenswert"};
		if (this.index==2 && this.parent.name == "fsvoting7"){var varalt  = "Nicht empfehlenswert"};
		if (this.index==3 && this.parent.name == "fsvoting7"){var varalt  = "Eher weniger empfehlenswert"};
		if (this.index==4 && this.parent.name == "fsvoting7"){var varalt  = "Neutral"};
		if (this.index==5 && this.parent.name == "fsvoting7"){var varalt  = "Empfehlenswert"};
		if (this.index==6 && this.parent.name == "fsvoting7"){var varalt  = "Sehr empfehlenswert"};

		this.element.title = varalt;
		if(debug) console.log('set onclick handler');
	}
};

// this function manages an auto_increment for id's
var id = { start: 0, prev: 0, next: function() { return this.start + this.prev++; } };

