<!--
// ==============================================================================
// File Name           : search_results.htm 
// Description         : Search Results
// Author(s)           : Baskaran V
// Date created        : 2009.01.05
// Last reviewed by    : 
// Last date of review : 
// Copyright           : (c) 2008, Sharp Software Development India Pvt Ltd., All rights reserved.
//                       All rights are reserved. Reproduction or transmission in whole or in part, in
//                       any form or by an means, electronic, mechanical or otherwise, is prohibited
//                       without the prior written consent of the copyright owner.

// ==============================================================================

-->

<html  xmlns:sds="">
<head>
	<title>Search Results</title>
	<style>
	@media all
	{
  		sds\:document_view {behavior:url(document_view.htc)}
	}
	</style>

	<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>
	<link href="style.css" rel="stylesheet" type="text/css" />
	<script defer type="text/javascript" src="pngfix.js"></script>
	<script type="text/javascript" src="Themes.js"></script>
</head>


<body leftmargin="0" rightmargin="0" topmargin="0" class="Centerbg">
<script language="JavaScript" src="io_utils.js"></script>
<script language="JavaScript" src="search.js"></script>
<script language="JavaScript" src="search_index.js"></script>
<script language="JavaScript" src="search_criteria.js"></script>
<script language="JavaScript" src="preferences.js"></script>
<script language="JavaScript" src="math_utils.js"></script>

<script language="JavaScript">
var search_succeeded = false;
var view_format = "summary"; // load the page in summary format
var sorted_by = "Match Score";
var sort_order = "descending"; // sort order, either ascending or descending
var new_search = "false";	// is this a new search or refreshing current search?
var current_start_doc = 1;
var NUM_OF_DOCS_IN_PAGE = 10;
var last_view_selected = null;

// search execution delay related variables
var search_timer;
var SEARCH_DELAY = 100;
var DISPLAY_DELAY = 50;
var REPOSITION_DELAY = 50;
</script>

<!-- all method calls specific to this page -->
<script language="JavaScript">
function DisplayResults(view_format, start, max_count)
{
  // if no documents are retrieved, do nothing
  if(!search_succeeded)
    return;
  	
  document.all.results_display_area.innerHTML =
    GetSearchResults(view_format, start, max_count);

  // disable or enable page navigation link
  SetPageEnableStates(start);

  // all Reposition() after brief delay to avoid
  // initially displaying page without icons/thumbnails
  setTimeout("Reposition()", REPOSITION_DELAY);
}

function Reposition()
{
  // display window with horizontal and vertical
  // position reset to top left
  window.scrollTo(0, 0);
}

function ClearResults()
{
  // clear all search results display to initial state
  search_succeeded = false;  
  document.all.results_display_area.innerHTML = "";
  DisableSearchOptions(sort_order);
}

function DisplayNoIndex()
{
  /*alert("No index database exists or selected for search.\n" +
    "Please create one before searching documents.");
	*/
	 alert(/*IDS_E_NOINDEX_1*/"No existe o no se ha seleccionado ninguna base de datos de ndices para la bsqueda.\n" +
    /*IDS_E_NOINDEX_2*/"Cree uno antes de buscar documentos. ");
}

function ReorderResults(field, order)
{
  SortSearchResults(field, order);
 
  // re-display the first page
  // Note: Fix for Bug #5340
  current_start_doc = 1;
  DisplayResults(view_format, current_start_doc, NUM_OF_DOCS_IN_PAGE);
}

// disables previous or next page navigation link
// depending on start document number
function SetPageEnableStates(start_doc_num)
{
  if(IsFirstPage(start_doc_num))
  {
    var prev = document.all.previous_page;
	for(var i = 0; MATH_Lt(i, prev.length); i++)
	  prev[i].disabled = "true";
  }
  
  if(IsLastPage(start_doc_num))
  {
    var next = document.all.next_page;
	for(var j = 0; MATH_Lt(j, next.length); j++)
	  next[j].disabled = "true";
  }
}

function IsFirstPage(doc_num_to_start)
{
  if(doc_num_to_start == 1)
    return true;
  return false;
}

function IsLastPage(doc_num_to_start)
{
  if(MATH_Gt(doc_num_to_start + NUM_OF_DOCS_IN_PAGE, results_count))
    return true;
  return false;
}

