//<!--

var MAX_SUGTERM_BOUND = 10;
var SUGTERM_SHOW_MODE_MATCH = 1;
var SUGTERM_SHOW_MODE_NO_MATCH = 2;
var MAX_DCCTG_FILTER_BOUND = 4;
var MAX_TAG_FILTER_BOUND = 8;
var _histList;

/* output search page header 
paramList['CGIPrefix'] is CGI path prefix
paramList['PagePrefix'] is static Page path prefix
paramList['QueryString'] is the previous query string 
param['logoLinkUrl'] is Custom Url
*/
param["logoLinkUrl"] = "http://www.bli.gov.tw/"
var _hintDelay = null;
var _fullName = null;
var _isHintShow = false;
var _orisCookie = GenCookieList( );
var _sessChkUrl = param['CGIPrefix'] + "admin/sesschk.cgi";

var _tags;
var _newEditTagObj;
var _curDragObj;

var _err_system = 1000;
var _err_no_priv = 1001;
var _err_args = 1002;

var MAX_TAG_LIST_CNT = 100;

function OutSPageHeader(param)
{
   var htmlStr = new String();
   var bgImgStr = new String();
   var fgImgStr = new String();
   var queryStr = new String();
   var queryLinkStr = new String();
   var logoLinkStr = new String();
   var focusStr = new String();
   var qsugStr = "";

   /* start auto-logout timer */
   if(null != _orisCookie && null != _orisCookie['ORISKEY'] && 
      32 == TrimStr(_orisCookie['ORISKEY'].split("!")[0]).length)
      window.setTimeout(ChkSess, 60000); 
   
   bgImgStr = "this.style.backgroundImage='url("
              + param['PagePrefix'] + "img/button_22_over.gif)'";
   fgImgStr = "this.style.backgroundImage='url("
              + param['PagePrefix'] + "img/button_22.gif)'";
   queryLinkStr = "search/qpage.cgi?act=simple"
      + ((param["tmplSetName"] != "")?"&tmpl="+param["tmplSetName"]:"")
      + ((param["uiLang"] != undefined)?"&uilang="+param["uiLang"]:"");
   queryStr = "NewQuery('top')";
   if(null == param["logoLinkUrl"])
   {
      logoLinkStr = "window.location='" + param['CGIPrefix']
         + "search/qpage.cgi?act=simple"
         + ((param["tmplSetName"] != "")?"&tmpl="+ param["tmplSetName"]:"")
         + ((param["uiLang"] != undefined)?"&uilang="+param["uiLang"]:"")
         + "'";
   }
   else
   {
      logoLinkStr = "window.location='" + param["logoLinkUrl"] +"'";
   }
   focusStr = "param['QueryFocus'] = 'top'";
   
   if(param['loginPriv'] == "admin")
      delLinkStr = "<a href='#xx' onclick='UrlToPost(\"" + param["CGIPrefix"] + "search/query.cgi?" + param["DelLinkUrl"]
                   + ((param["uiLang"] != undefined)?"&uilang="+param["uiLang"]:"")
                   + "\")'>" + MSG_MENU_DELREC + "</a>"
   else
      delLinkStr = "";
      
   if(param['ShowQSug'])
      qsugStr = 'onFocus="QSugBind(event); '+ focusStr +'" onBlur="QSugUnBind(event)" onKeyDown="QSugGetKey(event)" onKeyUp="QSugSelectTerm(event);CheckLens(this,' + _maxQueryLength + ');"';
   else
      qsugStr = 'onFocus="' + focusStr + '" onKeyUp="CheckLens(this,' + _maxQueryLength + ');"';
      

   htmlStr = '<tr> <td height="71" background="'
             + param["PagePrefix"] +
             'img/topbg.gif"> <table width="100%" height="69"  border="0" cellpadding="0" cellspacing="0">  \
             <tr> <td width="17">&nbsp;</td>    \
             <td width="220" title="Home Page"><div class="result_logo" onClick="' + logoLinkStr + '"></div>             \
             </td><td width="18">&nbsp;&nbsp;&nbsp;&nbsp;</td> \
             <td><table width="100%"  border="0" align="right" cellpadding="2" cellspacing="4">  \
             <tr><td width="364" nowrap class="top_body13gray">   \
             <div align="left" class="body13gray">                \
             <table width="100%"  border="0" cellspacing="0" cellpadding="0">    \
             <tr><td> <input id="topqstr" type="text" autocomplete="off" maxlength="'
             + _maxQueryLength + 
             '" class="listmenu" style="width:291" value="' 
             + param["QueryString"] +
             '" size="39" ' + qsugStr + '></td><td>    \
             <table width="66" height="24" align="center" cellpadding="0" cellspacing="0">      \
             <tbody><tr>      \
             <td align=middle valign="middle" style="BACKGROUND-IMAGE: url('
             + param["PagePrefix"] +
             'img/button_22.gif); CURSOR: default" onMouseOver="'
             + bgImgStr + 
             '" onMouseOut="'
             + fgImgStr +
             '" onClick="'+ queryStr + '"> <div align="center" class="body13gray19">'
             + MSG_MENU_QUERY + 
             '</div>    \
             </td></tr></tbody></table>   \
             </td></tr></table>           \
             </div></td><td nowrap class="body13link"><span class="body13link">     \
             <a href="http://www.bli.gov.tw/" title="' + MSG_MENU_QUERY_SIMPLE + '">'
             + MSG_MENU_QUERY_SIMPLE + 
             '</a><br>';
	     
	     
   //if(null != param['helpId'] && param['helpId'].length >= 0)
   //   htmlStr += '<a href="#" \
   //		 onClick="window.open(\''
   //   	 + param['CGIPrefix'] +
   //            'admin/help.cgi?act=show&id=' 
   //            + param['helpId']
   //            + ((param["uiLang"] != undefined)?"&uilang="+param["uiLang"]:"")
   //            + '\')">'
   //            + MSG_MENU_ASSIST_INFO +
   //            '</a><br>';
   htmlStr += '<a href="/Search.aspx?sys=sr" title="' + MSG_MENU_QUERY_ADV +'">' + MSG_MENU_QUERY_ADV + '</a><br>';	
   htmlStr += '<a href="http://www.bli.gov.tw/sub.aspx?a=JKIvoXce6Qo%3d" target="_blank" title="' + MSG_MENU_ASSIST_INFO + '">'
               + MSG_MENU_ASSIST_INFO + '</a>';
	     
   htmlStr += delLinkStr +
             '</span></td>       \
             <td width="5" class="top_body13gray">&nbsp;</td>              \
             </tr></table>       \
             </td></tr></table>  \
             </td></tr>';
   
   document.write(htmlStr);
}

