﻿(function($){

var MyRatingObjectClass = function(el, _id, value)
{
    el = $(el);
    var obj = this;
    var id, stars;
    var averageRating, averageIndex, averagePercent;

    if (value < 0.0)
        value = 0.0;
    if (value > 5.0)
        value = 5.0;
    averageRating = value;
    averageIndex = Math.floor(value);
    averagePercent = (value - averageIndex) * 10.0;
    id = _id;
    s = '#rating_' + id.toString();
    stars = $(s).find("div.star")
        .mouseover(drainFill)
        .focus(drainFill)
        .mouseout(drainReset)
        .blur(drainReset)
        .click(click);
    reset();

    this.setVal = function(value) {
        if (value < 0.0)
            value = 0.0;
        if (value > 5.0)
            value = 5.0;
        averageRating = value;
        averageIndex = Math.floor(value);
        averagePercent = (value - averageIndex) * 10.0;
        drainReset();
        return;
    }

    function drainFill() {
        drain();
        fill(this);
        return;
    }
    function drainReset() {
        drain();
        reset();
        return;
    }
    function resetRemove() {
        reset();
        jQuery(this).removeClass('on');
        return;
    }
    function drainAdd() {
        drain();
        jQuery(this).addClass('on');
        return;
    }
    function click() {
        var voteVal;

        voteVal = stars.index(this) + 1;
        if (voteVal == 0)
            drain();
        DoRatingExec(obj, id, voteVal);
        return false;
    }

    function fill(elem) {
        stars.find("a").css("width", "100%");
        stars.slice(0, stars.index(elem)+ 1).addClass("hover");
        return;
    }

    function drain() {
        stars.removeClass("on hover");
        return;
    }

    function reset() {
        var percent;

        stars.slice(0,averageIndex).addClass("on");

        percent = averagePercent ? (averagePercent * 10) : 0;
        if (percent > 0)
            stars.eq(averageIndex).addClass("on").children("a").css("width", percent + "%"); 
        return;
    }
    return;
};

$.fn.MyRatingObject = function(_id, value)
{
    return this.each(function()
    {
        var element = $(this);

        if (element.data('MyRating'))
            return;
        var myRating = new MyRatingObjectClass(this, _id, value);
        element.data('MyRating', myRating);
    });
};

})(jQuery);
