if('undefined' == typeof(Mediacenter))
{
    Mediacenter = function(){};
}

Mediacenter.Audioplayer = function (id)
{
    this.id = id;
    this.htmlElem = document.getElementById(id);
    this.initUrl = '';
    this.name     = this.id + "_name";
    // Default flashplayer domain.
    // Can be set via FlashplayerControlObject.setDomain()
    this.fpDomain = "http://flashplayer.mediabiz.de/";

    this.fpFolder = "";

    // Default flashplayer swf file.
    // Can be set via FlashplayerControlObject.setSWF()
    this.swf = "audioplayer.swf";
    this.width = 384;
    this.height = 26;
    this.flashVersion= "10.0.0";
    this.autoPlay = true;
    this.currentOffset = 0;
    this.playlistId=0;

    this.getId = function()
    {
        return this.id;
    };

    this.hide = function()
    {
        var elem = this.getElementById(id);
        elem.style.visibility = 'hidden';
        elem.style.display = 'none';
    };

    this.show = function()
    {
        var elem = this.getElementById(id);
        elem.style.visibility = 'visible';
        elem.style.display = 'block';
    };

    this.setPlaylistId = function(id)
    {
        this.playlistId = id;
    };

    this.setWidth = function(wid)
    {
        this.width = wid;
    };

    this.getPlaylist = function()
    {
        return Emv.Registry.getObject(this.playlistId);
    };

    /**
     * draws the player to the html elemt with given id
     * all content within this element will be lost
     */
    this.draw = function()
    {
        // Configure the flash variables.
        var flashvars = {};
        flashvars.audioSrc = this.initUrl;
        flashvars.playerId = this.id;
        flashvars.autoPlaySound = this.autoPlay;

        // Configure the flash parameters.
        var params = {};
        params.menu = "false";
        params.allowfullscreen = "true";
        params.allowscriptaccess = "always";

        // Configure the flash attributes.
        var attributes = {};
        attributes.id = this.id;
        attributes.name = this.name;
        attributes.align = "middle";

        // Create the flash object/embed element
        // Use swfobject class.

        swfobject.embedSWF(
            this.fpDomain + this.fpFolder + this.swf,
            this.id,
            this.width,
            this.height,
            this.flashVersion,
            this.fpDomain + "install/expressInstall.swf",
            flashvars, params, attributes);
    };

    this.loadPrevious = function()
    {
        this.currentOffset = this.getPlaylist().getPreviousOffset(this.currentOffset);
        this.loadTrack(this.currentOffset);
    };

    this.loadNext = function()
    {
        this.currentOffset = this.getPlaylist().getNextOffset(this.currentOffset);
        this.loadTrack(this.currentOffset);
    };

    /**
     * setting url, which is played initialy
     * @param String url mp3.kino.de ...
     */
    this.setInitUrl = function(url)
    {
        this.initUrl = url;
    };

    this.setAutoPlay = function(ap)
    {
        this.autoPlay = ap;
    };

    /**
     * setting the domain where the audioplayer is located
     * @param String domain - default flashplayer.kino.de
     */
    this.setDomain = function (domain)
    {
        this.fpDomain = domain;
    };

    /**
     * setting the subfolder where the player is located
     * @param string | default empty - just used for testing purposes
     */
    this.setFolder = function (fold)
    {
        this.fpFolder = fold;
    };

    /**
     * returns player id pseudo interface to store in the registry
     * @return Number
     */
    this.getId = function()
    {
        return this.id;
    };

    /**
     * calls audioplayer an initializes loading this soundfile
     * @param string url |  mp3 full qualified filename
     */
    this.loadMp3 = function(url)
    {
        this.getMovie().loadMp3(url);
    };

    /**
     * used for intern calls - returns flashmovie
     */
    this.getMovie = function()
    {
        if (navigator.appName.indexOf("Microsoft") != -1)
        {
            return window[this.name];
        }
        else
        {
            return document[this.name];
        }
    };

    this.loadTrack = function(offset)
    {
        this.currentOffset = offset;
        var pl = this.getPlaylist();
        var track = pl.getTrackForOffset(offset);
        this.loadItem(track, offset);
    };

    this.loadItem = function(track, offset)
    {
        this.loadMp3(track.getTrackUrl());
        var params = {track: track};
        if('undefined' == typeof(offset))
        {
           offset = 0;
        }
        params.offset = offset;
        Emv.Observer.Controller.fireEvent(Mediacenter.Audioplayer.Event._TRACK_LOADED, params, this.getId());
    };

    this.handleEvent = function(event)
    {
        if(event.name == Mediacenter.Audioplayer.Event._SLOT_CLICKED)
        {
            this.loadTrack(event.params.clickedPlaylistOffset);
        }
        else if(event.name == Mediacenter.Audioplayer.Event._PLAYER_LOADED
                || event.name == Mediacenter.Playlist.Event._TRACK_SELECTED)
        {
            this.loadItem(event.params.item, event.params.offset);
        }
    };
};


Mediacenter.Audioplayer.Legend = function(id)
{
    this.id = id;
    this.playerId;

    this.smallAppend = '_smallTitle';
    this.bigAppend = '_bigTitle';

    this.getId = function()
    {
        return this.id;
    };

    this.setPlayerId = function(pid)
    {
        this.playerId = pid;
    };

    this.handleEvent = function(event)
    {
        if(event.name == Mediacenter.Audioplayer.Event._TRACK_LOADED)
        {
            this.setTitles(event.params.track);
        }
    };

    this.setTitles = function(track)
    {
        var sm = document.getElementById(this.playerId + this.smallAppend);
        if(sm)
        {
            sm.innerHTML = track.getTrackTitle();
        }
        var bg = document.getElementById(this.playerId + this.bigAppend);
        if(bg)
        {
            bg.innerHTML = track.getTrackTitle();
            bg.title = track.getTrackTitle();
        }
    };
};

Mediacenter.Audioplayer.Event = {
    // playerLoaded: the initial event, after the player is loaded called from flash.
    _PLAYER_LOADED   : "playerLoaded",
    _TRACK_LOADED    : "trackLoaded",
    _SLOT_CLICKED    : "slotClicked"
};
