
function RatingElement( max_rating, default_rating, img, offset_off, offset_on, offset_average, offset_halfAverage, offset_overlap, offset_halfOverlap, click_fn, width, height, average_rating ) {
	this.click_fn = click_fn;
	this.default_rating = default_rating;
	this.max_rating = max_rating;
	this.img = img;

	this.offset_off = offset_off;
	this.offset_on = offset_on;
	this.offset_average = offset_average;
	this.offset_halfAverage = offset_halfAverage;
	this.offset_overlap = offset_overlap;
	this.offset_halfOverlap = offset_halfOverlap;
	
	this.img_height = height;
	this.img_width = width;
	this.average_rating = average_rating;

	if ( this.img.charAt ) {
		this.img = new Array();
		for ( var i = 0; i < this.max_rating; ++i )
			this.img[i] = img;
	}

	this.max_rating = this.img.length;
	this.div = null;

	RatingElement.prototype.getClickFn = function( r ) {
		var this_ = this;
		return function() {
			this_.click_fn(r);
		};
	};

	RatingElement.prototype.getDiv = function() {
		this.div = document.createElement('div');
		this.div.style.height = this.img_height+'px';
		this.div.style.padding = '2px';
		for ( var i = 0; i < this.max_rating; ++i ) {
			var div_ = document.createElement('div');
			div_.style.height = this.img_height+'px';
			div_.style.width = this.img_width+'px';
			div_.style.backgroundImage = 'url('+this.img[i]+')';
			div_.style.backgroundPosition = (-this.offset_off)+'px 0px';
			div_.style.backgroundRepeat = 'no-repeat';
			if ( !document.all )
				div_.style.display = 'table-cell';
			else
				div_.style.display = 'inline';

			div_.style.cursor = 'hand';
			div_.style.cursor = 'pointer';
/*
			var img = document.createElement('img');
			img.setAttribute('src','/media/spacer.gif');
			img.style.height = this.img_height+'px';
			img.style.width = this.img_width+'px';
			div_.appendChild(img);
*/
			div_.onmouseover = this.getMouseOverFn(i+1);
			div_.onmouseout = this.showDefaultRatingFn();
			div_.onclick = this.getClickFn(i+1);

			this.div.appendChild(div_);
		}

		this.showRating(this.default_rating);
		return this.div;
	};

	RatingElement.prototype.getMouseOverFn = function( r ) {
		var this_ = this;
		return function() {
			this_.showSelectedRating(r);
		};
	};

	RatingElement.prototype.setRating = function( r ) {
		this.default_rating = r;
		this.showRating(r);
	};

	RatingElement.prototype.showDefaultRatingFn = function() {
		var this_ = this;
		return function() {
			this_.showRating(this_.default_rating);
		};
	};

	RatingElement.prototype.showRating = function( r ) {
		if ( !this.div )
			return;
		if(r == 0) {
			for( var i = 0; i < this.max_rating; ++i ) {
				if(i<=(this.average_rating-1))
					this.div.childNodes[i].style.backgroundPosition = (-(this.offset_average))+'px 0px';
				else {
					if(i-(this.average_rating-1) <= 0.25 && i-(this.average_rating-1) > 0)
						this.div.childNodes[i].style.backgroundPosition = (-(this.offset_average))+'px 0px';
					else if(i-(this.average_rating-1) < 0.75)
						this.div.childNodes[i].style.backgroundPosition = (-(this.offset_halfAverage))+'px 0px';
					else
						this.div.childNodes[i].style.backgroundPosition = (-(this.offset_off))+'px 0px';
				}
			}
		}
		else
			this.showSelectedRating(r);
	};
	
	RatingElement.prototype.showSelectedRating = function( r ) {
		if ( !this.div )
			return;
		
		for ( var i = 0; i < this.max_rating; ++i ) {
			if(i<=(this.average_rating-1)) {
				if(i < r)
					this.div.childNodes[i].style.backgroundPosition = (-(this.offset_overlap))+'px 0px';
				else
					this.div.childNodes[i].style.backgroundPosition = (-(this.offset_average))+'px 0px';
			}
			else {
				if(i-(this.average_rating-1) <= 0.25 && i-(this.average_rating-1) > 0) {
					if(i < r) 
						this.div.childNodes[i].style.backgroundPosition = (-(this.offset_overlap))+'px 0px';
					else
						this.div.childNodes[i].style.backgroundPosition = (-(this.offset_average))+'px 0px';
				}
				else if(i-(this.average_rating-1) < 0.75) {
					if(i < r)
						this.div.childNodes[i].style.backgroundPosition = (-(this.offset_halfOverlap))+'px 0px';
					else
						this.div.childNodes[i].style.backgroundPosition = (-(this.offset_halfAverage))+'px 0px';
				}
				else {
					if(i < r)
						this.div.childNodes[i].style.backgroundPosition = (-(this.offset_on))+'px 0px';
					else
						this.div.childNodes[i].style.backgroundPosition = (-(this.offset_off))+'px 0px';
				}
			}
		}
			
	};
	
	RatingElement.prototype.showAverageRating = function( r ) {
		if ( !this.div )
			return;
			
		for ( var i = 0; i < this.max_rating; ++i )
			this.div.childNodes[i].style.backgroundPosition = (-(i<r?this.offset_average:this.offset_off))+'px 0px';
	};
	
	RatingElement.prototype.setAverageRating = function( avg ) {
		//this.default_rating = rating;
		this.average_rating = avg;
	};
	
}

