$ = jQuery;
var jsmediatags = window.jsmediatags;
var media_list = [];
var media_index = '';

$(document).ready(function(){
    $('.karnaval-audio-player').each(function(){
		var target = $(this)[0];
        var source = $(this).find('source:eq(0)');
        media_index = 'p' + source.attr('data-post-id');
        media_list[ media_index ] = source.attr('src');
        target.volume = 0.5;
		var player_id = $(target).attr('id');
		var controls = $('.KAP[data-player-id='+player_id+']');
		KAP_get_current_volume( target, controls );
		KAP_get_duration( target, controls );
    });

    $('.KAP').each(function(){
		KAP_set_player_size( $(this) );
    });
	
	$(window).resize(function(){
		$('.KAP').each(function(){
			KAP_set_player_size( $(this) );
		});
	});

    $('.KAP-play').click(function(){
        if( $(this).closest('.KAP-play-pause').hasClass('disabled') ) return false;

		$('.KAP-pause').click(); //stop all other instances
        var controls = $(this).closest('.KAP');
        var target_id = controls.attr('data-player-id');
        var target = document.getElementById(target_id);
        target.play();
		KAP_get_duration( target, controls );
        controls.find('.KAP-play').hide();
        controls.find('.KAP-pause').show();

        KAP_current_time_interval = setInterval(function(){
            KAP_get_current_time( target, controls );
			KAP_check_ended( target, controls );
        }, 1000);
    });

    $('.KAP-pause').click(function(){
        var controls = $(this).closest('.KAP');
        var target_id = $(this).closest('.KAP').attr('data-player-id');
        var target = document.getElementById(target_id);
        target.pause();
        controls.find('.KAP-pause').hide();
        controls.find('.KAP-play').show();
        KAPPlaying(target_id);

        try {
            clearTimeout(KAP_current_time_interval);
        }catch(e){}
    });

    $('.KAP-progressbar-container').click(function(e){
        var click_position = e.offsetX;
        var container_width = $(this).innerWidth();
        var percentage = click_position / container_width;

        var controls = $(this).closest('.KAP');
        var target_id = controls.attr('data-player-id');
        var target = document.getElementById(target_id);
        var duration = Math.round(target.duration);
        target.currentTime = duration * percentage;
        KAP_get_current_time( target, controls );
    });

    $('.KAP-progressbar-handle').click(function(e){
        e.stopPropagation();
        return false;
    });

    $('.KAP-progressbar-handle').each(function(){
        var container = $(this).closest('.KAP-progressbar-container');
        $(this).draggable({
            axis: "x",
            containment: container,
            drag: function( event, ui ) {
                var percentage = ui.position.left / container.innerWidth();
                container.find('.KAP-progressbar').css('width', ui.position.left);
                ui.position.left -= 2;
                ui.position.top = -8;

                var controls = container.closest('.KAP');
                var target_id = controls.attr('data-player-id');
                var target = document.getElementById(target_id);
                var duration = Math.round(target.duration);
                target.currentTime = duration * percentage;
                KAP_get_current_time( target, controls );
            },
        });
    });
	
	$('.KAP-volume-control-slider').click(function(e){
        var click_position = e.offsetY;
        var container_height = $(this).innerHeight();
        var volume = 1 - ( e.pageY - $(this).offset().top ) / container_height;
		if( volume > 1 ) volume = 1;
		else if( volume < 0 ) volume = 0;

        var controls = $(this).closest('.KAP');
        var target_id = controls.attr('data-player-id');
        var target = document.getElementById(target_id);
        target.volume = volume;
        KAP_get_current_volume( target, controls );
    });
	
	$('.KAP-volume-control-handle').click(function(e){
        e.stopPropagation();
        return false;
    });
	
	$('.KAP-volume-control-handle').each(function(){
		var handle = $(this);
		var container_height = handle.closest('.KAP-volume-control-slider').innerHeight();
        handle.mousedown(function(e){
			handle.closest('.KAP-volume-control-container').mousemove(function(e){
				var volume = 1 - ( e.pageY - $(this).offset().top ) / container_height;
				if( volume > 1 ) volume = 1;
				else if( volume < 0 ) volume = 0;
				
				var controls = handle.closest('.KAP');
				var target_id = controls.attr('data-player-id');
				var target = document.getElementById(target_id);
				target.volume = volume;
				KAP_get_current_volume( target, controls );
			});
		});
		handle.on('touchstart', function(e){
			handle.closest('.KAP-volume-control-container').on('touchmove', function(e){
				e.preventDefault();
				var volume = 1 - ( e.originalEvent.touches[0].pageY - $(this).offset().top ) / container_height;
				if( volume > 1 ) volume = 1;
				else if( volume < 0 ) volume = 0;
				
				var controls = handle.closest('.KAP');
				var target_id = controls.attr('data-player-id');
				var target = document.getElementById(target_id);
				target.volume = volume;
				KAP_get_current_volume( target, controls );
			});
		});
		
		$(document).mouseup(function(){
			handle.closest('.KAP-volume-control-container').unbind('mousemove');
		});
		
		$(document).on('touchend', function(){
			handle.closest('.KAP-volume-control-container').unbind('touchmove');
		});
    });

    $('.KAP-repeat').click(function(){
        $(this).toggleClass('repeat-on');
    });

    if( $('.KAP-playlist').length > 0 ){
        var playlist = $.parseJSON( $('.KAP-playlist:eq(0)').attr('data-playlist') );
        var playlist_keys = Object.keys(playlist);
        var current_key = playlist_keys[0];
    }

    $('.KAP-next').click(function(){
        var target = $(this).closest('.KAP');
        var player_id = target.attr('data-player-id');
        var target_player = $('#'+player_id);

        if( target.hasClass('KAP-playlist') ){
            var current_key_index = playlist_keys.indexOf(current_key);
            if( playlist_keys[ current_key_index + 1 ] != null ) {
                current_key = playlist_keys[current_key_index + 1];
                var src = playlist[current_key].src;
                var title = playlist[current_key].title;

                target.find('.KAP-pause').click();
                target_player[0].currentTime = 0;
                target_player.find('source:eq(0)').attr('src', src);
                autoplay_on_change = true;
                KAPCantPlay(player_id);
                target_player[0].load();
                target.find('.KAP-title-bar .KAP-title').text(title);
            }
            else {
                alert('شما به انتهای لیست رسیده اید.');
            }
        }
        else {
            $.ajax({
                type: 'post',
                url: ScriptData.ajaxURL,
                data: {
                    action: 'get_next_media',
                    current_media: media_index.replace('p', ''),
                    direction: 'backward'
                },
                dataType: 'json',
                success: function (response) {
                    if (response.status == 1) {
                        media_index = 'p' + response.id;
                        media_list[media_index] = response.src;
                        target.find('.KAP-pause').click();
                        target_player[0].currentTime = 0;
                        target_player.find('source:eq(0)').attr('src', response.src);
                        autoplay_on_change = true;
                        KAPCantPlay(player_id);
                        target_player[0].load();
                        target.find('.KAP-title-bar .KAP-title').text(response.title);
                    }
                    else {
                        alert('شما به انتهای لیست رسیده اید.');
                    }
                }
            });
        }
    });

    $('.KAP-previous').click(function(){
        var target = $(this).closest('.KAP');
        var player_id = target.attr('data-player-id');
        var target_player = $('#'+player_id);

        if( target.hasClass('KAP-playlist') ){
            var current_key_index = playlist_keys.indexOf(current_key);
            if( playlist_keys[ current_key_index - 1 ] != null ) {
                current_key = playlist_keys[current_key_index - 1];
                var src = playlist[current_key].src;
                var title = playlist[current_key].title;

                target.find('.KAP-pause').click();
                target_player[0].currentTime = 0;
                target_player.find('source:eq(0)').attr('src', src);
                autoplay_on_change = true;
                KAPCantPlay(player_id);
                target_player[0].load();
                target.find('.KAP-title-bar .KAP-title').text(title);
            }
            else {
                alert('شما به انتهای لیست رسیده اید.');
            }
        }
        else {
            $.ajax({
                type: 'post',
                url: ScriptData.ajaxURL,
                data: {
                    action: 'get_next_media',
                    current_media: media_index.replace('p', ''),
                    direction: 'forward'
                },
                dataType: 'json',
                success: function (response) {
                    if (response.status == 1) {
                        media_index = 'p' + response.id;
                        media_list[media_index] = response.src;
                        target.find('.KAP-pause').click();
                        target_player[0].currentTime = 0;
                        target_player.find('source:eq(0)').attr('src', response.src);
                        autoplay_on_change = true;
                        KAPCantPlay(player_id);
                        target_player[0].load();
                        target.find('.KAP-title-bar .KAP-title').text(response.title);
                    }
                    else {
                        alert('شما به انتهای لیست رسیده اید.');
                    }
                }
            });
        }
    });
});