function OutSPageFooter(param)
{
   var htmlStr = new String();
   var bgImgStr = new String();
   var fgImgStr = new String();
   var queryStr = new String();
   var focusStr = new String();

   bgImgStr = "this.style.backgroundImage='url(" + param['PagePrefix'] + "img/button_22_over.gif)'";
   fgImgStr = "this.style.backgroundImage='url(" + param['PagePrefix'] + "img/button_22.gif)'";
   queryStr = "NewQuery('bottom')";
   focusStr = "param['QueryFocus'] = 'bottom'";

   htmlStr = '<table width="96%"  border="0" align="center" cellpadding="0" cellspacing="0">       \
              <tr>            \
              <td background="' + param['PagePrefix'] + 'img/list_line.gif"><img src="' + param['PagePrefix'] +
              'img/list_line.gif" width="3" height="2"></td>   \
              </tr>           \
              <tr>            \
              <td bgcolor="F6F6F6">  \
              <table height="60" border="0" align="center" cellpadding="0" cellspacing="0">        \
              <tr>            \
              <td class="body13gray"><div align="center">      \
              <input id="bottomqstr" type="text" class="listmenu" onKeyUp="CheckLens(this, ' 
             + _maxQueryLength + 
             ');"" maxlength="'
              + _maxQueryLength +
              '" style="width: 340" size="46" onFocus="' + focusStr + '">  \
              </div></td>     \
              <td width="80" align="center" class="body13gray"><table width="66" height="24" cellpadding="0" cellspacing="0">  \
              <tbody>         \
              <tr>            \
              <td align=middle valign="middle"  \
              style="BACKGROUND-IMAGE: url(' + param['PagePrefix'] + 'img/button_22.gif); CURSOR: default" onmouseover="'
              + bgImgStr + '" onmouseout="' + fgImgStr + '" onClick="' + queryStr + '"><div align="center" class="button">' + MSG_MENU_QUERY + '</div></td>\
              </tr>           \
              </tbody>        \
              </table></td>   \
              <td class="body13link"><span class="s"><a href="#" class="body13link" onClick="QueryInResult()">' + MSG_MENU_QUERY_INRESULT + '</a></span></td>\
              </tr>           \
              </table></td>   \
              </tr>           \
              <tr><td background="' + param['PagePrefix'] + 'img/list_line.gif"><img src="'
              + param['PagePrefix'] + 'img/list_line.gif" width="3" height="2"></td>\
              </tr></table>';

   document.write(htmlStr);
}

function OutCopyRight()
{
   var htmlStr = '<div align="center" class="copyright">' 
               + MSG_FOOTER_COPYRIGHT +
                 '</div>';

   document.write(htmlStr);
}

function TrimStr(str)
{
   return str.replace(/^[ \t\r\n]+|[ \t\r\n]+$/g, "");
}

function ToggleOption()
{
   var sortOption = document.getElementById("sortoption");
   var dbList = document.getElementById("dblist");

   if(dbList.style.display == "none")
   {
      dbList.style.display = "";
      MoreOptToCookie(1);
   }
   else
   {
      dbList.style.display = "none";
      MoreOptToCookie(0);
   }

   if(sortOption.style.display == "none")
      sortOption.style.display = "";
   else
      sortOption.style.display = "none";

}

/*
function OutDelRecPage( )
{
  document.forms["query_form"].del.value = "1";
  document.forms["query_form"].submit( );
}
*/

function NewQuery(where)
{
   if(where == "bottom")
      var qStr = document.getElementById("bottomqstr");
   else
      var qStr = document.getElementById("topqstr");

   if(TrimStr(qStr.value) == "")
   {
      alert(MSG_QPAGE_NO_QUERY);
      return false;
   }
   if(qStr.value.length == 1)
   {
      alert(MSG_QPAGE_SINGLE_TERM);
      return false;
   }
   
   /*
      check the query form whether it has newquery cgi variable first.
      If it is yes, set the value of 'newquery' variable to '1'.
   */
   if(document.forms["query_form"].newquery != null)
   {
      document.forms["query_form"].newquery.value = "1";
   }

   /* clear tag query */
   document.forms["query_form"].tag.value = "";

   /* clear all filter */
   ClearAllFilter();

   document.forms["query_form"].q.value = qStr.value;
   document.forms["query_form"].submit( );
}

function QueryInResult( )
{
   var qStr = document.forms["query_form"].q;
   var oqStr = document.forms["query_form"].oq;
   var newQStr = document.getElementById("bottomqstr");

   if(TrimStr(newQStr.value) == "")
   {
      alert(MSG_QPAGE_NO_QUERY);
      return false;
   }
   if(newQStr.value.length == 1)
   {
      alert(MSG_QPAGE_SINGLE_TERM);
      return false;
   }
   
   /*
      check the query form whether it has newquery cgi variable first.
      If it is yes, set the value of 'newquery' variable to '1'.
   */
   if(document.forms["query_form"].newquery != null)
   {
      document.forms["query_form"].newquery.value = "1";
   }

   if(oqStr.value != "")
      qStr.value = "(" + oqStr.value + ")" + " & (" + newQStr.value + ")";
   else
      qStr.value = newQStr.value;
   document.forms["query_form"].submit( );
}

