<?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>dev.enekoalonso.com &#187; oriented</title>
	<atom:link href="http://dev.enekoalonso.com/tag/oriented/feed/" rel="self" type="application/rss+xml" />
	<link>http://dev.enekoalonso.com</link>
	<description>having fun with code</description>
	<lastBuildDate>Sat, 31 Jul 2010 05:51:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>Sending messages between Javascript objects</title>
		<link>http://dev.enekoalonso.com/2009/04/23/sending-messages-between-javascript-objects/</link>
		<comments>http://dev.enekoalonso.com/2009/04/23/sending-messages-between-javascript-objects/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 04:44:34 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[class]]></category>
		<category><![CDATA[instance]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[messages]]></category>
		<category><![CDATA[messaging]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[msg]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[oriented]]></category>
		<category><![CDATA[register]]></category>
		<category><![CDATA[system]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=296</guid>
		<description><![CDATA[When applications (or websites) get pretty big, it usually happens that a lot of different objects or classes interact with each other or, even worst, depend on each other to achieve the site functionality. A simple example could be a Tabs manager class, which controls a set of tabs in the page. Sometimes, the content [...]]]></description>
			<content:encoded><![CDATA[<p>When applications (or websites) get pretty big, it usually happens that a lot of different objects or classes interact with each other or, even worst, depend on each other to achieve the site functionality. </p>
<p>A simple example could be a Tabs manager class, which controls a set of tabs in the page. Sometimes, the content in this tabs is sensitive to when the tabs are shown or hidden. At this point you have three options: either the Tabs class needs to know about the content or you create a set of callback functions or you use custom events. Still, for every one of these options you are going to need variables referencing the instances of your classes (this is: var myTabs = new Tabs())</p>
<p>Personally, I don&#8217;t like having global variables for the objects I create. I think the code gets very messy and complicated.</p>
<p>So, after dealing with all these issues at work day after day I thought it would be very cool to have a messaging system between my classes, the same way other languages like Cocoa do (in a more simpler way, at least for now).</p>
<h3>Sending messages between classes</h3>
<p>Wouldn&#8217;t it be nice if the Tabs class would send a message every time a new tab is selected? Wouldn&#8217;t it be nice if the objects that are going to reside inside those tabs could listen to that message and update accordingly?</p>
<p>To do this, I created a Base class and a Register, where my objects will register automatically upon instantiation (thanks to the Base class).</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> InstanceRegister = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; instances: <span class="br0">&#91;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; addInstance: <span class="kw2">function</span><span class="br0">&#40;</span>object<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">instances</span>.<span class="me1">push</span><span class="br0">&#40;</span>object<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; broadcastMessage: <span class="kw2">function</span><span class="br0">&#40;</span>msg<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $A<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">instances</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="kw1">item</span>, index<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">item</span>.<span class="me1">processMessage</span><span class="br0">&#40;</span>msg<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> Register = <span class="kw2">new</span> InstanceRegister<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> Base = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; ClassName: <span class="st0">&#39;Base&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; Implements: Options,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; initialize: <span class="kw2">function</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">setOptions</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Register.<span class="me1">addInstance</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; processMessage: <span class="kw2">function</span><span class="br0">&#40;</span>msg<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">ClassName</span>, <span class="st0">&#39; msg received: &#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; console.<span class="me1">dir</span><span class="br0">&#40;</span>msg<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; sendMessage: <span class="kw2">function</span><span class="br0">&#40;</span>msg<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Register.<span class="me1">broadcastMessage</span><span class="br0">&#40;</span>msg<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>As you can see, the register is just an array of Instances. Yes, Register is a global object, but it will be the only one we will need. Meanwhile, the Base class adds the new instance to the Register automatically. For convenience, the Base class has a sendMessage method. Also, for convenience, I like to add a ClassName property to all my classes in case I need it later for logging, instance class type identification, etc.</p>
<p>Now, thanks to MooTools, we can create our classes and make them inherit from Base. We can override the processMessages method and act accordingly:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> Tabs = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;ClassName: <span class="st0">&#39;Tabs&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">Extends</span>: Base,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="me1">activateTab</span>: <span class="kw2">function</span><span class="br0">&#40;</span>tab<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">this</span>.<span class="me1">sendMessage</span><span class="br0">&#40;</span><span class="br0">&#123;</span>msg:<span class="st0">&#39;tabActivated&#39;</span>, data:tab<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> VideoPlayer = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;ClassName: <span class="st0">&#39;VideoPlayer&#39;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">Extends</span>: Base,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;&#8230;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="me1">processMessage</span>: <span class="kw2">function</span><span class="br0">&#40;</span>msg<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>msg.<span class="me1">msg</span> == <span class="st0">&#39;tabActivated&#39;</span> <span class="sy0">&amp;&amp;</span> msg.<span class="me1">data</span> = <span class="st0">&#39;video-tab&#39;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="co1">// Play video</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>The beautifulness of this code resides, as I mentioned before, in the absence of any object references. Tabs doesn&#8217;t know anything about the VideoPlayer class nor any other object listening to the messages. And the VideoPlayer doesn&#8217;t know anything about the Tabs class either. It only knows about the message it has to listen to. No object references, no methods, no callbacks.</p>
<p>Pay attention now. This is the best part! Whenever we instance our classes, no matter how many times we do, we don&#8217;t need variable references anymore:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">new</span> Tabs<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">new</span> VideoPlayer<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Nice, uh?</p>
<p>Since I implemented this class I use it a lot on every project at work. It makes my life easier, keeping my classes simple and independent from each other. It&#8217;s even better. We have got to a point where we have integrated this feature with our Flash components, so these send messages to the Register when needed and any JS object listening reacts to them as needed. </p>
<p>By doing this, even being unidirectional (Flash to JS only), we have achieved something great: from now on, our Flash objects don&#8217;t need to know anything about our JS objects at all. Just send a message to the register and done.</p>
<p>At any point, even from Firebug, you can send a message to the Register. This is very nice, even for debugging:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">Register.<span class="me1">broadcastMessage</span><span class="br0">&#40;</span><span class="br0">&#123;</span>msg:<span class="st0">&#39;hello&#39;</span>,data:<span class="st0">&#39;world&#39;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<h3>A listener class</h3>
<p>I found it is very nice, while in development, to have a Listener class debugging any message received. This way I don&#8217;t need to add a console.log call on all my classes to output received messages. The Listener will do it for me:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> Listener = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">Extends</span>: Base,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;initialize: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">this</span>.<span class="me1">parent</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">this</span>.<span class="me1">ignoreMessages</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;processMessage: <span class="kw2">function</span><span class="br0">&#40;</span>msg<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>msg.<span class="me1">msg</span> == <span class="st0">&#39;stopListener&#39;</span><span class="br0">&#41;</span> <span class="kw1">this</span>.<span class="me1">ignoreMessages</span> = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>msg.<span class="me1">msg</span> == <span class="st0">&#39;startListener&#39;</span><span class="br0">&#41;</span> <span class="kw1">this</span>.<span class="me1">ignoreMessages</span> = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">ignoreMessages</span><span class="br0">&#41;</span> <span class="kw1">return</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;Listener: msg received:&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; console.<span class="me1">dir</span><span class="br0">&#40;</span>msg<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">new</span> Listener<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Even you can control the Listener by sending custom messages to it! Awesome!</p>
<h3>Could this be achieved with custom events?</h3>
<p>With Mootools, creating custom events is piece of cake. But from what I understand, custom events work only inside the object that is firing them. This is, if object A fires an event &#8216;customEvent&#8217;, you can only listen to it if you add a callback function when you instantiate that class:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> A = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Implements: Events,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; initialize: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; document.<span class="me1">body</span>.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">&#39;click&#39;</span>, <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;A: body clicked&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">fireEvent</span><span class="br0">&#40;</span><span class="st0">&#39;bodyClicked&#39;</span>, <span class="br0">&#91;</span><span class="kw1">this</span><span class="br0">&#93;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> B = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; doSomething: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;B: doing something&#8230;&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">new</span> A<span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; onBodyClicked: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">// Tell B to do something (you need a reference to B!)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">new</span> B<span class="br0">&#40;</span><span class="br0">&#41;</span>; <span class="co1">// Will never do something</span></div>
</li>
</ol>
</div>
<p>Ideally, B should be able to listen to the bodyClicked event without passing any info when A is instantiated. But if I&#8217;m not mistaken, this is not possible.</p>
<h3>Revised version</h3>
<p>I decided that it would be cool to have the Messenger as something my classes could implement, instead of inherit from (Base). Also, it would be good if one object could register for a specific message only, which would improve performance too.</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> NotificationServiceCenter = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;instances: <span class="br0">&#123;</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;addObserver: <span class="kw2">function</span><span class="br0">&#40;</span>msg, instance<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw1">this</span>.<span class="me1">instances</span><span class="br0">&#91;</span>msg<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">this</span>.<span class="me1">instances</span><span class="br0">&#91;</span>msg<span class="br0">&#93;</span> = <span class="br0">&#91;</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">this</span>.<span class="me1">instances</span><span class="br0">&#91;</span>msg<span class="br0">&#93;</span>.<span class="me1">push</span><span class="br0">&#40;</span>instance<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;broadcastMessage: <span class="kw2">function</span><span class="br0">&#40;</span>msg, data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">instances</span><span class="br0">&#91;</span>msg<span class="br0">&#93;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;$A<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">instances</span><span class="br0">&#91;</span>msg<span class="br0">&#93;</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="kw1">item</span>, index<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">item</span>.<span class="me1">processMessage</span><span class="br0">&#40;</span>msg, data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> NotificationService = <span class="kw2">new</span> NotificationServiceCenter<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> Messenger = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;addMsgEvent: <span class="kw2">function</span><span class="br0">&#40;</span>msg<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; NotificationService.<span class="me1">addObserver</span><span class="br0">&#40;</span>msg, <span class="kw1">this</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;sendMessage: <span class="kw2">function</span><span class="br0">&#40;</span>msg, data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; NotificationService.<span class="me1">broadcastMessage</span><span class="br0">&#40;</span>msg, data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;processMessage: <span class="kw2">function</span><span class="br0">&#40;</span>msg, data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="co1">// For implementation on the final Class</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> A = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;Implements: Messenger,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;initialize: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; document.<span class="me1">body</span>.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">&#39;click&#39;</span>, <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;A: document body clicked&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">this</span>.<span class="me1">sendMessage</span><span class="br0">&#40;</span><span class="st0">&#39;documentbodyclicked&#39;</span>, <span class="st0">&#39;Hello world!&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> B = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;Implements: Messenger,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;initialize: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">this</span>.<span class="me1">addMsgEvent</span><span class="br0">&#40;</span><span class="st0">&#39;documentbodyclicked&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;processMessage: <span class="kw2">function</span><span class="br0">&#40;</span>msg, data<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; console.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;B: msg received: &#39;</span>, data<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">new</span> A<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">new</span> B<span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Here you go!</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>July 20, 2009 -- <a href="http://dev.enekoalonso.com/2009/07/20/setters-getters-on-mootools-classes/" title="Setters &#038; Getters on Mootools classes">Setters &#038; Getters on Mootools classes</a> (0)</li><li>April 7, 2009 -- <a href="http://dev.enekoalonso.com/2009/04/07/setting-up-timers-and-intervals-inside-js-objects/" title="Setting up timers and intervals inside JS objects">Setting up timers and intervals inside JS objects</a> (2)</li><li>January 2, 2009 -- <a href="http://dev.enekoalonso.com/2009/01/02/solving-the-8-queen-puzzle-in-javascript/" title="Solving the 8 Queen Puzzle in Javascript">Solving the 8 Queen Puzzle in Javascript</a> (1)</li><li>January 18, 2010 -- <a href="http://dev.enekoalonso.com/2010/01/18/finally-singletons-the-mootools-way/" title="Finally: Singletons, the Mootools way">Finally: Singletons, the Mootools way</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2009/04/23/sending-messages-between-javascript-objects/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Solving the 8 Queen Puzzle in Javascript</title>
		<link>http://dev.enekoalonso.com/2009/01/02/solving-the-8-queen-puzzle-in-javascript/</link>
		<comments>http://dev.enekoalonso.com/2009/01/02/solving-the-8-queen-puzzle-in-javascript/#comments</comments>
		<pubDate>Fri, 02 Jan 2009 21:41:16 +0000</pubDate>
		<dc:creator>Eneko Alonso</dc:creator>
				<category><![CDATA[uncategorized]]></category>
		<category><![CDATA[8queen]]></category>
		<category><![CDATA[chess]]></category>
		<category><![CDATA[eight]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[object]]></category>
		<category><![CDATA[oriented]]></category>
		<category><![CDATA[problem]]></category>
		<category><![CDATA[puzzle]]></category>
		<category><![CDATA[queen]]></category>

		<guid isPermaLink="false">http://dev.enekoalonso.com/?p=225</guid>
		<description><![CDATA[Eight Queens is a classic problem which consist on being able to place 8 queens on a chess board without leaving them in position of eating each other. More info on Wikipedia. See the 8 Queens demo in action. On this demo I have created 3 different Mootools classes: ChessBoard, Piece and EightQueen. ChessBoard and [...]]]></description>
			<content:encoded><![CDATA[<p>Eight Queens is a classic problem which consist on being able to place 8 queens on a chess board without leaving them in position of eating each other. More info on <a href="http://en.wikipedia.org/wiki/8_queens">Wikipedia</a>.</p>
<p><a href="http://dev.enekoalonso.com/research/8-queens.php"><img src="http://dev.enekoalonso.com/wp-content/uploads/2009/01/picture-151-498x300.png" alt="8 Queens" title="8 Queens" width="498" height="300" class="aligncenter size-medium wp-image-226" /></a><br />
See the <a href="http://dev.enekoalonso.com/research/8-queens.php">8 Queens demo</a> in action.</p>
<p>On this demo I have created 3 different Mootools classes: ChessBoard, Piece and EightQueen. ChessBoard and Piece are generic classes which I plan to reuse in other demos. EightQueen is the brain of the demo and it inherits from <a href="http://dev.enekoalonso.com/2008/12/14/threads-in-javascript/">Thread</a>, the class I use for javascript animations. Check the source code at the end of the post.</p>
<h3>Solving the problem</h3>
<p>The easiest way to solve this problem is using backtracking. Once we find we have 2 queens on eating position, we can cancel that path. Since there can be only one Queen per column, we create an array and store the row on each position. Once the array has 8 items (columns) the problem will be solved.</p>
<p>If we can&#8217;t find a valid position for the current column, we need to remove the previous column Queen and add it again in the next row. If there are no more rows, we remove the previous column Queen and so on.</p>
<h3>Testing if a position is valid: my solution</h3>
<p>So the process to resolve the 8 Queen puzzle is easy after all. But we still need to figure out how to check if a position for a Queen is valid or not. I didn&#8217;t want to copy this logic from any other demo or site (I bet there are hundreds of ways to do this). I wanted to think my own way, and this is what I came up:</p>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1">validPosition: <span class="kw2">function</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">indexOf</span><span class="br0">&#40;</span>position.<span class="me1">y</span><span class="br0">&#41;</span> <span class="sy0">!</span>= <span class="nu0">-1</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> index=<span class="nu0">1</span>, length=<span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">length</span>; index<span class="sy0">&lt;</span>=length; index++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> queenY = <span class="kw1">this</span>.<span class="me1">queens</span><span class="br0">&#91;</span>index<span class="nu0">-1</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>position.<span class="me1">y</span> + <span class="br0">&#40;</span>position.<span class="me1">x</span>-index<span class="br0">&#41;</span> == queenY<span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>position.<span class="me1">y</span> &#8211; <span class="br0">&#40;</span>position.<span class="me1">x</span>-index<span class="br0">&#41;</span> == queenY<span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>First, we know only one Queen can sit on a column, but also only one Queen can sit on a row. So we check if there is already a Queen in the same row (position.y). If there is one, the position is not valid.</p>
<p>Then, we need to check the diagonals. Queens can move on 45&deg; diagonals. This is, the number of squares the Queen moves is the same in both horizontal and vertical directions. So a position will be invalid if there is a Queen one column away and one row away, or two columns away and two rows away, etc. With a simple equation we can check this. We need to do  it twice, since it can be one row before or after. We don&#8217;t need to check the columns on the right because we know there are no Queens placed on that side yet (on this demo I am placing Queens from left to right).</p>
<h3>Source code</h3>
<div class="geshi no javascript">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">var</span> ChessBoard = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; pieces: <span class="br0">&#91;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; initialize: <span class="kw2">function</span><span class="br0">&#40;</span>container<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span> = container;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">element</span> = <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">&#39;div&#39;</span>, <span class="br0">&#123;</span><span class="st0">&#39;class&#39;</span>: <span class="st0">&#39;board&#39;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> row=<span class="nu0">8</span>; row<span class="sy0">&gt;</span><span class="nu0">0</span>; row&#8211;<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> col=<span class="nu0">1</span>; col<span class="sy0">&lt;</span><span class="nu0">9</span>; col++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">var</span> square = <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">&#39;div&#39;</span>, <span class="br0">&#123;</span><span class="st0">&#39;class&#39;</span>: <span class="st0">&#39;square&#39;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; square.<span class="me1">id</span> = <span class="st0">&quot;square&quot;</span> + String.<span class="me1">fromCharCode</span><span class="br0">&#40;</span><span class="nu0">96</span>+col<span class="br0">&#41;</span> + row;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; square.<span class="me1">addClass</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">isDarkSquare</span><span class="br0">&#40;</span>row,col<span class="br0">&#41;</span>?<span class="st0">&#39;dark&#39;</span>:<span class="st0">&#39;light&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">element</span>.<span class="me1">grab</span><span class="br0">&#40;</span>square<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">container</span>.<span class="me1">grab</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">element</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; isDarkSquare: <span class="kw2">function</span><span class="br0">&#40;</span>row,col<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="br0">&#40;</span><span class="br0">&#40;</span>row<span class="sy0">%</span><span class="nu0">2</span>==<span class="nu0">0</span> <span class="sy0">&amp;&amp;</span> col<span class="sy0">%</span><span class="nu0">2</span>==<span class="nu0">0</span><span class="br0">&#41;</span> <span class="sy0">||</span> <span class="br0">&#40;</span>row<span class="sy0">%</span><span class="nu0">2</span>==<span class="nu0">1</span> <span class="sy0">&amp;&amp;</span> col<span class="sy0">%</span><span class="nu0">2</span>==<span class="nu0">1</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; addPiece: <span class="kw2">function</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> piece = <span class="kw2">new</span> Piece<span class="br0">&#40;</span>options<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pieces</span>.<span class="me1">push</span><span class="br0">&#40;</span>piece<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">element</span>.<span class="me1">grab</span><span class="br0">&#40;</span>piece.<span class="me1">element</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; removePiece: <span class="kw2">function</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> piece;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $A<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">pieces</span><span class="br0">&#41;</span>.<span class="me1">each</span><span class="br0">&#40;</span><span class="kw2">function</span><span class="br0">&#40;</span><span class="kw1">item</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">item</span>.<span class="me1">square</span>.<span class="me1">x</span> == position.<span class="me1">x</span> <span class="sy0">&amp;&amp;</span> <span class="kw1">item</span>.<span class="me1">square</span>.<span class="me1">y</span> == position.<span class="me1">y</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; piece = <span class="kw1">item</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $A<span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">pieces</span><span class="br0">&#41;</span>.<span class="me1">erase</span><span class="br0">&#40;</span>piece<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; piece.<span class="me1">destroy</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; removeAll: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">pieces</span>.<span class="me1">length</span> <span class="sy0">&gt;</span> <span class="nu0">0</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw2">var</span> piece = <span class="kw1">this</span>.<span class="me1">pieces</span><span class="br0">&#91;</span><span class="kw1">this</span>.<span class="me1">pieces</span>.<span class="me1">length</span><span class="nu0">-1</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; piece.<span class="me1">destroy</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">pieces</span>.<span class="me1">length</span>&#8211;;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> Piece = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">Extends</span>: Sprite,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; square: <span class="br0">&#123;</span>col:<span class="nu0">1</span>, row:<span class="nu0">1</span><span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; initialize: <span class="kw2">function</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">size</span> = <span class="br0">&#123;</span>x:<span class="nu0">32</span>,y:<span class="nu0">32</span><span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">parent</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">setFigurine</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">moveTo</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">square</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; setFigurine: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">setImage</span><span class="br0">&#40;</span><span class="st0">&#39;media/images/icons/chess/&#39;</span>+</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">color</span> + <span class="st0">&#39;_&#39;</span> +</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">kind</span> + <span class="st0">&#39;_32.png&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; moveTo: <span class="kw2">function</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">typeof</span> position == <span class="st0">&#39;string&#39;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw2">var</span> parts = position.<span class="me1">split</span><span class="br0">&#40;</span><span class="st0">&quot;&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; parts<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span> = parts<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>.<span class="me1">charCodeAt</span><span class="br0">&#40;</span><span class="nu0">0</span><span class="br0">&#41;</span> &#8211; <span class="nu0">96</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">square</span>.<span class="me1">x</span> = parts<span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">square</span>.<span class="me1">y</span> = parts<span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">else</span> <span class="kw1">if</span> <span class="br0">&#40;</span>position <span class="kw1">instanceof</span> Object<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">square</span> = position;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">x</span> = <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">square</span>.<span class="me1">x</span><span class="nu0">-1</span><span class="br0">&#41;</span> <span class="sy0">*</span> <span class="nu0">38</span><span class="br0">&#41;</span> + <span class="nu0">3</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">position</span>.<span class="me1">y</span> = <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="nu0">8</span>-<span class="kw1">this</span>.<span class="me1">square</span>.<span class="me1">y</span><span class="br0">&#41;</span> <span class="sy0">*</span> <span class="nu0">38</span><span class="br0">&#41;</span> + <span class="nu0">3</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">animate</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> EightQueens = <span class="kw2">new</span> <span class="kw2">Class</span><span class="br0">&#40;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">Extends</span>: Thread,</div>
</li>
<li class="li1">
<div class="de1">&nbsp; queens: <span class="br0">&#91;</span><span class="br0">&#93;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; initialize: <span class="kw2">function</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">parent</span><span class="br0">&#40;</span>options<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">board</span> = <span class="kw2">new</span> ChessBoard<span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&#39;content&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">currentRow</span> = Random.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">8</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">logbox</span> = <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">&#39;div&#39;</span>, <span class="br0">&#123;</span><span class="st0">&#39;class&#39;</span>:<span class="st0">&#39;log&#39;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>.<span class="me1">inject</span><span class="br0">&#40;</span>$<span class="br0">&#40;</span><span class="st0">&#39;content&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">chkLog</span> = $<span class="br0">&#40;</span><span class="st0">&#39;chk-log&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; $<span class="br0">&#40;</span><span class="st0">&#39;btn-restart&#39;</span><span class="br0">&#41;</span>.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">&#39;click&#39;</span>, <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">restart</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>.<span class="me1">bind</span><span class="br0">&#40;</span><span class="kw1">this</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; execute: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">addQueen</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">length</span> == <span class="nu0">8</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;Done.&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; addQueen: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> queenAdded = <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> row=<span class="kw1">this</span>.<span class="me1">currentRow</span>; row<span class="sy0">&lt;</span>=<span class="nu0">8</span>; row++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw2">var</span> position = <span class="br0">&#123;</span>x:<span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">length</span><span class="nu0">+1</span>, y:row<span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">validPosition</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">addToBoard</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; queenAdded = <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">currentRow</span> = <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">break</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span>queenAdded<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">currentRow</span> = <span class="kw1">this</span>.<span class="me1">queens</span><span class="br0">&#91;</span><span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">length</span><span class="nu0">-1</span><span class="br0">&#93;</span> + <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">board</span>.<span class="me1">removePiece</span><span class="br0">&#40;</span><span class="br0">&#123;</span>x:<span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">length</span>,y:<span class="kw1">this</span>.<span class="me1">queens</span><span class="br0">&#91;</span><span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">length</span><span class="nu0">-1</span><span class="br0">&#93;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">length</span> -= <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">length</span> == <span class="nu0">0</span><span class="br0">&#41;</span> <span class="kw1">this</span>.<span class="me1">currentRow</span> = Random.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">8</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; validPosition: <span class="kw2">function</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;Testing position: &#39;</span> + position.<span class="me1">x</span> + <span class="st0">&#39;,&#39;</span> + position.<span class="me1">y</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">indexOf</span><span class="br0">&#40;</span>position.<span class="me1">y</span><span class="br0">&#41;</span> <span class="sy0">!</span>= <span class="nu0">-1</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw2">var</span> index=<span class="nu0">1</span>, l=<span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">length</span>; index<span class="sy0">&lt;</span>=l; index++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw2">var</span> queenY = <span class="kw1">this</span>.<span class="me1">queens</span><span class="br0">&#91;</span>index<span class="nu0">-1</span><span class="br0">&#93;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>position.<span class="me1">y</span> + <span class="br0">&#40;</span>position.<span class="me1">x</span>-index<span class="br0">&#41;</span> == queenY<span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>position.<span class="me1">y</span> &#8211; <span class="br0">&#40;</span>position.<span class="me1">x</span>-index<span class="br0">&#41;</span> == queenY<span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="kw2">true</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; addToBoard: <span class="kw2">function</span><span class="br0">&#40;</span>position<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">log</span><span class="br0">&#40;</span><span class="st0">&#39;Queen added: &#39;</span> + position.<span class="me1">x</span> + <span class="st0">&#39;,&#39;</span> + position.<span class="me1">y</span> +<span class="st0">&#39; &#8211; &#39;</span>+ <span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">toString</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">push</span><span class="br0">&#40;</span>position.<span class="me1">y</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">board</span>.<span class="me1">addPiece</span><span class="br0">&#40;</span><span class="br0">&#123;</span>kind:<span class="st0">&#39;Q&#39;</span>, square:position, color:<span class="st0">&#39;Yellow&#39;</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; log: <span class="kw2">function</span><span class="br0">&#40;</span>text<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw1">this</span>.<span class="me1">chkLog</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#39;checked&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">var</span> p = <span class="kw2">new</span> Element<span class="br0">&#40;</span><span class="st0">&#39;p&#39;</span>, <span class="br0">&#123;</span><span class="st0">&#39;text&#39;</span>: text<span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">logbox</span>.<span class="me1">grab</span><span class="br0">&#40;</span>p<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">logbox</span>.<span class="me1">scrollTop</span> = p.<span class="me1">getPosition</span><span class="br0">&#40;</span><span class="kw1">this</span>.<span class="me1">logbox</span><span class="br0">&#41;</span>.<span class="me1">y</span> &#8211; <span class="nu0">296</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span>,</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; restart: <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="kw3">stop</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">queens</span>.<span class="me1">length</span> = <span class="nu0">0</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">board</span>.<span class="me1">removeAll</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">currentRow</span> = Random.<span class="me1">get</span><span class="br0">&#40;</span><span class="nu0">1</span>,<span class="nu0">8</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">options</span>.<span class="me1">interval</span> = $<span class="br0">&#40;</span><span class="st0">&#39;field-interval&#39;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#39;value&#39;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">logbox</span>.<span class="me1">empty</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">this</span>.<span class="me1">start</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">window.<span class="me1">addEvent</span><span class="br0">&#40;</span><span class="st0">&#39;domready&#39;</span>, <span class="kw2">function</span><span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">new</span> EightQueens<span class="br0">&#40;</span><span class="br0">&#123;</span>interval: $<span class="br0">&#40;</span><span class="st0">&#39;field-interval&#39;</span><span class="br0">&#41;</span>.<span class="me1">get</span><span class="br0">&#40;</span><span class="st0">&#39;value&#39;</span><span class="br0">&#41;</span>, autostart: <span class="kw2">true</span><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span><span class="br0">&#41;</span>;</div>
</li>
</ol>
</div>
<p>Enjoy!</p>
<h3  class="related_post_title">Related Posts:</h3><ul class="related_post"><li>April 23, 2009 -- <a href="http://dev.enekoalonso.com/2009/04/23/sending-messages-between-javascript-objects/" title="Sending messages between Javascript objects">Sending messages between Javascript objects</a> (2)</li><li>July 20, 2009 -- <a href="http://dev.enekoalonso.com/2009/07/20/setters-getters-on-mootools-classes/" title="Setters &#038; Getters on Mootools classes">Setters &#038; Getters on Mootools classes</a> (0)</li><li>April 28, 2010 -- <a href="http://dev.enekoalonso.com/2010/04/28/mooml-1-2-3-bye-bye-with/" title="Mooml 1.2.3 &#8211; Bye, bye, with()">Mooml 1.2.3 &#8211; Bye, bye, with()</a> (0)</li><li>April 14, 2010 -- <a href="http://dev.enekoalonso.com/2010/04/14/getting-unique-timestamps-in-javascript/" title="Getting unique timestamps in Javascript">Getting unique timestamps in Javascript</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://dev.enekoalonso.com/2009/01/02/solving-the-8-queen-puzzle-in-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
