<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: input code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 24 Jul 2008 06:18:09 GMT</pubDate>
    <description>DZone Snippets: input code</description>
    <item>
      <title>'Delete a Twitter entry' dissected</title>
      <link>http://snippets.dzone.com/posts/show/5145</link>
      <description>The following code was copied from my Twitter home page, it shows how to delete a twitter entry on the server.&lt;br /&gt;&lt;br /&gt;raw HTML code with embedded JavaScript code.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="/status/destroy/719423092" onclick="if (confirm('Sure you want to delete this update? There is NO undo!')) &lt;br /&gt;{var f = document.createElement('form'); f.style.display = 'none'; this.parentNode.appendChild(f); f.method = &lt;br /&gt;'POST'; f.action = this.href;var m = document.createElement('input'); m.setAttribute('type', 'hidden'); &lt;br /&gt;m.setAttribute('name', '_method'); m.setAttribute('value', 'delete'); f.appendChild(m);var s = &lt;br /&gt;document.createElement('input'); s.setAttribute('type', 'hidden'); s.setAttribute('name', 'authenticity_token'); &lt;br /&gt;s.setAttribute('value', 'd0057265c3784d2a6dc6cdb2c26083f638152151'); f.appendChild(s);f.submit(); };return false;" &lt;br /&gt;title="Delete this update?"&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;same code as above but with comments.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;a href="/status/destroy/719423092" onclick="&lt;br /&gt;&lt;br /&gt;                     // if the user clicks the 'OK' button the confirm function will return true&lt;br /&gt;if (confirm('Sure you want to delete this update? There is NO undo!')) { &lt;br /&gt;&lt;br /&gt;  // -- dhtml: creating html elements on-the-fly -------------------------------&lt;br /&gt;  var f = document.createElement('form'); // create the dhtml 'form' (&lt;form/&gt;) element&lt;br /&gt;  f.style.display = 'none';               // hide the form&lt;br /&gt;  this.parentNode.appendChild(f);         // append the form element to the parent of the current node (&lt;a/&gt;)&lt;br /&gt;  f.method = 'POST';                      // add the method to the form&lt;br /&gt;  f.action = this.href;                   // add the action using the href of the current node (&lt;a/&gt;)&lt;br /&gt;    &lt;br /&gt;  var m = document.createElement('input');   // create the input (&lt;input/&gt;) 'element' &lt;br /&gt;  m.setAttribute('type', 'hidden');          // set the input type to 'hidden'&lt;br /&gt;  m.setAttribute('name', '_method');         // set the input name to '_method'&lt;br /&gt;  m.setAttribute('value', 'delete');         // set the input value to 'delete'&lt;br /&gt;  f.appendChild(m);                          // append the input element to the form element&lt;br /&gt;  &lt;br /&gt;  var s = document.createElement('input');   // create another input element&lt;br /&gt;  s.setAttribute('type', 'hidden');          // set the type to 'hidden'&lt;br /&gt;  s.setAttribute('name', 'authenticity_token'); // set the name to 'authenticity_token'&lt;br /&gt;  &lt;br /&gt;                                     // set the input element's value using a unique id.&lt;br /&gt;  s.setAttribute('value', 'd0057265c3784d2a6dc6cdb2c26083f638152151'); &lt;br /&gt;  &lt;br /&gt;  f.appendChild(s);                  // apend the input element to the form element&lt;br /&gt;  // -- end of dhtml: creating html elements on-the-fly -------------------------------&lt;br /&gt;  &lt;br /&gt;  f.submit(); // post the form data back to the server to delete the record, &lt;br /&gt;              // just as if the user had pressed the submit button.&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;  return false; // returning false cancels the default &lt;a href="..."&gt; request. &lt;br /&gt;                 // However if JavaScript had been disabled for some reason the &lt;br /&gt;                 // &lt;a href="..."&gt; would have acted normally, meaning the record &lt;br /&gt;                 // would have been deleted from following the URL request directly.&lt;br /&gt; "&lt;br /&gt;&lt;/code&gt; &lt;br /&gt;Note: Twitter needs JavaScript for the web page to work properly, I've tried and it is not possible to delete a record without JavaScript.  The authenticity_token has been altered by me to prevent any malicious activity on my Twitter account.&lt;br /&gt;</description>
      <pubDate>Sat, 16 Feb 2008 13:17:07 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/5145</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Capturing the value from an HTML text box - Ajax style</title>
      <link>http://snippets.dzone.com/posts/show/4902</link>
      <description>This extract of JavaScript code illustrates how the value of a text box on an HTML form could be saved efficiently when used with AJAX. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;input type="text" name="proj1" id="proj1" value="Car_log" &lt;br /&gt;  onkeyup="timed_updateSummaryCRecord(event.keyCode, '1','project', this.value)" /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The onkeyup event retrieves the user input as soon as the key is pressed, then the event.keyCode is validated to ensure only alpha-numeric characters trigger the save routine. &lt;br /&gt;&lt;code&gt;&lt;br /&gt;function timed_updateSummaryCRecord(keyCode, parent_id, field,  val) {&lt;br /&gt;  if (val.length &gt; 0 &amp;&amp; ((keyCode &gt; 40) || (keyCode == 8)) ) {&lt;br /&gt;    clearTimeout(t);&lt;br /&gt;    t = setTimeout("updateSummaryCRecord('" + parent_id + "', '" + field + "', '" + val + "')", 1000);&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The setTimeout will trigger the save routine after 1 second, however if the user continues to type before the 1 second timer has elapsed, the running timer will be cancelled and the new timer will start.&lt;br /&gt;&lt;br /&gt;Note: keyCode value '8' is accepted because it is the backspace key. It would also be helpful to accept the delete key press.</description>
      <pubDate>Tue, 18 Dec 2007 17:08:23 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4902</guid>
      <author>jrobertson (James Robertson)</author>
    </item>
    <item>
      <title>Selection //JavaScript Class</title>
      <link>http://snippets.dzone.com/posts/show/4620</link>
      <description>&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jsfromhell.com/forms/selection"&gt;&lt;br /&gt;Retrieves and sets the cursor position, as well the selected text of inputs and textareas. After searching, I saw it's the only code which retrieves right information in textareas under Internet Explorer without damaging the "Ctrl+Z"&lt;br /&gt;&lt;br /&gt;[UPDATED CODE AND HELP CAN BE FOUND HERE]&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com/forms/selection [v1.0]&lt;br /&gt;&lt;br /&gt;Selection = function(input){&lt;br /&gt;	this.isTA = (this.input = input).nodeName.toLowerCase() == "textarea";&lt;br /&gt;};&lt;br /&gt;with({o: Selection.prototype}){&lt;br /&gt;	o.setCaret = function(start, end){&lt;br /&gt;		var o = this.input;&lt;br /&gt;		if(Selection.isStandard)&lt;br /&gt;			o.setSelectionRange(start, end);&lt;br /&gt;		else if(Selection.isSupported){&lt;br /&gt;			var t = this.input.createTextRange();&lt;br /&gt;			end -= start + o.value.slice(start + 1, end).split("\n").length - 1;&lt;br /&gt;			start -= o.value.slice(0, start).split("\n").length - 1;&lt;br /&gt;			t.move("character", start), t.moveEnd("character", end), t.select();&lt;br /&gt;		}&lt;br /&gt;	};&lt;br /&gt;	o.getCaret = function(){&lt;br /&gt;		var o = this.input, d = document;&lt;br /&gt;		if(Selection.isStandard)&lt;br /&gt;			return {start: o.selectionStart, end: o.selectionEnd};&lt;br /&gt;		else if(Selection.isSupported){&lt;br /&gt;			var s = (this.input.focus(), d.selection.createRange()), r, start, end, value;&lt;br /&gt;			if(s.parentElement() != o)&lt;br /&gt;				return {start: 0, end: 0};&lt;br /&gt;			if(this.isTA ? (r = s.duplicate()).moveToElementText(o) : r = o.createTextRange(), !this.isTA)&lt;br /&gt;				return r.setEndPoint("EndToStart", s), {start: r.text.length, end: r.text.length + s.text.length};&lt;br /&gt;			for(var $ = "[###]"; (value = o.value).indexOf($) + 1; $ += $);&lt;br /&gt;			r.setEndPoint("StartToEnd", s), r.text = $ + r.text, end = o.value.indexOf($);&lt;br /&gt;			s.text = $, start = o.value.indexOf($);&lt;br /&gt;			if(d.execCommand &amp;&amp; d.queryCommandSupported("Undo"))&lt;br /&gt;				for(r = 3; --r; d.execCommand("Undo"));&lt;br /&gt;			return o.value = value, this.setCaret(start, end), {start: start, end: end};&lt;br /&gt;		}&lt;br /&gt;		return {start: 0, end: 0};&lt;br /&gt;	};&lt;br /&gt;	o.getText = function(){&lt;br /&gt;		var o = this.getCaret();&lt;br /&gt;		return this.input.value.slice(o.start, o.end);&lt;br /&gt;	};&lt;br /&gt;	o.setText = function(text){&lt;br /&gt;		var o = this.getCaret(), i = this.input, s = i.value;&lt;br /&gt;		i.value = s.slice(0, o.start) + text + s.slice(o.end);&lt;br /&gt;		this.setCaret(o.start += text.length, o.start);&lt;br /&gt;	};&lt;br /&gt;	new function(){&lt;br /&gt;		var d = document, o = d.createElement("input"), s = Selection;&lt;br /&gt;		s.isStandard = "selectionStart" in o;&lt;br /&gt;		s.isSupported = s.isStandard || (o = d.selection) &amp;&amp; !!o.createRange();&lt;br /&gt;	};&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Example&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;form id="form"&gt;&lt;br /&gt;	&lt;fieldset&gt;&lt;br /&gt;		&lt;legend&gt;Selection Test&lt;/legend&gt;&lt;br /&gt;		&lt;textarea name="text" rows="10" cols="30"&gt;&lt;br /&gt;www.jsfromhell.com&lt;br /&gt;Jonas Carlos Lalala&lt;br /&gt;Bin Laden x Bush&lt;br /&gt;		&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;		&lt;input name="getText" type="button" value="[Get selected text]" /&gt;&lt;br /&gt;		&lt;input name="getSel" type="button" value="[Get cursor]" /&gt;&lt;br /&gt;		&lt;br /&gt;&lt;input name="setText" type="button" value="[Set selected text]" /&gt;&lt;br /&gt;		&lt;input name="setSel" type="button" value="[Set cursor]" /&gt;&lt;br /&gt;	&lt;/fieldset&gt;&lt;br /&gt;&lt;/form&gt;&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;var f = document.forms.form;&lt;br /&gt;var selection = new Selection(f.text);&lt;br /&gt;&lt;br /&gt;f.getText.onclick = function(){&lt;br /&gt;	alert(selection.getText());&lt;br /&gt;	f.text.focus();&lt;br /&gt;};&lt;br /&gt;f.setText.onclick = function(){&lt;br /&gt;	var s = prompt("New text:", selection.getText());&lt;br /&gt;	s !== null &amp;&amp; selection.setText(s);&lt;br /&gt;	f.text.focus();&lt;br /&gt;};&lt;br /&gt;f.getSel.onclick = function(){&lt;br /&gt;	var s = selection.getCaret();&lt;br /&gt;	alert("Start: " + s.start + "\nEnd: " + s.end);&lt;br /&gt;	f.text.focus();&lt;br /&gt;};&lt;br /&gt;f.setSel.onclick = function(){&lt;br /&gt;	var s = selection.getCaret();&lt;br /&gt;	selection.setCaret(+prompt("Start:", s.start) || 0, +prompt("End:", s.end) || 0);&lt;br /&gt;	f.text.focus();&lt;br /&gt;};&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Sat, 06 Oct 2007 15:02:21 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4620</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
    <item>
      <title>PHP: Create a SELECT input field</title>
      <link>http://snippets.dzone.com/posts/show/4555</link>
      <description>Creates a SELECT input field with an optional parameter to preselect an item&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;function selectfield($optionsarray, $selected = "") {&lt;br /&gt;  $returnval = "";&lt;br /&gt;  foreach ($optionsarray as $field=&gt;$value) {&lt;br /&gt;    if ($field == $selected) {&lt;br /&gt;      $returnval .= "&lt;option selected value='" . $field . "'&gt;" . $value . "&lt;/option&gt;\n";&lt;br /&gt;    } else {&lt;br /&gt;      $returnval .= "&lt;option value='" . $field . "'&gt;" . $value . "&lt;/option&gt;\n";&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  return $returnval;&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 19 Sep 2007 08:46:29 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4555</guid>
      <author>cornerblue (CornerBLUE, Inc.)</author>
    </item>
    <item>
      <title>Java DOM : Creating an XML Document from XML File</title>
      <link>http://snippets.dzone.com/posts/show/4010</link>
      <description>// description of your code here&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;    try&lt;br /&gt;    {&lt;br /&gt;      //&lt;br /&gt;      // Create the XML Document&lt;br /&gt;      //&lt;br /&gt;&lt;br /&gt;      DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();&lt;br /&gt;      DocumentBuilder docBuilder = dbfac.newDocumentBuilder();&lt;br /&gt;      Document doc = docBuilder.parse(filePath);&lt;br /&gt;&lt;br /&gt;      // ...&lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;    catch (Exception e)&lt;br /&gt;    {&lt;br /&gt;      // ...&lt;br /&gt;    }&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 14 May 2007 08:52:42 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4010</guid>
      <author>thitiv (Thiti V. Sintopchai)</author>
    </item>
    <item>
      <title>Reading a webpage in Java</title>
      <link>http://snippets.dzone.com/posts/show/3553</link>
      <description>A trivial piece of example code demonstrating how to get a BufferedReader from a Url as a String and do something with it. This code simply prints the contents of the website at the first argument to stdout. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import java.io.*;&lt;br /&gt;import java.net.URL;&lt;br /&gt;&lt;br /&gt;public class WebsiteReader&lt;br /&gt;{&lt;br /&gt;	public static BufferedReader read(String url) throws Exception{&lt;br /&gt;		return new BufferedReader(&lt;br /&gt;			new InputStreamReader(&lt;br /&gt;				new URL(url).openStream()));}&lt;br /&gt;&lt;br /&gt;	public static void main (String[] args) throws Exception{&lt;br /&gt;		BufferedReader reader = read(args[0]);&lt;br /&gt;		String line = reader.readLine();&lt;br /&gt;&lt;br /&gt;		while (line != null) {&lt;br /&gt;			System.out.println(line);&lt;br /&gt;			line = reader.readLine(); }}&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 20 Feb 2007 13:47:00 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3553</guid>
      <author>DRMacIver (David R. MacIver)</author>
    </item>
    <item>
      <title>using Event.observe for when a page loads</title>
      <link>http://snippets.dzone.com/posts/show/3025</link>
      <description>I just prefer this implementation as opposed to window.onload.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Event.observe( window, 'load', function() {&lt;br /&gt;  // Put the Javascript that needs to happen when the page&lt;br /&gt;  // loads here&lt;br /&gt;} );&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;For example, here's a way to make most of your input fields and all of your textareas have a different class when they're selected.  Useful if you want to style them differently with CSS.&lt;br /&gt;&lt;code&gt;Event.observe( window, 'load', function() {&lt;br /&gt;  var inputs = document.getElementsByTagName( 'input' );&lt;br /&gt;  var textareas = document.getElementsByTagName( 'textarea' );&lt;br /&gt;&lt;br /&gt;  for ( var i=0; i&lt;inputs.length; i++ ) {&lt;br /&gt;    type = inputs[i].type;&lt;br /&gt;&lt;br /&gt;    if (&lt;br /&gt;      ( type == 'button' || type == 'reset' ||&lt;br /&gt;      type == 'password' || type == 'text' ||&lt;br /&gt;      type == 'submit' ) &amp;&amp;&lt;br /&gt;      ( inputs[i].onfocus == '' ||&lt;br /&gt;      !inputs[i].onfocus )&lt;br /&gt;    ) {&lt;br /&gt;      inputs[i].onfocus = function() {&lt;br /&gt;        this.className = 'selected';&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      inputs[i].onblur = function() {&lt;br /&gt;        this.className = '';&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  for ( var i=0; i&lt;textareas.length; i++ ) {&lt;br /&gt;    if ( textareas[i].onfocus == '' || !textareas[i].onfocus ) {&lt;br /&gt;      textareas[i].onclick = function() {&lt;br /&gt;        this.className = 'selected';&lt;br /&gt;      }&lt;br /&gt;      textareas[i].onblur = function() {&lt;br /&gt;        this.className = '';&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;} );&lt;/code&gt;</description>
      <pubDate>Mon, 20 Nov 2006 20:47:53 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3025</guid>
      <author>moneypenny ()</author>
    </item>
    <item>
      <title>Cross platform getch() in python</title>
      <link>http://snippets.dzone.com/posts/show/915</link>
      <description>For Unix, it uses sys, tty, termios modules.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import sys, tty, termios&lt;br /&gt;fd = sys.stdin.fileno()&lt;br /&gt;old_settings = termios.tcgetattr(fd)&lt;br /&gt;tty.setraw(sys.stdin.fileno())&lt;br /&gt;ch = sys.stdin.read(1)&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;For Windows, it uses msvcrt module.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;import msvcrt&lt;br /&gt;ch = msvcrt.getch()&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;See more details and OSX code in this &lt;a href=http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/134892&gt;recipe&lt;/a&gt; by Danny Yoo.</description>
      <pubDate>Sat, 26 Nov 2005 14:51:17 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/915</guid>
      <author>korakot (Korakot Chaovavanich)</author>
    </item>
    <item>
      <title>JavaScript DateBoxControl</title>
      <link>http://snippets.dzone.com/posts/show/702</link>
      <description>In input forms on web pages you often have to validate dates and users are always entering something off the wall.  Simon Incutio came up with a script to parse the dates.  I added some stuff and turned it into a control of sorts.  It is sort of US centric with date entering but it does accept iso style entries.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// Date Box Control&lt;br /&gt;// &lt;br /&gt;// based on:&lt;br /&gt;//  'Magic' date parsing, by Simon Willison (6th October 2003)&lt;br /&gt;//   http://simon.incutio.com/archive/2003/10/06/betterDateInput&lt;br /&gt;// &lt;br /&gt;// Notes&lt;br /&gt;// To create a date box control, call the SetupDateBoxControl function.&lt;br /&gt;// It should be passed an input element with type of text.&lt;br /&gt;// This will first create a div after the input box.&lt;br /&gt;// Then it will associate the div with the input element.&lt;br /&gt;// The div will use the css classes: DateBoxControlMsg, DateBoxControlErrorMsg.&lt;br /&gt;// Then the div is associated with the input element.&lt;br /&gt;// Then the contents are validated so the div will get populated initially.&lt;br /&gt;// The onchange event of the input element will invoke the validation function.&lt;br /&gt;// The validation function populates the div.&lt;br /&gt;// If a successfully parsed date, the div gets a nicely formatted date.&lt;br /&gt;// If an unsuccessfully parse date, the div gets an error message.&lt;br /&gt;//&lt;br /&gt;// History&lt;br /&gt;// 02/03/2005 - WSR : modified for use as datebox control&lt;br /&gt;// 09/09/2005 - WSR : datebox is not required anymore (blank input is valid)&lt;br /&gt;//                  : added style class to datebox itself&lt;br /&gt;&lt;br /&gt;// hooks functionality up to given textbox&lt;br /&gt;function SetupDateBoxControl( ctlDateBox )&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;   // if a valid object was given&lt;br /&gt;   if (ctlDateBox)&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // add div after control for messages&lt;br /&gt;      var divMessage = document.createElement('div');&lt;br /&gt;      divMessage.className = 'DateBoxControlMsg';&lt;br /&gt;&lt;br /&gt;      // if there is a next sibling&lt;br /&gt;      if (ctlDateBox.nextSibling)&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         // insert before next sibling&lt;br /&gt;		   ctlDateBox.parentNode.insertBefore( divMessage, ctlDateBox.nextSibling );&lt;br /&gt;&lt;br /&gt;         }&lt;br /&gt;      // if there is not a next sibling&lt;br /&gt;      else&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         // append child to parent&lt;br /&gt;         ctlDateBox.parentNode.appendChild( divMessage );         &lt;br /&gt;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;      // link message div to textbox for easy script access&lt;br /&gt;      ctlDateBox.message = divMessage;&lt;br /&gt;&lt;br /&gt;      // validate current contents&lt;br /&gt;      DateBoxControl_Validate( ctlDateBox );&lt;br /&gt;&lt;br /&gt;      // hook up event handlers&lt;br /&gt;      ctlDateBox.onchange = function () { DateBoxControl_Validate(this); };&lt;br /&gt;      &lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;// add indexOf function to Array type&lt;br /&gt;// finds the index of the first occurence of item in the array, or -1 if not found&lt;br /&gt;Array.prototype.indexOf = function(item) {&lt;br /&gt;    for (var i = 0; i &lt; this.length; i++) {&lt;br /&gt;        if (this[i] == item) {&lt;br /&gt;            return i;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    return -1;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// add filter function to Array type&lt;br /&gt;// returns an array of items judged true by the passed in test function&lt;br /&gt;Array.prototype.filter = function(test) {&lt;br /&gt;    var matches = [];&lt;br /&gt;    for (var i = 0; i &lt; this.length; i++) {&lt;br /&gt;        if (test(this[i])) {&lt;br /&gt;            matches[matches.length] = this[i];&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;    return matches;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// add right function to String type&lt;br /&gt;// returns the rightmost x characters&lt;br /&gt;String.prototype.right = function( intLength ) {&lt;br /&gt;   if (intLength &gt;= this.length)&lt;br /&gt;      return this;&lt;br /&gt;   else&lt;br /&gt;      return this.substr( this.length - intLength, intLength );&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// add trim function to String type&lt;br /&gt;// trims leading and trailing whitespace&lt;br /&gt;String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };&lt;br /&gt;&lt;br /&gt;// arrays for month and weekday names&lt;br /&gt;var monthNames = "January February March April May June July August September October November December".split(" ");&lt;br /&gt;var weekdayNames = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" ");&lt;br /&gt;&lt;br /&gt;/* Takes a string, returns the index of the month matching that string, throws&lt;br /&gt;   an error if 0 or more than 1 matches&lt;br /&gt;*/&lt;br /&gt;function parseMonth(month) {&lt;br /&gt;    var matches = monthNames.filter(function(item) { &lt;br /&gt;        return new RegExp("^" + month, "i").test(item);&lt;br /&gt;    });&lt;br /&gt;    if (matches.length == 0) {&lt;br /&gt;        throw new Error("Invalid month string");&lt;br /&gt;    }&lt;br /&gt;    if (matches.length &lt; 1) {&lt;br /&gt;        throw new Error("Ambiguous month");&lt;br /&gt;    }&lt;br /&gt;    return monthNames.indexOf(matches[0]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Same as parseMonth but for days of the week */&lt;br /&gt;function parseWeekday(weekday) {&lt;br /&gt;    var matches = weekdayNames.filter(function(item) {&lt;br /&gt;        return new RegExp("^" + weekday, "i").test(item);&lt;br /&gt;    });&lt;br /&gt;    if (matches.length == 0) {&lt;br /&gt;        throw new Error("Invalid day string");&lt;br /&gt;    }&lt;br /&gt;    if (matches.length &lt; 1) {&lt;br /&gt;        throw new Error("Ambiguous weekday");&lt;br /&gt;    }&lt;br /&gt;    return weekdayNames.indexOf(matches[0]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function DateInRange( yyyy, mm, dd )&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;   // if month out of range&lt;br /&gt;   if ( mm &lt; 0 || mm &gt; 11 )&lt;br /&gt;      throw new Error('Invalid month value.  Valid months values are 1 to 12');&lt;br /&gt;&lt;br /&gt;   // get last day in month&lt;br /&gt;   var d = (11 == mm) ? new Date(yyyy + 1, 0, 0) : new Date(yyyy, mm + 1, 0);&lt;br /&gt;&lt;br /&gt;   // if date out of range&lt;br /&gt;   if ( dd &lt; 1 || dd &gt; d.getDate() )&lt;br /&gt;      throw new Error('Invalid date value.  Valid date values for ' + monthNames[mm] + ' are 1 to ' + d.getDate().toString());&lt;br /&gt;&lt;br /&gt;   return true;&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;/* Array of objects, each has 're', a regular expression and 'handler', a &lt;br /&gt;   function for creating a date from something that matches the regular &lt;br /&gt;   expression. Handlers may throw errors if string is unparseable. &lt;br /&gt;*/&lt;br /&gt;var dateParsePatterns = [&lt;br /&gt;    // Today&lt;br /&gt;    {   re: /^today/i,&lt;br /&gt;        handler: function() { &lt;br /&gt;            return new Date();&lt;br /&gt;        } &lt;br /&gt;    },&lt;br /&gt;    // Tomorrow&lt;br /&gt;    {   re: /^tomorrow/i,&lt;br /&gt;        handler: function() {&lt;br /&gt;            var d = new Date(); &lt;br /&gt;            d.setDate(d.getDate() + 1); &lt;br /&gt;            return d;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // Yesterday&lt;br /&gt;    {   re: /^yesterday/i,&lt;br /&gt;        handler: function() {&lt;br /&gt;            var d = new Date();&lt;br /&gt;            d.setDate(d.getDate() - 1);&lt;br /&gt;            return d;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // mmddyyyy (American style)&lt;br /&gt;    {   re: /(\d{2})(\d{2})(\d{4})/,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var yyyy = parseInt(bits[3], 10);&lt;br /&gt;            var dd = parseInt(bits[2], 10);&lt;br /&gt;            var mm = parseInt(bits[1], 10) - 1;&lt;br /&gt;&lt;br /&gt;            if ( DateInRange( yyyy, mm, dd ) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // mmddyy (American style) short year&lt;br /&gt;    {   re: /(\d{2})(\d{2})(\d{2})/,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var d = new Date();&lt;br /&gt;            var yyyy = d.getFullYear() - (d.getFullYear() % 100) + parseInt(bits[3], 10);&lt;br /&gt;            var dd = parseInt(bits[2], 10);&lt;br /&gt;            var mm = parseInt(bits[1], 10) - 1;&lt;br /&gt;&lt;br /&gt;            if ( DateInRange(yyyy, mm, dd) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // 4th&lt;br /&gt;    {   re: /^(\d{1,2})(st|nd|rd|th)?$/i, &lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var d = new Date();&lt;br /&gt;            var yyyy = d.getFullYear();&lt;br /&gt;            var dd = parseInt(bits[1], 10);&lt;br /&gt;            var mm = d.getMonth();&lt;br /&gt;&lt;br /&gt;            if ( DateInRange( yyyy, mm, dd ) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // 4th Jan&lt;br /&gt;    {   re: /^(\d{1,2})(?:st|nd|rd|th)? (\w+)$/i, &lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var d = new Date();&lt;br /&gt;            var yyyy = d.getFullYear();&lt;br /&gt;            var dd = parseInt(bits[1], 10);&lt;br /&gt;            var mm = parseMonth(bits[2]);&lt;br /&gt;&lt;br /&gt;            if ( DateInRange( yyyy, mm, dd ) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // 4th Jan 2003&lt;br /&gt;    {   re: /^(\d{1,2})(?:st|nd|rd|th)? (\w+),? (\d{4})$/i,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var yyyy = parseInt(bits[3], 10);&lt;br /&gt;            var dd = parseInt(bits[1], 10);&lt;br /&gt;            var mm = parseMonth(bits[2]);&lt;br /&gt;&lt;br /&gt;            if ( DateInRange( yyyy, mm, dd ) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // Jan 4th&lt;br /&gt;    {   re: /^(\w+) (\d{1,2})(?:st|nd|rd|th)?$/i, &lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var d = new Date();&lt;br /&gt;            var yyyy = d.getFullYear(); &lt;br /&gt;            var dd = parseInt(bits[2], 10);&lt;br /&gt;            var mm = parseMonth(bits[1]);&lt;br /&gt;&lt;br /&gt;            if ( DateInRange( yyyy, mm, dd ) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // Jan 4th 2003&lt;br /&gt;    {   re: /^(\w+) (\d{1,2})(?:st|nd|rd|th)?,? (\d{4})$/i,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var yyyy = parseInt(bits[3], 10); &lt;br /&gt;            var dd = parseInt(bits[2], 10);&lt;br /&gt;            var mm = parseMonth(bits[1]);&lt;br /&gt;&lt;br /&gt;            if ( DateInRange( yyyy, mm, dd ) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // next Tuesday - this is suspect due to weird meaning of "next"&lt;br /&gt;    {   re: /^next (\w+)$/i,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var d = new Date();&lt;br /&gt;            var day = d.getDay();&lt;br /&gt;            var newDay = parseWeekday(bits[1]);&lt;br /&gt;            var addDays = newDay - day;&lt;br /&gt;            if (newDay &lt;= day) {&lt;br /&gt;                addDays += 7;&lt;br /&gt;            }&lt;br /&gt;            d.setDate(d.getDate() + addDays);&lt;br /&gt;            return d;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // last Tuesday&lt;br /&gt;    {   re: /^last (\w+)$/i,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var d = new Date();&lt;br /&gt;            var wd = d.getDay();&lt;br /&gt;            var nwd = parseWeekday(bits[1]);&lt;br /&gt;         &lt;br /&gt;            // determine the number of days to subtract to get last weekday&lt;br /&gt;            // calculates 0 if weekdays are the same so we have to change this to 7&lt;br /&gt;            var addDays = (wd == nwd) ? -7 : (-1 * (wd + 7 - nwd)) % 7;&lt;br /&gt;            &lt;br /&gt;            // adjust date and return&lt;br /&gt;            d.setDate(d.getDate() + addDays);&lt;br /&gt;            return d;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // Tuesday&lt;br /&gt;    {   re: /^(\w+)$/i,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var d = new Date();&lt;br /&gt;            var wd = d.getDay();&lt;br /&gt;            var nwd = parseWeekday(bits[1]);&lt;br /&gt;         &lt;br /&gt;            // if same weekday, return date         &lt;br /&gt;            if (nwd == wd)&lt;br /&gt;               return d;&lt;br /&gt;&lt;br /&gt;            // if new weekday is before current weekday&lt;br /&gt;            if (nwd &lt; wd )&lt;br /&gt;               {&lt;br /&gt; &lt;br /&gt;               // calculate last weekday&lt;br /&gt;               d.setDate(d.getDate() + ((wd == nwd) ? -7 : (-1 * (wd + 7 - nwd)) % 7));&lt;br /&gt;&lt;br /&gt;               }&lt;br /&gt;            // if new weekday is after current weekday&lt;br /&gt;            else&lt;br /&gt;               {&lt;br /&gt;&lt;br /&gt;               // calculate next weekday&lt;br /&gt;               d.setDate(d.getDate() + (nwd - wd));&lt;br /&gt;&lt;br /&gt;               }&lt;br /&gt;               &lt;br /&gt;            return d;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // mm/dd/yyyy (American style)&lt;br /&gt;    {   re: /(\d{1,2})\/(\d{1,2})\/(\d{4})/,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var yyyy = parseInt(bits[3], 10);&lt;br /&gt;            var dd = parseInt(bits[2], 10);&lt;br /&gt;            var mm = parseInt(bits[1], 10) - 1;&lt;br /&gt;&lt;br /&gt;            if ( DateInRange( yyyy, mm, dd ) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // mm/dd/yy (American style) short year&lt;br /&gt;    {   re: /(\d{1,2})\/(\d{1,2})\/(\d{1,2})/,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var d = new Date();&lt;br /&gt;            var yyyy = d.getFullYear() - (d.getFullYear() % 100) + parseInt(bits[3], 10);&lt;br /&gt;            var dd = parseInt(bits[2], 10);&lt;br /&gt;            var mm = parseInt(bits[1], 10) - 1;&lt;br /&gt;&lt;br /&gt;            if ( DateInRange(yyyy, mm, dd) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // mm/dd (American style) omitted year&lt;br /&gt;    {   re: /(\d{1,2})\/(\d{1,2})/,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var d = new Date();&lt;br /&gt;            var yyyy = d.getFullYear();&lt;br /&gt;            var dd = parseInt(bits[2], 10);&lt;br /&gt;            var mm = parseInt(bits[1], 10) - 1;&lt;br /&gt;&lt;br /&gt;            if ( DateInRange(yyyy, mm, dd) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // yyyy-mm-dd (ISO style)&lt;br /&gt;    {   re: /(\d{4})-(\d{1,2})-(\d{1,2})/,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var yyyy = parseInt(bits[1], 10);&lt;br /&gt;            var dd = parseInt(bits[3], 10);&lt;br /&gt;            var mm = parseInt(bits[2], 10) - 1;&lt;br /&gt;&lt;br /&gt;            if ( DateInRange( yyyy, mm, dd ) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // yy-mm-dd (ISO style) short year&lt;br /&gt;    {   re: /(\d{1,2})-(\d{1,2})-(\d{1,2})/,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var d = new Date();&lt;br /&gt;            var yyyy = d.getFullYear() - (d.getFullYear() % 100) + parseInt(bits[1], 10);&lt;br /&gt;            var dd = parseInt(bits[3], 10);&lt;br /&gt;            var mm = parseInt(bits[2], 10) - 1;&lt;br /&gt;&lt;br /&gt;            if ( DateInRange( yyyy, mm, dd ) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    },&lt;br /&gt;    // mm-dd (ISO style) omitted year&lt;br /&gt;    {   re: /(\d{1,2})-(\d{1,2})/,&lt;br /&gt;        handler: function(bits) {&lt;br /&gt;&lt;br /&gt;            var d = new Date();&lt;br /&gt;            var yyyy = d.getFullYear();&lt;br /&gt;            var dd = parseInt(bits[2], 10);&lt;br /&gt;            var mm = parseInt(bits[1], 10) - 1;&lt;br /&gt;&lt;br /&gt;            if ( DateInRange( yyyy, mm, dd ) )&lt;br /&gt;               return new Date(yyyy, mm, dd);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;];&lt;br /&gt;&lt;br /&gt;// parses date string input&lt;br /&gt;function parseDateString( strDateInput )&lt;br /&gt;   {&lt;br /&gt;   &lt;br /&gt;   // cycle through date parse patterns&lt;br /&gt;   for (var i = 0; i &lt; dateParsePatterns.length; i++)&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // get regular expression for this pattern&lt;br /&gt;      var re = dateParsePatterns[i].re;&lt;br /&gt;&lt;br /&gt;      // get handler function for this pattern&lt;br /&gt;      var handler = dateParsePatterns[i].handler;&lt;br /&gt;&lt;br /&gt;      // parse input using regular expression&lt;br /&gt;      var bits = re.exec(strDateInput);&lt;br /&gt;&lt;br /&gt;      // if there was a match&lt;br /&gt;      if (bits)&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         alert( re );&lt;br /&gt;&lt;br /&gt;         // return the result of the handler function (which constitutes bits into a date)&lt;br /&gt;         return handler(bits);&lt;br /&gt;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   // if no pattern matched - throw exception&lt;br /&gt;   throw new Error("Invalid date string");&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;// validates the input from datebox as a date&lt;br /&gt;function DateBoxControl_Validate( ctlDateBox )&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;   ctlDateBox.value = ctlDateBox.value.trim();&lt;br /&gt;&lt;br /&gt;   if ( ctlDateBox.value.length &gt; 0 )&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      try&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         // parse input to get date  (error is raised if it can't be parsed)&lt;br /&gt;         var dtValue = parseDateString(ctlDateBox.value.trim());&lt;br /&gt;&lt;br /&gt;         // assign date in mm/dd/yyyy format to textbox&lt;br /&gt;         ctlDateBox.value = ('0' + (dtValue.getMonth() + 1).toString()).right(2) + '/' + ('0' + dtValue.getDate().toString()).right(2) + '/' + dtValue.getFullYear().toString();&lt;br /&gt;&lt;br /&gt;         // add more formal date to message div associated with textbox&lt;br /&gt;         if (!ctlDateBox.message.firstChild)&lt;br /&gt;            ctlDateBox.message.appendChild(document.createTextNode(dtValue.toDateString()));&lt;br /&gt;         else&lt;br /&gt;            ctlDateBox.message.firstChild.nodeValue = dtValue.toDateString();&lt;br /&gt;&lt;br /&gt;         // swith class name back to default so styling is changed&lt;br /&gt;         ctlDateBox.message.className = 'DateBoxControlMsg';&lt;br /&gt;         ctlDateBox.className = 'DateBoxControl';&lt;br /&gt;&lt;br /&gt;         }&lt;br /&gt;      catch (e)&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         // use error message from exception&lt;br /&gt;         var strMessage = e.message;&lt;br /&gt;&lt;br /&gt;         // give a nicer message to built-in javascript exception message&lt;br /&gt;         if (strMessage.indexOf('is null or not an object') &lt; -1)&lt;br /&gt;            strMessage = 'Invalid date string';&lt;br /&gt;&lt;br /&gt;         // add error message to message div associated with textbox&lt;br /&gt;         if (!ctlDateBox.message.firstChild)&lt;br /&gt;            ctlDateBox.message.appendChild(document.createTextNode(strMessage));&lt;br /&gt;         else&lt;br /&gt;            ctlDateBox.message.firstChild.nodeValue = strMessage;&lt;br /&gt;&lt;br /&gt;         // switch class name to error so styling is changed&lt;br /&gt;         ctlDateBox.message.className = 'DateBoxControlErrorMsg';&lt;br /&gt;         ctlDateBox.className = 'DateBoxControlError';&lt;br /&gt;         &lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;   else&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // clear message div associated with textbox&lt;br /&gt;      if (!ctlDateBox.message.firstChild)&lt;br /&gt;         ctlDateBox.message.appendChild(document.createTextNode(''));&lt;br /&gt;      else&lt;br /&gt;         ctlDateBox.message.firstChild.nodeValue = '';&lt;br /&gt;&lt;br /&gt;      // swith class name back to default so styling is changed&lt;br /&gt;      ctlDateBox.message.className = 'DateBoxControlMsg';&lt;br /&gt;      ctlDateBox.className = 'DateBoxControl';&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 13 Sep 2005 02:27:28 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/702</guid>
      <author>Will_Rickards (Will Rickards)</author>
    </item>
    <item>
      <title>Auto Tab //JavaScript Function</title>
      <link>http://snippets.dzone.com/posts/show/676</link>
      <description>&lt;a href="http://www.jsfromhell.com/forms/auto-tab"&gt;&lt;br /&gt;Auto tabulation of text inputs with maxlength setted&lt;br /&gt;&lt;br /&gt;Usage: just add the code on the end of your page or call it on the onload event (worse solution) and "the enter tabulation" will be added for all fields enclosed by the &lt;form&gt; tag.&lt;br /&gt;&lt;br /&gt;[UPDATED CODE AND HELP CAN BE FOUND HERE]&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;@REQUIRES &lt;a href="http://www.jsfromhell.com/geral/event-listener"&gt;Event-Listener&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;//Requires http://www.jsfromhell.com/Geral/event-listener&lt;br /&gt;&lt;br /&gt;//+ Jonas Raoni Soares Silva&lt;br /&gt;//@ http://jsfromhell.com/forms/auto-tab [v1.0]&lt;br /&gt;&lt;br /&gt;autoTab = function(){&lt;br /&gt;	for( var d, f = ( d = document ).forms, i = f.length; i; addEventListener( f[--i], "keyup", function( e ){&lt;br /&gt;		var el, k = String.fromCharCode( e.key ), l = ( e = e.target ).value.length;&lt;br /&gt;		if ( l &gt;= ( e.getAttribute( "maxlength" ) || l + 1 ) &amp;&amp; /[\w&#192;-&#255; ]/.test( k ) ){&lt;br /&gt;			for( l = k = ( el = e.form.elements ).length; el[--k] != e; );&lt;br /&gt;			while( !(e = el[ k = ++k * ( k &lt; l ) ]).type || e.disabled );&lt;br /&gt;			e.focus();&lt;br /&gt;		}&lt;br /&gt;	} ) );&lt;br /&gt;};&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 09 Sep 2005 05:11:24 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/676</guid>
      <author>jonasraoni (Jonas Raoni Soares Silva)</author>
    </item>
  </channel>
</rss>