function Init()
{
   var sortBy;
   var direction;
   var nRec;

   /* set sortby */
   sortBy = document.forms["query_form"].sortby;
   for(i = 0; i < sortBy.options.length; i++)
   {
      if(sortBy.options[i].value == param["SortBy"])
         sortBy.options[i].selected = true;
   }
   
   /* set direction */
   direction = document.forms["query_form"].direction;
   for(i = 0; i < direction.options.length; i++)
   {
      if(direction.options[i].value == param["Direction"])
         direction.options[i].selected = true;
   }

   /* set n */
   nRec = document.forms["query_form"].n;
   for(i = 0; i < nRec.options.length; i++)
   {
      if(nRec.options[i].value == param["PageRec"])
         nRec.options[i].selected = true;
   }

   /* score doesn't have direction */
   if(sortBy.options[sortBy.selectedIndex].value == "score")
      direction.disabled = true;
   else
      direction.disabled = false;

   /* if the preference not set MoreOpt look the ORISOPT */
   /* if moreopt in ORISOPT is set */
   if(param["MoreOpt"] != 1)
   {
      var moreOpt = MoreOptFromCookie( );
      if(moreOpt != null)
      {
         if(moreOpt == "1")
            param["MoreOpt"] = 1;
         else
           param["MoreOpt"] = 0;
      }
   }

   if(param["MoreOpt"] == 1)
   {
      document.getElementById("sortoption").style.display = "";
      document.getElementById("dblist").style.display = "";
   }
   else
   {
      document.getElementById("sortoption").style.display = "none";
      document.getElementById("dblist").style.display = "none";
   }

   /* re-set the form value for back to previous page */
   document.forms["query_form"].dtype.value = param['dtype'];
   document.forms["query_form"].fdate.value = param['fdate'];
   document.forms["query_form"].ftype.value = param['ftype'];
   document.forms["query_form"].fauthor.value = param['fauthor'];
   document.forms["query_form"].ftheme.value = param['ftheme'];
   document.forms["query_form"].fcake.value = param['fcake'];
   document.forms["query_form"].fservice.value = param['fservice'];
   document.forms["query_form"].oq.value = DecodeHtmlEntity(param['QueryString']);
   document.forms["query_form"].q.value = DecodeHtmlEntity(param['QueryString']);
   document.forms["query_form"].tag.value = DecodeHtmlEntity(param['querytag']);
   document.forms["query_form"].ftag.value = DecodeHtmlEntity(param['ftag']);

   /* re-set query box, cause init js uses compiled value instead of current one */
   document.getElementById("topqstr").value = document.forms["query_form"].oq.value;

   /* new hint for full author name */
   _fullName = new Hint();

   if(param['tagFuncOn'] == 1)
   {
      /* prepare dialog layer */
      _newEditTagObj = new Drag("handle_edittag", "content_edittag");

      /* init all tag */
      ParseAllTag();
   }
}

function ParseAllTag()
{
   var alltag;
   var tg;
   var i;

   _tags = new Array(param['tagCnt']);
   alltag = param['allTag'].split("\n");
   for(i = 0; i < param['tagCnt']; i++)
   {
      _tags[i] = new Array(3);
      tg = alltag[i].split("\t");
      _tags[i][0] = tg[0];
      _tags[i][1] = tg[1];
      _tags[i][2] = tg[2];
   }
}

function KeyPressSubmit(e, func)
{
   var nKey;
   var arg = new String();
   
   arg = "('" + param['QueryFocus'] + "')";

   /* get key code from event */
   /* IE only */
   if(document.all)
      nKey = event.keyCode;
   /* FireFox only */
   else
      nKey = e.which;

   /* if this key code is 'Enter' */
   if(nKey == 13)
      eval(func + arg);
      
   return;
}

function MoreOptToCookie(moreopt)
{
   var c = "ORISOPT=" + moreopt + ";";
   document.cookie=c;
}

function MoreOptFromCookie( )
{
   var nameEQ = "ORISOPT=";
   var ca = document.cookie.split(';');
   for(var i=0; i < ca.length; i++)
   {
      var c = ca[i];
      while (c.charAt(0)==' ') c = c.substring(1,c.length);
      if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
   }
   return null;
}

/* diatango, 060420, get suggestion term */
function TryToGetSugTerm(actDBName, actDBCnt, outTermCnt, q, dbs, element, showMode)
{
   var xmlhttp;
   var url;
   var postData;
   var encQ;
   var targetDB;
   var args = new Array();

   actDBCnt = actDBCnt.replace(",", "");
   if(actDBCnt > MAX_SUGTERM_BOUND)
      return true;
   
   /* init xmlhttp */
   xmlhttp = XMLHTTPInit( );
   if(null == xmlhttp)
      return false;
      
   /* set target db */
   if(actDBName == "ALL")
      targetDB = dbs;
   else
      targetDB = actDBName;
   
   /* set arguments */
   url = "/cgi-bin/search/sugterm.cgi";

   encQ = XMLHTTPEscPostValue(DecodeHtmlEntity(q));
   postData = "act=get&v=0&dbs="+targetDB+"&q="+encQ+"&count="+actDBCnt+"&output="+outTermCnt+"&magno="+Math.random();

   args[0] = element;   
   args[1] = targetDB;
   args[2] = showMode;
   
   if(showMode == SUGTERM_SHOW_MODE_MATCH)
      XMLHTTPAsyncResult(xmlhttp, url, ProcSugTermInMatch, args, postData);
   else if(showMode == SUGTERM_SHOW_MODE_NO_MATCH)
      XMLHTTPAsyncResult(xmlhttp, url, ProcSugTermInNoMatch, args, postData);
   
   return true;
}