function DisplayViewState(state)
{
  //var summary_str = "Summary";
//  var detail_str = "Detail";
  var summary_str = /*IDS_RESULTS_SUMMARY*/"Resumen";
  var detail_str = /*IDS_RESULTS_DETAIL*/"Detalles";

  
  if(state == "detail")
  {
    document.all.view_format.innerHTML = detail_str;
    document.all.view_format_other.innerHTML = summary_str;
  }
  else if(state == "summary")
  {
    document.all.view_format.innerHTML = summary_str;
    document.all.view_format_other.innerHTML = detail_str;
  }
  else
    alert("Invalid display state specified.");
	
  //document.all.view_format_other.title = "Summary or Detail View";
   document.all.view_format_other.title = /*IDS_RESULTS_SUMMARY_OR_DETAIL*/"Vista de resumen o de detalles";
}

function DisplaySortOrder(order)
{
  if(order == "ascending")
    document.all.sort_order_img.src = "Images/ascending_order.bmp";
  else if(order == "descending")
    document.all.sort_order_img.src = "Images/descending_order.bmp";
  else
    alert("Invalid sort order specified.");
	
  //document.all.sort_order.title = "Ascending or Descending Order";
    document.all.sort_order.title = /*IDS_RESULTS_ORDER*/"Se ha especificado un criterio de ordenacin no vlido.";
}

function DisableSortOrder(order)
{
  if(order == "ascending")
    document.all.sort_order_img.src = "Images/ascending_order_disabled.bmp";
  else if(order == "descending")
    document.all.sort_order_img.src = "Images/descending_order_disabled.bmp";
  else
    alert("Invalid sort order specified.");
	
  document.all.sort_order.title = "";
}

function DisableSearchOptions(order)
{
  document.all.view_format_other.disabled = true;
  document.all.sorted_by_text.disabled = true;
  document.all.sorted_by_field.disabled = true;
  document.all.view_format_other.title = "";
  DisableSortOrder(order);
}

function GetSortedByFields()
{
  var fields = GetAppValues("Preferences/Fields");
  var sort_fields = new Array();
  
  for(field in fields)
  {
    // exclude abstract field from
	// sorted by list
    if(field == "Abstract")
	  continue;
	  
	sort_fields[field] = fields[field];
  }  
  return sort_fields; 
}

function OnLoadPage()
{
  // retrieve current settings of page state variables
  view_format = GetAppValue("Preferences", "ResultsViewOption");
  sorted_by = GetValue("Results", "SortedBy");
  new_search = GetValue("Results", "NewSearch");

  //if this is just a refresh-fix for bug #2078-amar
  if(new_search == "false") {
	view_format = GetValue("Results","ViewFormat");
  }

  var local_sort_order = GetValue("Results", "SortOrder");
  if(MATH_Or(local_sort_order == "ascending", local_sort_order == "descending"))
  {
	sort_order = local_sort_order;
  }

  // set sorted by list with fields turned on in preferences page
  SetSelectedListItems(document.all.sorted_by_field,
    ToLocFields(GetSortedByFields()));
  
  // set up page configurations
  DisplayViewState(view_format);

  // display sorted by text and list with field currently selected
  SetListBox(document.all.sorted_by_field, ToLocField(sorted_by));

  // display ascending/descending icon
  DisplaySortOrder(sort_order);

  // if no index selected, just display warning
  if(GetNumOfSelectedIndexes() == 0)
  {
    DisplayNoIndex();
	return;
  }
  
  // delay starting search fraction of second so that
  // first render the page, then execute search.
  // This prevents search execution halt rendering page.
  setTimeout("DoSearch()", SEARCH_DELAY);
}

function DoSearch()
{
  // get paths to all index dbs to be searched  
  var index_paths_to_search = GetIndexPathsToSearch();
  
  // perform search
  search_succeeded = ExecuteSearch(index_paths_to_search);

  // if search successful, display results of first page
  // else disable all search options and display all errors encountered
  if(search_succeeded)
  {
    SavePrevSearchCriteria();
    //SortSearchResults(sorted_by, sort_order);
    DisplayResults(view_format, current_start_doc, NUM_OF_DOCS_IN_PAGE);
	
	// refreshment of current search, need to be
	// displayed twice, due to how browser works
	// (this happens only when F5 key is pressed).
	if(new_search == "false")
	  setTimeout("DoDisplay", DISPLAY_DELAY);
  }
  else
  {
	DisableSearchOptions(sort_order);
    DisplaySearchErrors();
  }
}

