// Function businessSearchBox generates the left column's business search box
// @param mode 'basic', 'advanced', '[I|W]basic', '[I|W]advanced'
// @param basic    "CNxxx-PRxxx-RGnnnn-SCnnn-CTnnnnn-STn-WSxxxxx..."       -> (53) basic search criterias
// @param advanced "RFnnnnn-RTnnnnn-VFnnnnn-VTnnnnn-FFnnnnn-FTnnnnn-LDnnn" -> (47) advanced search criterias
// @param control  "LGx-SOx-PSnnn-PNnnnn-IDTPnnnnnnnnn"                    -> (34) search controls
//
function businessSearchBox(mode,basic,advanced,control)
{
 //--- prepare for 'Buy', 'WishToBuy' or 'PartFin' modes ---
 var searchBasicCode = 'E';
 var searchAdvancedCode = 'A';
 var partfin = false;
 var buyersads = false;
 //--- prepare for basic box or for advanced box ---
 var basicDisplay    = '';
 var advancedDisplay = ' style="display:none"';
 if (mode != null)
 {
  if (mode.charAt(0) == "S")
  {
   partfin = true;
   mode = mode.substring(1);
  }
  else if (mode.charAt(0) == "W")
  {
   buyersads = true;
   mode = mode.substring(1);
  }
  if (mode == "advanced")
  {
   advancedDisplay = '';
   basicDisplay    = ' style="display:none"';
  }
 }
 // --- set a default value for each search field ---
 var dataCountry   ='CAN';   // CN -> Default country is Canada
 var dataProvince  ='...';   // PR -> Defaults to all provinces
 var disabledProvince = '';
 var dataRegion    ='....';  // RG -> Disabled until province is selected
 var disabledRegion = ' disabled';
 var dataSector    ='000';   // SC -> Defaults to all sectors
 var dataCategory  ='.....'; // CT -> Disabled until sector is selected
 var disabledCategory = ' disabled';
 var dataPriceFr   ='.....'; // RF -> First option (empty)
 var dataPriceTo   ='.....'; // RT ->   "     "       "
 var dataRevenueFr ='.....'; // VF ->   "     "       "
 var dataRevenueTo ='.....'; // VT ->   "     "       "
 var dataProfitFr  ='.....'; // FF ->   "     "       "
 var dataProfitTo  ='.....'; // FT ->   "     "       "
 var dataSaleType  ='1';     // ST -> Defaults to full sale
 var checkedSaleFull = ' checked';
 var checkedSalePart = ' checked';
 var dataWordSearch='';      // WS -> Empty by default

 if (partfin)
 {
  searchBasicCode = 'I';
  searchAdvancedCode = 'J';
  dataSaleType = 'S';
 }
 else if (buyersads)
 {
  dataSaleType = 'W';
 }

 // --- Extract basic search criterias
 if (basic == null)
 {
  basic = '';
 }
 else
 {
  var basl = basic.length;
  if (basl >=  5 && basic.charAt(2) >= '0')
  {
   dataCountry = basic.substring(2,5);
   if (dataCountry != 'CAN' && dataCountry != 'USA')
    disabledProvince = ' disabled';
  }
  if (basl >= 11 && basic.charAt(8) >= '0')
  {
   dataProvince = basic.substring(8,11);
  }
  if (basl >= 18 && basic.charAt(14) >= '0')
  {
   dataRegion = basic.substring(14,18);
   disabledRegion = '';
  }
  if (basl >= 24 && basic.charAt(21) >= '0')
  {
   dataSector = basic.substring(21,24);
  }
  if (basl >= 32 && basic.charAt(27) >= '0')
  {
   dataCategory = basic.substring(27,32);
   disabledCategory = '';
  }
  if (basl >= 36 && basic.charAt(35) >= '0')
  {
   dataSaleType = basic.substring(35,36);
   if (dataSaleType == '0' || dataSaleType == '2' )
    checkedSaleFull = '';
   if (dataSaleType == '0' || dataSaleType == '1' )
    checkedSalePart = '';
  }
  if (basl >  39 && basic.charAt(39) >= '0')
  {
   dataWordSearch = basic.substring(39,basic.length);
  }
 }
 // --- Extract advanced search criterias
 if (advanced == null)
 {
  advanced = '';
 }
 else
 {
  var advl = advanced.length;
  if (advl >=  7 && advanced.charAt(2) >= '0')
   dataPriceFr = advanced.substring(2,7);
  if (advl >= 15 && advanced.charAt(10) >= '0')
   dataPriceTo = advanced.substring(10,15);
  if (advl >= 23 && advanced.charAt(18) >= '0')
   dataRevenueFr = advanced.substring(18,23);
  if (advl >= 31 && advanced.charAt(26) >= '0')
   dataRevenueTo = advanced.substring(26,31);
  if (advl >= 39 && advanced.charAt(34) >= '0')
   dataProfitFr = advanced.substring(34,39);
  if (advl >= 47 && advanced.charAt(42) >= '0')
   dataProfitTo = advanced.substring(42,47);
 }
 if (control == null)
 {
   control = '';
 }

 // --- generate business search box ---
 w('<table>');
 w('<form method="get" name="formSearchSubmit" action="' + siteHttp + applName + servletName + '">');
 w('<input type="hidden" name="r" value="BS">');
 w('<input type="hidden" name="b" value="' + basic    + '">');
 w('<input type="hidden" name="a" value="' + advanced + '">');
 w('<input type="hidden" name="c" value="' + control  + '">');
 w('</form>');
 if (mode == 'main') {
  w('</table>');
  return;
 } 
 w('<form action="action" method="GET" name="formSearch">');
 w(' <tr><td colspan=3>');
 w('  <select name="countrySelect"  class="left-select" onchange="countrySelected (this);">');
 selectOptions(dataCountry,getCountries());
 w('  </select><br>');
 w('  <select name="provinceSelect" class="left-select"' + disabledProvince + ' onchange="provinceSelected(this);">');
 selectOptions(dataProvince,getProvinces(dataCountry));
 w('  </select><br>');
 w('  <select name="regionSelect"   class="left-select"' + disabledRegion + '>');
 selectOptions(dataRegion,getRegions(dataProvince));
 w('  </select>');
 w(' </td></tr>');
 w(' <tr><td colspan=3>');
 w('  <select name="sectorSelect"   class="left-select" onchange="sectorSelected  (this);">');
 selectOptions(dataSector,getBusinessSectors());
 w('  </select><br>');
 w('  <select name="categorySelect" class="left-select"' + disabledCategory + '>');
 selectOptions(dataCategory,getCategories(dataSector));
 w('  </select>');
 w('  <input type="hidden" name="saleType" value="' + dataSaleType  + '">');
 w('  <img src="images/spacer.gif" width=1 height=4></td></tr>');

 var wsColSpan = 1;
 if (advancedDisplay == '')
 {  // The advanced search box contains more search criterias and ends with a single button.
  wsColSpan = 2;
  var labelText = english ? "Price" : "Prix";
  var helpText  = english ? "Search on selling price, if available" : "Sélectionner selon le prix demandé, si disponible";
  if (partfin)
  {
      labelText = english ? "Amount" : "Montant";
      helpText  = english ? "Search on investment amount, if available" : "Sélectionner selon le montant d'investissement, si disponible";
  }
  else if (buyersads)
  {
      helpText  = english ? "Search on price range, if available" : "Sélectionner selon le prix proposé, si disponible";
  }
  w('<tr style="background-color:#F2EED9">');
  w(' <td class="left-selectLabel">'+ labelText +':</td>');
  w(' <td class="left-selectCenter"><select size="1" name="priceFrom" class="left-selectFrom" onchange="syncSelectFrom(this, this.form.priceTo);">');
  amountOptions(dataPriceFr,0,100,250,500,1000,2000,5000,10000);
  w('  </select><span class="left-selectQM">-</span>');
  w('  <select size="1" name="priceTo" class="left-selectTo" onchange="syncSelectTo(this.form.priceFrom, this);">');
  amountOptions(dataPriceTo,100,250,500,1000,2000,5000,10000,99999);
  w('  </select></td>');
  w(' <td><img class="left-selectQM" src="images/bouton-qm.gif" title="'+ helpText +'"></td>');
  w('</tr><tr style="background-color:#F2EED9">');

  labelText = english ? "Sales" : "Revenus";
  helpText  = english ? "Search on gross revenue, if available" : "Sélectionner selon le chiffre d'affaires, si disponible";
  w(' <td class="left-selectLabel">'+ labelText +':</td>');
  w(' <td class="left-selectCenter"><select size="1" name="revenueFrom" class="left-selectFrom" onchange="syncSelectFrom(this, this.form.revenueTo);">');
  amountOptions(dataRevenueFr,0,100,250,500,1000,2000,5000,10000);
  w('  </select><span class="left-selectQM">-</span>');
  w('  <select size="1" name="revenueTo" class="left-selectTo" onchange="syncSelectTo(this.form.revenueFrom, this);">');
  amountOptions(dataRevenueTo,100,250,500,1000,2000,5000,10000,99999);
  w('  </select></td>');
  w(' <td><img class="left-selectQM" src="images/bouton-qm.gif" title="'+ helpText +'"></td>');
  w('</tr>');

  if (!partfin)
  {
   labelText = english ? "Profits" : "Bénéfice";
   helpText  = english ? "Search on profit before distribution to shareholders, if available" : "Sélectionner selon le bénéfice avant rémunération des actionnaires, si disponible";
   w('<tr style="background-color:#F2EED9">');
   w(' <td class="left-selectLabel">'+ labelText +':</td>');
   w(' <td class="left-selectCenter"><select size="1" name="profitFrom" class="left-selectFrom" onchange="syncSelectFrom(this, this.form.profitTo);">');
   amountOptions(dataProfitFr,0,100,250,500,1000,2000,5000,10000);
   w('  </select><span class="left-selectQM">-</span>');
   w('  <select size="1" name="profitTo" class="left-selectTo" onchange="syncSelectTo(this.form.profitFrom, this);">');
   amountOptions(dataProfitTo,100,250,500,1000,2000,5000,10000,99999);
   w('  </select></td>');
   w(' <td><img class="left-selectQM" src="images/bouton-qm.gif" title="'+ helpText +'"></td>');
 //w('</tr><tr style="background-color:#F2EED9">');
 // labelText = english ? "Include full sales" : "Inclure les ventes complètes";
 // helpText  = english ? "Select companies that are entirely for sale" : "Sélectionner des entreprises qui sont à vendre en totalité";
 //w(' <td colspan=2 class="left-text"><input type="checkbox" name="fullSale"' + checkedSaleFull + '>'+ labelText +'</td>');
 //w(' <td><img src="images/bouton-qm.gif" title="'+ helpText +'"></></td>');
 //w('</tr><tr style="background-color:#F2EED9">');
 // labelText = english ? "Include partial sales" : "Recherches d\'investissement";
 // helpText  = english ? "Select companies looking for financing or partnership" : "Sélectionner des entreprises à la recherche d'investisseurs ou d'associés";
 //w(' <td colspan=2 class="left-text"><input type="checkbox" name="partSale"' + checkedSalePart + '>'+ labelText +'</td>');
 //w(' <td><img src="images/bouton-qm.gif" title="'+ helpText +'"></td>');
   w('</tr>');
  }//partfin
 }//advanced

 labelText = english ? "Keyword search" : "Chercher par mots clés";
 helpText  = english ? "Search businesses by word or by listing number" : "Chercher des entreprises par mots ou par numéro d'inscription";
 w('<tr style="background-color:#F2EED9">');
 w(' <td colspan='+ wsColSpan +' class="left-text">'+ labelText +':<br>');
 w('  <input type="text" class="left-Search" maxsize="50" name="wordSearch" value="' + dataWordSearch + '" onKeyPress="return submitSearch(event);"></td>');
 w(' <td style="width:18px"><img src="images/bouton-qm.gif" title="'+ helpText +'"></td>');
 w('</tr>');

 if (basicDisplay == '')
 {  // Basic search box ends with SEARCH button and advanced search button.
  var helpText  = english ? "Perform the search with above criterias and then show all available search criterias"
                          : "Effectuer la recherche ci-dessus puis montrer tous les critères de recherche disponibles";
  w(' <tr>');
  w('    <td align="center" colspan=3>');
  buttonOnOff("javascript:goSearch('"+ searchBasicCode +"');",'search',helpText);
//w('     <br>');
//buttonOnOff("javascript:goSearch('"+ searchAdvancedCode +"');",'adv_search');
  w('    </td>');
  w('  </tr>');
 }//basic
 else
 {
  w('  <tr>');
  w('    <td align="center" colspan=3>');
  buttonOnOff("javascript:goSearch('"+ searchAdvancedCode +"');",'search');
  w('    </td>');
  w('  </tr>');
 }//advanced
 w('</form>');
 w('</table>');
} // businessSearchBox

