Ext.namespace("Optima");

Optima.ListPanel = Ext.extend(Ext.DataView,{
   autoHeight: true,
   overClass: 'over',
   itemSelector : "div.topten",
   cookie : null,
   initComponent : function(){
      this.cookie = new Ext.state.CookieProvider({
         path: "",
         expires: new Date(new Date().getTime()+(1000*60*60*24*1)),
         domain: ""
      });
      if (this.cookie.get("nbVotes",-1) === -1)
         this.cookie.set("nbVotes",1);
      var st = new Ext.data.JsonStore({
         sortInfo : {field: "compteur", direction: "DESC"},
         url: 'service/viewTopTen.php',
         autoLoad : true,
         root: 'rows',
         fields: ['id', 'titre','artiste',{name:'compteur',type:'int',sortType:Ext.data.SortTypes.asInt}, {name:'existe', type:'boolean'},{name:'isNew', type:'boolean'}],
         listeners : {
            load : function() {
               Ext.getBody().repaint();
            }
         }
      });
      Ext.apply(this,{
         store:st,
         emptyText:"<h1>Pas de musiques pour le moment.</h1>"
      });
      
      Optima.ListPanel.superclass.initComponent.call(this);
      this.on("click",this.viewClick,this);
   },
   viewClick : function(vue,index,noeud,e) {
      if (e.getTarget().getAttribute("class") === "toptenPlayer")
         e.stopPropagation();
      else if (this.cookie.get("nbVotes",0) > 0) {
         var rec = this.store.getAt(index);
         Ext.Msg.confirm("Question","Voulez-vous voter pour la chanson \""+rec.get("titre")+"\"",function(btn){
            if (btn === "yes"){
               Ext.Ajax.request({
                  url: 'service/addVote.php',
                  success: function(response) {
                          var tot = Ext.util.JSON.decode(response.responseText);
                          if (!tot.success){
                                  Ext.Msg.alert("Erreur","Enregistrement impossible");
                                  return;
                          }
                          var nb = this.cookie.get("nbVotes",1);
                          this.cookie.set("nbVotes",nb-1);
                          rec.beginEdit();                          
                          rec.set("compteur",rec.get("compteur")+1);
                          rec.endEdit();
                          this.store.sort("compteur","DESC");
                  },
                  failure: function() {Ext.Msg.alert("Erreur","Enregistrement impossible");},
                  params: { id: rec.get("id")},
                  scope : this
               });
               
            }
         },this);
      }
   },
   tpl : new Ext.XTemplate(
           '<tpl for=".">',
           '<div class="topten" ext:qtip="Cliquez ici pour voter pour <br/>{titre}">',
		   '<tpl if="isNew === true">',
		   '<div class="newTopTen">&nbsp;</div>',
		   '</tpl>',
           '<div class="leftTopTen">',
           '<p><b>Titre : </b><span class="h2">{titre}</span></p>',
           '<p><b>Artiste : </b><span class="h2">{artiste}</span></p>',
           '</div>',
           '<div class="rightTopTen">',
           '<div class="commentForm" style="text-align:right">{compteur} points actuellement</div>',
           '</div>',
           '<div class="clear" style="text-align:center">',
           '<tpl if="existe === true">',
            '<object class="toptenPlayer" type="application/x-shockwave-flash" data="./player/playermp.swf?son=media/topten/{id}.mp3&amp;showtime=1" width="200" height="20">',
            '<param name="movie" value="./player/playermp.swf?son=media/topten/{id}.mp3&amp;showtime=1" />',
            '<param name="wmode" value="transparent" />',
            '</object>',
           '</tpl>',
           '</div>',
           '</div>',
           '</tpl>'
   )
});


Ext.onReady(function(){
	Ext.QuickTips.init();

      
        Optima.Topten = function() {
        var cp = null;
            var init = function() {
                /*
                if (cp.get("nbVotes",-1)==-1)
                        cp.set("nbVotes",3);
                if (cp.get("nbVotes",-1)==-1){
                        alert("Vous devez accepter les cookies!");
                }*/
                var ls = new Optima.ListPanel({applyTo:"toptens"});
                /*
                for (var i = 0; i < 10; i++){
                        var cmp = Ext.get("vote_"+i);
                        if (cmp) {
                                cmp.on("click",function(evt,t,opt){
                                        var nb = cp.get("nbVotes",0);
                                        if (nb == 0){
                                                alert("Pas plus de trois votes par jour");
                                                return;                                                
                                        }
                                        Ext.Ajax.request({
                                                url: 'service/addVote.php',
                                                success: function(response) {
                                                        var tot = Ext.util.JSON.decode(response.responseText);
                                                        if (!tot.success){
                                                                alert("Enregistrement impossible");
                                                                return;
                                                        }
                                                        
                                                        var cmp = Ext.get(tot.id+"_pts");
                                                        cmp.dom.innerHTML = tot.total;
                                                        alert("Vote pris en compte.\n(L'ordre sera modifié lors du rechargement de la page)");
                                                        var nb = cp.get("nbVotes",1);
                                                        cp.set("nbVotes",nb-1);
                                                },
                                                failure: function() {alert("Enregistrement impossible");},
                                                params: { id: evt.getTarget()["name"]}
                                             });
                                });
                                //alert(cmp.getAttributeNS("","name"));

                        }
                }*/
                
                
            }
            
            
            
            return {
                init : init,
                getCp : function() {return cp;}
            }
        }();
        
	Optima.Topten.init();

});