/* 확장 검색을 위한 전역변수 */
var term_order = 0;
var exp_cnt = 0;

/**********************************
* 확장단어를 만들기 위해
* 동기 통신 하여야 함!!
***********************************/
//expansion xml url
var ServerSrc_exp_split = "/service/dic/split.do";
var ServerSrc_exp = "/service/expandquery.do";
// 테스트용(star url)
//var ServerSrc_exp_split = "http://star.kisti.re.kr/apis/service/search/dic/split";
//var ServerSrc_exp = "http://star.kisti.re.kr/apis/service/search/expandquery";

//xsl url
var urlXSL_exp = "/totalsearch/expand_xsl/expand.xsl";  //확장질의 XSL


/**
 * 확장질의 검색 결과
 * 초기 확장단어 결과 리스트 view
 */
function expansion_result(exp_keyword) {

  document.sForm.ek.value = "";
  var query = exp_keyword;
  var param = '&query='+ query;
  sendRequest(validExp_word, param,'GET',ServerSrc_exp_split,true,false);

}


/**
 * 유효한 확장 단어 찾기
 * expansion_result call back
*/
function validExp_word(request) {

  if(request.readyState != 4 || request.status != 200)
  return;

  var xmlDoc = request.responseXML;
  var resultList = xmlDoc.selectNodes("/Result/Entry");
  exp_cnt = resultList.length;
  
  if(exp_cnt < 1) {
    document.getElementById("exp_qry").innerHTML = "";
    document.getElementById("exp_list").innerHTML="확장질의어가 없습니다.";
    return;
  }
  
  var msg = "";
  for(var i=0; i<resultList.length; i++) {
    var tmp_str = str_length(resultList[i].text,18);
    msg +=  "<span id='exp"+i+ "' title='" + resultList[i].text + "' onmouseover=\"this.className='ov'\" onmouseout=\"this.className='ot'\" onmousedown='view_expansion(\""+resultList[i].text+"\",\"" + i + "\");' style='cursor:hand'>"+ tmp_str +"</span>, ";
    term_order = i;
    make_expansion(resultList[i].text);
  } //for(var i=0; i<resultList.length; i++) {

  msg = msg.slice(0, msg.length - 2);
  document.getElementById("exp_qry").innerHTML = msg;
  
  view_expansion(resultList[0].text, 0);
  xmlDoc = null;

}



/**
확장 단어의 리스트 결과 보기
*/
function view_expansion(exp_keyword, idx){
	
  var str  = makeLoading();
  document.getElementById("exp_list").innerHTML = str;

  var query = exp_keyword;

  for(var i=0; i < exp_cnt; i++) {

    if (idx == i) {            //선택한 단어
      document.getElementById("exp" + i).style.fontWeight = "bold";
    } else {
      document.getElementById("exp" + i).style.fontWeight = "normal";
    }
  } //for(var i=0; i <= exp_cnt; i++) {

  var param = '&query='+query;
  
  sendRequest(viewExpList,param,'GET',ServerSrc_exp,true,false);
}

/**
확장 단어의 리스트 결과 보기
call back
*/
function viewExpList(request) {
  if(request.readyState != 4 || request.status != 200)
	  return;

  var xmlDoc = request.responseXML;
  var xslDoc = new ActiveXObject("MSXML.DOMDocument");
  xslDoc.async = false;
  
  var tList = xmlDoc.selectNodes("/Result/Translation/Term");
  var pList = xmlDoc.selectNodes("/Result/PerfectSynonym/Term");
  var sList = xmlDoc.selectNodes("/Result/SimilarSynonym/Term");

  var expListCnt = tList.length + pList.length + sList.length;

//  alert(expListCnt);
  if(expListCnt < 1) {
    document.getElementById("exp_list").innerHTML="확장질의어가 없습니다.";
    return;
  }

  xslDoc.load(urlXSL_exp);
  document.getElementById("exp_list").innerHTML = xmlDoc.transformNode(xslDoc);

  xmlDoc = null;
  xslDoc = null;

}



/**
검색을 위한 확장 단어 만들기
*/
function make_expansion(exp_keyword){
  var query = exp_keyword;
  var param = '&query='+query;
  sendRequest(make_exp_query,param,'GET',ServerSrc_exp,true,false);
}