function franchiseSearchBox(mode,basic,advanced,control)
{
 // --- set a default value for each search field ---
 var dataProvince  ='...';   // PR -> Defaults to all provinces
 var dataRegion    ='....';  // RG -> Disabled until province is selected
 var disabledRegion = ' disabled';
 var dataSector    ='000';   // SC -> Defaults to all sectors

 // --- Extract basic search criterias
 if (basic == null)
  basic = '';
 else
 {
  var basl = basic.length;
  if (basl >= 11 && basic.charAt(8) >= '0')
   dataProvince = basic.substring(8,11);
  if (basl >= 18 && basic.charAt(14) >= '0')
  {
   dataRegion = basic.substring(14,18);
   disabledRegion = '';
  }
  if (basl >= 24 && basic.charAt(21) >= '0')
   dataSector = basic.substring(21,24);
 }
 if (advanced == null)
  advanced = '';
 if (control == null)
  control = '';
 // --- generate franchise search box ---
  w('<table class="left-table">');
  w('<form method="get" name="formSearchSubmit" action="' + siteHttp + applName + servletName + '">');
  w('<input type="hidden" name="r" value="BS">');
  w('<input type="hidden" name="b" value="' + basic    + '">');
  w('<input type="hidden" name="a" value="' + advanced + '">');
  w('<input type="hidden" name="c" value="' + control  + '">');
  w('</form>');
  if (mode == 'main') {
   w('</table>');
   return;
  } 

 w('<table class="left-table" cellpadding="0">');
 w('<form action="action" method="GET" name="formSearch">');
 //w('  <tr><td>');
 //w('    <select name="provinceSelect" class="left-select" onchange="provinceSelected(this);">');
 //selectOptions(dataProvince,getProvinces('CAN'));
 //w('    </select><br>');
 //w('    <select name="regionSelect"   class="left-select"' + disabledRegion + '>');
 //selectOptions(dataRegion,getRegions(dataProvince));
 //w('    </select>');
 //w('  </td></tr>');
 //w('  <tr><td>');
 //w('    <select name="sectorSelect"   class="left-select" onchange="sectorSelected  (this);">');
 //selectOptions(dataSector,getFranchiseSectors());
 //w('    </select><br>');
 //w('  </td></tr>');
 //w('  <tr id="search1">');
 //w('    <td align="center">');
 //buttonOnOff("javascript:goSearch(\'F\');",'search');
 //w('    </td>');
 //w('  </tr>');
 w('</form>');
 w('</table>');
} // franchiseSearchBox

