var hidden_books = new Array();
var shown_books = new Array();
var fictionCategories = new Array();
var nonfictionCategories = new Array();
var globalRecommendedBooks;
var friendsRecommendedBooks;
var newReleaseRecommendedBooks;
var recommendedBooks;
var selectedCatBooks;
var globalTopTags;
var friendsTopTags;
var newReleaseTopTags;
var topTags;
var allowTagsCloud = 1;
var filterTag = '';


function initPage(isGuest){
  loadGlobalRecommendations();
  
  // Don't load friend recs for guests
  if (isGuest == undefined || !isGuest) {
    loadFriendsRecommendations();
  }

  loadPage();
}

var start = 0;

//set/get all values
function loadValues(blist){
  $('sort_type').value = blist.sort_type;
  $('sort_dir').value = blist.sort_dir;
  loadPage(blist.page_num);
}

//Sort links
function sort(sort_type){
  if ($('sort_type').value == sort_type){
    if($('sort_dir').value == "ASC")
      $('sort_dir').value = "DESC";
    else
      $('sort_dir').value = "ASC";
  } else {
    $('sort_type').value = sort_type;
  }
  loadPage();
}

function getFeaturedValues(){
  var listid = 'obs';
  var st = '';
  var sd = 'ASC';
  var ipp = 0;
  var pn = 1;
  var ui;

  try{
    st = getListParam(listid, 'sort_type');
    sd = getListParam(listid, 'sort_dir');
    pn = getListParam(listid, 'page_number');
    ipp = getListParam(listid, 'item_per_page');
    ui = $('fb_owner').value;
  }catch(e){}

  var cat = '{ '+getCatFilterValues()+'}';
  var type = '{'+getRecTypeValue()+'}';
  var tag = $('rec_tag') ? $('rec_tag').value : '';

  return {user_id:ui, sort_type:st, sort_dir:sd, page_num:pn,items_per_page:ipp,filter:cat, rec_type:type, rec_tag:tag};
}

function loadPage(){
  var data = getFeaturedValues();
  if (!data.user_id) {
    return;
  }
  new Request({
    url: LIVING_SITE_URL+"/bookshelves/other_book_list/"+ new Date().getTime(),
    method: 'post',
    data: data,
    evalScripts: true,
    onComplete: function(){
      loadBooklist(this.response["text"], true);
      try{
        $('fb_name').set('text', $('owner').value);
      }catch(e){}
      loadPrevFB();
      hideBooks();
      endWait();
    }
  }).send();
  wait();
}

function loadList(){
  loadPage();
}

/************REMOVE BOOK FROM VIEW********/
function removebv(e) {
  if(!confirm(BOOKSHELF_CONFIRM_REMOVE_VIEW)) return;
  var target = e.target || e.srcElement;
  var book_id = target.id.substr(3);
  hidden_books.push(book_id);
  hideBook(book_id);
}

function hideBook(book_id) {
  if(!$("B"+book_id)) return;
  if($("B"+book_id) && ($("B"+book_id).style.display = "none"));
  if($("M"+book_id) && ($("M"+book_id).style.display = "none"));
}

function hideBooks() {
  var i;
  for(i in hidden_books){
    hideBook(hidden_books[i]);
  }
}

function loadGlobalRecommendations(book_id){
  //recommendationsLoadingIndicator();
  var url;
  if (book_id) {
    url = LIVING_SITE_URL+"/recommendations/recommendations2?book_id="+ book_id + '&similar=1&ts=' + $time();
  } else {
    url = LIVING_SITE_URL+"/recommendations/recommendations2/"+ $time();
  }

  new Request({
    url: url,
    method: 'post',
    onComplete: function(){
      response = eval('('+this.response["text"]+')');
      globalRecommendedBooks = response.books;

      globalTopTags = response.top_tags;

      if (book_id) {
        selectedRecBooks = globalRecommendedBooks;
        selectedCatBooks = globalRecommendedBooks;
        topTags = globalTopTags;
        scrollRecPane(0);
        loadTagSet();
      } else {
        fictionCategories = response.categories['fiction'];
        nonfictionCategories = response.categories['nonfiction'];
        switchToGlobalRecs();
      }
    }
  }).send();
}

/**
 * Loads the recommendations from friends in the background
 * @return
 */
function loadFriendsRecommendations(){
  new Request({
    url: LIVING_SITE_URL+"/recommendations/recommendations2/"+ $time(),
    method: 'post',
    data: {rec_type:'{friends:1, newreleases:0}'},
    onComplete: function(){
      response = eval('('+this.response["text"]+')');
      friendsRecommendedBooks = response.books;
      friendsTopTags = response.top_tags;
    }
  }).send();
}