/* diatango, 060420, callback function of xmlhttp for TryToGetSugTerm() */
function ProcSugTermInMatch(result, args)
{
   var e;
   var str;
   var url;
   var termlist;
   var term;
   var i;
   
   if(result.indexOf("OK\n") != 0)
      return false;
   
   termlist = TrimStr(result.substr(3));
   
   term = termlist.split("\t");
   
   str = "&nbsp;&nbsp;";
   str += TEXT_QUERY_SUGTERM_1;
   for(i = 0; i < term.length; i++)
   {
      str += " <span class=\"result_sugterm\" onclick=\"NewTermSubmit('"+term[i]+"');\">"+term[i]+"</span>&nbsp;";
   }
   str += TEXT_QUERY_SUGTERM_2;   
   
   /* show result */   
   e = document.getElementById(args[0]);
   e.innerHTML = str;   
}

/* diatango, 060424, callback function of xmlhttp for TryToGetSugTerm() */
function ProcSugTermInNoMatch(result, args)
{
   var e;
   var str;
   var url;
   var termlist;
   var term;
   var i;

   if(null == result)
      return false;

   if(result.indexOf("OK\n") != 0)
      return false;
   
   termlist = TrimStr(result.substr(3));
   term = termlist.split("\t");
   
   str = TEXT_QUERY_NO_MATCH_MSG_4;
   
   for(i = 0; i < term.length; i++)
   {
      str += " <span class=\"result_sugterm\" onclick=\"NewTermSubmit('"+term[i]+"');\">"+term[i]+"</span>&nbsp;";
   }
   str += TEXT_QUERY_NO_MATCH_MSG_5;
   str += "<br>";
   
   /* show result */   
   e = document.getElementById(args[0]);
   e.innerHTML = str;   
}

/* diatango, 060421, submit for sugterm */
function SugTermSubmit(term, targetDB)
{
   document.forms["query_form"].q.value = term;
   if(targetDB != "ALL")
      document.forms["actdb"] = targetDB;
   document.forms["query_form"].submit( );
}

function NewTermSubmit(term)
{
    var qStr = document.getElementById("topqstr");
    qStr.value = term;
    NewQuery('top');
}

function QueryInDateGroup(type, year, month)
{
   var fDateStr = document.forms["query_form"].fdate;
   var groupDateType = document.forms["query_form"].dtype;
   var filterDateStart = new String( );
   var filterDateEnd = new String( );
   var newDate;

   switch(type)
   {
      case "none":
         groupDateType.value = "0";
         break;
      case "year":
         newDate = new Date(year, 0, 1)
         filterDateStart = SResultGetDateStr(newDate.getFullYear(), newDate.getMonth()+1, newDate.getDate());

         newDate = new Date(year, 11, 31)
         filterDateEnd = SResultGetDateStr(newDate.getFullYear(), newDate.getMonth()+1, newDate.getDate());
         groupDateType.value = "1";
         break;
      case "month":
         newDate = new Date(year, month-1, 1)
         filterDateStart = SResultGetDateStr(newDate.getFullYear(), newDate.getMonth()+1, newDate.getDate());

         newDate = new Date(year, month, 0)
         filterDateEnd = SResultGetDateStr(newDate.getFullYear(), newDate.getMonth()+1, newDate.getDate());
         groupDateType.value = "1";
         break;
      case "older":
         newDate = new Date(1900, 0, 1)
         filterDateStart = SResultGetDateStr(newDate.getFullYear(), newDate.getMonth()+1, newDate.getDate());

         newDate = new Date(year-1, 11, 31)
         filterDateEnd = SResultGetDateStr(newDate.getFullYear(), newDate.getMonth()+1, newDate.getDate());
         groupDateType.value = "2";
         break;
      default:
         groupDateType.value = "0";
         break;
   }

   if(groupDateType.value == "0")
      fDateStr.value = "";
   else
      fDateStr.value = TrimStr(filterDateStart+" "+filterDateEnd);
   document.forms["query_form"].submit( );
}

function QueryInGroup(type, value)
{
   var filterObj;
   var filterStr;
   var fCheckBound = false;
   var fvalues;
   var mark;
   var val;

   switch(type)
   {
      case "filetype":
         filterObj = document.forms["query_form"].ftype;
         break;
      case "author":
         filterObj = document.forms["query_form"].fauthor;
         break;
      case "theme":
         filterObj = document.forms["query_form"].ftheme;
         fCheckBound = true;
         break;
      case "cake":
         filterObj = document.forms["query_form"].fcake;
         fCheckBound = true;
         break;
      case "service":
         filterObj = document.forms["query_form"].fservice;
         fCheckBound = true;
         break;
      default:
         alert(ERR_INVALID_FILTER_TYPE + ": " + type);
         return;
   }

   mark = false;
   fvalues = filterObj.value.toLowerCase().split(" ");
   val = value.toLowerCase();
   for(i = 0; i < fvalues.length; i++)
   {
      if(fvalues[i] == val)
         mark = true;
   }
   
   /* add to filter */
   if(mark == false)
   {
      if(fCheckBound == true)
      {
         /* check if the dc category filter count exceeds the maximum */
         var filterCodeStr = filterObj.value;
         var filterCodeResult = filterCodeStr.split(" ");
         if(filterCodeResult.length >= MAX_DCCTG_FILTER_BOUND)
         {
            alert(MSG_DCCTG_FILTER_BOUND);
            return;
         }
      }
      
      filterStr = filterObj.value + " " + value;
      filterObj.value = TrimStr(filterStr);
   }

   document.forms["query_form"].submit( );
}

