(function($) {
  var buildRating = function(obj,text1,text2) {
    var rating = averageRating(obj),
        obj    = buildInterface(obj,text1,text2),
        stars  = jQuery("span.estrella", obj),
        cancel = jQuery("span.cancel", obj)

        var fill = function() {
          drain();
          jQuery("a", stars).css("width", "100%");
          stars.lt(stars.index(this) + 1).addClass("hover");
        },
        drain = function() {
          stars.removeClass("on").removeClass("hover");
        },
        reset = function() {
          drain();
          stars.lt(rating[0]).addClass("on");
          if(percent = rating[1] ? rating[1] * 10 : null) {
            stars.eq(rating[0]).addClass("on").children("a").css("width", percent + "%");
          }
        },
        cancelOn = function() {
          drain();
          jQuery(this).addClass("on");
        },
        cancelOff = function() {
          reset();
          jQuery(this).removeClass("on")

        }

    stars
      .hover(fill, reset).focus(fill).blur(reset)
      .click(function() {
        rating = [stars.index(this) + 1, 0];
        $.post(obj.url, { rating: jQuery("a:first", this)[0].href.slice(1) });
        reset(); stars.unbind().addClass("done");
        jQuery(this).css("cursor", "default");
        return false;
      });

    reset();
    return obj;

  }

  var buildInterface = function(form,text1,text2) {
    var container = jQuery("<div></div>").attr({"title": form.title, "class": form.className, "id": 'votoUser'});
    var optGroup  = jQuery("option", jQuery(form));
    var size      = optGroup.length-1;
	var inputGroup = jQuery("input", jQuery(form));

    var parameters = "";
	for (j=0; j<inputGroup.length; j++) {
		var input = inputGroup[j];
		if (input.type == "hidden") {
			if (parameters == "") {
				parameters += "?";
			} else {
				parameters += "&";
			}
			parameters += input.name + "=" + input.value;
		}
	}
	var clickable;
	if (readCookie("vote_"+articleId)) {
		clickable = false;
	} else {
		clickable = true;
	}
    for (i=0; i<optGroup.length; i++) {
		var option = optGroup[i];
		if (option.value == "0") {
			container.append(jQuery('<strong>'+text1+'</strong>'));
		} else {
			if (clickable) {
				var span = jQuery('<span class="estrella"><a onClick=\'voteMedia("'+ form.action + parameters +'&voteValue='+ option.value +'")\' title="'+text2+' ' + option.value + '/'+ size +'"></a></span>');
				jQuery(container).append(span);
			} else {
				container.append(jQuery('<span class="estrella"><a/></span>'));
			}
		}
    }
    jQuery(form).after(container).remove();
    return container;
  }

  var averageRating = function(el) { return el.title.split(":")[1].split(".") }

  $.fn.rating = function(text1,text2) { return jQuery($.map(this, function(i) { return buildRating(i,text1,text2)[0] })); }

	if ($.browser.msie) try { document.execCommand("BackgroundImageCache", false, true)} catch(e) { }

})(jQuery)