/**
 * on load handler
 */
function callOnLoad(init) {
    if (window.addEventListener) {
        window.addEventListener("load", init, false);
    } else if (window.attachEvent) {
        window.attachEvent("onload", init);
    } else {
        window.onload = init;
    }
}

var searchObject;
var manager;
var pageTitle;
var Mysncit;

/** ---------------------------------------------------
 *          Data Objects Defined in Java
 *  ---------------------------------------------------
 */
function OptionData(id, label) {
   this.id=id;
   this.label=label;
}

function OptionStringData(id, label) {
   this.id=id;
   this.label=label;
}

function MemberListData() {            
   this.list = null;
   this.resultsTotal = -1;
   this.resultsIndexStart = 0;
   this.resultsIndexEnd = 0;
   this.resultsMax;
   this.companyNameCriteria = '';
   this.companyRegionCriteria = -1;
   this.companyCategoryCriteria = -1;
   this.companyDivisionCriteria = -1;
   this.companySectionCriteria = '';
}

function MemberData() {
   this.strcompanyname = null;
   this.strcontactname = null;
   this.straddress = null;
   this.strphone = null;
   this.strfax = null;
   this.strwebsite = null;
   this.strmemberof = null;
   this.strcategory = null;
}

function OptionDoubleStringData() {
   id = -1;
   label = '';
   name = '';
}

/** ---------------------------------------------------
 *                   Search Manager
 *  ---------------------------------------------------
 */
function Msearch(cnt, tbl){
   this.containerName = cnt;
   this.displayName = tbl;
   this.isSearchResult=false;
   this.showCriteria = showSearchCriteria;
   this.showResults = showSearchResults;
   if (!searchObject) {
      searchObject = new MemberListData();
   }
   this.sectionToPick=null;
}

/** ---------------------------------------------------
 *             Search Manager Methods
 *  ---------------------------------------------------
 */

/**
 * Show content on the page
 */
Msearch.prototype.showContent = function () {
   if (this.isSearchResult) {
      this.showResults();
   } else {
      this.showCriteria();
   }
};

/**
 * Update section id from lookup search
 */
Msearch.prototype.updateSelectedSection = function (id, name) {
   try {                   
      var cmpdivf = document.getElementById('companyDivisionCriteria');
      if (cmpdivf) {
         for (var x = 0; x < cmpdivf.options.length; x++) {
            if (cmpdivf.options[x].value == id) {
               cmpdivf.selectedIndex = x;
               break;
            }
         }
      }
      this.sectionToPick = name;
      getSectionOptions(id);

      this.removeSectionSelectionDivider();               
   } catch (ex) {
      alert('search: ' + ex);
   }
};

/**
 * Remove divider created for section id lookup search
 */
Msearch.prototype.removeSectionSelectionDivider = function () {
   try {                   
      var div = document.getElementById('showSectionSelections');
      if (div) {
         document.body.removeChild(div)
      }               
      document.getElementById('companyRegionCriteria').style.display='block'; 
      document.getElementById('companyCategoryCriteria').style.display='block'; 
      document.getElementById('companyDivisionCriteria').style.display='block'; 
      document.getElementById('companySectionCriteria').style.display='block'; 
   } catch (ex) {
      alert('removeSectionSelectionDivider: ' + ex);
   }
};

/**
 * Main search function
 */
Msearch.prototype.search = function () {
   try {                              
      var cmpnmf = document.getElementById('companyNameCriteria');
      if (cmpnmf) searchObject.companyNameCriteria = cmpnmf.value;
      var cmprgf = document.getElementById('companyRegionCriteria');
      if (cmprgf) searchObject.companyRegionCriteria = cmprgf.value;
      var cmpctgf = document.getElementById('companyCategoryCriteria');
      if (cmpctgf) searchObject.companyCategoryCriteria = cmpctgf.value;
      if (Mysncit) {
         var cmpdivf = document.getElementById('companyDivisionCriteria');
         if (cmpdivf && cmpdivf.selectedIndex > 0) searchObject.companyDivisionCriteria = cmpdivf.options[cmpdivf.selectedIndex].value;

         var cmpsect = document.getElementById('companySectionCriteria');
         if (cmpsect && cmpsect.selectedIndex > 0) searchObject.companySectionCriteria = '' + cmpsect.options[cmpsect.selectedIndex].value;
      }
      /** Initial Setting Only! */
      searchObject.resultsIndexStart = -1;
      searchObject.resultsIndexEnd = -1;

      MemberDirectorySearch.getSearchResults(searchObject, loadResults);
   } catch (ex) {
      alert('search: ' + ex);
   }
};

