jQuery(function(){
  jQuery('#glbHeaderSearch-value').attr('value', '書籍の名前を入力してください');
  jQuery('#glbHeaderSearch-value').focus(function(){
    jQuery(this).attr('value', '').css({'color':'#333'});
  });
  var over = false;
  var out = false;
  $('#glbHeaderMyNav > ul > li').hover(
    function(){
      if(over) { return }
      over = true; out = false;
      $(this).children('ul').show();
      var par = $(this).children()[0];
      $(par).removeClass().addClass('parAct');
      over = false;
    },
    function(){
      if(out) { return }
      over = false; out = true;
      $(this).children('ul').hide();
      var par = $(this).children()[0];
      $(par).removeClass().addClass('par');
      out = false;
    }
  );
});
var boox = function(){
  var d = {
    'boox' :'0.1',
    'author'  : '',
    'base_url': 'http://cc.boox.jp',
    'secure_url': 'https://cc.boox.jp'
    };
  return d;
};
boox.conf = {};
boox.conf.api = function(api){
  var d = {
    'my_book_list': '/api/my/book_list',
    'my_search_list': '/api/my/search_list',
    'my_book_delete': '/api/shelf_book/delete',
    'shelf_book_list':'/api/shelf_book/get_shelf_book_list',
    'search_set_section_book': '/api/section/search_set_section_book'
  };
  return d[api];
};
boox.conf.book = function(key){
  var d = {
    'img_path':'/static/img/book/',
    'extension':'.jpg',
    'noimg': '/static/img/book/not_image.jpg',
    'noimg_adult': '/static/img/book/adult_noimage.png'
  };
  return d[key];
};
boox.test = function(){
  
};
boox.test.remove = function(id){
  jQuery(id).remove();
};
boox.util = {};
//URLのパラメタをオブジェクトにして返す。
boox.util.paramsParser = function(url){
  var rData = {};
  var point = url.indexOf("?", 0);
  point = point + 1;
  url = url.slice(point);
  var getArr = url.split('&');
  for(x=0, xlen=getArr.length; x<xlen; x++){
    var paramArr = getArr[x].split('=');
    rData[paramArr[0]] = paramArr[1];
  }
  return rData;
};
boox.util.checkIE = function(){
  if (typeof document.body.style.maxHeight != "undefined") {
  // IE 7, mozilla, safari, opera 9
    return false;
  } else {
  // IE6, older browsers
    return true;
  }
};
boox.util.validate = function(str){
  str = str.replace(/\\/g, '\\');
  str = str.replace(/[/]/g, '\\/');
  str = str.replace(/\"/g, '\\"');
  str = str.replace(/\'/g, "\\\'");
  str = str.replace(/</g, '&lt;');
  str = str.replace(/>/g, '&gt;');
  str = str.replace(/&/g, '&amp;');
  return str;
};
boox.util.trimStr = function(len, str){
  str = unescape(str);
  str = str.replace(/\r\n?/g,"\n").replace(/\n/, '').replace(/\s/g, '');
  str = boox.util.validate(str);
  str = str.slice(0, len);
  return str;
};
boox.util.stamp = function(id, size, type){
  var r = '';
  var ic_size = 'icStampM';
  var d = {
    '0':['untitle', '未設定'],
    '1':['laugh', '笑える'],
    '2':['emotion', '感動'],
    '3':['heartbeats', 'ときめく'],
    '4':['cry', '泣ける'],
    '5':['afraid', '怖い'],
    '6':['funny', 'おもしろい'],
    '7':['nearly', 'もう一歩'],
    '8':['useful', 'ためになる'],
    '9':['kind', '分かりやすい'],
    '10':['expert', '専門的'],
    '11':['super', '目から鱗'],
    '12':['erox', 'ちょいエロ'],
    '13':['eroxx', '中エロ'],
    '14':['eroxxx', '激エロ']
  };
  if(size == 's'){ic_size = 'icStampS';}
  else if(size == 'ss') {ic_size = 'icStampSS';}
  else {ic_size = 'icStampM';}
  if(type == 'span'){
    r = '<span class="' + d[id][0] + '">' + d[id][1] + '</span>';
  } else if(type == 'a') {
    r = '<a href="" class="' + ic_size + '"><span class="' + d[id][0] + '">' + d[id][1] + '</span></a>';
  } else if(type == 'div') {
    r = '<div class="' + ic_size + '"><span class="' + d[id][0] + '">' + d[id][1] + '</span></div>';
  } else {
    r = d[id][1];
  }
  return r;
};
boox.util.stockCode = function(code){
  if(code == '000') {
    return '24時間以内発送';
  } else if(code == '005') {
    return '当日〜3日で発送';
  } else if(code == '010') {
    return '2日〜3日で発送';
  } else if(code == '020') {
    return '3日〜5日で発送';
  } else if(code == '030') {
    return '2日〜7日で発送';
  } else if(code == '040') {
    return '5日〜7日で発送';
  } else if(code == '050') {
    return '1週間〜2週間で発送';
  } else if(code == '060') {
    return 'お取り寄せ';
  } else if(code == '070') {
    return '入荷予定未定';
  } else if(code == '099') {
    return '入荷予定なし';
  } else if(code == '110') {
    return '発売日〜3日以内にお届け';
  } else if(code == '120') {
    return '発売日〜3日以内にお届け(予約まもなく終了)';
  } else if(code == '170') {
    return '予約受付終了';
  } else if(code == '199') {
    return '入荷予定なし';
  }
};
boox.util.checkfile = function(url){
  var r = false;
  try{
    var req = new XMLHttpRequest();
    req.open('GET', url, false);
    req.send(null);
    if(req.status == '404'){r = false;} else {r = true;}
  } catch(e) {
    try{
      var req = new ActiveXObject("Microsoft.XMLHTTP");
      req.open("GET", url);
      req.send();
      if(req.status == '404'){r = false;} else {r = true;}
    } catch(e) {
      r = false;
    }
  }
  return r;
};
boox.util.pager = function(total, rows, page_now){
  if(!page_now){page_now = 1;}
  var page_cols = 10; // Page表示数
  var page_total = Math.ceil(total / rows);
  var page_center = Math.floor( page_cols / 2 );
  var page_start = 0;
  var page_end = 0;
  var data = {};
  var page_array = [];
  var more = false;
  
  page_start = ((Number(page_now) - 1) * page_cols) + 1;
  page_end = (page_start + page_cols > total)
    ? (page_total % page_cols)
    : page_start + page_cols;

  var page_prev = (page_now > 1) ? Number(page_now) - 1 : page_now;
  var page_next = (page_now == page_total) ? page_total : Number(page_now) + 1;
  
  if(Number(page_now) < (page_total / 2)) {
    page_end = Number(page_now) + Math.round(page_cols / 2);
    page_start = Number(page_now) - Math.round(page_cols / 2) + 1;
    if(Number(page_now) <= Math.round(page_cols / 2)) {
      page_start = 1;
      page_end = (page_total > page_cols ? page_cols : page_total);
    } // end if
  } else {
    page_end = Number(page_now) + Math.round(page_cols / 2) - 1;
    page_start = Number(page_now) - Math.round(page_cols / 2);
    if(Number(page_now) > page_total - Math.round(page_cols / 2)) {
      page_end = page_total;
      page_start = (page_total > page_cols ? page_total - page_cols + 1 : 1);
    }
  } // end if page_now < page_total / 2

  var str = '';
  for(var i=page_start; i<=page_end; i++){
    page_array.push(i);
  } // end for
  if(page_end < page_total){
    more = true;
  }
  data = {
    'page_total':page_total,
    'current':page_now,
    'total':total,
    'prev':page_prev,
    'next':page_next,
    'more':more,
    'page':page_array
  };
  return data;
};
boox.util.pager2 = function(total, rows, page_now){
  if(!page_now){page_now = 1;}
  var data = {};
  var page_array = [];
  var more = false;
  var page_total = Math.ceil(total / rows);
  if(page_now > 1){
    var page_prev = Number(page_now) - 1;
  } else {
    var page_prev = page_now;
  }
  if(page_now == page_total){
    var page_next = page_total;
  } else {
    var page_next = Number(page_now) + 1;
  }
  var page_cols = 10;
  var page_center = Math.floor( page_cols / 2 );
  var page_start = 0;
  if(page_now > page_center && page_now > page_cols){page_start = page_now - page_center;}
  var page_end = page_start + page_cols;
  if(page_end > page_total){page_end = page_total;}
  var page_current = page_now - 1;
  var str = '';
  for(var i=page_start; i<page_end; i++){
    page_array.push((i+1));
  } // end for
  if(page_end < page_total){
    more = true;
  }
  data = {
    'page_total':page_total,
    'current':page_now,
    'total':total,
    'prev':page_prev,
    'next':page_next,
    'more':more,
    'page':page_array
  };
  return data;
};

boox.util.submitForm = function(form_id, method, url){
  jQuery('#' + form_id);
  if(method){jQuery('#' + form_id).attr({'method':method});}
  if(url){jQuery('#' + form_id).attr({'action':url});}
  jQuery('#' + form_id)[0].submit();
};
boox.util.addFigure = function(n){
  var l, m='';
  var mark = (n < 0) ? '-' : '';
  var flt = '';
  n = Math.abs(n);
  if (n % 1) {
    flt  = n + '';
    flt = flt.substr(flt.indexOf('.'));
  }
  n = Math.floor(n) + '';
  while ( (l = n.length) > 3 ) {
    m = "," + n.substr( l - 3, 3 ) + m;
    n = n.substr( 0, l - 3 );
  }
  return mark + n + m + flt;
};
boox.util.tweet = function(str){
  var bitly_api = 'http://api.bit.ly/shorten';
  var data = {};
  data['apiKey'] = 'R_9b85320382dfe36c17501f3bf9a75ce2';
  data['login'] = 'gorton';
  data['version'] = '2.0.1';
  data['format'] = 'json';
  data['callback'] = 'booxTweetTest';
  data['longUrl'] = location.href;
  jQuery.ajax({
    url: bitly_api,
    type: 'get',
    data: data,
    dataType: 'json',
    success: function(d, dtype){
      alert('ok');
    },
    error: function(d, dtype){
      alert('ng');
    }
  });
};
boox.util.winPop = function(url, name, w, h){
  var params = 'width=' + w + ', height=' + h + ', menubar=no, toolbar=no, resizable=yes, scrollbars=1'
  window.open(url, name, params);
};
boox.effect = {};
boox.effect.sideToggle = function(a){
  if ( jQuery(a).attr('class') == 'btX' ) { jQuery(a).removeClass().addClass('btXO'); }
  else { jQuery(a).removeClass().addClass('btX'); }
  var par_div = jQuery(a).parent().parent().parent();
  var child = jQuery(par_div).children('.boxInner').children();
  jQuery(child).slideToggle();
};
boox.effect.slideTree = function(a){
  var b = jQuery(a).text();
//  if(b == '+') { b = '-'; } else { b = '+'; }
  var ch_ul = jQuery(a).next().next();
  var ch_class = jQuery(ch_ul).attr('class');
  var ch_style = jQuery(ch_ul).css('display');
  if(ch_style == 'none') {b = '-';} else {b = '+';}
  if( ch_class.match(/^child/) ) {
    jQuery(a).text(b);
    jQuery(ch_ul).slideToggle();
  }
};
boox.ajax = {};
boox.ajax.status = function(d, dataType){
  var s = d.code_id;
  if (s){
    // Api Success
    if (s=='100'){return true;}
    // System Error
    else if(s=='101'){boox.ajax.error2(d, dataType); jQuery('.clearParts').remove();}
    // Validation Error
    else if(s=='102'){return true;}
    // No Login
    else if(s=='103'){
      location.href = '/login';
/*      window.location.reload();*/
    }
    // No Data
    else if(s=='104'){return true;}
    // 重複チェック
    else if(s=='105'){return true;}
  } else {
    return true;
  } // if s
};
boox.ajax.error = function(XMLHttpRequest, textStatus, errorThrown){
/*
  var div = document.createElement('div');
  var msg = XMLHttpRequest + '/' + textStatus + '/' + errorThrown + '/不明なエラー：Javascript 通信エラーが発生しました。';
  msg += '<input type="button" value="消す" onclick="boox.test.remove(\'#ajaxResult\');" />';
  jQuery(div).attr({'id':'ajaxResult'});
  jQuery(div).empty().append(msg);
  jQuery('body').append(div);
  jQuery(div).css({'position':'absolute', 'top':'50%', 'left':'0'});
*/
};
boox.ajax.error2 = function(d, dtype){
};
boox.ajax.mybook = function(pname, pvalue, mode, page, area, onload){
  var url_main = '/api/my/book_list';
  var url_side = '/api/my/search_list';
  var queryArr = jQuery('#booxAjaxQuery input');
  var query = {};
  for (i=0, ilen=queryArr.length; i<ilen; i++){
    if(mode == 'expand' && queryArr[i].name == pname) {
      jQuery(queryArr[i]).attr('value', '');
    } else if(mode == 'narrow' && queryArr[i].name == pname) {
      jQuery(queryArr[i]).attr('value', pvalue);
    }
    query[queryArr[i].name] = queryArr[i].value;
  }
  if(!page){
    query['page'] = 1;
  } else {
    query['page'] = page;
  }
  if(!area || area == 'main') {
    // Main
    jQuery.ajax({
      url: url_main,
      type: 'post',
      data: query,
      dataType: 'json',
      success: function(d, dataType){if (boox.ajax.status(d)){
        boox.ajax.mybook.render(d, dataType);
        if(onload) {boox.ajax.mybook.pager(d, '', '', '', onload);}
      }},
      error: boox.ajax.error,
      complete: function(){}
    });
  }
  if(!area || area == 'side') {
    // Side
    jQuery.ajax({
      url: url_side,
      type: 'post',
      data: query,
      dataType: 'json',
      success: function(d, dataType){if (boox.ajax.status(d)){boox.ajax.mybook.render.side(d, dataType);}},
      error: boox.ajax.error,
      complete: function(){}
    });
  }
};
boox.ajax.mybook.pager = function(d, a, page, total, onload){
  var i;
  var len;
  if(d){
    if(!page){page = 1;}
    page = d.data[0].page.current_page;
    total = d.data[0].total_count;
  }
  if(a) {
    var par = jQuery(a).parent();
    if( jQuery(par).attr('id') == 'booxAjaxPagerBottom' ) {
      jQuery.scrollTo('anchorTop', 0, {easing:'swing'});
    }
  }
  var data = boox.util.pager(total, 10, page);
  if(page && page == 1){
    var content = '';
  } else {
    var content = '<a href="" onclick="boox.ajax.mybook.pager(\'\', this, 1, ' + total + '); return false;">&lt;&lt;最初</a>&nbsp;';
  }
  if(page > 1){
    content += '<a href="" onclick="boox.ajax.mybook.pager(\'\', this, ' + data['prev'] + ', ' + total + '); return false;">&lt;前へ</a>';
  }
  if(data['page_total'] > 1 && page > 1) {content += '&nbsp;|&nbsp;';}
  if(data['page'].length){
    for(i=0, len=data['page'].length; i<len; i++){
      if(data['page'][i] == page){
        content += '<em><span>' + data['page'][i] + '</span></em>';
      } else {
        content += '<a href="" onclick="boox.ajax.mybook.pager(\'\', this, ' + data['page'][i] + ', ' + total + '); return false;"><span>' + data['page'][i] + '</span></a>';
      }
      if(data['page'][i] < data['page_total']) { content += '&nbsp;|&nbsp;'; }
      if( data['page'][i] != page && data['page'][i] == data['page_total'] ) { content += '&nbsp;|&nbsp;' }
    }
  }
  if(page < data['page_total']){
    content += '<a href="" onclick="boox.ajax.mybook.pager(\'\', this, ' + data['next'] + ', ' + total + '); return false;">次へ&gt;</a>&nbsp;';
  }
  if(page && data['page_total'] && data['page_total'] == page) {
    content += '';
  } else {
    content += '<a href="" onclick="boox.ajax.mybook.pager(\'\', this, ' + data['page_total'] + ', ' + total + '); return false;">最後&gt;&gt;</a>';
  }
  jQuery('#booxAjaxPagerTop').empty().append(content);
  jQuery('#booxAjaxPagerBottom').empty().append(content);
  if(!onload) {boox.ajax.mybook('', '', '', page, 'main', ''); }
};
boox.ajax.mybook.render = function(d, dataType){
  jQuery('#booxAjaxRender').empty();
  jQuery('#booxAjaxListTotal > em').empty();
  if (d.data[0].books){
    var pageDiv = document.createElement('div');
    jQuery('#booxAjaxRender').append(pageDiv);
    for(i=0, ilen=d.data[0].books.length; i<ilen; i++){
      var div = document.createElement('div');
      jQuery(pageDiv).append(div);
      boox.unit.mybook(div, d.data[0].books[i]);
    }
  } else {
    jQuery('#booxAjaxRender').append('空です');
  }
  jQuery('#booxAjaxListTotal > em').empty().append(d.data[0].total_count);
};
boox.ajax.mybook.render.side = function(d, dataTyoe){
  jQuery('#booxAjaxMybookRenderSide').empty();
  var facet = {};
  facet['category'] = jQuery('#booxAjaxQuery input.category').attr('value');
  facet['section_id'] = jQuery('#booxAjaxQuery input.section_id').attr('value');
  facet['status_id'] = jQuery('#booxAjaxQuery input.status_id').attr('value');
  facet['open_flg'] = jQuery('#booxAjaxQuery input.open_flg').attr('value');
  facet['author'] = jQuery('#booxAjaxQuery input.author').attr('value');
  facet['stamp'] = jQuery('#booxAjaxQuery input.stamp').attr('value');
  facet['score'] = jQuery('#booxAjaxQuery input.score').attr('value');
  var map = new Array;
  var category = new Array;
  var cat_str = '';
  var x;
  var xlen;
  var y;
  var ylen;
  // for x
  for (x=0, xlen=d.search.length; x<xlen; x++){
    if(d.search[x].data){
      if (d.search[x].title){
        var str = '<div class="boxSideNr"><div class="headline"><div class="titleEx clearfix"><h2 class="txt"><em>' + d.search[x].title + '</em></h2><a class="btX" href="" onclick="boox.effect.sideToggle(this); return false;"><span>X</span></a></div></div>';
      } else {
        var str = '<div class="boxSideNr"><div class="headline"><div class="titleEx clearfix"><h2 class="txt"><em>名称未設定</em></h2><a class="btX" href="" onclick="boox.effect.sideToggle(this); return false;"><span>X</span></a></div></div>';
      } // if
      if(d.search[x].key == 'category') {
        str += '<div class="boxInner"><div class="listTree"><ul id="genreTree0">';
      } else {
        str += '<div class="boxInner"><div class="listNr"><ul>';
      }
      if(facet[d.search[x].key] != '') {
        str += '<li><a href="' + d.search[x].key + '" onclick="boox.ajax.mybook(\'' + d.search[x].key + '\', \'\', \'expand\', 1, \'\', true); return false;"><span>全て</span></a></li>';
      }
      if(d.search[x].key != 'category'){
        if(d.search[x].data.length) {
          for(y=0, ylen=d.search[x].data.length; y<ylen; y++){
            if(d.search[x].data[y].count == 0){continue;}
            if(d.search[x].key == 'author' && y > 20){continue;}
            str += '<li>';
            if(!facet[d.search[x].key] && facet[d.search[x].key] != d.search[x].data[y].query) {
              str += '<a href="" onclick="boox.ajax.mybook(\'' + d.search[x].key + '\', \'' + d.search[x].data[y].query + '\', \'narrow\', 1, \'\', true); return false;"><span>';
            }
            if(d.search[x].key == 'stamp'){
              str += boox.util.stamp( d.search[x].data[y].name );
            } else {
              str += d.search[x].data[y].name;
            }
            if(!facet[d.search[x].key] && facet[d.search[x].key] != d.search[x].data[y].query) {
              str += '</span></a>';
            }
            str += '</li>';
          } // end for y
        } else {
          str += '<li><span>絞り込みがありません。</span></li>';
        }
      } else {
        if(d.search[x].data instanceof Array) {
          str += '<li><span>絞り込みがありません。</span></li>';
        } else {
          str += openList(d.search[x].data, d.search[x].key);
        }
      }
      str += '</ul></div>';
      str += '</div></div>';
      jQuery('#booxAjaxMybookRenderSide').append(str);
      boox.render.openTree(facet['category']);
    } // end if d.search[x].data
  } // end for x
  // 再起処理
  function openList(data, key){
    var m = data.children;
    var len = m.length;
    var i = 0;
    var clen;
    if(len && m[0].total){
      for(i=0; i<len; i++){
        clen = m[i].children.length;
        if(m[i].total == 0 || m[i].genre_id >= 90000) {continue;}
        if(clen){var bt = '<a href="" class="xhref" onclick="boox.effect.slideTree(this); return false;">+</a>';} else {var bt = '<span class="xhref">-</span>';}
        cat_str += '<li class="genre' + m[i].genre_id + '">' + bt + '<a href="" onclick="boox.ajax.mybook(\'' + key + '\', \'' + m[i].genre_id + '\', \'narrow\', 1, \'\', true); return false;">' + m[i].name + '</a>';
        if(clen){
          cat_str += '<ul class="child tree' + m[i].genre_id + '" style="display:none;">';
          openList(m[i], key);
          cat_str += '</ul>';
        } // end if
        cat_str += '</li>';
      }
    } else {
      cat_str += '<li><span>絞り込みがありません。</span></li>';
console.log(m.length);
console.log(m[0].total);
console.log(m[0].name);
    } // end if
    return cat_str;
  } // end func
};

boox.ajax.refinedSearchSide = function(id, pname, pvalue, mode, page, onload){
  var i=0;
  var url_side = '/api/my/search_list';
  var queryArr = jQuery('#' + id + ' input');
  if(queryArr && queryArr.length) {
    var len=queryArr.length;
  } else {
    var len=0;
  }
  var query = {};
  if(len) {
    for (i=0, len=queryArr.length; i<len; i++){
      if(page && queryArr[i].name == 'page'){
        jQuery(queryArr[i]).attr('value', page);
      }
      if(mode == 'expand' && queryArr[i].name == pname) {
        jQuery(queryArr[i]).attr('value', '');
      } else if(mode == 'narrow' && queryArr[i].name == pname) {
        jQuery(queryArr[i]).attr('value', pvalue);
      }
      query[queryArr[i].name] = queryArr[i].value;
    } // end for
    if(!page){
      query['page'] = 1;
    } else {
      query['page'] = page;
    }
  if(!onload) {boox.util.submitForm(id);}
    // Side
    jQuery.ajax({
      url: url_side,
      type: 'post',
      data: query,
      dataType: 'json',
      success: function(d, dataType){
          if (boox.ajax.status(d)){
            boox.ajax.render.refinedSearchSide(d);
          }
      },
      error: function(){}
    });
  } // end if len
};
boox.ajax.render = {};
boox.ajax.render.refinedSearchSide = function(d){
  var facetArr = jQuery('#booxAjaxQuery input');
  var facet = {};
  var f=0;
  var flen = facetArr.length;
  for(f=0; f<flen; f++){
    if( jQuery(facetArr[f]).attr('value') ) {
      facet[ jQuery(facetArr[f]).attr('name') ] = jQuery(facetArr[f]).attr('value');
    }
  }
  jQuery('#booxAjaxRenderSide').empty();
  var cat_str = '';
  var x=0;
  if(d.search && d.search.length) {
    var xlen = d.search.length;
  } else {
    var xlen = 0;
  }
  var y=0;
  var ylen;
  for(x=0; x<xlen; x++){
    if(d.search[x].data) {
      if (d.search[x].title){
        var str = '<div class="boxSideNr"><div class="headline"><div class="titleEx clearfix"><h2 class="txt"><em>' + d.search[x].title + '</em></h2><a class="btX" href="" onclick="boox.effect.sideToggle(this); return false;"><span>X</span></a></div></div>';
      } else {
        var str = '<div class="boxSideNr"><div class="headline"><div class="titleEx clearfix"><h2 class="txt"><em>名称未設定</em></h2><a class="btX" href="" onclick="boox.effect.sideToggle(this); return false;"><span>X</span></a></div></div>';
      }
      if(d.search[x].key == 'category') {
        str += '<div class="boxInner"><div class="listTree"><ul id="genreTree0">';
      } else {
        str += '<div class="boxInner"><div class="listNr"><ul>';
      }
      if(facet[ d.search[x].key ] && facet[ d.search[x].key ] != '') {
        str += '<li><a href="" onclick="boox.ajax.refinedSearchSide(\'booxAjaxQuery\', \'' + d.search[x].key + '\', \'\', \'expand\', 1); return false;"><span>全て</span></a></li>';
      }
      if(d.search[x].key != 'category') {
        if(d.search[x].data.length) {
          for(y=0, ylen=d.search[x].data.length; y<ylen; y++){
            if(d.search[x].data[y].count == 0){continue;}
            if(d.search[x].key == 'author' && y > 20){continue;}
            str += '<li>';
            if(!facet[ d.search[x].key ] && facet[ d.search[x].key ] != d.search[x].data[y].query) {
              str += '<a href="javascript:void(0);" onclick="boox.ajax.refinedSearchSide(\'booxAjaxQuery\', \'' + d.search[x].key + '\', \'' + d.search[x].data[y].query + '\', \'narrow\', 1); return false;">';
            }
            if(d.search[x].key == 'stamp') {
              str += '<span>' + boox.util.stamp( d.search[x].data[y].name ) + '</span>';
            } else {
              str += '<span>' + d.search[x].data[y].name + '</span>';
            }
            if(!facet[ d.search[x].key ] && facet[ d.search[x].key ] != d.search[x].data[y].query) {
              str += '</a>';
            }
            str += '</li>';
          } // end for y
        } else {
          str += '<li><span>絞り込みがありません。</span></li>';
        }
      } else {
        if(d.search[x].data instanceof Array) {
          str += '<li><span>絞り込みがありません。</span></li>';
        } else {
          str += openList(d.search[x].data, d.search[x].key);
        }
      }
      str += '</ul></div></div></div>';
      jQuery('#booxAjaxRenderSide').append(str);
      boox.render.openTree(facet['category']);
      
    }
  } // end for x
  // 再帰処理
  function openList(data, key){
    var m = data.children;
    var len = m.length;
    var i = 0;
    var clen;
    if(len && m[0].total){
      for(i=0; i<len; i++){
        clen = m[i].children.length;
        if(m[i].total == 0) {continue;}
        if(clen){var bt = '<a href="" class="xhref" onclick="boox.effect.slideTree(this); return false;">+</a>';} else {var bt = '<span class="xhref">-</span>';}
        cat_str += '<li class="genre' + m[i].genre_id + '">' + bt + '<a href="" onclick="boox.ajax.refinedSearchSide(\'booxAjaxQuery\', \'' + key + '\', \'' + m[i].genre_id + '\', \'narrow\', 1); return false;">' + m[i].name + '</a>';
        if(clen){
          cat_str += '<ul class="child tree' + m[i].genre_id + '" style="display:none;">';
          openList(m[i], key);
          cat_str += '</ul>';
        } // end if
        cat_str += '</li>';
      }
    } else {
      cat_str += '<li><span>絞り込みがありません。</span></li>';
    } // end if
    return cat_str;
  } // end func
};
boox.ajax.myreview = function(pname, pvalue, mode, page) {
  boox.ajax.refinedSearchSide('#booxAjaxQuery', pname, pvalue, mode, page, true);
};
boox.ajax.myfavUser = function(pname, pvalue, mode, page){
  boox.ajax.refinedSearchSide('#booxAjaxQuery', pname, pvalue, mode, page, true);
};
boox.ajax.favnew = function(pname, pvalue, mode, page) {
  boox.ajax.render.refinedSearchSide('#fromFavNewQuery', pname, pvalue, mode, page);
};
boox.ajax.userbook = function(){
  boox.ajax.refinedSearchSide('#booxAjaxQuery', '', '', '', '', true);
};


boox.solr = {
  conf : function(rows, limit, page_max){
            if(!rows){rows = '20';}
            if(!page_max){page_max = '20';}
            if(!limit){limit = '20';}
            var data = {
              'url' : '/solr/select/',
              'rows': rows,
              'limit': limit,
              'sort': 'score desc',
              'page_max' : page_max
            };
            return data;
        }
};
boox.mybook = {};
boox.mybook.doSearch = function(a){
  var form = '<form action="post" id="formMybooklist">';
  form += '<input type="hidden" name="shelf_id" value="" />';
  form += '<input type="hidden" name="status_id" value="" />';
  form += '<input type="hidden" name="open_flg" value="" />';
  form += '<input type="hidden" name="author" value="" />';
  form += '<input type="hidden" name="stamp" value="" />';
  form += '<input type="hidden" name="category" value="" />';
  form += '<input type="hidden" name="score" value="" />';
  form += '<input type="hidden" name="keyword" value="" />';
  form += '<input type="hidden" name="sort" value="" />';
  form += '<input type="hidden" name="type" value="" />';
  form += '<input type="hidden" name="page" value="1" />';
  form += '<input type="hidden" name="limit" value="" />';
  form += '</form>';
  jQuery('#container').after(form);
  var a_href = boox.util.paramsParser( jQuery(a).attr('href') );
  var query = jQuery('#formMybooklist input');
  var i=0;
  var len = query.length;
  for(i=0; i<len; i++){
    var name = jQuery(query[i]).attr('name');
    if(a_href[name] != '') {
      jQuery(query[i]).attr('value', a_href[name]);
    }
  }
  boox.util.submitForm('formMybooklist', 'post', '/my/book_list');
};
boox.solr.query = function(page, sort, rows, limit, q, fq, author, publisher, stamp, genre){
  if(!q){
    q = '*:*';
  } else if(!q.match(/^\"?\*:\*\"?(\s|$)/)) { // `"*:*" NOT ...' 対策
    q = q.replace(/\+|\-|&&|\|\||!|\(|\)|\{|\}|\[|\]|\^|\"|~|\*|\?|:|\\/g, '\\$&');
  }

  if(rows == 0){} else if(!rows || rows == ''){rows = boox.solr.conf().rows;}
  if(limit != '0' && !limit){limit = boox.solr.conf().limit;}
  if(!sort || sort.length == 0){sort = 'publication_ym desc, score desc';}
  if(!page){page = '0';} else {page = page -1;}
  var data = {
    'q'              : q,
    'version'        : '2.2',
    'start'          : page * rows,
    'rows'           : rows,
    'indent'         : 'on',
    'fl'             : '*,score',
    'facet'          : 'true',
    'facet.sort'     : 'true',
    'facet.limit'    : limit,
    'facet.field[]'    : ['stamp_first', 'genre_id', 'author01_copy', 'author02_copy', 'author03_copy', 'publisher_name_copy'],
    'facet.mincount' : '1',
    'wt'             : 'json',
    'sort'           : sort
  };
  data.fq = '+price:[3 TO *]';
  if(fq || author || publisher || stamp || genre){
    if(fq){data.fq += fq;}
    if(author){data.fq += ' +all_author:"' + author + '"';}
    if(publisher){data.fq += ' +publisher_name_copy:"' + publisher + '"';}
    if(stamp){data.fq += ' +stamp_first:' + stamp;} /* all_stamp or stamp_first second third */
    if(genre){data.fq += ' +all_genre_id:"' + genre + '"';}
  }
  return data;
};
boox.doSearch = function(form_id, params, save, page){
  if(!page) page = 1;
  var url = '';
  jQuery('#' + form_id + '-page').attr('value', page);
  var self = jQuery('#' + form_id + '-self').attr('value');
  var mode = jQuery('#' + form_id + '-mode').attr('value');
  var keyword = jQuery('#' + form_id + '-value').attr('value');
  var facets = jQuery('#' + form_id + ' .facet');
  for(var i=0,len=facets.length; i<len; i++) {
    if(!save) jQuery(facets[i]).attr('value', '');
    if( params && params[ jQuery(facets[i]).attr('name') ] ) {
        var val = params[ jQuery(facets[i]).attr('name') ];
        jQuery(facets[i]).attr('value', val);
    }
  }
  if (mode == 'total' && self != 'total'){url = '/book_search/total_srch';}
  else if (mode == 'title' && self != 'title'){url = '/book_search/title_srch';}
  else if (mode == 'author' && self != 'author'){url = '/book_search/author_srch';}
  else if (mode == 'item' && self != 'item'){url = '/book_search/item_srch';}
  else if (mode == 'review'){url = '/book_search/review_srch';}
  else {url = '/book_search/total_srch';}
  boox.util.submitForm(form_id, 'post', url);
};

boox.doSearch.onload = function(mode, keyword, page){
/*
    var mode = jQuery('#booxSearch-mode').attr('value');
    var genre_id = '';
    if(mode == 'detail'){
        genre_id = jQuery('#booxSearchDetailform-genre').attr('value');
        jQuery('#booxSearchDetailform').show();
        jQuery('#booxSearchform').hide();
    } else {
        genre_id = jQuery('#booxSearchform-genre').attr('value');
        jQuery('#booxSearchDetailform').hide();
        jQuery('#booxSearchform').show();
    }
*/
};
boox.doSearch.detail = function(form_id, params, save, page){
    if(!page) page = 1;
    $('#' + form_id + '-page').attr('value', page);
    var facets = jQuery('#' + form_id + ' .facet');
    for(var i=0,len=facets.length; i<len; i++){
        if(!save) jQuery(facets[i]).attr('value', '');
        if( params && params[jQuery(facets[i]).attr('name')] ) {
            var val = params[ jQuery(facets[i]).attr('name') ];
            jQuery(facets[i]).attr('value', val);
        }
    }
   boox.util.submitForm(form_id, 'post', '/book_search/total_srch');
};
boox.doSearch.multi = function(a){
  var a_href = boox.util.paramsParser( jQuery(a).attr('href') );
  var query = jQuery(a).attr('rel');
  var input = jQuery('#glbFooterSearch input');
  var url = '/book_search/total_srch';
  var i=0;
  var len = input.length;
  if(a_href['mode'] == 'author'){
    url = '/book_search/author_srch';
  } else if(a_href['mode'] == 'multi') {
  }
  //keyword というパラメータは無くなりました
  if(a_href['keyword']) {a_href['q'] = a_href['keyword']; delete a_href['keyword']}
  // Reset
  for(i=0; i<len; i++){
    var name = jQuery(input[i]).attr('name');
    if( !a_href[name] ) {
      jQuery(input[i]).attr('value', '');
    } else {
      if(name == 'keyword' || name == 'q') { a_href[name] = decodeURIComponent( a_href[name] );}
      jQuery(input[i]).attr('value', a_href[name] );
    }
  } // end for
  boox.util.submitForm('glbFooterSearch', 'post', url);
};
boox.doSearch.fq = function(type, keyword, save){
    if(!save) save = false;
    var mode = jQuery('#booxSearch-mode').attr('value');
    var params = {};
    params[type] = keyword;
    if(!mode) {mode = 'total';}
    if(mode != 'detail') {
        var target = '#booxSearchform input[name=' + type + ']';
        jQuery(target).attr('value', keyword);
        boox.doSearch('booxSearchform', params, save);
    } else {
        var target = '#booxSearchDetailform input[name=' + type + ']';
        jQuery(target).attr('value', keyword);
        boox.doSearch.detail('booxSearchDetailform', params, save);
    }
};
boox.doSearch.shelf = function(a, form_id){
  var a_href = boox.util.paramsParser( jQuery(a).attr('href') );
  var params = jQuery('#' + form_id + ' input');
  var i = 0;
  var len = params.length;
  for(i=0; i<len; i++){
    if( a_href[params[i].name] ){
      params[i].value = decodeURIComponent( a_href[params[i].name] );
    }
  }
  boox.util.submitForm(form_id, 'post', '/search/shelf');
};
boox.search = function(flag){
  var mode = jQuery('#booxSearch-mode').attr('value');
  var jq_params = jQuery('#booxSearch-params input');
  var params = {};
  var fq;
  var i=0;
  var ilen=jq_params.length;
  for(i=0; i<ilen; i++){
    var val = jQuery(jq_params[i]).attr('value');
    var name = jQuery(jq_params[i]).attr('name');
    params[name] = val;
  } // end for
  if(!params['sort']){params['sort'] = 'publication_ym desc, score desc';}
  if(!params['page']){ params['page'] = 1; }
  params['q'] = params['q'].replace(/　/g, ' ');
  if(!flag || flag == 'main') {
    var query_main = boox.solr.query(params['page'], params['sort'], boox.solr.conf().rows, 0, params['q'], params['fq'], params['author01_copy'], params['publisher_name_copy'], params['all_stamp'], params['all_genre_id']);
    switch (params['mode']){
        case 'title':
            var url = '/book_search/title_srch';
            break;
        case 'author':
            var url = '/book_search/author_srch';
            break;
        case 'item':
            var url = '/book_search/item_srch';
            break;
        case 'review':
            var url = '/book_search/review_srch';
            break;
        default:
            var url = '/book_search/total_srch';
            break;
    }
    //boox.util.submitForm('booxSearch-params', 'post', url);
/*
    // Main
    jQuery.ajax({
      url: boox.solr.conf().url,
      type: 'post',
      data: query_main,
      dataType: 'json',
      success: function(d, dtype){
        boox.search.render(d, mode);
        boox.search.pager('', d.response.numFound, params['page'], 1);
      },
      error: boox.ajax.error
    });
  } // end if flag
  if(!flag || flag == 'side') {
    var query_facet = boox.solr.query(params['page'], params['sort'], 0, '1000', params['q'], params['fq'], params['author01_copy'], params['publisher_name_copy'], params['all_stamp'], params['all_genre_id']);
    // Facet
    jQuery.ajax({
      url: boox.solr.conf().url,
      type: 'post',
      data: query_facet,
      dataType: 'json',
      success: function(d, dtype){
        boox.search.render.side(d);
      }
    });
*/
  } // end if flag
};

boox.search.sort = function(sel, form_id){
  var mode = jQuery('#booxSearch-self').attr('value');
  if(mode == 'detail') { var form_id = 'booxSearchDetailform';}
  else { var form_id = 'booxSearchform'; }
  var params = {};
  params['order'] = sel.value;
  if(mode == 'detail') {
    boox.doSearch.detail(form_id, params, true);
  } else {
    boox.doSearch(form_id, params, true);
  }
};
boox.search.pager = function(a, total, page, onload){
    var mode = jQuery('#booxSearch-self').attr('value');
    if(mode == 'detail') { var form_id = 'booxSearchDetailform';}
    else { var form_id = 'booxSearchform'; }
    jQuery('#' + form_id + '-page').attr('value', page);
    var params = {'page':page};
    if(mode == 'detail') {
        boox.doSearch.detail(form_id, '', true, page);
    } else {
        boox.doSearch(form_id, '', true, page);
    }
};
// まとめて登録
boox.search.addallbooks = function(a, flg){
  boox.unit.partsClearAll();
  var href = boox.util.paramsParser( jQuery(a).attr('href') );
  var flg_b = false;
  var check_ids = jQuery('input.check_book_id');
  var clen = check_ids.length;
  var c = 0;
  for(c=0; c<clen; c++){
    if( check_ids[c].checked ){
      flg_b = true;
      break;
    }
  }
  if(flg && flg_b) {
    var url = '/api/shelf_book/batch_add';
    var books = jQuery('input.check_book_id');
    var data = {'status':href['status']};
    var ids = [];
    var i=0;
    var len=books.length;
    for(i=0; i<len; i++){
      if(books[i].checked) {
        ids.push( jQuery(books[i]).attr('value') );
      }
    }
    data['book_id[]'] = ids;
    jQuery.ajax({
      url: url,
      type: 'post',
      data: data,
      dataType: 'json',
      success: function(d, dtype){
        boox.search.addallbooks.success(d, ids);
      },
      error: function(){}
    });
  } else {
    
  }
};
boox.search.addallbooks.mousehover = function(a, flg){
  boox.unit.partsClearAll();
  var ptop = Number(jQuery(a).offset().top);
  var pleft = Number(jQuery(a).offset().left);
  var div = document.createElement('div');
  var ele = '<div><img src="/static/img/space.gif" width="120" height="24" /></div><div class="unitPartsPopAddshelfAll"><p><a href="#?status=1" class="wish" onclick="boox.search.addallbooks(this, ' + flg + '); return false;"><span>読みたい</span></a><a href="#?status=2" class="now" onclick="boox.search.addallbooks(this, ' + flg + '); return false;"><span>積ん読（購入未読）</span></a><a href="#?status=3" class="done" onclick="boox.search.addallbooks(this, ' + flg + '); return false;"><span>読んだ</span></a><span class="cap">クリックすると本棚に入り、あなたの本屋さんで公開！</span></p></div>';
  jQuery('body').append(div);
  jQuery(div).attr({'id':'js-popAddshelf', 'class':'clearParts'}).append(ele).css({'position':'absolute', 'top':ptop, 'left':pleft});
  jQuery(div).hover(
    function(){},
    function(){jQuery(div).remove();}
  );
}
boox.search.addallbooks.success = function(d, ids){
  var rdata = d.data.registed_books;
  var rlen = rdata.length;
  var edata = d.data.exists_books;
  var ilen = ids.length;
  var rlen = rdata.length;
  var r = 0;
  jQuery('.searchCheckAllbooks > div.check > input.check_book_all').attr('checked', false);
  for(r=0; r<ilen; r++){
    jQuery('#unitBk' + ids[r] + ' > div > input.check_book_id').attr('checked', false);
    if(rlen) {
      var bt = '<div class="unitBtBlank" id="btAddshelf' + ids[r] + '"><span>本棚に登録済み</span></div>';
      jQuery('#unitBk' + rdata[r].book_id + ' > dl > dd.productData > .unitAction > .unitBt').before(bt).remove(); }
  }
};
boox.search.addallbooks.checked = function(obj){
  var books = jQuery('input.check_book_id');
  var i = 0;
  var len = books.length;
  for(i=0; i<len; i++){
    if(obj.checked) {
      books[i].checked = true;
    } else {
      books[i].checked = false;
    }
  }
};
boox.search.addallbooks.checkClear = function(){
  var checkall = jQuery('input.check_book_all');
  var clen = checkall.length;
  var c = 0;
  for(c=0; c<clen; c++){
    checkall[c].checked = false;
  }
};
boox.search.render = function(d, mode){
  jQuery('#booxSearchResult').empty();
  data = d.response.docs;
  facet = d.facet_counts.facet_fields;
  if (d.response.numFound) {
    jQuery('#booxAjaxListTotal').empty().append('<em>' + d.response.numFound + '</em><span>冊</span>');
    for(i=0, ilen=data.length; i<ilen; i++){
      var uDiv = document.createElement('div');
      jQuery('#booxSearchResult').append(uDiv);
      if(mode == 'item') {
        boox.unit.item(uDiv, data[i]);
      } else {
        boox.unit.book(uDiv, data[i]);
      }

    }
  } else {
    jQuery('#booxAjaxListTotal > em').empty().append('0');
    jQuery('#booxSearchResult').append('該当する本がありません。');
  } // if
  boox.search.render.isExistBooks();
  boox.search.addallbooks.checkClear();
};
boox.search.render.side = function(d, mode){
  jQuery('#booxSearchResultFacet').empty();
  var genre_id = jQuery('#booxSearch-fq-genre').attr('value');
  var facetS = d.facet_counts.facet_fields.stamp_first;
  var facetG = d.facet_counts.facet_fields.genre_id;
  var facetA = d.facet_counts.facet_fields.author01_copy;
  var facetA2 = d.facet_counts.facet_fields.author02_copy;
  var facetA3 = d.facet_counts.facet_fields.author03_copy;
  var facetP = d.facet_counts.facet_fields.publisher_name_copy;
  var flgS = jQuery('#booxSearch-fq-stamp').attr('value');
  var flgG = jQuery('#booxSearch-fq-genre').attr('value');
  var facetP = d.facet_counts.facet_fields.publisher_name_copy;
  var flgA = jQuery('#booxSearch-fq-author').attr('value');
  var flgP = jQuery('#booxSearch-fq-publisher').attr('value');
  var cont = '';
  var cat_str = '';
  if(facetS){
    var contS = buildFacet('stamp', facetS);
    jQuery('#booxSearchResultFacet').append(contS);
  }
  if(facetG){
    getGenreTree(facetG);
  }
  function buildFacet(type, data){
    var i = 0;
    if(data){var len = data.length;} else {var len = 0;}
    if(type == 'publisher'){var fq_title = '出版社から選ぶ';}
    else if(type == 'author'){var fq_title = '著者から選ぶ';}
    else if(type == 'genre'){var fq_title = 'ジャンルから選ぶ';}
    else if(type == 'stamp'){var fq_title = 'スタンプから選ぶ';}
    var f = '<div class="boxSideNr"><div class="headline"><div class="titleEx clearfix"><h2 class="txt"><em>' + fq_title + '</em></h2><a class="btX" href="" onclick="boox.effect.sideToggle(this); return false;"><span>X</span></a></div></div><div class="boxInner"><div class="listNr"><ul>';
    if( (type == 'stamp' && flgS != '') || (type == 'author' && flgA != '') || (type == 'publisher' && flgP != '') ) {
      f += '<li><a href="javascript:void(0);" onclick="boox.doSearch.fq(\'' + type + '\', \'\'); return false;">全て</a></li>';
    }
    if(len > 2){
      for(i=0; i<len; i++){
        if( (type == 'author' && i >= 40) || (type == 'publisher' && i >= 40) ){
          break;
        }
        var facet_name = data[i];
        var facet_count = data[++i];
        var facet_str = facet_name + '(' + facet_count + ')';
        var facet_param = [type, facet_name];
//        f += buildSearcher(type, facet_name, facet_count);
        f += boox.search.render.side.buildsearcher('boox.doSearch.fq', facet_param, type, facet_name, facet_count);
      }
    } else {
      if(len == 2 && type == 'stamp') {
        f += '<li>' + boox.util.stamp(data[0]) + '</li>';
      } else if(len == 2 && type == 'author') {
        f += '<li>' + data[0] + '</li>';
      } else if(len == 2 && type == 'publisher') {
        f += '<li>' + data[0] + '</li>';
      } else if(len == 2 && type == 'genre') {
        f += '<li><a href="javascript:void(0);" onclick="boox.doSearch.fq(\'' + type + '\', \'\'); return false;">' + data[0] + '</a></li>';
      } else {
        f += '<li>絞り込みがありません</li>';
      }
    }
    f += '</ul></div></div></div>';
    return f;
  } // end func
  function getGenreTree(data){
    var i=0;
    var genre_arr = [];
    if(data){var len = data.length;} else {var len=0;}
    if(len>=2){
      for(i=0; i<len; i++){
        genre_arr.push(data[i]);
        ++i;
      }
    }
    cont += '<div class="boxSideNr"><div class="headline"><div class="titleEx clearfix"><h2 class="txt"><em>ジャンルで絞り込む</em></h2><a class="btX" href="" onclick="boox.effect.sideToggle(this); return false;"><span>X</span></a></div></div>';
    cont += '<div class="boxInner"><div class="listTree"><ul id="genreTree0">';
    if(flgG) {
      cont += '<li><a href="" onclick="boox.doSearch.fq(\'all_genre_id\', \'\'); return false;"><span>全て</span></a></li>';
    }
    if( !genre_arr.length || (genre_arr.length == 1 && genre_arr[0] >= 90000 && genre_arr[0] < 100000) ){
      cont += '<li>絞り込みがありません</li>';
    }
    if (genre_arr && genre_arr.length) {
      jQuery.ajax({
        url: '/api/genre/get',
        type: 'post',
        data: {'genre_ids[]':genre_arr},
        dataType: 'json',
        success: function(d, dtype){
          cont += showGenreTree(d.data);
          cont += '</ul></div></div></div>';
          jQuery('#booxSearchResultFacet').append(cont);
          boox.render.openTree(flgG);
          // 右カラムの順番の為
          if(facetA){
            var contA = boox.search.render.side.authors('author', facetA, facetA2, facetA3);
//            var contA = buildFacet('author', facetA);
            jQuery('#booxSearchResultFacet').append(contA);
          }
          if(facetP){
            contP = buildFacet('publisher', facetP);
            jQuery('#booxSearchResultFacet').append(contP);
          }
        },
        error: function(){}
      });
    } else {
      cont += '</ul></div></div></div>';
      jQuery('#booxSearchResultFacet').append(cont);
      // 右カラムの順番の為
      if(facetA){
        var contA = buildFacet('author', facetA);
        jQuery('#booxSearchResultFacet').append(contA);
      }
      if(facetP){
        contP = buildFacet('publisher', facetP);
        jQuery('#booxSearchResultFacet').append(contP);
      }
    }
  } // end func
  // 再帰処理
  function showGenreTree(data){
    var m = data.children;
    var len = m.length;
    var i = 0;
    var clen;
    if(len){
      for(i=0; i<len; i++){
        clen = m[i].children.length;
        if( (m[i].genre_id >= 90000) ) {continue;}
        if(clen){var bt = '<a href="" class="xhref" onclick="boox.effect.slideTree(this); return false;">+</a>';} else {var bt = '<span class="xhref">-</span>';}
        cat_str += '<li class="genre' + m[i].genre_id + '">' + bt + '<a href="' + m[i].genre_id + '" onclick="boox.doSearch.fq(\'all_genre_id\', \'' + m[i].genre_id + '\'); return false;">' + m[i].name + '</a>';
        if(clen){
          cat_str += '<ul class="child tree' + m[i].genre_id + '" style="display:none;">';
          showGenreTree(m[i]);
          cat_str += '</ul>';
        } // end if
        cat_str += '</li>';
      }
    } // end if
    return cat_str;
  } // end func showGenreTree
};
boox.search.render.side.authors = function(type, auth01, auth02, auth03){
  var flgA = jQuery('#booxSearch-fq-author').attr('value');
  var obj = {};
  var r = '<div class="boxSideNr"><div class="headline"><div class="titleEx clearfix"><h2 class="txt"><em>著者から選ぶ</em></h2><a class="btX" href="" onclick="boox.effect.sideToggle(this); return false;"><span>X</span></a></div></div><div class="boxInner"><div class="listNr"><ul>';
  if(auth01) {
    setAuthorObject(auth01);
  }
  if(auth02) {
    setAuthorObject(auth02);
  }
  if(auth03) {
    setAuthorObject(auth03);
  }
  if( flgA != '' ) {
      r += '<li><a href="javascript:void(0);" onclick="boox.doSearch.fq(\'' + type + '\', \'\'); return false;">全て</a></li>';
  }
  if(obj){
    var loopcount = 0;
    for(key in obj) {
      var params = [];
      params = [type, key];
      if(loopcount < 21) {
        r += boox.search.render.side.buildsearcher('boox.doSearch.fq', params, type, key, obj[key]);
      }
      if(loopcount > 21) {break;}
      loopcount = loopcount + 1;
    } // end for
  } else {
    r += '<li>絞り込みがありません</li>';
  }
  r += '</ul></div></div></div>';
  return r;
  function setAuthorObject(arr) {
    if(arr) {var len = arr.length;} else {len = 0;}
    if(len >= 2) {
      for(var i=0; i<len; i++) {
        var facet_name = arr[i];
        var facet_count = arr[++i];
        if(!obj[facet_name]) {
          obj[facet_name] = facet_count;
        } else {
          obj[facet_name] = Number(obj[facet_name]) + Number(facet_count);
        }
      } // end for
    } // endif
  } // end func
};
boox.search.render.side.buildsearcher = function(func, params, type, keyword, count){
  var params_str = '';
  if(type == 'stamp') {
    var name = boox.util.stamp(keyword);
  } else {
    var name = keyword;
  }
  if(params){
    var len = params.length;
    for(var i=0; i<len; i++) {
      params_str += '\'' + params[i] + '\'';
      if(i < (Number(len) - 1) ) {
        params_str += ', ';
      }
    }
  }
  var r = '<li><a href="javascript:void(0);" onclick="' + func + '(' + params_str + '); return false;">' + name + '（' + count + '）</a></li>';
  return r;
};
boox.search.render.isExistBooks = function(){
  var mode = jQuery('#booxSaerchform-self').attr('value');
  var units = jQuery('#booxSearchResult .unit');
  var i=0;
  var len=units.length;
  var rData = {'book_id[]':[]};
  if(len){
    for(i=0; i<len; i++){
      var unit_id = jQuery(units[i]).attr('id');
      unit_id = unit_id.replace('unitBk', '');
      rData['book_id[]'].push(unit_id);
    } // end for
    jQuery.ajax({
      url: '/api/shelf_book/is_exist_books',
      type: 'post',
      data: rData,
      dataType: 'json',
      success: function(d, dtype){
        var j=0;
        if(d.data.exist_books){var jlen=d.data.exist_books.length;}
        else {var jlen=0;}
        // 本棚登録
        if(jlen){
          for(j=0; j<jlen; j++){
            var my_rate = '#unitBk' + d.data.exist_books[j].book_id + ' > dl > .productData > .unitAction > .rateStar > .rating';
            var my_bt_cont = '<div class="unitBtBlank" id="btAddshelf' + d.data.exist_books[j].book_id + '"><span>本棚に登録済み</span></div>';
            var my_bt = '#unitBk' + d.data.exist_books[j].book_id + ' > dl > .productData > .unitAction > .unitBt';
            jQuery(my_rate).removeClass().addClass('rating rate' + d.data.exist_books[j].score);
            jQuery(my_bt).before(my_bt_cont).remove();
          }
        } // if jlen
        var x = 0;
        // 在庫状況
        if(d.data.book_stocks){var xlen = d.data.book_stocks.length}
        else {var xlen = 0;}
        if(xlen) {
          for(x=0; x<xlen; x++) {
            if(d.data.book_stocks[x].is_adult) { var is_adult = 1; } else { var is_adult = 0; }
            if(d.data.book_stocks[x].add_point) { 
              var unit_point = '#unitBk' + d.data.book_stocks[x].book_id + ' span.point';
              var unit_point_str = '（' + d.data.book_stocks[x].add_point + 'pt）';
              jQuery(unit_point).empty().append(unit_point_str);
            }
            if(d.data.book_stocks[x].price) {
              var unit_price = '#unitBk' + d.data.book_stocks[x].book_id + ' li.price em';
              var unit_price_str = '￥' + boox.util.addFigure( d.data.book_stocks[x].price );
              jQuery(unit_price).empty().append(unit_price_str);
            }
            if( d.data.book_stocks[x].canBuy == 1 ) {
              var stockCode = boox.util.stockCode( d.data.book_stocks[x].stockCode );
              var divCart = '<div class="unitCart" id="unitCart' + d.data.book_stocks[x].book_id + '"><div class="unitCartOuter"><div class="unitCartInner"><a href="/cart/add/' + d.data.book_stocks[x].book_id + '?book_id=' + d.data.book_stocks[x].book_id + '" class="btCart" onclick="boox.unit.popup.checkCart(this, \'' + is_adult + '\'); return false;"><span>カートに入れる</span></a><p class="shipping">' + stockCode + '</p></div></div></div>';
              jQuery('#btAddshelf' + d.data.book_stocks[x].book_id).after(divCart);
            }
          }
        } // if xlen
      },
      error: boox.ajax.error
    })
  } // end if len
};

boox.render = {};
boox.render.openTree = function(id){
  var genre_id = id;
  if(genre_id != '') {
    var self_li = jQuery('#genreTree0 li.genre' + genre_id);
    var self_li_xhref = jQuery('#genreTree0 li.genre' + genre_id + ' a.xhref');
    var child_ul = jQuery('#genreTree0 li.genre' + genre_id + ' ul.tree' + genre_id);
    if(child_ul){
      jQuery(child_ul).css({'display':'block'});
    }
    // 自身を-に
    if( jQuery(self_li_xhref[0]).attr('class') == 'xhref' ){
      jQuery(self_li_xhref[0]).empty().append('-');
    }
    openPar(self_li);
  }
  function openPar(obj){
    if(obj){
      var par = jQuery(obj).parent();
      var par_par = jQuery(par).parent();
      var par_par_child = jQuery(par_par).children('a.xhref');
      if( jQuery(par_par_child).attr('class') == 'xhref' ) {
        jQuery(par_par_child).empty().append('-');
      }
      if( par && jQuery(par).css('display') == 'none' ){
        jQuery(par).css({'display':'block'});
        par = jQuery(par).parent();
        var par_class = jQuery(par).attr('class');
        if( par_class.match(/^genre/) ){
          openPar(par);
        }
      }
    }
  } // end func
};

boox.pubpage = {};
boox.pubpage.search = function(a){
  jQuery('#formSearchUserbooklist').empty().remove();
  var ahref = boox.util.paramsParser( jQuery(a).attr('href') );
  var form_action = '/user/book_list/' + ahref['uid'];
  if(!ahref['uid']) {
    return false;
  } else {
    var names = [];
    names['shelf_id'] = '';
    names['section_id'] = '';
    names['status_id'] = '';
    names['open_flg'] = '';
    names['author'] = '';
    names['stamp'] = '';
    names['category'] = '';
    names['score'] = '';
    names['sort'] = 'desc';
    names['type'] = 'created';
    names['page'] = '1';
    names['limit'] = '';
    var form = '<form id="formSearchUserbooklist">';
    form += '</form>';
    jQuery('#container').after(form);
    jQuery('#formSearchUserbooklist').empty();
    var form_parts = '';
    for(var i in names){
      form_parts += '<input type="hidden" name="' + i + '" class="' + i + '" ';
      if(!ahref[i]) {
        form_parts += 'value="' + names[i] + '" />';
      } else {
        form_parts += 'value="' + ahref[i] + '" />';
      }
    } // end for
    jQuery('#formSearchUserbooklist').empty().append(form_parts);
    boox.util.submitForm('formSearchUserbooklist', 'post', form_action);
  }
};
boox.pubpage.search2 = function(a){
  jQuery('#formSearchUserbooklist').empty().remove();
  var ahref = boox.util.paramsParser( jQuery(a).attr('href') );
  var form_action = '/user/book_list/' + ahref['uid'];
  if(!ahref['uid']) {
    return false;
  } else {
    var names = [];
    names['shelf_id'] = '';
    names['section_id'] = '';
    names['status_id'] = '';
    names['open_flg'] = '';
    names['author'] = '';
    names['stamp'] = '';
    names['category'] = '';
    names['score'] = '';
    names['sort'] = 'desc';
    names['type'] = 'created';
    names['page'] = '1';
    names['limit'] = '';
    var form = '<form id="formSearchUserbooklist">';
    for(var i in names){
      form += '<input type="text" name="' + i + '" class="' + i + '" ';
      if(!ahref[i]) {
        form += 'value="' + names[i] + '" />';
      } else {
        form += 'value="' + ahref[i] + '" />';
      }
    } // end for
    form += '</form>';
    jQuery('#container').after(form);
    if(jQuery('#formSearchUserbooklist input.page').attr('value')) {
      alert('go');
//      boox.util.submitForm('formSearchUserbooklist', 'post', form_action);
    }
  }
};
boox.pubpage.sideAjax = function(){
  var input = jQuery('#booxAjaxQuery input');
  var data = {};
  var i = 0;
  var len = input.length;
  for(i=0; i<len; i++){
    var name = jQuery(input[i]).attr('name');
    data[name] = jQuery(input[i]).attr('value');
  }
  jQuery.ajax({
    url: '/api/search_list/book',
    type: 'post',
    data: data,
    dataType: 'json',
    success: function(d, dtype){
      boox.pubpage.refindsearch(d);
    },
    error: function(){}
  });
};
boox.pubpage.getQuery = function(pname, pvalue, page){
  var form_action = jQuery('#booxAjaxQuery').attr('action');
  var input = jQuery('#booxAjaxQuery input');
  var i = 0;
  var len = input.length;
  for(i=0; i<len; i++){
    if(pname && pname == jQuery(input[i]).attr('name')) {
      jQuery(input[i]).attr('value', pvalue);
    }
    if(page && jQuery(input[i]).attr('name') == 'page'){
      jQuery(input[i]).attr('value', page);
    }
  }
  boox.util.submitForm('booxAjaxQuery', 'post', form_action);
};
boox.pubpage.refindsearch = function(d){
  jQuery('#booxAjaxRenderSide').empty();
  var now = {};
  now['status_id'] = jQuery('#booxAjaxQuery input.status_id').attr('value');
  now['section_id'] = jQuery('#booxAjaxQuery input.section_id').attr('value');
  now['author'] = jQuery('#booxAjaxQuery input.author').attr('value');
  now['stamp'] = jQuery('#booxAjaxQuery input.stamp').attr('value');
  now['category'] = jQuery('#booxAjaxQuery input.category').attr('value');
  var cat_str = '';
  var x=0;
  if(d.search && d.search.length) {
    var xlen = d.search.length;
  } else {
    var xlen = 0;
  }
  var y=0;
  var ylen;
  for(x=0; x<xlen; x++){
    if(d.search[x].data) {
      if(d.search[x].key == 'open_flg' || d.search[x].key == 'score') {continue;}
      var loop_key = d.search[x].key;
      if(!now[loop_key]){
        var open_win = false;
      } else {
        var open_win = true;
      }
/*
      if(open_win){
        var open_bt = 'btX';
        var open_style = ' style="display:block;"';
      } else {
        var open_bt = 'btXO';
        var open_style = ' style="display:none;"';
      }
*/
        var open_bt = 'btX';
        var open_style = '';
      if (d.search[x].title){
        var str = '<div class="boxSideNr"><div class="headline"><div class="titleEx clearfix"><h2 class="txt"><em>' + d.search[x].title + '</em></h2><a class="' + open_bt + '" href="" onclick="boox.effect.sideToggle(this); return false;"><span>X</span></a></div></div>';
      } else {
        var str = '<div class="boxSideNr"><div class="headline"><div class="titleEx clearfix"><h2 class="txt"><em>名称未設定</em></h2><a class="' + open_bt + '" href="" onclick="boox.effect.sideToggle(this); return false;"><span>X</span></a></div></div>';
      }
      if(d.search[x].key == 'category') {
        str += '<div class="boxInner"><div class="listTree"' + open_style + '><ul id="genreTree0">';
      } else {
        str += '<div class="boxInner"><div class="listNr"' + open_style + '><ul>';
      }
      if(now[ d.search[x].key ] && now[ d.search[x].key ] != '') {
        str += '<li><a href="javascript:void(0);" onclick="boox.pubpage.getQuery(\'' + d.search[x].key + '\', \'\', 1); return false;"><span>全て</span></a></li>';
      }
      if(d.search[x].key != 'category') {
        if(d.search[x].data.length) {
          for(y=0, ylen=d.search[x].data.length; y<ylen; y++){
            if(d.search[x].data[y].count == 0){continue;}
            if(d.search[x].key == 'author' && y > 20){continue;}
            if(d.search[x].key == 'author' && d.search[x].data[y].name == '') {continue;}
            var yfacet_count = '（' + d.search[x].data[y].count + '）';
            str += '<li>';
            if(!now[ d.search[x].key ] && now[ d.search[x].key ] != d.search[x].data[y].query) {
              str += '<a href="javascript:void(0);" onclick="boox.pubpage.getQuery(\'' + d.search[x].key + '\', \'' + d.search[x].data[y].query + '\', 1); return false;">';
            }
            if(d.search[x].key == 'stamp') {
              str += '<span>' + boox.util.stamp( d.search[x].data[y].name ) + yfacet_count + '</span>';
            } else {
              str += '<span>' + d.search[x].data[y].name + yfacet_count + '</span>';
            }
            if(!now[ d.search[x].key ] && now[ d.search[x].key ] != d.search[x].data[y].query) {
              str += '</a>';
            }
            str += '</li>';
          } // end for y
        } else {
          str += '<li><span>絞り込みがありません。</span></li>';
        }
      } else {
        if(d.search[x].data instanceof Array) {
          str += '<li><span>絞り込みがありません。</span></li>';
        } else {
          str += openList(d.search[x].data, d.search[x].key);
        }
      }
      str += '</ul></div></div></div>';
      jQuery('#booxAjaxRenderSide').append(str);
      boox.render.openTree(now['category']);
    }
  } // end for x
  // 再帰処理
  function openList(data, key){
    var m = data.children;
    var len = m.length;
    var i = 0;
    var clen;
    if(len){
      for(i=0; i<len; i++){
        clen = m[i].children.length;
        if(m[i].total == 0 || m[i].genre_id >= 90000) {continue;}
        if(clen){var bt = '<a href="" class="xhref" onclick="boox.effect.slideTree(this); return false;">+</a>';} else {var bt = '<span class="xhref">-</span>';}
        cat_str += '<li class="genre' + m[i].genre_id + '">' + bt + '<a href="javascript:void(0);" onclick="boox.pubpage.getQuery(\'' + key + '\', \'' + m[i].genre_id + '\', 1); return false;">' + m[i].name + '（' + m[i].total + '）</a>';
        if(clen){
          cat_str += '<ul class="child tree' + m[i].genre_id + '" style="display:none;">';
          openList(m[i], key);
          cat_str += '</ul>';
        } // end if
        cat_str += '</li>';
      }
    } // end if
    return cat_str;
  } // end func
};