function QueryInTagGroup(value)
{
   var filterObj;
   var filterStr;
   var fvalues;
   var mark;
   var tmpval;

   filterObj = document.forms["query_form"].ftag;

   mark = false;
   fvalues = filterObj.value.split("\t");
   for(i = 0; i < fvalues.length-1; i++)
   {
      if(parseInt(fvalues[i]) == value)
         mark = true;
   }

   /* add to filter */
   if(mark == false)
   {
      /* check count upperbound */
      if((fvalues.length - 1) >= MAX_TAG_FILTER_BOUND)
      {
         alert(MSG_TAG_FILTER_BOUND);
         return;
      }
      filterObj.value += value + "\t";
   }
   
   document.forms["query_form"].submit( );
}

function ClearFilter(type)
{
   var filterObj;

   switch(type)
   {
      case "date":
         filterObj = document.forms["query_form"].fdate;
         break;
      case "size":
         filterObj = document.forms["query_form"].fsize;
         break;
      case "filetype":
         filterObj = document.forms["query_form"].ftype;
         break;
      case "author":
         filterObj = document.forms["query_form"].fauthor;
         break;
      case "theme":
         filterObj = document.forms["query_form"].ftheme;
         break;
      case "cake":
         filterObj = document.forms["query_form"].fcake;
         break;
      case "service":
         filterObj = document.forms["query_form"].fservice;
         break;
      case "tag":
         filterObj = document.forms["query_form"].ftag;
         break;
      default:
         alert(ERR_INVALID_FILTER_TYPE + ": " + type);
         return;
   }

   filterObj.value = "";
}

function ClearAllFilter()
{
  ClearFilter("date");
  ClearFilter("size");
  ClearFilter("filetype");
  ClearFilter("author");
  ClearFilter("theme");
  ClearFilter("cake");
  ClearFilter("service");
  ClearFilter("tag");
}

function QueryInDCPath(type, value)
{
   var filterObj;
   var filterObj;

   /* clear keyword */
   document.forms["query_form"].q.value = "";

   /* clear filters */
   ClearAllFilter();

   switch(type)
   {
      case "theme":
         filterObj = document.forms["query_form"].ftheme;
         break;
      case "cake":
         filterObj = document.forms["query_form"].fcake;
         break;
      case "service":
         filterObj = document.forms["query_form"].fservice;
         break;
      default:
         alert(ERR_INVALID_FILTER_TYPE + ": " + type);
         return;
   }
   
   filterObj.value = value;

   document.forms["query_form"].submit( );
}

function QueryInClearFilter(type)
{
   if(type != "dcctg")
      ClearFilter(type);
   else
   {
      ClearFilter("theme");
      ClearFilter("cake");
      ClearFilter("service");
   }

   document.forms["query_form"].submit( );
}

function SResultGetDateStr(year, month, day)
{
   var dateStr;

   dateStr = year + ((month<=9)?"0":"") + month + ((day<=9)?"0":"") + day;

   return dateStr;
}

function ShowHint(e, fullname)
{
   if(document.all)
      e = event;
      
   var x = e.clientX + document.getElementsByTagName("BODY")[0].scrollLeft+5;
   var y = e.clientY + document.getElementsByTagName("BODY")[0].scrollTop+5;
   

   window.clearTimeout(_hintDelay);
   _hintDelay = window.setTimeout("_fullName.Show('<div class=\"hint\">"
                                  + fullname 
                                  + "</div>', null, " + x + ", " + y
                                  + ")", 1000);
   _isHintShow = true;
}

function HideHint()
{
   clearTimeout(_hintDelay);
   _fullName.Hide();
   _isHintShow = false;
}