function KAP_set_player_size(target){
	var total_width = target.innerWidth();
	var total_children_width = 0;
	target.find('>a:visible, >span:visible').each(function(){
		total_children_width += $(this).outerWidth();
	});
	var progress_bar_width = total_width - total_children_width - 10;
	//target.find('.KAP-progressbar-container').css('width', progress_bar_width);
	target.css('z-index', 100);
}

function KAP_get_current_time( target, controls ){
    var duration = Math.round(target.duration);
    var current_time = Math.round(target.currentTime);
    var percentage = current_time / duration * 100;
    var mins = parseInt(current_time / 60);
    if( mins < 10 ) mins = '0'+mins;
    var secs = current_time % 60;
    if( secs < 10 ) secs = '0'+secs;
    controls.find('.KAP-currentTime').html(mins+":"+secs);
    controls.find('.KAP-progressbar').css( 'width', percentage+'%' );
    var total_available_width = controls.find('.KAP-progressbar-container').innerWidth();
    controls.find('.KAP-progressbar-handle').css({
		left: percentage*total_available_width/100-2,
		top: -8
	});
}

function KAP_get_current_volume( target, controls ){
	var current_volume = target.volume;
	var percentage = current_volume * 100;
	controls.find('.KAP-volume-control').css( 'height', percentage+'%' );
	var total_available_height = controls.find('.KAP-volume-control-slider').innerHeight();
	controls.find('.KAP-volume-control-handle').css({
		bottom: percentage*total_available_height/100-2,
	});
	
	var icon_class = 'karnil-icon-speaker-medium';
	if( current_volume == 0 ) icon_class = 'karnil-icon-speaker';
	else if( current_volume < 0.4 ) icon_class = 'karnil-icon-speaker-low';
	else if( current_volume < 0.8 ) icon_class = 'karnil-icon-speaker-medium';
	else icon_class = 'karnil-icon-speaker-full';
	controls.find('.volume-status').removeClass('karnil-icon-speaker karnil-icon-speaker-low karnil-icon-speaker-medium karnil-icon-speaker-full');
	controls.find('.volume-status').addClass(icon_class);
}