/**
 * Insert content created into the display divider on page
 */
Msearch.prototype.insertContent = function (elmnt) {
   var h = document.getElementById(this.containerName);
   if (h) {
      h.appendChild(elmnt);
   }
};

/**
 * Search for TIC by name
 */
Msearch.prototype.lookupTic = function () {
   var lkp = document.getElementById('lookupSectionName');
   if (lkp) {
      var val = lkp.value;
      if (val.length > 0) {
         MemberDirectorySearch.lookupSectionId(val, showSectionIdSelection);
      } else {
         alert('Enter value');
         lkp.focus();
      }
   }
};

/**
 * Find existing table, or create a new one
 */
Msearch.prototype.getTable = function () {
   var tbl = document.getElementById(this.displayName);
   if (!tbl) {
      var box = document.createElement('FIELDSET');               
      var legend = document.createElement('LEGEND');
      legend.innerHTML=pageTitle;
      box.appendChild(legend);
      tbl = document.createElement('TABLE');
      var tmp = document.createElement('TBODY');
      tbl.appendChild(tmp);               
      tbl.id=this.displayName;
      box.appendChild(tbl);
      this.insertContent(box);
   }
   return tbl;
};

/** ---------------------------------------------------
 *                 Other Methods
 *  ---------------------------------------------------
 */

function getManager() {
   if (!manager) {
      manager = new Msearch('mainContent', 'mainTable');
   }
   return manager;
}

function init() {
   DWRUtil.useLoadingMessage();         
   getManager().showContent();
}


function loadResults(data) {
   if (data) {
      isSearchResult = true;
   }
   searchObject = data;
   manager.showResults();
}

function showOtherPage(start, end) {            
   searchObject.resultsIndexStart = start;
   searchObject.resultsIndexEnd = end;
   MemberDirectorySearch.getSearchResults(searchObject, loadResults);
}

function createNavigationRow(tbl, start, end, total, max) {
   //alert('create - start: ' + start + ', end: ' + end + ', total: ' + total + ', max: ' + max);
   var lastRow = tbl.rows.length;
   var rowBack = tbl.insertRow(lastRow++);
   var cell = rowBack.insertCell(0);
   cell.colSpan=2;
   var link = document.createElement('a');  
   link.setAttribute('href', 'index.jsp');
   link.innerHTML='&lt; Go Back (new search)';
   cell.appendChild(link); 

   var row0 = tbl.insertRow(lastRow++);
   row0.className='navigationRow';
   var cell0 = row0.insertCell(0);
   cell0.colSpan=2;
   if (start > 1) {              
      link = document.createElement('a');
      var start0 = start - max;
      var end0 = start - 1;
      link.setAttribute('href', 'javascript:showOtherPage(' + start0 + ', ' + end0 + ')');
      link.innerHTML='&lt;&lt;&lt;previous';
      cell0.appendChild(link); 
   }

   var span = document.createElement('SPAN');
   span.innerHTML='&nbsp;&nbsp;Showing ' + start + ' through ' + end + ' of ' + total + ' results.&nbsp;&nbsp;';
   cell0.appendChild(span); 

   if (end < total) {              
      link = document.createElement('a');
      var start0 = end + 1;
      var end0 = end + max;
      link.setAttribute('href', 'javascript:showOtherPage(' + start0 + ', ' + end0 + ')');
      link.innerHTML='next&gt;&gt;&gt;';
      cell0.appendChild(link); 
   }
}

function getLabel(text, clsname) {
   var lbl = document.createElement('SPAN');
   lbl.className = clsname;
   lbl.innerHTML=text;
   return lbl;
}