function proSearchBox(mode,basic,advanced,control)
// mode='main' writes a hidden search box in left column of PRO main page
{
  // --- set a default value for each search field ---
  var dataProvince  ='...';   // PR -> Defaults to all provinces
  var dataRegion    ='....';  // RG -> Disabled until province is selected
  var disabledRegion = ' disabled';
  var dataSector    ='100';   // SC -> Defaults to all sectors
  var dataCategory  ='.....'; // CT -> Disabled until sector is selected
  var dataSaleType  ='P';     // ST -> 'P' for ProfServ search

  // --- Extract basic search criterias
  if (basic == null)
  {
   basic = '';
  }
  else
  {
   var basl = basic.length;
   if (basl >= 11 && basic.charAt(8) >= '0')
   {
    dataProvince = basic.substring(8,11);
   }
   if (basl >= 18 && basic.charAt(14) >= '0')
   {
    dataRegion = basic.substring(14,18);
    disabledRegion = '';
   }
   if (basl >= 24 && basic.charAt(21) >= '0')
   {
    dataSector = basic.substring(21,24);
   }
   if (basl >= 32 && basic.charAt(27) >= '0')
   {
    dataCategory = basic.substring(27,32);
   }
  }
  if (advanced == null)
    advanced = '';
  if (control == null)
    control = '';

  // --- generate professional services search box ---
  w('<table class="left-table">');
  w('<form method="get" name="formSearchSubmit" action="' + siteHttp + applName + servletName + '">');
  w('<input type="hidden" name="r" value="BS">');
  w('<input type="hidden" name="b" value="' + basic    + '">');
  w('<input type="hidden" name="a" value="' + advanced + '">');
  w('<input type="hidden" name="c" value="' + control  + '">');
  w('</form>');
  if (mode == 'main') {
   w('</table>');
   return;
  } 
  w('<form action="action" method="GET" name="formSearch">');
  w('<input type="hidden" name="saleType" value="P">');
  w('<input type="hidden" name="sector"   value="...">');
  w('<input type="hidden" name="category" value=".....">');
  w('  <tr><td>');
  w('    <select name="provinceSelect" class="left-select" onchange="provinceSelected(this);">');
  selectOptions(dataProvince,getProvinces('CAN'));
  w('    </select><br>');
  w('    <select name="regionSelect"   class="left-select"' + disabledRegion + '>');
  selectOptions(dataRegion,getRegions(dataProvince));
  w('    </select>');
  w('  </td></tr>');
//w('  <tr><td>');
//w('    <select name="sectorSelect"   class="left-select">');
//selectOptions(dataSector,getProSectors());
//w('    </select><br>');
//w('    <select name="categorySelect" class="left-select">');
//selectOptions(dataCategory,getProCategories());
//w('    </select>');
//w('  </td></tr>');
  w('  <tr><td><ul style="margin-left:0px;margin-bottom:0px;">');
  if (english)
  {
   w('<li class="left-link2"><a href="javascript:proSearch(325);">Brokers and Agents</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(310);">Accountants</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(330);">Appraisers</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(335);">Financial services</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(320);">Investments advisors</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(305);">Lawyers and notaries</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(315);">Management advisors</a>');
  }
  else
  {
   w('<li class="left-link2"><a href="javascript:proSearch(325);">Courtiers et Agents</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(330);">Évaluateurs</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(310);">Comptables</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(305);">Avocats et notaires</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(335);">Conseil et services financiers</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(315);">Conseillers en gestion</a>');
   w('<li class="left-link2"><a href="javascript:proSearch(320);">Conseillers en placements</a>');
  }
  w('  </ul></td></tr>');
  w('</form>');
  w('</table>');
} // supplierSearchBox