function GetFilterInfo(fdate, fsize, ftype, fauthor, fthemeDis, fthemeFull, fcakeDis, fcakeFull, fserviceDis, fserviceFull, ftagName)
{
   var fdateInfo = new String();
   var fsizeInfo = new String();
   var filterInfo = new String();
   var beginDate = new String();
   var endDate = new String();
   var fsizeRange;
   var fthemeStr;
   var fcakeStr;
   var fserviceStr;
   var ftagStr;

   fdate = TrimStr(fdate);
   fsize = TrimStr(fsize);

   if(fdate != "")
   {
      beginDate = fdate.substring(0, 4) + '/' + fdate.substring(4, 6) + '/' + fdate.substring(6, 8);
      endDate = fdate.substring(9, 13) + '/' + fdate.substring(13, 15) + '/' + fdate.substring(15, 17);
      fdateInfo = beginDate + ' - ' + endDate;
   }

   if(fsize != "")
   {
      fsizeRange = fsize.split(" ");
      if(fsizeRange.length >= 2)
      {
         if(fsizeRange[0].charAt(0).toLowerCase() == "0")
            fsizeInfo = TEXT_QUERY_SIZE_NO_LIMIT + " - ";
         else if(fsizeRange[0].charAt(0).toLowerCase() != "b")
            fsizeInfo = fsizeRange[0].substring(1, fsizeRange[0].length) + fsizeRange[0].charAt(0) + 'B - ';
         else
            fsizeInfo = fsizeRange[0].substring(1, fsizeRange[0].length) + 'bytes - ';

         if(fsizeRange[1].charAt(0).toLowerCase() == "0")
            fsizeInfo = fsizeInfo + TEXT_QUERY_SIZE_NO_LIMIT;
         else if(fsizeRange[1].charAt(0).toLowerCase() != "b")
            fsizeInfo = fsizeInfo + fsizeRange[1].substring(1, fsizeRange[1].length) + fsizeRange[1].charAt(0) + 'B';
         else
            fsizeInfo = fsizeInfo + fsizeRange[1].substring(1, fsizeRange[1].length) + 'bytes';
      }
   }

   if((fdateInfo != "") && (fsizeInfo != ""))
      filterInfo = fdateInfo + ' , ' + fsizeInfo;
   else
      filterInfo = fdateInfo + fsizeInfo;

   if(ftype != "")
   {
      if(filterInfo != "")
         filterInfo = filterInfo + " , <span class='body13grayb'>" + TEXT_QUERY_TYPE_FILTER + "</span>: " + ftype;
      else
        filterInfo = "<span class='body13grayb'>" + TEXT_QUERY_TYPE_FILTER + "</span>: " + ftype;
   }

   if(fauthor != "")
   {
      if(filterInfo != "")
         filterInfo = filterInfo + " , <span class='body13grayb'>" + TEXT_QUERY_AUTHOR_FILTER + "</span>: " + fauthor;
      else
        filterInfo = "<span class='body13grayb'>" + TEXT_QUERY_AUTHOR_FILTER + "</span>: " + fauthor;
   }

   if(fthemeDis != "")
   {
      fthemeStr = '<span onMouseOver="ShowHint(event, \'' + fthemeFull + 
                   '\');" onMouseOut="HideHint();" onFocus="ShowHint(event, \'' + 
                   fthemeFull + '\');" onBlur="HideHint();">' + fthemeDis + '</span>';
      if(filterInfo != "")
         filterInfo = filterInfo + " , <span class='body13grayb'>" + TEXT_QUERY_DC_THEME + "</span>: " + fthemeStr;
      else
        filterInfo = "<span class='body13grayb'>" + TEXT_QUERY_DC_THEME + "</span>: " + fthemeStr;
   }

   if(fcakeDis != "")
   {
      fcakeStr = '<span onMouseOver="ShowHint(event, \'' + fcakeFull + 
                   '\');" onMouseOut="HideHint();" onFocus="ShowHint(event, \'' + 
                   fcakeFull + '\');" onBlur="HideHint();">' + fcakeDis + '</span>';
      if(filterInfo != "")
         filterInfo = filterInfo + " , <span class='body13grayb'>" + TEXT_QUERY_DC_CAKE + "</span>: " + fcakeStr;
      else
        filterInfo = "<span class='body13grayb'>" + TEXT_QUERY_DC_CAKE + "</span>: " + fcakeStr;
   }

   if(fserviceDis != "")
   {
      fserviceStr = '<span onMouseOver="ShowHint(event, \'' + fserviceFull + 
                   '\');" onMouseOut="HideHint();" onFocus="ShowHint(event, \'' + 
                   fserviceFull + '\');" onBlur="HideHint();">' + fserviceDis + '</span>';
      if(filterInfo != "")
         filterInfo = filterInfo + " , <span class='body13grayb'>" + TEXT_QUERY_DC_SERVICE + "</span>: " + fserviceStr;
      else
        filterInfo = "<span class='body13grayb'>" + TEXT_QUERY_DC_SERVICE + "</span>: " + fserviceStr;
   }
   
   if(ftagName != "")
   {
      ftagName = TrimStr(ftagName);
      ftagStr = ftagName.replace(/\t/g, ",");
      if(filterInfo != "")
         filterInfo = filterInfo + " , <span class='body13grayb'>" + TEXT_QUERY_TAG + "</span>: " + ftagStr;
      else
        filterInfo = "<span class='body13grayb'>" + TEXT_QUERY_TAG + "</span>: " + ftagStr;
   }

   if(filterInfo != "")
      filterInfo = '(<span class="body13grayb">' + TEXT_QUERY_FILTER_INFO + "</span>" + filterInfo + ')';

   document.write(filterInfo);
}