function createSingleMemberRow(data, tbl) {
   var lastRow = tbl.rows.length;
   var row0 = tbl.insertRow(lastRow++);

   var cell0 = row0.insertCell(0);
   cell0.colSpan=2;
   var textNode1 = document.createTextNode('' + data.strcompanyname);
   cell0.appendChild(textNode1);
   var brk = document.createElement('BR');
   cell0.appendChild(brk);
   cell0.appendChild(getLabel(addressLabel + ': ', 'resultLabel'));
   var textNode2 = document.createTextNode('' + data.straddress);
   cell0.appendChild(textNode2);

   var row1 = tbl.insertRow(lastRow++);
   var cell1 = row1.insertCell(0);

   cell1.appendChild(getLabel(regionLabel + ': ', 'resultLabel'));
   var textNode3 = document.createTextNode('' + data.strmemberof);
   cell1.appendChild(textNode3);
   var cell2 = row1.insertCell(1);
   if (data.strwebsite && data.strwebsite.length > 0) {
      cell2.appendChild(getLabel(websiteLabel + ': ', 'resultLabel'));
      link = document.createElement('a');
      var url;
      if (data.strwebsite.indexOf('http') < 0 || data.strwebsite.indexOf('https') < 0 || data.strwebsite.indexOf('ftp') < 0) {
         url = 'http://' + data.strwebsite;
      } else {
         url = data.strwebsite;
      }
      link.setAttribute('href', url);
      link.target='_blank';                     
      link.innerHTML=data.strwebsite;
      cell2.appendChild(link);            
   }

   var row2 = tbl.insertRow(lastRow++);
   var cell3 = row2.insertCell(0);
   cell3.appendChild(getLabel(phoneLabel + ': ', 'resultLabel'));
   var textNode4 = document.createTextNode('' + data.strphone);
   cell3.appendChild(textNode4);
   cell3.colSpan=2;
   cell3.whiteSpace='nowrap';

   var row3 = tbl.insertRow(lastRow++);
   var cell5 = row3.insertCell(0);
   cell5.colSpan=2;
   var hrl = document.createElement('HR');
   cell5.appendChild(hrl);
}

function showSearchResults() {
   var tbl = this.getTable();
   DWRUtil.removeAllRows(this.displayName);
   if (searchObject && searchObject.list) {   
      createNavigationRow(tbl, searchObject.resultsIndexStart, searchObject.resultsIndexEnd, searchObject.resultsTotal, searchObject.resultsMax);

      tbl.className='resultsTable';               
      for (var i = 0; i < searchObject.list.length; i++) {
         createSingleMemberRow(searchObject.list[i], tbl);
      }
      tbl.focus();
   } else {
      alert('Search Object was null!');
   }
}

function showSectionIdSelection(data) {         
   document.getElementById('companyRegionCriteria').style.display='none'; 
   document.getElementById('companyCategoryCriteria').style.display='none'; 
   document.getElementById('companyDivisionCriteria').style.display='none'; 
   document.getElementById('companySectionCriteria').style.display='none';             

   var div = document.createElement('DIV');
   document.getElementsByTagName("body")[0].appendChild(div);          
   div.className='showSectionSelections';            
   div.id='showSectionSelections';

   var close = document.createElement('div');            
   close.appendChild(document.createTextNode('Close '));
   close.appendChild(myCloseImage);
   close.onclick = getManager().removeSectionSelectionDivider;
   close.className='closeToolBar';
   //var img = document.createElement('img');

   div.appendChild(close);

   if (data && data.length > 0) {               
      var span = document.createElement('SPAN');
      span.appendChild(document.createTextNode('Found ' + data.length + ' results, click on the link below that matches your query.'));
      div.appendChild(span);

      var br = document.createElement('br');
      div.appendChild(br);
      br = document.createElement('br');
      div.appendChild(br);

      for (var x = 0; x < data.length; x++) {
         span = document.createElement('SPAN');
         span.appendChild(document.createTextNode(data[x].label));
         span.className='selectSectionLink';
         span.id=data[x].id;
         span.name=data[x].name;
         span.onclick = function updateSelectedSection() {
            getManager().updateSelectedSection(this.id, this.name);
         }
         span.onmouseover = function makeActive() {
            this.className='selectSectionLinkActive';
         }
         span.onmouseout = function makeNotActive() {
            this.className='selectSectionLink';
         }
         div.appendChild(span);
         br = document.createElement('br');
         div.appendChild(br);
      }               
   } else {              
      var span = document.createElement('SPAN');
      span.appendChild(document.createTextNode('No results found.'));
      div.appendChild(span);
   }
}