function proSearch(code)
{
 var formSearch = document.forms['formSearch'];
 if (code < 1000)
 { // sector search, reset category
  formSearch.sector.value = code;
  formSearch.category.value = '.....';
 }
 else
 { // category search, reset sector
  formSearch.sector.value = '100';
  formSearch.category.value = code;
 }
 callSearch(formSearch);
}

function amountOptions(previousValue,listOfAmounts)
{ // Generate a series of <option> tags for amount from-to ranges
 w('<option value=""></option>');
 for (var iArg = 1; iArg < arguments.length; iArg++)
 {
  var optionValue = arguments[iArg];
  var optionText = '';
  var optionSelected = '';
  if (previousValue != '' && previousValue == optionValue)
   optionSelected = ' selected';

  var valueInK = optionValue;
  if (optionValue >= 100000)
   valueInK = optionValue / 1000;
  if (valueInK == '0')
   optionText = '&nbsp;&nbsp;&nbsp;0$';
  else if (valueInK >= 100 && valueInK <= 999)
   optionText = valueInK + 'K';
  else if (valueInK >= 1000 && valueInK <= 9999)
   optionText = '&nbsp;&nbsp;&nbsp;' +(valueInK/1000)+ 'M';
  else if (valueInK == 10000)
   optionText = '&nbsp;10M';
  else if (valueInK == 99999 || valueInK == 1000000)
   optionText = 'max';
  else
   return alert ("Internal error: unexpected amount code '" + optionValue + "'");
  w('<option' + optionSelected + ' value="' + optionValue + '">' + optionText + '</option>');
 } // for iArg
} // amountOptions

