<!--
var MAX_QFIELD_ROW_CNT = 6;
var _curDate = "";

function InitAdv( )
{
   var objForm = document.forms["query_form"];
   var sel;
   var sortbyField;
   var i;
   
   /* check default index */
   if(HasDbSelect("") == false)
   {
      /* has any db item ? */
      if(null != document.getElementById("indexname_0"))
         document.getElementById("indexname_0").checked = true;
   }
   
   /* set direction */
   sel = objForm.direction;
   for(i = 0; i < sel.options.length; i++)
   {
      if(sel.options[i].value == param["Direction"])
         sel.options[i].selected = true;
   }

   /* set sortby field */
   sortbyField = objForm.sortby;
   for(i = 0; i < sortbyField.options.length; i++)
   {
      if(sortbyField.options[i].value == param["SortBy"])
         sortbyField.options[i].selected = true;
   }
   
   /* set n */
   sel = objForm.n;
   for(i = 0; i < sel.options.length; i++)
   {
      if(sel.options[i].value == param["NRec"])
         sel.options[i].selected = true;
   }

   /* set calendar time */
   document.getElementById("filterdatefrom").value = cal.Value( );
   document.getElementById("filterdateto").value = cal.Value( );
   
   /* diatango, 060324, show the specify date range */
   var dateRangeObj = document.getElementById("filterdate");
   if(dateRangeObj.options[dateRangeObj.selectedIndex].value == -1)
   {
      document.getElementById("daterange").style.display = "";
      if(document.getElementById("userfilterdatefrom").value != "")
         document.getElementById("filterdatefrom").value = document.getElementById("userfilterdatefrom").value;
      if(document.getElementById("userfilterdateto").value != "")
         document.getElementById("filterdateto").value = document.getElementById("userfilterdateto").value;
   }   
}

function InitAdvField( )
{
   var objForm = document.forms["query_form"];
   var sel;
   var i;
   
   /* set direction */
   sel = objForm.direction;
   for(i = 0; i < sel.options.length; i++)
   {
      if(sel.options[i].value == param["Direction"])
         sel.options[i].selected = true;
   }

   /* set sortby field */
   sortbyField = objForm.sortby;
   for(i = 0; i < sortbyField.options.length; i++)
   {
      if(sortbyField.options[i].value == param["SortBy"])
         sortbyField.options[i].selected = true;
   }
   
   /* set n */
   sel = objForm.n;
   for(i = 0; i < sel.options.length; i++)
   {
      if(sel.options[i].value == param["NRec"])
         sel.options[i].selected = true;
   }

   /* set calendar time */
   document.getElementById("filterdatefrom").value = cal.Value( );
   document.getElementById("filterdateto").value = cal.Value( );
   
   /* diatango, 060324, show the specify date range */
   var dateRangeObj = document.getElementById("filterdate");
   if(dateRangeObj.options[dateRangeObj.selectedIndex].value == -1)
   {
      document.getElementById("daterange").style.display = "";
      if(document.getElementById("userfilterdatefrom").value != "")
         document.getElementById("filterdatefrom").value = document.getElementById("userfilterdatefrom").value;
      if(document.getElementById("userfilterdateto").value != "")
         document.getElementById("filterdateto").value = document.getElementById("userfilterdateto").value;
   }   
}

function InitSimple( )
{
   var list = document.getElementById("indexlist");
   
   /* force show index list ? */
   if(param["ShowDbList"] == "0")
      list.style.display = "none";
   else
      list.style.display = "";
   
   /* check default index */
   if(HasDbSelect("") == false)
   {
      /* has any db item ? */
      if(null != document.getElementById("indexname_0"))
         document.getElementById("indexname_0").checked = true;
   }
   
   document.getElementById("qstr").focus( );
}


function ShowIndex( )
{
   var idxList = document.getElementById("indexlist");
   if(idxList.style.display == "none")
      idxList.style.display = "";
   else
      idxList.style.display = "none";
}

function ShowQueryBox(ip, port)
{
   var querybox = document.getElementById("querybox");
   var valueStr = "";   

   if(querybox.style.display == "none" && 
      (valueStr = GenExportFormStr(ip, port)) != "")
   {
      document.getElementById("exportForm").value = valueStr;
      querybox.style.display = "";
   }
   else
      querybox.style.display = "none";
}


function SelDateRange(sel)
{
   var value;
   var daterange = document.getElementById("daterange");

   value = sel.options[sel.selectedIndex].value;
   if(value == -1) 
      daterange.style.display = "";
   else 
      daterange.style.display = "none";
}
                                                                 

