// based on this: http://www.visualjquery.com/rating/rating_redux.html

(function($) {
  var buildRating = function(obj) {
    var rating = averageRating(obj),
        obj    = buildInterface(obj),
        stars  = $("div.star", obj),
        cancel = $("div.cancel", obj);

        var fill = function() {
          drain();
          $("a", stars).css("width", "100%");
		  var kk = stars.index(this) + 1;
		  $("div.star:lt("+kk+")", obj).addClass("hover");
        },
        drain = function() {
          stars.removeClass("on").removeClass("hover");
        },
        reset = function(r,s) {
		  var tmp1 = obj.attr("rel").split(","), rating = '', imgid = 0,	canvote = false;
		  for (i=0;i<tmp1.length;i++) { tmp2 = tmp1[i].split(":"); eval('var '+tmp2[0]+' = "' + tmp2[1] +'";'); }
		  var rr = (r=="VotesAvg") ? (s+"").split(".") : rating.split(".");
          drain();
		  $("div.star:lt("+rr[0]+")", obj).addClass("on");
          if(percent = rr[1] ? rr[1] * 10 : null) {
            stars.eq(rr[0]).addClass("on").children("a").css("width", percent + "%");
            $("div.star:gt("+rr[0]+")", obj).removeClass("on");
          } else { }
		  for (j=0;j<stars.length;j++) {
			stars.removeAttr("title");
			stars.eq(j).find("a").attr({title: (j+1)});
		  }
		  if (canvote=="False") {
			stars.attr({title: rating}).unbind().addClass("done").find("a").removeAttr("title");	
		  }
        },
        cancelOn = function() {
          drain();
          $(this).addClass("on");
        },
        cancelOff = function() {
          reset();
          $(this).removeClass("on");
        }

    stars
      .hover(fill, reset).focus(fill).blur(reset)
      .click(function() {
        var vote = [stars.index(this) + 1];
		var tmp1 = $(this).closest("div.rating").attr("rel").split(","), rating = '', imgid = 0;
		for (i=0;i<tmp1.length;i++) { tmp2 = tmp1[i].split(":"); eval('var '+tmp2[0]+' = "' + tmp2[1] +'";'); }		
		$.ajax({
			url: "/webservices/setvisitorimagevote.aspx?Vote="+vote+"&ImageID="+imgid+"",
			cache: false,
			dataType: 'json',
			success: function(d,t){
				if (d.Error=="User is not logged in") { alert("A szavazáshoz be kell jelentkezni."); return; }
				else if (d.Error=="None") { 
					reset("VotesAvg",d.VotesAvg); stars.unbind().addClass("done");
					$(this).css("cursor", "default");
					return false;			
				}
				else {
				}
			}
		});			
      });

    reset();
    return obj;

  }

  var buildInterface = function(form) {
	var tmp1 = $(form).attr("rel").split(","),	rating = '',	imgid = 0,	canvote = false;
	for (i=0;i<tmp1.length;i++) { tmp2 = tmp1[i].split(":"); eval('var '+tmp2[0]+' = "' + tmp2[1] +'";'); }
    var container = $("<div></div>").attr({"rel": $(form).attr("rel"), "class": form.className});
    $.extend(container, {url: form.action})
    var optGroup  = $("option", $(form));
    var size      = optGroup.length;
    optGroup.each(function() {
      container.append($('<div class="star"><a href="javascript:;" class="fill">' + this.value + '</a></div>'));
    });
    $(form).after(container).remove();
    return container;
  }

  var averageRating = function(el) {
	var tmp1 = $(el).attr("rel").split(","),	rating = '',	imgid = 0;
	for (i=0;i<tmp1.length;i++) { tmp2 = tmp1[i].split(":");	eval('var '+tmp2[0]+' = "' + tmp2[1] +'";'); }	  
	return rating.split(".");	  
  }

  $.fn.rating = function() { return $($.map(this, function(i) { return buildRating(i)[0] })); }

	if ($.browser.msie) try { document.execCommand("BackgroundImageCache", false, true)} catch(e) { }

})(jQuery)