function getRegionOptions() {
   MemberDirectorySearch.getRegionOptions(loadRegions);            
}

function loadRegions(data) {
   DWRUtil.removeAllOptions("companyRegionCriteria");
   var option = new Array(0);
   option[0] = new OptionData(-1, "All");
   DWRUtil.addOptions("companyRegionCriteria", option, "id", "label");      
   if (data.length > 0) {
      DWRUtil.addOptions("companyRegionCriteria", data, "id", "label");
   } else {
      alert('There are no regions defined!');
   }
}

function getCategoryOptions() {
   MemberDirectorySearch.getCategoryOptions(loadCategories);            
}

function loadCategories(data) {
   DWRUtil.removeAllOptions("companyCategoryCriteria");
   var option = new Array(0);
   option[0] = new OptionData(-1, "All");
   DWRUtil.addOptions("companyCategoryCriteria", option, "id", "label");           
   if (data.length > 0) {
      DWRUtil.addOptions("companyCategoryCriteria", data, "id", "label");
   } else {
      alert('There are no categories defined!');
   }
}

function getDivisionOptions() {
   MemberDirectorySearch.getDivisionOptions(loadDivisions);            
}

function loadDivisions(data) {
   DWRUtil.removeAllOptions("companyDivisionCriteria");
   var option = new Array(0);
   option[0] = new OptionData(-1, "All");
   DWRUtil.addOptions("companyDivisionCriteria", option, "id", "label");
   if (data.length > 0) {
      DWRUtil.addOptions("companyDivisionCriteria", data, "id", "label");
   } else {
      alert('There are no divisions defined!');
   }
}

function getSectionOptions(index) {
   MemberDirectorySearch.getSectionOptions(index, loadSections);
}

function loadSections(data) {
   DWRUtil.removeAllOptions("companySectionCriteria");
   if (data.length > 0) {
      var option = new Array(0);
      option[0] = new OptionData(-1, "All");
      DWRUtil.addOptions("companySectionCriteria", option, "id", "label");
      DWRUtil.addOptions("companySectionCriteria", data, "id", "label");

      var savedSelection = getManager().sectionToPick;
      if (savedSelection) {               
         var cmpsect = document.getElementById('companySectionCriteria');
         if (cmpsect) {
            for (var x = 0; x < cmpsect.options.length; x++) {
               if (cmpsect.options[x].value == savedSelection) {
                  cmpsect.selectedIndex = x;
                  getManager().sectionToPick = null;
                  break;
               }
            }
         }
      }
   } else {
      //alert('There are no section defined!');
   }
}

/** Add new cell */
function addNewTextInput(parnt, cssclass, name, value, wdth, maxwdth) {
   var elemnt;
   try {
     if (parnt) {
        parnt.innerHTML = '';
        elemnt = document.createElement('input');
        elemnt.type = 'text'; 
        elemnt.name = name; 
        elemnt.value = value; 
        elemnt.id = name;
        elemnt.size = wdth;
        elemnt.maxLength = maxwdth;
        elemnt.className = cssclass;
        parnt.appendChild(elemnt);
     }      
   } catch (ex) {
      alert('Exception (addNewTextCell): ' + ex);
   }
   return elemnt;
}



/** Add new cell */
function addNewSelectField(parnt, cssclass, name, value) {
var elemnt;
   try {
     if (parnt) {
        parnt.innerHTML = '';
        elemnt = document.createElement('SELECT');
        elemnt.name = name; 
        elemnt.value = value; 
        elemnt.id = name;
        elemnt.className = cssclass;
        parnt.appendChild(elemnt);
     }      
   } catch (ex) {
      alert('Exception (addNewTextCell): ' + ex);
   }
   return elemnt;
}

