if(!SAPO.Widget || typeof(SAPO.Widget) == 'undefined') {
    SAPO.namespace('Widget');
}
/**
 * @class SAPO.Widget.Vote
 */
SAPO.Widget.Vote = function(options)
{
    if(SAPO.Exception && typeof(SAPO.Exception) != 'undefined') {
        this.exception = new SAPO.Exception('SAPO::Widget.Vote');
    } else {
        this.exception = false;
    }

    if(options != 'undefined') {
      this.init(options);
      } else {
      this.init({});
      }
};

SAPO.Widget.Vote.prototype = {

    init: function(options)
    {
      this.classshortname = 'vt';
      options = Object.extend({ // default options
         instance: false,
         boxclass: 'perguntas',
         id: 0,
         divid: false,
         months: {'Jan':'Janeiro','Feb':'Fevereiro','Mar':'Mar&ccedil;o','Apr':'Abril','May':'Maio','Jun':'Junho','Jul':'Julho','Aug':'Agosto','Sep': 'Setembro','Oct':'Outubro','Nov':'Novembro','Dec':'Dezembro'},
         nmonths: ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']
         }, arguments[0] || {});

      this.options = options;

      // get an handler for this instance - eval hack
      if( this.options.instance === false ) {
        this.options.instance=Math.round(10000*Math.random());
        var cmd=this.classshortname+this.options.instance+'=this';
        eval(cmd);
        }

      if(this.options.divid===false) {
        document.write("<div class='"+options.boxclass+"' id='"+this.classshortname+this.options.instance+"'></div>");
        this.options.divid=document.getElementById(this.classshortname+this.options.instance);
        }
        else
        {
        this.options.divid=$(options.divid);
        this.options.divid.className=this.options.boxclass;
        }
    this.runVote(this.options.id);
    }, 

    runVote: function(id,op,answer)
    {
       this.options.divid.innerHTML='<ul id="perguntasform'+this.options.instance+'" class="form"></ul><ul class="perguntasform1" id="perguntasform1'+this.options.instance+'" class="form" style="display:none"></ul>';

       var page = new SAPO.Communication.Syndication();

       switch(op) {
         case "vote":
           var pid=page.push('http://services.sapo.pt/Poll/Vote?op=vote&id='+id+'&answer='+answer,{onComplete: this.printVoteResults, optOnComplete: [id,this.options.instance]});
           break;
         case "last":
           var pid=page.push('http://services.sapo.pt/Poll/Vote?op=last&id='+id,{onComplete: this.printLastPolls, optOnComplete: [id,this.options.instance]});
           break;
         case "results":
           var pid=page.push('http://services.sapo.pt/Poll/Vote?op=get_poll&id='+id,{onComplete: this.printVoteResults, optOnComplete: [id,this.options.instance]});
           break;
         default:
           var pid=page.push('http://services.sapo.pt/Poll/Vote?op=get_poll&id='+id,{onComplete: this.printVote, optOnComplete: [id,this.options.instance]});
           break;
           }
       page.run(pid);
    },

    printVote: function(obj,args)
    {
      try {
        var id=args[0];
        var html='<form id="voteform'+args[1]+'" onsubmit="submitVote('+args[0]+');return(false);"><li class="title">';
        html+=obj.title;
        html+='</li><li><ul class="answers">';
        for(var i=0;i<obj.answers.length;i++) {
          html+='<li><input id="vid'+obj.answers[i].id+'" type="radio" name="answer" value="'+obj.answers[i].id+'"><label for="vid'+obj.answers[i].id+'">'+obj.answers[i].answer+'</label></li>';
          }
        html+='</ul></li>';
		  html+='<li class="footer">';
		  html+='<input class="btnSubmit" type="submit" value="Votar" onclick="vt'+args[1]+'.submitVote('+id+','+args[1]+');return(false);">';
        html+='<button class="btnResults" onclick="vt'+args[1]+'.runVote('+id+',\'results\');return(false);">Resultados</button></form>';
		  html+='</li>';
        s$('perguntasform'+args[1]).className='form';
        s$('perguntasform'+args[1]).innerHTML=html;
        s$('perguntasform1'+args[1]).style.display='none';
        s$('perguntasform'+args[1]).style.display='block';
        } catch(e) { // exception handling
            return(this.exception.log(e));
        }

    },

    printVoteResults: function(obj,args) {
      var html='';
      var id=args[0];
      if(obj.error!==false) {
        html+='<li class="message">J&aacute; respondeu a esta pesquisa. Cada utilizador s&oacute; pode dar a sua opini&atilde;o uma vez.</li>';
        }
      html+='<li class="title">'+obj.title+'</li>';
      for(var i=0;i<obj.answers.length;i++) {
        html+='<li>'+obj.answers[i].answer+': '+obj.answers[i].votes+'</li>';
        var perc=Math.round((obj.answers[i].votes/obj.total)*100);
        html+='<li class="perc" style="width:'+perc+'%">('+perc+'%)</li>';
        }
      html+='<li class="footer"><button onclick="vt'+args[1]+'.runVote('+id+',\'get_poll\');return(false);">Voltar</button></li>';
      s$('perguntasform'+args[1]).className='form';
      s$('perguntasform'+args[1]).innerHTML=html;
      s$('perguntasform1'+args[1]).style.display='none';
      s$('perguntasform'+args[1]).style.display='block';
      },

    printLastPolls: function(obj,args) {
      var html='';
      var id=args[0];
      eval("var options=vt"+args[1]+".options");
      if(obj.polls.length) {
        s$('perguntasform'+args[1]).className='formlist';
        for(var i=0;i<obj.polls.length;i++) {
          html+='<li><a href="/" class="txtBtn" onclick="vt'+args[1]+'.runVote('+obj.polls[i].id+',\'get_poll\');return(false);">'+obj.polls[i].question+'</a>';
          if(obj.polls[i].beginDate) {
            html+='<br />'+Number(obj.polls[i].beginDate.substr(6,2))+' de '+options.months[options.nmonths[(Number(obj.polls[i].beginDate.substr(4,2))-1)]]+' de '+obj.polls[i].beginDate.substr(0,4);
            }
          html+='</li>';
          }
        html+='<li class="footer"><a href="/" onclick="vt'+args[1]+'.runVote('+id+',\'get_poll\');return(false);">Voltar</a></li>';
        s$('perguntasform'+args[1]).innerHTML=html;
        }
        else
        {
        s$('perguntasform'+args[1]).innerHTML='<li class="messsage">N&atilde;o h&aacute; vota&ccedil;&otilde;es anteriores a esta</li>';
        }
      },

  submitVote: function(id,instance) {
    var answer=false;
    for(var i=0;i<(s$('voteform'+instance).answer).length;i++) {
      if(s$('voteform'+instance).answer[i].checked) {
        answer=s$('voteform'+instance).answer[i].value;
        break;
        }
      }
    if(answer) {
      eval("vt"+instance+".runVote("+id+",'vote',"+answer+");");
      }
      else
      {
      var html='<li class="message">N&atilde;o escolheu nenhuma op&ccedil;&atilde;o</li><li><button onclick="vt'+instance+'.runVote('+id+',\'get_poll\');return(false);">Votar de novo</button></li>';
      s$('perguntasform'+instance).innerHTML=html;
      }
  }

};

