<html xmlns:sds=""><!-- #BeginTemplate "/Templates/search_page.dwt" -->
<head>
<!-- #BeginEditable "doctitle" --> 
<title>Index Databases</title>
<!-- #EndEditable --> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<link rel="stylesheet" href="search.css"/>
<script language="JavaScript" src="search_errors.js"></script>
<script language="VBScript" src="vb_utils.js"></script>
<script language="JavaScript" src="external_io.js"></script>
<script language="JavaScript" src="ui_utils.js"></script>
<script language="JavaScript" src="math_utils.js"></script>
</head>

<body bgcolor="#FFFFFF" style="background-image:  url(Images/Branding.gif); background-repeat:no-repeat; background-position:center center">
<!-- #BeginEditable "Page%20Script%20Top" -->
<script language="JavaScript" src="search_index.js"></script>
<script language="JavaScript" src="system_io.js"></script>

<script language="JavaScript">
var MAX_NUM_OF_DATABASES = 20;
var MAX_NUM_OF_INDEX_CHARS = 24;
var MAX_FILE_PATH_LENGTH = 50;

var database_name = "";
var suggested_database_name = "New Database";
var enable_create = true;

function UpdateDatabaseDisplay()
{
  SetListItems(document.all.database_list, GetIndexNames());
}

function UpdateButtonDisplay()
{
  database_name = GetListBox(document.all.database_list);
  
  if(IsIndexing())
  {
    document.all.create_button.disabled = true;
    document.all.edit_button.disabled = true;
	document.all.delete_button.disabled = true;

    document.all.index_all_button.disabled = true;
    document.all.index_selected_button.disabled = true;
	document.all.stop_button.disabled = false;
        document.all.stop_button.focus();
  }
  else
  {
    document.all.create_button.disabled = false; 
    document.all.create_button.focus();
	
    if(database_name == "")
    {
      document.all.edit_button.disabled = true;
	  document.all.delete_button.disabled = true;
    }
    else
    {
      document.all.edit_button.disabled = false;
	  document.all.delete_button.disabled = false;
    }

    if(MATH_Gt(GetNumOfIndexes(), 0))
      document.all.index_all_button.disabled = false;
	else
      document.all.index_all_button.disabled = true;
	
	if(database_name == "") 
      document.all.index_selected_button.disabled = true; 
	else
      document.all.index_selected_button.disabled = false; 
	
    document.all.stop_button.disabled = true;
  }
}

function OnLoadPage()
{
  UpdateDatabaseDisplay();
  UpdateButtonDisplay();
  
  try
  {
	AttachIndexHandler(document.all.handler, null);
  }
  catch(e)
  {
    alert("error attaching index handler: " + e.number + " - " + e.description);
  }
  
  document.all.indexing_status.readOnly = true;
}

function OnUnloadPage()
{  
  try
  {
    // detach index handler
	// (for dtSearch, this is previously stored callback)
	DetachIndexHandler(document.all.handler);
  }
  catch(e)
  {
    alert("error detaching index handler: " + e.number + " - " + e.description);
  } 
}

function RunProcessStarted()
{
  enable_create = true;
}

function CreateDatabase()
{
  // cancel default processing of this event first
  event.returnValue = false;
  
  if(!enable_create)
    return;
  
  if(MATH_GtEq(GetNumOfIndexes(), MAX_NUM_OF_DATABASES))
  {
    alert("Maximum number of index databases already exist.\n" +
          "Please consider deleting existing one or editing existing one.\n");
    return;
  }
 
  try
  {
    // run Search Wizard process to create new Index Database
    var process = "SDSearchWizard.exe";
	var parameters = "/config /n" + "\"" + suggested_database_name + "\"";
    RunProcess(process, parameters);
	
	// disable Create Button to avoid multiple wizard to be launched.
	// After 2 sec. enable Create Button assuming wizard has been launched.
	// Attempting to launch another one, then, is detected by wizard itself.
	enable_create = false;
	setTimeout("RunProcessStarted()", 2000);
  }
  catch(e)
  {
    alert("Error: Failed to create index: " + e.number + " - " + e.description);
  }
}

function EditDatabase()
{
  // find out which index database to be edited
  var selected_option = GetListBox(document.all.database_list);
  if(selected_option == "")
    return;
  
  // then load individual index database page with appropriate data populated
  location.href = "individual_index_database.htm?" + escape(selected_option);
}

function DeleteDatabase()
{
  // find out which index database to be deleted
  var selected_option = GetListBox(document.all.database_list);
  if(selected_option == "")
    return;
	
  // confirm the user of his/her intent
  var yes = confirm("Do you really want to delete the Index Database '" +
                  selected_option + "'?");
  if(yes)
  {
	var num_items = GetNumOfListItems(document.all.database_list);
    var item_index = GetListSelection(document.all.database_list);
	
	// if selected (and will be deleted) one is the last one,
	// select new last one in the list
	if(item_index == (num_items - 1))
	  item_index--;

    try
    {
	  DeleteIndex(selected_option);
    }
    catch(e)
    {
      alert("Error: Failed to delete index: " + e.number + " - " + e.description);
    }
	
	SetListSelection(document.all.database_list, item_index);
  }
}

