

// -- profileController.js -------------------------------------------------


function getPlayer(_id) {

    var player = document.getElementsByName(_id)[0];
    if(!player)
        player = document.getElementById(_id);
            
    return player;
}

function MediaflyPlayer() {

	this.profiles = [];
}

MediaflyPlayer.prototype.loadProfile = function (_settings) {

    if (!_settings.name) {
        _settings.name = "default";
    }

    if (!_settings.viewerId) {
        _settings.viewerId = "mediaflyViewer";
    }

    if (!_settings.controllerId) {
        _settings.controllerId = "mediaflyController";
    }

    if (!_settings.rolloverId) {
        _settings.rolloverId = "mediaflyRollover";
    }

    if (!_settings.flashvars) {
        _settings.flashvars = {}
    }

    _settings.flashvars.InstanceId = new Date() + " (" + _settings.name + ") " + Math.floor(Math.random() * 100000000);


    this.profiles[_settings.name] = _settings;

    var url = _settings.profile.replace("http://", "https://") + "?";

    if (_settings.beta) {
        url += "beta=" + _settings.beta + "&";
    }
    if (_settings.html5) {
        url += "html5=" + _settings.html5 + "&";
    }

    $.getJSON(url + "callback=?", function (_profile) {

        if (_profile == null) {
            alert("This player is no longer active.");
            return;
        }

        mediaflyPlayer.overrideProfileFlashvars(_profile, _settings.flashvars);

        if (_profile.HTML5) {

            mediaPlayerController.init(_profile, _settings);

        } else {

            mediaflyPlayer.renderViewer(_profile.Viewer, _profile.PlayerPath, _profile.Version, _settings);
            mediaflyPlayer.renderController(_profile.Controller, _profile.PlayerPath, _profile.Version, _settings);
            mediaflyPlayer.renderRollover(_profile.Rollover, _profile.PlayerPath, _profile.Version, _settings);
        }
    });
}

MediaflyPlayer.prototype.renderViewer = function (_viewer, _path, _version, _settings) {

    if (_viewer) {

        var attributes = {
            id: _settings.viewerId,
            name: _settings.viewerId
        };

        $("." + _settings.viewerId).css("width", _viewer.Attributes.Width).css("height", _viewer.Attributes.Height);
        $("." + _settings.viewerId).append("<div id='swfobjectPlaceholder'></div>").show();

        swfobject.embedSWF(_path + "/webplayer.swf?Version=" + _version, "swfobjectPlaceholder", "100%", "100%", "10.1", _path + "/expressInstall.swf", this.clean(_viewer.Flashvars), this.clean(_viewer.Params), attributes);

    } else {

        $("." + _settings.viewerId).remove();
    }
}

MediaflyPlayer.prototype.renderController = function (_controller, _path, _version, _settings) {

    var attributes = {
        id: _settings.controllerId,
        name: _settings.controllerId
    };

    $("." + _settings.controllerId).css("width", _controller.Attributes.Width).css("height", _controller.Attributes.Height);
    $("." + _settings.controllerId).append("<div id='swfobjectPlaceholder'></div>");

    swfobject.embedSWF(_path + "/webplayer.swf?Version=" + _version, "swfobjectPlaceholder", "100%", "100%", "10.1", _path + "/expressInstall.swf", this.clean(_controller.Flashvars), this.clean(_controller.Params), attributes);
}

MediaflyPlayer.prototype.renderRollover = function (_rollover, _path, _version, _settings) {

    if (_rollover) {

        $("." + _settings.rolloverId).append("<div id='swfobjectPlaceholder'></div>").show();

        var attributes = {
            id: _settings.rolloverId,
            name: _settings.rolloverId
        };

        swfobject.embedSWF(_path + "/webplayerrollover.swf?Version=" + _version, "swfobjectPlaceholder", "100%", "100%", "10.1", _path + "/expressInstall.swf", this.clean(_rollover.Flashvars), this.clean(_rollover.Params), attributes);

    } else {

        $("." + _settings.rolloverId).remove();
    }
}

MediaflyPlayer.prototype.overrideProfileFlashvars = function (_profile, _overrides) {

    this.overrideFlashvars(_profile.Controller.Flashvars, _overrides);

    if (_profile.Viewer) {
        this.overrideFlashvars(_profile.Viewer.Flashvars, _overrides);
    }

    if (_profile.Rollover) {
        this.overrideFlashvars(_profile.Rollover.Flashvars, _overrides);
    }
}

MediaflyPlayer.prototype.overrideFlashvars = function (_flashvars, _overrides) {

    if (_flashvars, _overrides) {
        for (var key in _overrides) {
            _flashvars[key] = _overrides[key];
        }
    }
}

MediaflyPlayer.prototype.clean = function (_object) {

    var items = [];
    for (var k in _object) {

        if (k != "__type" && _object[k] != null && ((typeof _object[k] == 'boolean') || (typeof _object[k] == 'number') || _object[k] != ""))
            items[k] = _object[k];
    }

    return items;
}

MediaflyPlayer.prototype.initDebugger = function() {

	this.debuggerWindow = $("#debug");
	
	$("#clear").click(function(){
		$("#debug").text("");
	});

}

MediaflyPlayer.prototype.debug = function(_message) {

	if (this.debuggerWindow) {

	    this.debuggerWindow.append(_message + "\n");
		//this.debuggerWindow.attr({ scrollTop: $("#debug").attr("scrollHeight") });
	}
}

MediaflyPlayer.prototype.play = function(_name) {

	this.getPlaybackObject(_name).dispatchPlaybackEvent("mediaplayerevent_playclick");
}

MediaflyPlayer.prototype.pause = function(_name) {

	this.getPlaybackObject(_name).dispatchPlaybackEvent("mediaplayerevent_pauseclick");
}

MediaflyPlayer.prototype.previous = function(_name) {

	this.getPlaybackObject(_name).dispatchPlaybackEvent("mediaplayerevent_previousclick");
}

MediaflyPlayer.prototype.next = function(_name) {

	this.getPlaybackObject(_name).dispatchPlaybackEvent("mediaplayerevent_nextclick");
}

MediaflyPlayer.prototype.mute = function(_name) {

	this.getPlaybackObject(_name).dispatchPlaybackEvent("mediaplayerevent_muteclick");
}

MediaflyPlayer.prototype.unmute = function(_name) {

	this.getPlaybackObject(_name).dispatchPlaybackEvent("mediaplayerevent_unmuteclick");
}

MediaflyPlayer.prototype.getPlaybackObject = function(_name) {

	var name = _name ? _name : "default";
	var profile = this.profiles[name];

	var player = getPlayer(profile.viewerId);
	if(!player)
		player = getPlayer(profile.controllerId);

	return player;
}

var mediaflyPlayer = new MediaflyPlayer();
