<?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>dingobytes &#187; Tutorial</title>
	<atom:link href="http://www.dingobytes.com/category/tutorial/feed" rel="self" type="application/rss+xml" />
	<link>http://www.dingobytes.com</link>
	<description>what your nephew can't make you</description>
	<lastBuildDate>Fri, 11 Jun 2010 03:26:48 +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>Replacing text in multiple files</title>
		<link>http://www.dingobytes.com/tutorial/replacing-text-in-multiple-files</link>
		<comments>http://www.dingobytes.com/tutorial/replacing-text-in-multiple-files#comments</comments>
		<pubDate>Wed, 12 May 2010 16:02:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[multiple files]]></category>
		<category><![CDATA[replace]]></category>
		<category><![CDATA[search]]></category>

		<guid isPermaLink="false">http://www.dingobytes.com/?p=120</guid>
		<description><![CDATA[Unfortunately during testing I have had some typo's and the generated report stored in the directory structure did not display as intended. The changes needed really didn't warrant processing the script again and adding more useless entries into the database, so I decided to change the script and then update the html in the report.]]></description>
			<content:encoded><![CDATA[<p>Recently I took a new job and it involves a lot of report generating. This has been a great fit for me and I have enjoyed the short time here in St Paul, MN.</p>
<p>The process for the current project is to pull a *.csv file from an email account, parse it into a database query/queries, generate html code and then store the html in a directory structure while also storing the report information in the database.</p>
<p><span id="more-120"></span></p>
<p>Unfortunately during testing I have had some typo&#8217;s and the generated report stored in the directory structure did not display as intended. The changes needed really didn&#8217;t warrant processing the script again and adding more useless entries into the database, so I decided to change the script and then update the html in the report.</p>
<p>Having over 100 reports generated, I needed a simple script to do this. I had done this with bash before, but I thought there had to be an easier way then looping through a for statement, saving the changes to a new file and then moving the new file to replace the old.</p>
<p>In comes Perl. Looking through some posts, I found that you can edit text in the file with Perl. The command goes something like this:</p>
<p><code>perl -pi -w -e 's/search/replace/g;' *.html</code></p>
<p>Here is a further explanation of what is going on. </p>
<p><code>-p assume loop (like -n) but print line also, like sed<br />
-i edit <> files in place (makes backup if extension supplied)<br />
-w enable many useful warnings (RECOMMENDED)<br />
-e execute the follwing line of code</code></p>
<p>The code referred to after the -e is just a search and replace regular expression. </p>
<p>The &#8216;s/&#8217; means to search and start your regular expression to search for. </p>
<p>You then enter your expression that you want to search for. You need to make sure you escape out special characters with the back-slash [\]. The forward slash is used to separate what you are searching for and what you want to replace. The replace section is an expression as well and you need to treat special characters the same way.</p>
<p>Finally you have the last forward slash indicates the end of your replace expression and the &#8216;g&#8217; indicates global.</p>
<p>Here is an example of how I would change the directory used for images from &#8216;/image/&#8217; to &#8216;images/&#8217; for all the files in a directory with the extension of .html.</p>
<p><code>perl -pi -w -e 's/\/image\//images\//g;' *.html</code></p>
<p>That is how you do it. If you have to go through multiple directories, you could use a bash or perl command to loop through those directories. Hope it didn&#8217;t confuse you too much.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dingobytes.com/tutorial/replacing-text-in-multiple-files/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Show Message 1.0- jQuery Plugin for displaying messages</title>
		<link>http://www.dingobytes.com/tutorial/show-message-1-0-jquery-plugin-for-displaying-messages</link>
		<comments>http://www.dingobytes.com/tutorial/show-message-1-0-jquery-plugin-for-displaying-messages#comments</comments>
		<pubDate>Mon, 01 Feb 2010 02:26:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[notification box]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://www.dingobytes.com/?p=90</guid>
		<description><![CDATA[Inspired by a similar feature at Twitter.com, this jQuery Plugin will help you display messages at the top of your page with an assortment of options. Download the latest version 2.1 of the plugin at http://showMessage.dingobytes.com/download/ Please see the site, as the information below is for previous versions. This has been updated! This is my [...]]]></description>
			<content:encoded><![CDATA[<p>Inspired by a similar feature at Twitter.com, this jQuery Plugin will help you display messages at the top of your page with an assortment of options.</p>
<p style="border:medium #06f solid;width:95%;padding:0.5em;font-size:x-large;text-align:center;">Download the latest version 2.1 of the plugin at <a href="http://showMessage.dingobytes.com/download/" title="download">http://showMessage.dingobytes.com/download/</a></p>
<p><strong><em>Please see the site, as the information below is for previous versions. This has been updated!</em></strong></p>
<p>This is my first attempt at a jQuery Plugin, so although it works fine for my liking, I am sure there are many things that can be done more effectively.</p>
<ul>
<li>Message displayed at the top of page (no scrolling to view error)</li>
<li>Multiple messages can be displayed</li>
<li>Options to automatically close the message after set delay</li>
<li>Message closes with blur/&#8217;esc&#8217; key/&#8217;close&#8217; link</li>
</ul>
<ul>
<li><a title="Download" href="#download">Download</a></li>
<li><a title="Install" href="#install">Install</a></li>
<li><a title="Options" href="#options">Options</a></li>
<li><a title="Examples" href="#examples">Examples</a></li>
</ul>
<div id="download">
<h2><span id="more-90"></span>Download</h2>
<p style="border: medium #06f solid; width: 95%; padding: 0.5em; font-size: x-large; text-align: center;"><a title="download now" href="http://showMessage.dingobytes.com/download/" target="_blank">Download showMessage 1.1</a></p>
</div>
<div id="install">
<h2>Install</h2>
<p>You can install showMessage jQuery Plugin by including the script somewhere in the page AFTER jQuery. This plugin should work on jQuery version 1.3.2+.</p>
<pre class="brush: html">&lt;script type=&quot;text/javascript&quot; src=&quot;/path/to/jquery.showMessage.min.js&quot;
charset=&quot;utf-8&quot;&gt;&lt;\/script&gt;</pre>
<p>If you wish to style the text, the message is displayed through an unordered list in the div with id attribute=showMessage</p>
<pre class="brush: css">#showMessage li
{
font-family: Arial, Helvetica, clean, sans-serif;
font-size: large;
font-weight: bold;
color: red;
}</pre>
</div>
<div id="options">
<h2>Options</h2>
<p>Here are the possible options with their default values:</p>
<pre class="brush: javascript">
thisMessage:		[&#039;&#039;],
backgroundColor:	&#039;#F7F7F7&#039;,
color:			&#039;#000000&#039;,
opacity:		90,
displayNavigation:	true,
autoClose:		false,
delayTime:		5000
</pre>
<dl>
<dt>thisMessage <em>(required)</em><span class="alignright">[Array]</span></dt>
<dd>The message you will be returning to the page. The message is in the form of an array.</dd>
<dt>blackgroundColor<span class="alignright">[string]</span></dt>
<dd>Default set to &#8216;#F7F7F7&#8242;. The background color of the message holder. (&#8216;#F7F7F7&#8242; or &#8216;rgb(247, 247, 247)&#8217; or &#8216;white&#8217;)</dd>
<dt>color<span class="alignright">[string]</span></dt>
<dd>Default set to &#8216;#000000&#8242;. The font color in the message holder. (&#8216;#000000&#8242; or &#8216;rgb(0, 0, 0)&#8217; or &#8216;black&#8217;)</dd>
<dt>opacity<span class="alignright">[integer]</span></dt>
<dd>Default set to 90. Opacity of the message holder. Value is an integer between 1 and 100.</dd>
<dt>displayNavigation<span class="alignright">[boolean]</span></dt>
<dd>Default set to true. Will display the &#8216;esc&#8217; and &#8216;close&#8217; information in upper right.</dd>
<dt>autoClose<span class="alignright">[boolean]</span></dt>
<dd>Default is set to false. When set to true, it will close the message holder after specified delay time.</dd>
<dt>delayTime<span class="alignright">[integer]</span></dt>
<dd>Default is set to 5000. Amount of time in milli-seconds before the message holder will close/hide (autoClose must be set to true).</dd>
</dl>
</div>
<div id="examples">
<h2>Example</h2>
<dl>
<dt>Simple</dt>
<dd> Just return a simple message to message holder.</p>
<pre class="brush: javascript">
jQuery.showMessage({
&#039;thisMessage&#039;:[&#039;&lt;mg src=&quot;/images/accept.png&quot; alt=&quot;accept&quot;/&gt;successful!&#039;]
});
</pre>
</dd>
<dt>Advanced</dt>
<dd> This should look a lot like Twitter.</p>
<pre class="brush: javascript">
var returnMessage = [&#039;Account was created successfully!&#039;,&#039;Thank you.&#039;];
jQuery.showMessage({
&#039;thisMessage&#039;:		returnMessage,
&#039;backgroundColor&#039;:	&#039;#f7f7f7&#039;,
&#039;color&#039;:		&#039;black&#039;,
&#039;opacity&#039;:		95,
&#039;displayNavigation&#039;:	false,
&#039;autoClose&#039;:		true,
&#039;delayTime&#039;:		6000
});
</pre>
</dd>
</dl>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.dingobytes.com/tutorial/show-message-1-0-jquery-plugin-for-displaying-messages/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>jQuery username check</title>
		<link>http://www.dingobytes.com/tutorial/jquery-username-check</link>
		<comments>http://www.dingobytes.com/tutorial/jquery-username-check#comments</comments>
		<pubDate>Tue, 29 Sep 2009 19:04:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[AJAX]]></category>
		<category><![CDATA[Coldfusion]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://www.dingobytes.com/?p=6</guid>
		<description><![CDATA[There are many times we might want to retrieve some data from the server or database without taking the user away from the current page. One such example of this is when a user is registering for a website and they need to verify if a username is available for use or not. Using an [...]]]></description>
			<content:encoded><![CDATA[<p>There are many times we might want to retrieve some data from the server or database without taking the user away from the current page. One such example of this is when a user is registering for a website and they need to verify if a username is available for use or not. Using an AJAX XMLHttpRequest is a quick and efficient way to check the availability of the username. The javascript XMLHttpRequest retrieves information from the server without using a page refresh.</p>
<p><span id="more-6"></span>If you are not familiar with how JavaScript uses a generic XMLHttpRequest function, we would strongly suggest you read one of the many tutorials out there. Once you understand how it works and the different methods employed to do it, you will appreciate the ease of jQuery even that much more.</p>
<p>The first step is to download a current version of <a title="latest jQuery at time of writing" href="http://docs.jquery.com/Release:jQuery_1.3.2" target="_blank">jQuery</a>. We prefer to use the minified version. Another option is to load jQuery into your page is to use the <a title="Google AJAX Libraries API" href="http://code.google.com/apis/ajaxlibs/documentation/" target="_blank">Google AJAX Libraries API</a>. We don&#8217;t use the other AJAX libraries enough to prefer this method, but we have used it in the past for client sites.</p>
<p>Of course we like things to be pretty, so we would also suggest some good images/icons to represent a valid and invalid username. You can create your own image or simply use <a title="Free Icon Set search" href="http://images.google.com/images?hl=en&amp;client=opera&amp;rls=en&amp;um=1&amp;sa=1&amp;q=free+icon+sets&amp;aq=f&amp;oq=&amp;aqi=g1&amp;start=0" target="_blank">Google Images</a> to find a nice free icon set that has something to represent this. We have attached two simple icons that we prefer to use.</p>
<p>To get the document started, we assume that you have jQuery loading somewhere in the head of the document (using which ever method you prefer). We are going to make this simple so we just need to create a form to enter a username. The rules for a username are as follows:</p>
<ol>
<li>Username can not have whitespace</li>
<li>Username must be at least 3 characters long</li>
<li>Username must be no longer then 24 characters long</li>
</ol>
<h2>Simple Registration Form</h2>
<p>
<pre class="brush: html">&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;&lt;form id=&quot;registrationForm&quot; action=&quot;/test/registrationForm.php&quot; method=&quot;post&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;fieldset&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;legend&gt;Use form below to register&lt;/legend&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;/fieldset&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;dl&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;dt&gt;&lt;label for=&quot;username&quot;&gt;Username&lt;/label&gt;&lt;/dt&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;dd&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;input type=&quot;text&quot; id=&quot;username&quot; name=&quot;username&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;em&gt;Your username must be alphanumeric, 3-24 characters long, can contain underscores, but no spaces. We recommend that you don&#039;t change this unless you really have to.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;/dd&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;dt&gt;&lt;label for=&quot;passwd&quot;&gt;Password&lt;/label&gt;&lt;/dt&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;dd&gt;&lt;input type=&quot;password&quot; id=&quot;passwd&quot; name=&quot;passwd&quot; /&gt;&lt;/dd&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;dt&gt;&lt;label for=&quot;passwd-confirm&quot;&gt;Confirm Password&lt;/label&gt;&lt;/dt&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;dd&gt;&lt;input type=&quot;password&quot; id=&quot;passwd-confirm&quot; name=&quot;passwd-confirm&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;dt&gt;&lt;/dt&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;dd&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;input type=&quot;submit&quot; id=&quot;submitRegistration&quot; value=&quot;Register&quot; /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;/dd&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;/dl&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&lt;/form&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</pre>
</p>
<p>Now that we have our form setup, we need to do a few things. Obviously we want to check the username when it is entered (or being entered). Second we will want to have some sort of client side validation to save us from processing an incomplete form. Lastly we will want to submit the form and process the response from the server. Whether you use PHP, ASP, ColdFusion or any other method, it is a good practice to validate the form server side as well. We won&#8217;t go into that to much, but is a point worth mentioning.</p>
<p>We prefer to insert the following BEFORE the form. You can put this in a *.js file or you can simply insert it into the page, either works for us. We will need to break the JavaScript into three parts. One function that checks the username, a second function that reads the username input element and initiates username check and a third function to validate and process the form.</p>
<h2>Check Username Function</h2>
<p>
<pre class="brush: jscript">&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;&lt;script type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
//&lt;![CDATA[&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
function usernameCheck(username)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
$.get(&#039;/test/usernameCheck.php&#039;, { &#039;username&#039;:username }, function(xml) {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
$(xml).find(&#039;response&#039;).each( function() {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var error = $(this).find(&#039;error&#039;).text();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
if ( error == &#039;false&#039; )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var successCheck = $(&#039;&lt;span&gt;&lt;/span&gt;&#039;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
.css({&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&#039;padding-left&#039;:&#039;1em&#039;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
})&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
.html(&#039;&lt;img src=&quot;/test/images/dialog-ok.png&quot; alt=&quot;successful&quot; /&gt;Username is available.&#039;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
$(&#039;input[name=username]&#039;).after(successCheck);&lt;br /&gt;&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;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var errorCheck = $(&#039;&lt;span&gt;&lt;/span&gt;&#039;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
.css({&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&#039;padding-left&#039;:&#039;1em&#039;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
})&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
.html(&#039;&lt;img src=&quot;/test/images/dialog-error-small.png&quot; alt=&quot;error&quot; /&gt;Username is already registered.&#039;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
$(&#039;input[name=username]&#039;).after(errorCheck);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
});&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
});&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</pre>
</p>
<p>The code might look overwhelming right now, but it is actually pretty simple. If we break it down, you will see that the first thing we do inside the  usernameCheck() function is call the jQuery AJAX function <em><a title="jQuery $.get AJAX function" href="http://docs.jquery.com/Ajax/jQuery.get#urldatacallbacktype" target="_blank">$.get</a></em>. This jQuery function will load a remote page using an HTTP GET request. It only has one requirement (the URL), but also allows for [data], [callback], [type] to be included. We are using both [data] and[callback], with [data] = { &#8216;username&#8217;:username } and [callback] = function(xml). The callback is the function that we want to be executed whenever the data is loaded successfully.</p>
<p>Looking into the function you will see that we are finding each &lt;response&gt; tag in the XML repsponse and inside of that we are looking for the text inside the &lt;error&gt;&lt;/error&gt; node/element of the XML and setting it to the variable &#8220;error&#8221;.</p>
<p>If the XML responds that error is &#8220;false&#8221; we use jQuery to create a &lt;span&gt;&lt;/span&gt; element with image and text response inside of it indicating the username is available. We then insert the new element we have just created after the form input element for username.</p>
<p>The &#8220;else&#8221; is doing the same thing, only it is showing the username is not available.</p>
<p>We will add some more components to this later, but for now lets move to the next functions.  These two functions should be triggered after the page loads, so we will be placing them inside the $(function() {}); element which tells jQuery to load them after the page loads. There are other methods to do this same thing (such as $(document).ready(function(){}); so if you are familiar with jQuery you can use the element you feel most comfortable with.</p>
<h2>Initiate Username Check</h2>
<p>
<pre class="brush: jscript">&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;$(function() {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var t;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
$(&#039;input[name=username]&#039;).keyup( function() {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
// REMOVE WHITESPACE FROM USERNAME&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var username = $(&#039;input[name=username]&#039;).val();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
username = username.replace(/\s/g,&#039;&#039;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
$(&#039;input[name=username]&#039;).val(username);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
// IF THE USERNAME VALIDATES, CHECK THE DB&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
if ( username !== &#039;&#039; &amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp; ( username.length &gt;= 3 &amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp; username.length &lt;= 24 ) )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
if ( typeof(t) != &#039;undefined&#039; )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
clearTimeout(t);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
t = setTimeout( function() { usernameCheck(username) }, 750 );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
});&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</pre>
</p>
<p>You will notice the first variable we define is t. This is going to be used for the setTimeout() function later.</p>
<p>After that declaration you will see we are asking jQuery to watch the keyup event associated with the &#8220;username&#8221; input field and do &#8220;stuff&#8221; after each keystroke. We start  by simply asking for the value of the input field. Then we use the javascript replace() function to strip out any whitespace values followed by reinserting the &#8220;new&#8221; username back into the field.</p>
<p>We don&#8217;t want to even check for the username unless it meets the criteria we mentioned earlier, so we use the if() statement to help us validate that part. If the username is blank or if the username is greater then or equal to 3 characters and the username is less then or equal to 24 characters, then we continue to process the username.</p>
<p>We don&#8217;t want to bombard our server with a request every time a keystroke is made so we use the setTimeout function to  delay the request by a certain amount of time. In order to do this correctly though, we also need to clear the timeout if another keystroke is made within the delay, in effect starting the timeout over again.</p>
<p>Knowing this, we need to give the setTimeout a variable (t) when we call it. Because we know t may or may not exist, we use the if () statement to check for it. If it is defined, we use clearTimeout() function to remove the setTimeout. We can then set the variable t to a fresh setTimeout delay.</p>
<h2>Validate and Submit Form</h2>
<p>When the end user submits the form, we want to validate it and if it passes validation, submit the form. I am not going to go into a lot of detail about this as I have already done similar tutorials (<a title="showMessage tutorial" href="http://www.dingobytes.com/tutorial/showmessage">see here</a>). In a nutshell, we are just making sure the form is filled out and using AJAX to tell us if we were successful/unsuccessful when submitting form.</p>
<p>
<pre class="brush: jscript">&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;$(&#039;#submitRegistration&#039;).click( function() {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
//validate the form and submit&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var username = $(&#039;input[name=username]&#039;).val();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var passwd = $(&#039;input[name=passwd]&#039;).val();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var passwd-confirm = $(&#039;input[name=passwd-confirm]&#039;).val();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var registrationData = $(&#039;#registrationForm).serializeArray();&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;if ( username === &#039;&#039;  || ( username !== &#039;&#039; &amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp; ( username.length &lt; 3 || username.length &gt; 24 ) ) )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
errorMessage.push(&quot;Username must have between 3 and 24 characters.&quot;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
if ( username !== &#039;&#039; &amp;amp;amp;amp;amp;amp;amp;amp;&amp;amp;amp;amp;amp;amp;amp;amp; /\s/.test( username ) )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
errorMessage.push(&quot;Username can not have any spaces.&quot;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
if ( passwd != passwd-confirm )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
errorMessage.push(&quot;Password and Password confirmation do not match.&quot;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
}&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;if ( errorMessage.length &gt; 0 )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
showMessage( errorMessage, &quot;error&quot;, &quot;alert&quot; );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
return false;&lt;br /&gt;&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;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
$.post(&#039;/test/registrationForm.php&#039;, registrationData, function(xml) {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
$(xml).find(&#039;response&#039;).each( function() {&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var error = $(this).find(&#039;error&#039;).text();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var returnMessageString = $(this).find(&#039;returnMessage&#039;).text();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
var returnMessage = [];&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
if ( error == &#039;false&#039; )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
returnMessage.push(returnMessageString);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
showMessage( returnMessage, &quot;highlight&quot;, &quot;info&quot; );&lt;br /&gt;&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;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
returnMessage.push(returnMessageString);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
showMessage( returnMessage, &quot;error&quot;, &quot;alert&quot; );&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
});&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
});&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
return false;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
});&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</pre>
</p>
<p>So that is our start. You will notice if you run this code that it fails to work properly. What we don&#8217;t have is a way to clear out the &#8220;response&#8221; if it already exists on the page. Because we know where the response should be, we can create a simple check for the response and if it is found, remove it.  You will need to do this in both the usernameCheck function and also the function that sets the timeout.</p>
<p>
<pre class="brush: jscript">&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;if ( $(&#039;input[name=username]&#039;).next(&#039;span&#039;).length )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
{&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
$(&#039;input[name=username]&#039;).next(&#039;span&#039;).remove();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</pre>
</p>
<p>Using the length of an element is how we check for the elements existence when using jQuery. Once we find that it does exist, we remove the entire element using the jQuery remove() function.</p>
<p>Lastly, jQuery has some features built in that make our forms prettier. I like to use animation to soften the effect of having elements just appearing BLAM! on the page. We can add a slow fade in effect to the username check to ease the message on the page . We add a diplay=none style to the span and then trigger the jQuery fadeIn() effect to achieve this.</p>
<p>
<pre class="brush: jscript">&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;
&lt;p&gt;var successCheck = $(&#039;&lt;span&gt;&lt;/span&gt;&#039;)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
.css({&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&#039;display&#039;:&#039;none&#039;,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
&#039;padding-left&#039;:&#039;1em&#039;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
})&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
.html(&#039;&lt;img src=&quot;/test/images/dialog-ok.png&quot; alt=&quot;successful&quot; /&gt;Username is available.&#039;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
$(&#039;input[name=username]&#039;).after(successCheck);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
$(successCheck).fadeIn(&#039;slow&#039;);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;
</pre>
</p>
<p>There you have it, a nice jQuery username check.  You can test this out here or you can download the files (all zipped up) and give it a try yourself.</p>
<p><a title="usernameCheck.zip" href="http://dingobytes.com/example/usernameCheck.zip">usernameCheck.zip</a> (124KB)<br />
<a title="usernameCheck.rar" href="http://dingobytes.com/example/usernameCheck.rar">usernameCheck.rar</a> (117KB)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dingobytes.com/tutorial/jquery-username-check/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>showMessage</title>
		<link>http://www.dingobytes.com/tutorial/showmessage</link>
		<comments>http://www.dingobytes.com/tutorial/showmessage#comments</comments>
		<pubDate>Tue, 28 Oct 2008 03:47:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[form]]></category>
		<category><![CDATA[message]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.dingobytes.com/?p=21</guid>
		<description><![CDATA[Having to mess with forms all the time, I was beginning to go crazy tweeking different messages. One for success, one for failure, one for help, etc. I decided to try to combine some css with some javascript to make a nice reusable piece to display my form messages. Here is the fruit of that [...]]]></description>
			<content:encoded><![CDATA[<p>Having to mess with forms all the time, I was beginning to go crazy tweeking different messages. One for success, one for failure, one for help, etc.</p>
<p>I decided to try to combine some css with some javascript to make a nice reusable piece to display my form messages. Here is the fruit of that labor.</p>
<p>The function is going to take three arguments. The first argument is a message and or list of messages. The second is the id of the node you would like to stick the message before. The last argument is a classname.</p>
<p><span id="more-21"></span></p>
<pre class="brush: javascript">
/*global document */
function showMessage(thismessage, location_id, classname) {
//first clear showmessage div
if (document.getElementById(&quot;showmessage&quot;)) {
var clearerror = document.getElementById(&quot;showmessage&quot;);
clearerror.parentNode.removeChild(clearerror);
}
</pre>
<p>The first part of the function will check to see if the div “showmessage” exists. If it does then it will remove it from the document.</p>
<pre class="brush: javascript">
// create an showmessage div
var location = document.getElementById(location_id);
</pre>
<p>We define the location so it can be used later. Below we create a new div and set the id attribute to showmessage. We then can style the div for each instance using the className. After that we create an unordered list.</p>
<p>With the list ready, the messages can then be put into an array. We will split the messages up in this example with a pipe &#8220;|&#8221;.  You can substitute your own delimiter.</p>
<pre class="brush: javascript">
var showmessagediv = document.createElement(&quot;div&quot;);
showmessagediv.setAttribute(&quot;id&quot;, &quot;showmessage&quot;);
showmessagediv.className = classname;
var showmessageul = document.createElement(&quot;ul&quot;);
showmessageul.setAttribute(&quot;id&quot;, classname + &quot;list&quot;);
var showmessage = [];
showmessage = thismessage.split(&quot;|&quot;);
var i;
for (i = 0; i &lt; showmessage.length; i++) {
var showmessageli = document.createElement(&quot;li&quot;);
var showmessagelitxt = document.createTextNode(showmessage[i]);
showmessageli.appendChild(showmessagelitxt);
showmessageul.appendChild(showmessageli);
}
showmessagediv.appendChild(showmessageul);
location.parentNode.insertBefore(showmessagediv, location);
// have to add this to display error until css corrected
}
</pre>
<p>Looping through the array, we create a new list element and insert the message. We append the message to the new list element and then append the list element to the unordered list element. When it is all done then we append the unordered list to the showmessage div. The last step of the function is to insert the new showmessage div right before the location_id.</p>
<p>Attached is the style I used with both the successful messages and the unsuccessfull images.</p>
<pre class="brush: css">
.errormsg {
clear: both;
display: block;
width: 90%;
color: #FFFFFF;
font-weight: bold;
background-color: #FF9D9D;
padding: 9px 10px 6px 40px;
margin: 10px 0;
border: 2px solid #FF0000;
}

.successmsg {
clear: both;
display: block;
width: 90%;
color: #333333;
font-weight: bold;
background-color: #9bc19b;
padding: 9px 10px 6px 40px;
margin: 10px 0;
border: 2px solid #039b03;
}

#errormsglist, #successmsglist {
margin-left: 0;
padding-left: 0;
list-style: none;
}

#errormsglist li, #successmsglist li{
padding-left: 20px;
background-repeat: no-repeat;
background-position: 0;
}

#errormsglist li { background-image: url(/icon/exclamation.png); }

#successmsglist li { background-image: url(/icon/accept.png); }
</pre>
<p>You can modify the CSS and change the class name to what ever you wish. The only think to remember is if you style the list, to append &#8220;list&#8221; to the style.</p>
<p><a href="http://www.dingobytes.com/wp-content/uploads/2008/11/showmessage.js">showMessage.js</a></p>
<p><a href="http://www.dingobytes.com/wp-content/uploads/2008/10/showmessage.css">showMessage.css<br />
</a></p>
<div id="attachment_28" class="wp-caption alignnone" style="width: 26px"><a href="http://www.dingobytes.com/wp-content/uploads/2008/10/exclamation.png"><img class="size-medium wp-image-28" title="exclamation.png" src="http://www.dingobytes.com/wp-content/uploads/2008/10/exclamation.png" alt="exclamation.png" width="16" height="16" /></a><p class="wp-caption-text">exclamation.png</p></div>
<div id="attachment_27" class="wp-caption alignnone" style="width: 26px"><a href="http://www.dingobytes.com/wp-content/uploads/2008/10/accept.png"><img class="size-medium wp-image-27" title="accept.png" src="http://www.dingobytes.com/wp-content/uploads/2008/10/accept.png" alt="accept.png" width="16" height="16" /></a><p class="wp-caption-text">accept.png</p></div>
<p><a href="http://www.dingobytes.com/wp-content/uploads/2008/10/showmessage.css"></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.dingobytes.com/tutorial/showmessage/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Setting up a new web site on centOS 5 box</title>
		<link>http://www.dingobytes.com/tutorial/web-site-on-centos-5-box</link>
		<comments>http://www.dingobytes.com/tutorial/web-site-on-centos-5-box#comments</comments>
		<pubDate>Sat, 04 Oct 2008 02:43:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[Apache]]></category>
		<category><![CDATA[directives]]></category>
		<category><![CDATA[Directory]]></category>
		<category><![CDATA[options]]></category>
		<category><![CDATA[setup]]></category>
		<category><![CDATA[VirtualHost]]></category>
		<category><![CDATA[web site]]></category>

		<guid isPermaLink="false">http://www.dingobytes.com/?p=16</guid>
		<description><![CDATA[There are so many great tutorials on the web about setting up a Linux box for web hosting, but why not add one more&#8230; right? Actually this tutorial is written specifically for a co worker that is not familiar with Linux, so this tutorial is being offered to &#8220;assist&#8221; him with the migration process. His [...]]]></description>
			<content:encoded><![CDATA[<p>There are so many great tutorials on the web about setting up a Linux box for web hosting, but  why not add one more&#8230; right? Actually this tutorial is written specifically for a co worker that is not familiar with Linux, so this tutorial is being offered to &#8220;assist&#8221; him with the migration process. His old hosting company provided him with CPanel and he is reluctant to change, but who in their right mind would pass up hosting at the price of &#8220;free ninty-nine&#8221;.</p>
<p><span id="more-16"></span>By no means is this a guide for all new linux user, but just a compilation of things learned while setting up web services on a Linux box in the past.</p>
<p>The first step, but not always a necessary step is setting up a new user. This is the preferred way to start as the /etc/skel has been preloaded with all the necessary directories and files to get new users started. If you are going to be a system administrator and you are not familiar with the /etc/skel/, please take some time learn more information about placing files in the /etc/skel/ directory to save time setting up new users. You can put default web directory such as www or public_html plus any other files and or directories you want to give to all new users.</p>
<p>To setup a new user you can simply use the following command (replace username with the username you want to use)</p>
<p><code>adduser -m <em>username</em></code></p>
<p>Now that you have created the account, it is best to setup a password for the account. You can assign  a password to the account using the following command</p>
<p><code>passwd <em>username</em></code></p>
<p>You should be prompted to enter in the new password and then confirm the password. Assume a new account needs to be setup with the username of ditto. When you run the passwd ditto command you should be prompted for the password as follows.</p>
<p><code>Changing password for user ditto.<br />
New UNIX password:<br />
Retype new UNIX password:</code></p>
<p>Your new account is almost ready to start putting files up for the web. One thing to pass along to new system administrators is that you have to make sure you setup the right permissions on this new account so it is strongly suggested that you do this now.</p>
<p>Now the path to the new account may differ depending on your server. Assume for now that new users are setup in the /home/ directory. Assuming your new user &#8220;ditto&#8221; was created successfully, the new account for ditto should be /home/ditto/. Any files in your /etc/skel/ directory would be there as well.  You can check this by using the following command to change directories and list the contents of the directory</p>
<p><code>cd /home/ditto &amp;&amp; ls</code></p>
<p>In this example we have two folders for our user ditto and they are the public_html and wwwconf directories.</p>
<p>To change the permissions on the users ditto directory so it can be viewed by visitors, the permissions on the ditto directory must be changed to something like 755. This can be done to just ditto directory using following command:</p>
<p><code>chmod 755 /home/ditto</code></p>
<p>If you don&#8217;t know what 755 is as far as permissions, pause this tutorial and take the time to <a title="Linux Command Directory: chmod" href="http://www.oreillynet.com/linux/cmd/cmd.csp?path=c/chmod" target="_blank">learn about chmod </a>and what the different permissions will do for you.</p>
<p>Now comes the part where many configurations likely differ depending on what you have installed to run on your server. This tutorial opts to save a core httpd related .conf file in one httpd directory (conf.d) and then from there look for more .conf files in the user directory called wwwconf/. This setup is not the only one possibility in the universe and if you have an older setup or wish to do it differently that is your choice.</p>
<p>You can start your .conf file by copying a current one or creating a new one in your httpd/conf.d/ directory. This tutorial will assume that directory is located at /etc/httpd/conf.d/. Creat your new .conf file in vi or vim by using the following command.</p>
<p><code>sudo vim web.ditto.com.conf</code></p>
<p>This is going to be the core configuration file for your virtualhost. You will need to start the virtualhost using the tag:</p>
<p><code>&lt;VirtualHost *:80&gt;</code></p>
<p>The VirutalHost directive is used to     enclose a group of directives which will apply only to a     particular virtual host. Inside this directive you will put all the information pertaining to your site. You can put the email address to your ServerAdmin, the absolute path to the Document Root, the ServerName and any ServerAlias</p>
<p><code>ServerAdmin webmaster@localhost<br />
Documentroot /home/ditto/public_html/<br />
ServerName www.ditto.com<br />
ServerAlias ditto.com</code></p>
<p>Now it is necessary to give Apache some directives that will apply to our public_html directory. To do this you will create another node inside the VirtualHost node named Directory. The Directory node here is used to enclose     a group of directives which will apply only to the named     directory and sub-directories of that directory (in this case the public_html directory).</p>
<p><code>&lt;Directory /home/ditto/public_html&gt;<br />
Options ExecCGI FollowSymLinks +Includes<br />
&lt;/Directory&gt;</code></p>
<p>This tells Apache that the execution of CGI scripts is permitted, the server will follow symbolic links in this directory, and that server-side includes are permitted.</p>
<p>You will also like to have some type of error log as is very useful when troubleshooting an issue on the box, so be sure to include the following code for error logging. You can access the logs in your httpd/logs directory</p>
<p><code>ErrorLog logs/ditto.error<br />
CustomLog logs/ditto.log combined</code></p>
<p>Now for the customized part. In order to let the user create their own Directory options another Directory directive is created that will point to a folder where other options/modifications can be made by the account user.</p>
<p><code>&lt;Directory /home/ditto/wwwconf&gt;<br />
AllowOverride All<br />
&lt;/Directory&gt;</code></p>
<p>What this does is allows ditto to ftp or ssh into the box and create a .conf file with their own directives and options in the wwwconf/ directory. The directive inside the above tag says any     directive which has the .htaccess context is allowed in .htaccess files. After this tag is closed, it can be followed up with</p>
<p><code>Include /home/ditto/wwwconf/*.conf</code></p>
<p>which tells Apache to grab any file with .conf in the wwwconf/ directory of ditto (if you didn&#8217;t know it already, the &#8220;*&#8221; is a wildcard here).</p>
<p>That should do it. You can now put an end to your VirtualHost node (if you have not already) and your end result should look something like</p>
<p><code>&lt;VirtualHost *:80&gt;<br />
ServerAdmin webmaster@localhost<br />
Documentroot /home/ditto/public_html/<br />
ServerName www.ditto.com<br />
ServerAlias ditto.com<br />
&lt;Directory /home/ditto/public_html&gt;<br />
Options ExecCGI FollowSymLinks +Includes<br />
&lt;/Directory&gt;<br />
ErrorLog logs/ditto.error<br />
CustomLog logs/ditto.log combined<br />
&lt;Directory /home/ditto/wwwconf&gt;<br />
AllowOverride All<br />
&lt;/Directory&gt;<br />
Include /home/ditto/wwwconf/*.conf<br />
&lt;/VirtualHost&gt;</code></p>
<p>You can now save this in the httpd/conf.d/ folder. Now if you want to add a mod re-wite or make a password protected directory in public_html, you can add a .conf file to the wwwconf directory and save my changes there. There is still one more command to use in order for all of this to work and that is the command to restart the httpd service. This can be done very easily using the following command.</p>
<p><code>service httpd restart</code></p>
<p>If you are running on an older system, this command may not be recognized. In those cases you should be able to use</p>
<p><code>/etc/init.d/httpd restart</code></p>
<p>Assuming you didn&#8217;t get any errors when you restarted the httpd service your web service should now be working. If you get an error, be sure to address it right away. Most common issues are invalid paths in the &lt;Directory&gt; tags or missing directories that the &lt;Directory&gt; tags are directed too.</p>
<p>Hopefully this tutorial was helpful to at least one user out there. This tutorial will be followed up next by a tutorial that will help you setup subdomains, create password protected directories and create mod rewrites.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dingobytes.com/tutorial/web-site-on-centos-5-box/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lame Mouse Over Effect</title>
		<link>http://www.dingobytes.com/tutorial/lame-mouse-over-effect</link>
		<comments>http://www.dingobytes.com/tutorial/lame-mouse-over-effect#comments</comments>
		<pubDate>Thu, 03 Apr 2008 07:07:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[effect]]></category>
		<category><![CDATA[mouseover]]></category>

		<guid isPermaLink="false">http://www.dingobytes.com/?p=8</guid>
		<description><![CDATA[So at work today, I wanted to see if I could create a lame mouse over effect to let feel like they were highlighting a listing. I wanted to pop out the moused over listing on the page by putting a thin border around the moused over div and then change the background. I was [...]]]></description>
			<content:encoded><![CDATA[<p>So at work today, I wanted to see if I could create a lame mouse over effect to let feel like they were highlighting a listing.  I wanted to pop out the moused over listing on the page by putting a thin border around the moused over div and then change the background. I was able to create the effect with javascript and coldfusion very easily. Because I don&#8217;t host this site on a coldfusion server, I will just show the javascript with some rendered HTML.</p>
<p><span id="more-8"></span>To save some time, I will explain the javascript and how to call it. You can grab the css from the example page.</p>
<pre id="line149">
<pre class="brush: javascript">
&lt;script type=&quot;text/javascript&quot;&gt;
//&lt;![CDATA[
var listing = {

g:function(id) {
    return document.getElementById(id);
},

// function to change the background and border of listing on mouse over
highlight:function(id) {
    listing_el = listing.g(&quot;listing&quot; + id);
    if(id != 1) { //this is what to do for all divs other then first one
        id_above = id - 1;
        listing_above_el = listing.g(&quot;listing&quot; + id_above);
        listing_above_el.style.border = &quot;#fff 2px solid&quot;; //removes border on result above highlighted
        listing_el.style.backgroundColor = &quot;#fffae7&quot;;
        listing_el.style.border = &quot;#837b97&quot;;
    }
    else {
        listing_el.className = &quot;highlight_el&quot;;
        listing_el.style.backgroundColor = &quot;#fffae7&quot;;
        listing_el.style.border = &quot;#837b97&quot;;
    }
},

normal:function(id) {
    listing_el = listing.g(&quot;listing&quot; + id);
    if(id != 1) {
        id_above = id - 1;
        listing_above_el = listing.g(&quot;listing&quot; + id_above);
        listing_above_el.style.borderBottom = &quot;#cccccc 2px dotted&quot;; //restores border to result above highlighted
	listing_el.style.backgroundColor = &quot;#ffffff&quot;;
	listing_el.style.border = &quot;#ffffff 2px solid&quot;;
        listing_el.style.borderBottom = &quot;#cccccc 2px dotted&quot;;
    }
    else {
        listing_el.className = &quot;normal_el&quot;;
        listing_el.style.backgroundColor = &quot;#ffffff&quot;;
	listing_el.style.border = &quot;#ffffff 2px solid&quot;;
        listing_el.style.borderBottom = &quot;#cccccc 2px dotted&quot;;
    }
}
//]]&gt;
&lt;/script&gt;
</pre>
</pre>
<p>The HTML can be spit through some query or loop and is straight forward.</p>
<p><code>
<pre class="brush: html">
&lt;div id=&quot;listing1&quot; class=&quot;listing&quot; onmouseover=&quot;listing.highlight(&#039;1&#039;);&quot; onmouseout=&quot;listing.normal(&#039;1&#039;);&quot;&gt;
&lt;div id=&quot;listing_top&quot;&gt;
&lt;span class=&quot;left&quot;&gt;
&lt;a href=&quot;javascript:void(0);&quot; title=&quot;121 Initech Rd&quot;&gt;121 Initech Rd&lt;/a&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;div id=&quot;listing_left&quot;&gt;
&lt;a href=&quot;javascript:void(0);&quot; title=&quot;121 Initech Rd&quot;&gt;&lt;img src=&quot;images/inventory/thumbs/0/0/0/000976.jpg&quot; alt=&quot;121 Initech Rd&quot; class=&quot;displayed&quot; width=&quot;151&quot; /&gt;&lt;/a&gt;
2.00 bed 3.00 bath 1296 sqft&lt;br /&gt;
Lake Home&lt;br /&gt;
Listing: 08-1979
&lt;/div&gt;
&lt;div id=&quot;listing_right&quot;&gt;&lt;span class=&quot;large_price&quot;&gt;$198699&lt;/span&gt; One morning, when Gregor Samsa woke from troubled dreams, he found himself transformed in his bed into a horrible vermin. He lay on his armour-like back, and if he lifted his head a little he could see his brown belly, slightly domed and divided by arches into stiff sections. The bedding was hardly able to cover it and seemed ready to slide off any moment. His many legs, pitifully thin compared with the size of the rest of him, waved about helplessly as he looked. &quot;What&#039;s happened to me? &quot; he thought. It wasn&#039;t a dream.&lt;/div&gt;
&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
&lt;/div&gt;&lt;/code&gt;&lt;/code&gt;

&lt;code&gt;&lt;div id=&quot;listing2&quot; class=&quot;listing&quot; onmouseover=&quot;listing.highlight(&#039;2&#039;);&quot; onmouseout=&quot;listing.normal(&#039;2&#039;);&quot;&gt;
&lt;div id=&quot;listing_top&quot;&gt;
&lt;span class=&quot;left&quot;&gt;
&lt;a href=&quot;javascript:void(0);&quot; title=&quot;121 Initech Rd&quot;&gt;121 Initech Rd&lt;/a&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;div id=&quot;listing_left&quot;&gt;
&lt;a href=&quot;javascript:void(0);&quot; title=&quot;121 Initech Rd&quot;&gt;&lt;img src=&quot;images/inventory/thumbs/0/0/0/000976.jpg&quot; alt=&quot;121 Initech Rd&quot; class=&quot;displayed&quot; width=&quot;151&quot; /&gt;&lt;/a&gt;
2.00 bed 3.00 bath 1296 sqft&lt;br /&gt;
Lake Home&lt;br /&gt;
Listing: 08-1979
&lt;/div&gt;
&lt;div id=&quot;listing_right&quot;&gt;&lt;span class=&quot;large_price&quot;&gt;$198699&lt;/span&gt; His room, a proper human room although a little too small, lay peacefully between its four familiar walls. A collection of textile samples lay spread out on the table - Samsa was a travelling salesman - and above it there hung a picture that he had recently cut out of an illustrated magazine and housed in a nice, gilded frame. It showed a lady fitted out with a fur hat and fur boa who sat upright, raising a heavy fur muff that covered the whole of her lower arm towards the viewer.&lt;/div&gt;
&lt;div class=&quot;clear&quot;&gt;&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>This can be completed repeated and by dynamically changing the value <em>i</em> you can populate the results so that</p>
<p><code>[sourcecode language='html']<br />
&lt;div id="listing<em>i</em>" class="listing" onmouseover="listing.highlight('<em>i</em>');" onmouseout="listing.normal('<em>i</em>');"&gt;</code></p>
<p>You can see the <a title="finished product" href="http://www.dingobytes.com/example/results.html" target="_blank">finished product here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dingobytes.com/tutorial/lame-mouse-over-effect/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Form Validation II</title>
		<link>http://www.dingobytes.com/tutorial/form-validation-ii</link>
		<comments>http://www.dingobytes.com/tutorial/form-validation-ii#comments</comments>
		<pubDate>Wed, 06 Feb 2008 04:48:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[AJAX]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.dingobytes.com/2008/02/05/form-validation-ii/</guid>
		<description><![CDATA[Continuing on from the first part of the tutorial, we are going to continue through the list of form elements in the order we setup. Next we work on the email address. else if(document.getElementById("email").value=='' &#124;&#124; (document.getElementById("email").value!='' &#38;&#38; !emailfilter.test(document.getElementById("email").value))){ document.getElementById("error_msg").childNodes[0].data= 'Please enter a valid e-mail address.'; document.getElementById("error_msg").style.display = "block"; document.getElementById("email").focus(); return false; } Notice how we [...]]]></description>
			<content:encoded><![CDATA[<p>Continuing on from the first part of the tutorial, we are going to continue through the list of form elements in the order we setup. Next we work on the email address.</p>
<p><code><strong><font size="2" color="#0000c0"></p>
<p align="left">else<font size="2"> </font><strong><font size="2" color="#0000c0">if</font></strong><font size="2" color="#5c5c5c">(</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"email"</font><font size="2" color="#5c5c5c">).</font><font size="2">value</font><font size="2" color="#5c5c5c">==</font><font size="2" color="#005c00">''</font><font size="2"> </font><font size="2" color="#5c5c5c">||<br />
(</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"email"</font><font size="2" color="#5c5c5c">).</font><font size="2">value</font><font size="2" color="#5c5c5c">!=</font><font size="2" color="#005c00">''</font><font size="2"> </font><font size="2" color="#5c5c5c">&amp;&amp;<br />
!</font><font size="2">emailfilter</font><font size="2" color="#5c5c5c">.</font><font size="2">test</font><font size="2" color="#5c5c5c">(</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"email"</font><font size="2" color="#5c5c5c">).</font><font size="2">value</font><font size="2" color="#5c5c5c">))){<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"error_msg"</font><font size="2" color="#5c5c5c">).</font><font size="2">childNodes</font><font size="2" color="#5c5c5c">[</font><font size="2" color="#004080">0</font><font size="2" color="#5c5c5c">].</font><font size="2">data</font><font size="2" color="#5c5c5c">=<br />
</font><font size="2" color="#005c00">'Please enter a valid e-mail address.'</font><font size="2" color="#5c5c5c">;<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"error_msg"</font><font size="2" color="#5c5c5c">).</font><font size="2">style</font><font size="2" color="#5c5c5c">.</font><font size="2">display </font><font size="2" color="#5c5c5c">=</font><font size="2"> </font><font size="2" color="#005c00">"block"</font><font size="2" color="#5c5c5c">;<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"email"</font><font size="2" color="#5c5c5c">).</font><font size="2">focus</font><font size="2" color="#5c5c5c">();<br />
</font><strong><font size="2" color="#0000c0">return</font></strong><font size="2"> </font><font size="2" color="#800040">false</font><font size="2" color="#5c5c5c">;<br />
}</font></p>
<p></font></strong></code>Notice how we handle the email value checking first to see if it is empty to trigger an error and then using the logical operator OR (denoted as ||), we then look at another statement. In that statement we use the logical operator AND (denoted as &amp;&amp;) to trigger an error, and if both the email filed is not empty and the emailfilter.test is not valid then we do what is in between the curly brackets again. The contents are the same as what we described in the first statement.</p>
<p><span id="more-3"></span></p>
<p><code><strong><font size="2" color="#0000c0"></p>
<p align="left">else<font size="2"> </font><strong><font size="2" color="#0000c0">if</font></strong><font size="2" color="#5c5c5c">(</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"phone"</font><font size="2" color="#5c5c5c">).</font><font size="2">value</font><font size="2" color="#5c5c5c">!=</font><font size="2" color="#005c00">""</font><font size="2"> </font><font size="2" color="#5c5c5c">&amp;&amp;<br />
!</font><font size="2">phonefilter</font><font size="2" color="#5c5c5c">.</font><font size="2">test</font><font size="2" color="#5c5c5c">(</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"phone"</font><font size="2" color="#5c5c5c">).</font><font size="2">value</font><font size="2" color="#5c5c5c">)){<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"error_msg"</font><font size="2" color="#5c5c5c">).</font><font size="2">childNodes</font><font size="2" color="#5c5c5c">[</font><font size="2" color="#004080">0</font><font size="2" color="#5c5c5c">].</font><font size="2">data </font><font size="2" color="#5c5c5c">=<br />
</font><font size="2" color="#005c00">"Please enter valid phone number"</font><font size="2" color="#5c5c5c">;<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"error_msg"</font><font size="2" color="#5c5c5c">).</font><font size="2">style</font><font size="2" color="#5c5c5c">.</font><font size="2">display </font><font size="2" color="#5c5c5c">=</font><font size="2"> </font><font size="2" color="#005c00">"block"</font><font size="2" color="#5c5c5c">;<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"phone"</font><font size="2" color="#5c5c5c">).</font><font size="2">focus</font><font size="2" color="#5c5c5c">();<br />
</font><strong><font size="2" color="#0000c0">return</font></strong><font size="2"> </font><font size="2" color="#800040">false</font><font size="2" color="#5c5c5c">;<br />
}</font></p>
<p></font></strong></code>The phone is very similar to the email, but nothing is done if no phone number is entered.</p>
<p><code><strong><font size="2" color="#0000c0"></p>
<p align="left">else<font size="2"> </font><strong><font size="2" color="#0000c0">if</font></strong><font size="2" color="#5c5c5c">(</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"subject"</font><font size="2" color="#5c5c5c">).<br />
</font><font size="2">options</font><font size="2" color="#5c5c5c">[</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"subject"</font><font size="2" color="#5c5c5c">).</font><font size="2">selectedIndex</font><font size="2" color="#5c5c5c">].</font><font size="2">value</font><font size="2" color="#5c5c5c">==</font><font size="2" color="#005c00">''</font><font size="2" color="#5c5c5c">){<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"error_msg"</font><font size="2" color="#5c5c5c">).</font><font size="2">childNodes</font><font size="2" color="#5c5c5c">[</font><font size="2" color="#004080">0</font><font size="2" color="#5c5c5c">].</font><font size="2">data</font><font size="2" color="#5c5c5c">=<br />
</font><font size="2" color="#005c00">'Please choose a subject address.'</font><font size="2" color="#5c5c5c">;<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"error_msg"</font><font size="2" color="#5c5c5c">).</font><font size="2">style</font><font size="2" color="#5c5c5c">.</font><font size="2">display </font><font size="2" color="#5c5c5c">=</font><font size="2"> </font><font size="2" color="#005c00">"block"</font><font size="2" color="#5c5c5c">;<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"subject"</font><font size="2" color="#5c5c5c">).</font><font size="2">focus</font><font size="2" color="#5c5c5c">();<br />
</font><strong><font size="2" color="#0000c0">return</font></strong><font size="2"> </font><font size="2" color="#800040">false</font><font size="2" color="#5c5c5c">;<br />
}</font></p>
<p></font></strong></code>The subject is a handled a little differently as it is part of a select element. You will notice that the format in the IF statement changes to read the chosen value. Giving the default a value=&#8221;" allows the application to recognize when no subject is selected.</p>
<p><code><strong><font size="2" color="#0000c0"></p>
<p align="left">else<font size="2"> </font><strong><font size="2" color="#0000c0">if</font></strong><font size="2" color="#5c5c5c">(</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"content"</font><font size="2" color="#5c5c5c">).</font><font size="2">value</font><font size="2" color="#5c5c5c">==</font><font size="2" color="#005c00">''</font><font size="2" color="#5c5c5c">){<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"error_msg"</font><font size="2" color="#5c5c5c">).</font><font size="2">childNodes</font><font size="2" color="#5c5c5c">[</font><font size="2" color="#004080">0</font><font size="2" color="#5c5c5c">].</font><font size="2">data</font><font size="2" color="#5c5c5c">=</font><font size="2" color="#005c00">'Please be sure to enter comments.'</font><font size="2" color="#5c5c5c">;<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"error_msg"</font><font size="2" color="#5c5c5c">).</font><font size="2">style</font><font size="2" color="#5c5c5c">.</font><font size="2">display </font><font size="2" color="#5c5c5c">=</font><font size="2"> </font><font size="2" color="#005c00">"block"</font><font size="2" color="#5c5c5c">;<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"content"</font><font size="2" color="#5c5c5c">).</font><font size="2">focus</font><font size="2" color="#5c5c5c">();<br />
</font><strong><font size="2" color="#0000c0">return</font></strong><font size="2"> </font><font size="2" color="#800040">false</font><font size="2" color="#5c5c5c">;<br />
}</font><strong><font size="2" color="#0000c0">else</font></strong><font size="2"> </font><font size="2" color="#5c5c5c">{</font><font size="2"> </font><strong><font size="2" color="#0000c0">return</font></strong><font size="2"> </font><font size="2" color="#800040">true</font><font size="2" color="#5c5c5c">;</font><font size="2"> </font><font size="2" color="#5c5c5c">}<br />
}<br />
</font><font size="2" color="#008000">//--&gt;<br />
</font><font size="2" color="#0000ff">&lt;/</font><font size="2" color="#a31515">script</font><font size="2" color="#0000ff">&gt;</font></p>
<p></font></strong></p>
<p align="left">The last item for textarea element is similar to what was done for the name element, and that is all followed the last ELSE which will return a true or you can have it point to another function (like we will do for AJAX call in the final example). If set to true, it will just submit the form.</p>
<p></code>So now that the script is done, the only thing left is providing a place to display the error. The div/span can be placed where ever you want the error to be displayed. The error will only be displayed when triggered by the javascript.</p>
<p><code><font size="2" color="#0000ff">&lt;<font size="2" color="#a31515">span</font><font size="2"> </font><font size="2" color="#ff0000">id</font><font size="2">=</font><font size="2" color="#0000ff">"error_msg"</font><font size="2"> </font><font size="2" color="#ff0000">class</font><font size="2">=</font><font size="2" color="#0000ff">"errormssg"&gt;</font><font size="2"> </font><font size="2" color="#0000ff">&lt;/</font><font size="2" color="#a31515">span</font><font size="2" color="#0000ff">&gt;</font></p>
<p></font></code>The trick here is when the id error_message style is defined. The key will be to make the class display none. The javascript will trigger the error to be visible (by changing display:block;) and then the error can be changed back by simply changing the style for id=&#8221;error_msg&#8221; display:block.</p>
<p>So lets take a look at the finished project. You can view and copy the <a href="http://www.dingobytes.com/example/testform.html" title="Example Form">finished product here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.dingobytes.com/tutorial/form-validation-ii/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>client side form validation</title>
		<link>http://www.dingobytes.com/tutorial/hello-world</link>
		<comments>http://www.dingobytes.com/tutorial/hello-world#comments</comments>
		<pubDate>Thu, 31 Jan 2008 01:22:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[forms]]></category>
		<category><![CDATA[Javascript]]></category>

		<guid isPermaLink="false">http://www.dingobytes.com/?p=1</guid>
		<description><![CDATA[The more we learn the more fun we have. Take for example the simple process of validating a form. We can save the user a lot of time validating the form on the client side and still do it without those annoying alerts that pop up with a loud DING! It is rather easy with [...]]]></description>
			<content:encoded><![CDATA[<p>The more we learn the more fun we have. Take for example the simple process of validating a form. We can save the user a lot of time validating the form on the client side and still do it without those annoying alerts that pop up with a loud DING! It is rather easy with the help of a little javascript.</p>
<p>Now depending on what type of data you are passing to the server with your form, you will often need to also validate your fields data on the server too. This tutorial will only look at the client side validation, leaving server side validation to another tutorial at some other time.</p>
<p>Lets first start with our form. We are going to do a simple form that just asks for name, email address, optional phone number, a select list for subject and text area for message. Oh, I always forget, we need a submit and clear button too. Lets start it all of with our form tag.</p>
<p><span id="more-1"></span></p>
<p>The form tag <code>&lt;form&gt;</code> will typically have the standard attributes of a method (get or post) and some sort of action. I often use AJAX to process my forms so the action may simply be action=&#8221;#&#8221; or action =&#8221;javascript:void();&#8221;. Knowing that we will be validating this form we are going to add one more attribute to the form element to validate the form when it is submitted and it is obviously called onsubmit. Here is the tag we will be using.</p>
<p><code><font size="2" color="#0000ff"></p>
<p align="left">&lt;<font size="2" color="#a31515">form</font><font size="2"> </font><font size="2" color="#ff0000">action</font><font size="2">=</font><font size="2" color="#0000ff">"javascript:void(0);"</font><font size="2"> </font><font size="2" color="#ff0000">name</font><font size="2">=</font><font size="2" color="#0000ff">"myform"<br />
</font><font size="2" color="#ff0000">onsubmit</font><font size="2">="</font><strong><font size="2" color="#0000c0">return</font></strong><font size="2"> validateForm</font><font size="2" color="#5c5c5c">();</font><font size="2">"</font><font size="2" color="#0000ff">&gt;</font></p>
<p></font></code>If you look what is inside the onsubmit attribute, it is pretty straight forward, we want to return the result of the javascript function we are going to create called validateForm() so that if it is true the form will will submit and if it is false it will not send.</p>
<p>Next we are going to just briefly go over the other form elements. There are several other elements, but for todays tutorial we are only going to use the &lt;input&gt;, &lt;select&gt; and &lt;textarea&gt; elements. The one thing to remember whenever using these elements is they should always have a name and id attribute and the input element should have a type attribute as well. Here is a an example of one of the input elements (for email) and our select and textarea elements.</p>
<p><code><font size="2" color="#0000ff"></p>
<p align="left">&lt;<font size="2" color="#a31515">label</font><font size="2"> </font><font size="2" color="#ff0000">for</font><font size="2">=</font><font size="2" color="#0000ff">"name"&gt;</font><font size="2">Name:</font><font size="2" color="#0000ff">&lt;/</font><font size="2" color="#a31515">label</font><font size="2" color="#0000ff">&gt;<br />
&lt;</font><font size="2" color="#a31515">input</font><font size="2"> </font><font size="2" color="#ff0000">type</font><font size="2">=</font><font size="2" color="#0000ff">"text"</font><font size="2"> </font><font size="2" color="#ff0000">id</font><font size="2">=</font><font size="2" color="#0000ff">"name"</font><font size="2"> </font><font size="2" color="#ff0000">name</font><font size="2">=</font><font size="2" color="#0000ff">"name"</font><font size="2"> </font><font size="2" color="#0000ff">/&gt;<br />
&lt;</font><font size="2" color="#a31515">label</font><font size="2"> </font><font size="2" color="#ff0000">for</font><font size="2">=</font><font size="2" color="#0000ff">"email"&gt;</font><font size="2">Email:</font><font size="2" color="#0000ff">&lt;/</font><font size="2" color="#a31515">label</font><font size="2" color="#0000ff">&gt;<br />
&lt;</font><font size="2" color="#a31515">input</font><font size="2"> </font><font size="2" color="#ff0000">type</font><font size="2">=</font><font size="2" color="#0000ff">"text"</font><font size="2"> </font><font size="2" color="#ff0000">id</font><font size="2">=</font><font size="2" color="#0000ff">"email"</font><font size="2"> </font><font size="2" color="#ff0000">name</font><font size="2">=</font><font size="2" color="#0000ff">"email"</font><font size="2"> </font><font size="2" color="#0000ff">/&gt;<br />
&lt;</font><font size="2" color="#a31515">label</font><font size="2"> </font><font size="2" color="#ff0000">for</font><font size="2">=</font><font size="2" color="#0000ff">"phone"&gt;</font><font size="2">Phone:</font><font size="2" color="#0000ff">&lt;/</font><font size="2" color="#a31515">label</font><font size="2" color="#0000ff">&gt;<br />
&lt;</font><font size="2" color="#a31515">input</font><font size="2"> </font><font size="2" color="#ff0000">type</font><font size="2">=</font><font size="2" color="#0000ff">"text"</font><font size="2"> </font><font size="2" color="#ff0000">id</font><font size="2">=</font><font size="2" color="#0000ff">"phone"</font><font size="2"> </font><font size="2" color="#ff0000">name</font><font size="2">=</font><font size="2" color="#0000ff">"phonel"</font><font size="2"> </font><font size="2" color="#0000ff">/&gt;<br />
&lt;</font><font size="2" color="#a31515">label</font><font size="2"> </font><font size="2" color="#ff0000">for</font><font size="2">=</font><font size="2" color="#0000ff">"subject"&gt;</font><font size="2">Subject:</font><font size="2" color="#0000ff">&lt;/</font><font size="2" color="#a31515">label</font><font size="2" color="#0000ff">&gt;<br />
&lt;</font><font size="2" color="#a31515">select</font><font size="2"> </font><font size="2" color="#ff0000">id</font><font size="2">=</font><font size="2" color="#0000ff">"subject"</font><font size="2"> </font><font size="2" color="#ff0000">name</font><font size="2">=</font><font size="2" color="#0000ff">"subject"&gt;<br />
&lt;</font><font size="2" color="#a31515">option</font><font size="2"> </font><font size="2" color="#ff0000">value</font><font size="2">=</font><font size="2" color="#0000ff">"Advertising Inquiry"&gt;</font><font size="2">Advertising Inquiry</font><font size="2" color="#0000ff">&lt;/</font><font size="2" color="#a31515">option</font><font size="2" color="#0000ff">&gt;<br />
&lt;</font><font size="2" color="#a31515">option</font><font size="2"> </font><font size="2" color="#ff0000">value</font><font size="2">=</font><font size="2" color="#0000ff">"Support Inquiry"&gt;</font><font size="2">Support Inquiry</font><font size="2" color="#0000ff">&lt;/</font><font size="2" color="#a31515">option</font><font size="2" color="#0000ff">&gt;<br />
&lt;</font><font size="2" color="#a31515">option</font><font size="2"> </font><font size="2" color="#ff0000">value</font><font size="2">=</font><font size="2" color="#0000ff">"General Inquiry"&gt;</font><font size="2">General Inquiry</font><font size="2" color="#0000ff">&lt;/</font><font size="2" color="#a31515">option</font><font size="2" color="#0000ff">&gt;<br />
&lt;/</font><font size="2" color="#a31515">select</font><font size="2" color="#0000ff">&gt;<br />
&lt;</font><font size="2" color="#a31515">label</font><font size="2"> </font><font size="2" color="#ff0000">for</font><font size="2">=</font><font size="2" color="#0000ff">"message"&gt;</font><font size="2">Message:</font><font size="2" color="#0000ff">&lt;/</font><font size="2" color="#a31515">label</font><font size="2" color="#0000ff">&gt;<br />
&lt;</font><font size="2" color="#a31515">textarea</font><font size="2"> </font><font size="2" color="#ff0000">id</font><font size="2">=</font><font size="2" color="#0000ff">"message"</font><font size="2"> </font><font size="2" color="#ff0000">name</font><font size="2">=</font><font size="2" color="#0000ff">"message"</font><font size="2"> </font><font size="2" color="#ff0000">rows</font><font size="2">=</font><font size="2" color="#0000ff">""</font><font size="2"> </font><font size="2" color="#ff0000">cols</font><font size="2">=</font><font size="2" color="#0000ff">""&gt;&lt;/</font><font size="2" color="#a31515">textarea</font><font size="2" color="#0000ff">&gt;<br />
&lt;</font><font size="2" color="#a31515">input</font><font size="2"> </font><font size="2" color="#ff0000">type</font><font size="2">=</font><font size="2" color="#0000ff">"submit"</font><font size="2"> </font><font size="2" color="#ff0000">id</font><font size="2">=</font><font size="2" color="#0000ff">"submit"</font><font size="2"> </font><font size="2" color="#ff0000">name</font><font size="2">=</font><font size="2" color="#0000ff">"submit"</font><font size="2"> </font><font size="2" color="#ff0000">value</font><font size="2">=</font><font size="2" color="#0000ff">"Submit"</font><font size="2"> </font><font size="2" color="#0000ff">/&gt;</font></p>
<p></font></p>
<p align="left">Now that the form is created, we can move on to the javascript function to validate the form. You will want to place this javascript before the form in the page. Here is the code, I will explain it as we go through it.</p>
<p></code><code><font size="2" color="#0000ff"></p>
<p align="left">&lt;<font size="2" color="#a31515">script</font><font size="2"> </font><font size="2" color="#ff0000">type</font><font size="2">=</font><font size="2" color="#0000ff">"text/javascript"&gt;<br />
</font><font size="2" color="#008000">&lt;!--//<br />
</font><strong><font size="2" color="#0000c0">function</font></strong><font size="2"> validateForm</font><font size="2" color="#5c5c5c">(){<br />
</font><strong><font size="2" color="#0000c0">var</font></strong><font size="2"> emailfilter </font><font size="2" color="#5c5c5c">=<br />
</font><font size="2" color="#800040">/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/</font><font size="2" color="#5c5c5c">;<br />
</font><strong><font size="2" color="#0000c0">var</font></strong><font size="2"> phonefilter </font><font size="2" color="#5c5c5c">=<br />
</font><font size="2" color="#800040">/\(?\d{3}\)?([-\/\.])\d{3}\1\d{4}/</font><font size="2" color="#5c5c5c">;<br />
</font><strong><font size="2" color="#0000c0">if</font></strong><font size="2" color="#5c5c5c">(</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"name"</font><font size="2" color="#5c5c5c">).</font><font size="2">value</font><font size="2" color="#5c5c5c">==</font><font size="2" color="#005c00">""</font><font size="2" color="#5c5c5c">){<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"error_msg"</font><font size="2" color="#5c5c5c">).</font><font size="2">childNodes</font><font size="2" color="#5c5c5c">[</font><font size="2" color="#004080">0</font><font size="2" color="#5c5c5c">].</font><font size="2">data </font><font size="2" color="#5c5c5c">=<br />
</font><font size="2" color="#005c00">"Please enter full name"</font><font size="2" color="#5c5c5c">;<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"error_msg"</font><font size="2" color="#5c5c5c">).</font><font size="2">style</font><font size="2" color="#5c5c5c">.</font><font size="2">display </font><font size="2" color="#5c5c5c">=</font><font size="2"> </font><font size="2" color="#005c00">"block"</font><font size="2" color="#5c5c5c">;<br />
</font><font size="2">document</font><font size="2" color="#5c5c5c">.</font><font size="2">getElementById</font><font size="2" color="#5c5c5c">(</font><font size="2" color="#005c00">"name"</font><font size="2" color="#5c5c5c">).</font><font size="2">focus</font><font size="2" color="#5c5c5c">();<br />
</font><strong><font size="2" color="#0000c0">return</font></strong><font size="2"> </font><font size="2" color="#800040">false</font><font size="2" color="#5c5c5c">;<br />
}</font></p>
<p></font></code>The first thing we did was declare that we were going to use javascript by using the &lt;script&gt; tag. We then defined the function validateForm() which will have no values passed to it and use the curly brackets to hold our statements for the function.</p>
<p>Two regular expressions (regex) are then defined which will be used for validatig the email address and the pone number. I have created these two regex items, but you can find about any regex you could imagine at <a href="http://www.regexlib.com">http://www.regexlib.com</a>.</p>
<p>The next steps are going to be repeated in slightly different ways, so we will discuss them here in a little more detail. The first statement starts with the IF statement where we check to see if what is inside the () is true. If the statement is true it continues to process what is in the curly brackets.</p>
<p>The text on the right hand side of the first statement replaces the childNodes.data of the element with id=&#8221;error_message&#8221;. This is followed by style change of the element, in this example we change display:none to display:block.</p>
<p>To make it less confusing for the user, the next statement focuses the cursor back in the input field with id =&#8221;name&#8221;.  The last item in the IF statement is return false which will stop the form from processing. The IF statement is then closed with the end curly bracket.</p>
<p> To be continued. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.dingobytes.com/tutorial/hello-world/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