/**
 * Loads new releases in the background
 * @return
 */
function loadNewReleases(){
  new Request({
    url: LIVING_SITE_URL+"/recommendations/recommendations2/"+ $time(),
    method: 'post',
    data: {new_release:1},
    evalScripts: true,
    onComplete: function(){
      response = eval('('+this.response["text"]+')');
      newReleaseRecommendedBooks = response.books;
      newReleaseTopTags = response.top_tags;
    }
  }).send();
}

function switchToGlobalRecs() {
  uncheck_img_checkbox($('friends'));
  uncheck_img_checkbox($('new_releases'));
  recommendedBooks = globalRecommendedBooks;
  topTags = globalTopTags;
  filterByCat();
  filterByTag();
  //loadTagSet();
}

function switchToFriendsRecs() {
  uncheck_img_checkbox($('new_releases'));
  recommendedBooks = friendsRecommendedBooks;
  topTags = friendsTopTags;
  filterByCat();
  filterByTag();
  loadTagSet();
}

function switchToNewReleases() {
  uncheck_img_checkbox($('friends'));
  recommendedBooks = newReleaseRecommendedBooks;
  topTags = newReleaseTopTags;
  filterByCat();
  filterByTag();
  loadTagSet();

}

function loadTagSet() {
  if (allowTagsCloud) {

    str = tagsCloud();
    $('tags_cloud').innerHTML = str;
    $('tags_cloud_wrapper').style.display=canSee();
  } else {
    $('tags_cloud_wrapper').style.display='none';

  }
}

function tagsCloud(tags, attrs) {
  max_size = 22;
  min_size = 12;
  max_tags = 10;
  tags_str = '';

  attrs_str = '';

  if(attrs && attrs.length){
    for(var i in attrs) {
      attrs_str += ' '+i+'="'.attrs[i]+'"';
    }
  }

  var tags = new Array();


  // Get all of the tags from the currently selected book set
  for (var tt = 0; tt < topTags.length; tt++) {
    for (i = 0; i < selectedCatBooks.length; i++) {
      var book = selectedCatBooks[i];
      for (var bt = 0; bt < book.tags.length; bt++) {
        if (topTags[tt].tag == book.tags[bt] &&
          (tags.length == 0 || tags[tags.length - 1].tag != book.tags[bt]))
          tags[tags.length] = topTags[tt];
      }
    }
  }

  // Add in any other tags if we haven't hit our maximum
  /*for (i = 0; i < selectedRecBooks.length; i++) {
    var book = selectedRecBooks[i];
  }*/

  if(tags && tags.length){
    var selectedTag = $(filterTag) ? $(filterTag).innerHTML : '';
    max = tags[0]['count'];
    min = max;
    for (var i in tags){
      if(tags[i]['count'] > max) max = tags[i]['count'];
      else if(tags[i]['count'] < min) min = tags[i]['count'];
    }
    range = max - min;
    if (range == 0) {
      range = 1;
    }

    step = (max_size - min_size)/range;
    for (i = 0; i < tags.length; i++)
    {
      if (i >= max_tags) break;
      add_str =((!attrs || !attrs['onclick'])) ? 'onclick="toggleTag(this)" ':'';
      size = Math.round(min_size + ((tags[i]['count'] - min) * step));
      if(tags[i]["tag"] == selectedTag){
        tags_str += '<span ' + add_str + attrs_str + ' id="tag_' + tags[i]['id'] + '" class="tag_selected" style="font-size:' + size + 'px;" >' + tags[i]["tag"] + '</span>';
      } else {
        tags_str += '<span ' + add_str + attrs_str + ' id="tag_' + tags[i]['id'] + '" class="tag" style="font-size:' + size + 'px;" >' + tags[i]["tag"] + '</span>';
      }
    }
  } else {
    tags_str = TAGS_NO_TAGS;
  }

  return '<div style="width:600px;padding:0 auto;margin:0 auto"><div class="tags_cloud">' + tags_str + '</div></div>';

}

function allType(){
  if ($('rec_tag')) $('rec_tag').value = '';
  uncheck_img_checkbox($('friends'));
  uncheck_img_checkbox($('newreleases'));
  renderRecList(0);
}


function getRecTypeValue(){
  return 'friends:'+(imgChecked($('friends'))?"1":"0")
      + ', newreleases:'+(imgChecked($('newreleases'))?"1":"0");
}

