var _html2Objects_ = [];
var globalIndex = 0;

function RatingStar(id, objParent, srcEmpty, srcSelect, edt) {
	this.id = id;
	this.objectControl = objParent;
	this.sourceEmpty = srcEmpty;
	this.sourceSelect = (commonUndefined(srcSelect) || srcSelect == null || srcSelect == '')? srcEmpty: srcSelect;
	this.editable = edt;
	this.selected = false;
	return this;
}

RatingStar.prototype = {
	prefixHtmlKey: 'imageStar_',
	
	toString: function() {
		if (this.editable) {
			var key = "" + this.prefixHtmlKey  + globalIndex + '_' + this.id;
			globalIndex ++;
			_html2Objects_[key] = this;
			return '<img src="' + (this.selected? this.sourceSelect: this.sourceEmpty) 
				+ '" alt="" class="hand" onclick="selectRating(this)" key="' + key + '" />';
		}
		return '<img src="' + (this.selected? this.sourceSelect: this.sourceEmpty) + '" alt="" />';
	},
	isSelected: function() {
		return this.selected;
	},
	setSelected: function(val) {
		this.selected = (commonUndefined(val) || val == null)? false: val;
	},
	equals: function(star) {
		if (star == this) return true;
		if (star == null) return false;
		if (star instanceof RatingStar) return this.id == star.id;
		return this.id == star;
	}
};

function RatingControl(srcImgEmpty, srcImgSelect, rt, editable, fieldName) {
	var imgEmpt = (commonUndefined(srcImgEmpty) || srcImgEmpty == null || srcImgEmpty == '')? this.sourceEmpty: srcImgEmpty;
	var imgSlct = (commonUndefined(srcImgSelect) || srcImgSelect == null || srcImgSelect == '')? this.sourceSelect: srcImgSelect;
	var rate = (commonUndefined(rt) || rt == null)? 0: rt;
	var edtb = (commonUndefined(editable) || editable == null)? true: editable;
	
	this.rating = [
		new RatingStar(1, this, imgEmpt, imgSlct, edtb), new RatingStar(2, this, imgEmpt, imgSlct, edtb),
		new RatingStar(3, this, imgEmpt, imgSlct, edtb), new RatingStar(4, this, imgEmpt, imgSlct, edtb),
		new RatingStar(5, this, imgEmpt, imgSlct, edtb)];
	for (var i = 0; i < rt; ++ i) this.rating[i].setSelected(true);
	this.field = (commonUndefined(fieldName))? null: getObjById(fieldName);
	return this;
}
RatingControl.prototype = {
	sourceEmpty: 'images/star0.gif',
	sourceSelect: 'images/star1.gif',

	toString: function() {
		var str = '';
		for (var i = 0; i < this.rating.length; ++ i) {
			str += this.rating[i].toString();
		}
		return str;
	},
	select: function(imgIndex) {
		var indx = -1;
		for (var i = 0; i < this.rating.length; ++ i) {
			if (this.rating[i].equals(imgIndex)) {
				indx = i;
				break;
			}
		}
		for (var i = 0; i <= indx; ++ i) {
			this.rating[i].setSelected(true);
		}
		for (var i = indx + 1; i < this.rating.length; ++ i) {
			this.rating[i].setSelected(false);
		}
		if (this.field != null) this.field.value = this.getRatingValue();
	},
	getRatingValue: function() {
		var val = 0;
		for (var i = 0; i < this.rating.length; ++ i) {
			if (this.rating[i].isSelected()) {
				++ val;
			} else {
				break;
			}
		}
		return val;
	}
};

function selectRating(img) {
	var objstar = _html2Objects_[img.getAttribute('key')];
	objstar.objectControl.select(objstar.id);
	img.parentNode.innerHTML = '' + objstar.objectControl;
}

function getRating() {
	return ratingControl.getRatingValue();
}	
