//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.RatingCancel", obj)

        var fill = function() {
          drain();
          $("a", stars).css("width", "100%");
          //stars.lt(stars.index(this) + 1).addClass("Hover"); //deprecated since jQuery > 1.1
		  stars.slice(0, stars.index(this) + 1).addClass("Hover");
        },
        drain = function() {
          stars.removeClass("On").removeClass("Hover");
        },
        reset = function() {
          drain();
          //stars.lt(rating[0]).addClass("on"); //deprecated since jQuery > 1.1
		  stars.slice(0, 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();
          $(this).addClass("On");
        },
        cancelOff = function() {
          reset();
          $(this).removeClass("On")
        }

    stars.hover(fill, reset).focus(fill).blur(reset).click(function() {
        $('.RatingContainer').block({
			message: "Bitte warten...",
			overlayCSS:  {  
				opacity: '0.0',
				backgroundColor: '#ffffff',
				cursor: 'default'
			},
			centerX: 0,
			css: { 
				border: 'none', 
				padding: '14px', 
				backgroundColor: '#AECADC', 
				'-webkit-border-radius': '5px', 
				'-moz-border-radius': '5px', 
				opacity: '0.85',
				color: '#ffffff',
				cursor: 'default',
				left: '110px',
				width: '150px'
			}
		});
		
		rating = [stars.index(this) + 1, 0];
       
		url = (obj.url).replace("##girlId##", obj.itemId).replace("##rateInt##", $("a:first", this)[0].rel).replace("##authToken##", obj.authToken);
		
		$.get(url, 
			function(data){
				var result = data.split("\n");
				
				if (result.length > 0) {
					var itemId = result[0];
					//console.log("itemId: " + itemId);
					var rating = result[1];
					//console.log("rating: " + rating);
					var votes = result[2];
					//console.log("votes: " + votes);
					var userRating = result[3];
					//console.log("userRating: " + userRating);
					var galleryAuthToken = result[4];
					//console.log("galleryAuthToken: " + galleryAuthToken);
				}
				
				$('.RatingContainer').block({
					message: "Bewertung abgegeben",
					overlayCSS:  {  
						opacity: '0.0',
						backgroundColor: '#ffffff',
						cursor: 'default'
					},
					centerX: 0,
					css: { 
						border: 'none', 
						padding: '14px', 
						backgroundColor: '#AECADC', 
						'-webkit-border-radius': '5px', 
						'-moz-border-radius': '5px', 
						opacity: '0.85',
						color: '#ffffff',
						cursor: 'default',
						left: '110px',
						width: '150px'
					}
				});
			}
		);

        reset(); stars.unbind().addClass("Rated");
        $(this).css("cursor", "default");
        return false;
      });

    reset();
    return obj;
  }

  var buildInterface = function(form) {
    //var container = $("<div></div>").attr({"title": form.title, "class": form.className});
	var container = $("<div></div>").addClass(form.className);
	
	//keep url in mind
	if (form.action == '')
		$.extend(container, {url: ratingUrl});
	else
		$.extend(container, {url: form.action});
    
	//get number of stars
    var optGroup  = $("option", $(form));
    var size      = optGroup.length;
    optGroup.each(function() {
      //container.append($('<div class="Star"><a href="#' + this.value + '" title="Give it ' + this.value + '/'+ size +'">' + this.value + '</a></div>'));
	  container.append($('<div class="Star"><a href="#" rel="' + this.value + '">' + this.value + '</a></div>'));
    });
	
	//get id of current gallery
	$.extend(container, {itemId: $('#itemId').val()});
	
	//keep authToken in mind
	$.extend(container, {authToken: $('#authToken').val()});
	
    $(form).after(container).remove();
    return container;
  }

  var averageRating = function(el) { 
	//return el.title.split(":")[1].split(".") 
	return $('#rating').val().split("."); //case-sensitive, fields name is like it is in gallery2 database
  }
  

  $.fn.rating = function() { return $($.map(this, function(i) { return buildRating(i)[0] })); }

	if ($.browser.msie) try { document.execCommand("BackgroundImageCache", false, true)} catch(e) { }

})(jQuery)