function OnIndexAllButtonClick()
{
  // build all existing indexes
  BuildAllIndexes();  
  
  // update enable/disable states of buttons
  UpdateButtonDisplay();
}

function OnIndexSelectedButtonClick()
{ 
  if(database_name == "")
    return;
	
  SetActiveIndex(database_name);
   
  // incrementally build index
  BuildIndexIncremental();
  
  // update enable/disable states of buttons
  UpdateButtonDisplay();
}

function OnStopButtonClick()
{
  document.all.stop_button.disabled = true;    

  if(IsIndexing())
    StopIndexing();
}

// order of calls in this function is significant.
// Need to be the exact order.
function OnEndCreateIndex(index, status)
{
  UpdateDatabaseDisplay();

  // only when Database is successfully created
  // (i.e. not cancelled)
  if(status == true)
  {
    SetListBox(document.all.database_list, index);
    UpdateButtonDisplay();
  }
}

function DisplayIndexingStatus(text)
{
  document.all.indexing_status.value = text;
}

// trancate text.  if text is larger than
// specified length, return "partial_text..."
function TrancateText(text, length)
{
  var subtext = "";
  
  if(MATH_LtEq(text.length, length))
    subtext = text;
  else
  {
    subtext = text.slice(0, length - 3);
	subtext += "...";
  }
	
  return subtext;
}

// make the entire file path fits into specified length.
//
// 1. if the entire file path fits, leave it alone.
// 2. if partial path fits, return "folder\...\file"
// 3. if neither of 1 and 2, return "partial_file_name..."
//
function TrancateFilePath(folder, file, length)
{
  var file_path = "";
  var folder_len = folder.length;
  var file_len = file.length;
  var num_chars = folder_len + file_len + 1;
  
  // if the entire path fits...
  if(MATH_Lt(num_chars, length))
    file_path = folder + "\\" + file;
  else
  {
    // traverse from end to beginning of folder string
	// to find '\' character
    var pos = folder_len - 1;
	while(MATH_GtEq(pos, 0))
	{
	  // if up to this '\' of path plus file name fits...
	  if(MATH_And((folder.charAt(pos) == '\\'), MATH_Lt(pos + file_len, length - 3)))
	  {
	    file_path = folder.slice(0, pos + 1) + "...\\" + file;
		break;
	  }	  
	  pos--;
	}
	
	// folder name is too long, did not fit,
	// so trancate file name to fit
	if(MATH_Lt(pos, 0))
	  file_path = TrancateText(file, length);
  }
  
  return file_path;
}
</script>

<script language="JavaScript" for="window" event="onload()">
OnLoadPage();
</script>

<script language="JavaScript" for="window" event="onunload()">
OnUnloadPage();
</script>

<script language="JavaScript" for="create_button" event="onclick()">
CreateDatabase();
</script>

<script language="JavaScript" for="edit_button" event="onclick()">
if(!IsIndexing())
  EditDatabase();
</script>

<script language="JavaScript" for="delete_button" event="onclick()">
DeleteDatabase();
UpdateButtonDisplay();
</script>

<script language="JavaScript" for="database_list" event="onchange()">
UpdateButtonDisplay();
</script>

<script language="JavaScript" for="database_list" event="ondblclick()">
if(!IsIndexing())
  EditDatabase();
</script>

<script language="JavaScript" for="index_all_button" event="onclick()">
OnIndexAllButtonClick();
</script>

<script language="JavaScript" for="index_selected_button" event="onclick()">
OnIndexSelectedButtonClick();
</script>

<script language="JavaScript" for="stop_button" event="onclick()">
OnStopButtonClick();
</script>

<script language="JavaScript" for="handler" event="OnEndCreateIndex(index, status)">
OnEndCreateIndex(index, status);
</script>

<script language="JavaScript" for="handler" event="OnEndDeleteIndex(index, status)">
UpdateDatabaseDisplay();
</script>

<script language="JavaScript" for="handler" event="OnStartIndexing(index)">
DisplayIndexingStatus("Started updating index database '" + index + "'.");
</script>

<script language="JavaScript" for="handler" event="OnStartIndexFile(index, folder, file, percent)">
DisplayIndexingStatus("Indexing " + TrancateFilePath(folder, file, MAX_FILE_PATH_LENGTH));
</script>

<script language="JavaScript" for="handler" event="OnEndIndexFile(index, folder, file, percent)">
DisplayIndexingStatus("Indexed " + TrancateFilePath(folder, file, MAX_FILE_PATH_LENGTH));
</script>

<script language="JavaScript" for="handler" event="OnEndIndexing(index, num_files)">
if(num_files > 0)
  DisplayIndexingStatus("Completed to index '" + index + "'.  " + num_files + " files indexed.");
else
  DisplayIndexingStatus("Index '" + index + "': no new files are indexed.");
</script>

