var StarRating = function() {

	var filledStarSrc = '';
	var filledStarAlt = '';
	var emptyStarSrc = '';
	var emptyStarAlt = '';
	
	var imagePath = '';

	function showStars(control, stars) {
		for (var i in control) {
			var c = control[i];
			if (i < stars) {
				c.img.attr('src', imagePath + filledStarSrc);
				c.img.attr('alt', filledStarAlt);
			} else {
				c.img.attr('src', imagePath + emptyStarSrc);
				c.img.attr('alt', emptyStarAlt);
			}
		}
	}
	
	// escapes strings for use in specifying IDs in jQuery expressions
	function escapeID(s) {
		var togo = "";
		for (var i = 0; i < s.length; i += 1) {
			var c = s.charAt(i);
			if (c==':' || c=='.' || c=='[' || c==']') {
				togo += '\\';
			}
			togo += c;
		}
		return togo;
	}

	// creates a jQuery matcher for an id
	function jid(s) {
		return '#' + escapeID(s);
	}	

	return {
		init_StarRating: function(nameBase, initialRating, imagePathParam,  
			starID1, rateID1, starID2, rateID2, starID3, rateID3, starID4, rateID4, starID5, rateID5) {
			
			imagePath = imagePathParam;
			
			var control = [ 
				{ input: $(jid(rateID1)), img: $(jid(starID1)) },
				{ input: $(jid(rateID2)), img: $(jid(starID2)) },
				{ input: $(jid(rateID3)), img: $(jid(starID3)) },
				{ input: $(jid(rateID4)), img: $(jid(starID4)) },
				{ input: $(jid(rateID5)), img: $(jid(starID5)) }
			];
				 
			for (var i in control) {
				var c = control[i];
				c.input.hide();
				c.img.click(
					function (j) {
						return function () {
							control[j].input.click();
						};
					}(i));
				c.img.hover(
					function (j) {
						return function () {
							showStars(control, j + 1);
						};
					}(i),
					function () {
						showStars(control, initialRating);
					}
				);
			}
		},
		
		setFilledStar: function(src, alt) {
			filledStarSrc = src;
			filledStarAlt = alt;
		},
		
		setEmptyStar: function(src, alt) {
			emptyStarSrc = src;
			emptyStarAlt = alt;
		}
	};
}();