function FillFromDate(dateStr)
{
   document.getElementById("filterdatefrom").value = dateStr;
   return true;
}

function FillToDate(dateStr)
{
   document.getElementById("filterdateto").value = dateStr;
   return true;
}

function ShowCalendar(where, e, dateStr)
{
   var year = parseInt(dateStr.substr(0,4), 10);
   var mon  = parseInt(dateStr.substr(5,2), 10);
   var day  = parseInt(dateStr.substr(8,2), 10);

   /* get mouse pos */
   if(!e) var e = window.event;
   var posx = 0;
   var posy = 0;
   if(e.pageX || e.pageY)
   {
      posx = e.pageX;
      posy = e.pageY;
   }
   else if(e.clientX || e.clientY)
   {
      posx = e.clientX+document.body.scrollLeft;
      posy = e.clientY+document.body.scrollTop;
   }

   if(where == "from")
      cal.Reset("FillFromDate", year, mon, day);
   else
      cal.Reset("FillToDate", year, mon, day);
   
   /* move calendar and show */
   cal.drag.Enable( );
   cal.Show(posx, posy);
}

function SubmitSimple()
{
   var objForm = document.query_form;
   var realForm = document.real_form;
   var dbList = new String();
   var qRe = /[\t]/g;

   /* prepare db list */
   realForm.dbs.value = GenDbList("");
   realForm.descps.value = GenDbDescpList("");
   if(realForm.dbs.value == "")
   {
      alert(MSG_QPAGE_NO_DB);
      return false;
   }
   
   /* prepare query */
   var qStr = document.getElementById("qstr");
   if(TrimStr(qStr.value) == "")
   {
      alert(MSG_QPAGE_NO_QUERY);
      return false;
   }
   if(qStr.value.length == 1)
   {
      alert(MSG_QPAGE_SINGLE_TERM);
      return false;
   }
   if(qStr.value.search(qRe) != -1)
   {
      alert(MSG_QPAGE_TAB_TERM);
      return false;
   }
   
   /* check if there is invalid character: ':'*/
   /*
   if(qStr.value.indexOf(':') >= 0)
   {
      alert(MSG_QPAGE_INVALID_CHAR);
      return false;
   }
   */
   
   realForm.q.value = qStr.value;

   realForm.submit();
   return true;
}

function SubmitAdv()
{
   var objForm = document.query_form;
   var realForm = document.real_form;
   var dbList = new String( );
   var qRe = /[\t]/g;

   /* init */
   realForm.q.value = "";
   realForm.dbs.value = "";
   realForm.fdate.value = "";
   realForm.fsize.value = "";
   realForm.fpath.value = "";
   
   /* prepare db list */
   realForm.dbs.value = GenDbList("");
   realForm.descps.value = GenDbDescpList("");
   if(realForm.dbs.value == "")
   {
      alert(MSG_QPAGE_NO_DB);
      return false;
   }
   
   /* prepare query */
   var qStr = document.getElementById("qstr");
   if(TrimStr(qStr.value) == "")
   {
      alert(MSG_QPAGE_NO_QUERY);
      return false;
   }
   if(qStr.value.length == 1)
   {
      alert(MSG_QPAGE_SINGLE_TERM);
      return false;
   }
   if(qStr.value.search(qRe) != -1)
   {
      alert(MSG_QPAGE_TAB_TERM);
      return false;
   }
   /* check if there is invalid character: ':'*/
   /*
   if(qStr.value.indexOf(':') >= 0)
   {
      alert(MSG_QPAGE_INVALID_CHAR);
      return false;
   }
   */

   realForm.q.value = qStr.value;
   
   /* check date fileter */
   if(document.getElementById('filterdate').value !="0")
   {
      realForm.fdate.value = GenFilterDateStr();
      if("" == realForm.fdate.value)
         return false;
   }
   
   /* file size filter */
   realForm.fsize.value = GenFileSizeStr();
   realForm.sortby.value = objForm.sortby.options[objForm.sortby.selectedIndex].value;
   realForm.direction.value = objForm.direction.value;
   realForm.n.value = objForm.n.value;

   realForm.submit();
   return true;
}