function getConditions(){
  var cat = '{ '+getCatFilterValues()+'}';
  var type = '{'+getRecTypeValue()+'}';
  var tag = $('rec_tag') ? $('rec_tag').value : '';
  var book_id = $('book_id').value;
  return {filter:cat, rec_type:type, rec_tag:tag, book_id:book_id};
}


function view_shelf(fb_id){
  $('fb_owner').value = fb_id;
  loadPage(1);
}

function loadFriendsShelves(){
  var page = getPNvalues('bs');
  var data = {items_per_page:page.items_per_page, page_num:page.page_number};
  new Request({
    url: LIVING_SITE_URL+"/recommendations/friends_bookshelves/"+ new Date().getTime(),
    method: 'post',
    data: data,
    evalScripts: true,
    onComplete: function(){
      $('friends_bookshelves').set('html', this.response["text"]);
      endWait();
      choosePage('bs',1);
      //loadPage();
    }
  }).send();
  wait();
}

function loadPrevFB(){
  var user_id = $('fb_owner').value;
  new Request({
    url: LIVING_SITE_URL+"/recommendations/previous_bookshelf/"+user_id+"/"+ new Date().getTime(),
    method: 'get',
    evalScripts: true,
    onComplete: function(){
      $('prev_fb').set('html', this.response["text"]);
      endWait();
    }
  }).send();
  wait();
}

function afterSetBookShelf(target,other) {
  if (imgABChecked(target)) {
    forceHideBookDetail();
  }
}

function afterSaveInfo(el,type) {
  var value = imgChecked(el)?1:0;
  var book_id = getICValue(el);
  if(((type=='own') || (type=='wishlist') || (type=='read')) && value && $('add_bs'+book_id) && imgABChecked($('add_bs'+book_id))) {
    forceHideBookDetail();
  }
}

function afterRating(el, e, result){
  var book_id = getRatingBookId(el);
  if(result && $('add_bs'+book_id) && imgABChecked($('add_bs'+book_id))) {
    forceHideBookDetail();
  }
}

//Suggest book
// this function is now found in common.js
//function suggestBooks(elem, params, event){
//  ajax_list_externalFile = LIVING_SITE_URL + '/books/suggestRecommendBooks';
//  ajax_showOptions(elem, params, event);
//}
function suggestUsers(elem, params, event){
  ajax_list_externalFile = LIVING_SITE_URL + '/users/usersSuggestion';
  ajax_showOptions(elem, params, event);
}

function renderRecPop(bookId) {
  try {
    $('recpop').dispose();
  } catch (e) {}

  var recpop = new Element('div', {
    id: 'recpop'
  });
  
  var form = new Element('form', {
    id: 'frmSendRecom',
    method: 'post',
    action: '#',
    events: {
      submit: function() {
        return false;
      }
    }
  }).inject(recpop);
  
  new Element('input', {
    type: 'hidden',
    name: 'data[Book][id]',
    id: 'book_id',
    value: bookId,
    align: 'right'
  }).inject(form);
  
  var box = new Element('div', {
    'class': 'white_box',
    styles: {
      width: '200px'
    }
  }).inject(form);
  
  new Element('img', {
    src: LIVING_SITE_URL+'/img/close_off.png',
    events: {
      click: function() {
        $('recpop').dispose();
      },
      mouseover: function() {
        hlight(this);
      },
      mouseout: function() {
        btup(this);
        unhlight(this);
      },
      mousedown: function() {
        btdown(this);
      },
      mouseup: function() {
        btup(this);
      }
    },
    styles: {
      cursor: 'pointer',
      'float': 'right'
    },
    alt: CLOSE,
    title: CLOSE,
    align: 'absmiddle'
  }).inject(box);
  
  new Element('p', {
    id: 'recommend_title'
  }).set('html', REC_THIS_BOOK).inject(box);
  
  new Element('input', {
    name: 'data[Book][recommend]',
    id: 'rec_book',
    value: BOOK_USERNAME_EMAIL,
    size: '20',
    autocomplete: 'off',
    events: {
      keyup: function(e) {
        suggestUsers(this,'getDataByLettersUser',e);
      },
      click: function() {
        if (this.value == BOOK_USERNAME_EMAIL) {
          this.value = '';
        }
      },
      focus: function() {
        if (this.value == BOOK_USERNAME_EMAIL) {
          this.value = '';
        }
      },
      blur: function() {
        if (this.value === '') {
          this.value = BOOK_USERNAME_EMAIL;
        }
      }
    }
  }).inject(box);
  
  new Element('input', {
    name: 'data[dv_Book][recommend]',
    id: 'dv_rec_book',
    type: 'hidden',
    value: ''
  }).inject(box);
  
  new Element('input', {
    id: 'BookRecommend_hidden',
    type: 'hidden',
    value: ''
  }).inject(box);
  
  new Element('img', {
    src: LIVING_SITE_URL+'/img/button_send_off.png',
    events: {
      click: function(e) {
        sendRecommend(e);
        $('recommend_content').setStyle('display', 'none');
      },
      mouseover: function() {
        hlight(this)
      },
      mouseout: function() {
        btup(this);
        unhlight(this);
      },
      mousedown: function() {
        btdown(this);
      },
      mouseup: function() {
        btup(this);
      }
    },
    styles: {
      cursor: 'pointer'
    },
    alt: RECOMMEND,
    title: RECOMMEND,
    align: 'absmiddle'
  }).inject(box);
  
  document.body.appendChild(recpop);
}

