window.addEvent('load', function(){
    new ControlPlayer($('cinta'));
});

var ControlPlayer = new Class({
    Implements: Options,
    options: {
        linksAudio: 'ul#playlist li a[rel]',
        idLista: 'playlist',
        idControles: 'controles'
    },
    initialize: function(element, options){
        this.element = element;
        this.setOptions(options);
        this.opt = this.options;
        
        // controles reproductor
        this.botones = $(this.options.idControles).getElements('a');
        this.btnPrev = this.botones[0];
        this.btnPlay = this.botones[1];
        this.btnStop = this.botones[2];
        this.btnNext = this.botones[3];
        
        
        this.enviaEventoAFlash($$(this.opt.linksAudio));
        this.controlesPlayer();        
    },
    marcaLinkActivo: function(links){
        var flash = this.element;
        var lista = $(this.opt.idLista);
        
        var botones = this.botones;
        var btnPrev = this.btnPrev;
        var btnPlay = this.btnPlay;
        var btnStop = this.btnStop;
        var btnNext = this.btnNext;
        
        var estado = setInterval(
            (function(){
                // comprobamos cual es el tema activo
                links.each(function(el){
                    if(el.get('rel').split('-')[1].toInt() == currentItem) // si es el link con el tema activo
                    {
                        if(!el.hasClass('active')) el.addClass('active');
                    }
                    else // si ha terminado la reproduccion del tema
                    {
                        if(el.hasClass('active')) el.removeClass('active');
                    }
                })
                
                // comprobamos si la reproduccion esta parada o ha acabado
                /*
                 * currentState:
                 * PLAYING
                 * BUFFERING
                 * IDLE (detenido)
                 * COMPLETED (lista de reproduccion completada)
                 */
                if(currentState == 'COMPLETED' || currentState == 'IDLE'){
                    flash.StopPlay();
                    player.sendEvent('STOP');
                    clearInterval(estado);
                    if(lista.getElement('a.active')) lista.getElement('a.active').removeClass('active');
                    botones.removeClass('active');
                    btnPrev.addClass('disabled');
                    btnNext.addClass('disabled');
                    btnStop.addClass('active');                    
                }
            })
        ,500);
    },
    enviaEventoAFlash: function(links){
        var flash = this.element;
        
        links.each(function(el){
            el.addEvent('click', function(ev){
                ev.stop();
                var tema = el.get('rel').split('-')[1];
                // si clicamos un link no activo iniciamos
                if(!el.hasClass('active')){
                    player.sendEvent('ITEM', tema);
                    links.removeClass('active');
                    el.addClass('active');
                    (function(){
                        flash.Play();
                    }).delay(500);
                       
                    this.btnStop.removeClass('active');
                    this.btnPlay.addClass('active');
                    this.btnPrev.removeClass('disabled');
                    this.btnNext.removeClass('disabled');
                    this.marcaLinkActivo($$(this.opt.linksAudio));
                }
                // si clicamos un link activo... detenemos?
                else{
                    player.sendEvent('STOP');
                    flash.StopPlay();
                    el.removeClass('active');
                }
            }.bind(this))
        }.bind(this))
    },
    clickedElement: function(ev){
        var clickedElement = ev.target;
        if(ev.target.tagName != 'a'){
            ev.target = ev.target.getParent('a');            
        }
        return clickedElement;
    },
    controlesPlayer: function(){
        var flash = this.element;
        
        var linksTexto = $$(this.options.linksAudio);
        
        // evitamos usar el bind
        var botones = this.botones;
        var prev = this.btnPrev;
        var play = this.btnPlay;
        var stop = this.btnStop;
        var next = this.btnNext;        
        var _this = this;
        
        botones.each(function(el){

            el.addEvent('click', function(ev){
                ev.stop();
                //if(Browser.Engine.trident) var target = ev.target || $(ev.srcElement);
                var clickedElement = ev.target;
                
                if(clickedElement.tagName != 'A'){
                    // clickedElement.getParent('a') no funciona en IE
                    clickedElement = clickedElement.parentNode;
                }
                // console.log(clickedElement);
                if(!el.hasClass('disabled')){                    
                    switch (clickedElement){
                        
                        case prev:
                            player.sendEvent('PREV');
                            _this.marcaLinkActivo(linksTexto);
                            break;
                        
                        case play:
                            player.sendEvent('PLAY');
                            _this.marcaLinkActivo(linksTexto);
                            (function(){
                                flash.Play();
                            }).delay(500);
                            prev.removeClass('disabled');
                            next.removeClass('disabled');
                            botones.removeClass('active');
                            play.addClass('active');
                            break;
                        
                        case stop:
                            player.sendEvent('STOP');
                            flash.StopPlay();
                            prev.addClass('disabled');
                            next.addClass('disabled');
                            botones.removeClass('active');
                            stop.addClass('active');
                            _this.marcaLinkActivo(linksTexto);
                            break;
                        
                        case next:
                            player.sendEvent('NEXT');
                            _this.marcaLinkActivo(linksTexto);
                            break;
                    }
                }                    
            })
            
        })
    }
})