function SubmitAdvField()
{
   var objForm = document.query_form;
   var realForm = document.real_form;
   var qStr = "";
   var fieldQStr = "";
   var nQueryField = 0;
   var optionObj;
   var count;
   var qRe = /[\t]/g;
   var fRange = false;

   /* init */
   realForm.q.value = "";
   realForm.fdate.value = "";
   realForm.fsize.value = "";
   realForm.fpath.value = "";
   realForm.rangeStr.value = "";
   
   /* prepare query */
   for(var i = 0; i < _nFieldCnt; i++)
   {
      fieldQStr = TrimStr(document.getElementById("field_"+i).value);
      if(fieldQStr != "")
      {
         if(fieldQStr.length == 1)
         {
            alert(MSG_QPAGE_SINGLE_TERM);
            return false;
         }
         /* check if there is invalid character: ':'*/
         /*
         if(fieldQStr.indexOf(':') >= 0)
         {
            alert(MSG_QPAGE_INVALID_CHAR);
            return false;
         }
         */
         if(document.getElementById("fieldIsInt_"+i).value == "1")
         {
            if(IsRangeString(fieldQStr) != true)
            {
               document.getElementById("fieldIsInt_"+i).value = "0";
               nQueryField++;
            }
         }
         else
            nQueryField++;
      }
   }
   
   count = 0;
   for(var i = 0; i < _nFieldCnt; i++)
   {
      fieldQStr = TrimStr(document.getElementById("field_"+i).value);
      if(fieldQStr != "")
      {
         fRange = false;
         if(TrimStr(document.getElementById("fieldValue_"+i).value) != "")
         {
            if(document.getElementById("fieldIsInt_"+i).value == "1")
            {
               fRange = true;
               realForm.rangeStr.value = realForm.rangeStr.value + 
                                         document.getElementById("fieldValue_" + i).value + "\t" +
                                         fieldQStr + ",";
            }
            else
            {
               count++;
               qStr += document.getElementById("fieldValue_"+i).value + ":" + "("+ fieldQStr + ")";
            }
         }
         else
         {
            count++;
            qStr +=  "("+ fieldQStr + ")";
         }
         
         if((fRange == false) && (count < nQueryField))
         {
            optionObj = document.getElementById("fieldOption_"+i);
            qStr += (optionObj.options[optionObj.selectedIndex].value == "and")?" & ":" | ";
         }
      }
   }

   qStr = TrimStr(qStr);
   if(qStr == "")
   {
      alert(MSG_QPAGE_NO_QUERY);
      return false;
   }
   if(qStr.length == 1)
   {
      alert(MSG_QPAGE_SINGLE_TERM);
      return false;
   }
   if(qStr.search(qRe) != -1)
   {
      alert(MSG_QPAGE_TAB_TERM);
      return false;
   }

   realForm.q.value = qStr;
   
   /* check date fileter */
   if(document.getElementById('filterdate').value !="0")
   {
      realForm.fdate.value = GenFilterDateStr();
      if("" == realForm.fdate.value)
         return false;
   }	 
   
   /* file size filter */
   realForm.fsize.value = GenFileSizeStr();
   realForm.sortby.value = objForm.sortby.options[objForm.sortby.selectedIndex].value;
   realForm.direction.value = objForm.direction.value;
   realForm.n.value = objForm.n.value;
   
   realForm.submit();
   return true;
}

function IsValidDate(dateStr)
{
   var tmpDate = dateStr.split("/");
   var tmpNum = 0;
  
   /* check parts */
   if(tmpDate.length != 3)
      return false;
   
   /* check yesr */
   tmpNum = parseInt(tmpDate[0], 10);
   if((isNaN(tmpNum)) || (tmpNum < 1))
      return false;
  
   /* check month */
   tmpNum = parseInt(tmpDate[1], 10);
   if(isNaN(tmpNum))
      return false;
   if((tmpNum < 1) || (tmpNum > 12))
      return false;

   /* check day */
   tmpNum = parseInt(tmpDate[2],10);
   if(isNaN(tmpNum))
      return false;
   if((tmpNum < 1) || (tmpNum > 31))
      return false;

   return true;
}

