
var solrURL = "http://49.212.91.33/solr/select";

var facetQueries = {
  '価格':
    {'30,000円以上':'price:[30000 TO *]'
     , '20,000円台':'price:[20000 TO 30000]'
     , '10,000円台':'price:[10000 TO 20000]'
     , '10,000円以下':'price:[* TO 10000]'}
};

var facetLabels = {
    'cat2_facet':'カテゴリ'
  , 'maker':'ブランド'
};

var filters = new Array();

function resetFilters(){
  filters.length = 0;
}

function requestSolr(start,fq){
  if(fq != undefined){
    filters.push(fq);
  }
    var params = getstandardargs().concat(getquerystring());
    params = params.concat(getfacetqueriesarray());
    params = params.concat(getstartstring(start));
    params = params.concat(getfqstringarray());
    params = params.concat(getfacetfieldarray());
    var strData = params.join('&');
  $.getJSON(solrURL+'?'+strData, updatepage);
}

function requestSolrInnai(start,fq){
  if(fq != undefined){
    filters.push(fq);
  }
    var params = getstandardargs().concat('q=cat1:院内設備 ');
    params = params.concat(getfacetqueriesarray());
    params = params.concat(getstartstring(start));
    params = params.concat(getfqstringarray());
    params = params.concat(getfacetfieldarray());
    var strData = params.join('&');
  $.getJSON(solrURL+'?'+strData, updatepage);
}

function addFigure(str) {
  var num = new String(str).replace(/,/g, "");
  while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
  return num;
}

function getfacetqueriesarray(){
  var facetqueriesarray = new Array();
  for(var label in facetQueries){
    for(var key in facetQueries[label]){
      facetqueriesarray.push("facet.query="+facetQueries[label][key]);
    }
  }
  return facetqueriesarray;
}

function getfacetfieldarray(){
  var facetfieldarray = new Array();
  for ( var field in facetLabels) {
    facetfieldarray.push("facet.field=" + field);
  }
  return facetfieldarray;

}

function getstandardargs() {
    var params = [
            'wt=json'
            , 'json.wrf=?'
            , 'json.nl=map'
            , 'rows=50'
            , 'fl=url,name,price,src,maker'
//            , 'hl=true'
//            , 'hl.fl=name'
//            , 'hl.snippets=1'
//            , 'f.name.hl.alternateField=title'
//            , 'hl.usePhraseHighlighter=true'
//            , 'hl.simple.pre=<b style="background:aquamarine">'
//            , 'hl.simple.post=</b>'
            , 'facet=true'
            , 'facet.limit=20'
            , 'facet.mincount=1'
            , 'facet.sort=count'
    ];

    return params;
}

function getfqstringarray(){
  fqstringarray = new Array();
  for(var fq in filters){
    fqstringarray.push("fq="+filters[fq]);
  }
  return fqstringarray;
}
function getstartstring(start){
  startstring = "";
  if(start != undefined){
    startstring = "start="+start;
  }else{
    startstring = "start=0";
  }
  return startstring;
}

function getquerystring() {
  var form = document.forms['f1'];
  var query = form.query.value;
  if( query ){
    qstr = 'q=cat1:マッサージベッド ' + (query);
  }else{
    qstr = 'q=cat1:マッサージベッド';
  }
  return qstr;
}

function updatepage(rsp){
  if (! rsp ) return null;
  var found = rsp.response.numFound;
  var start = (rsp.response.start) ? parseInt(rsp.response.start) : 0;
  var rows = (rsp.responseHeader.params.rows) ? parseInt(rsp.responseHeader.params.rows) : 10;
  // numFound
  resultHeader(rsp, found, start, rows);
  // result docs
  var resultHtml = "";

  if(found == 0){
    var form = document.forms['f1'];
  	resultHtml += "<b>"+form.query.value+"</b> は見つかりませんでした。他の検索語で試してください。";
    //document.getElementById("facet").innerHTML = "";
    document.getElementById("page").innerHTML = "";
		document.getElementById("page2").innerHTML = "";
    document.getElementById("result").innerHTML = resultHtml;
  } else {
    resultHtml += "<div id=\"box_item_list\">"
    for(i = 0; i <  rsp.response.docs.length; i++){
      var doc = rsp.response.docs[i];
      resultHtml += documentHtml(doc,rsp);
    }
    resultHtml += "</div>"
    document.getElementById("result").innerHTML = resultHtml;

    // facet
    var facetHtml = "";

    // facet field
    for(var field in rsp["facet_counts"]["facet_fields"]){
      facetHtml += facetFieldHtml(rsp, field);
    }
    // facet query
    for(var label in facetQueries){
      facetHtml += facetQueriesHtml(rsp, label);
    }

    //document.getElementById("facet").innerHTML = facetHtml;

    // pagination
    document.getElementById("page").innerHTML =paginationHtml(rsp, found, start, rows);
		document.getElementById("page2").innerHTML =paginationHtml(rsp, found, start, rows);
  }

}

function resultHeader(rsp, found, start, rows){
  var form = document.forms['f1'];
  var query = form.query.value;
  var headerHtml= "";
  if(query){
    headerHtml += "<h3>"+query+" の検索結果</h3>&nbsp;&nbsp;&nbsp;";
  }
  if(found > 0){
    headerHtml += "<b>"+found+"</b> 件中";
    headerHtml += "<b>"+(start+1)+"</b> - ";
    headerHtml += "<b>"+ ((start + rows > found) ? found : start + rows )+"</b>件目";
  }else{
    headerHtml += "<b>0</b> 件";
  }
  headerHtml += "( "+rsp.responseHeader.QTime/1000+" 秒 )"
  document.getElementById("result_header").innerHTML = headerHtml;

}