/**
검색을 위한 확장 단어 만들기
call back
*/
function make_exp_query(request) {
  if(request.readyState != 4 || request.status != 200)
  return;

  var xmlDoc;

  xmlDoc = request.responseXml;

  var tList = xmlDoc.selectNodes("/Result/Translation/Term");
  var pList = xmlDoc.selectNodes("/Result/PerfectSynonym/Term");
  var sList = xmlDoc.selectNodes("/Result/SimilarSynonym/Term");

  var expList = new Array();
  var expListCnt = tList.length + pList.length + sList.length;

  var expIndex = 0;
  if (tList.length > 0) {
    for (var i = 0; i < tList.length; i++) {

      var tmpValue = tList[i].text;
      if (tmpValue.indexOf("(") > 0) {
        var replaceValue = tmpValue.substring(tmpValue.indexOf("("),tmpValue.indexOf(")")+1);
        tmpValue = tmpValue.replaceAll(replaceValue, "");
      }
      tmpValue = tmpValue.replaceAll("&", " ");
      tmpValue = tmpValue.replaceAll(":", "");
      tmpValue = tmpValue.replaceAll("-", " ");
      tmpValue = tmpValue.replaceAll(",", " ");
      expList[expIndex] = tmpValue;
      expIndex++;

    }
  }

  if (pList.length > 0) {
    for (var i = 0; i < pList.length; i++) {

      var tmpValue = pList[i].text;
      if (tmpValue.indexOf("(") > 0) {
        var replaceValue = tmpValue.substring(tmpValue.indexOf("("),tmpValue.indexOf(")")+1);
        tmpValue = tmpValue.replaceAll(replaceValue, "");
      }
      tmpValue = tmpValue.replaceAll("&", " ");
      tmpValue = tmpValue.replaceAll(":", "");
      tmpValue = tmpValue.replaceAll("-", " ");
      tmpValue = tmpValue.replaceAll(",", " ");
      expList[expIndex] = tmpValue;
      expIndex++;

    }
  }

  if (sList.length > 0) {
    for (var i = 0; i < sList.length; i++) {

      var tmpValue = sList[i].text;
      if (tmpValue.indexOf("(") > 0) {
        var replaceValue = tmpValue.substring(tmpValue.indexOf("("),tmpValue.indexOf(")")+1);
        tmpValue = tmpValue.replaceAll(replaceValue, "");
      }
      tmpValue = tmpValue.replaceAll("&", " ");
      tmpValue = tmpValue.replaceAll(":", "");
      tmpValue = tmpValue.replaceAll("-", " ");
      tmpValue = tmpValue.replaceAll(",", " ");
      expList[expIndex] = tmpValue;
      expIndex++;

    }
  }

  var expansionKeyword = document.sForm.ek.value;
  var msg="";

  if(term_order!=0 && expansionKeyword.length>0) { // space operator .. maybe and
    msg+="AND";
  }
  msg += "(";

  for (var i = 0; i < expList.length; i++) {
    msg += "("+trim(expList[i])+")";
    if(i+1<expList.length) {
      msg+="|";
    }
  }

  msg += ")";

  if(expListCnt >= 1) {
    document.sForm.ek.value += msg;
  }
  xmlDoc = null;
}

/**
 * 확장질의어 재검색 Menu 보기
 */
function exp_search(str){
  exp_addQuery(str);
}

/**
 * 확장질의어 재검색 Menu 보기
 */
function exp_addQuery(str){
  var mouseX = event.clientX + 10;
//  var mouseY = event.clientY + 10 + document.documentElement.scrollTop;
  var mouseY = event.clientY + 10 + document.body.scrollTop;

  document.getElementById('addQry_btn').style.pixelLeft=mouseX - 90;
  document.getElementById('addQry_btn').style.pixelTop=mouseY;
  document.getElementById('addQry_btn').style.display = "block";

  document.getElementById('addQry_btn').style.position='absolute';
  document.getElementById('addQry_btn').style.zIndex='11';

  document.getElementById('addQry_btn').style.backgroundColor = "#DDDDDD";
  document.getElementById('addQry_btn').innerHTML="<span class='text_btn' style='width:80' onmouseover='this.style.background=\"#F5F5F5\"' onmouseout='this.style.background=\"#DDDDDD\"' onclick='exp_reSearch(\""+str+"\")'>재검색</span><br>";
  document.getElementById('addQry_btn').innerHTML+="<span class='text_btn' style='width:80' onmouseover='this.style.background=\"#F5F5F5\"' onmouseout='this.style.background=\"#DDDDDD\"' onclick='exp_addQry(\""+str+"\")'>검색어추가</span><br>";

}

/**
 * 확장 단어 검색어 추가
 */
function exp_addQry(str){
  var objTxt = document.getElementById("search_keyword_text");
  objTxt.value += ' ' + str;
  objTxt.focus();
  document.getElementById('addQry_btn').style.display = 'none';
}

/**
 * 확장 단어 재검색
 */
function exp_reSearch(str){
  var objTxt = document.getElementById("search_keyword_text");
  objTxt.value = str;
  doSearch();		// 검색함수 호출해야함
  document.getElementById('addQry_btn').style.display = 'none';
}




