/**
 * Classe de player
 **/
var player = {

    init : function() {

        $( '#player form ul.playlist li:first' ).css( 'background', '#8dc147' );            

		// Save a copy of the song skeleton
		player.htmlSongSkel = $('#player .song-skel').html();
		$('#player .song-skel').removeClass('song-skel');

		$('#submit-song').click(function(){
			var count = 0;
			$('#player ul.music input[type=checkbox]').each(function(){
				if (this.checked) count ++;
			});
			if (count > 0) $('#player-form').submit();
		});	
		
		
    },

    /**
     * Recupera lista de musicas
     **/
    getMusic : function( cplaylist , duration ) {
        
        cplaylist = cplaylist || 'relax';
        cduration = duration  || 1000;

        $.ajax( {

            type     : 'GET',
            url      : '/api/playlist/' + cplaylist + "/" + cduration + ".json",
            dataType : 'json',
			error    : trace,
            success  : function( json ) {


				var tMusic = json.musics.length;
				if( tMusic < 10 ) {
					tMusic = "0" + tMusic;
				}
				
				trace('got', tMusic, 'songs');
    
                if( json.qtd <= 0 ) 
                    return;

				var html	  = '';
                for( var x = 0; x < json.musics.length; x++ ) {

                    var artist   = player.labelText( json.musics[x].artist );
                    var title    = player.labelText( json.musics[x].title );
                    var duration = player.secondsToHumanTime( parseInt( json.musics[x].duration ));

					// Append a new instance of song skeleton 
					var newHtml = player.htmlSongSkel;

					// Change the necessary info
					newHtml	 = newHtml.replace(/__X__/g, x);
					newHtml	 = newHtml.replace(/__ARTIST__/g, artist);
					newHtml	 = newHtml.replace(/__TITLE__/g, title);
					newHtml	 = newHtml.replace(/__PLAYLIST__/g, cplaylist);
					newHtml	 = newHtml.replace(/__MUSIC_FILE__/g, json.musics[x].file);

					// Finally append to the page
					html	 += newHtml;
                }	                    

                /**
                * Lista as musicas
                **/
                $( 'ul.music *' ).remove();                    			
                $( 'ul.music' ).append( html );
				/*
				var formHtml = $('#player-form').html();
				$('#player-form ul').remove();
				$('#player-form').html( formHtml );*/
                
				/**
				* Download song click - should submit form to download a zip, even for a single song. this is a workaround 
				**/
				$( 'ul.music li a.download' ).attr('href', function(){
					return '#'+this.attributes['href'].value;
				});
				$( 'ul.music li a.download' ).click(function(e){
					var state = ($('#localization input:checked').val() || "SP");
					track("/theride/home/cidade{city}/musica/tip/baixar".substitute({'city': state}));

					var evt = e || event;
					var frm = $('#player-form');
					var fields = $('#player-form input');
					fields.attr('name', function(){
						return '_'+this.name;
					});
					var href = evt.target.attributes['href'].value;
					var single = $('<input />').attr( {name: 'song-0',type:'hidden',
						value:cplaylist + href.substr(href.lastIndexOf('/'))}).appendTo(frm);
					frm.submit();
					fields.attr('name', function(){
						return this.name.substr(1);
					});
					single.remove();
					return false;
				});
				
				/** 
				* Click sobre o checkbox para mudar o estilo
				**/
				var playlists = ['relax','agitado','normal'];
				$( '#player #cycle-playlist' ).unbind('click');
				$( '#player #cycle-playlist' ).click( function() {
					var state = ($('#localization input:checked').val() || "SP");
					track("/theride/home/cidade{city}/musica/tip/trocar".substitute({'city': state}));

					player.getMusic( playlists[ Math.floor( Math.random() * playlists.length )] , $('#timing-route').val() );
					return false;
				}); 

                /**
                 * Cria o scroll personalizado (after some time)
                 **/
				setTimeout( function(e){
					$( '#section' ).css({'display': 'block', 'top': '0'});
					$( '#section' ).jScrollPane();                 
				},100);

				// Play nas musika!
                $( '#player ul.music li a.play' ).click( function() {                                    								

					var state = ($('#localization input:checked').val() || "SP");
					track("/theride/home/cidade{city}/musica/tip/tocar".substitute({'city': state}));
					
					player.play.init( $( this ).attr( 'rel' ), $( this ).attr( 'id' ) );					                    
					// This fixes being child of label...
					// (cancel bubbling)
					return false;
                });
    
				// Seta a qtd de músicas na interface
				$('.total-music span:first-child').html( tMusic );

				/*
				 * IE8 Doesn't support :checked attribute.
				 * So, we need to fake it.
				 */
				if(jQuery.browser.msie){
					$('#player ul.music li input').change( function(){
						$(this).parent().find('label').css('background', "url('/media/img/player/bg-checkbox.gif') no-repeat left " + (this.checked?'-38px' : '-9px'));
					});
				}

				player.checkAll();

				/*
				 * Set everything checked by default
				 */
				if(! $('#check-all').attr('checked'))
					$( '#check-all' ).trigger( 'click');
				
			}

        } );			
	$('#player').css({'display':'block'});
    },

    /**
     * Play and Stop Musics
     **/
    play: {

        playing : '',             
        init    : function( file, idMusic ) {        

            var mySound = soundManager.createSound( {
                id           : 'aSound' + idMusic,
                url          : file,
                autoLoad     : false,
                autoPlay     : false,
                multiShot    : false
            }); 

            if( player.play.playing == idMusic ) {

                mySound.stop();                   

                mySound.setPosition( 0 );                            
                $( 'a#' + idMusic ).removeClass( 'stop' );

                player.play.playing = '';                

            } else { 

                soundManager.stopAll();                               

                $( 'a#' + idMusic ).removeClass( 'stop' );                                                        

                mySound.play( 'aSound' + idMusic, file );            
                player.play.playing = idMusic;                            

                $( 'a#' + idMusic ).addClass( 'stop' );
            } 
        }
    },

    checkAll : function() { 
        $( '#player ul.music input[type="checkbox"]' ).attr( 'checked', true);
		$( '#check-all' ).attr('checked', true);
		if (jQuery.browser.msie) $( '#check-all' ).parent().find('label[for=check-all]').css('background', "url('/media/img/player/bg-checkbox.gif') no-repeat left -38px");
		var allChecked = true;
		$( '#check-all' ).live( 'click', function() {
            if( allChecked ) {
                $( '#player ul.music input[type="checkbox"]' ).attr('checked', false);
				$( this ).attr('checked', false);
				if (jQuery.browser.msie) $( this ).parent().find('label[for=check-all]').css('background', "url('/media/img/player/bg-checkbox.gif') no-repeat left -9px");    
            } else {     
                $( '#player ul.music input[type="checkbox"]' ).attr( 'checked', true);
				$( this ).attr('checked', true);
				if (jQuery.browser.msie) $( this ).parent().find('label[for=check-all]').css('background', "url('/media/img/player/bg-checkbox.gif') no-repeat left -38px");    
            }
			allChecked = !allChecked;
			$( '#player ul.music input[type="checkbox"]' ).change();
		});
		$( '#player ul.music input[type="checkbox"]' ).change();    	
    },

    newPlaylist : function() {
       

    },

    secondsToHumanTime : function( dur ){   
       var minutes = parseInt( (dur / 60) );       
       var seconds = parseInt( dur ) - ( minutes * 60 );  

       return ( (minutes < 10 ? "0" + minutes : minutes ) + ":" + (seconds < 10 ? "0" + seconds : seconds) ); 
    },
    

    labelText : function( str ) {
        //if( str.length > 10 ) 
        //    return str.substr( 0, 7 ) + '...';
        //else
        return str;
    },

	/*
	 * Humanize the time putting in HOUR:MINUTES:SECONDS 
	 * format
	 */
    calculateTime : function( position ) {
        var ms_seconds   = parseInt( position );
        var secondsTotal = parseInt( Math.floor( ms_seconds / 1000 ) );
        var minutes      = parseInt( Math.floor( secondsTotal / 60) );
        var seconds      = secondsTotal - ( minutes * 60 );

        if( seconds < 10 ) {
            seconds = "0" + seconds;
        }
        
        if( minutes < 10 ) {
            minutes = "0" + minutes;
        }               

        return minutes + ":" + seconds;

    }

}
