
//адрес скрипта для запросов
var c_URL_SCRIPT = '/content-manager/scripts/ajax_poll.php';

//скрипт на который обрабатывает результаты голосования
var c_FORM_ACTION = '/content-manager/scripts/ajax_poll.php';

//ссылка на другое голосование
var c_LINK_ALL_VOTES = '/content-manager/scripts/ajax_poll.php';

//идентификатор дива в котором выводить опросы
var c_ID_DIV_POLL = 'poll';

//идентификатор дива в котором выводить архив опросов
var c_ID_DIV_ALL_POLLS = 'allvotes';

var POLLS_NOT_FOUND = 404;

//код успешного инкремента голоса
var SUCCESS_VOTE = 200;

var ALREADY_VOTED = 500;

var POLL = Class.create();

POLL.prototype = {
	initialize: function(obj_poll) { 
		
		if (!obj_poll) {
			new Ajax.Request(c_URL_SCRIPT, {
				method: 'post',
				onSuccess: function (transport) {			
					if (transport.responseText !== POLLS_NOT_FOUND) {
						var obj_poll = eval('('+transport.responseText+')');
						this._obj_poll = obj_poll;
						
						this.id = obj_poll.id;
						this.renderPoll(obj_poll);
					}
				}.bind(this),
				onFailure: function (transport) {
					alert(transport.responseText);
				}
			}			
			);
		}
		else {
			this._obj_poll = obj_poll;
			this._div = new Element('div',{'class':'poll'});
			this.id = obj_poll.id;
			this.renderPoll(obj_poll);
		}
			
	},	
	renderPoll: function(obj_poll) {
		var divPollBorder = new Element('div',{'class':'pollborder'});
		var par = new Element('p',{'class':'polltitle'});
		par.appendChild(document.createTextNode(obj_poll.question));
		
		var form = new Element('form',{'action':c_FORM_ACTION,'method':'post'});
		
		for(var i=0;i < obj_poll.answers.length; i++) {
			var divRadio = new Element('div',{'class':'radiolayout'});
			
			var id = obj_poll.answers[i].id;
			var label = new Element('label',{'for':id});
			var input = new Element('input',{'id':id,'type':'radio','name':'answers[]','class':'radioinput','value':id});
			var span = new Element('span',{'class':'radiolable'});
			var spanText = document.createTextNode(obj_poll.answers[i].answer);
			
			input.observe('click',function(e) {
					var elem = Event.element(e);
					this._id_answer = elem.value; 
				
			}.bind(this));
				
			span.appendChild(spanText);
			label.appendChild(input);
			label.appendChild(span);
			
			divRadio.appendChild(label);
			form.appendChild(divRadio);
		}		
		this.form = form;
		
		//при сабмите формы увеличиваем на один счетчик для ответа в объекте _obj_poll
		Event.observe(form,'submit',
				function(e) {
					e.stop();				
					this.clear();
					
					if (Prototype.Browser.IE) {
					
						var params = encodeURI('poll_id=' + this.id + '&submit_poll=1&answers[0]='+this._id_answer);
						
						new Ajax.Request(c_URL_SCRIPT+'?'+params,{
							method: 'get',						
							onSuccess: function(transport){
							  	
								if (transport.responseText != ALREADY_VOTED) {  	
																
									//увеличиваем счетчки этого ответа
					    			for (var i=0; i < this._obj_poll.answers.length; i++) {
					    				if (this._obj_poll.answers[i].id == this._id_answer) 
					    					this._obj_poll.answers[i].total++;
					    			}
								}
			    				this.renderResults();	
							  					  	
					 		}.bind(this),
					 		onFailure: function(transport) {
					 			alert('ds');
					 		}
						
						});
					} else {
							
					this.form.request({
					  method: 'get',
					  encoding:'UTF-8',					  
					  onSuccess: function(transport){
					  	
						if (transport.responseText != ALREADY_VOTED) {  	
														
							//увеличиваем счетчки этого ответа
			    			for (var i=0; i < this._obj_poll.answers.length; i++) {
			    				if (this._obj_poll.answers[i].id == this._id_answer) 
			    					this._obj_poll.answers[i].total++;
			    			}
						}
	    				this.renderResults();	
					  					  	
					  }.bind(this)
					});		
					}
					return false;
					//var	id_answer = this.form.elements[];	
				}.bind(this)
		);
		
		var divRadioBottom = new Element('div',{'class':'radiobottom'});
		var divRadioSubmitLayout = new Element('div',{'class':'radiosubmitlayout'});
		var inputSubmit = new Element('input',{'type':'submit','name':'submit_poll','class':'radiosubmit','value':'Голосовать'});	    var divResultLayout = new Element('div',{'class':'resultlayout'});
		
		var inputPollID = new Element('input',{'type':'hidden','name':'poll_id','value':this._obj_poll.id});
		
		var linkResults = new Element('a',{'class':'novis hand'});
		linkResults.appendChild(document.createTextNode('Результаты'));
		
		
		//обрабатываем клик по ссылке "Результаты"
		linkResults.observe('click',
				function(e){					
					e.stop();				
					this.clear();	
					this.renderResults();
				}.bind(this)
		);
		
		divRadioSubmitLayout.appendChild(inputSubmit);
		divRadioBottom.appendChild(divRadioSubmitLayout);
		
		divResultLayout.appendChild(linkResults);
		divRadioBottom.appendChild(divResultLayout);
		
		form.appendChild(divRadioBottom);
		form.appendChild(inputPollID);
		
		var divClear = new Element('div',{'class':'ieclear'});
		form.appendChild(divClear);
		
			
		divPollBorder.appendChild(par);
		divPollBorder.appendChild(form);

		this._append(divPollBorder);	
		
		
		//отсутствие собственного дива признак вывода всех опросов, там не нужен подвал
		if (!this._div)
			this.bottom();
		
	},
	bottom: function() {
		if (this._obj_poll.total > 1) {
			
			var divAllVotes = new Element('div',{'class':'allvotes'});
			var linkAllVotes = new Element('a',{'href':'javascript:void(0)','class':'gray'});
			
			var linkArchive = new Element('a',{'href':'/allvotes/','class':'gray'});	
			
			//обрабатываем клик "Другое голосование"
			linkAllVotes.observe('click',
					function(e) {
						this.clickAllVotes();					
					}.bind(this)
			);
			
			linkAllVotes.appendChild(document.createTextNode('Другой опрос'));
			linkArchive.appendChild(document.createTextNode('Все опросы'));
			
			
			var table = new Element('table');
			var tbody = new Element('tbody');
			var tr1 = new Element('tr');
			var td1 = new Element('td',{'class':'left'});
			td1.appendChild(linkAllVotes);
			tr1.appendChild(td1);
			
						
			var td2 = new Element('td',{'class':'right'});
			td2.appendChild(linkArchive);
			tr1.appendChild(td2);
						
			tbody.appendChild(tr1);
			table.appendChild(tbody);
			
			//divAllVotes.appendChild(linkAllVotes);
			//divAllVotes.appendChild(document.createTextNode('  '));
			//divAllVotes.appendChild(linkArchive);
			
			divAllVotes.appendChild(table);
			$(c_ID_DIV_POLL).appendChild(divAllVotes);
		}
	},
	//Другое голосование
	clickAllVotes: function(){
		this.clear();
		new Ajax.Request(c_URL_SCRIPT + '?next_after=' + this.id, {
			method: 'post',
			onSuccess: function (transport) {			
				if (transport.responseText !== POLLS_NOT_FOUND) {
					var obj_poll = eval('('+transport.responseText+')');
					this._obj_poll = obj_poll;
					this.id = obj_poll.id;
					this.renderPoll(obj_poll);
				}
			}.bind(this),
			onFailure: function (transport) {
				
			}
		}			
		);
		
	},
	clear: function() {
		if (!this._div)
			$(c_ID_DIV_POLL).innerHTML = '';
		else 
			this._div.innerHTML = '';
	},
	renderResults: function() {
		var divPollBorder = new Element('div',{'class':'pollborder'});
		var par = new Element('p',{'class':'polltitle'});
		par.appendChild(document.createTextNode(this._obj_poll.question));
		divPollBorder.appendChild(par);
		
		var count_all_votes = 0;
		for(var i=0;i < this._obj_poll.answers.length; i++) {
			count_all_votes = count_all_votes + parseInt(this._obj_poll.answers[i].total);
		}
		
		for(var i=0;i < this._obj_poll.answers.length; i++) {
			var divResultLayout = new Element('div',{'class':'resultlayout'});
			
			var total_answer = this._obj_poll.answers[i].total;
			var procent = Math.floor(total_answer * 100/count_all_votes);		
			
			var divResult = new Element('div',{'class':'result'});
			var nobr = new Element('nobr');
			nobr.appendChild(document.createTextNode(total_answer+' '));
			nobr.appendChild(document.createTextNode(' '));			
			var spanProcent = new Element('span',{'class':'persent'});
			spanProcent.appendChild(document.createTextNode(isNaN(procent) ? '' : procent +'%'));
			nobr.appendChild(spanProcent);
			
			divResult.appendChild(nobr);
			
			var width = (isNaN(procent) ? 0 : procent < 1 ? '1px' : (procent < 2 && procent >= 1) ? '2px' : procent + '%');
			var divProgress = new Element('div',{'class':'progress','style':'width:'+width});
			var span = new Element('span',{'class':'resultlable'});
			var spanText = document.createTextNode(this._obj_poll.answers[i].answer);
				
			span.appendChild(spanText);			
			
			divResultLayout.appendChild(span);
			divResultLayout.appendChild(divProgress);
			divResultLayout.appendChild(divResult);
					
			divPollBorder.appendChild(divResultLayout);
		}		
				
		var divRadioBottom = new Element('div',{'class':'radiobottom'});
		var divRadioSubmitLayout = new Element('div',{'class':'radiosubmitlayout'});
		
		var linkResults = new Element('a',{'href':'javascript:void(0)','class':'novis'});
		linkResults.appendChild(document.createTextNode('К голосованию'));
		
		
		
		//обрабатываем клик по ссылке "К голосованию"
		linkResults.observe('click',
				function(e){					
					e.stop();				
					this.clear();	
					this.renderPoll(this._obj_poll);
				}.bind(this)
		);
		
		
		divRadioSubmitLayout.appendChild(linkResults);
		divRadioBottom.appendChild(divRadioSubmitLayout);
		divPollBorder.appendChild(divRadioBottom);
		
		var divClear = new Element('div',{'class':'ieclear'});
		divPollBorder.appendChild(divClear);
		
		this._append(divPollBorder);

		this.bottom();	
	},
	_append: function (divPollBorder) {
		if (!this._div)
			$(c_ID_DIV_POLL).appendChild(divPollBorder);
		else 
			this._div.appendChild(divPollBorder);		
	}


	
};


var table = new Element('table');

window.onload = function() {
	
	//если есть див для вывода опроса
	if ($(c_ID_DIV_POLL))
		new POLL;
	//если есть див для вывода архива опросов 
	else if ($(c_ID_DIV_ALL_POLLS)) {
		
		
		new Ajax.Request(c_URL_SCRIPT + '?all=1', {
				method: 'post',
				onSuccess: function (transport) {			
					if (transport.responseText !== POLLS_NOT_FOUND) {
						var obj_polls = eval('('+transport.responseText+')');						
						var tr = new Element('tr');									
						var tbody = new Element('tbody');
						
						tbody.appendChild(tr);					
						
						for(var i = 0;i < obj_polls.length;i++) {
							if (i > 0 && i % 3 == 0) {
								var tr = new Element('tr');
								tbody.appendChild(tr);								
							}
							var td = new Element('td',{'style':'vertical-align:top;'});	
							var poll = new POLL(obj_polls[i]);							
							td.appendChild(poll._div);						
							tr.appendChild(td);
						}
						
						table.appendChild(tbody);
						$(c_ID_DIV_ALL_POLLS).appendChild(table);
					}
				}.bind(this),
				onFailure: function (transport) {
					
				}
			}			
		);
	}
		

};