function KAP_get_duration( target, controls ){
	var duration = Math.round(target.duration);
	if( !(duration > 0) ){
		setTimeout(function(){
			KAP_get_duration( target, controls );
		}, 1000);
		return false;
	}
	var mins = parseInt(duration / 60);
	if( mins < 10 ) mins = '0'+mins;
	var secs = duration % 60;
	if( secs < 10 ) secs = '0'+secs;
	controls.find('.KAP-duration').html(mins+":"+secs);
}

function KAP_check_ended( target, controls ){
    if( target.ended ){
        var player_id = $(target).attr('id');
        var player = $('[data-player-id='+player_id+']');
        var repeat = player.find('.KAP-repeat').hasClass('repeat-on');
        var simple = player.hasClass('KAP-simple');
        var gonext = player.hasClass('KAP-gonext');
        if( gonext ){
            target.currentTime = 0;
            controls.find('.KAP-pause').click();
            KAP_get_current_time( target, controls );

            var next_player_id = controls.attr('data-next-player-id');
            if( next_player_id != 0 )
                $('[data-player-id=' + next_player_id + ']').find('.KAP-play').click();
        }
        else if( simple ){ //podcast
            target.currentTime = 0;
            controls.find('.KAP-pause').click();
            KAP_get_current_time( target, controls );
        }
        else{
            if( repeat ){ //music - repeat
                target.currentTime = 0;
                KAP_get_current_time( target, controls );
                controls.find('.KAP-pause').click();
                controls.find('.KAP-play').click();
            }
            else{ //music - go to next track
                player.find('.KAP-controlbox .KAP-next').click();
                target.currentTime = 0;
                KAP_get_current_time( target, controls );
            }
        }
    }
}

var autoplay_on_change = false;
function KAPCanPlay(player_id){
    $('[data-player-id='+player_id+']').find('.KAP-play-pause').removeClass('disabled');
    $('[data-player-id='+player_id+']').find('.KAP-title-bar .KAP-title').show();
    $('[data-player-id='+player_id+']').find('.KAP-title-bar .KAP-title-loading').hide();
    if( autoplay_on_change ){
        $('[data-player-id='+player_id+']').find('.KAP-play-pause .KAP-play').click();
        autoplay_on_change = false;
    }
}

function KAPCantPlay(player_id) {
    $('[data-player-id='+player_id+']').find('.KAP-play-pause').addClass('disabled');
    $('[data-player-id='+player_id+']').find('.KAP-title-bar .KAP-title').hide();
    $('[data-player-id='+player_id+']').find('.KAP-title-bar .KAP-title-loading').show();
}

function KAPWaiting(player_id){
    $('[data-player-id='+player_id+']').find('.KAP-time').addClass('waiting');
}

function KAPPlaying(player_id){
    $('[data-player-id='+player_id+']').find('.KAP-time').removeClass('waiting');
}