function Voting(id) {
	var one   = 0;
	var two   = 0;
	var three = 0;
	var four  = 0;
	var five  = 0;
	var rate = new Array(5);
	var images = '';
	var resultstr = 'Votings: %s';
	var output;
	var voteDelegate = function() { return true; };
	var starElements = new Array(5);

	function initialize() {
		rate[0] = '';
		rate[1] = '';
		rate[2] = '';
		rate[3] = '';
		rate[4] = '';
	}
	
	this.setRate = function(i, str) {
		rate[i] = str;
	}
	
	this.getRate = function(i) {
		return rate[i];
	}
	
	this.setVotes = function(_one, _two, _three, _four, _five) {
		one = _one;
		two = _two;
		three = _three;
		four = _four;
		five = _five;
	}
	
	this.getSum = function() {
		return one + two + three + four + five;
	}
	
	this.setOutput = function(o) {
		output = o;
	}
	
	this.getOutput = function() {
		return output;
	}
	
	this.setImagesPath = function(path) {
		images = path;
	}
	
	this.getImagesPath = function() {
		return images;
	}
	
	this.setOutputFormat = function(str) {
		resultstr = str;
	}
	
	this.getOutputFormat = function() {
		return resultstr;
	}
	
	this.setVoteDelegate = function(pointer) {
		voteDelegate = pointer;
	}
	
	this.vote = function(num) {
		vote(num);
	}
	
	function vote(num) {
		switch (num) {
			case 0:
				one = one+1;
				if (voteDelegate(0))
					show();
				else {
					one = one-1;
					return;
				}
					
				break;
			case 1:
				two = two+1;
				if (voteDelegate(1))
					show();
				else {
					two = two-1;
					return;
				}

				break;
			case 2:
				three = three+1;
				if (voteDelegate(2))
					show();
				else {
					three = three-1;
					return;
				}

				break;
			case 3:
				four = four+1;
				if (voteDelegate(3))
					show();
				else {
					four = four-1;
					return;
				}

				break;
			case 4:
				five = five+1;
				if (voteDelegate(4))
					show();
				else {
					five = five-1;
					return;
				}

				break;
		}
		
		for (var i = 0; i < 5; i++) {
			starElements[i].onclick = function() { return; };
			starElements[i].onmouseover = function() { return; };
			starElements[i].onmouseout = function() { return; };
			starElements[i].style.cursor = 'default';
		}
	}
	
	this.show = function() {
		show();
	}
	
	function show() {
		if (typeof(output) == 'undefined')
			return;
		
		var sum = one + two + three + four + five;
		var note = Math.round((2*one + 4*two + 6*three + 8*four + 10*five) / sum);

		while (output.hasChildNodes())
			output.removeChild(output.firstChild);
		
		var star = new Array(4);
		star[0] = images + '/stern1_small.jpg';
		star[1] = images + '/stern2_small.jpg';
		star[2] = images + '/stern3_small.jpg';
		star[3] = images + '/stern4_small.jpg';

		for (var i = 0; i < 5; i++) {
			starElements[i] = document.createElement('img');
			
			if (note >= 2*(i+1))
				starElements[i].src = star[0];
			else if (note < 2*(i+1) && note > 2*i)
				starElements[i].src = star[1];
			else
				starElements[i].src = star[3];
			
			starElements[i].alt = rate[i];
			starElements[i].title = rate[i];

			var cookieSet = false;
			if (document.cookie) {
				var tmp = document.cookie.split("; ");
				for (var k = 0; k < tmp.length; k++) {
					var tmp_name = tmp[k].split("=");
					if (tmp_name[0] == id) {
						cookieSet = true;
						break;
					}
				}
			}
			
			if (!cookieSet) {
				starElements[i].onclick = function() {
					var c = 0;
					for (var j = 0; j < 5; j++) {
						if (starElements[j] == this)
							break;
							
						c++;
					}
					
					vote(c);
					document.cookie = id + '=set';
				}

				starElements[i].style.cursor = 'pointer';
				starElements[i].onmouseover = function() {
					for (var j = 0; j < 5; j++) {
						starElements[j].rel = starElements[j].src;
						starElements[j].src = star[2];
						
						if (starElements[j] == this)
							break;
					}
				}
				starElements[i].onmouseout = function() {
					for (var j = 0; j < 5; j++) {
						starElements[j].src = starElements[j].rel;
						
						if (starElements[j] == this)
							break;
					}
				}
			}
			
			output.appendChild(starElements[i]);
		}

		output.appendChild(document.createElement('br'));
		output.appendChild(document.createTextNode(resultstr.replace(/%s/, sum)));
	}
	
	initialize();
}