/* decode "&quot;", "&#39;", "&#92;", "&lt;", "&gt;" */
function DecodeHtmlEntity(str)
{
   str = str.replace(/&quot;/g, "\"");
   str = str.replace(/&#34;/g, "\"");
   str = str.replace(/&#39;/g, "'");
   str = str.replace(/&#92;/g, "\\");
   str = str.replace(/&lt;/g, "<");
   str = str.replace(/&gt;/g, ">");
   return str;
}

function ChkSess()
{
   var conn = XMLHTTPInit();
   var result = XMLHTTPSyncResult(conn, _sessChkUrl + "?magno=" + Math.random());

   if(null != result)
   {
      if(("OK\r\n" == result.substr(0, 4) || "OK\n" == result.substr(0, 3))) 
         window.setTimeout(ChkSess, 60000);
      else if(("ER\r\n" == result.substr(0, 4) || "ER\n" == result.substr(0, 3))) 
         location.href = param['CGIPrefix'] + "admin/sessmgr.cgi?act=logout";
   }
   return;
}
function ListHistory()
{   
   var i;
   var encStr = EntityHtmlEncode(document.getElementById("historylist").value);
   
   _histList = encStr.split("\t");
   for(i = 0; i < _histList.length; i++)
   {
      document.write("&nbsp;<span class='result_sugterm' onclick=HistSubmit(");
      document.write(i);
      document.write(")>"+_histList[i]+"</span>&nbsp;");
   }
}

function HistSubmit(idx)
{
    var qStr = document.getElementById("topqstr");
    qStr.value = DecodeHtmlEntity(_histList[idx]);
    NewQuery('top');
}

function ShowEditTag(dbName, recId)
{
   var objForm = document.seltag;
   var objRecDiv = document.getElementById("div_"+dbName+"_"+recId);
   var recInfo;
   var child;
   var x = document.getElementsByTagName("BODY")[0].clientWidth / 2 - 160;
   var y = document.getElementsByTagName("BODY")[0].clientHeight / 2 - 80;
   
   if(document.all)
      e = event;
   
   x = document.getElementsByTagName("BODY")[0].scrollLeft + x;
   y = document.getElementsByTagName("BODY")[0].scrollTop + y;

   /* close the other drag windows first */
   if(null != _curDragObj)
      _curDragObj.Hide();
   _curDragObj = _newEditTagObj;
   
   /* set value to seltag form */
   recInfo = objRecDiv.innerHTML.split(" ");
   objForm.db.value = recInfo[0];
   objForm.rid.value = recInfo[1];

   /* set all tag element */
   SetAllTagElement();
   
   /* parse tag */
   ParseTagList(dbName, recId);

   _newEditTagObj.Enable();
   _newEditTagObj.Show(x, y);
}

function SetAllTagElement()
{
   var objForm = document.seltag;
   var alltag = _tags;
   var tmpOpt;
   var i;

   /* clear all element at last time */
   objForm.allelement.length = 0;
   
   /* add all dbs into all element */
   for(i = 0; i < param['tagCnt']; i++)
   {
      tmpOpt = new Option(_tags[i][1], _tags[i][0]);
      tmpOpt.title = _tags[i][2];
      objForm.allelement.options[objForm.allelement.length] = tmpOpt;
   }
}

function ParseTagList(dbName, recId)
{
   var obj = document.getElementById("rec_"+dbName+"_"+recId);
   var objForm = document.seltag;
   var tags = obj.childNodes;
   var i;
   var tmpOpt;
   var name;
   
   /* clear all element at last time */
   objForm.tagelement.length = 0;

   for(i = 0; i < tags.length; i++)
   {
      if(tags[i].nodeType == 1)
      {
         name = tags[i].childNodes[0].innerHTML;
         tmpOpt = new Option(name, tags[i].id);
         tmpOpt.title = tags[i].title;
         objForm.tagelement.options[objForm.tagelement.length] = tmpOpt;
         RemoveOption(objForm.allelement, tags[i].id);
      }
   }
}

function RemoveOption(object, value)
{
   var i;
   
   for(i = object.length-1; i >= 0 ; i--)
   {
      if(value == object.options[i].value)
      {
         object.remove(i);
         return;
      }
   }
}

function AddToElement(elem, opt)
{
   var objForm = document.seltag;
   var mark = 0;
   var i, j;
   
   for(i = 0; i < param['tagCnt']; i++)
   {
      if(_tags[i][0] == parseInt(opt.value))
      {
         mark = 1;
         break;
      }
   }
   
   /* search the following tags */
   if(mark != 0)
   {
      mark = 0;
      for( ; i < param['tagCnt']; i++)
      {
         for(j = 0; j < elem.length; j++)
         {
            if(_tags[i][0] ==  elem.options[j].value)
            {
               mark = 1;
               /* add into right position */
               try
               {
                  elem.add(opt, elem.options[j]);
               }
               catch(ex)   /* for IE */
               {
                  elem.add(opt, j);
               }

               return;
            }
         }
      }
   }
   
   /* add at end */
   if(mark == 0)
      elem.options[elem.length] = opt;
   
   return;
}

function RemoveTagElement()
{
   var objForm = document.seltag;
   var i;
   
   for(i = objForm.tagelement.length-1; i >= 0 ; i--)
   {
      if(objForm.tagelement.options[i].selected)
      {
         /* add to all element */
         tmpOpt = new Option(objForm.tagelement.options[i].text, objForm.tagelement.options[i].value);
         tmpOpt.title = objForm.tagelement.options[i].title;
         AddToElement(objForm.allelement, tmpOpt);
         /* remove from tag element */
         objForm.tagelement.options[i] = null;
      }
   }
}

function AddTagElement()
{
   var objForm = document.seltag;
   var count;
   var i;

   count = objForm.tagelement.length;
   
   for(i = objForm.allelement.length-1; i >= 0 ; i--)
   {
      if(objForm.allelement.options[i].selected)
      {
         count++;
         /* check exceed max taglist num or not */
         if(count > MAX_TAG_LIST_CNT)
         {
            alert(ERR_QUERY_TAGLIST_EXCEED);
            return;
         }

         /* add to tag element */
         tmpOpt = new Option(objForm.allelement.options[i].text, objForm.allelement.options[i].value);
         tmpOpt.title = objForm.allelement.options[i].title;
         AddToElement(objForm.tagelement, tmpOpt);
         /* remove from all element */
         objForm.allelement.options[i] = null;
      }
   }
}

function SelectTagOk()
{
   var objForm = document.seltag;
   var objRecTag = document.getElementById("rec_"+objForm.db.value+"_"+objForm.rid.value);
   var tagList = new String();
   var url;
   var data;
   var tagCnt;
   var tagTmps;
   var tagId;
   var tagIsHand;
   var tagName;
   var tagDesc;
   var err;
   var errMsg;
   var moreTagObj;
   var newObj;
   var editTag;
   var divObj;
   var i;

   for(i = 0; i < objForm.tagelement.length; i++)
      tagList += objForm.tagelement.options[i].value + "\t";
   
   url = param['CGIPrefix'] + "search/taghand.cgi?magno=" + Math.random();
   data = "db=" + objForm.db.value + "&rid=" + objForm.rid.value + "&tag=" + tagList;

   /* use ajax to send request */
   var conn = XMLHTTPInit( );
   var result = XMLHTTPSyncResult(conn, url, data);
   
   if("OK\nOK\n" == result.substr(0, 6))
   {
      resultTmp = result.substr(6);
      resultTmps = resultTmp.split("\n");
      
      /* get tag count */
      tagCnt = parseInt(resultTmps[0]);
      
      objRecTag.innerHTML = "";
      for(i = 1; i <= tagCnt; i++)
      {
         tagTmps = resultTmps[i].split("\t");
         tagId = tagTmps[0];
         tagIsHand = parseInt(tagTmps[1]);
         tagName = tagTmps[2];
         tagDesc = tagTmps[3];
         
         /* add tag to page */
         objRecTag.innerHTML += '<span id="' + tagId + '" name="' + tagName + '" title="' + tagDesc 
            + '" onclick="QueryTag(' + tagId + ')'
            + '" class="' + ((tagIsHand == 1) ? 'tag_list_hand' : 'tag_list_auto')
            + '" style="display:' + ((i <= param['tagListNum']) ? '': 'none') + '">'
            + '<a href="#' + objForm.db.value + '_' + tagId + '">' + tagName + '</a></span>';
      }

      /* handle moreTag obj */
      moreTagObj = document.getElementById("moretag_"+ objForm.db.value +"_"+ objForm.rid.value);
      if(tagCnt > param['tagListNum'])
      {
         if(moreTagObj == null)
         {
            /* new more tag "<<<" before "edit" */
            newObj = document.createElement('span');
            newObj.id = "moretag_"+ objForm.db.value +"_"+ objForm.rid.value;
            newObj.className = "category_link";
            editTag = document.getElementById("edittag_"+ objForm.db.value +"_"+ objForm.rid.value);
            divObj = document.getElementById("div2_"+ objForm.db.value +"_"+ objForm.rid.value);
            divObj.insertBefore(newObj, editTag);
         }
         OpMoreTagList(objForm.db.value, objForm.rid.value, false);
      }
      else
      {
         if(moreTagObj != null)
            moreTagObj.parentNode.removeChild(moreTagObj);
      }
         
   }
   else if("ER\nER\n" == result.substr(0, 6))
   {
      resultTmp = result.substr(6);
      resultTmps = resultTmp.split("\n");
      
      err = parseInt(resultTmps[0]);
      switch(err)
      {
         case _err_system:
            errMsg = ERR_QUERY_TAG_SYSTEM;
            break;
         case _err_no_priv:
            errMsg = ERR_QUERY_TAG_NOPRIV;
            break;
         case _err_args:
            errMsg = ERR_QUERY_TAG_ARGS;
            break;
         default:
            errMsg = ERR_QUERY_TAG_FAILED;
      }
      alert(errMsg);
   }
   else
      alert(ERR_QUERY_TAG_FAILED);
   
   _newEditTagObj.Hide();
}

function OpMoreTagList(dbName, recId, fshow)
{
   var obj = document.getElementById("moretag_"+dbName+"_"+recId);
   
   if(fshow == true)
   {
      ShowMoreTagList(dbName, recId);
      obj.innerHTML = '<img alt="' + TEXT_QUERY_TAG_LIST_FOLD + '" src="' + param["PagePrefix"] + 'img/tag_hide.gif" align="absmiddle">';
      obj.onclick = function(){OpMoreTagList(dbName, recId, false)};
   }
   else
   {
      HideMoreTagList(dbName, recId);
      obj.innerHTML = '<img alt="' + TEXT_QUERY_TAG_LIST_UNFOLD + '" src="' + param["PagePrefix"] + 'img/tag_more.gif" align="absmiddle">';
      obj.onclick = function(){OpMoreTagList(dbName, recId, true)};
   }
}

function HideMoreTagList(dbName, recId)
{
   var obj = document.getElementById("rec_"+dbName+"_"+recId);
   var tags = obj.childNodes;
   var count = 0;
   var i;
   
   for(i = 0; i < tags.length; i++)
   {
      if(tags[i].nodeType == 1)
      {
         count++;
         if(count > param['tagListNum'])
         {
            tags[i].style.display = "none";
         }
      }
   }
}

function ShowMoreTagList(dbName, recId)
{
   var obj = document.getElementById("rec_"+dbName+"_"+recId);
   var tags = obj.childNodes;
   var count = 0;
   var i;
   
   for(i = 0; i < tags.length; i++)
   {
      if(tags[i].nodeType == 1)
      {
         count++;
         if(count > param['tagListNum'])
         {
            tags[i].style.display = "";
         }
      }
   }
}

function HideMoreTagGroup()
{
   var obj = document.getElementById("tagGroupTable");
   var objMore = document.getElementById("tagGroupMore");
   var tagGroups = obj.rows;
   var count = 0;
   var i;

   for(i = 0; i < tagGroups.length; i++)
   {
      if(tagGroups[i].nodeType == 1)
      {
         count++;
         if(count > param['tagGpShowCnt'])
         {
            tagGroups[i].style.display = "none";
         }
      }
   }
   
   objMore.innerHTML = '<img alt="' + TEXT_QUERY_TAG_LIST_UNFOLD + '" src="'+ param['PagePrefix'] + 'img/group_down.gif" align="absmiddle">';
   objMore.onclick = function(){ShowMoreTagGroup()};
}

function ShowMoreTagGroup()
{
   var obj = document.getElementById("tagGroupTable");
   var objMore = document.getElementById("tagGroupMore");
   var tagGroups = obj.rows;
   var count = 0;
   var i;

   for(i = 0; i < tagGroups.length; i++)
   {
      if(tagGroups[i].nodeType == 1)
      {
         count++;
         if(count > param['tagGpShowCnt'])
         {
            tagGroups[i].style.display = "";
         }
      }
   }
   
   objMore.innerHTML = '<img alt="' + TEXT_QUERY_TAG_LIST_FOLD + '" src="'+ param['PagePrefix'] + 'img/group_up.gif" align="absmiddle">';
   objMore.onclick = function(){HideMoreTagGroup()};
}

function QueryTag(tagId)
{
   var dbs;

   dbs = document.forms["query_form"].dbs.value;
   location.href = param['CGIPrefix'] + "search/query.cgi?dbs=" + dbs + "&tag=" + tagId;
}

function LogWebUrl(cgiPath)
{
   var conn = XMLHTTPInit();
   var result = XMLHTTPSyncResult(conn, cgiPath + "&magno=" + Math.random());

   return true;
}
//-->


