var EissRating = Class.create({
	initialize: function(url, rootUrl, containerClass) {

		var options = Object.extend({
			hiddenInputClass: 'rating-input',
			upImgClass: 'rating-up',
			downImgClass: 'rating-down',
			outputContainerClass: 'rating-value-container',
			cookieName: 'rating'
		}, arguments[3] || {});

		this.options = options;
		this.url = url;
		this.containerClass = containerClass;
		this.rootUrl = rootUrl;
		this.bindEvents();
	},
	bindEvents: function() {
		var self = this;
		$$("." + this.containerClass).each(function(element){

			var input_element = element.down('input.' + self.options.hiddenInputClass);

			var entityId = input_element.value;

			var upImg = element.down('img.' + self.options.upImgClass);
			var downImg = element.down('img.' + self.options.downImgClass);

			var jar = new CookieJar({
				expires:3600   // 1 hour
			});

			var identifier = jar.get(self.options.cookieName + entityId);

			if (identifier == null) {
				upImg.observe('click', (function(){self.sendRating(upImg, 'up', entityId)}).bindAsEventListener(this));
				downImg.observe('click', (function(){self.sendRating(upImg, 'down', entityId)}).bindAsEventListener(this));
			} else {
				upImg.hide();
				downImg.hide();
			}
		});
	},
	sendRating: function(element, directionValue, identifier) {


		var container = element.up("." + this.containerClass);
		var upImg = container.down('img.' + this.options.upImgClass);
		var downImg = container.down('img.' + this.options.downImgClass);
		var outputContainer = container.down("." + this.options.outputContainerClass);
		var cookieName = this.options.cookieName;

		var rootUrl = this.rootUrl;
		new Ajax.Updater(outputContainer, this.url, {
			parameters: {'direction': directionValue, 'identifier' : identifier},
			onCreate: function () {
				startAjax(rootUrl);
			},
			onComplete: function () {
				stopAjax();

				var jar = new CookieJar({
					expires:3600   // 1 hour
				});

				jar.put(cookieName + identifier, 'true');

				upImg.hide();
				downImg.hide();
			}
		});
	}
});