<script language="JavaScript" for="handler" event="OnIndexFileOpenFail(index, folder, file)">
DisplayIndexingStatus("Failed to open " + TrancateFilePath(folder, file, MAX_FILE_PATH_LENGTH - 5));
</script>

<script language="JavaScript" for="handler" event="OnCheckIndexFiles(index)">
DisplayIndexingStatus("Checking index " + index + " for files.");
</script>

<script language="JavaScript" for="handler" event="OnMergeInProgress(index)">
DisplayIndexingStatus("Merging index " + index + ".");
</script>

<script language="JavaScript" for="handler" event="OnCompressInProgress(index)">
DisplayIndexingStatus("Compressing index " + index + ".");
</script>

<script language="JavaScript" for="handler" event="OnStartUpdateIndexes(indexes, num_indexes)">
// update enable/disable states of buttons
UpdateButtonDisplay();

DisplayIndexingStatus("Started to index '" + TrancateText(indexes, MAX_NUM_OF_INDEX_CHARS) + "'");
</script>

<script language="JavaScript" for="handler" event="OnEndUpdateIndexes(indexes, num_indexes, num_files, status)">
if(MATH_Gt(num_files, 0))
{
  DisplayIndexingStatus("Completed to index '" +
    TrancateText(indexes, MAX_NUM_OF_INDEX_CHARS) + "'.  " +
  	num_files + " files in total are indexed.");
}
else
{
  var index_str;
  if(num_indexes == 1)
    index_str = "Index";
  else
    index_str = "Indexes";
	
  DisplayIndexingStatus(index_str + " '" +
    TrancateText(indexes, MAX_NUM_OF_INDEX_CHARS) + "': no new files are indexed.");
}

// update enable/disable states of buttons
UpdateButtonDisplay();
</script>

<script language="JavaScript" for="handler" event="OnErrorIndexing(index, code, text, arg1, arg2)">
DisplayIndexingStatus("Error indexing '" + index + "': " + text);

// display alert box to indicate severe Indexing errors
// (severe error means Indexing for that Index DB is terminated
// without updating it).  If error is not "severe", no alert box
// will be displayed.
DisplaySevereIndexError(index, code);
</script>

<object id="handler" classid="CLSID:0AAD0735-3F61-42EF-B35B-7072A410129B" width="0" height="0"></object>
<!-- #EndEditable --> 

<!-- #BeginEditable "Top%20Area" --><!-- #EndEditable -->

<table width="100%" border="0" cellspacing="1" cellpadding="1" bgcolor="#CCCCCC"
  vspace="0" hspace="0" height="24">
  <tr> 
    <td width="6%">
	  <a id="home_link" href="default.htm">
	    <img src="Images/search_home.bmp" border="0"
		  title="Back to Search Home" width="20" height="20"
		  style="position:relative; top:2;"/> 
      </a>
	</td>
    <td> 
      <div id="page_title_area" align="center">
	  <!-- #BeginEditable "Title" --><b>Index Databases</b><!-- #EndEditable -->
	  </div>
    </td>
    <td width="180"> 
      <div id="page_link_area" align="right">
	  <!-- #BeginEditable "Links" -->
	  <a href="indexing_schedule.htm">Indexing Schedule</a><!-- #EndEditable -->
	  </div>
    </td>
  </tr>
</table>
<!-- #BeginEditable "Work%20Area" -->
<blockquote> 
  <blockquote>
      <fieldset><legend>
      Currently Available Databases</legend> 
      <table width="99%" border="0" cellspacing="5" cellpadding="5" height="56">
        <tr> 
          <td width="50%"> 
            <select name="database_list" size="5">
            </select>
          </td>
          <td width="50%"> 
            <p align="center"> 
              <input type="button" name="create_button" value="Create"/>
            </p>
            <p align="center"> 
              <input type="button" name="edit_button" value="  Edit  "/>
            </p>
            <p align="center"> 
              <input type="button" name="delete_button" value="Delete"/>
            </p>
          </td>
        </tr>
      </table>
	  </fieldset>
  </blockquote>
</blockquote>
<blockquote> 
  <blockquote> <fieldset><legend>Indexing</legend> 
    <table width="95%" border="0" cellspacing="5" cellpadding="5">
      <tr> 
        <td colspan="3">Status:
          <input type="text" name="indexing_status" size="90"/>
        </td>
      </tr>
      <tr> 
        <td width="33%"> 
          <div align="center"> 
            <input type="button" name="index_all_button" value="Index All"/>
          </div>
        </td>
        <td width="33%"> 
          <div align="center"> 
            <input type="button" name="index_selected_button" value="Index Selected"/>
          </div>
        </td>
        <td width="33%"> 
          <div align="center"> 
            <input type="button" name="stop_button" value="  Stop  "/>
          </div>
        </td>
      </tr>
    </table>
    </fieldset> </blockquote>
</blockquote>
<!-- #EndEditable -->

<!-- #BeginEditable "Page%20Script%20Bottom" --> 
<!-- #EndEditable --> 
</body>
<!-- #EndTemplate --></html>
