<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: control code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 27 Jul 2008 00:47:18 GMT</pubDate>
    <description>DZone Snippets: control code</description>
    <item>
      <title>Email User Control VB .NET</title>
      <link>http://snippets.dzone.com/posts/show/3951</link>
      <description>Save as an .ascx file and insert into your project. &lt;br /&gt;Set properties via the properties window. &lt;br /&gt;Includes the form, code, validation, and css.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;%@ Control Language="VB" ClassName="Email" %&gt;&lt;br /&gt;&lt;%@ Import Namespace="System.Net.Mail" %&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script runat="server"&gt;&lt;br /&gt;    Public Property Email() As String&lt;br /&gt;        Get&lt;br /&gt;            Return recipientEmail&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal value As String)&lt;br /&gt;            recipientEmail = value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    Public Property Host() As String&lt;br /&gt;        Get&lt;br /&gt;            Return mhost&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal value As String)&lt;br /&gt;            mhost = value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    Public Property Port() As String&lt;br /&gt;        Get&lt;br /&gt;            Return mport&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal value As String)&lt;br /&gt;            mport = value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    Public Property Message() As String&lt;br /&gt;        Get&lt;br /&gt;            Return sentMessage&lt;br /&gt;        End Get&lt;br /&gt;        Set(ByVal value As String)&lt;br /&gt;            sentMessage = value&lt;br /&gt;        End Set&lt;br /&gt;    End Property&lt;br /&gt;    &lt;br /&gt;    Dim recipientEmail As String&lt;br /&gt;    Dim mhost As String&lt;br /&gt;    Dim mport As Integer&lt;br /&gt;    Dim sentMessage As String&lt;br /&gt;    Dim client As New Net.Mail.SmtpClient()&lt;br /&gt;&lt;br /&gt;    Protected Sub btnSendMail_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSendMail.Click&lt;br /&gt;&lt;br /&gt;        client.Host = Host&lt;br /&gt;        client.Port = Port&lt;br /&gt;        client.Send(txtSenderEmail.Text, recipientEmail, txtSubject.Text, txtMessage.Text)&lt;br /&gt;        lblMessage.Text = sentMessage&lt;br /&gt;    End Sub&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;  label&lt;br /&gt;  {&lt;br /&gt;   	   float: left;&lt;br /&gt;   	   width:10em;&lt;br /&gt;   	   text-align:right;&lt;br /&gt;   	   clear:left;&lt;br /&gt;   	   margin-right: 7px;&lt;br /&gt;   	   font-family: Tahoma, Sans-Serif;&lt;br /&gt;   	   font-size:12px;&lt;br /&gt;   	   font-weight:bold;&lt;br /&gt;  	    padding:4px;&lt;br /&gt;   		background:#FFFFFF;&lt;br /&gt;   		color:#333333;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  .validate&lt;br /&gt;  {&lt;br /&gt;    font-family: Tahoma, Sans-Serif;&lt;br /&gt;   	font-size:12px;&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;  &lt;/style&gt;&lt;br /&gt;  &lt;br /&gt;&lt;label&gt;Email:&lt;/label&gt;&lt;asp:TextBox ID="txtSenderEmail" runat="server" Width="375px"&gt;&lt;/asp:TextBox&gt;&lt;br /&gt;&lt;asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="txtSenderEmail"&lt;br /&gt;    ErrorMessage="Required!" CssClass="validate"&gt;&lt;/asp:RequiredFieldValidator&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;label&gt;Subject:&lt;/label&gt;&lt;asp:TextBox ID="txtSubject" runat="server" Width="375px"&gt;&lt;/asp:TextBox&gt;&lt;br /&gt;&lt;asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" ControlToValidate="txtSubject"&lt;br /&gt;    ErrorMessage="Required!" CssClass="validate"&gt;&lt;/asp:RequiredFieldValidator&gt;&lt;br /&gt;&lt;br /&gt;&lt;label&gt;Message:&lt;/label&gt;&lt;asp:TextBox ID="txtMessage" runat="server" TextMode="MultiLine"&lt;br /&gt;        Height="160px" Width="375px"&gt;&lt;/asp:TextBox&gt;&lt;br /&gt;&lt;asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ControlToValidate="txtMessage"&lt;br /&gt;    ErrorMessage="Required!" CssClass="validate"&gt;&lt;/asp:RequiredFieldValidator&gt;&lt;br /&gt;&lt;br /&gt;&lt;label&gt;&lt;asp:Label ID="lblMessage" runat="server"&gt;&lt;/asp:Label&gt;&lt;/label&gt;&lt;asp:Button ID="btnSendMail"&lt;br /&gt;        runat="server" Text="Send" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Thu, 03 May 2007 00:43:47 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/3951</guid>
      <author>D-ko (DS)</author>
    </item>
    <item>
      <title>Subversion service for low-load (personal?) sources repository</title>
      <link>http://snippets.dzone.com/posts/show/2623</link>
      <description>Create separate user and insert svnserve into inetd.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;# useradd -g root -s /bin/false -d /dev/null -c "SubVersion Daemon" svnserve&lt;br /&gt;# mkdir /var/svn&lt;br /&gt;# chown -R svnserve /var/svn&lt;br /&gt;# update-inetd --add 'svn\tstream\ttcp\tnowait\tsvnserve\t/usr/sbin/tcpd\t/usr/bin/svnserve --inetd --root /var/svn'&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;/var/svn - root of repository.&lt;br /&gt;update-inetd - standart tool in debian and ubuntu linux distros&lt;br /&gt;&lt;br /&gt;You must run svnadmin as svnserve user for manage your repository&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;$ sudo sudo -u svnserve svnadmin &lt;command&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;</description>
      <pubDate>Tue, 19 Sep 2006 23:48:50 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2623</guid>
      <author>sevkin (Vsevolod Balashov)</author>
    </item>
    <item>
      <title>Javascript LookupControl</title>
      <link>http://snippets.dzone.com/posts/show/2278</link>
      <description>A lookup control is a common thing to have on many web pages.  In this case we assume a textbox, a command button, and a label of some sort to display a description.&lt;br /&gt;&lt;br /&gt;The HTML might look like this&lt;br /&gt;&lt;code&gt;&lt;br /&gt;&lt;label for="txtExistingClient"&gt;Client&lt;/label&gt;&lt;br /&gt;&lt;input id="txtExistingClient" name="txtExistingClient" type="text" size="15" maxlength="14" class="text uppercase" runat="server"&gt;&lt;br /&gt;&lt;input id="cmdExistingClientLookup" name="cmdExistingClientLookup" type="button" value=" ? "&gt;&lt;br /&gt;&lt;span id="lblExistingClient"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Here is a javascript function to call in the onload to setup that lookup control.  And examples of the functions required.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;// SetupLookupControl&lt;br /&gt;//&lt;br /&gt;// Description : sets up a lookup control by linking it to its &lt;br /&gt;//    associated controls and hooking up the event handlers&lt;br /&gt;//&lt;br /&gt;// Arguments :&lt;br /&gt;//    strTextBoxID               : input type=text id&lt;br /&gt;//    strLookupButtonID          : input type=button id&lt;br /&gt;//    strLabelID                 : span of div id&lt;br /&gt;//    funcTextBoxOnChange        : function for textbox's onchange and onblur event&lt;br /&gt;//    funcLookupButtonOnClick    : function for lookup button's onclick event&lt;br /&gt;//&lt;br /&gt;// Dependencies : none&lt;br /&gt;//&lt;br /&gt;// History :&lt;br /&gt;// 2006.07.14 - WSR : created&lt;br /&gt;//&lt;br /&gt;function SetupLookupControl( strTextBoxID, strLookupButtonID, strLabelID, funcTextBoxOnChange, funcLookupButtonOnClick )&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;   // get reference to lookup button&lt;br /&gt;   var ctlLookupButton = document.getElementById(strLookupButtonID);&lt;br /&gt;&lt;br /&gt;   // if lookup button was found&lt;br /&gt;   if (ctlLookupButton)&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // hookup event handlers and control references&lt;br /&gt;      ctlLookupButton.onclick = funcLookupButtonOnClick;&lt;br /&gt;      ctlLookupButton.textbox = document.getElementById(strTextBoxID);&lt;br /&gt;&lt;br /&gt;      // if textbox was found&lt;br /&gt;      if (ctlLookupButton.textbox)&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         // hookup event handlers and control references&lt;br /&gt;         ctlLookupButton.textbox.onchange = funcTextBoxOnChange;&lt;br /&gt;         ctlLookupButton.textbox.onblur = funcTextBoxOnChange;&lt;br /&gt;         ctlLookupButton.textbox.label = document.getElementById(strLabelID);&lt;br /&gt;&lt;br /&gt;         // init last value property of textbox&lt;br /&gt;         if ( typeof ctlLookupButton.textbox.lastvalue == 'undefined' )&lt;br /&gt;            ctlLookupButton.textbox.lastvalue = ''; &lt;br /&gt;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;//&lt;br /&gt;// SetupLookupControl&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;// cmdTimekeeperLookup_click&lt;br /&gt;// Description: handler for requesting timekeeper selection button click event&lt;br /&gt;// Arguments: none&lt;br /&gt;// Dependencies:&lt;br /&gt;//    TimekeepQuery (lookup.js)&lt;br /&gt;//&lt;br /&gt;function cmdTimekeeperLookup_click()&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;   // show timekeeper query window&lt;br /&gt;   TimekeepQuery( this.textbox );&lt;br /&gt;&lt;br /&gt;   // update timekeeper information&lt;br /&gt;   this.textbox.onchange();&lt;br /&gt;&lt;br /&gt;   // process default action&lt;br /&gt;   return true;&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;//&lt;br /&gt;// cmdTimekeeperLookup_click&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;// txtTimekeeper_change&lt;br /&gt;// Description: event handler for timekeeper textbox change event&lt;br /&gt;// Arguments: none&lt;br /&gt;// Dependencies:&lt;br /&gt;//    window.strTkprMask (masking.js)&lt;br /&gt;//    trim&lt;br /&gt;//    ApplyMask (masking.js)&lt;br /&gt;//    TimekeepLookup (lookup.js)&lt;br /&gt;//    UpdateElementText (shared.js)&lt;br /&gt;//&lt;br /&gt;function txtTimekeeper_change()&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;   var strTimekeepName = '';&lt;br /&gt;   var objXMLDOM;&lt;br /&gt;   var nodField;&lt;br /&gt; &lt;br /&gt;   // trim input&lt;br /&gt;   this.value = this.value.trim();&lt;br /&gt;  &lt;br /&gt;   // if there was input&lt;br /&gt;   if ( this.value.length &gt; 0 )&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // apply timekeep mask to textbox input&lt;br /&gt;      ApplyMask( this, window.strTkprMask );&lt;br /&gt;&lt;br /&gt;      // if inputted timekeeper is different from current timekeeper&lt;br /&gt;      if ( this.lastvalue != this.value )&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         // request timekeeper information&lt;br /&gt;         objXMLDOM = TimekeepLookup( this.value );&lt;br /&gt;&lt;br /&gt;         // if XML DOM object returned&lt;br /&gt;         if ( typeof objXMLDOM == 'object' )&lt;br /&gt;            {&lt;br /&gt;&lt;br /&gt;            // get field values&lt;br /&gt;            nodField = objXMLDOM.selectSingleNode('//lastname');&lt;br /&gt;            if (nodField != null)&lt;br /&gt;               strTimekeepName = nodField.firstChild.nodeValue;&lt;br /&gt;&lt;br /&gt;            nodField = objXMLDOM.selectSingleNode('//firstname');&lt;br /&gt;            if (nodField != null)&lt;br /&gt;               strTimekeepName = strTimekeepName + ', ' + nodField.firstChild.nodeValue;&lt;br /&gt;&lt;br /&gt;            // update timekeeper&lt;br /&gt;            this.lastvalue = this.value;&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;         // if XML DOM object wasn't returned&lt;br /&gt;         else&lt;br /&gt;            {&lt;br /&gt;&lt;br /&gt;            // indicate timekeeper was not found&lt;br /&gt;            strTimekeepName = 'Timekeep \'' + this.value + '\' was not found.';&lt;br /&gt;&lt;br /&gt;            // update timekeeper&lt;br /&gt;            this.lastvalue = '';&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;         // update document&lt;br /&gt;         UpdateElementText( this.label, strTimekeepName );&lt;br /&gt;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;   // if there was no input&lt;br /&gt;   else&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // clear the timekeep and display&lt;br /&gt;      this.lastvalue = '';&lt;br /&gt;      UpdateElementText( this.label, '' );&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   // process default action&lt;br /&gt;   return true;&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;//&lt;br /&gt;// txtTimekeeper_change&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Fri, 14 Jul 2006 22:28:13 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2278</guid>
      <author>Will_Rickards (Will Rickards)</author>
    </item>
    <item>
      <title>Javascript IntegerBoxControl</title>
      <link>http://snippets.dzone.com/posts/show/703</link>
      <description>In input forms on web pages you often have to validate input as an integer or more precisely a positive integer greater than zero.  Here is a control implementation of sorts.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// Integer Box Control&lt;br /&gt;// &lt;br /&gt;// Notes&lt;br /&gt;// To create an integer box control, call the SetupIntegerBoxControl function.&lt;br /&gt;// It should be passed an input element with type of text.&lt;br /&gt;// The onchange event of the input element will invoke the validation function.&lt;br /&gt;// The validation function ensures only positive integer data is entered.&lt;br /&gt;//&lt;br /&gt;// History&lt;br /&gt;// 09/08/2005 - WSR : created based on dateboxcontrol&lt;br /&gt;&lt;br /&gt;// hooks functionality up to given textbox&lt;br /&gt;function SetupIntegerBoxControl( ctlIntegerBox )&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;   // if a valid object was given&lt;br /&gt;   if (ctlIntegerBox)&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // validate current contents&lt;br /&gt;      IntegerBoxControl_Validate( ctlIntegerBox );&lt;br /&gt;&lt;br /&gt;      // hook up event handlers&lt;br /&gt;      ctlIntegerBox.onchange = function () { IntegerBoxControl_Validate(this); };&lt;br /&gt;      &lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// validates the input&lt;br /&gt;function IntegerBoxControl_Validate( ctlIntegerBox )&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;   // parse the input as an integer&lt;br /&gt;   var intValue = parseInt(ctlIntegerBox.value, 10);&lt;br /&gt;&lt;br /&gt;   // if this is not an integer&lt;br /&gt;   if (isNaN(intValue))&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // clear text box&lt;br /&gt;      ctlIntegerBox.value = '';&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;   // if this is an integer&lt;br /&gt;   else&lt;br /&gt;      {&lt;br /&gt;   &lt;br /&gt;      switch (true)&lt;br /&gt;         {&lt;br /&gt;         case (intValue == 0) :&lt;br /&gt;&lt;br /&gt;            // clear text box&lt;br /&gt;            ctlIntegerBox.value = '';&lt;br /&gt;&lt;br /&gt;            break;&lt;br /&gt;         case (intValue &gt; 0) :&lt;br /&gt;&lt;br /&gt;            // put the parsed integer value in the text box&lt;br /&gt;            ctlIntegerBox.value = intValue.toString();&lt;br /&gt;&lt;br /&gt;            break;&lt;br /&gt;         case (intValue &lt; 0) :&lt;br /&gt;&lt;br /&gt;            // put the positive parsed integer value in the text box&lt;br /&gt;            ctlIntegerBox.value = (-1 * intValue).toString();&lt;br /&gt;&lt;br /&gt;            break;&lt;br /&gt;         }&lt;br /&gt;      &lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I forgot to mention before how to hook it up in code.&lt;br /&gt;I usually add an attribute bvr-datatype="integer" to the input element.  bvr stands for behaviour.  I hook up the control in the onload event.  Here is a recent example.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// set window load event handler&lt;br /&gt;window.onload = window_load;&lt;br /&gt;&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;// window_load&lt;br /&gt;// Description: event handler for window load event&lt;br /&gt;// Arguments: none&lt;br /&gt;// Dependencies:&lt;br /&gt;//    SetupDateBoxControl (dateboxcontrol.js)&lt;br /&gt;//    SetupIntegerBoxControl (integerboxcontrol.js)&lt;br /&gt;//    frmSearch_submit&lt;br /&gt;//    cmdRequesting_click&lt;br /&gt;//    txtRequesting_change&lt;br /&gt;//    frmRecent_submit&lt;br /&gt;//&lt;br /&gt;function window_load()&lt;br /&gt;   {&lt;br /&gt;&lt;br /&gt;   // get input elements in document&lt;br /&gt;   var arrInputs = document.getElementsByTagName('INPUT');&lt;br /&gt;&lt;br /&gt;   // cycle through input elements&lt;br /&gt;   for ( var i = 0; i &lt; arrInputs.length; i++ ) &lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // if this is a datebox control&lt;br /&gt;      if ( 'date' == arrInputs[i].getAttribute('bvr-datatype') &amp;&amp; 'text' == arrInputs[i].getAttribute('type') )&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         // setup the control&lt;br /&gt;         SetupDateBoxControl( arrInputs[i] );&lt;br /&gt;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;      // if this is a integerbox control&lt;br /&gt;      if ( 'integer' == arrInputs[i].getAttribute('bvr-datatype') &amp;&amp; 'text' == arrInputs[i].getAttribute('type') )&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         // setup the control&lt;br /&gt;         SetupIntegerBoxControl( arrInputs[i] );&lt;br /&gt;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   // get reference to search form&lt;br /&gt;   var elForm = document.getElementById('frmSearch');&lt;br /&gt;   if (elForm)&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // set submit event handler&lt;br /&gt;      elForm.onsubmit = frmSearch_submit;&lt;br /&gt;&lt;br /&gt;      // set cmdTimekeeperLookup click event handler&lt;br /&gt;      var elToWire = document.getElementById('cmdTimekeeperLookup');&lt;br /&gt;      if (elToWire)&lt;br /&gt;         {&lt;br /&gt;&lt;br /&gt;         elToWire.onclick = cmdRequesting_click;&lt;br /&gt;         elToWire.textbox = document.getElementById('txtRequestingTimekeeper');&lt;br /&gt;&lt;br /&gt;         // set textbox change events&lt;br /&gt;         if (elToWire.textbox)&lt;br /&gt;            {&lt;br /&gt;&lt;br /&gt;            elToWire.textbox.onchange = txtRequesting_change;&lt;br /&gt;            elToWire.textbox.onblur = txtRequesting_change;&lt;br /&gt;            elToWire.textbox.label = document.getElementById('lblTimekeeperName');&lt;br /&gt;&lt;br /&gt;            if ( typeof window.strRequesting == 'undefined' )&lt;br /&gt;               window.strRequesting = ''; &lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;         }&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   // get reference to recent form&lt;br /&gt;   elForm = document.getElementById('frmRecent');&lt;br /&gt;   if (elForm)&lt;br /&gt;      {&lt;br /&gt;&lt;br /&gt;      // set submit event handler&lt;br /&gt;      elForm.onsubmit = frmRecent_submit;&lt;br /&gt;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;   }&lt;br /&gt;//&lt;br /&gt;// window_load&lt;br /&gt;// ----------------------------------------------------------------------------&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Tue, 13 Sep 2005 02:32:19 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/703</guid>
      <author>Will_Rickards (Will Rickards)</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>
  </channel>
</rss>
