<?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>Chris Wallace &#187; JavaScript Tips</title>
	<atom:link href="http://www.chris-wallace.com/tag/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.chris-wallace.com</link>
	<description>User experience designer and infamous WordPress developer.</description>
	<lastBuildDate>Sat, 21 Jan 2012 15:50:46 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Expanding on How to Auto Caption Images Using MooTools</title>
		<link>http://www.chris-wallace.com/2009/01/23/expanding-on-how-to-auto-caption-images-using-mootools/</link>
		<comments>http://www.chris-wallace.com/2009/01/23/expanding-on-how-to-auto-caption-images-using-mootools/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 04:31:49 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[image captions]]></category>
		<category><![CDATA[JavaScript Tips]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.chris-wallace.com/?p=692</guid>
		<description><![CDATA[One of the guys I love chatting it up with is Jacob Gube of Six Revisions. Jacob recently posted a great Mootools tutorial on automatically adding image captions using Mootools. I enjoyed the tutorial so much I thought I would [...]]]></description>
			<content:encoded><![CDATA[<p>One of the guys I love chatting it up with is <a href="http://www.twitter.com/jggube">Jacob Gube</a> of <a href="http://www.sixrevisions.com">Six Revisions</a>. Jacob recently posted a <a href="http://sixrevisions.com/tutorials/mootools-tutorials/how-to-auto-caption-images-using-mootools/">great Mootools tutorial</a> on automatically adding image captions using Mootools. I enjoyed the tutorial so much I thought I would expand upon it and make it a MooTools class that can be reused for various purposes as needed.<br />
<span id="more-692"></span></p>
<p style="text-align: center"><a class="demo" style="font-size: 1.4em; background: url(http://www.chris-wallace.com/wp-content/themes/designerdeveloper/images/header-bg-darker.png); display: inline-block; padding: 5px 10px" href="http://www.chris-wallace.com/demo/mootools/autocaption.html">Check out the demo.</a></p>
<p>This class has a couple options you may want to use, <strong>position</strong> and <strong>alignment</strong>.</p>
<p>Position can be set to either &#8216;before&#8217; or &#8216;after&#8217; which will change whether the caption is above or below the image. Alignment can be set to &#8216;left&#8217; or &#8216;right&#8217; or &#8216;center&#8217; and allows you to align the text within the caption.</p>
<p>If anyone is interested in what the code looks like, here is what you will find in the demo:</p>
<pre><code>/* Let's create a new Class */
var AutoCaptioner = new Class({
	Implements: [Options, Events],

	/* Set up the default options of position: 'after' and alignment: 'center' */
	options: {
					images : [],
					position : 'after',
					alignment : 'center'
	},
	initialize: function(options){
		this.setOptions(options);
		this.addCaptions(this.options.images,this.options.alignment, this.options.position);
	},
	addCaptions : function(images, alignment, position){

		$$(images).each(function(el){			

			var captionText = el.getProperty('title') || el.getProperty('alt');
			if ( captionText ) {
				var figure = new Element('div', {
					'class' : 'figure',
						'styles' : {
							'width' : el.get('width').toInt() + 10
						}
				});
				var caption = new Element('p', {
					'class' : 'caption',
					'html' : captionText
				})
				.addClass(alignment);
				figure.wraps(el);
				caption.inject(el,position);
			} else {
				alert('The image: "'+el.getProperty('src')+'" needs a title or alt value.');
			}
		});
	}
});

window.addEvent('domready', function() {

  /* Let's instantiate a new object */
  new AutoCaptioner({
	  /* set up the options below */
    images : $$('img.captioned'),
		position : 'after',
		alignment : 'center'
	});

});</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.chris-wallace.com/2009/01/23/expanding-on-how-to-auto-caption-images-using-mootools/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>5 Useful JavaScript Library Cheat Sheets</title>
		<link>http://www.chris-wallace.com/2008/12/01/5-useful-javascript-library-cheat-sheets/</link>
		<comments>http://www.chris-wallace.com/2008/12/01/5-useful-javascript-library-cheat-sheets/#comments</comments>
		<pubDate>Mon, 01 Dec 2008 18:54:58 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[cheat sheets]]></category>
		<category><![CDATA[JavaScript Tips]]></category>

		<guid isPermaLink="false">http://www.chris-wallace.com/?p=262</guid>
		<description><![CDATA[Sometimes while working on various client projects, I need to familiarize myself with the JavaScript library my client is using. Below are some great quick reference &#8220;cheat sheets&#8221; that can get you started using libraries you are particularly unfamiliar with. [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://cdn.chris-wallace.com/wp-content/uploads/liferequirescheatsheets.jpg"><img class="alignnone size-full wp-image-309" title="Life Requires Cheat Sheets" src="http://cdn.chris-wallace.com/wp-content/uploads/liferequirescheatsheets.jpg" alt="" width="500" height="120" /></a></p>
<p>Sometimes while working on various client projects, I need to familiarize myself with the JavaScript library my client is using. Below are some great quick reference &#8220;cheat sheets&#8221; that can get you started using libraries you are particularly unfamiliar with.<span id="more-262"></span></p>
<h2><a href="http://colorcharge.com/wp-content/uploads/2007/12/jquery12_colorcharge.png">jQuery Cheat Sheet</a> (PNG, 364kb)</h2>
<p><a href="http://cdn.chris-wallace.com/wp-content/uploads/jquerycheatsheet.jpg"><img class="alignnone size-full wp-image-263" title="jQuery Cheat Sheet" src="http://cdn.chris-wallace.com/wp-content/uploads/jquerycheatsheet.jpg" alt="" width="500" height="177" /></a></p>
<p>Released by <a title="ColorCharge.com" href="http://www.colorcharge.com">ColorCharge.com</a>. They&#8217;ve also released a version for the iPhone/iPod Touch called <a title="jTouch" href="http://labs.colorcharge.com/jtouch">jTouch</a>.</p>
<h2><a href="http://snook.ca/files/mootools_83_snookca.png">MooTools Cheat Sheet</a> (PNG, 111kb)</h2>
<p><a href="http://cdn.chris-wallace.com/wp-content/uploads/mootoolscheatsheet.jpg"><img class="alignnone size-full wp-image-264" title="Mootools Cheat Sheet" src="http://cdn.chris-wallace.com/wp-content/uploads/mootoolscheatsheet.jpg" alt="" width="500" height="177" /></a></p>
<p>Released by <a title="Jonathan Snook" href="http://www.snook.ca">Jonathan Snook</a>.</p>
<h2><a href="http://thinkweb2.com/projects/prototype/downloads/Prototype%20Cheat%20Sheet%201.6.0.2">Prototype Cheat Sheet</a> (PDF, 155kb)</h2>
<p><a href="http://cdn.chris-wallace.com/wp-content/uploads/prototypecheatsheet.jpg"><img class="alignnone size-full wp-image-267" title="Prototype Cheat Sheet" src="http://cdn.chris-wallace.com/wp-content/uploads/prototypecheatsheet.jpg" alt="" width="500" height="177" /></a></p>
<p>Released by <a href="http://thinkweb2.com/projects/prototype/prototype-1602-cheat-sheet/">kangax</a>.</p>
<h2><a href="http://www.slash7.com/cheats/scriptaculous_fx1.pdf">Script.aculo.us Cheat Sheet</a> (PDF, 80kb)</h2>
<p><a href="http://cdn.chris-wallace.com/wp-content/uploads/scriptycheatsheet.jpg"><img class="alignnone size-full wp-image-265" title="Script.aculo.us Cheat Sheet" src="http://cdn.chris-wallace.com/wp-content/uploads/scriptycheatsheet.jpg" alt="" width="500" height="177" /></a></p>
<p>Released by <a href="http://www.slash7.com">Amy Hoy</a>.</p>
<h2><a title="Collection of YUI Cheat Sheets" href="http://developer.yahoo.com/yui/docs/assets/cheatsheets.zip">Yahoo User Interface Library</a> (ZIP file 26 mb)</h2>
<p><a href="http://cdn.chris-wallace.com/wp-content/uploads/yuicheatsheets.jpg"><img class="alignnone size-full wp-image-266" title="Yahoo! User Interface Cheat Sheets" src="http://cdn.chris-wallace.com/wp-content/uploads/yuicheatsheets.jpg" alt="" width="500" height="177" /></a></p>
<p>Released by&#8230; well&#8230; <a href="http://developer.yahoo.com/yui/">Yahoo</a>.</p>
<p>Please let me know if you have any other good cheat sheets to add to the list!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chris-wallace.com/2008/12/01/5-useful-javascript-library-cheat-sheets/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Convert a value to pixels with JavaScript</title>
		<link>http://www.chris-wallace.com/2008/11/12/convert-a-value-to-pixels-with-javascript/</link>
		<comments>http://www.chris-wallace.com/2008/11/12/convert-a-value-to-pixels-with-javascript/#comments</comments>
		<pubDate>Wed, 12 Nov 2008 16:20:54 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[JavaScript Tips]]></category>

		<guid isPermaLink="false">http://www.chris-wallace.com/?p=173</guid>
		<description><![CDATA[I was working on something the other day and needed a quick snippet of JavaScript to convert values to pixels from any string. Below is a quick function: function px(val) { return parseInt(val)+"px"; } } To use it, just wrap [...]]]></description>
			<content:encoded><![CDATA[<p>I was working on something the other day and needed a quick snippet of JavaScript to convert values to pixels from any string. Below is a quick function:</p>
<pre><code>function px(val) {
    return parseInt(val)+"px";
  }
}</code></pre>
<p>To use it, just wrap your string with the function and it should convert it to pixels for you:</p>
<pre><code>
var oldValue = '65';
var newValue = px(oldValue);
</code></pre>
<p>Let me know how this works for you and if you make any modifications to improve it. Thanks!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chris-wallace.com/2008/11/12/convert-a-value-to-pixels-with-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Finding Window Dimensions with Javascript</title>
		<link>http://www.chris-wallace.com/2008/11/03/finding-window-dimensions-with-javascript/</link>
		<comments>http://www.chris-wallace.com/2008/11/03/finding-window-dimensions-with-javascript/#comments</comments>
		<pubDate>Mon, 03 Nov 2008 14:07:19 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[JavaScript Tips]]></category>
		<category><![CDATA[window.height]]></category>
		<category><![CDATA[window.width]]></category>

		<guid isPermaLink="false">http://www.chris-wallace.com/?p=115</guid>
		<description><![CDATA[Sometimes you may want to find the dimensions of the user&#8217;s browser window. Below is a list of the propertiesthat are accessible with different browsers. Traditionally, window.innerWidth/window.innerHeight is the most widely accepted way to obtain these values, however, there is [...]]]></description>
			<content:encoded><![CDATA[<p>Sometimes you may want to find the dimensions of the user&#8217;s browser window. Below is a list of the propertiesthat are accessible with different browsers. Traditionally, <code>window.innerWidth/window.innerHeight</code> is the most widely accepted way to obtain these values, however, there is deviation between IE 4 and IE 6+ in &#8220;standards compliant mode.&#8221; Below, I have listed the different ways to find the window height and width.</p>
<h2>Non-IE Browsers</h2>
<ul>
<li>window.innerWidth</li>
<li>window.innerHeight</li>
</ul>
<h2>IE 6+ in &#8220;standards compliant mode&#8221;</h2>
<ul>
<li>document.documentElement.clientWidth</li>
<li>document.docuementElement.clientHeight</li>
</ul>
<h2>IE 4</h2>
<ul>
<li>document.body.clientWidth</li>
<li>document.body.clientHeight</li>
</ul>
<h2>Sample code for finding the inner window dimensions</h2>
<p>The script below will alert the proper window height and width in various browsers.</p>
<pre><code>
  function alertSize() {
    var myWidth = 0, myHeight = 0;
    if( typeof( window.innerWidth ) == 'number' ) {
      //Non-IE
      myWidth = window.innerWidth;
      myHeight = window.innerHeight;
    } else if( document.documentElement &amp;&amp; ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
      //IE 6+ in 'standards compliant mode'
      myWidth = document.documentElement.clientWidth;
      myHeight = document.documentElement.clientHeight;
    } else if( document.body &amp;&amp; ( document.body.clientWidth || document.body.clientHeight ) ) {
      //IE 4 compatible
      myWidth = document.body.clientWidth;
      myHeight = document.body.clientHeight;
    }
    window.alert( 'Width = ' + myWidth );
    window.alert( 'Height = ' + myHeight );
  }
  </code></pre>
]]></content:encoded>
			<wfw:commentRss>http://www.chris-wallace.com/2008/11/03/finding-window-dimensions-with-javascript/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Basic Instant Form Validation</title>
		<link>http://www.chris-wallace.com/2008/10/24/basic-instant-form-validation/</link>
		<comments>http://www.chris-wallace.com/2008/10/24/basic-instant-form-validation/#comments</comments>
		<pubDate>Fri, 24 Oct 2008 19:11:29 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[JavaScript Tips]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.chris-wallace.com/?p=101</guid>
		<description><![CDATA[To continue my series of form validation and presentation posts, I have built a simple form validation script that does not require a library to use, which makes it very small, even uncompressed, totaling only 7kb. This validation script currently [...]]]></description>
			<content:encoded><![CDATA[<p>To continue my series of form validation and presentation posts, I have built a simple form validation script that does not require a library to use, which makes it very small, even uncompressed, totaling only 7kb. This validation script currently handles the following types of fields:</p>
<ul>
<li><strong>Required Field:</strong> user must enter a value</li>
<li><strong>Email Address:</strong> user must enter an email address</li>
<li><strong>Digits-only:</strong> user must enter only digits (includes optional phone number formatting (US only, for now): if user enters a phone number, the script automatically converts it to &#8220;(555) 555-5555&#8243;)</li>
<li><strong>Minimum/Maximum Length:</strong> user input must meet a minimum length and cannot exceed a maximum length</li>
</ul>
<p>The script relies on class names assigned to each input field such as &#8220;required&#8221; &#8220;isemail&#8221;  &#8220;minlength:4&#8243; or &#8220;phone&#8221; to apply validation rules.<span id="more-101"></span></p>
<h2>To get started</h2>
<p>Check out <a title="Basic Validation Script" href="http://www.chris-wallace.com/demo/forms/basicValidation.html" target="_blank">the demo</a> first. Then, download the <a title="Download the source code." href="http://www.chris-wallace.com/demo/forms/basicValidation.zip">source code</a>.</p>
<p>In validation.js, at the very end of the file, you will see this code:</p>
<pre><code>addEvent(window, 'load', function(){
  var registration = document.getElementById('registration');
  validate.listen(registration);
  registration.onsubmit = function(){
    return validate.init(this);
  }
});</code></pre>
<p>You will want to change the name of the form here. Basically replace the word &#8216;registration&#8217; with the name of your form. Or if you want to add this to every form throughout your site, try this instead:</p>
<pre><code>addEvent(window, 'load', function(){
  if(document.forms){
    for(i=0;i&lt;document.forms.length;i++){
      validate.listen(document.forms[i]);
      document.forms[i].onsubmit = function(){
        return validate.init(this);
      }
    }
  }
});</code></pre>
<h2>Preparing your form for validation</h2>
<p>There are a couple things you will want to do for all fields you intend to check before actually adding validation classes to them:</p>
<ol>
<li>Make sure the field has a title attribute. This is used for the error messaging. For example, if the field is &#8220;First Name&#8221;, your title attribute should be <code>title="First Name"<br />
</code> in order to give the user a clearer message as to what they need to do next.</li>
<li>Assign a maxlength, if the field requires one. The maxlength attribute will be used in any cases where you are validating a field that requires a value with a minimum length. The error message will automatically tell the user the appropriate range of characters the input field accepts and if the minimum and maximum character lengths are the same, it will tell the user the exact number of characters required to fix the error.</li>
</ol>
<h2>Setting up fields for validation</h2>
<p>Like I mentioned at the beginning of this post, these are the current validation methods:</p>
<ul>
<li><strong>Required Field</strong></li>
<li><strong>Email Address</strong></li>
<li><strong>Digits-only </strong>(with optional phone number formatting)</li>
<li><strong>Minimum/Maximum Length</strong></li>
</ul>
<p><strong>Required fields</strong><br />
To add required field validation, simply add  to any one of your inputs or textareas (doesn&#8217;t work for checkboxes, radio buttons, or selects).</p>
<p><strong>Digit-only fields</strong><br />
To add validation to fields that only accept digits, simply add <code>class="digits"</code> to your input field. This will prevent the user from entering any other type of character.</p>
<p>Optional US phone number formatting is available by changing your class to<br />
<code>&lt;input type="text" name="phone" title="Phone Number" maxlength="10" class="digits phone minlength:10"&gt;</code><br />
This will essentially take a 10 digit US phone number with no formatting and convert it to this: (555) 555-5555.</p>
<p><strong>Minimum/Maximum length fields</strong><br />
To add validation for minimum/maximum length fields, simple add a class name of minlength followed by a colon followed by a number, which represents the minimum length allowed for this specific field. If you need to add a maximum length, as I mentioned earlier, you will want to add the standard attribute maxlength for that, for example:<br />
<code>&lt;input type="text" name="firstname" title="First Name" maxlength="25" class="minlength:2"&gt;</code></p>
<h2>Mix and match</h2>
<p>You can use multiple classes to add separate validation rules to an input field. For example, if you have a field that requires the user to enter a number between 8 and 10 characters, you would add <code>class="digits minlength:8"</code> and <code>maxlength="10"</code> as a standard attribute, resulting in the following:<br />
<code>&lt;input type="text" name="idnumber" title="ID Number" maxlength="10" class="digits minlength:8"&gt;</code></p>
<h2>Use and enjoy</h2>
<p>Please use this script and let me know how it works out for you and if you encounter any bugs. I will be adding more validation and formatting to this in the future, for things like addresses, ZIP codes, passwords, phone numbers for different countries, etc.</p>
<p>Here is <a title="Basic Validation Script" href="http://www.chris-wallace.com/demo/forms/basicValidation.html" target="_blank">the demo</a> . Download the <a title="Download the source code." href="http://www.chris-wallace.com/demo/forms/basicValidation.zip">source code</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chris-wallace.com/2008/10/24/basic-instant-form-validation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Highlight Form Elements on Focus with CSS and Javascript</title>
		<link>http://www.chris-wallace.com/2008/10/10/highlight-form-elements-on-focus-with-css-and-javascript/</link>
		<comments>http://www.chris-wallace.com/2008/10/10/highlight-form-elements-on-focus-with-css-and-javascript/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 18:39:25 +0000</pubDate>
		<dc:creator>Chris</dc:creator>
				<category><![CDATA[Tips & Tutorials]]></category>
		<category><![CDATA[Cascading Stylesheets]]></category>
		<category><![CDATA[Design Inspiration]]></category>
		<category><![CDATA[JavaScript Tips]]></category>

		<guid isPermaLink="false">http://www.chris-wallace.com/?p=11</guid>
		<description><![CDATA[This is the first in a series of posts on simple CSS and JavaScript form enhancements and validation.  More specifically, these are for people using Prototype or jQuery to handle one or two small tasks on a page and really [...]]]></description>
			<content:encoded><![CDATA[<p>This is the first in a series of posts on simple CSS and JavaScript form enhancements and validation.  More specifically, these are for people using Prototype or jQuery to handle one or two small tasks on a page and really should be using a simple script like this one to handle such tasks.</p>
<p>This method uses CSS to add a pseudo class of :focus to all form elements and for users on browsers that don&#8217;t understand this pseudo element, the javascript adds a class of focus to each element. This method ensures the highest level of compatibility and visual consistency for all users.</p>
<dl id="attachment_13" class="wp-caption alignright" style="width: 434px;">
<dt class="wp-caption-dt"><a href="http://www.chris-wallace.com/wp-content/highlight_example.jpg"><img class="size-full wp-image-13" title="highlightOnFocus Example" src="http://www.chris-wallace.com/wp-content/highlight_example.jpg" alt="highlightOnFocus Example" width="424" height="176" /></a></dt>
</dl>
<div class="mceTemp">
<dl class="wp-caption alignright" style="width: 434px;">
<dd class="wp-caption-dd">Example of Highlighted Form Field </dd>
</dl>
</div>
<p>View the demo:<br />
<a title="highlightOnFocus Demo" href="http://www.chris-wallace.com/demo/forms/highlightOnFocus.html">highlightOnFocus Demo</a></p>
<p>Download the example:<br />
<a title="highlightOnFocus.zip" href="http://www.chris-wallace.com/demo/forms/highlightOnFocus.zip">highlightOnFocus.zip</a></p>
<p>To the right, you&#8217;ll see an example of what this object does. <strong>It adds a classname of &#8220;focus&#8221; to a form element when the cursor has entered the field and removes the class when the cursor leaves the field.</strong></p>
<p>You will need to include the following code in the &lt;head&gt; section of your page:</p>
<pre><code>&lt;link rel="stylesheet" type="text/css" href="./css/highlightOnFocus.css"&gt;
&lt;!--[if lte IE 7]&gt;
&lt;script type="text/javascript" src="./js/highlightOnFocus.js"&gt;&lt;/script&gt;
&lt;![endif]--&gt;</code></pre>
<p>When IE is the browser, the script will automatically walk through your page elements, identify any forms, loop through the form elements and add focus and blur events that basically add and remove a class of &#8220;focus&#8221; to the fields. Firefox 3, Safari 3, and Chrome do not need the javascript thanks to the :focus pseudo selector.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.chris-wallace.com/2008/10/10/highlight-form-elements-on-focus-with-css-and-javascript/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk: basic
Page Caching using disk: enhanced
Database Caching 1/35 queries in 0.011 seconds using disk: basic
Object Caching 541/618 objects using disk: basic
Content Delivery Network via Amazon Web Services: CloudFront: cdn.chris-wallace.com

Served from: www.chris-wallace.com @ 2012-02-09 11:46:54 -->
