StarRating = Class.create({
    initialize: function(id, images, options) {
        var img = $(id);
        Event.observe(img, "mousemove", function(e) {
            if (!img.getAttribute("orgSrc")) {
                img.setAttribute("orgSrc", img.src);
            }
            var width = img.offsetWidth;
            var cell = width / images.length;
            var offsetX = !isNaN(e.offsetX) ? e.offsetX: e.layerX - img.offsetLeft;
            // Position.cumulativeOffset(img)[0]
            if (offsetX == 0) offsetX++;
            if (offsetX > width) offsetX = width;
            var rate = Math.ceil(offsetX / cell);
            if (rate < 1) {
                rate = 1;
            }
            if (options.basePath) {
                img.src = options.basePath + images[rate - 1];
            } else {
                img.src = images[rate - 1];
            }
            img.setAttribute("rate", rate);
        });
        Event.observe(img, "mouseout", function(e) {
            var src = img.getAttribute("orgSrc");
            if (src) {
                img.src = src;
            }
        });
        if (options.onClick) {
            Event.observe(img, "click", function(e) {
                img.removeAttribute("orgSrc");
                options.onClick.call(this, img, img.getAttribute("rate"));
            });
        }
    }
});
