<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>tim laqua dot com &#187; script</title>
	<atom:link href="http://timlaqua.com/tag/script/feed/" rel="self" type="application/rss+xml" />
	<link>http://timlaqua.com</link>
	<description>Thoughts and Code from Tim Laqua</description>
	<lastBuildDate>Sun, 09 May 2010 15:25:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>JavaScript Auto-Suggest from XML</title>
		<link>http://timlaqua.com/2007/10/javascript-auto-suggest-from-xml/</link>
		<comments>http://timlaqua.com/2007/10/javascript-auto-suggest-from-xml/#comments</comments>
		<pubDate>Sun, 28 Oct 2007 15:21:57 +0000</pubDate>
		<dc:creator>Tim</dc:creator>
				<category><![CDATA[Scripts & Code]]></category>
		<category><![CDATA[autosuggest]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[xmlhttp]]></category>

		<guid isPermaLink="false">http://rp4l.com/tim/?p=3</guid>
		<description><![CDATA[The other day, a co-worker requested an auto-suggest feature in the user name field of a web app that I had written a few months ago. Why? Not sure - to save 6 keystrokes, I suppose - but then again, 6 keystrokes at a time, it becomes justifiable eventually... And really, who can turn down [...]]]></description>
			<content:encoded><![CDATA[<p>The other day, a co-worker requested an auto-suggest feature in the user name field of a web app that I had written a few months ago. Why? Not sure - to save 6 keystrokes, I suppose - but then again, 6 keystrokes at a time, it becomes justifiable eventually... And really, who can turn down a challenge like that?</p>
<ul>Post-Implementation Numbers:</p>
<li>Average Keystrokes saved per day: <strong>179.4</strong></li>
<li>Characters in Scripts (Client and Server, no formatting): <strong>4886</strong></li>
<li>Payback time: <strong>27.24 Days</strong></li>
</ul>
<p>Not bad in terms of effort. Even calculating in the difference between developer salary and data entry salary - the payback is still within 3 months. (Assuming we develop in a vacuum and ignore opportunity costs - i.e. we had nothing better to do at the time.)<br />
<span id="more-3"></span><br />
For starters, we need to be able to do XPath queries in FireFox as well as IE - so here we make the selectNodes method available in FireFox:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>window.<span style="color: #660066;">ActiveXObject</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
  Element.<span style="color: #660066;">prototype</span>.<span style="color: #660066;">selectNodes</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>sXPath<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #003366; font-weight: bold;">var</span> oEvaluator <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> XPathEvaluator<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #003366; font-weight: bold;">var</span> oResult <span style="color: #339933;">=</span> oEvaluator.<span style="color: #660066;">evaluate</span><span style="color: #009900;">&#40;</span>sXPath<span style="color: #339933;">,</span> <span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">,</span> 
      XPathResult.<span style="color: #660066;">ORDERED_NODE_ITERATOR_TYPE</span><span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #003366; font-weight: bold;">var</span> aNodes <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> Array<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>oResult <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
      <span style="color: #003366; font-weight: bold;">var</span> oElement <span style="color: #339933;">=</span> oResult.<span style="color: #660066;">iterateNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
      <span style="color: #000066; font-weight: bold;">while</span><span style="color: #009900;">&#40;</span>oElement<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
        aNodes.<span style="color: #660066;">push</span><span style="color: #009900;">&#40;</span>oElement<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        oElement <span style="color: #339933;">=</span> oResult.<span style="color: #660066;">iterateNext</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
      <span style="color: #009900;">&#125;</span> 
    <span style="color: #009900;">&#125;</span> 
    <span style="color: #000066; font-weight: bold;">return</span> aNodes<span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span> 
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Now we initalize everything</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">var</span> autoSuggestXML<span style="color: #339933;">;</span> 
<span style="color: #003366; font-weight: bold;">var</span> keysDown <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> 
<span style="color: #003366; font-weight: bold;">var</span> fragment <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span>   
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> initAutoSuggest<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
  document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;updateText&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #000066;">focus</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">ActiveXObject</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    autoSuggestXML <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">new</span> ActiveXObject<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Msxml2.DOMDocument&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    autoSuggestXML.<span style="color: #660066;">setProperty</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;SelectionLanguage&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;XPath&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span> 
    autoSuggestXML <span style="color: #339933;">=</span> 
      document.<span style="color: #660066;">implementation</span>.<span style="color: #660066;">createDocument</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">,</span><span style="color: #003366; font-weight: bold;">null</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span> 
  autoSuggestXML.<span style="color: #660066;">load</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;autoSuggest.xml&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  registerAutoSuggestField<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;userInput&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> registerAutoSuggestField<span style="color: #009900;">&#40;</span>field<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
  document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span>field<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">onkeyup</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>e<span style="color: #009900;">&#41;</span> e <span style="color: #339933;">=</span> window.<span style="color: #660066;">event</span><span style="color: #339933;">;</span> 
    autoSuggest<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #339933;">,</span>e<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span>   
&nbsp;
  document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span>field<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">onkeydown</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    keysDown<span style="color: #339933;">++;</span> 
  <span style="color: #009900;">&#125;</span>   
&nbsp;
  document.<span style="color: #660066;">getElementById</span><span style="color: #009900;">&#40;</span>field<span style="color: #009900;">&#41;</span>.<span style="color: #000066;">onfocus</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    keysDown <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span> 
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Here's some functions I borrowed from a tutorial on an AutoSuggest Javascript class out on the web for cross-browser compatable text selection</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> selectRange<span style="color: #009900;">&#40;</span>oTextbox <span style="color: #009966; font-style: italic;">/*:object*/</span><span style="color: #339933;">,</span> iStart <span style="color: #009966; font-style: italic;">/*:int*/</span><span style="color: #339933;">,</span> 
        iLength <span style="color: #009966; font-style: italic;">/*:int*/</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
  <span style="color: #006600; font-style: italic;">//use text ranges for Internet Explorer </span>
  <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>oTextbox.<span style="color: #660066;">createTextRange</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #003366; font-weight: bold;">var</span> oRange <span style="color: #339933;">=</span> oTextbox.<span style="color: #660066;">createTextRange</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    oRange.<span style="color: #660066;">moveStart</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;character&quot;</span><span style="color: #339933;">,</span> iStart<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    oRange.<span style="color: #660066;">moveEnd</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;character&quot;</span><span style="color: #339933;">,</span> iLength <span style="color: #339933;">-</span> oTextbox.<span style="color: #660066;">value</span>.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
    oRange.<span style="color: #660066;">select</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #006600; font-style: italic;">//use setSelectionRange() for Mozilla </span>
  <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>oTextbox.<span style="color: #660066;">setSelectionRange</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    oTextbox.<span style="color: #660066;">setSelectionRange</span><span style="color: #009900;">&#40;</span>iStart<span style="color: #339933;">,</span> iLength<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
  <span style="color: #009900;">&#125;</span>   
&nbsp;
  <span style="color: #006600; font-style: italic;">//set focus back to the textbox </span>
  oTextbox.<span style="color: #000066;">focus</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>    
&nbsp;
<span style="color: #003366; font-weight: bold;">function</span> typeAhead <span style="color: #009900;">&#40;</span>oTextbox <span style="color: #009966; font-style: italic;">/*:object*/</span><span style="color: #339933;">,</span> sSuggestion <span style="color: #009966; font-style: italic;">/*:String*/</span><span style="color: #339933;">,</span> 
         sFragment <span style="color: #009966; font-style: italic;">/*:String*/</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
  <span style="color: #003366; font-weight: bold;">var</span> iLen <span style="color: #339933;">=</span> oTextbox.<span style="color: #660066;">value</span>.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> 
  oTextbox.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> sSuggestion<span style="color: #339933;">;</span> 
  selectRange<span style="color: #009900;">&#40;</span>oTextbox<span style="color: #339933;">,</span> iLen<span style="color: #339933;">,</span> sSuggestion.<span style="color: #660066;">length</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span></pre></div></div>

<p>And now for the workhorse function</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #003366; font-weight: bold;">function</span> autoSuggest<span style="color: #009900;">&#40;</span>t<span style="color: #339933;">,</span> e<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
  <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>window.<span style="color: #660066;">event</span><span style="color: #009900;">&#41;</span> keycode <span style="color: #339933;">=</span> window.<span style="color: #660066;">event</span>.<span style="color: #660066;">keyCode</span><span style="color: #339933;">;</span> 
  <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span> keycode <span style="color: #339933;">=</span> e.<span style="color: #660066;">which</span><span style="color: #339933;">;</span>   
&nbsp;
  <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">--</span>keysDown <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span> <span style="color: #339933;">&amp;&amp;</span> keysDown <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> <span style="color: #000066; font-weight: bold;">return</span><span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>   
&nbsp;
  <span style="color: #006600; font-style: italic;">//set to 0, just incase we passed a value greater than 2 </span>
  <span style="color: #006600; font-style: italic;">//(happens when a key is held down) </span>
  keysDown <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span>   
&nbsp;
  <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>t.<span style="color: #660066;">value</span>.<span style="color: #660066;">length</span> <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
    <span style="color: #003366; font-weight: bold;">var</span> keycode<span style="color: #339933;">;</span>   
&nbsp;
    <span style="color: #006600; font-style: italic;">//make sure not to interfere with non-character keys </span>
    <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>keycode <span style="color: #339933;">==</span> <span style="color: #CC0000;">38</span> <span style="color: #339933;">||</span> keycode <span style="color: #339933;">==</span> <span style="color: #CC0000;">40</span> <span style="color: #339933;">||</span> keycode <span style="color: #339933;">==</span> <span style="color: #CC0000;">33</span> <span style="color: #339933;">||</span> 
      <span style="color: #009900;">&#40;</span>keycode <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">46</span> <span style="color: #339933;">&amp;&amp;</span> keycode <span style="color: #339933;">&lt;</span> <span style="color: #CC0000;">112</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">||</span> keycode <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">123</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
      <span style="color: #003366; font-weight: bold;">var</span> direction <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span> 
      <span style="color: #003366; font-weight: bold;">var</span> previousValue <span style="color: #339933;">=</span> <span style="color: #3366CC;">''</span><span style="color: #339933;">;</span> 
      <span style="color: #003366; font-weight: bold;">var</span> id<span style="color: #339933;">;</span> 
      <span style="color: #003366; font-weight: bold;">var</span> value<span style="color: #339933;">;</span>   
&nbsp;
      <span style="color: #000066; font-weight: bold;">switch</span> <span style="color: #009900;">&#40;</span>keycode<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
        <span style="color: #000066; font-weight: bold;">case</span> <span style="color: #CC0000;">38</span><span style="color: #339933;">:</span> 
          <span style="color: #006600; font-style: italic;">//up </span>
          direction <span style="color: #339933;">=</span> <span style="color: #3366CC;">'up'</span><span style="color: #339933;">;</span> 
          previousValue <span style="color: #339933;">=</span> t.<span style="color: #660066;">value</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
          t.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> fragment<span style="color: #339933;">;</span> 
          <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span> 
        <span style="color: #000066; font-weight: bold;">case</span> <span style="color: #CC0000;">40</span><span style="color: #339933;">:</span> 
          <span style="color: #006600; font-style: italic;">//down </span>
          direction <span style="color: #339933;">=</span> <span style="color: #3366CC;">'down'</span><span style="color: #339933;">;</span> 
          previousValue <span style="color: #339933;">=</span> t.<span style="color: #660066;">value</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
          t.<span style="color: #660066;">value</span> <span style="color: #339933;">=</span> fragment<span style="color: #339933;">;</span> 
          <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span> 
        <span style="color: #003366; font-weight: bold;">default</span><span style="color: #339933;">:</span> 
          fragment <span style="color: #339933;">=</span> t.<span style="color: #660066;">value</span><span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span> 
      value <span style="color: #339933;">=</span> t.<span style="color: #660066;">value</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
      id <span style="color: #339933;">=</span> t.<span style="color: #660066;">id</span>.<span style="color: #660066;">toLowerCase</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
&nbsp;
      <span style="color: #006600; font-style: italic;">//if(previousValue != '') alert(previousValue + &quot; &quot; + value);   </span>
&nbsp;
      <span style="color: #003366; font-weight: bold;">var</span> nodelist <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>   
&nbsp;
      nodelist <span style="color: #339933;">=</span> autoSuggestXML.<span style="color: #660066;">documentElement</span>.<span style="color: #660066;">selectNodes</span><span style="color: #009900;">&#40;</span> 
                 <span style="color: #3366CC;">&quot;field[@id='&quot;</span> <span style="color: #339933;">+</span> id <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;']/value[starts-with(.,'&quot;</span> <span style="color: #339933;">+</span> 
	             fragment <span style="color: #339933;">+</span> <span style="color: #3366CC;">&quot;')]&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>   
&nbsp;
      <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>nodelist <span style="color: #339933;">!=</span> <span style="color: #003366; font-weight: bold;">null</span> <span style="color: #339933;">&amp;&amp;</span> nodelist.<span style="color: #660066;">length</span> <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
        <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>nodelist.<span style="color: #660066;">length</span> <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">1</span> <span style="color: #339933;">&amp;&amp;</span> direction <span style="color: #339933;">!=</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
          <span style="color: #003366; font-weight: bold;">var</span> i<span style="color: #339933;">;</span> 
          <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> nodelist.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
            <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>nodelist<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #660066;">firstChild</span>.<span style="color: #660066;">nodeValue</span> <span style="color: #339933;">==</span> previousValue<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
              <span style="color: #000066; font-weight: bold;">break</span><span style="color: #339933;">;</span> 
            <span style="color: #009900;">&#125;</span> 
          <span style="color: #009900;">&#125;</span> 
          <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span>direction <span style="color: #339933;">==</span> <span style="color: #3366CC;">'up'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span> 
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>i<span style="color: #339933;">&lt;</span>nodelist.<span style="color: #660066;">length</span> <span style="color: #009900;">&#41;</span>
              sSuggestion<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;String(nodelist[i+1].firstChild.nodeValue);&quot;</span>
            <span style="color: #000066; font-weight: bold;">else</span> 
              sSuggestion <span style="color: #339933;">=</span> String<span style="color: #009900;">&#40;</span>nodelist<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">firstChild</span>.<span style="color: #660066;">nodeValue</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
          <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span> 
            <span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span>i <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span> 
              sSuggestion <span style="color: #339933;">=</span> String<span style="color: #009900;">&#40;</span>nodelist<span style="color: #009900;">&#91;</span>i<span style="color: #339933;">-</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">firstChild</span>.<span style="color: #660066;">nodeValue</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
            <span style="color: #000066; font-weight: bold;">else</span> 
              sSuggestion <span style="color: #339933;">=</span> 
                String<span style="color: #009900;">&#40;</span>nodelist<span style="color: #009900;">&#91;</span>nodelist.<span style="color: #660066;">length</span> <span style="color: #339933;">-</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">firstChild</span>.<span style="color: #660066;">nodeValue</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
          <span style="color: #009900;">&#125;</span> 
        <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span> 
            <span style="color: #003366; font-weight: bold;">var</span> sSuggestion <span style="color: #339933;">=</span> String<span style="color: #009900;">&#40;</span>nodelist<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #660066;">firstChild</span>.<span style="color: #660066;">nodeValue</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
        <span style="color: #009900;">&#125;</span>   
&nbsp;
        typeAhead<span style="color: #009900;">&#40;</span>t<span style="color: #339933;">,</span> sSuggestion<span style="color: #009900;">&#41;</span> 
      <span style="color: #009900;">&#125;</span> 
    <span style="color: #009900;">&#125;</span> <span style="color: #000066; font-weight: bold;">else</span> <span style="color: #009900;">&#123;</span> 
      <span style="color: #006600; font-style: italic;">//ignore </span>
    <span style="color: #009900;">&#125;</span> 
  <span style="color: #009900;">&#125;</span> 
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ah, now lets examine the XML schema that this thing understands (<strong>autoSuggest.xml</strong>):</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;suggestions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;field</span> <span style="color: #000066;">id</span>=<span style="color: #ff0000;">&quot;userinput&quot;</span><span style="color: #000000; font-weight: bold;">&gt;</span><span style="color: #000000; font-weight: bold;">&lt;/field<span style="color: #000000; font-weight: bold;">&gt;</span></span></span> 
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>Tim Laqua<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>admin<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/value<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/suggestions<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>To be continued... (I'll figure out where I borrowed those functions from as well and credit the guy).</p>
]]></content:encoded>
			<wfw:commentRss>http://timlaqua.com/2007/10/javascript-auto-suggest-from-xml/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