function GenFilterDateStr()
{
   var filterDateObj = document.getElementById("filterdate");
   var filterDateValue = filterDateObj.options[filterDateObj.selectedIndex].value;
   var filterDateStart = new String( );
   var filterDateEnd = new String( );
   
   /* user defined from to */
   if(filterDateValue == "-1")
   {
      var tmpDateStr = new String( );

      /* check */
      tmpDateStr = document.getElementById("filterdatefrom").value;
      if(IsValidDate(tmpDateStr) != true)
      {
         alert(ERR_QPAGE_DATE_FROM);
         return "";
      }
      filterDateStart = DateStripSlash(tmpDateStr);

      tmpDateStr = document.getElementById("filterdateto").value;
      if(IsValidDate(tmpDateStr) != true)
      {
         alert(ERR_QPAGE_DATE_TO);
         return "";
      }
      filterDateEnd = DateStripSlash(tmpDateStr);

      /* diatango, 060324, save the specfiy filter date info */
      document.getElementById("userfilterdatefrom").value = document.getElementById("filterdatefrom").value;
      document.getElementById("userfilterdateto").value = document.getElementById("filterdateto").value;
   }
   /* not all dates */
   else if(filterDateValue != "0")
   {
      var now = new Date( );
      var month = 0;
      var day = 0;
      var diffYear = 0;
      var newMonth = 0;

      month = now.getMonth( )+1;
      day = now.getDate( );
      filterDateEnd = now.getFullYear( ).toString( ) + ((month<=9)?"0":"") + month.toString( ) +
                      ((day<=9)?"0":"") + day.toString( );

      /* calc difference in years and months */
      diffYear = Math.floor(parseInt(filterDateValue)/12);
      month = parseInt(filterDateValue)%12;
      /* calc difference relative to now */
      if((now.getMonth( )-month) < 0)
      {
         diffYear += 1;
         newMonth = 11+now.getMonth( )-month;
      }
      else
         newMonth = now.getMonth( )-month;

      /* set year and month */
      if(diffYear > 0)
         now.setFullYear(now.getFullYear( )-diffYear);
      now.setMonth(newMonth);
      
      month = now.getMonth( )+1;
      day = now.getDate( );
      filterDateStart = now.getFullYear( ).toString( ) + ((month<=9)?"0":"") + month.toString( ) +
                        ((day<=9)?"0":"") + day.toString( );
   }
   return TrimStr(filterDateStart+" "+filterDateEnd);
}

function GenFileSizeStr()
{
   var sizeValue = new String( );
   var sizeUnitObj;
   var sizeUnitValue = new String( );
   var filterSizeStart = new String( );
   var filterSizeEnd = new String( );

   /* size over */
   sizeValue = document.getElementById("sizeover").value;
   sizeUnitObj = document.getElementById("sizeunitover");
   sizeUnitValue = sizeUnitObj.options[sizeUnitObj.selectedIndex].value;
   if((TrimStr(sizeValue) == "") || (sizeUnitValue == "0"))
      filterSizeStart = "0";
   else
      filterSizeStart = sizeUnitValue+sizeValue;

   /* size under */
   sizeValue = document.getElementById("sizeunder").value;
   sizeUnitObj = document.getElementById("sizeunitunder");
   sizeUnitValue = sizeUnitObj.options[sizeUnitObj.selectedIndex].value;
   if((TrimStr(sizeValue) == "") || (sizeUnitValue == "0"))
      filterSizeEnd = "0";
   else
      filterSizeEnd = sizeUnitValue+sizeValue;

   /* not both unlimited ? */
   if((filterSizeStart != "0") || (filterSizeEnd != "0"))
      return filterSizeStart + " " + filterSizeEnd;
   else 
      return "";

}

function GenFilePathStr()
{
   var filterPathValue = document.getElementById("filtername").value;
   
   if(TrimStr(filterPathValue) == "")
      return "";
   else   
   {
      var filterPathTypeObj;
      var filterPathType = new String( );
      filterPathTypeObj = document.getElementById("filternametype");
      filterPathType = filterPathTypeObj.options[filterPathTypeObj.selectedIndex].value;
      return filterPathType + ":" + filterPathValue;
   }
}

