var PREVIEW_SWF_ID = 'item-preview-swf',
  PREVIEW_SWF = document.getElementById(PREVIEW_SWF_ID),
  IMPRESS_HOST = PREVIEW_SWF.getAttribute('data-impress-host'),
  speciesList = $('#item-preview a'),
  MainWardrobe;

if(console === undefined || console.log === undefined) {
  function log() {}
} else {
  log = $.proxy(console, 'log');
}

function impressUrl(path) {
  return 'http://' + IMPRESS_HOST + path;
}

function PetType() {}

PetType.prototype.load = function () {
  var url = '/species/' + this.species_id + '/color/' + this.color_id + '/pet_type.json',
    pet_type = this;
  $.getJSON(url, function (data) {
    pet_type.id = data.id;
    pet_type.body_id = data.body_id;
    Item.current.load();
    $.getJSON('/pet_types/' + data.id + '/swf_assets.json', function (assets) {
      log('pet type assets loaded');
      pet_type.assets = assets;
      Preview.update();
    });
  });
}

PetType.prototype.setAsCurrent = function () {
  PetType.current = this;
  speciesList.filter('.current').removeClass('current');
  this.link.addClass('current');
  this.load();
}

PetType.createFromLink = function (link) {
  var pet_type = new PetType();
  pet_type.color_id = link.attr('data-color-id');
  pet_type.species_id = link.attr('data-species-id');
  pet_type.link = link;
  return pet_type;
}

function Item() {
  this.load = function () {
    var url = '/' + this.id + '/swf_assets.json?body_id=' + PetType.current.body_id,
      item = this;
    $.getJSON(url, function (data) {
      log('item assets loaded');
      item.assets = data;
      Preview.update();
    })
  }
  
  this.setAsCurrent = function () {
    Item.current = this;
  }
}

Item.createFromLocation = function () {
  var item = new Item();
  item.id = parseInt(document.location.pathname.substr(1));
  return item;
}

Preview = new function Preview() {
  var assets = [], swf_id, swf, updateWhenFlashReady = false;
  
  this.setFlashIsReady = function () {
    log('flash ready');
    swf = document.getElementById(swf_id);
    if(updateWhenFlashReady) this.update();
  }
  
  this.update = function (assets) {
    var assets = [];
    log('want to update');
    if(swf) {
      log('got to update');
      log(assets);
      $.each([PetType, Item], function () {
        if(this.current.assets) assets = assets.concat(this.current.assets);
      });
      log(assets);
      assets = $.each(assets, function () {
        this.local_path = this.local_url;
      });
      log(assets);
      swf.setAssets(assets);
    } else {
      updateWhenFlashReady = true;
    }
  }
  
  this.embed = function (id) {
    swf_id = id;
    swfobject.embedSWF(
      impressUrl('/assets/swf/preview.swf'), // URL
      id, // ID
      '100%', // width
      '100%', // height
      '9', // required version
      impressUrl('/assets/js/swfobject/expressInstall.swf'), // express install URL
      {'swf_assets_path': impressUrl('/assets')}, // flashvars
      {'wmode': 'transparent', 'allowscriptaccess': 'always'} // params
    );
  }
}

Preview.embed(PREVIEW_SWF_ID);

PetType.createFromLink(speciesList.eq(Math.floor(Math.random()*speciesList.length))).setAsCurrent();

Item.createFromLocation().setAsCurrent();

speciesList.click(function (e) {
  e.preventDefault();
  PetType.createFromLink($(this)).setAsCurrent();
});

MainWardrobe = { View: { Outfit: Preview } };