
if(typeof SK__Poll=='undefined')SK__Poll={};SK__Poll.Base=new Class({options:{},columns_map:{},initialize:function(options,view){this.options=options;this.view=view;},init:function(){this.preProcessConfiguration();this.copyTemplate();this.setAppearance();this.insertQuestion();this.insertAnswers();this.insertVoteButton();this.insertViewResultsUI();this.insertResetResultsUI();this.insertBackUI();this.setPollMode('initial');},vote:function(){var answer_index=this.getMarkedAnswerIndex();if(answer_index==-1){this.error("Please choose an answer");return;}
this.disableVoteButton();this.storeAnswer(answer_index,this.execAfterVote.bind(this))},execAfterVote:function(){this.setVoted();this.insertViewResultsUI();if(this.hasAllowedResults()){this.viewResults();}else{this.showThankYou();}},disableVoteButton:function(){if(this.isAdminView())return;$(this.options.placeholder).getElements('.vote-button').set('disabled',true);},viewResults:function(){this.getResults(this.displayResults.bind(this));},displayResults:function(answers){this.setPollMode('results');var total_votes=0;for(var i in answers){total_votes+=answers[i];}
for(var i in answers){this.displayResult(i,answers[i],total_votes);}
var placeholder=$(this.options.placeholder);var total_votes_element=placeholder.getElements('.sk-poll-results-total')[0];var total_votes_template=$$('.sk-poll-total-results-template')[0].get('text').substitute({num_votes:total_votes,votes_str:(total_votes==1?"vote":"votes")});total_votes_element.set('html',total_votes_template);},displayResult:function(answer_index,answer_votes,total_votes){var percentage=total_votes==0?0:Math.round(100.0*answer_votes/total_votes);var results_str=$$('.sk-poll-results-text-template.'+this.options.properties.ResultsFormat)[0].get('text').substitute({percentage:percentage,num_votes:answer_votes,votes_str:answer_votes==1?"vote":"votes"});var template=$$('.sk-poll-result-template')[0].get('text').substitute({answer_index:answer_index,node_id:this.options.node_id,results:results_str});var placeholder=$(this.options.placeholder).getElements('.sk-poll-answer.answer-'+answer_index)[0];if(typeof placeholder=='undefined')return;this.hideResults(answer_index);placeholder.set('html',placeholder.get('html')+template);var result_element=placeholder.getElements('.sk-poll-result')[0];var bar=placeholder.getElements('.sk-poll-result-bar-inside')[0];var width=percentage+'%';bar.setStyle('width',width);var dest_height=result_element.getStyle('height').toInt();result_element.setStyles({opacity:0,height:0,display:'block'});result_element.morph({height:[0,dest_height],opacity:[0,1]});},hideResults:function(answer_index){var result_elements=[];if(typeof answer_index=='undefined'){result_elements=$(this.options.placeholder).getElements('.sk-poll-result')||[];}else{result_elements=$(this.options.placeholder).getElements('.sk-poll-answer.answer-'+answer_index+' .sk-poll-result')||[];}
for(var i=0;i<result_elements.length;i++){result_elements[i].set('morph',{onComplete:function(){this.element.dispose();}.bind({element:result_elements[i]})});result_elements[i].morph({height:0,opacity:[1,0]});}},showThankYou:function(){this.setPollMode('thank-you');},isAdminView:function(){return this.view=='admin';},copyTemplate:function(){var template=$$('.sk-poll-template')[0].get('text');$(this.options.placeholder).set('html',template);},setAppearance:function(){var poll_obj=$(this.options.placeholder).getElements('.sk-poll')[0];poll_obj.addClass(this.options.properties.Style);poll_obj.setStyles({width:this.options.properties.Width+'px'});},insertQuestion:function(){var question=this.options.properties.Question;$(this.options.placeholder).getElements('.sk-poll-question')[0].set('html',question);},insertAnswers:function(){$(this.options.placeholder).getElements('.sk-poll-answers .sk-poll-answer').each(function(e){var index_class=e.className.split(' ').filter(function(c){return c!='sk-poll-answer';})[0];var index=index_class.substring(index_class.lastIndexOf("-")+1);if(typeof(this.options.properties["Answer"+index])!='undefined'&&this.options.properties["Answer"+index].trim()!=''){this.insertAnswer(e,index);}}.bind(this));},insertAnswer:function(placeholder,answer_index){var answer=this.options.properties["Answer"+answer_index];var template=$$('.sk-poll-answer-template')[0].get('text').substitute({answer:answer,node_id:this.options.node_id,answer_index:answer_index});placeholder.set('html',template);placeholder.setStyle('display','block');},hasAllowedResults:function(){return this.isAdminView()||(!this.isAdminView()&&this.options.properties.ViewResults=='public')||(!this.isAdminView()&&this.options.properties.ViewResults=='voters'&&this.hasVoted());},hasVoted:function(){return Cookie.read('SK__Poll'+this.options.node_id)==1;},setVoted:function(){Cookie.write('SK__Poll'+this.options.node_id,1,{duration:365,path:'/'});},insertVoteButton:function(){new Element('input',{'type':'button','class':'button vote-button','value':'Vote','disabled':!this.isAdminView()&&this.hasVoted(),'events':{'click':function(){this.vote();}.bind(this)}}).inject($(this.options.placeholder).getElements('.sk-poll .sk-poll-vote')[0]);},insertViewResultsUI:function(){if(!this.hasAllowedResults())return;var view_results_link=new Element('a',{'href':'javascript:void(null)','html':'View Results',events:{click:function(){this.viewResults();}.bind(this)}});var placeholder=$(this.options.placeholder).getElements('.sk-poll .sk-poll-view-results')[0];placeholder.empty();view_results_link.inject(placeholder);},insertResetResultsUI:function(){if(!this.isAdminView())return;var reset_results_link=new Element('a',{'href':'javascript:void(null)','html':'Reset Results',events:{click:function(){this.resetResults();this.hideResults();this.setPollMode('initial');}.bind(this)}});var placeholder=$(this.options.placeholder).getElements('.sk-poll .sk-poll-reset-results')[0];reset_results_link.inject(placeholder);},insertBackUI:function(){var back_link=new Element('a',{'href':'javascript:void(null)','html':'Back',events:{click:function(){this.hideResults();this.setPollMode('initial');}.bind(this)}});var placeholder=$(this.options.placeholder).getElements('.sk-poll .sk-poll-back')[0];back_link.inject(placeholder);},setPollMode:function(mode){var poll_obj=$(this.options.placeholder).getElements('.sk-poll');['results','initial','thank-you'].each(function(e){this.poll_obj.removeClass(e);}.bind({poll_obj:poll_obj}));poll_obj.addClass(mode);},getMarkedAnswerIndex:function(){var radios=$(this.options.placeholder).getElements('input[type=radio][name=Answer]');for(var i=0;i<radios.length;i++){if(radios[i].get('checked'))return radios[i].get('value');}
return-1;},preProcessConfiguration:function(){var columns=this.options.configuration.columns;for(var i=0;i<columns.length;i++){this.columns_map[columns[i].name]=columns[i];}},getColumnByName:function(name){return this.columns_map[name].id;},storeAnswer:function(answer_index){new SK.DB(this.options.configuration.token).getRecordsByIDs(this.options.configuration.db_id,this.options.configuration.columns,{where:[[this.getColumnByName('PollID'),'=',[this.options.node_id]]]},function(columns_meta,records,total_records){if(records.length==0){this.mgr.addAnswer(this.answer_index,this.mgr.storedAnswer.bind(this.mgr));}else{this.mgr.updateAnswer(records[0],this.answer_index,this.mgr.storedAnswer.bind(this.mgr));}}.bind({mgr:this,answer_index:answer_index}),this.error.bind(this));},addAnswer:function(answer_index,callback){var cells={};cells[this.getColumnByName('PollID')]=this.options.node_id;cells[this.getColumnByName('Answer'+answer_index)]=1;new SK.DB(this.options.configuration.token).addRecordByIDs(this.options.configuration.db_id,this.options.configuration.columns,cells,function(row_id,cells){this.callback();}.bind({callback:callback}),this.error.bind(this));},updateAnswer:function(record,answer_index){var cells={};var old_num_answers=parseInt(record.cells['Answer'+answer_index]);cells[this.getColumnByName('PollID')]=this.options.node_id;cells[this.getColumnByName('Answer'+answer_index)]=(isNaN(old_num_answers)?0:old_num_answers)
+1;new SK.DB(this.options.configuration.token).updateRecordByIDs(record.row_id,this.options.configuration.columns,cells,function(row_id,cells){this.storedAnswer();}.bind(this),this.error.bind(this));},storedAnswer:function(){this.execAfterVote();},getResults:function(callback){new SK.DB(this.options.configuration.token).getRecordsByIDs(this.options.configuration.db_id,this.options.configuration.columns,{where:[[this.getColumnByName('PollID'),'=',[this.options.node_id]]]},function(columns,records,num_records){var results={};for(var i=0;i<columns.length;i++){if(columns[i].name.indexOf("Answer")==0){var index=columns[i].name.replace(/Answer/,"");results[index]=0;}}
if(records.length>0){for(var column in records[0].cells){if(column.indexOf("Answer")==0){var index=column.replace(/Answer/,"");results[index]=parseInt(records[0].cells[column]);if(isNaN(results[index]))results[index]=0;}}}
this.callback(results);}.bind({callback:callback}),this.error.bind(this));},resetResults:function(){if(!confirm("Are you sure you want to reset the voting results for this poll?"))return;new SK.DB(this.options.configuration.token).getRecordsByIDs(this.options.configuration.db_id,this.options.configuration.columns,{where:[[this.getColumnByName('PollID'),'=',[this.options.node_id]]]},function(columns_meta,records,total_records){if(records.length==0){}else{this.mgr.resetResultsRecord(records[0]);}}.bind({mgr:this}),this.error.bind(this));},resetResultsRecord:function(record){var cells={};cells[this.getColumnByName('PollID')]=this.options.node_id;for(var i in record.cells){cells[this.getColumnByName(i)]=0;}
new SK.DB(this.options.configuration.token).updateRecordByIDs(record.row_id,this.options.configuration.columns,cells,function(){this.status('Results were reset');}.bind(this),this.error.bind(this));},error:function(message){alert(message);},status:function(message){this.displayStatusMessage(message);this.displayStatusMessage.delay(5000,this,[""]);},displayStatusMessage:function(message){$(this.options.placeholder).getElements('.sk-poll-status')[0].set('html',message);}});SK__Poll.Admin=new Class({Extends:SK__Poll.Base,initialize:function(options){this.parent(options,'admin');this.init();}});SK__Poll.User=new Class({Extends:SK__Poll.Base,initialize:function(options){this.parent(options,'user');this.init();}});