var REC_CAT_BUT_HEIGHT = 18;
var REC_CAT_BUT_WIDTH = 181;
var rec_button_selected; // selected button id, e.g. rec-cat-but_3_14

/* Get button number and category id from id */
function recsCatIdExtract(id) {
  var bits = id.split('_');
  return {'button': bits[1], 'category': bits[2]};
}

/* Handle a recs button click */
function recsCatClick(el) {
  // Deselect currently selected
  bits = recsCatIdExtract(rec_button_selected);
  $(rec_button_selected).setStyle('background-position', '0 -' + (REC_CAT_BUT_HEIGHT * (bits.button - 1)) + 'px');
  
  // Select new category
  rec_button_selected = el.id;
  bits = recsCatIdExtract(el.id);
  $(el).setStyle('background-position', '-' + (REC_CAT_BUT_WIDTH * 2) + 'px -' + (REC_CAT_BUT_HEIGHT * (bits.button - 1)) + 'px');
  
  // Remember category with cookie
  Cookie.write('rec_button_selected', rec_button_selected);
  
  // Load sections
  loadRecsPopular(bits.category);
  loadCategoryReaders(bits.category);
  loadCategoryGroups(bits.category);
  loadCategoryAuthors(bits.category);
}

/* Handle a recs button mouseover */
function recsCatMouseover(el) {
  bits = recsCatIdExtract(el.id);
  if (el.id == rec_button_selected) {
    $(el).setStyle('background-position', '-' + (REC_CAT_BUT_WIDTH * 3) + 'px -' + (REC_CAT_BUT_HEIGHT * (bits.button - 1)) + 'px');
  } else {
    $(el).setStyle('background-position', '-' + REC_CAT_BUT_WIDTH + 'px -' + (REC_CAT_BUT_HEIGHT * (bits.button - 1)) + 'px');
  }
}

/* Handle a recs button mouseout */
function recsCatMouseout(el) {
  bits = recsCatIdExtract(el.id);
  if (el.id == rec_button_selected) {
    $(el).setStyle('background-position', '-' + (REC_CAT_BUT_WIDTH * 2) + 'px -' + (REC_CAT_BUT_HEIGHT * (bits.button - 1)) + 'px');
  } else {
    $(el).setStyle('background-position', '0 -' + (REC_CAT_BUT_HEIGHT * (bits.button - 1)) + 'px');
  }
}

/* Load a rec category */
function loadRecsPopular(catId) {
  var div = $('recs_popular');
  loadingIndicator(div);
  new Request({
    url: LIVING_SITE_URL + '/recommendations/get_popular/' + catId + '/' + $time(),
    method: 'get',
    onComplete: function(response) {
      div.innerHTML = response;
    }
  }).send();
}

/* Load a category's readers */
function loadCategoryReaders(catId) {
  var div = $('cat_readers');
  loadingIndicator(div);
  new Request({
    url: LIVING_SITE_URL + '/recommendations/get_readers/' + catId + '/' + $time(),
    method: 'get',
    onComplete: function(response) {
      div.innerHTML = response;
    }
  }).send();
}

/* Load a category groups */
function loadCategoryGroups(catId) {
  var div = $('cat_groups');
  loadingIndicator(div);
  new Request({
    url: LIVING_SITE_URL + '/recommendations/get_groups/' + catId + '/' + $time(),
    method: 'get',
    onComplete: function(response) {
      div.innerHTML = response;
    }
  }).send();
}

/* Load a category's authors */
function loadCategoryAuthors(catId) {
  var div = $('cat_authors');
  loadingIndicator(div);
  new Request({
    url: LIVING_SITE_URL + '/recommendations/get_authors/' + catId + '/' + $time(),
    method: 'get',
    onComplete: function(response) {
      div.innerHTML = response;
    }
  }).send();
}

