var WineRating = new Class({
	options: {
		emptyPendingStarImage: "/img/greenStarEmpty.gif",
		filledPendingStarImage: "/img/greenStar.gif",
		emptyFixedStarImage: "/img/greyStar.gif",
		filledFixedStarImage: "/img/greenStar.gif",
		addToMyWines: new Array(),
		tempList: new Array(),
		rating: 0,
		wineId: 0,
		userIsLoggedIn: true
	},
	initialize: function(element, options) {
		/* Initialize */
		this.element = $(element);
		this.setOptions(options);
		$extend(element, this);
		var stars = element.getElements("img");
		var myHTMLRequest = new Request.HTML({
			url:'/ajax/',
			onComplete: function(responseTree, responseElements, responseHTML, responseJavaScript) {
				element.options.rating = parseInt(responseHTML);
				for (var i=0;i<5;i++) {
					if (!responseHTML) {
						stars[i].src = element.options.emptyPendingStarImage;				
					} else if (i<element.options.rating) {
						stars[i].src = element.options.filledFixedStarImage;
					} else {
						stars[i].src = element.options.emptyFixedStarImage;
					}
				}
			}
		}).get({'action':'getRating','wineId':element.options.wineId, 'time' : new Date().getTime()});
		element.getParent().addEvent('mouseout', function() {
			for (var i=0;i<5;i++) {
				if (element.options.rating == 0 || !element.options.rating) {
					stars[i].src = element.options.emptyPendingStarImage;				
				} else if (i<element.options.rating) {
					stars[i].src = element.options.filledFixedStarImage;
				} else {
					stars[i].src = element.options.emptyFixedStarImage;
				}
			}
		});
		element.getParent().getElements("td")[0].addEvents({
			'mouseout': function() {
				for (var i=0;i<5;i++) {
					if (element.options.rating == 0 || !element.options.rating) {
						stars[i].src = element.options.emptyPendingStarImage;				
					} else if (i<element.options.rating) {
						stars[i].src = element.options.filledFixedStarImage;
					} else {
						stars[i].src = element.options.emptyFixedStarImage;
					}
				}	
			},
			'mouseover': function() {
				for (var i=0;i<5;i++) {
					stars[i].src = element.options.emptyPendingStarImage;
				}
			},
			'click': function() {
				element.options.rating=0;
				var myHTMLRequest = new Request.HTML({
					url:'/ajax/',
					onComplete: function() {
					}
				}).get({'action':'rateWine','wineId':element.options.wineId,'rating':0});
				return false;		
			}
		});
		stars.each(function(star) {
			star.addEvents({
				'click': function() {
					for (var i=0;i<5;i++) {
						if (star == stars[i]) {
							element.options.rating = i+1;
						}
					}
					var myHTMLRequest = new Request.HTML({
						url:'/ajax/',
						onComplete: function() {
						}
					}).get({'action':'rateWine','wineId':element.options.wineId,'rating':element.options.rating, 'time' : new Date().getTime()});
					var myHTMLRequest = new Request.HTML({
						url:'/ajax/'
					}).get({'action':'addToMyWines','wineId':element.options.wineId, 'time' : new Date().getTime()});
					
					for (var i=0; i < element.options.tempList.length; i++) {
						if (element != element.options.tempList[i]) {
							element.options.tempList[i].options.rating = element.options.rating;
							element.options.tempList[i].updateMe();
						}
					}
					return false;				
				},
				'mouseover': function() {
					for (var i=0;i<5;i++) {
						if (star == stars[i]) {
							for (var j=0;j<5;j++) {
								if (j<=i) {
									stars[j].src = element.options.filledPendingStarImage;
								} else {
									stars[j].src = element.options.emptyPendingStarImage;
								}
							}
						}
					}
				}
			});
		});
	},
	updateMe: function() {
		var element = this.element;
		var stars = element.getElements("img");
		for (var i=0;i<5;i++) {
			if (element.options.rating == 0 || !element.options.rating) {
				stars[i].src = element.options.emptyPendingStarImage;				
			} else if (i<element.options.rating) {
				stars[i].src = element.options.filledFixedStarImage;
			} else {
				stars[i].src = element.options.emptyFixedStarImage;
			}
		}				
	}
});
WineRating.implement(new Options, new Events);