/* 
 * Class player initilise all menu, library, and engine (flash player)
 */

//var blipurl = 'http://blip.tv/?1=1&s=posts&skin=rss';

var currentPlaylist = null;
var currentLength = 0;
var currentItem = -1;
var previousItem = -1;
var currentMute = false;
var currentVolume = 80;
var currentPosition = 0;
var currentState = 'NONE';
var currentLoaded = 0;
var currentRemain = 0;
var totalTime= 1000;
var player = null;
var playerLoaded = false;
var playerType = 'none';
var html5Player = null;
var playerTitle = 'Amazing Discoveries&trade; Audio';

function playerReady(playerDiv) {
	player = window.document[playerDiv.id];
	addListeners();
}

function addListeners() {
    if (player) {
        player.addControllerListener("ITEM", "itemListener");
        player.addControllerListener("MUTE", "muteListener");

        player.addModelListener("LOADED", "loadedListener");
        player.addModelListener("STATE", "stateListener");
        player.addModelListener("TIME", "positionListener");

        player.addControllerListener("VOLUME", "volumeListener");

        playerLoaded = true;

    } else {
        setTimeout("addListeners()",100);
    }
}

function stateListener(obj) { //IDLE, BUFFERING, PLAYING, PAUSED, COMPLETED
	currentState = obj.newstate;
	previousState = obj.oldstate;

	//var tmp = document.getElementById("stat");
	//if (tmp) {
	//	tmp.innerHTML = "current state: " + currentState +
	//	"<br>previous state: " + previousState;
	//}

    if (currentState == 'COMPLETED') {
        document.library.playNext();
    }
    else if (currentState == 'PLAYING') {
        $('#player-play').addClass('player-play-playing');
    }
    else {
        $('#player-play').removeClass('player-play-playing');
    }
}

function positionListener(obj) {
    currentPosition = obj.position;
    totalTime = obj.duration;

    //var tmp = document.getElementById("tim");
    //if (tmp) { tmp.innerHTML = "position: " + currentPosition; }
    $("#player-slidercontainer-current-time").text(formatTime(currentPosition));
    $("#player-slidercontainer-total-time").text(formatTime(totalTime));
    $("#player-slider").slider( "value" , (currentPosition));
    $("#player-slider").slider( "option", "max", totalTime );
}

function loadedListener(obj) {
	currentLoaded = obj.loaded;
	currentRemain = obj.total - currentLoaded;
	//var tmp = document.getElementById("ldd");
	//if (tmp) {
	//	tmp.innerHTML = "bytes loaded: " +  totaltime +
	//			"<br>bytes remaining: " + currentRemain;
	//}
}

function volumeListener(obj) {
	currentVolume = obj.percentage;
	//var tmp = document.getElementById("vol");
	//if (tmp) { tmp.innerHTML = "volume: " + currentVolume; }
}

function muteListener(obj) {
	currentMute = obj.state;
	//var tmp = document.getElementById("mut");
	//if (tmp) { tmp.innerHTML = "mute: " + currentMute; }

    if (currentMute)
    {
        $('#mute').button({
            text: false,
                        label: 'mute',
            icons: {
                primary: 'ui-icon-volume-off'
            }
        });
    }
    else
    {
       $('#mute').button({
            text: false,
                        label: 'volume on',
            icons: {
                primary: 'ui-icon-volume-on'
            }
        });
    }
}

function itemListener(obj) {
	if (obj.index != currentItem) {
 		previousItem = currentItem;
		currentItem = obj.index;

		if (previousItem == -1) { getPlaylistData(); }

		//var tmp = document.getElementById("itm");
		//if (tmp) {
		//	tmp.innerHTML = "current item: " + currentItem +
		//		"<br>previous item: " + previousItem;
		//}

		//var tmp = document.getElementById("item");
		//if (tmp) { tmp.innerHTML = "item: " + currentItem; }

		//var tmp = document.getElementById("pid");
		//if (tmp) {
		//	tmp.innerHTML = "(received from the player with the id: <i><b>" + obj.id + "</b></i>)";
		//}

		//printItemData(currentItem);
	}
}

function printItemData(theIndex) {
	var plst = null;
	plst = player.getPlaylist();

	if (plst) {
		var txt = '';
		txt += '<li><b>item number: </b>' + theIndex + ':</li>';
		txt += '<li><b>title: </b>' + plst[theIndex].title + '</li>';
		txt += '<li><b>author: </b>' + plst[theIndex].author + '</li>';
		txt += '<li><b>file: </b>' + plst[theIndex].file + '</li>';
		txt += '<li><b>image: </b>' + plst[theIndex].image + '</li>';
		txt += '<li><b>link: </b><a href="' + plst[theIndex].link + '">' + plst[theIndex].link + '</a></li>';
		//txt += '<li><b>description: </b>' + plst[theIndex].description + '</li>';

		//var tmp = document.getElementById("itmsDat");
		//if (tmp) { tmp.innerHTML = txt; }
	}
}

function getPlaylistData() {
	var plst = null;
	plst = player.getPlaylist();

	if (plst) {
		currentPlaylist = plst;

		var txt = '';

		for(var i in currentPlaylist) {
			txt += '<input type="checkbox" id="cb' + i + '" checked="checked" /> &nbsp; ';
			txt += currentPlaylist[i].title;
			txt += '<br />';
		}
		//var tmp = document.getElementById("plstDat");
		//if (tmp) { tmp.innerHTML = txt; }
	}
}

