<!-- -------------------------------- -->
<!--    File:  tmfsearch_library.js   -->
<!-- Version:  1.00                   -->  
<!--      By:  M.Revelett 10/01/2008  -->
<!-- --------------------------------------------------------------------------------------------------------------------- -->
<!-- This script uses the Google AJAX Search library to attach event handlers to the specified search input box and        -->
<!--   display results in the specified target container element.  Search results are limited to the domain "TMF.ORG".     -->
<!--   Results are broken into two sections: an upper result seaction for TMF.ORG web page matches and a lower result      -->
<!--   section consisting of direct-linked file matches (files with direct paths, not files linked via DNN "filelink".     -->
<!-- --------------------------------------------------------------------------------------------------------------------- -->

   var tgtContainer = "TMF_SearchResults";
   var inputControl = "gcs_input";

   google.load("search", "1.0");

   google.setOnLoadCallback(OnLoad, true);
   
   function left(instr, n)
   {
      if (n <= 0)
         return "";
      else if (n > String(instr).length)
         return instr;
      else
         return String(instr).substring(0,n);
   } 

   function clearSearchResults()
   { 
	  document.getElementById(tgtContainer).innerHTML = "";
	  document.getElementById(inputControl).value = "";
	  OnLoad();
   }
   
   function checkKeypress(e)
   {
	  var kC  = (window.event) ?    // MSIE or Firefox?
                 event.keyCode : e.keyCode;
      var Esc = (window.event) ?   
                27 : e.DOM_VK_ESCAPE // MSIE : Firefox
      // if ESCAPE then clear results
	  if(kC == Esc)
	  {
	     // By default, an ENTER keypress clears Google's results.
         event.keyCode=13;
		 return;
	  }
	  // if ENTER then ignore since clearing results upon pressing ENTER is confusing for end user
	  if (kC == 13)
  	    return false;
	  // else is regular keypress so return the keycode
	  return kC;
   }

   function OnLoad() 
   { 
      // create a search control 
      var searchControl = new google.search.SearchControl();
 
      // create a drawOptions object
      var drawOptions = new google.search.DrawOptions();
      drawOptions.setInput(document.getElementById(inputControl));

      // web search, open, alternate root 
      var options = new google.search.SearcherOptions(); 
      options.setExpandMode(google.search.SearchControl.EXPAND_MODE_OPEN);
      options.setRoot(document.getElementById(tgtContainer));
      options.setNoResultsString("No results found."); 

      searchControl.setLinkTarget(google.search.Search.LINK_TARGET_SELF);
      searchControl.setResultSetSize(google.search.Search.SMALL_RESULTSET); 

      var siteSearch = new google.search.WebSearch(); 
      siteSearch.setSiteRestriction("013937029029955721681:llbxqgntkts");
      siteSearch.setQueryAddition("+filetype:aspx -fileticket");
      siteSearch.setUserDefinedLabel("WEB PAGE search results from TMF.ORG");
      searchControl.addSearcher(siteSearch, options); 

      var fileSearch = new google.search.WebSearch();
      fileSearch.setSiteRestriction("*.tmf.org/portals");
      fileSearch.setQueryAddition("-filetype:aspx");
      fileSearch.setUserDefinedLabel("FILE search results from TMF.ORG (files stored on TMF servers)");
      searchControl.addSearcher(fileSearch, options); 
      
      searchControl.setSearchCompleteCallback(null, function()
      {
         // Now we parse the rendered links and change the link targets to open results in a new window
         var uglink = document.getElementById("TMF_SearchResults").getElementsByTagName("a");
         for(var i=0;i<uglink.length;i++){uglink[i].setAttribute("target","_blank")}

         // Now add a message to inform user that links open in a new tab/window
         //var myEl = document.createElement('div');
         //myEl.innerHTML = 'NOTE: Result links will open in a new tab or window.';
         //var mySourceEl = document.getElementById(tgtContainer);
         //mySourceEl.insertBefore(myEl, mySourceEl.firstChild);



         // This is post-processing of displayed link info.   We want to display full paths to pages but only a domain and the actual filename for files.
         var gs_resDIV = document.getElementById(tgtContainer);
         var gs_longURLs = gs_resDIV.getElementsByTagName("DIV");

         for(var x in gs_longURLs)
         {
           // Is it a "more results" link?
           if (gs_longURLs[x].className == "gsc-trailing-more-results")
           {
              //gs_longURLs[x].innerHTML='<img style="float:right" alt="Google Site Search" src='+document.getElementById("tmf_skinpath").pvalue +' />';
           }
           else
           // Is it a file link we've already parsed?
           if (left(gs_longURLs[x].innerText,10) != "Filetype: ")
           {
              // See if it is a page (.aspx) or not.
              if (gs_longURLs[x].className == "gs-visibleUrl gs-visibleUrl-long")
              {
                 y = gs_longURLs[x].innerText.split("/");
                 z = y[y.length-1];
                 // Now we want to see the file extension.
                 z1 = z.split(".");
                 if (z1.length>0)
                 {
                    z2 = left(z1[z1.length-1], 15);
                    // Is this a DNN link to a file?
                    if (z2.toLowerCase() != "aspx?fileticket")
                    {
                       z2 = left(z1[z1.length-1], 3);
                       if (z2.toLowerCase() == "asp")
                       {
                          gs_longURLs[x].style.display='block';
                       }
                    
                       else
                       {
                          gs_longURLs[x].style.display='block';
						  // Replace file path with filetype plus the domain where file resides.
                          gs_longURLs[x].innerText="Filetype: "+String(z1[z1.length-1]).toUpperCase()+"       "+y[0];
                       }
                    }
                    else
                    {
					      // Link is not of type 'fileticket' so we aren't certian of proper parsing rules to determine filetype.
                          gs_longURLs[x].style.display='block';
                          gs_longURLs[x].innerText="Filetype: Unknown       "+y[0];                     
                    }
                 }
              }
              else
              if (gs_longURLs[x].className == "gs-visibleUrl gs-visibleUrl-short")
              {
                 gs_longURLs[x].style.display='none';
              }
            }
         }
      });

      searchControl.draw(null, drawOptions);
} 

