//Rating form control


KCO.rating = {
	instances: [],
	images: [
		'img/rate0stars.gif',
		'img/rate1star.gif',
		'img/rate2stars.gif',
		'img/rate3stars.gif',
		'img/rate4stars.gif',
		'img/rate5stars.gif'
	],
	updateAll: function () {
		for (var i = 0, len = KCO.rating.instances.length; i < len; i++) {
			KCO.rating.instances[i].update();
		}
	},
	generate: function (className) {
	
		for (var i = 0, len = this.images.length; i < len; i++) {
			var image = new Image();
			image.src = this.images[i];
		}
		var controls = KCO.Utils.getElementsByClass(document.body, className);
		var rating;
		for (var i = 0, len = controls.length; i < len; i++) {
			rating = KCO.rating.make();
			rating.init = function (element) {
				var that = this;
				var controlName = element.getElementsByTagName('input')[0].name;
				var fragment = document.createDocumentFragment();
				this.image = document.createElement('img');
				this.input = document.createElement('input');
				var instructions = document.createTextNode(' (Click on the stars to set rating)');
				this.input.type = 'hidden';
				this.input.name = controlName;
				this.setValue(0);
				fragment.appendChild(this.image);
				fragment.appendChild(this.input);
				fragment.appendChild(instructions);
				element.parentNode.replaceChild(fragment, element);
				this.update();
				this.image.onclick = function (e) {
					var e = e || window.event;
					that.doClick(e);
				};
				this.image.ondblclick = function (e) {
					that.doDblClick();
				};
				KCO.rating.instances.push(this);
			}	
			rating.init(controls[i]);
		}
	},
	make: function () {
		function F() {}
		F.prototype = KCO.rating;
		return new F();
	},
	update: function () {
		this.x = this.findPosition()[0];
	},
	setValue: function (value) {
		this.image.src = this.images[value];
		this.input.value = value;
	},
	doClick: function (e) {
		var e = e || window.event;
		var clickX = (e.clientX - this.x);
		var starWidth = (this.image.offsetWidth / 5);
		for (var i = 0; i < 6; i++) {
			if (clickX <= (starWidth * i)) {
				this.setValue(i);
				break;
			}
		}
	},
	doDblClick: function (e) {
		this.setValue(0);
	},
	findPosition: function () {
		var curleft = 0;
		var curtop = 0;
		var image = this.image;
		if (image.offsetParent) {
			curleft = image.offsetLeft;
			curtop = image.offsetTop;
			while (image = image.offsetParent) {
				curleft += image.offsetLeft;
				curtop += image.offsetTop;
			}
		}
		return [curleft,curtop];
	}
};
