var player;
var content, exp, search, ad, videoPlayer;
var tabBar, tabCount;
var search_result;
var search_result_hash;
var search_completed_count;
var isTemplateLoaded = false;
var isTemplateReady = false;
var isFirstLoad = true;

var isAutoStart = true;
var isAutoForward = false;

function onTemplateLoaded(pPlayer) {
  player = bcPlayer.getPlayer(pPlayer);

  content = player.getModule(APIModules.CONTENT);
  content.addEventListener(BCContentEvent.MEDIA_COLLECTION_LOAD, onMediaCollectionLoad);
  content.addEventListener(BCContentEvent.PLAYLIST_LOAD, onPlaylistLoad);
  content.addEventListener(BCContentEvent.VIDEO_LOAD, onVideoLoad);

  exp = player.getModule(APIModules.EXPERIENCE);
  exp.addEventListener(BCExperienceEvent.TEMPLATE_READY, onTemplateReady);

  search = player.getModule(APIModules.SEARCH);
  search.addEventListener('searchResult', onSearchResult);

  videoPlayer = player.getModule(APIModules.VIDEO_PLAYER);
  videoPlayer.addEventListener('videoComplete', onVideoComplete);
  videoPlayer.addEventListener('streamStart', onStreamStart);

  ad = player.getModule(APIModules.ADVERTISING);
  ad.addEventListener('adStart', onAdStart);

  isTemplateLoaded = true;
}

function onTemplateReady(e) {
  tabBar = exp.getElementByID('playlistTabs');
  tabCount = tabBar.getNumItems();
  if (tabBar.getSelectedIndex() == 0){
    isFirstLoad = false;
    var bctid = getUrlVars()['bctid'];
    if (null != bctid && null == content.getVideo(bctid)) {
      setNoContent();
      var playListId = content.getAllPlaylistIDs()[0];
      var videoList = exp.getElementByID('videoList');
      videoList.showPlaylist(playListId);
    } else {
      if (isAutoStart) {
        content.getVideoAsynch(videoPlayer.getCurrentVideo().id);
      }
    }
  }
  isTemplateReady = true;
}

function onPlaylistLoad(event) {
  if(isTemplateReady && isFirstLoad) {
    isFirstLoad = false;
    var bctid = getUrlVars()['bctid'];
    if (null != bctid && null == content.getVideo(bctid)) {
      setNoContent();
      var videoList = exp.getElementByID('videoList');
      videoList.showPlaylist(event.playlist.id);
    } else {
      content.getVideoAsynch(bctid);
    }
  }
}

function onVideoLoad(event) {
  videoPlayer.loadVideo(event.video.id);
}

function searchAndInsertTab(searchWord) {
  if (!isTemplateLoaded) {
    return false;
  }

  search_result = [];
  search_result_hash = new Object();
  search_completed_count = 0;

  var searchAndArr = [];
  var searchOrArr = [];

  var searchWordTrimAndReplace = trimAndReplaceSpace(searchWord);
  searchOrArr = searchWordTrimAndReplace.split(' ');

  search.findVideosByTags(searchAndArr, searchOrArr, 50, 0, 'MODIFIED_DATE', 'DESC');
  search.findVideosByText(searchWordTrimAndReplace, 50);

  return false;
}

function onSearchResult(e) {

  var items = e.items;
  var i = 0;
  while (i < items.length) {
    search_result_hash[items[i].id] = items[i].publishedDate;
    i++;
  }
  search_completed_count++;

  if (search_completed_count == 2) {
    var ary = [];
    for (var j in search_result_hash) {
      ary.push({ key: j, value: search_result_hash[j] });
    }
    ary.sort(function(a, b) { return b.value - a.value; });

    var plists = content.getAllPlaylists();
    var ids = new String();
    for (var k = 0; k < plists.length; k++) {
      ids += ',' + plists[k].videoIds;
    }
    for (var l = 0; l < ary.length; l++ ) { 
      if (-1 < (ids.indexOf(ary[l].key))) {
        search_result.push(ary[l].key);
      }
    }
    if (0 < search_result.length) {
      content.getMediaInGroupAsynch(search_result);
    } else {
      onMediaCollectionLoad(null);
    }
  }
}

function onMediaCollectionLoad(e) {

  if (e && e.mediaCollection) {
    if (e.mediaCollection.id < 0) {
      search_result_playlist = {
        displayName: '検索結果　' + search_result.length + "件",
        mediaIds: search_result
      };
      if (tabCount <= tabBar.getNumItems()) {
        tabBar.removeTabAt(tabCount);
      }
      tabBar.insertTabAt(content.createRuntimeMediaCollection(search_result_playlist, 'playlist'), tabBar.getNumItems());
      tabBar.setSelectedIndex(tabBar.getNumItems() - 1);
    }
  } else {
    search_result_playlist = {
      displayName: '検索結果　0件',
      mediaIds: null
    };
    if (tabCount <= tabBar.getNumItems()) {
      tabBar.removeTabAt(tabCount);
    }
    tabBar.insertTabAt(content.createRuntimeMediaCollection(search_result_playlist, 'playlist'), tabBar.getNumItems());
    tabBar.setSelectedIndex(tabBar.getNumItems() - 1);
  }
}

function onVideoComplete(event) {

  var list = player.getModule(APIModules.EXPERIENCE).getElementByID("videoList");
  var nextIndex = list.getSelectedIndex() + 1;
  if (nextIndex < list.getNumItems()) {
    if(isAutoForward){
      list.setSelectedIndex(nextIndex);
    }
  }
}

function onAdStart(event) {
  setContent();
}

function onStreamStart(event) {
  setContent();
}

function setNoContent() {
  videoPlayer.setVisible('false');

  exp.getElementByID('vpBox').setBackgroundImage('http://parts.nikkei.jp/parts/ds/images/video/no_content_image.png');
  exp.getElementByID('videoTitle').setVisible('false');
  exp.getElementByID('videoDate').setVisible('false');
  exp.getElementByID('videoTime').setVisible('false');
  exp.getElementByID('Description').setVisible('false');
  exp.getElementByID('relatedLink').setVisible('false');
}

function setContent() {
  videoPlayer.setVisible('true');

  exp.getElementByID('vpBox').setBackgroundImage('');
  exp.getElementByID('videoTitle').setVisible('true');
  exp.getElementByID('videoDate').setVisible('true');
  exp.getElementByID('videoTime').setVisible('true');
  exp.getElementByID('Description').setVisible('true');
  exp.getElementByID('relatedLink').setVisible('true');
}

function getUrlVars() {
  var vars = [], hash;
  var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
  for(var i = 0; i < hashes.length; i++)
  {
    hash = hashes[i].split('=');
    vars.push(hash[0]);
    vars[hash[0]] = hash[1];
  }
  return vars;
}

function trimAndReplaceSpace(s) {
  return jQuery.trim(s.replace(/　+/g, ' ').replace(/\s+/g, ' '));
}