function DoDisplay()
{
  DisplayResults(view_format, current_start_doc, NUM_OF_DOCS_IN_PAGE);
}

function OnUnloadPage()
{
  // currently no UI states are saved.
  // results are always displayed firts with
  // Summary View, Sorted by Score, Descending Order
  
  // save current settings of page state variables
  //SetAppValue("Preferences", "ResultsViewOption", view_format);
  //SetValue("Results", "SortedBy", sorted_by);
  //SetValue("Results", "SortOrder", sort_order);
  
  // unless otherwise specified, newly loaded searh
  // as a refreshment of current search
  //fix for bug#2078-amar
  var view_format_pref = GetAppValue("Preferences", "ResultsViewOption");
  var view_format_local = GetValue("Results","ViewFormat");
  var new_search_local = GetValue("Results","NewSearch");

  if(new_search_local == "true") {
	if(view_format_local == "detail") {
		SetValue("Results", "ViewFormat", "detail");
	}
	else {
		SetValue("Results", "ViewFormat", "summary");
	}
	SetValue("Results", "NewSearch", "false");	
  }
  //SetValue("Results", "NewSearch", "false");
}

// clear all selections of document views
function DeselectAllViews()
{
  var views = GetCollection(document.all.document_view);
  for(var i = 0; MATH_Lt(i, views.length); i++)
    views[i].Deselect();
	
  last_view_selected = null; 
  SetDocumentSelections(GetSelectedDocuments(), false);
}

function ClearFavoritesList()
{
  // clear favorites list in crieria fame
  frames["criteria_frame"].search_text.CloseFavoritesListDisplay();
}

// update all selections of document views based on
// previous selection, Ctrl or Shift key press
// (single, multiple and range selections are supported)
function UpdateViewSelection(view, ctrl_key, shift_key)
{
  if(view == null)
    return;
	
  var views = GetCollection(document.all.document_view); 
   
  if(MATH_And(!ctrl_key, !shift_key))
  {
    // single selection case (no Ctrl or Shift Key pressed)
    for(var i = 0; MATH_Lt(i, views.length); i++)
	{
	  if(views[i] == view)
		views[i].Select();
	  else
		views[i].Deselect();
	}
  }
  else if(MATH_And(ctrl_key, !shift_key))
  {
	// multiple selection case (with Ctrl Key pressed)
	// in this case, do not deselect already selected ones
	// except when already selected one is clicked.
	for(var i = 0; MATH_Lt(i, views.length); i++)
    {	    
	  if(views[i] == view)
	  {
	    if(views[i].IsSelected())
		  views[i].Deselect();
		else
		  views[i].Select();
	  }
    }
  }
  else if(MATH_And(!ctrl_key, shift_key))
  {
	// range selection case (with Shift Key pressed)
	// in this case, select all ones between last selection
	// and newly clicked ones, and deselect the rest.
    var range_started = false;
	var range_ended = false;
	
	for(var i = 0; MATH_Lt(i, views.length); i++)
    {
	  if(MATH_Or(views[i] == view, views[i] == last_view_selected))
	  {
	    // either current click or previous click
		// this is the range boundary
	    views[i].Select();
		
		if(MATH_Or(last_view_selected == null, view == last_view_selected))
		{
		  // single selection case
		  range_started = true;
		  range_ended = true;
		}
	    else if(!range_started)
		  range_started = true;
		else if(MATH_And(range_started, !range_ended))
		  range_ended = true;
	    else
		  alert("UpdateViewSelection: start/end flag out of order");		
	  }
	  else if(!range_started)	// before range of selection
	    views[i].Deselect();
	  else if(MATH_And(range_started, !range_ended))	// in range
	    views[i].Select();
	  else if(range_ended)		// after range of selection
	    views[i].Deselect();
	  else
		alert("UpdateViewSelection: start/end flag out of order");
    }
  }
  else
  {
    // no other key combinations are interpreted as selection,
	// so do nothing in such cases
  }
  
  last_view_selected = view; 
  SetDocumentSelections(GetSelectedDocuments(), true);
}

