<?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>Zebra Kick</title>
	<atom:link href="http://www.zebrakick.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zebrakick.com</link>
	<description>Custom Magento Development &#38; Business Web Design in Riverside, CA</description>
	<lastBuildDate>Tue, 14 Feb 2012 02:15:37 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Albuquerque Plumbing &#8211; A Tale of Two Plumbers&#8217; SEOs</title>
		<link>http://www.zebrakick.com/albuquerque-plumbing-and-plumbers/</link>
		<comments>http://www.zebrakick.com/albuquerque-plumbing-and-plumbers/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 01:58:04 +0000</pubDate>
		<dc:creator>zebrakick</dc:creator>
				<category><![CDATA[Onsite SEO]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/?p=389</guid>
		<description><![CDATA[Having practiced SEO in Riverside for the last 6 years, my SEO techniques have become tailored to a region with 30+ city names (in the inland empire alone).   When you add in Orange County and Los Angeles, I am used to running campaigns targeting dozens of regional terms.  So what happens when you find a region [...]]]></description>
			<content:encoded><![CDATA[<p>Having practiced SEO in Riverside for the last 6 years, my SEO techniques have become tailored to a region with 30+ city names (in the inland empire alone).   When you add in Orange County and Los Angeles, I am used to running campaigns targeting dozens of regional terms.  So what happens when you find a region with 1 city that has 1 million people, in a state with only 2?  Albuquerque is just a region and as I have been exploring the cities rankings I am finding some interesting things.</p>
<h2>Albuquerque Plumbing &#8211; A tale of two SEO&#8217;s</h2>
<p>I was most surprised when I looked into<span style="text-decoration: underline;"><strong> <a href="/albuquerque-plumbing-and-plumbers/">Albuquerque Plumbing</a></strong></span> and some related key terms.   I had been tipped off by someone familiar with the niche in the city, that I should look into the rankings.  What I found was two websites outranking the local box.  Although two natural listings above the local box is not surprising in its self, as far as I can tell, it is a classic case of two SEO&#8217;s making life difficult for each other.   The two sites at the top have similar stats but the younger brother 4 year old, is beating out bit brother, 14 years old (boy what I would do with a local client with a 14 year old aged domain).</p>
<p><img class="alignnone size-full wp-image-397" title="albuquerque plumbing" src="http://www.zebrakick.com/wp-content/uploads/2012/02/albuquerque-plumbing.png" alt="" width="551" height="260" /></p>
<h3>On-page ranking factors</h3>
<p>Big bro seems to have focused all efforts on on-page optimization.  With footer internal link building, and writing &#8220;seo copy&#8221;  In fact the description for big bro is atrocious.</p>
<blockquote><p>Plumbers Albuquerque TLC Plumbing Repair Heating Cooling Repair Service Albuquerque Best Plumbers Heating Service Technicians Cooling Repair Services Albuquerque.</p></blockquote>
<p>Compare that heap of keyword loading to</p>
<blockquote><p>Reasonable Rates. Quality Work. Fast Response Time. Get your plumbing or HVAC maintenance and emergencies taken care of right the first time at <strong>Albuquerque Plumbing</strong>, Heating &amp; Cooling!</p></blockquote>
<p><strong> Which plumber do you think would get a better click through rate? </strong></p>
<p>So what else is making the difference?</p>
<p>Internal Linking</p>
<p>The lil bro is linking to deep pages from the COPY of its home page, but look at the older site.  They just wrote copy and didn&#8217;t link to ANY internal content.  Instead the keyword loaded the footer with what appear to be rather spammy looking links!  Remember SEO boys and girls, if it&#8217;s too ugly for your own site, it&#8217;s to ugly for google.</p>
<h2>Albuquerque Plumbers Off-Site Breakdown</h2>
<p><a href="/albuquerque-plumbing-and-plumbers/"><img class="alignnone size-large wp-image-394" title="albuquerque-plumbing" src="http://www.zebrakick.com/wp-content/uploads/2012/02/albuquerque-plumbing-600x208.jpg" alt="" width="600" height="208" /></a></p>
<p>Younger Brother is a PR 3 while older is a PR 4.  The Domain is a decade younger, and he has less inbound links (151 vs 176).  Big brother even has twice as much content (1020 vs 607) AND a gov link.  So why is younger brother winning?</p>
<h3>Optimized Anchor text for Albuquerque Plumbing</h3>
<p>Simply put, younger brother is optimizing for the keywords better.  Although I will avoid going into detail as to HOW he is able to optimize for the terms, his inbound anchor text is making better use of keywords and less use of branded terms.  Now the irony behind this is that this is a classic case of a better campaign beating out a lesser campaign (for a better website).</p>
<h3>Is this kind of SEO &#8220;White Hat&#8221;?</h3>
<p>Although 2007 Julian may disagree with me, both SEOs are perfectly fine in my opinion.  Sure they are both building links, it&#8217;s just one is building links in a more optimized fashion.  (and it appears the SEO may have a few more built up resources to leverage&#8230;.. *cough*).  That said, both sites are cleaner than 90% of ranking sites, and 100% of my personal projects.</p>
<p>So is the top ranking site (lil bro) doing a better job at marketing?  This is were I would disagree.  If you look a the first page for &#8220;Albuquerque Plumbing&#8221;  Big Bro is running a Pay per click, (at likely 5 bucks a click, yes these local terms are competitive). Big Bro is also ranking in the local box (right below his second place natural listing).  This means that of the first 6 positions (3 ads, 2 naturals and 1 local) big bro has 3 or 50%.  This is great page coverage.  And the statistics would back this up (alexa has big bro in the 2m. traffic mark while lil bro is closer to 7m).</p>
<h3>Once a top ranking plumb always a top ranking plumber?</h3>
<p>Not exactly. See, big brother is ranking with very little off page optimization.  All it would take is a little bit of targeting link building to really ramp up the rankings.  What kind of link building? Well that Ill let your imagination think of the various kinds, but any link building able to generate between a few hundred (or thousand) links would make it pretty easy to out rank lil bro.</p>
<p>All in all it is a pretty interesting niche to watch.  As I am in Albuquerque more, I will be keeping an eye on the plumbing niche.  Who knows what other niches I will find that have some local SEO competitions going on!</p>
<p><strong>Random Tip</strong>&#8230; go to lil bro&#8217;s site, and check out the sidebar &#8220;Angies list awards&#8221;.  Why would a website link with anchor rich text to an Angies listing&#8230;&#8230; Here is a hint, page one real estate.</p>
<p>&nbsp;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/albuquerque-plumbing-and-plumbers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>New from Monster Media &#8211; Carbon Fiber Wraps</title>
		<link>http://www.zebrakick.com/carbon-fiber-wrap/</link>
		<comments>http://www.zebrakick.com/carbon-fiber-wrap/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 23:27:22 +0000</pubDate>
		<dc:creator>zebrakick</dc:creator>
				<category><![CDATA[Monster Media]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/?p=373</guid>
		<description><![CDATA[Part of having partners in business is being able to experience industries that are slightly different than your own.  Our partnership with Monster Media has been a perfect example of this. A couple weeks ago Monster Media installed a carbon fiber wrap on a rally car from K&#38;N.   What makes this wrap so cool [...]]]></description>
			<content:encoded><![CDATA[<p>Part of having partners in business is being able to experience industries that are slightly different than your own.  Our partnership with Monster Media has been a perfect example of this. A couple weeks ago Monster Media installed a <a href="http://www.wrapvehicles.com/blog/carbon-fiber-roof-wrap">carbon fiber wrap</a> on a rally car from K&amp;N.   What makes this wrap so cool is that the <strong>carbon fiber wrap</strong> look is not just printed on (like most of the printing at monster media) but rather it is a textured roll that we special order from 3m.   Although the wrap won&#8217;t reduce the weight of your vehicle, it won&#8217;t reduce the weight in your wallet either.</p>
<p><span id="more-373"></span></p>
<h2>Check out these sick Carbon Fiber Wrap Photos.</h2>
<h2><img class="size-large wp-image-381 alignnone" title="Carbon-Fiber-Roof-Wrap" src="http://www.zebrakick.com/wp-content/uploads/2011/12/Carbon-Fiber-Roof-Wrap1-600x400.jpg" alt="" width="600" height="400" /></h2>
<p><img class="alignnone size-large wp-image-380" title="Carbon-Fiber-Hood-Wrap" src="http://www.zebrakick.com/wp-content/uploads/2011/12/Carbon-Fiber-Hood-Wrap1-600x400.jpg" alt="" width="600" height="400" /></p>
<h3>What can you wrap in carbon fiber?</h3>
<p>So what can you wrap with carbon fiber?  Just about anything really.  Think about it. When was the last time you saw a mini van with a carbon fiber hood and rear door? I bet they don&#8217;t even make those!  For a few hundred bucks you can have the fastest looking mini van on the road.</p>
<p>What about Bikes? Helmets? Walls? In reality if you have enough square footage (will have to check with the guys in the shop to see the min.) you can wrap just about any surface.  Hm. Carbon Fiber Fridge doors anyone?</p>
<p>See, this is part of why I love working in the Monster Media building.  Although Zebra Kick is entirely an online service provider, we love to dabble in the offline world.  And without giving anything away, we are going to see some seriously cool stuff coming out of monster media in the near future.  Until next time though, that will have to wait.</p>
<p>Also if you have an idea for an awesome carbon fiber wrap project, let us know in the comments below.  In fact if your a comment spammer (I love you scrap box), leave a relevant comment suggesting a good carbon fiber wrap project and I&#8217;ll approve you link! (as long as your not linking to any of our orange county competition).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/carbon-fiber-wrap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Top Bar Hive Supply Website &#8211; In House Marketing Success</title>
		<link>http://www.zebrakick.com/top-bar-hives/</link>
		<comments>http://www.zebrakick.com/top-bar-hives/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 19:24:53 +0000</pubDate>
		<dc:creator>Guest Author</dc:creator>
				<category><![CDATA[In House SEO]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[SEO]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=248</guid>
		<description><![CDATA[This post was written by Matt Reed, a good friend of Zebra Kick.  It was great to hear that his website is dong well so I asked him to write a bit about the progress of his top bar hive website.  You can read more of his posts at his Bee Keeping Blog. Our business [...]]]></description>
			<content:encoded><![CDATA[<p>This post was written by Matt Reed, a good friend of Zebra Kick.  It was great to hear that his website is dong well so I asked him to write a bit about the progress of his <a title="top bar hives" href="http://www.beethinking.com" target="_self">top bar hive</a> website.  You can read more of his posts at his <a href="http://www.beethinking.com/blog">Bee Keeping Blog</a>.</p>
<hr /><img class="alignleft size-full wp-image-257" title="Screen shot 2010-08-18 at 12.22.37 PM" src="http://www.zebrakick.com/wp-content/uploads/2010/08/Screen-shot-2010-08-18-at-12.22.37-PM.png" alt="Screen shot 2010-08-18 at 12.22.37 PM" width="322" height="111" /></p>
<p>Our business grew from a hobby in our garage, shipping a few top bar hives per month in December 2009, to a full-fledged, alternative beekeeping supplier in March 2010, shipping more than 4 dozen hives monthly, almost entirely due to Search Engine Optimization and Google Ads. Alternative beekeeping &#8212; <a href="http://www.beethinking.com/topbarhives">top bar beekeeping</a> in particular &#8212; is a niche market, with many options for a simple, cost-effective search marketing campaign. Making use of a technical background, a minimal ability to perform SEO on our Joomla-driven website, and some glaring failures by the competition in our SEO market, we were able to quadruple sales with an investment of less than $150 per month.</p>
<p>We started with a Google Ad budget of $50 per month in conjunction with Google Analytics, monitoring the results and adjusting the ads accordingly. During that time we also began researching SEO and tweaking our website to improve our SERP for our most important search terms. We chose very specific search terms in order to improve our conversion rate and reduce wasted ad clicks. At the same time, we also began making helpful posts on relevant blogs and forums, as well as working with related sites to swap links. The results came quickly, as we saw our Pagerank rise from 1 to 4 in a matter of only a few months. By March we were seeing over 6,000 unique visitors per month.</p>
<p>Today the competition is increasing, but our early and continued foray into SEO continues to give us the edge over competitors. While we&#8217;ve been busy the past few months, we cannot stress enough the importance of fresh content through blog posts, and outreach through Facebook, Twitter and other marketing avenues. We monitor daily our most important search terms through Google Alerts, and work diligently to stay current with trends in our industry and the campaigns of our competition. As traffic, sales and our ad budget increase proportionately, we continue to monitor our Google Ads, SERP, and content to ensure there are no issues.</p>
<p>At the same time that we are running an online campaign, we are beginning to focus more on local advertising through numerous avenues, and it is paying off. A combination of word-of-mouth, donations to sustainability-focused non-profits and locally targeted Google Ads have shown an overwhelming increase in local interest. It has been an interesting and amazing jump from a small online store to a viable business that is beginning to ponder the idea of a brick and mortar storefront.</p>
<p>Thanks to a little elbow grease, a monthly-coffee-budget-worth of Google Ads and some Search Engine Optimization, we believe Bee Thinking will grow to be a significant portion of our family&#8217;s income, if not our sole income in the next couple years!</p>
<p>Matt Reed<br />
Bee Thinking</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/top-bar-hives/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zebra Kick gets a New Window Decal</title>
		<link>http://www.zebrakick.com/zebra-kick-logo-decal/</link>
		<comments>http://www.zebrakick.com/zebra-kick-logo-decal/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 01:10:18 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[Logo]]></category>
		<category><![CDATA[Signage]]></category>
		<category><![CDATA[Vinyl]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=200</guid>
		<description><![CDATA[Our front office got some new artwork back in November. Alongside our sister company Monster Media, Inc., with whom we share the building, our company&#8217;s name and logo was added to the window. In the spirit of having some fun, we created a little video for the event. Hope you like Benny Hill! All of [...]]]></description>
			<content:encoded><![CDATA[<p>Our front office got some new artwork back in November. Alongside our sister company Monster Media, Inc., with whom we share the building, our company&#8217;s name and logo was added to the window.</p>
<div id="attachment_199" class="wp-caption alignnone" style="width: 610px"><img class="size-full wp-image-199" src="http://www.zebrakick.com/wp-content/uploads/2009/11/frontwindow_0031.jpg" alt="Our logo being added to the front window" width="600" height="400" /><p class="wp-caption-text">Our logo being added to the front window</p></div>
<p><span id="more-200"></span><br />
In the spirit of having some fun, we created a little video for the event.  Hope you like Benny Hill!</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="600" height="338" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://vimeo.com/moogaloop.swf?clip_id=7902541&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ff9933&amp;fullscreen=1" /><embed type="application/x-shockwave-flash" width="600" height="338" src="http://vimeo.com/moogaloop.swf?clip_id=7902541&amp;server=vimeo.com&amp;show_title=1&amp;show_byline=1&amp;show_portrait=0&amp;color=ff9933&amp;fullscreen=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<div id="attachment_201" class="wp-caption alignnone" style="width: 610px"><img class="size-full wp-image-201" src="http://www.zebrakick.com/wp-content/uploads/2009/11/frontwindow_0051.jpg" alt="Zebra Kick Logo" width="600" height="400" /><p class="wp-caption-text">Robbie and Eddie, Monster Media Inc. installers, hard at work.</p></div>
<div id="attachment_202" class="wp-caption alignnone" style="width: 610px"><img class="size-full wp-image-202" src="http://www.zebrakick.com/wp-content/uploads/2009/11/frontwindow_0061.jpg" alt="Zebra Kick Logo" width="600" height="400" /><p class="wp-caption-text">Applying the zebra decal.</p></div>
<dl>
<dt><img class="size-full wp-image-203" src="http://www.zebrakick.com/wp-content/uploads/2009/11/frontwindow_0071.jpg" alt="Zebra Kick Logo" width="600" height="420" /></dt>
</dl>
<p>All of the artwork was printed by Monster Media, Inc., a <a title="Large Format Printing" href="http://www.monstermediainc.com/">large format printing company</a>, and cutout with their vinyl router.</p>
<p>Zebra Kick would like to thank Robbie and Eddie, for doing such a great job. You can see their concentration and their steady hands at work in the pictures above. An additional thank you goes out to Monster Media&#8217;s graphic designer, Jon, for capturing it all on camera.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/zebra-kick-logo-decal/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Object Literals vs. Constructed Objects in JavaScript</title>
		<link>http://www.zebrakick.com/object-literals-vs-constructed-objects-in-javascript/</link>
		<comments>http://www.zebrakick.com/object-literals-vs-constructed-objects-in-javascript/#comments</comments>
		<pubDate>Tue, 10 Nov 2009 05:36:47 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[closure]]></category>
		<category><![CDATA[constructed object]]></category>
		<category><![CDATA[context locking]]></category>
		<category><![CDATA[dojo.clone]]></category>
		<category><![CDATA[dojo.hitch]]></category>
		<category><![CDATA[instantiated object]]></category>
		<category><![CDATA[object literal]]></category>
		<category><![CDATA[Prototype bind]]></category>
		<category><![CDATA[protypal inheritance]]></category>
		<category><![CDATA[singleton]]></category>
		<category><![CDATA[static object]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=171</guid>
		<description><![CDATA[Another discussion born from a question at stackoverflow.  Today I&#8217;m laying out the differences between object literals and constructed objects, when to use which, how to get the most out of them, and a few other tricks along the way.  Let&#8217;s get started. Object Literals / Static Objects Object literals, or static objects, don&#8217;t require [...]]]></description>
			<content:encoded><![CDATA[<p>Another discussion born from a question at <a href="http://stackoverflow.com/questions/1704618/">stackoverflow</a>.  Today I&#8217;m laying out the differences between object literals and constructed objects, when to use which, how to get the most out of them, and a few other tricks along the way.  Let&#8217;s get started.<span id="more-171"></span></p>
<h2>Object Literals / Static Objects</h2>
<p>Object literals, or static objects, don&#8217;t require instantiation with the <tt>new</tt> operator and also behave like singletons.  They are often used for providing utility classes since methods can be called statically, or as parameter packages to provide named arguments or lists to other functions.  Consider the following example that illustrates this singleton property of object literals:</p>
<p><strong>Example 1: Static object singleton behavior</strong></p>
<pre>var staticObject1 = {
    a: 123,
    b: 456
};

var staticObject2 = staticObject1;
staticObject2.b = "hats";
console.log(staticObject1, staticObject2);</pre>
<p><strong>Output:</strong></p>
<pre>Object a=123 b=456  Object a=123 b=456
Object a=123 b=hats Object a=123 b=hats</pre>
<p>Notice that changing <tt>staticObject1.b</tt> also affected <tt>staticObject2.b</tt>.  This happens because in JavaScript, when you assign an object to another variable, it simply creates a reference.</p>
<p>The singleton behavior may not always be the desired effect.  Many libraries, such as Dojo, offer an <a href="http://api.dojotoolkit.org/jsdoc/1.3.2/dojo.clone">object cloning</a> method that can avoid this behavior if just you want to make a copy of a static object.  Continuing the previous example, consider the following:</p>
<p><strong>Example 2: Circumventing the singleton behavior</strong></p>
<pre>var staticObject3 = dojo.clone(staticObject1); // See the documentation in the link above
staticObject1.a = "pants";
console.log(staticObject1, staticObject2, staticObject3);</pre>
<p><strong>Output:</strong></p>
<pre>Object a=pants b=hats Object a=pants b=hats Object a=123 b=hats</pre>
<p>Notice that the values of the members of <tt>staticObject1</tt> and <tt>staticObject2</tt> are the same, whereas <tt>staticObject3</tt> is not affected by changes to these other objects.</p>
<p>Static objects are also useful for creating project or library namespaces, rather than filling up the global scope, and promote compatibility like no one&#8217;s business. This is useful when creating libraries that require portability or interoperability.  This can be seen in popular libraries such as Dojo, YUI, ExtJs, and others where all or most methods are called within that library&#8217;s specific context (e.g.: <tt>dojo.examplMethod()</tt>, <tt>YUI().exampleMethod()</tt>, and <tt>Ext.exampleMethod()</tt> respectively).</p>
<p>One thing to remember is that in object literals, all members and methods are  necessarily public. Forever and always, so help me Douglas Crockford.  However, this is not the case for constructed objects, as you&#8217;ll see shortly.  Access restrictions notwithstanding, static objects can also be considered loosely analogous in purpose and use to <tt>C/C++'s struct</tt> type.</p>
<h2>Constructed Objects / Instantiated Objects</h2>
<p>Classes in JavaScript are based on prototypal inheritance, which can be a lengthy subject in itself and can be read about <a href="http://javascript.crockford.com/prototypal.html">here</a>, <a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Inheritance">here</a>, and <a href="http://www.webreference.com/programming/javascript/prototypal_inheritance/">here</a>.  For now, we will just compare the differences between instantiated and static objects and leave inheritance for another day.</p>
<p>As opposed to static objects, this method of object creation gives the unique opportunity for private scope object members and methods thanks to JavaScript&#8217;s closure property.  Consider the following example of private class members:</p>
<p><strong>Example 3: Private class members</strong></p>
<pre>var SomeObject = function() {
    var privateMember = "I am a private member";
    this.publicMember = "I am a public member";

    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
};</pre>
<p>var o = new SomeObject();<br />
console.log(typeof o.privateMember, typeof o.publicMember);<br />
o.publicMethod();</p>
<p><strong>Output:</strong></p>
<pre>undefined string
I am a private member I am a public member</pre>
<p>Notice that <tt>typeof o.privateMember</tt> is &#8220;undefined&#8221; and not accessible outside of the object, but is from within.</p>
<p>Private methods can also be defined.  They are not as straight forward but are still simple to implement.  The issue lies in that the value of <tt>this</tt> within a private method will refer to <tt>window</tt> if you try to execute it as if it were just any method.  There are at least three techniques that can be applied to ensure that <tt>this</tt> refers to the object that we are working within, in this case, the instance of <tt>SomeObject</tt>.  Consider the following example:</p>
<p><strong>Example 4: Private class methods with <tt>call</tt></strong></p>
<pre>var SomeObject = function() {
    var privateMember = "I am a private member";
    var privateMethod = function() {
        console.log(privateMember, this.publicMember);
    };

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod.call(this);
    }
};

var o = new SomeObject();
console.log(typeof o.privateMethod, typeof o.publicMethod, typeof o.privateMethodWrapper);
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>undefined function function
I am a private member I am a public member</pre>
<p>Notice that within <tt>privateMethodWrapper()</tt>, <tt>privatemethod</tt> was executed using <tt>call</tt> and passing in <tt>this</tt> for the function&#8217;s context.  This is all fine and allows us to use <tt>this</tt> within the private method as we normally would; however, the following technique is slightly more preferable as it simplifies the calling context.  The previous example can be rearranged to the following:</p>
<p><strong>Example 5: Private class methods with closure reference to <tt>this</tt></strong></p>
<pre>var SomeObject = function() {
    var self          = this;
    var privateMember = "I am a private member";
    var privateMethod = function() {
        console.log(self.publicMember);
    };

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod();
    }
};

var o = new SomeObject();
console.log(typeof o.privateMethod, typeof o.publicMethod, typeof o.privateMethodWrapper);
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>undefined function function
I am a private member I am a public member</pre>
<p>Notice that a new private member, <tt>self</tt>, was introduced and provides a reference to <tt>this</tt> within <tt>privateMethod</tt> via the closure property.  This method is agreeable for most situations; however, my syntax highlighter doesn&#8217;t highlight <tt>self</tt> the same as it does <tt>this</tt>, so I prefer the following method.</p>
<p>The third method effectively &#8220;locks in&#8221; the value of <tt>this</tt> within the private method.  It is the most preferable in that it allows you to have a normal definition using <tt>this</tt> with the private method as in example #4, and a clean calling context as in example #5.  Both the Dojo and Prototype libraries offer utility methods to do this for us: <a href="http://api.dojotoolkit.org/jsdoc/1.3.2/dojo.hitch">dojo.hitch</a> and <a href="http://api.prototypejs.org/language/function.html#bind-instance_method">function.prototype.bind</a> respectively.  I will show how to use these methods, as well as how write your own utility method for achieving the same results for those of you not using those libraries.</p>
<p><strong>Example 6: Private class methods with context locking using <tt>dojo.hitch</tt></strong></p>
<pre>var SomeObject = function() {
    var privateMember = "I am a private member";
    var privateMethod = dojo.hitch(this, function() {
        console.log(privateMember, this.publicMember);
    });

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod();
    }
};

var o = new SomeObject();
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>I am a private member I am a public member</pre>
<p><strong>Example 7: Private class methods with context locking using Prototype&#8217;s <tt>bind</tt></strong></p>
<pre>var SomeObject = function() {
    var privateMember = "I am a private member";
    var privateMethod = function() {
        console.log(privateMember, this.publicMember);
    }.bind(this);

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod();
    }
};

var o = new SomeObject();
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>I am a private member I am a public member</pre>
<p><strong>Example 8: Private class methods with context locking using custom utility method</strong></p>
<pre>var lockContext = function(context, callback) {
    return function() {
        callback.apply(context, arguments);
    }
};

var SomeObject = function() {
    var privateMember = "I am a private member";
    var privateMethod = lockContext(this, function() {
        console.log(privateMember, this.publicMember);
    });

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod();
    }
};

var o = new SomeObject();
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>I am a private member I am a public member</pre>
<p><strong>Example 9: Private class methods with context locking using custom utility method (prototypal variation)</strong></p>
<pre>Function.prototype.lockContext = function(context) {
    var self = this;
    return function() {
        self.apply(context, arguments);
    }
};

var SomeObject = function() {
    var privateMember = "I am a private member";
    var privateMethod = function() {
        console.log(privateMember, this.publicMember);
    }.lockContext(this);

    this.publicMember = "I am a public member";
    this.publicMethod = function() {
        console.log(privateMember, this.publicMember);
    };
    this.privateMethodWrapper = function() {
        privateMethod();
    }
};

var o = new SomeObject();
o.privateMethodWrapper();</pre>
<p><strong>Output:</strong></p>
<pre>I am a private member I am a public member</pre>
<p>As you can see, all four of these context locking methods (examples #6 &#8211; #9) allow you to keep the executing scope of your private method clean,  freeing you to write the body of your private method as you would any other, and removes the superfluous &lt;tt&gt;self&lt;/tt&gt; reference.  I&#8217;ll let you decide which method works best for you, but I think the prototypal approach is the cleanest.  For more information on how context locking works, see the MDC references for <tt><a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Function/apply">apply</a></tt> and <tt><a href="https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Function/call">call</a></tt>.</p>
<h2>Wrapping it Up</h2>
<p>There are definite roles that static and instantiated objects fill.  For me, part of the joy of writing in JavaScript is knowing when to use which, and how to get the most milage out of their differences.  What about you?  Let me know if you have any preferences or guidelines when it comes to creating and using objects in JavaScript.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/object-literals-vs-constructed-objects-in-javascript/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Hash Link SEO &#8211; Google Jump To Results with Internal Links</title>
		<link>http://www.zebrakick.com/hash-link-seo-google-jump-to/</link>
		<comments>http://www.zebrakick.com/hash-link-seo-google-jump-to/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 20:31:41 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Onsite SEO]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[google jump to]]></category>
		<category><![CDATA[hash links]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=138</guid>
		<description><![CDATA[Last week while searching for &#8220;Fallout 3 multiplayer&#8221; I noticed some really cool results in Google.  In the image below you can see that the Wikipedia result has in-site links to subsections of the page.  As if this was not impressive enough to see, the following result included a &#8220;Jump to Is there a multiplayer [...]]]></description>
			<content:encoded><![CDATA[<p>Last week while searching for &#8220;Fallout 3 multiplayer&#8221; I noticed some really cool results in Google.  In the image below you can see that the Wikipedia result has in-site links to subsections of the page.  As if this was not impressive enough to see, the following result included a &#8220;Jump to Is there a multiplayer mode?&#8221;  Why is this so awesome?  This is another step toward Google supporting onsite semantic markup.  What microformat support could be next?</p>
<p style="text-align: center;"><a href="http://www.zebrakick.com/wp-content/uploads/2009/10/google-jump-to-link.jpg"><img class="aligncenter size-full wp-image-135" style="border: 0pt none;" title="google-jump-to-link" src="http://www.zebrakick.com/wp-content/uploads/2009/10/google-jump-to-link.jpg" alt="google-jump-to-link" width="579" height="203" /></a></p>
<p><span id="more-138"></span>Any good SEO knows the number one rule of research, &#8220;don&#8217;t tip your hand.&#8221;  I feel this news is less of a secret method or technique, and more of a verification that Google is headed in a specific direction with search.  Plus, we have been using this method for a while now, and I would hope that every website applies this method where it makes sense.</p>
<h3>How to Get a Jump-To Link in Google Results</h3>
<p style="text-align: center;"><a href="http://www.zebrakick.com/wp-content/uploads/2009/10/hash-link-rank.jpg"><img class="aligncenter size-full wp-image-137" style="border: 0pt none;" title="hash-link-example" src="http://www.zebrakick.com/wp-content/uploads/2009/10/hash-link-example.jpg" alt="hash-link-example" width="554" height="84" /></a></p>
<p>If you visit the page directly you will find a table of contents, which links to anchor tags farther down on the page.  Notice the use of keywords in question format for the hash link.</p>
<p style="text-align: center;"><a href="http://www.zebrakick.com/wp-content/uploads/2009/10/hash-link-rank.jpg"><img class="aligncenter size-full wp-image-136" style="border: 0pt none;" title="hash-link-rank" src="http://www.zebrakick.com/wp-content/uploads/2009/10/hash-link-rank.jpg" alt="hash-link-rank" width="600" height="307" /></a></p>
<p>Farther down the page, <tt>name="Is_there_a_multiplayer_mode.3f"</tt> shows up in an anchor tag.  This is where the page will load when linked to directly.  By using keywords in the anchor name, and having a link at the top of the page for engines and people to follow, the site is clearly showing that various parts of the page have various question answer combos, or more generally a table of contents.</p>
<h3>Tips for Ranking Hash Links in Google</h3>
<p>First, I would recommend checking out <a href="http://googlewebmastercentral.blogspot.com/2009/09/using-named-anchors-to-identify.html" target="_blank">Googles advice on hash linking</a>.</p>
<p>Second, make sure your pages are semantic.  Properly use your H-n level tags to create good page structure.</p>
<p>Don&#8217;t keyword stuff the content.  It is easy to be overzealous when creating titles and subtitles.  Stay away from keyword stuffing!</p>
<p>Create a table of contents at the top of the page and also at the bottom (if its a long page).   I have seen some people make the table of contents slide with the scrolling of the page.  If done right, it can be pretty nice.</p>
<p>Link to the page with hashmarks when it makes sense.  If you are referring to a specific section of the page, use hashmarks to direct the browser directly to that section.  I wouldn&#8217;t recommend doing this with aggressive link building, as it may trip a filter, but I do recommend hash linking when it makes sense.</p>
<h3>FAQ SEO &#8211; One Page per Question or One Page per Topic</h3>
<p>A few years ago, I was tasked with creating the SEO plan for a regional clinic.  One of the goals of the site was to rank on some long tail FAQ questions about various procedures.  At the time, long tail wordpress posts seemed to be the key to ranking for specific key phrases.  As a result, one topic with 20 questions would have required 20 individule pages.  The benefit of which is that you can really focus on the keywords in the URL and titles of each post for each question.  This allowed smaller, beginning websites to rank for specific long tail terms with very little page authority or link building.</p>
<p>The downside to building multiple pages is that your pages can become a bear to manage, and category pages were then linking to 20 pagers per topic (think watered down link authority).</p>
<p>As a result, I decided to create a single FAQ page for each topic and use hash anchors and hash links for navigation of the long pages.  The pages preformed fairly well, although we had no control to compare to ranking speed.  This method did require some creative link building to rank for competative terms; however, it is much easier to build the authority of a single page than of twenty.</p>
<h3>Semantic Microformat Markup and SEO &#8211; hCards and vCards</h3>
<p>Use semantic markup, even if it doesn&#8217;t have any proven direct ranking value right now.   For instance, to date, Google is not using hCard information in its search results, but I still recommend using hCard in SEO campaigns. It doens&#8217;t hurt, and nothing feels better than informing your client that the latest Google change puts their website ahead automatically and with no extra work.  Check out this site on <a href="http://microformats.org/" target="_blank">microformat markup</a> if you want to dive deeper into microformats.</p>
<p>Also, I would like to thank <a href="http://www.linkedin.com/pub/andrew-murphy/12/9a2/6a8" target="_blank">Andrew Murphy</a> and <a href="http://www.zebrakick.com/about/#justin-johnson" target="_blank">Juston Johnson</a> (Justin is also a Principal here at Zebra Kick).  Justin and Andrew taught me the importance of semantic markup a few years ago, and were deadset on making pages as semantic as possible.  Thanks guys!</p>
<p>Finally, what semantic tricks do you use on your pages that you don&#8217;t see often elsewhere?  Do you have pages that outpreform competition based partially on better markup?  I&#8217;d love to know.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/hash-link-seo-google-jump-to/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Google Maps Street View Tricycle Video</title>
		<link>http://www.zebrakick.com/google-maps-street-view-tricycle-video/</link>
		<comments>http://www.zebrakick.com/google-maps-street-view-tricycle-video/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 19:48:03 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Miscellaneous]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[maps]]></category>
		<category><![CDATA[street view]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=129</guid>
		<description><![CDATA[I was logging into my YouTube to upload some videos and stumbled upon this in my feed from Google.  Still only has 1k views at the time of this posting, but it&#8217;s sure to get picked up soon. Basically this is how Google records street views for Google Maps on streets that can&#8217;t be driven [...]]]></description>
			<content:encoded><![CDATA[<p>I was logging into my YouTube to upload some videos and stumbled upon this in my feed from Google.  Still only has 1k views at the time of this posting, but it&#8217;s sure to get picked up soon.</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/Hr-4Aln1Il8&amp;hl=en&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/Hr-4Aln1Il8&amp;hl=en&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Basically this is how Google records street views for Google Maps on streets that can&#8217;t be driven on.  Pretty cool huh?</p>
<p>Here are a few links if you found this tricycle interesting.</p>
<p><a href="http://maps.google.com/help/maps/streetview/">Google Street View</a></p>
<p><a href="http://www.youtube.com/watch?v=f0y-q-pI2pQ">Video explaining Street View</a> (also embedded in link above).</p>
<p><a href="http://www.streetviewfun.com/">Site were people post interesting street view images. </a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/google-maps-street-view-tricycle-video/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Quick Tip &#8211; Make Your Brand Look Popular, Even if its Not (Yet).</title>
		<link>http://www.zebrakick.com/create-brand-popularity/</link>
		<comments>http://www.zebrakick.com/create-brand-popularity/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 23:59:10 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[Branding]]></category>
		<category><![CDATA[brand popularity]]></category>
		<category><![CDATA[quick tip]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=123</guid>
		<description><![CDATA[I was reminded of this age old marketing strategy when I stepped into Bamee Thai Noddle Shop in Chicago&#8217;s Lakeview district for a quick bowl of Tom Yum soup.  The place was empty at 1:30pm, but looked good.  I was immediately seated at the most visible table from the street.  Whether or not he realized [...]]]></description>
			<content:encoded><![CDATA[<p>I was reminded of this age old marketing strategy when I stepped into <a href="http://www.yelp.com/biz/bamee-noodle-shop-chicago" target="_blank">Bamee Thai Noddle Shop in Chicago&#8217;s Lakeview district</a> for a quick bowl of Tom Yum soup.  The place was empty at 1:30pm, but looked good.  I was immediately seated at the most visible table from the street.  Whether or not he realized it, this restaurant owner was using me as a marketing piece, showing passersby that the shop was doing business.<span id="more-123"></span></p>
<p>This strategy is often used in all forms of persuasion.  Think about the tip jar at your local coffee shop.  When it has a few dollars in it, you are more compelled to drop in a buck.  If a blog post has three comments, you are more inclined to read it and even comment yourself, then if it had no comments.</p>
<p>So how do we apply this strategy to online marketing?</p>
<h2>Get creative</h2>
<p>Create vanity badges for your website.  <a href="http://www.seomoz.org"><img src="http://www.seomoz.org/img/iheartseomoz1.png" alt="I &lt;3 SEO moz" /></a> why would a company create something if no one was going to use it, therefore they must be popular.  (SEOmoz is a great source for SEO news, and a great example of positive brand popularity building.</p>
<p>For blogs, if you have no comments, then hide the counter.  Don&#8217;t bring attention to a lack of community involvement.</p>
<p>If you are trying to recruit Twitter followers, create a button that links to your Twitter and below that display the last three Twitter users that followed you.</p>
<p>Work on your SEO strategy to return your site first for your brand name followed by 9 “discussion&#8221; type listings in the results.  Better yet, get Google to auto complete your brand name after the first word or term.</p>
<p>How have you taken measures to increase your brand&#8217;s perceived popularity?  Have you ever been &#8220;tricked&#8221; and realized it after?</p>
<p>The possibilities are endless. The trick is to get creative, be subtle (don&#8217;t post fake blog comments), and focus on building brand value in the long term rather than short term.</p>
<div id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 15px; width: 1px; height: 1px;">The possibilities are endless. The trick is to get creative, be subtle (don&#8217;t post fake blog comments), and focus on building brand value in the long term rather than short term.</div>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/create-brand-popularity/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Redbox Email Campaign Needs Focus</title>
		<link>http://www.zebrakick.com/red-box-email-campaign/</link>
		<comments>http://www.zebrakick.com/red-box-email-campaign/#comments</comments>
		<pubDate>Wed, 30 Sep 2009 07:23:48 +0000</pubDate>
		<dc:creator>Julian</dc:creator>
				<category><![CDATA[E-mail Marketing]]></category>
		<category><![CDATA[Local Southern California]]></category>
		<category><![CDATA[eblast]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[redbox]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=110</guid>
		<description><![CDATA[Somehow, when I opened up my email and saw Hannah Montana in the latest eblast from Redbox, I just knew I had to take a screen shot. Here are a few observations about Redbox and their email campaign that bother me a bit. Redbox&#8217;s DVD Vending Machines are Slick For those of you who are [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-111" title="Red Box" src="http://www.zebrakick.com/wp-content/uploads/2009/09/redtube.jpg" alt="Red Box" width="600" height="364" /></p>
<p>Somehow, when I opened up my email and saw Hannah Montana in the latest eblast from Redbox, I just knew I had to take a screen shot. Here are a few observations about Redbox and their email campaign that bother me a bit.<span id="more-110"></span></p>
<h3>Redbox&#8217;s DVD Vending Machines are Slick</h3>
<p>For those of you who are not familiar with Redbox, it is a <a href="http://www.redbox.com/" target="_blank">DVD rental vending machine</a> that is popular many of the  <a href="http://www.staterbros.com" target="_blank">best grocery stores in Southern California</a>.  The system is fairly impressive.  You browse the selection via a touch screen, swipe your debit card and out pops your DVD.  The movie is yours for a dollar a day.</p>
<h3>Redbox Uses E-mail for Communication</h3>
<p>Seemingly as impressive as the physical units is the email receipt system.  Within 2-3 min. of renting or returning a DVD you are sent an email for your records.  Fairly slick if you ask me.</p>
<p>Part of being a Redbox user, of course, is being on there email list.  They have done a pretty good job of keeping there email blasts subtle enough that you won&#8217;t remove yourself from the list, but once a week you are &#8220;informed&#8221; of the newest movies in the box.</p>
<p>Redbox, however, has missed a huge opportunity with their direct marketing campaign.  The same weekly email is sent out to every person on the email list.  This means they choose one movie to push hard in the main slot and send it to all the people on the list.</p>
<h3>Focus Your Target Demographic</h3>
<p>Since Redbox knows every movie that you rent from them, it would be a fairly simple task to assign a &#8220;most common genre&#8221; tag for each customer.  By doing this, they can send an eblast focusing on action and comedies to the action and comedy fans, while sending The Land Before Time XVI promos to people who tend to rent a lot of Disney films.</p>
<p>Although this does create the need for multiple email promos each week, it is all but guaranteed that the conversions would increase dramatically.  One alternative, however, is to reduce the email list into two groups.  Those who like movie genre A and those who <em>hate</em> movie genre A.  The only thing worse than sending a bland or boring e-blast out is sending an eblast that alienates your customers from your product.</p>
<p>Another reason for Redbox to focus their email marketing campaign is that they are limited to how many rentals of each movie they can have in stock.  This is why promoting 15 movies a week will have a better turn out that promoting their three biggest.</p>
<h3>Try Redbox</h3>
<p>Lastly, if you haven&#8217;t tried this movie vending machine, <a href="http://www.redbox.com/Locations/KioskSearch.aspx" target="_blank">find a Redbox</a> and try it out.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/red-box-email-campaign/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Magento Onepage Checkout Template Bug</title>
		<link>http://www.zebrakick.com/magento-onepage-checkout-template-bug/</link>
		<comments>http://www.zebrakick.com/magento-onepage-checkout-template-bug/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 08:51:49 +0000</pubDate>
		<dc:creator>Justin</dc:creator>
				<category><![CDATA[Magento]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[magento]]></category>
		<category><![CDATA[template]]></category>

		<guid isPermaLink="false">http://www.zebrakick.com/blog/?p=96</guid>
		<description><![CDATA[Changing from the default template in Magento breaks the onepage checkout page.  Here's how to fix it.]]></description>
			<content:encoded><![CDATA[<p>Recently, we rolled out an installation of <a title="Magento Commerce" href="http://www.magentocommerce.com/" target="_blank">Magento 1.3.2.3</a> for one of our clients but ran into small a problem along the way. Being an established open source project, I initially assumed that the error was my own when I found that the onepage checkout process would stop working half way through (step 3 to be exact).  However, after digging around, I found that the problem was actually a bug in Magento&#8217;s JavaScript.  The bug has been reported and will hopefully be fixed soon, but in the meantime, here&#8217;s the fix and how I found it.<span id="more-96"></span></p>
<p>I uncovered this bug after I had changed the template in <tt>app/design/frontend/default/default/layout/checkout.xml</tt> in the following block:</p>
<pre>&lt;checkout_onepage_index&gt;
    &lt;!-- Mage_Checkout --&gt;
    ...
    &lt;reference name="root"&gt;
        &lt;action method="setTemplate"&gt;
            &lt;template&gt;page/2columns-right.phtml&lt;/template&gt;
        &lt;/action&gt;
    &lt;/reference&gt;
    ....
&lt;checkout_onepage_index&gt;</pre>
<p>The default template specifies <tt>2columns-right.phtml</tt>. When I switched to a different template (<tt>2columns-left.phtml</tt> in my case), onepage checkout broke.</p>
<p>Line 49 of <tt>opcheckout.js</tt> requires that the progress blocks (that summarize the user&#8217;s checkout information on the side) be within an element with the class <tt>col-right</tt>, which is how it references those blocks to update them when the user progresses to the next checkout step.  <tt>col-right</tt> is part of the template <tt>2columns-right.phtml</tt>, which as we saw is what the checkout process uses by default.  This works out of the box, but unfortunately makes the onepage checkout process dependent on the <tt>2columns-right.phtml</tt> template.</p>
<p>As you may have seen, if the template is changed, the onepage checkout accordion does not automatically expand to show step 2 after the user presses &#8220;continue&#8221; from step 1.  More importantly, the user is not able to proceed past step 3 of the checkout process because of a silent JavaScript error(s).</p>
<p>The bug stems from a poor design choice in basing this sidebar&#8217;s functionality on a specific CSS class selector that is part of the global <tt>2columns-right.phtml</tt> template rather than on a selector that is directly related to the progress blocks (one which is already being created by that module).</p>
<p>The fix is to replace <tt>.col-right</tt> on line 49 with <tt>.one-page-checkout-progress</tt>, a class that is specifically used for the progress block content.   This makes updating of the progress blocks independent of the template, and designers can change the template without having to change the JavaScript or having the checkout process break.</p>
<p>A simple fix for a simple bug, but I have the feeling designers without knowledge of JavaScript would have had a hard time cracking it.  Hope that helps.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.zebrakick.com/magento-onepage-checkout-template-bug/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>

