(function($) {

$.widget('hz.audioplayer', {
    
    _init: function() {
        var self = this, o = this.options;
        
        self.widget = $('<div />')
            .addClass(self.widgetBaseClass + ' ui-widget ui-helper-clearfix');
                
        self.element.wrap(self.widget);
        self.widget = self.element.parent();
        
        self.controls = $('<div />')
            .prependTo(self.widget)
            .addClass(self.widgetBaseClass + '-controls ui-helper-clearfix')
            .css({ position: 'relative' });
        
        self.play_button = $('<a />')
            .attr({href: '#play'})
            .addClass(self.widgetBaseClass + '-play ui-state-default ui-corner-all')
            .hover(function() {
                    $(this).addClass('ui-state-hover');
                }, function() {
                    $(this).removeClass('ui-state-hover');
                })
            .css({
                    float: 'left',
                    display: 'block',
                    padding: '4px',
                })
            .click(function() {
                    if (self.is_playing) {
                        self.pause();
                    } else {
                        self.play();
                    }
                })
            .append($('<span />').text('Play').addClass('ui-icon ui-icon-play'))
            .appendTo(self.controls);
        
        self.scrubber = $('<div />')
            .appendTo(self.controls)
            .css({
                    marginLeft: '50px',
                    marginRight: '100px',
                })
            .slider({
                    orientation: 'horizontal',
                    animate: true,
                    range: 'min',
                    max: 100,
                    slide: function(e, ui) {
                            self.jplayer.playHead(ui.value * (100.0 / self.global_lp));
                            self.play();
                        }
                })
            .wrap($('<div />').css({ paddingTop: '5px' }));
            
        self.scrubber.find('.ui-slider-handle')
            .css({ height: '20px' });
            
        self.progress = $('<div />')
            .appendTo(self.scrubber)
            .css({
                    position: 'absolute',
                    height: '4px',
                    width: '100%',
                    top: '10px',
                    left: '-1px',
                })
            .progressbar();
        
        self.time = $('<p />')
            .appendTo(self.controls)
            .css({
                    position: 'absolute',
                    top: 6,
                    right: 0,
                })
            .text('0:00 / 0:00');
            
        self.tracks = self.element.find('a[href$=mp3]')
            .click(function() {
                    self.element.find('.ui-state-active').removeClass('ui-state-active').addClass('ui-state-default');
                    $(this).addClass('ui-state-active').removeClass('ui-state-default');
                    self.jplayer.setFile($(this).attr('href'));
                    self.play();
                    return false;
                })
            .hover(function() {
                    $(this).addClass('ui-state-hover');
                }, function() {
                    $(this).removeClass('ui-state-hover');
                })
            .addClass('ui-state-default');
            
        self.jplayer = $('<div />')
            .attr({ id: 'my-jplayer' })
            .appendTo(self.widget)
            .jPlayer({
                    swfPath: '/static/js',
                    ready: function() {
                        self.jplayer.setFile(self.tracks.eq(0).attr('href'));
                        self.tracks
                            .addClass('ui-state-default')
                            .removeClass('ui-state-active')
                            .eq(0)
                                .addClass('ui-state-active')
                                .removeClass('ui-state-default');
                        self.pause();
                    }
                })
            .onProgressChange(function(lp, ppr, ppa, pt, tt) {
                var lpInt = parseInt(lp);
                var ppaInt = parseInt(ppa);
                self.global_lp = lpInt;
                self.progress.progressbar('option', 'value', lpInt);
                self.scrubber.slider('option', 'value', ppaInt);
                self.time.text(self.ms_to_time(pt) + ' / ' + self.ms_to_time(tt));
            });
    },
    
    play: function() {
        var self = this;
        
        if (self.is_playing) {
            return this;
        }
        
        self.play_button
            .stop()
            .fadeTo('fast', 0.001,
                function() {
                    $('span', self.play_button)
                        .removeClass('ui-icon-play')
                        .addClass('ui-icon-pause')
                        .text('Pause')
                        .parent()
                        .fadeTo('fast', 1.0);
                });
        
        self.jplayer.play();
        self.is_playing = true;
        return this;
    },
    
    pause: function() {
        var self = this;
        
        if (!self.is_playing) {
            return this;
        }
        
        self.play_button
            .stop()
            .fadeTo('fast', 0.001,
                function() {
                    $('span', self.play_button)
                        .removeClass('ui-icon-pause')
                        .addClass('ui-icon-play')
                        .text('Play')
                        .parent()
                        .fadeTo('fast', 1.0);
                });
                
        self.jplayer.pause();
        self.is_playing = false;
        return this;
    },
        
    ms_to_time: function(ms) {
        var t = "hey:" + ms;
        var secs = Math.floor(ms / 1000);
        ms = ms % 1000;
        var mins = Math.floor(secs / 60);
        secs = secs % 60;
        
        if (secs < 10) {
            secs = "0" + secs;
        }
        
        return mins + ":" + secs;
    }
});


$.extend($.hz.audioplayer, {
    version: '0.1',
    eventPrefix: 'audioplayer',
    defaults: {
        originalSize: false,
    }
});


})(jQuery);