function GenExportFormStr(ip, port)
{
   var objForm = document.query_form;
   var valuerStr = "";
   var html = "";

   /* start form tag */
   html = '<form action="http://' + ip + ':' + port + param['CGIPrefix'] + 'search/query.cgi" method="get">\n' +
             '<input type="text" name="q" size="30"><input type="submit" value="search">\n';

   /* add dbs settings */
   if((valueStr = GenDbList("")) == "")
   {
      alert(MSG_QPAGE_NO_DB);
      return "";
   }
   else
      html += '<input type="hidden" name="dbs" value="' + valueStr  + '">\n';
      
   /* add descps settings */
   if((valueStr = GenDbDescpList("")) == "")
   {
      alert(MSG_QPAGE_NO_DB);
      return "";
   }
   else
      html += '<input type="hidden" name="descps" value="' + valueStr + '">\n';

   /* add fdate settings */
   if(document.getElementById('filterdate').value =="0")
      html += '<input type="hidden" name="fdate" value="">\n';
   else if((valueStr = GenFilterDateStr()) == "")
      return "";
   else
      html += '<input type="hidden" name="fdate" value="' + valueStr  + '">\n';

   /* add fsize settings */
   html += '<input type="hidden" name="fsize" value="' + GenFileSizeStr()  + '">\n';

   /* add fpath settings */
//   html += '<input type="hidden" name="fpath" value="' + GenFilePathStr()  + '">\n';

   /* add sortby settings */
   html += '<input type="hidden" name="sortby" value="' + 
           objForm.sortby.options[objForm.sortby.selectedIndex].value + '">\n';

   /* add direction settings */
   html += '<input type="hidden" name="direction" value="' + 
           objForm.direction.value  + '">\n';

   /* add n settings */
   html += '<input type="hidden" name="n" value="' + 
           objForm.n.value  + '">\n';
           
   /* add encoding */
   html += '<input type="hidden" name="enc" value="utf8">\n';

   /* add newquery flag */
   html += '<input type="hidden" name="newquery" value="1">\n';
   
   /* diatango, 080129, add uilang */
   if(param['uiLang'] != undefined)
      html += '<input type="hidden" name="uilang" value="' + param['uiLang']+ '">\n';
   else
      html += '<input type="hidden" name="uilang" value="">\n';

   /* add tmpl if specified */
   if(param["tmplSetName"] != "")
      html += '<input type="hidden" name="tmpl" value="' +
              param["tmplSetName"] + '">\n';

   /* end form tag */
   html += '</form>'

   return html;
}

function KeyPressSubmit(e, func)
{
   var nKey;
   
   /* 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 + "()");
      
   return;
}

function DateStripSlash(d)
{
   var da = new Array( );
   var res = new String( );

   da = d.split('/');

   for(var i = 0; i < da.length; i++)
      res += TrimStr(da[i]);

   return res;
}

function CorrectDate(str)
{
   var timeStr = "";
   var monthDay = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);

   if(null == str || (timeStr = TrimStr(str)) == "" ||
      timeStr.length != 10 || timeStr.charAt(4) != '/' ||
      timeStr.charAt(7) != '/')
      return _curDate;
   else
   {
      var year = parseInt(timeStr.substr(0,4), 10);
      var mon  = parseInt(timeStr.substr(5,2), 10);
      var day  = parseInt(timeStr.substr(8,2), 10);

      /* if the input time is invalid, then reset to default time */
      if(isNaN(year) || isNaN(mon) || isNaN(day) || year < 1970 ||
         mon < 1 || mon > 12)
         return _curDate;
      
      /* If the year is a leap year then the month day of Feb. is 29 days */
      if(((year % 4 == 0) && !(year % 100 == 0)) || (year % 400 == 0))
         monthDay[1] = 29;
       
      if(day < 1 || day > monthDay[mon-1])
         return _curDate;
      else
         timeStr = year + "/" + ((mon > 9) ? mon : "0" + mon) + "/" + ((day > 9) ? day : "0" + day);
         return timeStr;
   }
}

function HasDbSelect(type)
{
   var dbName = null;
   
   for(var i = 0; 
       null != (dbName = document.getElementById("indexname_"+type+i));
       i++)
   {
      if(dbName.checked == true)
         return true;
   }
   return false;
}

function GetCheckedXmlIndex()
{
   var dbName;

   for(var i = 0; 
       null != (dbName = document.getElementById("indexname_xml"+i));
       i++)
   {
      if(dbName.checked == true)
         return dbName.value; 
   }
   return "";
}

function GetDisplayRowCntStr()
{
   var res = new String();
   var counts = _searchPanel.qFieldDispRowCnt;
   var id2name = _searchPanel.qFieldTblNames;
   for(var i = 0; i < id2name.length; i++)
   {
      res += counts[id2name[i]];
      if(i+1 < id2name.length)
         res += ",";
   }
   return res;
}

function IsRangeString(str)
{
   var pos1;
   var pos2;
   var subStr;
   var fromStr;
   var toStr;
   
   pos1 = str.indexOf('[');
   pos2 = str.indexOf(']');
   
   if((pos1 < 0) || (pos2 < 0))
      return false;
   
   fromStr = str.substring(pos1+1,pos2);
   subStr = str.substring(pos2+1,str.length);
   
   pos1 = subStr.indexOf('[');
   pos2 = subStr.indexOf(']');
   
   if((pos1 < 0) || (pos2 < 0) || (pos2 != subStr.length-1))
      return false;
   toStr = subStr.substring(pos1+1,pos2);

   if((isNaN(fromStr) == false) && (isNaN(toStr) == false))
      return true;
   else
      return false;
}

-->