function showSearchCriteria() {
   var tbl = this.getTable();
   DWRUtil.removeAllRows(this.displayName); 

   var inx = 0;

   var row0 = tbl.insertRow(inx++);
   var cell0 = row0.insertCell(0);
   cell0.appendChild(getLabel(companyNameLabel + ': ', 'criteriaLabel'));
   var cell1 = row0.insertCell(1);
   var cmpName = addNewTextInput(cell1, 'criteriainput', 'companyNameCriteria', '', 30, 50); 

   var row1 = tbl.insertRow(inx++);
   var cell2 = row1.insertCell(0);
   cell2.appendChild(getLabel(regionLabel + ': ', 'criteriaLabel'));   
   var cell3 = row1.insertCell(1);
   addNewSelectField(cell3, 'criteriainput', 'companyRegionCriteria', ''); 

   var row2 = tbl.insertRow(inx++);
   var cell4 = row2.insertCell(0);
   cell4.appendChild(getLabel(categoryLabel + ': ', 'criteriaLabel'));
   var cell5 = row2.insertCell(1);
   addNewSelectField(cell5, 'criteriainput', 'companyCategoryCriteria', '');

   
   if (Mysncit) {
      var row3 = tbl.insertRow(inx++);
      var cell6 = row3.insertCell(0);
      cell6.appendChild(getLabel(divisionLabel + ': ', 'criteriaLabel'));
      var cell7 = row3.insertCell(1);
      var sectionOptions = addNewSelectField(cell7, 'criteriainput', 'companyDivisionCriteria', '');
      sectionOptions.onchange = function() {
         getSectionOptions(this.options[this.selectedIndex].value);
      }

      var row4 = tbl.insertRow(inx++);
      var cell8 = row4.insertCell(0);
      cell8.appendChild(getLabel(sectionLabel + ': ', 'criteriaLabel'));       
      var cell9 = row4.insertCell(1);
      addNewSelectField(cell9, 'criteriainput', 'companySectionCriteria', '');
   }

   var row5 = tbl.insertRow(inx++);
   var cell10 = row5.insertCell(0);
   cell10.colSpan=2;
   cell10.className='buttonCell';
   btn = document.createElement('input');
   btn.type = 'button'; 
   btn.name = 'submit'; 
   btn.value = 'Submit'; 
   btn.id = 'submit';
   btn.className = 'submitbtn';
   btn.onclick = getManager().search;
   cell10.appendChild(btn);

   getRegionOptions();
   getCategoryOptions();

   if (Mysncit) {
      getDivisionOptions();

      var row6 = tbl.insertRow(inx++);
      var cell11 = row6.insertCell(0);
      cell11.colSpan=2;
      br = document.createElement('br');
      cell11.appendChild(br);

      var row7 = tbl.insertRow(inx++);
      var cell12 = row7.insertCell(0);
      cell12.colSpan=2;
      hr = document.createElement('hr');
      cell12.appendChild(hr);

      var row8 = tbl.insertRow(inx++);
      var cell13 = row8.insertCell(0);
      cell13.colSpan=2;            
      cell13.appendChild(br);

      var row9 = tbl.insertRow(inx++);
      //row9.style.whiteSpace='nowrap';
      var cell14 = row9.insertCell(0);
      cell14.appendChild(getLabel(lookupTICLabel +': ', 'criteriaLabel'));       
      var cell15 = row9.insertCell(1);
      cell15.style.whiteSpace='nowrap';
      addNewTextInput(cell15, 'criteriainput', 'lookupSectionName', '', 20, 40);

      btnlkp = document.createElement('input');
      btnlkp.type = 'button'; 
      btnlkp.name = 'lookup'; 
      btnlkp.value = 'Lookup'; 
      btnlkp.id = 'lookup';
      btnlkp.className = 'lookupbtn';
      btnlkp.onclick = getManager().lookupTic;
      //cell16.appendChild(btnlkp);
      cell15.appendChild(btnlkp);
   }
   cmpName.focus();
}