function loadCheckedPlaylistData() {
	if (currentPlaylist) {
		var j = 0;
		var lst = new Array();
		for(var i in currentPlaylist) {
			if(document.getElementById('cb' + i).checked) {
				lst[j] = {
					author:currentPlaylist[i].author,
					description:currentPlaylist[i].description,
					duration:currentPlaylist[i].duration,
					file:currentPlaylist[i].file,
					link:currentPlaylist[i].link,
					image:currentPlaylist[i].image,
					start:currentPlaylist[i].start,
					title:currentPlaylist[i].title,
					type:currentPlaylist[i].type

				}
				j++;
			}
		}
		if(lst.length > 0) { player.sendEvent('LOAD', lst); }
	}
}

function getLength() {
    currentLength = player.getPlaylist().length;

    return(currentLength);
};

function loadFile(filePath) {
    currentItem = -1;
    previousItem = -1;

    if(playerType == 'html5') {
        html5Player.src = filePath;
        html5Player.load();
    }
    else if(playerType == 'flash') {
        delayedLoadFile(filePath, 300);
    }
};

function delayedLoadFile(filePath, tryNumber) {
    if(playerLoaded) {
        player.sendEvent('LOAD', filePath);
    }
    else {
        if(tryNumber > 0) {
            setTimeout("delayedLoadFile('"+filePath+"', "+(tryNumber-1)+")", 100);
        }
    }
};

function isFlashInstalled() {
    var playerVersion = swfobject.getFlashPlayerVersion();

    return playerVersion.major >= 9;
}

function getUrlParameters() {
    var end = window.location.href.length;
    
    if(window.location.href.indexOf('#') > 0) {
        end = window.location.href.indexOf('#');
    }

    return window.location.href.slice(window.location.href.indexOf('?') + 1, end).split('&');
}

function instertGetParameter(key, value) {
    var params = [];
    var hash = '';
    var url = window.location.href;
    var paramInserted = false;

    if(url.indexOf('#') > 0) { 
        hash = url.slice(url.indexOf('#') + 1, url.length);
        url  = url.slice(0, url.indexOf('#'));
    }

    if(url.indexOf('?') > 0) { 
        params = url.slice(url.indexOf('?') + 1, url.length).split('&');
        url = url.slice(0, url.indexOf('?'));

        for(var i = 0; i < params.length; i++) {
            var keyValue = params[i].split('=');

            if(keyValue[0] == key) {
                params[i] = key+'='+value;
                paramInserted = true;
                break;
            }
        }
    }

    if(paramInserted == false) {
        params.push(key+'='+value);
    }

    url += '?';
    for(var i = 0; i < params.length; i++) {
        if(i > 0) {
            url += '&';
        }
        url += params[i]
    }

    if(hash.length > 0) {
        url += '#'+hash;
    }

    return url;
}

function switchToHtml5Player() {
    window.location = instertGetParameter('player', 'html5');
}

function switchToFlashPlayer() {
    window.location = instertGetParameter('player', 'flash');
}

function setPlayerTitle(text) {
    $('#player-title').html(playerTitle+' '+text);
}

function createPlayer() {
    var params = getUrlParameters();
    var forceHtml5 = false;

    for(var i = 0; i < params.length; i++) {
        if(params[i] == 'player=html5') {
            forceHtml5 = true;
        }
    }

    if(swfobject.hasFlashPlayerVersion('9') && forceHtml5 == false) {
        playerType = 'flash';

        var flashvars = {
                autostart:"true",
                shuffle:"false",
                playlistsize:"0",
                playlist:"bottom",
                id:"audio-player"
        }
        var params = {
                allowfullscreen:"true",
                allowscriptaccess:"always"
        }
        var attributes = {
                id:"audio-player",
                name:"audio-player"
        }
        swfobject.embedSWF("http://amazingdiscoveries.org/assets/flash/jwplayer.swf", "player-placeholder", "0", "0", "9.0.115", false, flashvars, params, attributes);
    }
    else {
        if(Modernizr.audio.mp3 && (Modernizr.audio.mp3 == 'maybe' || Modernizr.audio.mp3 == 'probably')) {
            playerType = 'html5';

            html5Player = new Audio();
            html5Player.autoplay = true;

            html5Player.addEventListener("timeupdate", function() {
                $("#player-slidercontainer-current-time").text(formatTime(html5Player.currentTime));
                $("#player-slider").slider("value", html5Player.currentTime);
            }, false);

            html5Player.addEventListener("durationchange", function() {
                $("#player-slidercontainer-total-time").text(formatTime(html5Player.duration));
                $("#player-slider").slider("option", "max", html5Player.duration);
            }, false);

            html5Player.addEventListener("loadstart", function() {
                //setPlayerTitle('(Loading...)');
            }, false);

            html5Player.addEventListener("playing", function() {
                //setPlayerTitle('(Playing...)');
                $('#player-play').addClass('player-play-playing');
            }, false);

            html5Player.addEventListener("waiting", function() {
                //setPlayerTitle('(Waiting...)');
            }, false);

            html5Player.addEventListener("progress", function() {
                var progress  = Math.round((html5Player.buffered.end(0) / html5Player.duration) * 100);

                if(progress < 99) {
                    setPlayerTitle('('+'Loading: '+progress+'%)');
                }
                else {
                    setPlayerTitle('');
                }
            }, false);

        }
    }
}

// print time in 00:00 format
function pad(s,l) {
    return( l.substr(0, (l.length-s.length) )+s );
}

function formatTime(seconds) {
    var result = "";
    var remaining = Math.floor(seconds);

    if (seconds > 3600){
            result += pad((Math.floor(remaining/3600)).toString(),"00")+":";
        remaining = remaining % 3600;
    }

    result += pad((Math.floor(remaining/60)).toString(),"00")+":";
    remaining = remaining % 60;

    result += pad(remaining.toString(),"00")+"";

    return result;
}