function documentHtml(doc, rsp){
//  var hi =rsp ["highlighting"][doc.url];
  var tempHtml = "";
  tempHtml += "<div class=\"box_item\">"
  tempHtml += "<div class=\"item_img_box\"><p class=\"item_img_p\"><a href=\"" + doc.url + "\" target=\"_blank\"><img class=\"item_img\" src=\""+doc.src+"\" width=\"201\"></a></p></div>"
  tempHtml += "<div class=\"item_name_box\"><p class=\"item_name\"><a href=\"" + doc.url + "\" target=\"_blank\">"+doc.name+"</a></p></div>"
  tempHtml += "<p class=\"item_price\"><span class=\"color_red\">\\"+addFigure(doc.price)+"</span></p>"
  tempHtml += "</div>"
//  tempHtml += "<div style=\"float:left;width:270px;height:300px;margin:3px\">";
//  tempHtml += "<a href=\""+doc.url+"\"><div style=\"width:256px;height:256px;\"><img width=\"256\"   border=0 src=\""+doc.src+"\" /></div></a><br/>";
//  tempHtml += "<a href=\""+doc.url+"\">" + doc.name +"</a>";
//  tempHtml += "<div class=\"articles\">";
//  if(doc.price){
//    tempHtml += "価格："+addFigure(doc.price)+"円";
//  }
//  if(doc.pages){
//    tempHtml += " | "+doc.pages+"ページ";
//  }
//  if(doc.isbn){
//    tempHtml += " | "+doc.isbn;
//  }
//  tempHtml += "</div>";
//  tempHtml += "</div>";
  return tempHtml;
}

function facetLabel(field){
  return (facetLabels[field]) ? facetLabels[field] : field;
}

function facetFieldHtml(rsp, facetField ){
  facetHtml = "";
  if(rsp["facet_counts"]["facet_fields"][facetField]){
    facetHtml += "<h2>"+facetLabel(facetField)+"</h2><div id=\""+facetField+"\">";
    for(var field in rsp["facet_counts"]["facet_fields"][facetField]){
      var field_count = rsp["facet_counts"]["facet_fields"][facetField][field];
      if(field_count > 0){
        facetHtml += "<a href=\"javascript:requestSolr(0,'"+facetField+":"+field+"');\">"+field+"("+field_count+")"+"</a><br>";
      }
    }
    facetHtml += "</div>";
  }
  return facetHtml;
}

function facetQueriesHtml(rsp, facetTitle){
  facetHtml = "";
  if(rsp["facet_counts"]["facet_queries"]){
    facetHtml += "<h2>"+facetTitle+"</h2><div>";
    for(var key in facetQueries[facetTitle]){
      var facet_count = rsp["facet_counts"]["facet_queries"][facetQueries[facetTitle][key]];
      if(facet_count > 0){
        facetHtml += "<a href=\"javascript:requestSolr(0,'"+facetQueries[facetTitle][key]+"');\">"+key+"("+facet_count+")"+"</a><br>";
      }
    }
    facetHtml += "</div>";
  }
  return facetHtml;
}

function paginationHtml(rsp, found, start, rows){
  var pageHtml = "";

  var p_head = '|&lt;&lt;先頭ページへ';
  var p_prev = '&lt;前へ';
  var p_next = '次へ&gt;';
  var p_tail = '末尾ページへ&gt;&gt;|';

  var wsiz = 10;
  var w1 = 5;
  var w2 = 5;

  // 全ページ数
  var pcnt = Math.ceil(found / rows);

  // 現在のページ番号
  var cpag = start / rows + 1;

  // ウィンドウ開始・終了（ページ番号）
  var wbgn = cpag - w1;
  var wend = cpag + w2;
  if( wbgn < 1 ){
    wbgn = 1;
    wend = wbgn + wsiz;
    if( wend > pcnt + 1 ){
      wend = pcnt + 1;
    }
  }
  if( wend > pcnt + 1 ){
    wend = pcnt + 1;
    wbgn = wend - wsiz;
    if( wbgn < 1 ){
      wbgn = 1;
    }
  }
  if( pcnt > 1 ){
    pageHtml += "<strong>Page</strong>：";
    if( cpag > 1 ){
      pageHtml += "<a href=\"javascript:requestSolr(0,null);\">"+p_head+"</a>&nbsp;&nbsp;&nbsp;";
      pageHtml += "<a href=\"javascript:requestSolr("+((cpag-2)*rows)+",null);\">"+p_prev+"</a>&nbsp;&nbsp;&nbsp;";
    }
    pageHtml += "&nbsp;";
    for(i=wbgn;i<wend;i++){
    if(cpag == i){
      pageHtml += ""+i+"&nbsp;&nbsp;&nbsp;"
    }else{
      pageHtml += "<a href=\"javascript:requestSolr("+((i-1)*rows)+",null);\">"+i+"</a>&nbsp;&nbsp;&nbsp;";
    }
    }
    pageHtml += "&nbsp;";
    if( cpag < pcnt ){
      pageHtml += "<a href=\"javascript:requestSolr("+(cpag*rows)+");\">"+p_next+"</a>&nbsp;&nbsp;&nbsp;";
      pageHtml += "<a href=\"javascript:requestSolr("+((pcnt-1)*rows)+");\">"+p_tail+"</a>&nbsp;&nbsp;&nbsp;";
    }
    pageHtml += "</div>";
  }
  return pageHtml;
}