function UpdateRightClickViewSelection(view)
{
  if(view == null)
    return;
	
  var views = GetCollection(document.all.document_view); 

  if(view.IsSelected() ) { 
    for(var i = 0; MATH_Lt(i, views.length); i++) {
	  if(views[i] == view) {
		views[i].Select();
	  }
	}
  }
  else {
	for(var j = 0; MATH_Lt(j, views.length); j++) {
	  if(views[j] == view) {
		views[j].Select();
	  }
	  else {
		views[j].Deselect();
	  }
	}

  }
  SetDocumentSelections(GetSelectedDocuments(), true);
}


function GetIndexPathsToSearch()
{
  var index_names = GetSelectedIndexNames();   
  var index_paths = new Array();  
  for(var i = 0; MATH_Lt(i, index_names.length); i++)
    index_paths[i] = GetIndexPathFromName(index_names[i]);

  return index_paths;
}

// retrieves all selected document's full paths as
// an array of elements
function GetSelectedDocuments()
{
  var documents = new Array();
  var count = 0;
  
  var views = GetCollection(document.all.document_view); 
  for(var i = 0; MATH_Lt(i, views.length); i++)
  {
    if(views[i].IsSelected())
      documents[count++] = views[i].path;
  }
  
  return documents;
}

function ToggleSortOrder()
{
  // if no documents are retrieved, do nothing
  if(!search_succeeded)
    return;

  // toggle sort order between ascending and descending order
  if(sort_order == "ascending")
    sort_order = "descending";
  else if(sort_order == "descending")
    sort_order = "ascending";
  else
    alert("Invalid sort order specified.");

  // display results based on updated sort order (display the 1st page)
  DisplaySortOrder(sort_order);

  // reorder the entire results
  ReorderResults(sorted_by, sort_order);
}
</script>

<!-- all events and actions specific to this page -->
<script language="JavaScript" for="window" event="onload()">
OnLoadPage();
</script>

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

<script language="JavaScript" for="document" event="onclick()">
DeselectAllViews();
ClearFavoritesList();
</script>

<script language="JavaScript" for="document" event="oncontextmenu()">
DeselectAllViews();
ClearFavoritesList();
</script>

<script language="JavaScript" for="page_link_area" event="onclick()">
// cancel bubble so that document's onclick event is not called
// (deselecting doc views while sorting may cause error)
event.cancelBubble = true;
</script>

<script language="JavaScript" for="previous_page" event="onclick()">
// cancel default event handling first
event.returnValue = false;

// if this page is the first page, do nothing
if(IsFirstPage(current_start_doc))
  return;
  
// display the previous page
current_start_doc -= NUM_OF_DOCS_IN_PAGE;
DisplayResults(view_format, current_start_doc, NUM_OF_DOCS_IN_PAGE);
</script>

<script language="JavaScript" for="next_page" event="onclick()">
// cancel default event handling first
event.returnValue = false;

// if this page is the last page, do nothing
if(IsLastPage(current_start_doc))
  return;

// display the next page
current_start_doc += NUM_OF_DOCS_IN_PAGE;
DisplayResults(view_format, current_start_doc, NUM_OF_DOCS_IN_PAGE);
</script>

<script language="JavaScript" for="view_format_toggle" event="onclick()">
// cancel default event handling so that link does not take effect
event.returnValue = false;
</script>

<script language="JavaScript" for="view_format_other" event="onclick()">
// cancel default event handling first
event.returnValue = false;

// if no documents are retrieved, do nothing
if(!search_succeeded)
  return;
  
// cancel event bubling so that document's onclick event does not capture
// this event (thumbnail display is in transition and do not want to search
// for non-instantiated thumbnails
event.cancelBubble = true;

// toggle the view state (summary vs. detail)
//fix for bug #2078
  if(view_format == "summary") {
	view_format = "detail";
	SetValue("Results", "ViewFormat", "detail");
  }
  else if(view_format == "detail") {
	view_format = "summary";
	SetValue("Results", "ViewFormat", "summary");
  }

// display view format (summary vs. detail)
DisplayViewState(view_format);

// load results from XML
DisplayResults(view_format, current_start_doc, NUM_OF_DOCS_IN_PAGE);
</script>

<script language="JavaScript" for="sorted_by_field" event="onchange()">
// cancel anchor event first
event.returnValue = false;