function goSort(aSelect)
{ // Resort the search result and display page 1
 var index = aSelect.selectedIndex;
 if (index < 0)
  return;
 var sortOrder = String(aSelect.options[index].value);
 if (sortOrder.length != 1)
  return;
 var control = getParamControl(false);
 var newControl = control.substring(0,3) + '-SO' + sortOrder + control.substring(7);
 document.formSearchSubmit.c.value = newControl;
//alert("Control=" + newControl);
 goPage(1);
}
function markListing()
{ // Mark current listing and redisplay it (resubmit search strings)
 document.formSearchSubmit.r.value = 'BR';
 document.formSearchSubmit.submit();
}
function getParamBasic(initialized) {
 var basic = document.formSearchSubmit.b.value;
 if (basic.length < 53)
 {
   if(initialized == true)
     basic = "CN...-PR...-RG....-SC...-CT.....-ST.-WS........";
   else
     basic += dots.substring(0,53-basic.length);
 }
 return basic;
}
function getParamAdvanced(initialized) {
 var advanced = document.formSearchSubmit.a.value;
 if (advanced.length < 47)
 {
   if(initialized == true)
     advanced = "RF.....-RT.....-VF.....-VT.....-FF.....-FT.....-LD...";
   else
     advanced += dots.substring(0,47-advance.length);
 }
 return advanced;
}
