function Rawq(options) {

var defaults = {
  media_players: $("#media_players"),
  audio_player: new AudioPlayer({selector: "#audio_player"}),
  media_lists: $("#media_lists"),
  music_list: new MusicList($("#music_list")),
  view: new View(),
  storage: new LocalStorage(window.localStorage)
};
options = $.extend(defaults, options);
for (var key in options) {
  this[key] = options[key];
}

}

Rawq.prototype.download_media = function(callback) {

var _this = this;
$.getJSON("/media", function(data) {
  _this.store_media(data);
  callback.call();
});

};

Rawq.prototype.store_media = function(data) {

var media_list_data = [];
for (var i = 0; i < data.length; i++) {
  media_list_data.push(data[i]._id);
  this.store_sources_data(data[i]._id, data[i].sources);
  this.storage.set("media_" + data[i]._id, { name: data[i].name });
}
this.storage.set("media_list", media_list_data);

};

Rawq.prototype.store_sources_data = function(media_id, sources) {

var sources_data = [];
for (var i = 0; i < sources.length; i++) {
  sources_data[i] = {
    src: Rawq.get_source_url(media_id, sources[i]._id),
    mimetype: sources[i].mimetype
  };
}
this.storage.set("media_" + media_id + "_sources", sources_data);

};

Rawq.prototype.render_music_list = function() {

this.music_list.render(rawq);

};

Rawq.prototype.handle_media_click = function(media_id) {

this.audio_player.change(this.view, {
  sources: this.storage.get("media_" + media_id + "_sources")
});

};

Rawq.get_source_url = function(media_id, source_id) {

return "/media/" + media_id + "/" + source_id;

};