jQuery.fn.SimpleRating = function (options) {
    var settings = jQuery.extend({
        StarNumber: 5,
        CurrentRate: 0,
        normalClass: 'RatingNormal',
        hoverClass: 'RatingHover',
        selectClass: 'RatingSelect',
        disableClass: 'RatingDisable',
        Onclick: $(this).attr('id') + 'RatingClick',
        OnclickDisable: $(this).attr('id') + 'RatingClickDisable',
        Cursor: 'pointer',
        Enable: true
    }, options)
    SetRate = function (x, parentid) {
        RatevarName = parentid + 'Rate'
        eval(RatevarName + '=' + x)
        //x = x - 1
        var NO = eval(parentid + 'StarNo')
        for (q = 0; q <= NO; q++) {
            $('#' + parentid + ' ' + '#mydiv' + q).addClass(eval(parentid + 'normalclass'));
            $('#' + parentid + ' ' + '#mydiv' + q).removeClass(eval(parentid + 'hoverclass'));
            $('#' + parentid + ' ' + '#mydiv' + q).removeClass(eval(parentid + 'selectclass'));
        }
        if (x == 1) {
            x = 0

            $('#' + parentid + ' ' + '#mydiv' + x).removeClass(eval(parentid + 'normalclass'));
            $('#' + parentid + ' ' + '#mydiv' + x).addClass(eval(parentid + 'hoverclass'));
            $('#' + parentid + ' ' + '#mydiv' + x).addClass(eval(parentid + 'selectclass'));
        }
        else if (x > 1) {
            x = x - 1
            for (q = 0; q <= x; q++) {
                $('#' + parentid + ' ' + '#mydiv' + q).removeClass(eval(parentid + 'normalclass'));
                $('#' + parentid + ' ' + '#mydiv' + q).addClass(eval(parentid + 'hoverclass'));
                if (q == x - 1) {
                    $('#' + parentid + ' ' + '#mydiv' + x).removeClass(eval(parentid + 'normalclass'));
                    $('#' + parentid + ' ' + '#mydiv' + x).addClass(eval(parentid + 'hoverclass'));
                    $('#' + parentid + ' ' + '#mydiv' + x).addClass(eval(parentid + 'selectclass'));
                }
            }
        }
    }

    function myF(x, parentid, RatevarName) {


        $('#' + parentid + ' ' + '#mydiv' + x).mouseover(function () {
            for (q = settings.StarNumber; q > x; q--) {//Remove HoverClass From Item After
                $('#' + parentid + ' ' + '#mydiv' + q).removeClass(settings.hoverClass);
                $('#' + parentid + ' ' + '#mydiv' + q).removeClass(settings.selectClass);
                $('#' + parentid + ' ' + '#mydiv' + q).addClass(settings.normalClass);
            }
            for (q = 0; q <= x; q++) {//Add Hover Class to This And Items Before
                $('#' + parentid + ' ' + '#mydiv' + q).removeClass(settings.normalClass);
                $('#' + parentid + ' ' + '#mydiv' + q).removeClass(settings.selectClass);
                $('#' + parentid + ' ' + '#mydiv' + q).addClass(settings.hoverClass);
            }

            //            $('#' + parentid + ' ' + '#mydiv' + x).mouseout(function() {

            //                for (q = 0; q <= x; q++) {
            //                    $('#' + parentid + ' ' + '#mydiv' + q).removeClass(settings.hoverClass);
            //                    $('#' + parentid + ' ' + '#mydiv' + q).removeClass(settings.selectClass);
            //                    $('#' + parentid + ' ' + '#mydiv' + q).addClass(settings.normalClass);

            //                }
            //            })
        })
        $('#' + parentid + ' ' + '#mydiv' + x).click(function () {
            if (eval(parentid + 'Enable')) { eval(RatevarName + '=' + (x + 1)) }
            $('#' + parentid + ' ' + '#mydiv' + x).addClass(settings.selectClass);
            $('#' + parentid + ' ' + '#mydiv' + x).mouseout(function () {
                if (x == 0) {
                    $('#' + parentid + ' ' + '#mydiv' + x).removeClass(settings.normalClass);
                    $('#' + parentid + ' ' + '#mydiv' + x).addClass(settings.hoverClass);
                    $('#' + parentid + ' ' + '#mydiv' + x).addClass(settings.selectClass);
                    //if (eval(parentid + 'Enable')) { eval(RatevarName + '=' + (x + 1)) }

                }
                else {


                    for (q = 0; q <= x; q++) {
                        $('#' + parentid + ' ' + '#mydiv' + q).removeClass(settings.normalClass);
                        $('#' + parentid + ' ' + '#mydiv' + q).addClass(settings.hoverClass);
                        if (q == x - 1) {
                            $('#' + parentid + ' ' + '#mydiv' + x).removeClass(settings.normalClass);
                            $('#' + parentid + ' ' + '#mydiv' + x).addClass(settings.hoverClass);
                            $('#' + parentid + ' ' + '#mydiv' + x).addClass(settings.selectClass);
                        }
                    }
                }
            })
            var fname = settings.Onclick
            var fnameDis = settings.OnclickDisable



            try {
                if (eval(parentid + 'Enable') == true)//If Enable
                {
                    { eval(fname + '(' + (x + 1) + ')'); }
                }
                else//If Disable
                {
                    { eval(fnameDis + '(' + (x + 1) + ')'); }
                }
            }
            catch (exception) {
            }



        })

    }
    function setMoueseLeave(parentid, RatevarName) {
        $('#' + parentid).mouseleave(function () {

            var NO = eval(parentid + 'StarNo')
            var x = eval(RatevarName)
            //alert(x)
            for (q = 0; q < NO; q++) {
                $('#' + parentid + ' ' + '#mydiv' + q).removeClass(settings.hoverClass);
                $('#' + parentid + ' ' + '#mydiv' + q).addClass(settings.normalClass);
                $('#' + parentid + ' ' + '#mydiv' + q).removeClass(settings.selectClass);
            }
            for (q = 0; q < x; q++) {
                $('#' + parentid + ' ' + '#mydiv' + q).removeClass(settings.normalClass);
                $('#' + parentid + ' ' + '#mydiv' + q).addClass(settings.hoverClass);
                if (q == x - 1) {
                    $('#' + parentid + ' ' + '#mydiv' + q).addClass(settings.hoverClass);
                    $('#' + parentid + ' ' + '#mydiv' + q).addClass(settings.selectClass);
                }

            }
        });
    }
    this.each(function () {
        //################# Declare This Instance Variables
        eval($(this).attr('id') + 'Enable=' + settings.Enable)
        eval($(this).attr('id') + 'StarNo=' + settings.StarNumber)
        eval($(this).attr('id') + 'normalclass=' + '"' + settings.normalClass + '"')
        eval($(this).attr('id') + 'hoverclass=' + '"' + settings.hoverClass + '"')
        eval($(this).attr('id') + 'selectclass=' + '"' + settings.selectClass + '"')
        eval($(this).attr('id') + 'disableclass=' + '"' + settings.disableClass + '"')
        RatevarName = $(this).attr('id') + 'Rate'
        eval(RatevarName + '=' + settings.CurrentRate)
        $(this).html('');

        for (i = 0; i < settings.StarNumber; i++) {

            var arr = new Array();
            var div = document.createElement('div');
            $(div).addClass(settings.normalClass);
            $(div).attr('id', 'mydiv' + i)
            if (settings.Cursor == 'pointer') { }
            $(div).css('float', 'left')
            $(this).attr('title', settings.DivTitle)
            $(this).append(div);
            myF(i, $(this).attr('id'), RatevarName);
        }

        var div2 = document.createElement('div');
        $(div2).css({ 'clear': 'both' });
        $(this).append(div2);
        setMoueseLeave($(this).attr('id'), RatevarName)
        SetRate(eval(RatevarName), $(this).attr('id'))

        //        settings.Enable = false
    });
    // eval('alert(' + $(this).attr('id') + 'Enable' + ')')
    RatingDisable = function Disable(id) {
        eval(id + 'Enable=false')

        try
        { eval(id + 'Disabled()') }
        catch (ex)
        { }
    }
    RatingEnable = function Enable(id) {
        eval(id + 'Enable=true')
        try
            { eval(id + 'Enabled()') }
        catch (ex)
           { }

    }
};