// if no documents are retrieved, do nothing
if(!search_succeeded)
  return;

// get new "sorted by" selection
sorted_by = ToPrefField(GetListBox(document.all.sorted_by_field));

// get default sort order (ascending/descending) for selected field
sort_order = GetDefaultSortOrder(sorted_by);

// display results based on updated sort order (display the 1st page)
DisplaySortOrder(sort_order);

// reorder the entire results
ReorderResults(sorted_by, sort_order);
</script>

<script language="JavaScript" for="sort_order" event="onclick()">
// cancel default event handling so that link does not take effect
event.returnValue = false;

ToggleSortOrder();
</script>

<script language="JavaScript" for="sort_order_img" event="onkeypress()">
ToggleSortOrder();
</script>

<script language="JavaScript" for="document_path" event="onclick()">
event.returnValue = false;
if(GetActiveState(event.srcElement.innerHTML) != "true")
  return;
RunSingleApplication(event.srcElement.innerHTML);
</script>

<script language="JavaScript" for="document_path" event="onmouseenter()">
if(GetActiveState(event.srcElement.innerHTML) != "true")
  event.srcElement.style.cursor = "text";
</script>

<script language="JavaScript" for="document_view" event="onclick()">
event.cancelBubble = true;
if(event.srcElement.path == "")
  return;
UpdateViewSelection(event.srcElement, event.ctrlKey, event.shiftKey);
</script>

<script language="JavaScript" for="document_view" event="oncontextmenu()">
event.cancelBubble = true;
if(event.srcElement.path == "")
  return;
UpdateRightClickViewSelection(event.srcElement);
</script>

<script language="JavaScript" for="document_view" event="ondblclick()">
event.cancelBubble = true;
if(event.srcElement.path == "")
  return;
RunApplication(event.srcElement.path);
</script>

<script language="JavaScript" for="document_view" event="ondragstart()">
event.cancelBubble = true;
if(event.srcElement.path == "")
  return;
if(!event.srcElement.IsSelected())
  UpdateViewSelection(event.srcElement, false, false);
OnDragStarted("");
</script>

<table width="100%" border="0" cellpadding="0" cellspacing="0" >
  <tr>
    <td height="25" align="left" valign="top"><iframe name="criteria_frame" src="search_criteria_area.htm" frameborder="no"
  scrolling="no" width="100%" height="25">
</iframe></td>
  </tr>
  <tr>
    <td height="1" align="left" valign="top" ></td>
  </tr>
  <tr>
    <td height="38" align="left" valign="top" class="Default_top" >
	<table width="100%" border="0" cellspacing="0" cellpadding="0" height="24" class="Default_top">
  <tr> 
    <td width="75">
	  <a id="home_link" onClick="GoToPage('default')" class="Normaltext">
	    <img src="Images/search_home.png" border="0" title="Volver a la pgina de inicio de bsqueda" width="32" height="32" style="position:relative; top:2;" loc="title:id=IDS_BACK_TO_SEARCH_HOME"/>      </a>	</td>
    <td width="848"> 
      <div id="page_title_area" align="center">
	 
	  <b><loc id="IDS_RESULTS_1">Resultados de la bsqueda</loc> <span id="view_format"></span></b>
	 
	  </div>
    </td>
    <td width="328"> 
      <div id="page_link_area" align="right">
	
        <table width="100%" border="0" cellspacing="0" cellpadding="0"  loc="width:id=IDS_WIDTH2">
          <tr> 
            <td width="16%">
			  <a name="view_format_toggle" href="">
			    <span id="view_format_other"></span>			  </a>&#160;&#160;&#160;</td>
            <td width="43%">
			  <span id="sorted_by_text">
			  <loc id="IDS_SORTED_BY">Ordenados por:</loc></span>
			</td>
			<td width="19%">
              <select name="sorted_by_field" size="1"></select>
            </td>
            <td width="22%">
			  <a name="sort_order" href="">
			    <img id="sort_order_img" src="Images/descending_order.bmp"
				  width="16" height="16" border="0"
				  style="position:relative; top:1; left:0"/>		      </a>			</td>
          </tr>
        </table>
	
	  </div>
    </td>
  </tr>
  
</table>
<div id="results_display_area" style="border-bottom:#000000"></div>
</td>
  </tr>
  
  
</table>
</body>
</html>
