/**
 * jquery.ui.poll.js
 * 
 * Copyright 2011, Peter Uhnák
 * 
 * Depends:
 *		jquery.ui.core.js
 *		jquery.ui.widget.js
 *		jquery.ui.sortable.js
 *
 * Optionally:
 * 
 */

(function ($) {
	$.widget('ui.poll', {
		options: {

		},
		
		_create: function () {
			var self = this,
				o = self.options,
				el = self.element;
			
			self.render();
			self.registerEvents();
		},
		
		render: function () {
			var self = this;
			
			self.renderUI();
			self.load();
		},
		
		renderUI: function () {
			var self = this,
				el = self.element;
			
			var h = $('<div class="akce-menu-nadpis"></div>');
			var p = $('<p id="poll-question"></p>');
			var opts = $('<div class="opts">');
			el.append(h);
			el.append(p);
			el.append(opts);
		},
		
		renderSender: function () {
			var self = this;
			var sender = $('<div>', {
				id: 'poll_sender',
				text: 'hlasovat',
			}).click(function () {
				var checked = $('#poll input[type="radio"]:checked');
				if (!checked[0]) {
					alert('Nebyla vybrána žádná odpověď.');
					return false;
				}
				var val = checked.val();
				var custom = '';
				var next = checked.next('input');
				if (next)
					custom = next.val();
				self.send(val, custom);
			});
			return sender;
		},
		
		renderOpt: function (row) {
			var self = this,
				el = self.element;
			var inp = $('<input>', {
				type: 'radio',
				name: 'poll_opts',
				id: 'opt_' + row.id,
				value: row.id,
			});
			var span = $('<p>');
			span.append(inp);
			if (row.type == 'option') {
				var label = $('<label>', {
					'for': 'opt_' + row.id,
					text: row.option,
				});
				span.append(label);
			} else {
				var label = $('<input>', {
					type: 'text',
					name: 'poll_custom_' + row.id,
					placeholder: row.option,
				}).click(function () { $(this).prev().click() });
				span.append(label);
				span.append('&nbsp;');
			}
			return span;
		},
		
		registerEvents: function () {
			var self = this,
				el = self.element;
		},
		
		load: function () {
			var self = this,
				el = self.element;
			$.getJSON('/poll/?do=active', {}, function (data) {
				if (data == false) {
					return el.remove();
				}
				$('#poll-question').text(data['question']);
				if (data.answers[0].votes != undefined)
					return self.renderStats(data);
				var opts = $('#poll .opts');
				$.each(data['answers'], function (key, val) {
					var opt = self.renderOpt(val);
					opts.append(opt);
				});
				el.append(self.renderSender());
				el.append($('<div>', { 'class': 'total', text: 'celkem hlasovalo '+data.votes+' lidí' }));
			});

		},
		
		renderStats: function (data) {
			var self = this,
				el = self.element;
			var opts = $('#poll .opts');
			opts.html('');
			opts.addClass('result');
			$('#poll_sender').remove();
			
			if (data === false) {
				$('<div class="voted">Vaše předchozí hlasování bylo již registrováno. Děkujeme.</div>').insertAfter(opts);
			}
			
			$.each(data.answers, function (key, val) {
				var row = $('<p>');
				var label = $('<label>', { text: val.option });
				var percent = Math.round(val.votes/data.votes * 100 * 10)/10;
				var fract = $('<var>', {
					text: percent
				});
				var img = $('<div>', {
					'class': 'bar',
					css: { width: (percent * 1.5) + 'px' }
				});
				row.append(label).append(fract).append($('<br>')).append(img);
				opts.append(row);
			});
			var total = $('#poll div.total');
			if (total[0] != undefined) {
				total.text('celkem hlasovalo '+data.votes+' lidí');
			} else {
				el.append($('<div>', { 'class': 'total', text: 'celkem hlasovalo '+data.votes+' lidí' }));
			}
		},
		
		send: function (val, custom) {
			var self = this,
				el = self.element;
			$.getJSON('/poll/?do=vote', { vote: val, custom: custom }, function (data) {
				self.renderStats(data);
			});
		}
	});
})(jQuery);
