<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3474748080814775582</id><updated>2012-01-30T17:44:26.890-06:00</updated><category term='Menu'/><category term='jQuery'/><category term='Print'/><category term='CSS'/><category term='WoW'/><category term='Javascript'/><category term='php'/><category term='Images'/><category term='jQuery selectors'/><category term='WordPress'/><category term='Date'/><category term='server status'/><category term='Loot'/><category term='Design'/><category term='Extensions'/><category term='Tips'/><category term='MovingBoxes'/><category term='Highlight'/><category term='AnythingSlider'/><category term='Canvas'/><category term='Color'/><category term='Resources'/><category term='fullCalendar'/><category term='MMORPG'/><category term='tablesorter'/><category term='jQueryUI'/><category term='Tooltip'/><category term='Forms'/><category term='Video'/><category term='widget'/><category term='Media'/><title type='text'>Javascript, jQuery and other Junk</title><subtitle type='html'>This blog contains my random dabbling in site design and improvement. Please feel free to browse and use anything on this site. All I ask is you give me some feedback or even advice on how to improve or change anything.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>50</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-44654824239465719</id><published>2011-12-30T17:12:00.002-06:00</published><updated>2011-12-30T17:21:14.233-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MovingBoxes'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Adding the MovingBoxes plugin to Blogger</title><content type='html'>These instructions will allow you to add a MovingBoxes widget to any Blogger post. These instruction really apply to any plugin out there, but instead of making a generic post, I think a specific example is best.&lt;br /&gt;&lt;br /&gt;&lt;ul class="movingboxes"&gt;&lt;li&gt;&lt;img alt="picture" src="http://chriscoyier.github.com/MovingBoxes/demo/1.jpg" /&gt;&lt;br /&gt;&lt;h3&gt;Olivia News Heading&lt;/h3&gt;A very short exerpt goes here... &lt;a href="http://flickr.com/photos/justbcuz/112479862/"&gt;more&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt="picture" src="http://chriscoyier.github.com/MovingBoxes/demo/2.jpg" /&gt;&lt;br /&gt;&lt;h3&gt;Alice News Heading&lt;/h3&gt;A very short exerpt goes here... &lt;a href="http://flickr.com/photos/joshuacraig/2698975899/"&gt;more&lt;/a&gt; and a whole lot more text goes here, so we can see the height adjust.&lt;/li&gt;&lt;li&gt;&lt;img alt="picture" src="http://chriscoyier.github.com/MovingBoxes/demo/3.jpg" /&gt;&lt;br /&gt;&lt;h3&gt;Yin News Heading&lt;/h3&gt;A very short exerpt goes here... &lt;a href="http://flickr.com/photos/ruudvanleeuwen/468309897/"&gt;more&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt="picture" src="http://chriscoyier.github.com/MovingBoxes/demo/4.jpg" /&gt;&lt;br /&gt;&lt;h3&gt;Gerri News Heading&lt;/h3&gt;A very short exerpt goes here... &lt;a href="http://flickr.com/photos/emikohime/294092478/"&gt;more&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt="picture" src="http://chriscoyier.github.com/MovingBoxes/demo/5.jpg" /&gt;&lt;br /&gt;&lt;h3&gt;Tabitha News Heading&lt;/h3&gt;A very short exerpt goes here... &lt;a href="http://www.flickr.com/photos/fensterbme/499006584/"&gt;more&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt="picture" src="http://chriscoyier.github.com/MovingBoxes/demo/6.jpg" /&gt;&lt;br /&gt;&lt;h3&gt;Mary News Heading&lt;/h3&gt;A very short exerpt goes here... &lt;a href="http://www.blogger.com/post-create.g?blogID=3474748080814775582#"&gt;more&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;img alt="picture" src="http://chriscoyier.github.com/MovingBoxes/demo/7.jpg" /&gt;&lt;br /&gt;&lt;h3&gt;Kitty News Heading&lt;/h3&gt;A very short exerpt goes here... &lt;a href="http://www.blogger.com/post-create.g?blogID=3474748080814775582#"&gt;more&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Note: In the next version of MovingBoxes, I plan to change the width and panelWidth options. At that time, I will update this post.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Code, CSS and image setup&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Required Files&lt;/b&gt;&lt;br /&gt;I don't know how github would feel about directly linking to their servers. Most businesses frown upon hot-linking and will most likely block your URL, or the entire domain if the hot-linking gets too rampant. So I'd recommend copying each file below and saving it to your own server.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://chriscoyier.github.com/MovingBoxes/css/movingboxes.css"&gt;http://chriscoyier.github.com/MovingBoxes/css/movingboxes.css&lt;/a&gt;&amp;nbsp;(don't copy this one, see below)&lt;/li&gt;&lt;li&gt;&lt;a href="http://chriscoyier.github.com/MovingBoxes/images/arrows.png"&gt;http://chriscoyier.github.com/MovingBoxes/images/arrows.png&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://chriscoyier.github.com/MovingBoxes/js/jquery.movingboxes.min.js"&gt;http://chriscoyier.github.com/MovingBoxes/js/jquery.movingboxes.min.js&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Note that inside of the css, you'll need to change the arrows.png url to point to the new location of the image file.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: css"&gt;/*** Left &amp;amp; Right Navigation Arrows ***/&lt;br /&gt;a.mb-scrollButtons {&lt;br /&gt;  background: transparent url(../images/arrows.png) no-repeat;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;If you don't have a server, you can use &lt;a href="https://www.dropbox.com/"&gt;dropbox&lt;/a&gt; or your iCloud (I don't own a Mac, so I'm only guessing that it'll allow you to save javascript &amp;amp; css files). If you don't have a server to save the files, then first, save the image to an image hosting site, like &lt;a href="http://photobucket.com/"&gt;photobucket&lt;/a&gt;, &lt;a href="http://www.flickr.com/"&gt;Flickr&lt;/a&gt; or something. Then you can save the javascript and css into your own blog design. The main problem with saving into your page design is that it will&amp;nbsp;increase your page size and possibly make the page loading take longer.&amp;nbsp;Either way you'll need to add a gadget, or add to an already existing one.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Add a Gadget&lt;/b&gt;&lt;br /&gt;So once you have your files saved and the css file updated:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Go to your Dashboard &amp;gt; Design &amp;gt; Add a Gadget &amp;gt; Pick the "HTML/Javascript" gadget.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Once the popup window opens, add the following plugin css and javascript in the content window, the URL should point to your hosted files&lt;/li&gt;&lt;li&gt;Note: After testing this, it seems that adding a &amp;lt;link&amp;gt; tag&amp;nbsp;inside of the HTML/Javascript gadget gets removed. I'm not sure why, but in this case we can just paste in the entire css.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;style&amp;gt;&lt;br /&gt;/*** Overall MovingBoxes Slider ***/&lt;br /&gt;.mb-wrapper {&lt;br /&gt; width: 900px; /* default, this is overridden by script settings */&lt;br /&gt; min-height: 200px;&lt;br /&gt; border: 5px solid #ccc;&lt;br /&gt; margin: 0 auto;&lt;br /&gt; position: relative;&lt;br /&gt; left: 0;&lt;br /&gt; top: 0;&lt;br /&gt; border-radius: 1em;&lt;br /&gt; -moz-border-radius: 1em;&lt;br /&gt; -webkit-border-radius: 1em;&lt;br /&gt; box-shadow: inset 0 0 10px #888;&lt;br /&gt; -moz-box-shadow: inset 0 0 10px #888;&lt;br /&gt; -webkit-box-shadow: inset 0 0 10px #888;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Panel Wrapper */&lt;br /&gt;.mb-slider, .mb-scroll {&lt;br /&gt; width: 100%;&lt;br /&gt; height: 100%;&lt;br /&gt; overflow: hidden;&lt;br /&gt; margin: 0 auto;&lt;br /&gt; padding: 0;&lt;br /&gt; position: relative;&lt;br /&gt; left: 0;&lt;br /&gt; top: 0;&lt;br /&gt;&lt;br /&gt; /***(&amp;gt;'-')&amp;gt; Control Panel Font size here &amp;lt;('-'&amp;lt;)***/&lt;br /&gt; font-size: 18px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* active slider border highlight */&lt;br /&gt;.mb-active-slider {&lt;br /&gt; border-color: #999bff;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*** Slider panel ***/&lt;br /&gt;.mb-slider .mb-panel {&lt;br /&gt; width: 350px;  /* default, this is overridden by script settings */&lt;br /&gt; margin: 5px 0;&lt;br /&gt; padding: 5px;&lt;br /&gt; display: block;&lt;br /&gt; cursor: pointer;&lt;br /&gt; float: left;&lt;br /&gt; list-style: none;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Cursor to arrow over current panel, pointer for all others,&lt;br /&gt;change .current class name using plugin option, currentPanel : 'current' */&lt;br /&gt;.mb-slider .mb-panel.current {&lt;br /&gt; cursor: auto;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*** Inside the panel ***/&lt;br /&gt;.mb-inside {&lt;br /&gt; padding: 10px;&lt;br /&gt; border: 1px solid #999;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.mb-inside * {&lt;br /&gt; max-width: 100%;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*** Left &amp;amp; Right Navigation Arrows ***/&lt;br /&gt;a.mb-scrollButtons {&lt;br /&gt; display: block;&lt;br /&gt; width: 45px;&lt;br /&gt; height: 58px;&lt;br /&gt; background: transparent url(http://chriscoyier.github.com/MovingBoxes/images/arrows.png) no-repeat;&lt;br /&gt; position: absolute;&lt;br /&gt; top: 50%;&lt;br /&gt; margin-top: -29px; /* if you change the arrow images, you may have to adjust this (1/2 height of arrow image) */&lt;br /&gt; cursor: pointer;&lt;br /&gt; text-decoration: none;&lt;br /&gt; outline: 0;&lt;br /&gt; border: 0;&lt;br /&gt;}&lt;br /&gt;a.mb-scrollButtons.mb-left {&lt;br /&gt; background-position: left top;&lt;br /&gt; left: -45px;&lt;br /&gt;}&lt;br /&gt;a.mb-scrollButtons.mb-right {&lt;br /&gt; background-position: right top;&lt;br /&gt; right: -45px;&lt;br /&gt;}&lt;br /&gt;a.mb-scrollButtons.mb-left:hover {&lt;br /&gt; background-position: left bottom;&lt;br /&gt;}&lt;br /&gt;a.mb-scrollButtons.mb-right:hover {&lt;br /&gt; background-position: right bottom;&lt;br /&gt;}&lt;br /&gt;a.mb-scrollButtons.disabled {&lt;br /&gt; display: none;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*** Controls added below the panels ***/&lt;br /&gt;.mb-controls {&lt;br /&gt; margin: 0 auto;&lt;br /&gt; text-align: center;&lt;br /&gt; background: #ccc;&lt;br /&gt; position: relative;&lt;br /&gt; z-index: 100;&lt;br /&gt;}&lt;br /&gt;.mb-controls a {&lt;br /&gt; color: #444;&lt;br /&gt; font: 12px Georgia, Serif;&lt;br /&gt; display: inline-block;&lt;br /&gt; text-decoration: none;&lt;br /&gt; padding: 2px;&lt;br /&gt; height: 18px;&lt;br /&gt; margin: 0 5px 0 0;&lt;br /&gt; text-align: center;&lt;br /&gt; outline: 0;&lt;br /&gt;}&lt;br /&gt;.mb-controls a.current, .mb-controls a:hover {&lt;br /&gt; color: #fff;&lt;br /&gt;}&lt;br /&gt;.mb-active-slider .mb-controls {&lt;br /&gt; background: #999bff;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script src="http://chriscoyier.github.com/MovingBoxes/js/jquery.movingboxes.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;jQuery(function(){&lt;br /&gt;&lt;br /&gt;  jQuery('.movingboxes').movingBoxes({&lt;br /&gt;    startPanel   : 1,      // start with this panel&lt;br /&gt;    width        : 300,    // overall width of movingBoxes&lt;br /&gt;    panelWidth   : 0.5,    // current panel width adjusted to 50% of overall width&lt;br /&gt;    wrap         : false,  // if true, the panel will "wrap" (it really rewinds/fast forwards) at the ends&lt;br /&gt;    buildNav     : true,   // if true, navigation links will be added&lt;br /&gt;    navFormatter : function(){ return "&amp;amp;#9679;"; } // function which returns the navigation text for each panel&lt;br /&gt;  });&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Modify the "width" and "panelWidth" options (in &lt;span style="color: red;"&gt;red&lt;/span&gt;) as desired. Or add and/or remove options following &lt;a href="https://github.com/chriscoyier/MovingBoxes/wiki/Setup"&gt;these instructions&lt;/a&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If you don't have your own server, then you can open the movingboxes.css file in a text editor and save it into the content window; again make sure the arrow.png url is pointing to the new location in the css below.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;style&amp;gt;&lt;br /&gt;  /* add movingboxes.css contents here */&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;  /* add jquery.movingboxes.min.js contents here */&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;&lt;span style="font-size: large;"&gt;Adding a blog post&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now the first step here would be to open a new post.&lt;br /&gt;&lt;br /&gt;Switch the editor to "Edit HTML" - tab in the upper right corner, then paste in the basic plugin HTML Note, keep the&amp;nbsp;&amp;lt;img&amp;gt;&amp;nbsp;and&amp;nbsp;&amp;lt;li&amp;gt;&amp;nbsp;on the same line or blogger will add a&amp;nbsp;&amp;lt;br&amp;gt;&amp;nbsp;in between.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;ul class="movingboxes"&amp;gt;&lt;br /&gt;  &amp;lt;li&amp;gt;&amp;lt;img src="http://chriscoyier.github.com/MovingBoxes/demo/1.jpg" alt="picture"&amp;gt;&lt;br /&gt;    &amp;lt;h2&amp;gt;Olivia News Heading&amp;lt;/h2&amp;gt;&lt;br /&gt;    &amp;lt;p&amp;gt;A very short exerpt goes here... &amp;lt;a href="http://flickr.com/photos/justbcuz/112479862/"&amp;gt;more&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;  &amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li&amp;gt;&amp;lt;img src="http://chriscoyier.github.com/MovingBoxes/demo/2.jpg" alt="picture"&amp;gt;&lt;br /&gt;    &amp;lt;h2&amp;gt;Alice News Heading&amp;lt;/h2&amp;gt;&lt;br /&gt;    &amp;lt;p&amp;gt;A very short exerpt goes here... &amp;lt;a href="http://flickr.com/photos/joshuacraig/2698975899/"&amp;gt;more&amp;lt;/a&amp;gt; and a whole lot more text goes here, so we can see the height adjust.&amp;lt;/p&amp;gt;&lt;br /&gt;  &amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li&amp;gt;&amp;lt;img src="http://chriscoyier.github.com/MovingBoxes/demo/3.jpg" alt="picture"&amp;gt;&lt;br /&gt;    &amp;lt;h2&amp;gt;Yin News Heading&amp;lt;/h2&amp;gt;&lt;br /&gt;    &amp;lt;p&amp;gt;A very short exerpt goes here... &amp;lt;a href="http://flickr.com/photos/ruudvanleeuwen/468309897/"&amp;gt;more&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;  &amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li&amp;gt;&amp;lt;img src="http://chriscoyier.github.com/MovingBoxes/demo/4.jpg" alt="picture"&amp;gt;&lt;br /&gt;    &amp;lt;h2&amp;gt;Gerri News Heading&amp;lt;/h2&amp;gt;&lt;br /&gt;    &amp;lt;p&amp;gt;A very short exerpt goes here... &amp;lt;a href="http://flickr.com/photos/emikohime/294092478/"&amp;gt;more&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;  &amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li&amp;gt;&amp;lt;img src="http://chriscoyier.github.com/MovingBoxes/demo/5.jpg" alt="picture"&amp;gt;&lt;br /&gt;    &amp;lt;h2&amp;gt;Tabitha News Heading&amp;lt;/h2&amp;gt;&lt;br /&gt;    &amp;lt;p&amp;gt;A very short exerpt goes here... &amp;lt;a href="http://www.flickr.com/photos/fensterbme/499006584/"&amp;gt;more&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;  &amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li&amp;gt;&amp;lt;img src="http://chriscoyier.github.com/MovingBoxes/demo/6.jpg" alt="picture"&amp;gt;&lt;br /&gt;    &amp;lt;h2&amp;gt;Mary News Heading&amp;lt;/h2&amp;gt;&lt;br /&gt;    &amp;lt;p&amp;gt;A very short exerpt goes here... &amp;lt;a href="#"&amp;gt;more&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;  &amp;lt;/li&amp;gt;&lt;br /&gt;  &amp;lt;li&amp;gt;&amp;lt;img src="http://chriscoyier.github.com/MovingBoxes/demo/7.jpg" alt="picture"&amp;gt;&lt;br /&gt;    &amp;lt;h2&amp;gt;Kitty News Heading&amp;lt;/h2&amp;gt;&lt;br /&gt;    &amp;lt;p&amp;gt;A very short exerpt goes here... &amp;lt;a href="#"&amp;gt;more&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;  &amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;/pre&gt;&lt;br /&gt;Note that the UL has a class named "movingboxes", it originally had an ID, but to make this plugin work on any future blog entries we need to make sure it's a class name we can remember.&lt;br /&gt;&lt;br /&gt;Now, just publish your post and reload your page. The MovingBoxes plugin should initialize and look like it does at the top of this post :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-44654824239465719?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/44654824239465719/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/12/adding-movingboxes-plugin-to-blogger.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/44654824239465719'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/44654824239465719'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/12/adding-movingboxes-plugin-to-blogger.html' title='Adding the MovingBoxes plugin to Blogger'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-1487417873929346137</id><published>2011-12-17T13:29:00.002-06:00</published><updated>2012-01-13T18:15:23.953-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Images'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>All Images Loaded (imagesLoaded)</title><content type='html'>&lt;b&gt;*NOTE*&lt;/b&gt; this code causes infinite loops in IE with image load errors, so I improved and turned this into a real plugin and hosted it &lt;a href="https://github.com/Mottie/imagesLoaded"&gt;on github&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;A little jQuery function that checks if all images are loaded. If they all are, the callback function is called. Check out the latest version in this &lt;a href="https://gist.github.com/1491097"&gt;gist&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Script below:&lt;br /&gt;&lt;pre class="brush: js"&gt;/*&lt;br /&gt; Check if all images are loaded&lt;br /&gt; - Callback occurs when all images are loaded&lt;br /&gt; - image load errors are ignored (complete will be true)&lt;br /&gt; - Use:&lt;br /&gt;   $('.wrap img').imagesLoaded(function(){&lt;br /&gt;     alert('all images loaded');&lt;br /&gt;   });&lt;br /&gt;*/&lt;br /&gt;&lt;br /&gt;jQuery.fn.extend({&lt;br /&gt;  imagesLoaded: function( callback ) {&lt;br /&gt;    var i, c = true, t = this, l = t.length;&lt;br /&gt;    for ( i = 0; i &amp;lt; l; i++ ) {&lt;br /&gt;      if (this[i].tagName === "IMG") {&lt;br /&gt;        c = (c &amp;amp;&amp;amp; this[i].complete &amp;amp;&amp;amp; this[i].height !== 0);&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    if (c) {&lt;br /&gt;      if (typeof callback === "function") { callback(); }&lt;br /&gt;    } else {&lt;br /&gt;      setTimeout(function(){&lt;br /&gt;        jQuery(t).imagesLoaded( callback );&lt;br /&gt;      }, 200);&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Use it as follows:&lt;br /&gt;&lt;pre class="brush: js"&gt;$(function(){&lt;br /&gt;  $('.wrap img').imagesLoaded(function(){&lt;br /&gt;    alert('all images loaded');&lt;br /&gt;  });&lt;br /&gt;});&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-1487417873929346137?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/1487417873929346137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/12/all-images-loaded-imagesloaded.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/1487417873929346137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/1487417873929346137'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/12/all-images-loaded-imagesloaded.html' title='All Images Loaded (imagesLoaded)'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-7292195421836743761</id><published>2011-12-06T16:06:00.002-06:00</published><updated>2011-12-06T16:08:20.387-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQueryUI'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery Pathslider</title><content type='html'>I just created this plugin that is a very basic UI Slider (similar to the &lt;a href="http://jqueryui.com/demos/slider/"&gt;jQuery slider&lt;/a&gt;), but it doesn't just allow you to move the handle horizontally and vertically, it will follow any shaped curve! If you've ever used Adobe Illustrator or CorelDraw then you probably recognize the Bezier curve below.&lt;br /&gt;&lt;br /&gt;The handle, or grip as I call it, can be dragged along the black curve. For now, it only returns values from 0 (green dot) to 100 (red dot).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://mottie.github.com/Pathslider/builder.html" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/pathslider.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The plugin is in the early stages of development and still needs a lot of work, but it is usable now.&lt;br /&gt;&lt;br /&gt;Check out the &lt;a href="http://mottie.github.com/Pathslider/index.html"&gt;demo page&lt;/a&gt;, and the &lt;a href="http://mottie.github.com/Pathslider/builder.html"&gt;builder page&lt;/a&gt;. If you would like to help me out, submit an &lt;a href="https://github.com/Mottie/Pathslider/issues"&gt;enhancement or issue&lt;/a&gt;, or fork a copy of the plugin on &lt;a href="https://github.com/Mottie/Pathslider"&gt;Github&lt;/a&gt; and send me a pull request! I'd love the input!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-7292195421836743761?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/7292195421836743761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/12/jquery-pathslider.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7292195421836743761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7292195421836743761'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/12/jquery-pathslider.html' title='jQuery Pathslider'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-7297739045399184061</id><published>2011-11-14T04:46:00.000-06:00</published><updated>2011-11-14T04:46:22.448-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQueryUI'/><category scheme='http://www.blogger.com/atom/ns#' term='widget'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery UI Side Scroller with buttons</title><content type='html'>Once again, I got up at 2:30am wide awake... that's what happens when I fall asleep at 9:30 LOL. Anyway, I was bored so I searched for something to do. I found a &lt;a href="http://css-tricks.com/forums/discussion/14542/cycle-through-images-with-a-custom-scroll-bar/p1"&gt;question on CSS Tricks&lt;/a&gt; asking how to add buttons to the jQuery UI Slider. So starting with the &lt;a href="http://jqueryui.com/demos/slider/#side-scroll"&gt;side scroll demo&lt;/a&gt; as a base, I put together this demo. That is all :P&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="allowfullscreen" frameborder="0" src="http://jsfiddle.net/Mottie/TrQLK/1/embedded/result,js,html,css" style="height: 300px; width: 100%;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-7297739045399184061?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/7297739045399184061/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/11/jquery-ui-side-scroller-with-buttons.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7297739045399184061'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7297739045399184061'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/11/jquery-ui-side-scroller-with-buttons.html' title='jQuery UI Side Scroller with buttons'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-7012398804613784306</id><published>2011-10-31T19:21:00.001-05:00</published><updated>2011-11-14T04:48:51.780-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><title type='text'>Get All indexOf From An Array - Array.allIndexOf()</title><content type='html'>This array function is an extension of Array.indexOf(), if it exists, and will return all indexes of the search element. It's named allIndexOf(). This code extends javascript and does not require jQuery. It is designed to work in older versions of IE as well, albeit a tiny bit slower.&lt;br /&gt;&lt;br /&gt;Originally if you wanted the second instance of a search element, you'd have to call "indexOf" twice. The second time with the starting index of the first result (plus one), or once with a guessed starting index. This should simplify the process for getting any or all of the indexes.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js"&gt;/*&lt;br /&gt;Array.allIndexOf(searchElement)&lt;br /&gt;  Array [Array] - the array to search within for the searchElement&lt;br /&gt;  searchElement [String] - the desired element with which to find starting indexes&lt;br /&gt;*/&lt;br /&gt;(function(){&lt;br /&gt;  Array.prototype.allIndexOf = function(searchElement) {&lt;br /&gt;    if (this === null) { return [-1]; }&lt;br /&gt;    var len = this.length,&lt;br /&gt;    hasIndexOf = Array.prototype.indexOf, // you know, because of IE&lt;br /&gt;    i = (hasIndexOf) ? this.indexOf(searchElement) : 0,&lt;br /&gt;    n,&lt;br /&gt;    indx = 0,&lt;br /&gt;    result = [];&lt;br /&gt;    if (len === 0 || i === -1) { return [-1]; }&lt;br /&gt;    if (hasIndexOf) {&lt;br /&gt;      // Array.indexOf does exist&lt;br /&gt;      for (n = 0; n &amp;lt;= len; n++) {&lt;br /&gt;        i = this.indexOf(searchElement, indx);&lt;br /&gt;        if (i !== -1) {&lt;br /&gt;          indx = i + 1;&lt;br /&gt;          result.push(i);&lt;br /&gt;        } else {&lt;br /&gt;          return result;&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      return result;&lt;br /&gt;    } else {&lt;br /&gt;    // Array.indexOf doesn't exist&lt;br /&gt;      for (n = 0; n &amp;lt;= len; n++) {&lt;br /&gt;        if (this[n] === searchElement) {&lt;br /&gt;          result.push(n);&lt;br /&gt;        }&lt;br /&gt;      }&lt;br /&gt;      return (result.length &amp;gt; 0) ? result : [-1];&lt;br /&gt;    }&lt;br /&gt;  };&lt;br /&gt;})();&lt;/pre&gt;Use it as follows:   &lt;br /&gt;&lt;pre class="brush: js"&gt;var s = ["red","green","blue","red","yellow","blue","green","purple","red"];&lt;br /&gt;s.allIndexOf("r"); // result [ -1 ]&lt;br /&gt;s.allIndexOf("red"); // result [ 0,3,8 ]&lt;br /&gt;s.allIndexOf("blue"); // result [ 2,5 ]&lt;/pre&gt;Try out your own strings in the demo below or &lt;a href="http://jsfiddle.net/Mottie/NneeH/2/embedded/result/"&gt;full screen&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="allowfullscreen" frameborder="0" src="http://jsfiddle.net/Mottie/NneeH/2/embedded/result,js,html,css" style="height: 300px; width: 100%;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-7012398804613784306?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/7012398804613784306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/10/get-all-indexof-from-array.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7012398804613784306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7012398804613784306'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/10/get-all-indexof-from-array.html' title='Get All indexOf From An Array - Array.allIndexOf()'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-2124076044248346111</id><published>2011-10-31T11:26:00.009-05:00</published><updated>2011-11-14T04:50:43.237-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><title type='text'>Get All indexOf From A Search String - String.allIndexOf()</title><content type='html'>This string function is an extension of String.indexOf() and will return all indexes of a search string. It's named allIndexOf. This code extends javascript and does not require jQuery.&lt;br /&gt;&lt;br /&gt;Originally if you wanted the second instance of a search string, you'd have to call "indexOf" twice. The second time with the starting index of the first result (plus one), or once with a guessed starting index. This should simplify the process for getting any or all of the indexes. And yes, I woke up with a strange urge to write this function LOL.&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js"&gt;/*&lt;br /&gt;String.allIndexOf(searchstring, ignoreCase)&lt;br /&gt;  String [String] - the string to search within for the searchstring&lt;br /&gt;  searchstring [String] - the desired string with which to find starting indexes&lt;br /&gt;  ignoreCase [Boolean] - set to true to make both the string and searchstring case insensitive&lt;br /&gt;*/&lt;br /&gt;(function(){&lt;br /&gt;  String.prototype.allIndexOf = function(string, ignoreCase) {&lt;br /&gt;    if (this === null) { return [-1]; }&lt;br /&gt;    var t = (ignoreCase) ? this.toLowerCase() : this,&lt;br /&gt;    s = (ignoreCase) ? string.toString().toLowerCase() : string.toString(),&lt;br /&gt;    i = this.indexOf(s),&lt;br /&gt;    len = this.length,&lt;br /&gt;    n,&lt;br /&gt;    indx = 0,&lt;br /&gt;    result = [];&lt;br /&gt;    if (len === 0 || i === -1) { return [i]; } // "".indexOf("") is 0&lt;br /&gt;    for (n = 0; n &amp;lt;= len; n++) {&lt;br /&gt;      i = t.indexOf(s, indx);&lt;br /&gt;      if (i !== -1) {&lt;br /&gt;        indx = i + 1;&lt;br /&gt;        result.push(i);&lt;br /&gt;      } else {&lt;br /&gt;        return result;&lt;br /&gt;      }&lt;br /&gt;    }&lt;br /&gt;    return result;&lt;br /&gt;  }&lt;br /&gt;})();&lt;/pre&gt;Use it as follows:    &lt;br /&gt;&lt;pre class="brush: js"&gt;var s = "The rain in Spain stays mainly in the plain";&lt;br /&gt;s.allIndexOf("ain"); // result [ 5,14,25,40 ]&lt;br /&gt;s.allIndexOf("the"); // result [ 34 ]&lt;br /&gt;s.allIndexOf("THE", true); // result [ 0,34 ]&lt;/pre&gt;Try out your own strings in the demo below or &lt;a href="http://jsfiddle.net/Mottie/NneeH/1/embedded/result/"&gt;full screen&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="allowfullscreen" frameborder="0" src="http://jsfiddle.net/Mottie/NneeH/1/embedded/result,js,html,css" style="height: 300px; width: 100%;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-2124076044248346111?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/2124076044248346111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/10/get-all-indexof-search-string.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2124076044248346111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2124076044248346111'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/10/get-all-indexof-search-string.html' title='Get All indexOf From A Search String - String.allIndexOf()'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-6803252709959156123</id><published>2011-10-20T09:20:00.004-05:00</published><updated>2011-11-14T04:51:13.535-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery Rename Attribute (renameAttr)</title><content type='html'>I woke up this morning with a very unusual urge to make a rename attribute function for jQuery. I know, right.. that's just too weird! So after messing around with it, I decided that it needed to update the data as well. Here is the code I ended up with:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js"&gt;jQuery.fn.extend({&lt;br /&gt;  renameAttr: function( name, newName, removeData ) {&lt;br /&gt;    var val;&lt;br /&gt;    return this.each(function() {&lt;br /&gt;      val = jQuery.attr( this, name );&lt;br /&gt;      jQuery.attr( this, newName, val );&lt;br /&gt;      jQuery.removeAttr( this, name );&lt;br /&gt;      // remove original data&lt;br /&gt;      if (removeData !== false){&lt;br /&gt;        jQuery.removeData( this, name.replace('data-','') );&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;  }&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;Use it as follows:&lt;br /&gt;&lt;pre class="brush: js"&gt;// $(selector).renameAttr(original-attr, new-attr, removeData);&lt;br /&gt;&lt;br /&gt;// removeData flag is true by default&lt;br /&gt;$('#test').renameAttr('data-test', 'data-new' );&lt;br /&gt;&lt;br /&gt;// removeData flag set to false will not remove the&lt;br /&gt;// .data("test") value&lt;br /&gt;$('#test').renameAttr('data-test', 'data-new', false );&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Basically, it adds a new attribute with the same value and removes the old one. It automatically removes the jQuery data for the original attribute unless you set the "removeData" flag to false. Check out this demo&lt;br /&gt;&lt;br /&gt;&lt;iframe style="width: 100%; height: 300px" src="http://jsfiddle.net/Mottie/Yjac5/embedded/result,js,html,css"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-6803252709959156123?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/6803252709959156123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/10/jquery-rename-attribute-renameattr.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6803252709959156123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6803252709959156123'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/10/jquery-rename-attribute-renameattr.html' title='jQuery Rename Attribute (renameAttr)'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-6274233138207780177</id><published>2011-10-06T10:28:00.002-05:00</published><updated>2011-11-14T04:51:51.068-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Adding Swipe Support</title><content type='html'>I spent some time trying to figure out how to add mobile swipe support without using jQuery Mobile, because the swipe is all I really needed. I don't own an iPhone/iPad/iAnything, so it took a bit of back-and-forth testing - thanks to all the folks over at &lt;a href="http://www.blogger.com/css-tricks.com/forums/discussions"&gt;CSS-Tricks.com&lt;/a&gt; - to get this to finally work.&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://jsfiddle.net/Mottie/4eEA9/3/embedded/result,js,html,css" style="height: 300px; width: 100%;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Here is the complete code:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js"&gt;var maxTime = 1000, // allow movement if &amp;lt; 1000 ms (1 sec)&lt;br /&gt;    maxDistance = 50,  // swipe movement of 50 pixels triggers the swipe&lt;br /&gt;&lt;br /&gt;    target = $('#box'),&lt;br /&gt;    startX = 0,&lt;br /&gt;    startTime = 0,&lt;br /&gt;    touch = "ontouchend" in document,&lt;br /&gt;    startEvent = (touch) ? 'touchstart' : 'mousedown',&lt;br /&gt;    moveEvent = (touch) ? 'touchmove' : 'mousemove',&lt;br /&gt;    endEvent = (touch) ? 'touchend' : 'mouseup';&lt;br /&gt;&lt;br /&gt;target&lt;br /&gt;    .bind(startEvent, function(e){&lt;br /&gt;        // prevent image drag (Firefox)&lt;br /&gt;        e.preventDefault();&lt;br /&gt;        startTime = e.timeStamp;&lt;br /&gt;        startX = e.originalEvent.touches ? e.originalEvent.touches[0].pageX : e.pageX;&lt;br /&gt;    })&lt;br /&gt;    .bind(endEvent, function(e){&lt;br /&gt;        startTime = 0;&lt;br /&gt;        startX = 0;&lt;br /&gt;    })&lt;br /&gt;    .bind(moveEvent, function(e){&lt;br /&gt;        e.preventDefault();&lt;br /&gt;        var currentX = e.originalEvent.touches ? e.originalEvent.touches[0].pageX : e.pageX,&lt;br /&gt;            currentDistance = (startX === 0) ? 0 : Math.abs(currentX - startX),&lt;br /&gt;            // allow if movement &amp;lt; 1 sec&lt;br /&gt;            currentTime = e.timeStamp;&lt;br /&gt;        if (startTime !== 0 &amp;amp;&amp;amp; currentTime - startTime &amp;lt; maxTime &amp;amp;&amp;amp; currentDistance &amp;gt; maxDistance) {&lt;br /&gt;            if (currentX &amp;lt; startX) {&lt;br /&gt;                // swipe left code here&lt;br /&gt;                target.find('h1').html('Swipe Left').fadeIn();&lt;br /&gt;                setTimeout(function(){&lt;br /&gt;                    target.find('h1').fadeOut();&lt;br /&gt;                }, 1000);&lt;br /&gt;            }&lt;br /&gt;            if (currentX &amp;gt; startX) {&lt;br /&gt;                // swipe right code here&lt;br /&gt;                target.find('h1').html('Swipe Right').fadeIn();&lt;br /&gt;                setTimeout(function(){&lt;br /&gt;                    target.find('h1').fadeOut();&lt;br /&gt;                }, 1000);&lt;br /&gt;            }&lt;br /&gt;            startTime = 0;&lt;br /&gt;            startX = 0;&lt;br /&gt;        }&lt;br /&gt;    });&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Now, lets break down what each line does. First, some definitions:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js"&gt;var maxTime = 1000, // allow movement if &amp;lt; 1000 ms (1 sec)&lt;br /&gt;    maxDistance = 50,  // swipe movement of 50 pixels triggers the swipe&lt;br /&gt;&lt;br /&gt;    target = $('#box'),&lt;br /&gt;    startX = 0,&lt;br /&gt;    startTime = 0,&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The "maxTime" variable is a set to 1000 milliseconds. It is used to compare the touch start and touch end times, and if less than one second (1000 ms) it is considered to be a valid swipe, otherwise it is ignored. Basically, we don't like them slow swipers! Hehe, ok, actually, it to determine if the event ends up being a touch or a swipe.&lt;br /&gt;&lt;br /&gt;"maxDistance" is the number of pixels from the touch start point that the mouse or a finger moved to determine if a swipe or touch is occurring.&lt;br /&gt;&lt;br /&gt;The "target" variable, is the target element to add swipe support to. For the demo, I added an H1 tag inside of this element to add a swipe message.  The "startX" and "startTime" variables are set to zero because the "touchmove" or "mousemove" event looks to see if they are set with the "startX" position and start time. If zero, it ignores the move.&lt;br /&gt;&lt;br /&gt;In the next part we figure out of the device has touch support and set up the event names appropriately:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js"&gt;touch = "ontouchend" in document,&lt;br /&gt;startEvent = (touch) ? 'touchstart' : 'mousedown',&lt;br /&gt;moveEvent = (touch) ? 'touchmove' : 'mousemove',&lt;br /&gt;endEvent = (touch) ? 'touchend' : 'mouseup';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The "touch" varible is true if the "ontouchend" event exists, which means touch is supported. All that line is doing is looking to see if that object exists.&lt;br /&gt;&lt;br /&gt;The next variables, "startEvent", "moveEvent" and "endEvent" contain the necessary event names for start, move and end, respectively.  Which the next lines of code will now bind to: &lt;br /&gt;&lt;pre class="brush: js"&gt;target&lt;br /&gt;    .bind(startEvent, function(e){&lt;br /&gt;        // prevent image drag (Firefox)&lt;br /&gt;        e.preventDefault();&lt;br /&gt;        startTime = e.timeStamp;&lt;br /&gt;        startX = e.originalEvent.touches ? e.originalEvent.touches[0].pageX : e.pageX;&lt;br /&gt;    })&lt;/pre&gt;The "touchstart" or "mousedown" event code contains the following:&lt;br /&gt;&lt;br /&gt;"e.preventDefault()" prevents the image drag function in Firefox which actually makes you think you're dragging the image instead of swiping. Now we define "startTime" and "startX" as the start time and position of the swipe. The "startX" needs to get the position of the touch from the touches variable, but only the first one. We don't want to swipe if there are multiple touches (gestures) but it shouldn't work anyway since we're not binding to the gestures event. &lt;br /&gt;&lt;pre class="brush: js"&gt;.bind(endEvent, function(e){&lt;br /&gt;    startTime = 0;&lt;br /&gt;    startX = 0;&lt;br /&gt;})&lt;/pre&gt;Now the "touchend" or "mouseup" event code only clears the start time and position variables. The reason for this, which was a fun and painful lesson, is that these events don't fire when your mouse/finger leaves the element or goes off the screen. So the actual swipe calculations are done in the move event functions.  &lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: js"&gt;.bind(moveEvent, function(e){&lt;br /&gt;    e.preventDefault();&lt;br /&gt;    var currentX = e.originalEvent.touches ? e.originalEvent.touches[0].pageX : e.pageX,&lt;br /&gt;        currentDistance = (startX === 0) ? 0 : Math.abs(currentX - startX),&lt;br /&gt;        // allow if movement &amp;lt; 1 sec&lt;br /&gt;        currentTime = e.timeStamp;&lt;br /&gt;    if (startTime !== 0 &amp;amp;&amp;amp; currentTime - startTime &amp;lt; maxTime &amp;amp;&amp;amp; currentDistance &amp;gt; maxDistance) {&lt;br /&gt;        if (currentX &amp;lt; startX) {&lt;br /&gt;            // swipe left code here&lt;br /&gt;            target.find('h1').html('Swipe Left').fadeIn();&lt;br /&gt;            setTimeout(function(){&lt;br /&gt;                target.find('h1').fadeOut();&lt;br /&gt;            }, 1000);&lt;br /&gt;        }&lt;br /&gt;        if (currentX &amp;gt; startX) {&lt;br /&gt;            // swipe right code here&lt;br /&gt;            target.find('h1').html('Swipe Right').fadeIn();&lt;br /&gt;            setTimeout(function(){&lt;br /&gt;                target.find('h1').fadeOut();&lt;br /&gt;            }, 1000);&lt;br /&gt;        }&lt;br /&gt;        startTime = 0;&lt;br /&gt;        startX = 0;&lt;br /&gt;    }&lt;br /&gt;});&lt;/pre&gt;&lt;br /&gt;The "touchmove" or "mousemove" events is where the main portion of this swipe code exists. Again, we want to prevent the default functionality of the move/drag.  The "currentX" variable is set with the current x position of the finger/mouse. Again, the x position is obtained from the touches variable, if available.  The difference "currentDistance" between the starting x and current x position is then determined. We need the absolute value of this number (ignore the negative sign if it is there) to see if it is more than the "maxDistance" variable. Also here is another trick to make sure the move event is occurring after a start event, check to make sure the starting x position isn't zero. If it is, set the "currentDistance" variable to zero.  We also need determine the "currentTime" current time of the move event.&lt;br /&gt;&lt;br /&gt;Now, we check to make sure the move event occurred after a start event. This can happen is the start event occurs outside of the element or window. So, first we make sure the "startTime" isn't zero, then we check that the time difference from start to current time is less than one second. And finally, we check that the current distance is more than the max distance setting. If it is, then we have a swipe!&lt;br /&gt;&lt;br /&gt;YAY finally a swipe! Now to just figure out if it was going to the right or left. We do this by comparing the current position "currentX" to the starting position "startX"; if the current position is less than the start, then it's a swipe to the left and if it is greater, then the swipe was to the right.&lt;br /&gt;&lt;br /&gt;Last but not least, we set the start time and position back to zero to prevent multiple firing of the swipe event.&lt;br /&gt;&lt;br /&gt;I hope everything had a clear enough explanation. Please feel free to leave a comment or email me (gmail with wowmotty as the user) with questions or if you need further clarification.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-6274233138207780177?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/6274233138207780177/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/10/adding-swipe-support.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6274233138207780177'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6274233138207780177'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/10/adding-swipe-support.html' title='Adding Swipe Support'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-797253799288391640</id><published>2011-09-22T08:51:00.002-05:00</published><updated>2011-11-14T04:52:35.392-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Print'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Print a Paragraph</title><content type='html'>By default, browsers will print the content of an entire page/web page or selected text. With some simple scripting you can make it easier for your users to get the browser to print the contents of a particular block or paragraph. The trick is to copy these contents into a new popup window, then print the contents of that window. I put together a very simple demo, which I should turn into a plugin, of how to do this:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://jsfiddle.net/Mottie/byrDG/embedded/result,js,html,css" style="height: 300px; width: 100%;"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-797253799288391640?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/797253799288391640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/09/print-paragraph.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/797253799288391640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/797253799288391640'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/09/print-paragraph.html' title='Print a Paragraph'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-7825945426486150212</id><published>2011-09-11T18:33:00.000-05:00</published><updated>2011-09-11T18:33:28.270-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AnythingSlider'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>AnythingSlider Themes</title><content type='html'>I put together &lt;a href="http://mottie.github.com/AnythingSlider-Themes/"&gt;ten more themes for AnythingSlider&lt;/a&gt;! YAY!&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-_FU7RBBSOfk/Tm1FMHbIIPI/AAAAAAAAADc/h3w8pOeXTsI/s1600/themes.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-_FU7RBBSOfk/Tm1FMHbIIPI/AAAAAAAAADc/h3w8pOeXTsI/s1600/themes.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;All theme files are meant to be used independently from the plugin's "anythingslider.css" file. So you only need to include one of these theme files.&lt;/li&gt;&lt;li&gt;There is an additional stylesheet named "wrappers.css" which only targets the wrapper around the slider. It is independent of the theme files and meant to be used by extracting out any specific wrapper style you would like to use.&lt;/li&gt;&lt;li&gt;The first default theme is meant to be used as the base to make your own theme, but without using images or css3.&lt;/li&gt;&lt;li&gt;The second default theme is also meant to be used as a base for your own theme, but includes images (no css3 though)&lt;/li&gt;&lt;li&gt;The rest of the themes are free to use.&lt;/li&gt;&lt;/ul&gt;If you would like to contribute a theme, either &lt;a href="https://github.com/Mottie/AnythingSlider-Themes"&gt;fork the repository&lt;/a&gt;, add your theme then send me a pull request or just email me the files - my gmail account, user name is wowmotty.&lt;br /&gt;&lt;br /&gt;Thanks and enjoy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-7825945426486150212?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/7825945426486150212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/09/anythingslider-themes.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7825945426486150212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7825945426486150212'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/09/anythingslider-themes.html' title='AnythingSlider Themes'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-_FU7RBBSOfk/Tm1FMHbIIPI/AAAAAAAAADc/h3w8pOeXTsI/s72-c/themes.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-6199479421227442963</id><published>2011-08-17T17:26:00.002-05:00</published><updated>2011-08-17T17:27:37.240-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AnythingSlider'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>AnythingSlider FX Builder</title><content type='html'>So, to make it easier to figure out how to add FX to AnythingSlider, I put together a bookmarklet (&lt;a href="http://mottie.github.com/AnythingSlider-Fx-Builder/"&gt;get it from here&lt;/a&gt;)  that allows you to build/play with the effects live :)&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i53.tinypic.com/29essnq.jpg" width="600" /&gt;&lt;br /&gt;&lt;br /&gt;If you need instructions, I have some very basic information in the &lt;a href="https://github.com/Mottie/AnythingSlider-Fx-Builder"&gt;readme file&lt;/a&gt; on github.&lt;br /&gt;&lt;br /&gt;Right now, it's still in beta and it only works on the first slider on the page. I'd appreciate any feedback on what could be improved, changed, or if you find any problems.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-6199479421227442963?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/6199479421227442963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/08/anythingslider-fx-builder.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6199479421227442963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6199479421227442963'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/08/anythingslider-fx-builder.html' title='AnythingSlider FX Builder'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i53.tinypic.com/29essnq_th.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-2829457324923117051</id><published>2011-07-12T19:59:00.000-05:00</published><updated>2011-07-12T19:59:32.368-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='WordPress'/><title type='text'>Adding WordPress Quicktag Buttons to a WP Plugin</title><content type='html'>Disclaimer: I am a total noob when it comes to WordPress and WordPress plugins.&lt;br /&gt;&lt;br /&gt;I was wondering how difficult it would be to add a button to the WordPress Post Editor. I've seen a few plugins do it, but I discovered that they had to add their own version of TinyMCE to do it.&lt;br /&gt;&lt;br /&gt;So I searched around on the internet, and found a few methods. But they either &lt;a href="http://granades.com/2007/02/14/adding-quicktags-to-wordpress/"&gt;stopped working&lt;/a&gt; or required you to &lt;a href="http://wpcandy.com/teaches/tutorial-adding-buttons-to-the-post-editor"&gt;edit your quicktags.js file&lt;/a&gt; to work, then again after each Wordpress update. So I looked into it and I found a solution that works with the current version 3.2 and hopefully future versions without requiring you to edit or replace the quicktags file.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;Before&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-NoGIy_lHP-E/ThzoaH2GGWI/AAAAAAAAADU/Lsp82SSBir0/s1600/new-post-before.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="190" src="http://1.bp.blogspot.com/-NoGIy_lHP-E/ThzoaH2GGWI/AAAAAAAAADU/Lsp82SSBir0/s400/new-post-before.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;After&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-qKzHHJHomN8/ThzodApkLuI/AAAAAAAAADY/RM5oRwsVLvA/s1600/new-post-after.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="207" src="http://4.bp.blogspot.com/-qKzHHJHomN8/ThzodApkLuI/AAAAAAAAADY/RM5oRwsVLvA/s400/new-post-after.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;Note: This code is intended to be added inside your WordPress plugin. Like I said, I'm a total noob with WordPress so I'm not sure if it would work outside of a plugin.&lt;/div&gt;&lt;br /&gt;CSS - This CSS should be outside of the php tags&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css; html-script: true"&gt;&amp;lt;style&amp;gt;&lt;br /&gt;/* Simulate the input buttons styles */&lt;br /&gt;#ed_toolbar button {&lt;br /&gt; display: inline-block;&lt;br /&gt; vertical-align: middle;&lt;br /&gt; margin: 0;&lt;br /&gt; padding: 0;&lt;br /&gt; min-width: 26px;&lt;br /&gt; height: 24px;&lt;br /&gt; -moz-border-radius: 3px;&lt;br /&gt; -webkit-border-radius: 3px;&lt;br /&gt; border-radius: 3px;&lt;br /&gt; border: #c3c3c3 1px solid;&lt;br /&gt; background: url() repeat-x;&lt;br /&gt;}&lt;br /&gt;#ed_toolbar button:hover {&lt;br /&gt; border: #aaa 1px solid;&lt;br /&gt; background: #ddd;&lt;br /&gt;}&lt;br /&gt;/* toolbar button images in span */&lt;br /&gt;#ed_toolbar button span {&lt;br /&gt; display: inline-block;&lt;br /&gt; background: transparent no-repeat center center;&lt;br /&gt; padding: 4px 2px;&lt;br /&gt; width: 16px;&lt;br /&gt; height: 16px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* toolbar custom button image */&lt;br /&gt;#_custom span {&lt;br /&gt; background-image: url(/wp-content/plugins/my-plugin-directory/my-plugin-icon.png);&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;PHP - Add this to your plugin php&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: php"&gt;&amp;lt;?php&lt;br /&gt;add_action('admin_footer', 'my_plugin_add_button');&lt;br /&gt;&lt;br /&gt;function my_plugin_add_button(){&lt;br /&gt;echo &amp;lt;&amp;lt;&amp;lt;EOT&lt;br /&gt;&amp;lt;script&amp;gt;/* &amp;lt;![CDATA[ */&lt;br /&gt;var j, n,&lt;br /&gt; last = edButtons.length,&lt;br /&gt; tbar = '';&lt;br /&gt;&lt;br /&gt;// add a new editor button as follows:&lt;br /&gt;// edButtons[edButtons.length] = new edButton('BUTTON ID', 'BUTTON TEXT', 'OPENING TAG', 'CLOSING TAG', 'ACCESSKEY');&lt;br /&gt;// Example: edButtons[edButtons.length] = new edButton('_h1', 'H1', '&amp;lt;h1&amp;gt;', '&amp;lt;/h1&amp;gt;', -1);&lt;br /&gt;edButtons[edButtons.length] = new edButton('_h1', 'h1', '&amp;lt;h1&amp;gt;', '&amp;lt;/h1&amp;gt;', "h");&lt;br /&gt;edButtons[edButtons.length] = new edButton('_h2', 'h2', '&amp;lt;h2&amp;gt;', '&amp;lt;/h2&amp;gt;', -1);&lt;br /&gt;edButtons[edButtons.length] = new edButton('_h3', 'h3', '&amp;lt;h3&amp;gt;', '&amp;lt;/h3&amp;gt;', -1);&lt;br /&gt;edButtons[edButtons.length] = new edButton('_h4', 'h4', '&amp;lt;h4&amp;gt;', '&amp;lt;/h4&amp;gt;', -1);&lt;br /&gt;edButtons[edButtons.length] = new edButton('_h5', 'h5', '&amp;lt;h5&amp;gt;', '&amp;lt;/h5&amp;gt;', -1);&lt;br /&gt;edButtons[edButtons.length] = new edButton('_h6', 'h6', '&amp;lt;h6&amp;gt;', '&amp;lt;/h6&amp;gt;', -1);&lt;br /&gt;edButtons[edButtons.length] = new edButton('_custom', '&amp;lt;button&amp;gt;', '[myplugin_short_code]', '', -1);&lt;br /&gt;&lt;br /&gt;// Don't change anything below&lt;br /&gt;// ***************************&lt;br /&gt;for ( j = last; j &amp;lt; edButtons.length; j++) {&lt;br /&gt; n = edButtons[j];&lt;br /&gt; if (/&amp;lt;button&amp;gt;/g.test(n.display)) {&lt;br /&gt;  // matched opening tag =&amp;gt; add a button&lt;br /&gt;  tbar += '&amp;lt;button id="' + n.id + '" type="button" class="ed_button" onclick="edInsertTag(edCanvas, ' + j + ');"&amp;gt;&amp;lt;span&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/button&amp;gt;';&lt;br /&gt; } else {&lt;br /&gt;  // add an input&lt;br /&gt;  tbar += '&amp;lt;input type="button" id="' + n.id + '" accesskey="' + n.access + '" class="ed_button" onclick="edInsertTag(edCanvas,' + j + ');" value="' + n.display.replace(/\"/g,'\"') + '" /&amp;gt;';&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;document.getElementById('ed_toolbar').innerHTML += tbar;&lt;br /&gt;/* ]]&amp;gt; */&amp;lt;/script&amp;gt;&lt;br /&gt;EOT;&lt;br /&gt;}&lt;br /&gt;?&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-2829457324923117051?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/2829457324923117051/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/07/adding-wordpress-quicktag-buttons-to-wp.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2829457324923117051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2829457324923117051'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/07/adding-wordpress-quicktag-buttons-to-wp.html' title='Adding WordPress Quicktag Buttons to a WP Plugin'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-NoGIy_lHP-E/ThzoaH2GGWI/AAAAAAAAADU/Lsp82SSBir0/s72-c/new-post-before.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-5902717019844627082</id><published>2011-06-18T11:24:00.009-05:00</published><updated>2012-01-25T21:41:48.016-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='tablesorter'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery Tablesorter, The Missing Docs</title><content type='html'>&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="top"&gt;&lt;/a&gt;&lt;br /&gt;The Missing Docs for &lt;a href="http://tablesorter.com/docs/index.html"&gt;jQuery Tablesorter 2.0&lt;/a&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#defaults"&gt;Defaults&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#methods"&gt;Methods&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#events"&gt;Events&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;hr /&gt;&lt;div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;These docs have been incorporated into my&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;a href="http://mottie.github.com/tablesorter/docs/"&gt;Github fork of Tablesorter&lt;/a&gt;.&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;hr style="text-align: center;" /&gt;&lt;h4&gt;All Defaults&lt;/h4&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="defaults"&gt;&lt;/a&gt;&lt;br /&gt;&lt;table border="1" cellspacing="0" class="keytable"&gt;&lt;tbody&gt;&lt;tr align="left"&gt;&lt;th colspan="2"&gt;Appearance&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="cssHeader"&gt;&lt;/a&gt;cssHeader: "header"&lt;/td&gt;&lt;td&gt;The CSS style used to style the header in its unsorted state.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="cssAsc"&gt;&lt;/a&gt;cssAsc: "headerSortUp"&lt;/td&gt;&lt;td&gt;The CSS style used to style the header when sorting ascending.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="cssDesc"&gt;&lt;/a&gt;cssDesc: "headerSortDown"&lt;/td&gt;&lt;td&gt;The CSS style used to style the header when sorting descending.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#cssChildRow"&gt;cssChildRow&lt;/a&gt;: "expand-child"&lt;/td&gt;&lt;td&gt;This allows you to add a child row that is always attached to the parent. See the &lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#cssChildRow"&gt;children rows&lt;/a&gt; section below.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="white-space: nowrap;"&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#widgetZebra"&gt;widgetZebra&lt;/a&gt;: { css: ["even", "odd"] }&lt;/td&gt;&lt;td&gt;Set the CSS classes used for zebra striping the table. See the &lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#widgetZebra"&gt;updating zebra striping&lt;/a&gt; section below.\ &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="widthFixed"&gt;&lt;/a&gt;widthFixed: false&lt;/td&gt;&lt;td&gt;Indicates if tablesorter should apply fixed widths to the table columns. This is useful for the Pager companion. Requires the jQuery dimension plugin to work. See the &lt;a href="http://tablesorter.com/docs/example-pager.html"&gt;main demo page&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#onRenderHeader"&gt;onRenderHeader&lt;/a&gt;: null&lt;/td&gt;&lt;td&gt;This function is called when classes are added to the th tags. You can use this to append HTML to each header tag. See the &lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#onRenderHeader"&gt;Render Header&lt;/a&gt; section below.&lt;/td&gt;&lt;/tr&gt;&lt;tr align="left"&gt;&lt;th colspan="2"&gt;Sort Options&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sortInitialOrder: "asc"&lt;/td&gt;&lt;td&gt;A string of the inital sorting order can be "asc" or "desc". This is overridden bt the &lt;code&gt;sortList&lt;/code&gt; settings.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#sortForce"&gt;sortForce&lt;/a&gt;: null&lt;/td&gt;&lt;td&gt;Use to add an additional forced sort that is &lt;b&gt;prepended&lt;/b&gt; to &lt;code&gt;sortList&lt;/code&gt;. For example, &lt;code&gt;sortForce: [[0,0]]&lt;/code&gt; will sort the first column in ascending order. See the &lt;a href="http://tablesorter.com/docs/example-option-sort-force.html"&gt;main demo page&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#sortList"&gt;sortList&lt;/a&gt;: []&lt;/td&gt;&lt;td&gt;Add an array of the order the table should be initially sorted; e.g. &lt;code&gt;sortList: [[0,1], [1,0]]&lt;/code&gt;. The first part "[0,1]" will sort the first column (zero based index) in decending order and the second part "[1,0]" is to sort the second column in ascending order. See the &lt;a href="http://tablesorter.com/docs/example-option-sort-list.html"&gt;main demo page&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#sortAppend"&gt;sortAppend&lt;/a&gt;: null&lt;/td&gt;&lt;td&gt;Use to add an additional default sorting rule, that is &lt;b&gt;appended&lt;/b&gt; to the &lt;code&gt;sortList&lt;/code&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr align="left"&gt;&lt;th colspan="2"&gt;Parsers &amp;amp; Widgets&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#headers"&gt;headers&lt;/a&gt;: {}&lt;/td&gt;&lt;td&gt;See the &lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#parsers"&gt;Change how you sort a column&lt;/a&gt; section below or see the &lt;a href="http://tablesorter.com/docs/example-options-headers.html"&gt;main demo page&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#textExtraction"&gt;textExtraction&lt;/a&gt;: "simple"&lt;/td&gt;&lt;td&gt;See the &lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#textExtraction"&gt;Text Extraction&lt;/a&gt; section below or see the &lt;a href="http://tablesorter.com/docs/example-option-sort-key.html"&gt;main demo page&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="sortLocaleCompare"&gt;&lt;/a&gt;sortLocaleCompare: true&lt;/td&gt;&lt;td&gt;Boolean flag indicating whenever to use String.localeCampare method or not. This is only used when comparing text strings.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#parsers"&gt;parsers&lt;/a&gt;: {}&lt;/td&gt;&lt;td&gt;Internal list of all of the parsers. See a &lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#parsers"&gt;complete list of parsers&lt;/a&gt; below.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#widgets"&gt;widgets&lt;/a&gt;: []&lt;/td&gt;&lt;td&gt;Initialize widgets using this option (e.g. &lt;code&gt;widgets : ['zebra']&lt;/code&gt;, or custom widgets &lt;code&gt;widgets: ['zebra', 'myCustomWidget']&lt;/code&gt;; see this demo on &lt;a href="http://tablesorter.com/docs/example-widgets.html"&gt;how to add a custom widget&lt;/a&gt;.)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="selectorHeaders"&gt;&lt;/a&gt;selectorHeaders: 'thead th'&lt;/td&gt;&lt;td&gt;jQuery selectors used to find the header cells. You can change this, but the table will still need the required thead and tbody before this plugin will work properly.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="headerList"&gt;&lt;/a&gt;headerList: []&lt;/td&gt;&lt;td&gt;Internal list of each header element as selected using jQuery selectors in the &lt;code&gt;selectorHeaders&lt;/code&gt; option.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#dateFormat"&gt;dateFormat&lt;/a&gt;: "us"&lt;/td&gt;&lt;td&gt;Set the date format. See the &lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#dateFormat"&gt;dataFormat&lt;/a&gt; section below.&lt;/td&gt;&lt;/tr&gt;&lt;tr align="left"&gt;&lt;th colspan="2"&gt;Interaction&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="sortMultiSortKey"&gt;&lt;/a&gt;sortMultiSortKey: "shiftKey"&lt;/td&gt;&lt;td&gt;The key used to select more than one column for multi-column sorting. Defaults to the shift key. Other options might be ctrlKey, altKey. See the &lt;a href="http://tablesorter.com/docs/example-option-sort-key.html"&gt;main demo page&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="cancelSelection"&gt;&lt;/a&gt;cancelSelection: true&lt;/td&gt;&lt;td&gt;Indicates if tablesorter should disable selection of text in the table header (TH). Makes header behave more like a button.&lt;/td&gt;&lt;/tr&gt;&lt;tr align="left"&gt;&lt;th colspan="2"&gt;Unknown&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="decimal"&gt;&lt;/a&gt;decimal: '/\.|\,/g'&lt;/td&gt;&lt;td&gt;Regex to find the decimal "." for U.S. format and "," for European format... but I can't find it being used anywhere in the plugin.&lt;/td&gt;&lt;/tr&gt;&lt;tr align="left"&gt;&lt;th colspan="2"&gt;Debugging&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="debug"&gt;&lt;/a&gt;debug: false&lt;/td&gt;&lt;td&gt;Boolean flag indicating if tablesorter should display debuging information usefull for development. This displays information in the console, if available, or in alerts. See the &lt;a href="http://tablesorter.com/docs/example-option-debug.html"&gt;main demo page&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="update-default"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Update Default Settings&lt;/h4&gt;Update any of the default settings above using this format:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(selector).data("tablesorter").{default name} = newValue;&lt;/pre&gt;&lt;/blockquote&gt;Here are a few examples:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;// Change sortForce&lt;br /&gt;$("table").data("tablesorter").sortForce = [[1,0]];&lt;br /&gt;// it appears that the only way to update the table is to resort it&lt;br /&gt;$("table").trigger("sorton", [[0,1]]);&lt;br /&gt;// Add zebra sorting after the table has initialized&lt;br /&gt;$("table").data("tablesorter").widgets = ["zebra"];&lt;br /&gt;// there is a method to apply widgets!&lt;br /&gt;$("table").trigger("applyWidgets");&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="cssChildRow"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Child Rows&lt;/h4&gt;To add a row that remains attached to a parent row, add the "expand-child" class to the row.&lt;br /&gt;&lt;br /&gt;You can add some scripting to hide these child rows and have them expand when you click on a link; this is the original reason for the css name.&lt;br /&gt;&lt;br /&gt;Here is the &lt;a href="http://www.pengoworks.com/workshop/jquery/tablesorter/tablesorter.htm"&gt;original mod page&lt;/a&gt;, the code was added into the TableSorter core but remains undocumented.&lt;br /&gt;&lt;br /&gt;This makes the tablesorter plugin keep these rows together. This css class can be changed using the "cssChildRow" option.&lt;br /&gt;&lt;br /&gt;Here is some example markup:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;table width="100%" border="1"&amp;gt;&lt;br /&gt;  &amp;lt;thead&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;th&amp;gt;Item #&amp;lt;/th&amp;gt;&lt;br /&gt;      &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;      &amp;lt;th&amp;gt;Available&amp;lt;/th&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;/thead&amp;gt;&lt;br /&gt;  &amp;lt;tbody&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;12345&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;Toy Car&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;5&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr class="expand-child"&amp;gt; &amp;lt;!-- this row will remain attached to the above row, and not sort separately --&amp;gt;&lt;br /&gt;      &amp;lt;td colspan="3"&amp;gt;&lt;br /&gt;        It's a toy car!&lt;br /&gt;      &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;23456&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;Toy Plane&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;2&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr class="expand-child"&amp;gt; &amp;lt;!-- this row will remain attached to the above row, and not sort separately --&amp;gt;&lt;br /&gt;      &amp;lt;td colspan="3"&amp;gt;&lt;br /&gt;        It's a toy plane!&lt;br /&gt;      &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr class="expand-child"&amp;gt; &amp;lt;!-- this row will remain attached to the above two rows, and not sort separately --&amp;gt;&lt;br /&gt;      &amp;lt;td colspan="3"&amp;gt;&lt;br /&gt;        and it flies!&lt;br /&gt;      &amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;/tbody&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="widgets"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="widgetZebra"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Update Zebra Striping After Sorting&lt;/h4&gt;Actually the zebra striping widget does this for you automatically.&lt;br /&gt;&lt;br /&gt;By default the odd and even rows are styled using "odd" and "even" class names (&lt;code&gt;{ css: [ "even", "odd" ] }&lt;/code&gt;).&lt;br /&gt;&lt;br /&gt;Change these css class names using the &lt;code&gt;widgetZebra&lt;/code&gt; option as follows:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(function(){&lt;br /&gt;  $("table").tablesorter({&lt;br /&gt;    widgets: ["zebra"], // initialize zebra striping of the table&lt;br /&gt;    widgetZebra: { css: [ "normal-row", "alt-row" ] }&lt;br /&gt;  });&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="onRenderHeader"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Modify the Header Markup&lt;/h4&gt;The &lt;code&gt;onRenderHeader&lt;/code&gt; option allows you to add a function that which can modify the HTML of each header tag. In the example below, the header cell (&lt;code&gt;th&lt;/code&gt;) content is wrapped with a span tag to allow for better styling (&lt;a href="http://www.pengoworks.com/workshop/jquery/tablesorter/tablesorter.htm"&gt;source&lt;/a&gt;).&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(function(){&lt;br /&gt;  $("table").tablesorter({&lt;br /&gt;    onRenderHeader: function (){&lt;br /&gt;      this.wrapInner('&lt;span class="roundedCorners"&gt;&lt;/span&gt;');&lt;br /&gt;    }&lt;br /&gt;  });&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;and you'll end up with this (only the thead is shown):&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;thead&amp;gt;&lt;br /&gt;  &amp;lt;tr&amp;gt;&lt;br /&gt;    &amp;lt;th class="header"&amp;gt;&amp;lt;span class="roundedCorners"&amp;gt;Column 1&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;    &amp;lt;th class="header"&amp;gt;&amp;lt;span class="roundedCorners"&amp;gt;Column 2&amp;lt;/span&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;  &amp;lt;/tr&amp;gt;&lt;br /&gt;&amp;lt;/thead&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="parsers"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="headers"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Change how you sort a column&lt;/h4&gt;The plugin attempts to detect the type of data that is contained in a column, but if it can't figure it out then it defaults to alphabetical.&lt;br /&gt;&lt;br /&gt;You can easily override this by setting the header argument (or column parser).&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(function(){&lt;br /&gt;  $("table").tablesorter({&lt;br /&gt;    headers: {&lt;br /&gt;      0: { sorter: false },      // disable first column&lt;br /&gt;      1: { sorter: "digit" },    // sort second column numerically&lt;br /&gt;      4: { sorter: "shortDate" } // sort the fifth column by date (e.g. mm/dd/yyyy if the date format is "us")&lt;br /&gt;    }&lt;br /&gt;  });&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;*Note* the header number starts with zero (zero based index).&lt;br /&gt;&lt;br /&gt;Here is a list of available sorter values/parsers:&lt;br /&gt;&lt;br /&gt;&lt;table border="1" cellspacing="0" class="keytable"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;sorter: false&lt;/td&gt;&lt;td&gt;disable sort for this column.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sorter: "text"&lt;/td&gt;&lt;td&gt;Sort alphabetically.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sorter: "digit"&lt;/td&gt;&lt;td&gt;Sort numerically.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sorter: "currency"&lt;/td&gt;&lt;td&gt;Sort by currency value (supports "£$€").&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sorter: "ipAddress"&lt;/td&gt;&lt;td&gt;Sort by IP Address.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sorter: "url"&lt;/td&gt;&lt;td&gt;Sort by url.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sorter: "isoDate"&lt;/td&gt;&lt;td&gt;Sort by ISO date (YYYY-MM-DD or YYYY/MM/DD).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sorter: "percent"&lt;/td&gt;&lt;td&gt;Sort by percent.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sorter: "usLongDate"&lt;/td&gt;&lt;td&gt;Sort by date (U.S. Standard, e.g. Jan 18, 2001 9:12 AM).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sorter: "shortDate"&lt;/td&gt;&lt;td&gt;Sort by a shorten date (see "dateFormat").&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sorter: "time"&lt;/td&gt;&lt;td&gt;Sort by time (23:59 or 12:59 pm).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sorter: "metadata"&lt;/td&gt;&lt;td&gt;Sort by the sorter value in the metadata - requires the metadata plugin.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="dateFormat"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Change the Date Format (dateFormat)&lt;/h4&gt;&lt;table border="1" cellspacing="0" class="keytable"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;"us"&lt;/td&gt;&lt;td&gt;"mm-dd-yyyy" or "mm/dd/yyyy"&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;"uk"&lt;/td&gt;&lt;td&gt;"dd-mm-yyyy" or "dd/mm/yyyy"&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;"dd/mm/yy" or&lt;br /&gt;"dd-mm-yy"&lt;/td&gt;&lt;td&gt;Sort by short year (it appears to sort by day first, not the year)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="resort"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="sortForce"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="sortList"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="sortAppend"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Change the Sorted Columns&lt;/h4&gt;There are three options to determine the sort order and this is the order of priority:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;code&gt;sortForce&lt;/code&gt; forces the user to have this/these column(s) sorted first (null by default).&lt;/li&gt;&lt;li&gt;&lt;code&gt;SortList&lt;/code&gt; is the initial sort order of the columns.&lt;/li&gt;&lt;li&gt;&lt;code&gt;SortAppend&lt;/code&gt; is the default sort that is added to the end of the users sort selection (null by default).&lt;/li&gt;&lt;/ol&gt;The value of these sort options is an array of arrays and can include one or more columns. The format is an array of instructions for per-column sorting and direction in the format: &lt;code&gt;[[columnIndex, sortDirection], ... ]&lt;/code&gt; where &lt;code&gt;columnIndex&lt;/code&gt; is a zero-based index for your columns left-to-right and &lt;code&gt;sortDirection&lt;/code&gt; is 0 for Ascending and 1 for Descending. A valid argument that sorts ascending first by column 1 and then column 2 looks like: [[0,0],[1,0]]&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(function(){&lt;br /&gt;  $("table").tablesorter({&lt;br /&gt;    sortForce  : [[0,0]],        // always sort first column first&lt;br /&gt;    sortList   : [[1,0], [2,0]], // initial sort columns (2nd and 3rd)&lt;br /&gt;    sortAppend : [[3,0]]         // always add this sort on the end (4th column)&lt;br /&gt;  });&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="textExtraction"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Text Extraction&lt;/h4&gt;This is demonstrated in the &lt;a href="http://tablesorter.com/docs/example-option-text-extraction.html"&gt;Dealing with markup inside cells&lt;/a&gt; demo page, but the example uses vanilla javascript to find the desired text, like this:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(function(){&lt;br /&gt;  $("table").tablesorter({&lt;br /&gt;    textExtraction: function(node) {&lt;br /&gt;      return node.childNodes[0].childNodes[0].innerHTML;&lt;br /&gt;    }&lt;br /&gt;  });&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;But you could make your life easier and just make the node into a jQuery object and then "find" what you need:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(function(){&lt;br /&gt;  $("table").tablesorter({&lt;br /&gt;    textExtraction: function(node) {&lt;br /&gt;      return $(node).find("span:last").text();&lt;br /&gt;    }&lt;br /&gt;  });&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;Now if the text you are finding in the script above is say a number, then just include the headers sorter option to specify how to sort it. Also in this example, we will specify that the special textExtraction code is only needed for the second column ("1" because we are using a zero-based index). All other columns will ignore this textExtraction function. &lt;br /&gt;&lt;span style="color: red;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;&lt;b&gt;*NOTE*&lt;/b&gt;&lt;/span&gt;&amp;nbsp;When writing this post, I didn't realize that the textExtraction option did not allow defining it per column, as shown below, but this has been fixed in the forked github version - &lt;a href="http://mottie.github.com/tablesorter/docs/example-option-text-extraction.html"&gt;example&lt;/a&gt;.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(function(){&lt;br /&gt;  $("table").tablesorter({&lt;br /&gt;    textExtraction: {&lt;br /&gt;      1: function(node) {&lt;br /&gt;           return $(node).find("span:last").text();&lt;br /&gt;      }&lt;br /&gt;    },&lt;br /&gt;    headers: {&lt;br /&gt;      1: { sorter : "digit" }&lt;br /&gt;    }&lt;br /&gt;  });&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;hr /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="methods"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Methods&lt;/h4&gt;See examples of each further down&lt;br /&gt;&lt;table border="1" cellspacing="0" class="keytable"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#sorton"&gt;sorton&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Resort the table using new sort parameters.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#update"&gt;update&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Update the stored tablesorter data and the table.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#appendCache"&gt;appendCache&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Update a table that has had its data dynamically updated; used in conjunction with "update"&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#updateCell"&gt;updateCell&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Update a table cell in the tablesorter data.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#applyWidgetId"&gt;applyWidgetId&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Apply a widget (wrapped in square brackets) to the table one time only.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#applyWidgets"&gt;applyWidgets&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Apply previously selected widgets to the table - will update the widget with new sort.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="sorton"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Resort the table - "sorton" method&lt;/h4&gt;See the full example in the tablesorter docs: &lt;a href="http://tablesorter.com/docs/example-trigger-sort.html"&gt;Sort table using a link outside the table&lt;/a&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;// Choose a new sort order&lt;br /&gt;var sort = [[0,0],[2,0]];&lt;br /&gt;// Note that the sort value below is inside of another array (inside another set of square brackets)&lt;br /&gt;$("table").trigger("sorton", [sort]);&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="update"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Update the Table&lt;/h4&gt;See the full example in the tablesorter docs: &lt;a href="http://tablesorter.com/docs/example-ajax.html"&gt;Appending table data with ajax&lt;/a&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;// Add new content&lt;br /&gt;$("table tbody").append(html);&lt;br /&gt;// let the plugin know that we made a update&lt;br /&gt;$("table").trigger("update");&lt;br /&gt;// set sorting column and direction, this will sort on the first and third column&lt;br /&gt;var sorting = [[2,1],[0,0]];&lt;br /&gt;// sort on the first column&lt;br /&gt;$("table").trigger("sorton", [sorting]);&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="appendCache"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Append Cache&lt;/h4&gt;If you dynamically change the table content, more than just one cell like in the "updateCell" example above, you may possibly have to trigger two events: "update" and "appendCache".&lt;br /&gt;&lt;br /&gt;This answer is from a &lt;a href="http://stackoverflow.com/questions/247305/using-jquery-tablesorter-on-dynamically-modified-table"&gt;StackOverflow answer&lt;/a&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;// Table data was just dynamically updated&lt;br /&gt;$(table)&lt;br /&gt;  .trigger("update")&lt;br /&gt;  .trigger("appendCache");&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="updateCell"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Update a Table Cell&lt;/h4&gt;Example from these alternate tablesorter docs: &lt;a href="http://www.matalasco.com/childPages/docs/example-update-cell.html"&gt;Updating the table cache&lt;/a&gt; - the demo doesn't work, but I've tested the example code below and it works properly.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(function() {&lt;br /&gt;  $("table").tablesorter();&lt;br /&gt;  $("td.discount").click(function(){&lt;br /&gt;      // randomize a number&lt;br /&gt;      var discount = '$' + Math.round(Math.random() * Math.random() * 100) + '.' + ('0' + Math.round(Math.random() * Math.random() * 100)).slice(-2);&lt;br /&gt;      $(this).text(discount);&lt;br /&gt;      // update the table, so the tablesorter plugin knows its value&lt;br /&gt;      $("table").trigger("updateCell",[this]);&lt;br /&gt;      // set sorting column and direction, this will sort on the first and third column&lt;br /&gt;      var sorting = [[3,1]];&lt;br /&gt;      // sort on the first column&lt;br /&gt;      $("table").trigger("sorton",[sorting]);&lt;br /&gt;      return false;&lt;br /&gt;  });&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;table class="tablesorter" cellspacing="1"&amp;gt;&lt;br /&gt;  &amp;lt;thead&amp;gt;&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;th&amp;gt;first name&amp;lt;/th&amp;gt;&lt;br /&gt;      &amp;lt;th&amp;gt;last name&amp;lt;/th&amp;gt;&lt;br /&gt;      &amp;lt;th&amp;gt;age&amp;lt;/th&amp;gt;&lt;br /&gt;      &amp;lt;th&amp;gt;total&amp;lt;/th&amp;gt;&lt;br /&gt;      &amp;lt;th&amp;gt;discount&amp;lt;/th&amp;gt;&lt;br /&gt;      &amp;lt;th&amp;gt;date&amp;lt;/th&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;/thead&amp;gt;&lt;br /&gt;  &amp;lt;tbody&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;peter&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;parker&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;28&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="discount"&amp;gt;$9.99&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;20%&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;jul 6, 2006 8:14 am&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;john&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;hood&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;33&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="discount"&amp;gt;$19.99&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;25%&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;dec 10, 2002 5:14 am&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;clark&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;kent&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;18&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="discount"&amp;gt;$15.89&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;44%&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;jan 12, 2003 11:14 am&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;bruce&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;almighty&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;45&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="discount"&amp;gt;$153.19&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;44%&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;jan 18, 2001 9:12 am&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;    &amp;lt;tr&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;bruce&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;evans&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;22&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td class="discount"&amp;gt;$13.19&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;11%&amp;lt;/td&amp;gt;&lt;br /&gt;      &amp;lt;td&amp;gt;jan 18, 2007 9:12 am&amp;lt;/td&amp;gt;&lt;br /&gt;    &amp;lt;/tr&amp;gt;&lt;br /&gt;  &amp;lt;/tbody&amp;gt;&lt;br /&gt;&amp;lt;/table&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="applyWidgetId"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Apply a New Widget "applyWidgetId"&lt;/h4&gt;Apply a widget to the table. In this example, we apply the zebra striping to the table after it has been initialized.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(function(){&lt;br /&gt;  // initialize tablesorter without the widget&lt;br /&gt;  $("table").tablesorter();&lt;br /&gt;  &lt;br /&gt;  // click a button to apply the zebra striping&lt;br /&gt;  $("button").click(function(){&lt;br /&gt;    $('table').trigger('applyWidgetId', ['zebra']);&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="applyWidgets"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Apply Chosen Widgets "applyWidgets"&lt;/h4&gt;Reapply a widget to the table. In this example, we apply the zebra striping to the table after it has been initialized.&lt;br /&gt;&lt;br /&gt;This is basically an alternate method to the "applyWidgetId", but in the example below you can add or remove widgets from the chosen list.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;// Update the list of widgets to apply to the table (add or remove)&lt;br /&gt;$("table").data("tablesorter").widgets = ["zebra"];&lt;br /&gt;$("table").trigger('applyWidgets');&lt;/pre&gt;&lt;/blockquote&gt;&lt;hr /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="events"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="sortStart"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=5902717019844627082" id="sortEnd"&gt;&lt;/a&gt;&lt;br /&gt;&lt;h4&gt;Triggered Events&lt;/h4&gt;&lt;table border="1" cellspacing="0" class="keytable"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;sortStart&lt;/td&gt;&lt;td&gt;This event fires when the tablesorter plugin is about to start resorting the table.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sortEnd&lt;/td&gt;&lt;td&gt;This event fires when the tablesorter plugin has completed resorting the table.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;Bind to the "sortStart" and/or the "sortEnd" events as shown on the &lt;a href="http://tablesorter.com/docs/example-triggers.html"&gt;example page&lt;/a&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(function(){&lt;br /&gt;  // initialize the tablesorter plugin&lt;br /&gt;  $("table").tablesorter();&lt;br /&gt;  // bind to sort events&lt;br /&gt;  $("table")&lt;br /&gt;    .bind("sortStart",function() {&lt;br /&gt;      $("#overlay").show();&lt;br /&gt;    })&lt;br /&gt;    .bind("sortEnd",function() {&lt;br /&gt;      $("#overlay").hide();&lt;br /&gt;    });&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;Or here is another example from &lt;a href="http://stackoverflow.com/questions/5265418/tablesorter-jquery-hack"&gt;StackOverflow&lt;/a&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(function(){&lt;br /&gt;  $("table")&lt;br /&gt;    .tablesorter()  &lt;br /&gt;    .bind("sortEnd", function(){  &lt;br /&gt;      $("table tr").removeClass("block");&lt;br /&gt;      // adds the "block" class to every 8th row&lt;br /&gt;      $("table tr:nth-child(8)").addClass("block");&lt;br /&gt;    });&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-5902717019844627082?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/5902717019844627082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html#comment-form' title='46 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/5902717019844627082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/5902717019844627082'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/06/jquery-tablesorter-missing-docs.html' title='jQuery Tablesorter, The Missing Docs'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>46</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-7412431985453351585</id><published>2011-06-06T18:25:00.000-05:00</published><updated>2011-06-06T18:25:50.018-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Equalizer</title><content type='html'>This script was first written by &lt;a href="http://stephenakins.blogspot.com/2011/01/uniform-div-heights-for-liquid-css-p.html"&gt;Stephen Akins&lt;/a&gt; to equalize column heights in multiple rows. Chris Coyier of &lt;a href="http://css-tricks.com/"&gt;CSS Tricks&lt;/a&gt; then &lt;a href="http://css-tricks.com/equal-height-blocks-in-rows/"&gt;posted an update&lt;/a&gt; which allowed the heights to adjust while resizing a page. I simply debugged, added a few improvements (like minimum and maximum height, an idea from &lt;a href="https://github.com/madmike1029/matchHeights"&gt;Mike Avello's plugin&lt;/a&gt;) and turned it into a plugin.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://github.com/Mottie/Equalizer" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="276" src="http://4.bp.blogspot.com/-PNbyaefhFEE/Te1fMRlqPoI/AAAAAAAAADQ/34iucnMs01c/s400/Equalizer.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In the screen shot above, there are three blocks containing three columns. The three blocks have identical HTML. The left block is unmodified. The center block has &lt;a href="https://github.com/Mottie/Equalizer"&gt;Equalizer&lt;/a&gt; applied with a max height setting; and each block that exceeds the max height has a css class applied which sets the overflow to auto and adds the different background color for the demo, but you can do whatever you want via the css. And the right block has &lt;a href="https://github.com/Mottie/Equalizer"&gt;Equalizer&lt;/a&gt; applied with a minimum height setting; you should be able to see in the screen shot that the middle row of the right block has a minimum height set.&lt;br /&gt;&lt;br /&gt;Try out &lt;a href="http://mottie.github.com/Equalizer/"&gt;the demo&lt;/a&gt;, resize your browser window and see how everything changes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-7412431985453351585?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/7412431985453351585/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/06/equalizer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7412431985453351585'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7412431985453351585'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/06/equalizer.html' title='Equalizer'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-PNbyaefhFEE/Te1fMRlqPoI/AAAAAAAAADQ/34iucnMs01c/s72-c/Equalizer.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-543097403803497690</id><published>2011-05-18T16:18:00.001-05:00</published><updated>2011-05-18T16:19:25.710-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>The Base Tag</title><content type='html'>Whenever someone asks me to help troubleshoot a problem with their site, if I can't immediately see the problem or fix it using Firebug, I download the page as an HTML only file. Then you have to deal with pages that have relative links to code, style sheets or images:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;link href="/css/main.css" rel="stylesheet"&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;which you will probably have to use your editor to find and replace each one. A big time saver is using the apparently less known &lt;a href="http://www.w3.org/TR/html401/struct/links.html#edef-BASE"&gt;base tag&lt;/a&gt;, in which you add the base URL to the site.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;base href="http://some-site.com"&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;Then if you need to modify a file for testing, just download it to your computer (e.g. your desktop), open it in your browser, then copy the URL. Replace the file's url with this one, since the relative URL will look to the base tag instead of your desktop:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;link href="file:///C:/Desktop/main.css"&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;Now when you open the page in your browser, it should look exactly like the online page.&amp;nbsp; :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-543097403803497690?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/543097403803497690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/05/base-tag.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/543097403803497690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/543097403803497690'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/05/base-tag.html' title='The Base Tag'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-2641781977623065598</id><published>2011-05-15T22:19:00.002-05:00</published><updated>2011-05-15T22:32:06.347-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jQuery selectors'/><title type='text'>jQuery find/replace text without destroying DOM elements</title><content type='html'>I found this question on &lt;a href="http://stackoverflow.com/questions/6012163/whats-a-good-alternative-to-html-rewriting"&gt;StackOverflow&lt;/a&gt; on how to replace text without destroying event handlers, DOM nodes and such. He just wanted to replace a name inside a block of HTML. The name could be inside of an LI, A (link), p or div element, etc. Here is the example HTML markup provided:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css; html-script: true"&gt;&amp;lt;div id="test"&amp;gt;&lt;br /&gt;    &amp;lt;h1&amp;gt;An article about John&amp;lt;/h1&amp;gt;&lt;br /&gt;    &amp;lt;p&amp;gt;The first paragraph is about John.&amp;lt;/p&amp;gt;&lt;br /&gt;    &amp;lt;p&amp;gt;The second paragraph contains a &amp;lt;a href="#"&amp;gt;link to John's CV&amp;lt;/a&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;    &amp;lt;div class="comments"&amp;gt;&lt;br /&gt;        &amp;lt;h2&amp;gt;Comments to John's article&amp;lt;/h2&amp;gt;&lt;br /&gt;        &amp;lt;ul&amp;gt;&lt;br /&gt;            &amp;lt;li&amp;gt;Some user asks John a question.&amp;lt;/li&amp;gt;&lt;br /&gt;            &amp;lt;li&amp;gt;John responds.&amp;lt;/li&amp;gt;&lt;br /&gt;        &amp;lt;/ul&amp;gt;&lt;br /&gt;    &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;You couldn't simply grab the html() and replace the text because it the result replaces all of the elements inside of "#test" and thus breaks all previously attached functions (click, hover, etc.) or any entered form data inside of inputs (&lt;a href="http://jsfiddle.net/Mottie/ma8Td/"&gt;demo&lt;/a&gt;):&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css;"&gt;$('#test').html(function(i, v) {&lt;br /&gt;    return v.replace(/John/g, 'Peter');    &lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;Instead you'd have to step through each text node, find the name, then replace it - it's quite a chunk of code. But I think I found a &lt;i&gt;quick and dirty&lt;/i&gt; solution (&lt;a href="http://jsfiddle.net/Mottie/ma8Td/1/"&gt;demo&lt;/a&gt;) that works on the HTML markup above:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css;"&gt;$('#test :not(:has(*))').text(function(i, v) {&lt;br /&gt;  return v.replace(/John/g, 'Peter');    &lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;What this does is find all elements that don't have children, and replace the text inside.&lt;br /&gt;&lt;br /&gt;To understand what the selector is doing, first imagine the selector like this: "#test *:not(:has(*))". So reading it out in plain language would sound like this: Find the element with an ID of test, then find all elements within it (the first asterisk "*"), then find the opposite ":not()" of all elements that have children ":has(*)", meaning elements that don't have children. Then get the text and replace it.&lt;br /&gt;&lt;br /&gt;But this quick and dirty method does have an &lt;b&gt;important limitation&lt;/b&gt; which is that it would ignore text inside an element that has child elements. Here is an example of what I mean where the link is treated as a child element and thus the name is not replaced (nothing would change):&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css; html-script: true"&gt;&amp;lt;div id="test"&amp;gt;&lt;br /&gt;    &amp;lt;p&amp;gt;Visit John's &amp;lt;a href="blog.html"&amp;gt;blog&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;So, if you do have markup like as it is above, then just wrap the name in a span (&lt;a href="http://jsfiddle.net/Mottie/ma8Td/2/"&gt;demo&lt;/a&gt;):&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css; html-script: true"&gt;&amp;lt;div id="test"&amp;gt;&lt;br /&gt;    &amp;lt;p&amp;gt;Visit &amp;lt;span&amp;gt;John's&amp;lt;/span&amp;gt; &amp;lt;a href="blog.html"&amp;gt;blog&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;If you don't or can't wrap the name, then you can't use the quick and dirty method I posted above. You'll have to use this textWalk plugin by PatrickDW (&lt;a href="http://jsfiddle.net/v2yp5/4/"&gt;a demo&lt;/a&gt;, and see &lt;a href="http://stackoverflow.com/questions/6012163/whats-a-good-alternative-to-html-rewriting/6012345#6012345"&gt;his answer&lt;/a&gt; for full details) or check out &lt;a href="http://stackoverflow.com/questions/4060056/jquery-find-replace-without-changing-original-text/4060635#4060635"&gt;Bobince&lt;/a&gt;'s answer in this question for a similar method of walking through the text nodes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-2641781977623065598?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/2641781977623065598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/05/jquery-findreplace-text-without.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2641781977623065598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2641781977623065598'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/05/jquery-findreplace-text-without.html' title='jQuery find/replace text without destroying DOM elements'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-8752437499756300398</id><published>2011-05-02T11:57:00.000-05:00</published><updated>2011-05-02T11:57:26.775-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='Date'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>FancySelector</title><content type='html'>I just created FancySelector which replaces the standard select with a more visually appealing select. It allows you to scroll through the options with either the keyboard or mouse. Selecting multiple options is similar but not exactly the same as using a standard select. Please see the &lt;a href="https://github.com/Mottie/FancySelector/wiki"&gt;documentation&lt;/a&gt; for more details.&lt;br /&gt;&lt;br /&gt;There are two demos, a &lt;a href="http://mottie.github.com/FancySelector/"&gt;full screen demo&lt;/a&gt; (pictured below) and an &lt;a href="http://mottie.github.com/FancySelector/index2.html"&gt;inline selector demo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://github.com/Mottie/FancySelector" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="276" src="http://1.bp.blogspot.com/-Ujypyb1xrmQ/Tb7hDPNiNQI/AAAAAAAAADM/AqnprqjQEW8/s320/FancySelector.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This jQuery plugin is available for &lt;a href="https://github.com/Mottie/FancySelector"&gt;download on github&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-8752437499756300398?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/8752437499756300398/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/05/fancyselector.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/8752437499756300398'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/8752437499756300398'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/05/fancyselector.html' title='FancySelector'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Ujypyb1xrmQ/Tb7hDPNiNQI/AAAAAAAAADM/AqnprqjQEW8/s72-c/FancySelector.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-3826973738011415007</id><published>2011-04-23T11:02:00.000-05:00</published><updated>2011-04-23T11:02:54.719-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Visual Event Bookmarklet</title><content type='html'>I've been using &lt;a href="http://www.sprymedia.co.uk/article/Visual+Event"&gt;Visual Event bookmarklet&lt;/a&gt; to help quickly visualize which events are attached to a page while troubleshooting problems.&lt;br /&gt;&lt;br /&gt;I do have one problem with the script. It adds too many layers so you can't get to the lower layers. Here is a screen shot of how the last post I made looks with Visual Event (on the left) and the second screen shot is how it looks after the script is applied (on the right):&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-lV0oVG5uspY/TbL1wcqcngI/AAAAAAAAADA/uBbkhIxruY0/s1600/calendar-visualevent.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="296" src="http://2.bp.blogspot.com/-lV0oVG5uspY/TbL1wcqcngI/AAAAAAAAADA/uBbkhIxruY0/s400/calendar-visualevent.jpg" width="241" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="float: left;"&gt;&lt;a href="http://2.bp.blogspot.com/-x53Naa6Ry8I/TbL11WY8QRI/AAAAAAAAADI/N2AuAGSU6WY/s1600/calendar-visualevent-after.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-x53Naa6Ry8I/TbL11WY8QRI/AAAAAAAAADI/N2AuAGSU6WY/s1600/calendar-visualevent-after.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="clear: both;"&gt;I made a &lt;a href="https://gist.github.com/938670"&gt;github gist&lt;/a&gt; and a &lt;a href="http://jsfiddle.net/Mottie/G6K6Y/9/"&gt;jsFiddle demo&lt;/a&gt; of this script. To use it, just add the following script into the Firebug console to enable the script:&lt;/div&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;var veColors = [ 'black', 'orange', 'purple', 'green', 'blue', 'yellow', 'red' ],&lt;br /&gt; veColorLength= veColors.length - 1,&lt;br /&gt; veLayerIndex = 0;&lt;br /&gt; &lt;br /&gt;function showVeLayer(nxt){&lt;br /&gt; veLayerIndex += (nxt) ? 1 : -1;&lt;br /&gt; if (veLayerIndex &amp;gt; veColorLength) { veLayerIndex = 0; }&lt;br /&gt; if (veLayerIndex &amp;lt; 0) { veLayerIndex = veColorLength; }&lt;br /&gt;&lt;br /&gt; var veLayer =  $('.Event_bg_' + veColors[veLayerIndex]);&lt;br /&gt; if (veLayer.length === 0 ) { showVeLayer(nxt); return; }&lt;br /&gt;&lt;br /&gt; $('.Event_bg_' + veColors.join(', .Event_bg_')).hide();&lt;br /&gt; veLayer.show();&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;$(document).keyup(function(e){&lt;br /&gt; switch(e.which){&lt;br /&gt;  case 39: case 40: // right/down&lt;br /&gt;   showVeLayer(true);&lt;br /&gt;   break;&lt;br /&gt;  case 37: case 38: // left/up&lt;br /&gt;   showVeLayer();&lt;br /&gt;   break;&lt;br /&gt; }&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-3826973738011415007?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/3826973738011415007/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/04/visual-event-bookmarklet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3826973738011415007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3826973738011415007'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/04/visual-event-bookmarklet.html' title='Visual Event Bookmarklet'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-lV0oVG5uspY/TbL1wcqcngI/AAAAAAAAADA/uBbkhIxruY0/s72-c/calendar-visualevent.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-1003372296671188157</id><published>2011-04-23T10:03:00.003-05:00</published><updated>2011-11-14T04:55:51.119-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='fullCalendar'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>FullCalendar mini-sized</title><content type='html'>I've always liked Adam Shaw's &lt;a href="http://arshaw.com/fullcalendar/"&gt;FullCalendar&lt;/a&gt; plugin and while I was trolling Stackoverflow I found a question about how one would make a tiny version of the calendar. Gears started grinding and I figured that it could be done with just some basic CSS. YAY!! &lt;br /&gt;&lt;br /&gt;This is from the &lt;a href="http://stackoverflow.com/questions/5372328/tiny-version-of-fullcalendar/5372990#5372990"&gt;answer&lt;/a&gt; I posted on Stackoverflow:&lt;br /&gt;&lt;blockquote&gt;You can make a fully functional tiny version by adding a bit of CSS. I  had to add a "eventMouseover" callback to add the event name to the  title attribute, so you can see it's name in the tooltip.&lt;br /&gt;&lt;br /&gt;Here is a screen shot of the mini-sized calendar (200 x 225)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-xywACdwDmPw/TbLOX-Z_wiI/AAAAAAAAAC8/J2t6BvM8eP0/s1600/fullcalendar-mini.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-xywACdwDmPw/TbLOX-Z_wiI/AAAAAAAAAC8/J2t6BvM8eP0/s1600/fullcalendar-mini.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;br /&gt;And jsFiddle for a demo:&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://jsfiddle.net/Mottie/G6K6Y/1/embedded/result,js,html,css" style="height: 300px; width: 100%;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;So, just in case something happens to Stackoverflow and/or jsFiddle, here is the CSS and javascript that was used:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css"&gt;#calendar {&lt;br /&gt;    width: 200px;&lt;br /&gt;    margin: 0 auto;&lt;br /&gt;    font-size: 10px;&lt;br /&gt;}&lt;br /&gt;.fc-header-title h2 {&lt;br /&gt;    font-size: .9em;&lt;br /&gt;    white-space: normal !important;&lt;br /&gt;}&lt;br /&gt;.fc-view-month .fc-event, .fc-view-agendaWeek .fc-event {&lt;br /&gt;    font-size: 0;&lt;br /&gt;    overflow: hidden;&lt;br /&gt;    height: 2px;&lt;br /&gt;}&lt;br /&gt;.fc-view-agendaWeek .fc-event-vert {&lt;br /&gt;    font-size: 0;&lt;br /&gt;    overflow: hidden;&lt;br /&gt;    width: 2px !important;&lt;br /&gt;}&lt;br /&gt;.fc-agenda-axis {&lt;br /&gt;    width: 20px !important;&lt;br /&gt;    font-size: .7em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.fc-button-content {&lt;br /&gt;    padding: 0;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(document).ready(function() {&lt;br /&gt;&lt;br /&gt;    $('#calendar').fullCalendar({&lt;br /&gt;        theme: true,&lt;br /&gt;        header: {&lt;br /&gt;            left: 'prev,next today',&lt;br /&gt;            center: 'title',&lt;br /&gt;            right: 'month,agendaWeek,agendaDay'&lt;br /&gt;        },&lt;br /&gt;        editable: true,&lt;br /&gt;&lt;br /&gt;        // add event name to title attribute on mouseover&lt;br /&gt;        eventMouseover: function(event, jsEvent, view) {&lt;br /&gt;            if (view.name !== 'agendaDay') {&lt;br /&gt;                $(jsEvent.target).attr('title', event.title);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    });&lt;br /&gt;&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-1003372296671188157?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/1003372296671188157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/04/fullcalendar-mini-sized.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/1003372296671188157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/1003372296671188157'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/04/fullcalendar-mini-sized.html' title='FullCalendar mini-sized'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-xywACdwDmPw/TbLOX-Z_wiI/AAAAAAAAAC8/J2t6BvM8eP0/s72-c/fullcalendar-mini.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-6474742452501962522</id><published>2011-04-19T11:42:00.002-05:00</published><updated>2011-04-19T11:46:36.546-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Images'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Vertical Parallax Effect for the Entire Page</title><content type='html'>I found a game site (&lt;a href="http://www.elderscrolls.com/skyrim/overview/"&gt;Elder Scrolls&lt;/a&gt;) that has a really cool vertical scrolling effect that I wanted to duplicate, but it only works in webkit browsers. I didn't make it into a plugin, but instead made this tutorial, because if you understand the basics, you can add more background images or use CSS3 to add multiple background images.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-l89dRaOrMCQ/Ta2L_pBcx5I/AAAAAAAAACk/2CSI4uQKccE/s1600/vertical-parallax-top.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="211" src="http://3.bp.blogspot.com/-l89dRaOrMCQ/Ta2L_pBcx5I/AAAAAAAAACk/2CSI4uQKccE/s320/vertical-parallax-top.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="display: block; height: 3em;"&gt;&lt;/span&gt;&lt;br /&gt;This is a screen shot of the web page while it is at the top. Note the location of the building tower top is near the top of the logo that is under "Generic".&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-8n77gz8bp8s/Ta2M8Surs-I/AAAAAAAAAC4/6TqfdVWbj6E/s1600/vertical-parallax-scrolling.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" src="http://2.bp.blogspot.com/-8n77gz8bp8s/Ta2M8Surs-I/AAAAAAAAAC4/6TqfdVWbj6E/s320/vertical-parallax-scrolling.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="display: block; height: 3em;"&gt;&lt;/span&gt;&lt;br /&gt;This screen shot shows how the top of "Box 1" is now above the building tower. Blocks in the foreground move slightly faster than the background image.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both;"&gt;&lt;/div&gt;Here is the &lt;a href="http://jsfiddle.net/Mottie/gCwAm/"&gt;final demo&lt;/a&gt; of the vertical scrolling effect (see it as a &lt;a href="http://fiddle.jshell.net/Mottie/gCwAm/show/"&gt;full page&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;&lt;span style="font-size: x-large;"&gt;How it's done&lt;/span&gt; &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The Images&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-6vIxC2INCc0/Ta2M5xmVREI/AAAAAAAAACo/T-dk_UmEdB4/s1600/bg1.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="112" src="http://2.bp.blogspot.com/-6vIxC2INCc0/Ta2M5xmVREI/AAAAAAAAACo/T-dk_UmEdB4/s200/bg1.jpg" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;This effect uses two background images. The top image (&lt;a href="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/bg1.jpg"&gt;bg1.jpg&lt;/a&gt;, 1920x1080 pixels) fades to solid black on its bottom edge.&lt;br /&gt;&lt;br /&gt;It's made to be a bit blurry, but you can duplicate the game site's background image by keeping the foreground sharp and the background blurry... it's a cooler effect ;)&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-yoacGtVJQ4o/Ta2M6iJiLVI/AAAAAAAAACw/XuY_7_Yhh-A/s1600/bgtile.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="200" src="http://2.bp.blogspot.com/-yoacGtVJQ4o/Ta2M6iJiLVI/AAAAAAAAACw/XuY_7_Yhh-A/s200/bgtile.jpg" width="116" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;The second background image (&lt;a href="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/bgtile.jpg"&gt;bgtile.jpg&lt;/a&gt;, 963x1641 pixels) is added as a background image that appears under the above top image. The css is adjusted so that the top of this image appears below the top image so that you don't see a straight black line cut through the top.&lt;br /&gt;&lt;br /&gt;This image is blurry and mostly black, it fades to solid black at the edges, with a rock-like texture. It makes the vertical parallax scroll very subtle, so you may want to adjust it as desired.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-9_howS6OiMI/Ta2M7EuxbWI/AAAAAAAAAC0/8C9-4BQrVSg/s1600/title.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="151" src="http://1.bp.blogspot.com/-9_howS6OiMI/Ta2M7EuxbWI/AAAAAAAAAC0/8C9-4BQrVSg/s200/title.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;The other two images that are used are the title/logo image (&lt;a href="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/title.png"&gt;title.png&lt;/a&gt;, 400x300 pixels).&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-eywohnk1LMk/Ta2M6St6EPI/AAAAAAAAACs/7RYel72y0Tw/s1600/bg-black-55.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="1" src="http://1.bp.blogspot.com/-eywohnk1LMk/Ta2M6St6EPI/AAAAAAAAACs/7RYel72y0Tw/s1600/bg-black-55.png" style="border: #ddd 1px solid;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And the box background (&lt;a href="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/bg-black-55.png"&gt;bg-black-55.png&lt;/a&gt;, 20x20 pixels) which is a png file of solid black with a 55% opacity.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The Markup&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;This is very basic HTML markup. The body contains the repeating background tile image (bgtile.jpg). A wrapper is immediately inside the body which contains the top background image (bg1.jpg). These two images could be combined in the body tag if you use css3; then you could use the wrapper for additional images. The Header contains the logo (title.png) and each block of content has the box background image (bg-black-55.png) applied. Fill in the "div.content" block with whatever you want.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;body&amp;gt; &amp;lt;!-- contains repeated background image --&amp;gt;&lt;br /&gt;&amp;lt;div id="wrapper"&amp;gt; &amp;lt;!-- contains top image --&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;div id="header"&amp;gt;&amp;lt;/div&amp;gt; &amp;lt;!-- contains the page title image --&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;div class="block"&amp;gt; &amp;lt;!-- contains 55% opacity background image --&amp;gt;&lt;br /&gt;  &amp;lt;h3&amp;gt;Block 1&amp;lt;/h3&amp;gt;&lt;br /&gt;  &amp;lt;div class="content"&amp;gt;Content 1.&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;div class="block"&amp;gt; &amp;lt;!-- contains 55% opacity background image --&amp;gt;&lt;br /&gt;  &amp;lt;h3&amp;gt;Block 2&amp;lt;/h3&amp;gt;&lt;br /&gt;  &amp;lt;div class="content"&amp;gt;Content 2.&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;div class="block"&amp;gt; &amp;lt;!-- contains 55% opacity background image --&amp;gt;&lt;br /&gt;  &amp;lt;h3&amp;gt;Block 3&amp;lt;/h3&amp;gt;&lt;br /&gt;  &amp;lt;div class="content"&amp;gt;Content 3.&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;div class="block"&amp;gt; &amp;lt;!-- contains 55% opacity background image --&amp;gt;&lt;br /&gt;  &amp;lt;h3&amp;gt;Block 4&amp;lt;/h3&amp;gt;&lt;br /&gt;  &amp;lt;div class="content"&amp;gt;Content 4.&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt; &amp;lt;div class="block"&amp;gt; &amp;lt;!-- contains 55% opacity background image --&amp;gt;&lt;br /&gt;  &amp;lt;h3&amp;gt;Block 5&amp;lt;/h3&amp;gt;&lt;br /&gt;  &amp;lt;div class="content"&amp;gt;Content 5.&amp;lt;/div&amp;gt;&lt;br /&gt; &amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The CSS&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;The CSS below doesn't have a lot of comments, but the important parts to focus on are the main background image positions.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css"&gt;body {background: #333; color: #ddd;}&lt;br /&gt;a:link { color: #ddd; }&lt;br /&gt;a:hover { text-decoration: underline; }&lt;br /&gt;a:visited,a:active { color: #999; }&lt;br /&gt;&lt;br /&gt;/* Tiled background image */&lt;br /&gt;body {&lt;br /&gt; margin: 0;&lt;br /&gt; padding: 0;&lt;br /&gt; /* Use height of header image for top position */&lt;br /&gt; background: #000 url(http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/bgtile.jpg) left 1080px repeat-y;&lt;br /&gt;}&lt;br /&gt;/* Top background image (1920x1200) */&lt;br /&gt;#wrapper {&lt;br /&gt; position: relative;&lt;br /&gt; top: 0;&lt;br /&gt; left: 0;&lt;br /&gt; height: 100%;&lt;br /&gt; width: 100%;&lt;br /&gt; background: url(http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/bg1.jpg) center top repeat-x;&lt;br /&gt; z-index: 100;&lt;br /&gt;}&lt;br /&gt;/* Page Title image */&lt;br /&gt;#header {&lt;br /&gt; height: 350px;&lt;br /&gt; background: url(http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/title.png) center 40px no-repeat;&lt;br /&gt;}&lt;br /&gt;/* Content Block with 55% opacity background image */&lt;br /&gt;.block {&lt;br /&gt; width: 400px;&lt;br /&gt; height: 500px;&lt;br /&gt; margin: 20px auto;&lt;br /&gt; border: #333 1px solid;&lt;br /&gt; padding: 20px;&lt;br /&gt; background: url(http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/bg-black-55.png);&lt;br /&gt;}&lt;br /&gt;.block h3 {&lt;br /&gt; font-family: 'Arial Black', Gadget, sans-serif;&lt;br /&gt; font-size: 130%;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;&lt;b&gt;The Script&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;jQuery(document).ready(function(){&lt;br /&gt;  // saved values&lt;br /&gt;  var st, &lt;br /&gt;   // get window and body elements&lt;br /&gt;   win = jQuery(window)[0],&lt;br /&gt;   body = jQuery('body')[0],&lt;br /&gt;   wrap = jQuery('#wrapper')[0],&lt;br /&gt;   // make sure we target the correct document (in IE)&lt;br /&gt;   doc = (jQuery.support.boxModel) ? document.documentElement : document.body,&lt;br /&gt;  &lt;br /&gt;   // Set top background image height here, in pixels&lt;br /&gt;   imgH = 1080;&lt;br /&gt;&lt;br /&gt;  // vertical parallax scroll code&lt;br /&gt;  jQuery(win).scroll(function(){&lt;br /&gt;   // get the page scroll top (IE uses doc.scrollTop)&lt;br /&gt;   st = (win.pageYOffset || doc.scrollTop );&lt;br /&gt;&lt;br /&gt;   // Limit moving top image (in the "wrap") only when in view (st &amp;lt; imgH)&lt;br /&gt;   // Doing this reduces the amount of DOM activity so it doesn't slow down the scrolling.&lt;br /&gt;   // Here is where the background position of the top image is moved by 1/4 (st/4) of the total amount scrolled&lt;br /&gt;   // Increasing the fraction (making it closer to one) will speed up the background parallax scroll&lt;br /&gt;   // Decreasing the fraction will slow down the parallax scroll&lt;br /&gt;   if (st &amp;lt; imgH) { wrap.style.backgroundPosition = 'center ' + (st/4) + 'px'; }&lt;br /&gt;&lt;br /&gt;   // This line limits the tiled background image in the "body"&lt;br /&gt;   body.style.backgroundPosition = 'left ' + ( imgH + st/4) + 'px';&lt;br /&gt;  });&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;b&gt;Code breakdown&lt;/b&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;The first and last line wrap the code which is run when the document is ready. This is a jQuery method and can be written several different ways. Basically, any code inside is run when the basic structure and code of the page has completed loading. Images may or may not have completed loading at this time.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;jQuery(document).ready(function(){&lt;br /&gt;&amp;nbsp; // code to run&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;The next few lines save the variables that are repeatedly used in the script. Saving them reduces the amount of time taken to run code inside the scroll function. See the optimization section for more details.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// saved values&lt;br /&gt;var st, &lt;br /&gt; // get window and body elements&lt;br /&gt; win = jQuery(window)[0],&lt;br /&gt; body = jQuery('body')[0],&lt;br /&gt; wrap = jQuery('#wrapper')[0],&lt;br /&gt; // make sure we target the correct document (in IE)&lt;br /&gt; doc = (jQuery.support.boxModel) ? document.documentElement : document.body,&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;*Note that each line ends with a comma - it is defining multiple variables with one "var".&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The next saved variable saves the top background image height (bg1.jpg). This is needed so the script can figure out where to start the tiling of the repeated background image (bgtile.jpg). This ensures that the tiled background image isn't overlapped by the top background image making the user see a sharp black edge at the overlap. The script also uses this height to stop the parallax scroll of the top background image when it isn't in view. The reason for this is discussed in the optimization section below.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// Set top background image height here, in pixels&lt;br /&gt;imgH = 1080;&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Now we bind to the window scroll event. This event is fired everytime the browser window is scrolled. So it can be called hundreds of times while scrolling down the page. This is the reason the code inside this function is kept as minimal as possible.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// vertical parallax scroll code&lt;br /&gt;jQuery(win).scroll(function(){&lt;br /&gt;&lt;br /&gt;  // code run each time the page is scrolled&lt;br /&gt;&lt;br /&gt;}); // second to last line in the completed script&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Get the scroll top of the page. Check standard browsers variable, and if not defined (IE) then get the document scroll top. &lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// get the page scroll top (IE uses doc.scrollTop)&lt;br /&gt;st = (win.pageYOffset || doc.scrollTop );&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Apply the parallax to the top background image.&amp;nbsp;  &lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// Here is where the background position of the top image is moved by 1/4 (st/4) of the total amount scrolled&lt;br /&gt;// Increasing the fraction (making it closer to one) will speed up the background parallax scroll&lt;br /&gt;// Decreasing the fraction will slow down the parallax scroll&lt;br /&gt;if (st &amp;lt; imgH) { wrap.style.backgroundPosition = 'center ' + (st/4) + 'px'; }&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The first thing we do is check if the scroll top (st) is less than the top background image  height. If it is, then use parallax on the top background image.&lt;/li&gt;&lt;li&gt;"wrap" is one of our saved variables that points to the page wrapper. Here we set the background position using direct DOM manipulation. See optimization section for more details.&lt;/li&gt;&lt;li&gt;The background position has two parts - "X Y" positions. We care centering the image from left to right (the X-position), then taking one fourth (1/4) of the scroll top position and making that the background's Y-position. This is basically how the parallax scroll works. It scroll 1/4 less than the actual page. If you add another layer (say wrapper 2), it should be scrolled slightly more (a number closer to one, like 2/3).&lt;/li&gt;&lt;li&gt;So here the top background image is scrolled 1/4 less (1/4 * st) than the page itself. Make this number closer to one (i.e. 3/4 * st) to make the scroll more like the page scroll. Or make the number further from one (i.e. 1/8 * st) to make the scroll a tiny bit. Making the number too small may make the background image appear fixed, so don't go too crazy ;)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Apply the parallax to the tiled background image. &lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// This line limits the tiled background image in the "body"&lt;br /&gt;body.style.backgroundPosition = 'left ' + ( imgH + st/4) + 'px';&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Now we are applying the background position to the body of the page, where the tiled background image (bgtile.jpg) is seen.&lt;/li&gt;&lt;li&gt;Here we are place the background image on the left edge (centering should be fine too) and again 1/4 of the scroll top of the page. In addition we add the top image height (imgH) to keep the tiled background image aligned to the bottom of the top background image. So we make sure not to see that black image edge.&lt;/li&gt;&lt;li&gt;Since the body background image is behind the wrapper background image, you could make this parallax scroll even slower to give more of a feel of it being further off in the distance. This would look especially good with multiple background images available when using css3.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;b&gt;Optimizations&lt;/b&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;This script was optimized so that a minimal amount of code is run inside the scroll function.&lt;/li&gt;&lt;li&gt; This ensures that the code doesn't slow down the page scroll, because the scroll function is called constantly. It's probably not a big deal is modern browsers, but is very noticeable in older browsers.&amp;nbsp;&lt;/li&gt;&lt;li&gt;This was done, in part, by saving variables. This limits the amount of look ups that need to be done by the script. Using $(window) or $(document) needs to call several functions to get a value, so saving it in a variable saves time.&lt;/li&gt;&lt;li&gt;To set the background position, the script sets the background position directly in the DOM. Again, this was done to minimize function calls. I didn't have any trouble with cross browser compatibility in any browsers, including Opera and IE7+.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-6474742452501962522?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/6474742452501962522/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2011/04/vertical-parallax.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6474742452501962522'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6474742452501962522'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2011/04/vertical-parallax.html' title='Vertical Parallax Effect for the Entire Page'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-l89dRaOrMCQ/Ta2L_pBcx5I/AAAAAAAAACk/2CSI4uQKccE/s72-c/vertical-parallax-top.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-3993689739842421209</id><published>2010-12-21T09:37:00.001-06:00</published><updated>2011-02-25T17:00:50.444-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Keycaster</title><content type='html'>&lt;a href="http://mottie.github.com/Keycaster/"&gt;Keycaster&lt;/a&gt; is a jQuery plugin was written to add a keystroke and mouse visualizer to your browser window. It is similar to &lt;a href="https://github.com/sdeken/keycastr"&gt;keycastr&lt;/a&gt; for the mac, except this only works inside the browser window.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://mottie.github.com/Keycaster/" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_JneK2yV_JhA/TRDI8-wk4WI/AAAAAAAAACY/ZWPMAxOW4Tc/s1600/keycaster.jpg" width="600" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;This plugin is still in the alpha stage because it doesn't show all shifted keys properly and some key symbols do not work in all browsers (written mainly to work in Firefox). Also I plan on making this script work as a bookmarklet so you can just click on a link to activate it.&lt;br /&gt;&lt;hr /&gt;Update: You can now add this script to any page using this bookmarklet - &lt;b&gt;&lt;a href="javascript:var%20keycasterfiles='http://mottie.github.com/Keycaster/';(function(){var%20getScript=function(url){var%20script=document.createElement('script');script.src=url;document.getElementsByTagName('head')[0].appendChild(script)};if(typeof%20jQuery==='undefined'){getScript('http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js')}if(typeof%20keycaster==='undefined'){getScript(keycasterfiles+'js/jquery.keycaster.js')}if(typeof%20keycasterbookmarklet==='undefined'){getScript(keycasterfiles+'bookmarklet/bookmarklet.js')}else%20if%20(jQuery){jQuery('.keycaster-wrap').show()}})();"&gt;Keycaster&lt;/a&gt;&lt;/b&gt; - just drag it into your browser bookmarks and click on it whenever you need to visualize your mouse or keyboard actions.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-3993689739842421209?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/3993689739842421209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/12/keycaster.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3993689739842421209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3993689739842421209'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/12/keycaster.html' title='Keycaster'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JneK2yV_JhA/TRDI8-wk4WI/AAAAAAAAACY/ZWPMAxOW4Tc/s72-c/keycaster.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-8075228267599155927</id><published>2010-11-28T10:59:00.001-06:00</published><updated>2010-12-21T09:39:05.380-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jQueryUI'/><category scheme='http://www.blogger.com/atom/ns#' term='widget'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery UI Keyboard  Widget</title><content type='html'>I found &lt;a href="http://jsatt.blogspot.com/2010/01/on-screen-keyboard-widget-using-jquery.html"&gt;this widget&lt;/a&gt; by Jeremy Satterfield which adds an virtual keyboard to any input or text area. I really liked it and had a lot of ideas that I wanted to add :P&lt;br /&gt;&lt;br /&gt;So, I made a github repository, added a few of my ideas to the widget so now I present to you updated keyboard widget! (more updates to come!)&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://mottie.github.com/Keyboard/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/_JneK2yV_JhA/TPKJAlVIc4I/AAAAAAAAACU/2mYS6WhI3Uc/s1600/keyboard.jpg" width="600" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Here are some of the changes I made to version 1.5:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Changed class of preview window from 'ui-state-active' to 'ui-widget-content' because it looks bad in some themes.&lt;/li&gt;&lt;li&gt;Added 'ui-widget-content' class to the element (input or textarea).&lt;/li&gt;&lt;li&gt;Added International keyboard Layout (AltGr key) and expanded the keysets up to four.&lt;/li&gt;&lt;li&gt;Added more special/"action" keys:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Previous text only keys now have a companion symbol only key. The abbreviated names contain only a symbol so as to fit the layout style as desired.&lt;/li&gt;&lt;li&gt;Added alt key to allow accessing two additional key sets.&lt;/li&gt;&lt;li&gt;Changed name of {neg} to {sign}. This key changes the sign of the input.&lt;/li&gt;&lt;li&gt;Added tab key&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Fixed positioning utility problem I added in the last version - show the popup before positioning (duh).&lt;/li&gt;&lt;li&gt;Added position option to allow positioning the keyboard anywhere around the input/textarea.&lt;/li&gt;&lt;li&gt;Added display option to support multiple languages or change key symbols.&lt;/li&gt;&lt;li&gt;Added actionClass option to allow changing the style of the accept and cancel keys.&lt;/li&gt;&lt;li&gt;Added lockInput option to lock or unlock the ability to access the preview window.&lt;/li&gt;&lt;li&gt;Added keyBinding option to change the keyboard key behaviour.&lt;/li&gt;&lt;li&gt;Added useCombos to enable the dead key emulation which allows entering diacritic key combinations.&lt;/li&gt;&lt;li&gt;Using the escape key now closes the keyboard.&lt;/li&gt;&lt;li&gt;Added mousewheel support to allow scrolling through the other keysets while hovering over a key.&lt;/li&gt;&lt;li&gt;Added ARIA support (may not be complete).&lt;/li&gt;&lt;/ul&gt;And on my to do list are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Allow inserting text at the caret inside the preview window.&lt;/li&gt;&lt;li&gt;Add max length setting.&lt;/li&gt;&lt;li&gt;Add additional buttons to change key sets (similar to the alt key).&lt;/li&gt;&lt;li&gt;Add callbacks.&lt;/li&gt;&lt;li&gt;Add _destroy function.&lt;/li&gt;&lt;li&gt;Work on setting up one keyboard per layout to speed up initialization.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-8075228267599155927?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/8075228267599155927/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/11/jquery-ui-keyboard-widget.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/8075228267599155927'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/8075228267599155927'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/11/jquery-ui-keyboard-widget.html' title='jQuery UI Keyboard  Widget'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_JneK2yV_JhA/TPKJAlVIc4I/AAAAAAAAACU/2mYS6WhI3Uc/s72-c/keyboard.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-1451180260857864745</id><published>2010-11-17T01:20:00.001-06:00</published><updated>2010-11-28T11:01:19.418-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='jQueryUI'/><category scheme='http://www.blogger.com/atom/ns#' term='Menu'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>SqueezeBox</title><content type='html'>There is a very cool sliding accordion on &lt;a href="http://store.apple.com/us/compare/mac?page=imac"&gt;Apple's Store site&lt;/a&gt; to compare various computers (click compare then scroll).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://mottie.github.com/squeezeBox/index.html" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/_JneK2yV_JhA/TON_PYBi4LI/AAAAAAAAACQ/E0j5qIN7smw/s320/squeezeBox.jpg" width="301" /&gt;&lt;/a&gt;&lt;/div&gt;SqueezeBox is a jQuery plugin written to emulate that effect. It was designed to use the same themes available for jQuery UI, or you can add your own theme.&lt;br /&gt;&lt;br /&gt;Click on the image or &lt;a href="http://mottie.github.com/squeezeBox/index.html"&gt;go to the demo page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Features&lt;/b&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Easily change the theme but just loading in a different jQuery UI theme (Redmond theme shown).&lt;/li&gt;&lt;li&gt;SqueezeBox works with both collapsible and non-collapsible blocks.&lt;/li&gt;&lt;li&gt;Activate a header numerous ways:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Use browser hash marks to target the header ID - used on initial page load.&lt;/li&gt;&lt;li&gt;Click on any header to make it active - all headers above it will collapse using a smooth animation. &lt;/li&gt;&lt;li&gt;Use the script to set the active header.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Download&lt;/b&gt; it from my &lt;a href="https://github.com/Mottie/squeezeBox"&gt;github repository&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-1451180260857864745?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/1451180260857864745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/11/squeezebox.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/1451180260857864745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/1451180260857864745'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/11/squeezebox.html' title='SqueezeBox'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JneK2yV_JhA/TON_PYBi4LI/AAAAAAAAACQ/E0j5qIN7smw/s72-c/squeezeBox.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-2598846249246635540</id><published>2010-11-08T12:23:00.000-06:00</published><updated>2010-11-08T12:23:20.061-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Menu'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Kwicks for jQuery v2.0</title><content type='html'>I was recently was inspired to work on &lt;a href="http://www.jeremymartin.name/projects.php?project=kwicks"&gt;Kwicks for jQuery v1.5.1&lt;/a&gt; by Jeremy Martin because it hasn't been updated for a few years. So, I ended up changing the plugin structure to make it easier (for me) to add a getter, setter, event hooks and custom events.&lt;br /&gt;&lt;br /&gt;Check out the &lt;a href="http://mottie.github.com/Kwicks/"&gt;demo&lt;/a&gt;. Hopefully there is enough &lt;a href="https://github.com/Mottie/Kwicks"&gt;documentation&lt;/a&gt; to make adding a kwick to your own site easy! &lt;a href="http://github.com/Mottie/Kwicks/downloads"&gt;Download Kwicks for jQuery 2.0 here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-2598846249246635540?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/2598846249246635540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/11/kwicks-for-jquery-v20.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2598846249246635540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2598846249246635540'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/11/kwicks-for-jquery-v20.html' title='Kwicks for jQuery v2.0'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-2497924303868047484</id><published>2010-10-20T13:19:00.001-05:00</published><updated>2010-11-28T11:02:00.448-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='jQueryUI'/><category scheme='http://www.blogger.com/atom/ns#' term='widget'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Web Search Widget</title><content type='html'>I started messing around with the jQuery UI widget factory and put together a widget that allows you to easily add a web search button to your site (no server side scripting required).&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://mottie.github.com/WebSearch/" imageanchor="1" style="cursor: pointer; margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="319" src="http://3.bp.blogspot.com/_JneK2yV_JhA/TL8yTOfQsxI/AAAAAAAAACM/U4Jjan0hIJY/s320/websearch.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;There isn't much for me to write here since I put almost all of the needed instructions on the &lt;a href="http://mottie.github.com/WebSearch/"&gt;WebSearch github&lt;/a&gt; page. I hope someone finds it useful!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-2497924303868047484?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/2497924303868047484/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/10/web-search-widget.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2497924303868047484'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2497924303868047484'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/10/web-search-widget.html' title='Web Search Widget'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JneK2yV_JhA/TL8yTOfQsxI/AAAAAAAAACM/U4Jjan0hIJY/s72-c/websearch.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-6370307078742961306</id><published>2010-09-28T17:06:00.003-05:00</published><updated>2011-08-17T17:28:18.075-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Images'/><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='AnythingSlider'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Media'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>AnythingSlider</title><content type='html'>I've been working on improving the &lt;a href="http://css-tricks.com/anythingslider-jquery-plugin/"&gt;AnythingSlider&lt;/a&gt; jQuery plugin by Chris Coyier of CSS-Tricks.com. The project was moved to &lt;a href="https://github.com/ProLoser/AnythingSlider"&gt;github&lt;/a&gt;, so you can always get the latest version there... My version is up to 1.4 and you can &lt;a href="http://proloser.github.com/AnythingSlider/"&gt;check out a demo of it here&lt;/a&gt; - try starting both YouTube videos, then start the slideshow (doesn't work in Internet Explorer properly).&lt;br /&gt;&lt;br /&gt;Features include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Panels are HTML Content (can be anything).&lt;/li&gt;&lt;li&gt;Multiple AnythingSliders allowable per-page.&lt;/li&gt;&lt;li&gt;Infinite/Continuous sliding (always slides in the direction you are going, even at "last" slide).&lt;/li&gt;&lt;li&gt;Optionally resize each panel (specified per panel in css).&lt;/li&gt;&lt;li&gt;Optional Next / Previous Panel Arrows.&lt;/li&gt;&lt;li&gt;Use keyboard navigation or tabs that are built and added dynamically (any number of panels).&lt;/li&gt;&lt;li&gt;Link to specific slides or go forward or back one slide from static text links&lt;/li&gt;&lt;li&gt;Each panel has a hashtag (can link directly to specific panels).&lt;/li&gt;&lt;li&gt;Optional custom function for &lt;a href="https://dl.dropbox.com/u/1510510/jquery-anythingSlider/index.html#format"&gt;formatting navigation text&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Auto-playing slideshow (optional feature, can start playing or stopped)&lt;/li&gt;&lt;li&gt;Pauses playing YouTube videos when not in view and resumes them  when in view (only in non-IE browsers &amp;amp; if files are hosted on the  web).&lt;/li&gt;&lt;li&gt;If slideshow is active, a playing video will complete before the slideshow continues.&lt;/li&gt;&lt;li&gt;Pauses slideshow on hover (optional).&lt;/li&gt;&lt;li&gt;Optionally play the slideshow once through, stopping on the last page.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-6370307078742961306?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/6370307078742961306/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/09/anythingslider.html#comment-form' title='22 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6370307078742961306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6370307078742961306'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/09/anythingslider.html' title='AnythingSlider'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>22</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-499895318161052244</id><published>2010-09-16T10:32:00.001-05:00</published><updated>2010-09-16T10:33:39.091-05:00</updated><title type='text'>Switched file hosting sites</title><content type='html'>Apparently all the files hosted on myotherdrive.com are no longer available for direct linking. So I moved the important files over to dropbox.com and updated the appropriate posts.&lt;br /&gt;&lt;br /&gt;Sorry if there was any inconvenience for anyone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-499895318161052244?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/499895318161052244/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/09/switched-file-hosting-sites.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/499895318161052244'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/499895318161052244'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/09/switched-file-hosting-sites.html' title='Switched file hosting sites'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-396922452874339832</id><published>2010-08-25T23:24:00.000-05:00</published><updated>2010-08-26T13:25:20.356-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Loot'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><category scheme='http://www.blogger.com/atom/ns#' term='WoW'/><title type='text'>World of Warcraft Loot Systems</title><content type='html'>I've added scripts that parse lua files from EPGP, Ni Karma and Suicide Kings addon loot systems. These scripts were written for websites that can't use php or other server side systems.&lt;br /&gt;&lt;br /&gt;Click the link below to go to the github page, then click on the "Download Source" button.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://github.com/Mottie/epgp"&gt;EPGP&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/Mottie/nikarma"&gt;Ni Karma&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://github.com/Mottie/suicideKings"&gt;Suicide Kings&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Follow the examples provided.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-396922452874339832?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/396922452874339832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/08/world-of-warcraft-loot-systems.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/396922452874339832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/396922452874339832'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/08/world-of-warcraft-loot-systems.html' title='World of Warcraft Loot Systems'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-3140601492909672447</id><published>2010-08-24T14:56:00.012-05:00</published><updated>2010-08-27T09:45:12.640-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Tooltip'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Tooltips - Jatt (Just another tooltip)</title><content type='html'>This is an updated version of my &lt;a href="http://wowmotty.blogspot.com/2009/06/new-and-improved-jquery-tooltips.html"&gt;other tooltip&lt;/a&gt; script. With this version, you can:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Dynamically modify the tooltip using metadata.&lt;/li&gt;&lt;li&gt;Set a tooltip direction (8 directions: n, ne, e, se, s, sw, w &amp;amp; nw).&lt;/li&gt;&lt;li&gt;Tooltip content can be obtained from a selected object attribute, a different object on the same page, or via ajax.&lt;/li&gt;&lt;li&gt;Ajax calls can include jquery selectors to target specific page content.&lt;/li&gt;&lt;li&gt;Removed support for the dhtmltooltip script (the code is there, but commented out).&lt;/li&gt;&lt;/ul&gt;&lt;span class="style1" style="font-size: 130%;"&gt;Adding the Tooltips&lt;/span&gt;&lt;br /&gt;First make sure you have jQuery installed on your site, download the latest version from &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;. Then add the following CSS and script to your site, or you can &lt;a href="http://github.com/Mottie/Jatt"&gt;download the script here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Basic setup&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;.tooltip, .preview, .screenshot { cursor:pointer; }&lt;br /&gt;#tooltip { width: 250px; }&lt;br /&gt;#tooltip, #preview {&lt;br /&gt; color:#dddddd;&lt;br /&gt; background:#222222;&lt;br /&gt; border: 1px solid #333333;&lt;br /&gt; padding:5px;&lt;br /&gt; opacity: 0.9;&lt;br /&gt; filter: alpha(opacity=90);&lt;br /&gt; text-align:left;&lt;br /&gt; border-radius: 1em;&lt;br /&gt; -moz-border-radius: 1em;&lt;br /&gt; -webkit-border-radius: 1em;&lt;br /&gt; display:none;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;script src="jatt.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;$(document).ready(function(){&lt;br /&gt; $.jatt();&lt;br /&gt;});&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-size: 130%;"&gt;Using the Tooltips&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Basic Tooltip&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="keytable"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center" width="130"&gt;&lt;a class="tooltip {direction:n;width:100px;background:#222;color:#ddd;}" href="http://www.url.com/" title="Tooltip (a) Content"&gt;basic tip (a)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;a class="&lt;span style="color: #0080ff;"&gt;tooltip&lt;/span&gt; { direction: n; width: 100px; background: #222; color: #ddd; }" href="&lt;span style="color: orange;"&gt;#&lt;/span&gt;" title="&lt;span style="color: teal;"&gt;Tooltip (a) Content&lt;/span&gt;"&amp;gt;basic tip (a))&amp;lt;/a&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;a class="tooltip {direction:ne;width:200px;}" href="http://wowmotty.blogspot.com/2009/06/new-and-improved-jquery-tooltips.html #Blog1_cmt-3390748906554490641"&gt;External page (a)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;a class="&lt;span style="color: #0080ff;"&gt;tooltip&lt;/span&gt; { direction: ne; width: 200px; }" href="&lt;span style="color: orange;"&gt;http://wowmotty.blogspot.com/2009/06/new-and-improved-jquery-tooltips.html #Blog1_cmt-3390748906554490641&lt;/span&gt;"&amp;gt;External page (a)&amp;lt;/span&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;div class="tooltip {direction:e;width:150px;background:#9bff8f;color:#333;}" rel="#tip1"&gt;Object on page (div)&lt;/div&gt;&lt;div id="tip1" style="display: none;"&gt;Hi&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;div class="&lt;span style="color: #0080ff;"&gt;tooltip&lt;/span&gt; { direction: e; width: 150px; background: #9bff8f; color: #333; }" rel="&lt;span style="color: orange;"&gt;#tip1&lt;/span&gt;"&amp;gt;Object on page (div)&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div id="tip1" style="display:none"&amp;gt;&lt;span style="color: teal;"&gt;Hi&lt;/span&gt;&amp;lt;/div&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;img class="tooltip {direction:se;width:200px;background:#808080;color:#000;opacity:1;}" src="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/hideshow.gif" title="Tooltip (img) Content" /&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;img class="&lt;span style="color: #0080ff;"&gt;tooltip&lt;/span&gt; { direction: se; width: 200px; background: #808080; color: #000; opacity: 1; }" src="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/hideshow.gif" title="&lt;span style="color: teal;"&gt;Tooltip (img) Content&lt;/span&gt;" &amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;span class="tooltip {followMouse:false;direction:s;width:300px;background:#008080;color:#ddd;}" title="Tooltip (span) Content"&gt;Link (span)&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;span class="&lt;span style="color: #0080ff;"&gt;tooltip&lt;/span&gt; { followMouse: false; direction: s; width: 300px; background: #008080; color: #ddd; }" title="&lt;span style="color: teal;"&gt;Tooltip (span) Content&lt;/span&gt;"&amp;gt;Link (span)&amp;lt;/span&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;class="&lt;span style="color: #0080ff;"&gt;tooltip&lt;/span&gt;" (required) - This class activates the tooltip&lt;/li&gt;&lt;li&gt;class="tooltip { metadata }" (optional) - Add any of the predefined options (listed below) or any css style to apply to the tooltip.&lt;/li&gt;&lt;li&gt;title="&lt;span style="color: teal;"&gt;Tooltip content&lt;/span&gt;" (optional) - The title attribute should contain whatever you want to display inside the tooltip. This can include HTML but Do NOT use quotes in the content. If you are using HTML tags, replace the quotes with single quotes, e.g. &amp;lt;img src='hideshow.gif'&amp;gt;. If you must use quotes to surround some text, use the HTML escape code &lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; - this text has &lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt;quotes&lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; around it.&lt;/li&gt;&lt;li&gt;rel="&lt;span style="color: orange;"&gt;selector&lt;/span&gt;" (optional) - If the "title" attribute is empty, the script will look in the "rel" attribute for a selector that points to an object containing the tooltip content (see the "External object (div)" example above).&lt;/li&gt;&lt;li&gt;href="&lt;span style="color: orange;"&gt;page.htm #target span:first&lt;/span&gt;" (optional) - If the "title" and "rel" attributes are both empty, the script will look in the "href" attribute for a URL to an external page. The URL can be followed by an id or class selectors pointing to the tooltip contents (see the "External page (a)" example above).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="font-size: 100%;"&gt;Preview Tooltips&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="keytable"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;a class="preview {direction:e;opacity:1;text-align:center;}" href="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/google2.png" title="Google's Logo"&gt;&lt;img src="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/google1.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;a class="&lt;span style="color: #0080ff;"&gt;preview&lt;/span&gt; { direction: e; opacity: 1; text-align: center; }" href="&lt;span style="color: orange;"&gt;URL to full size image&lt;/span&gt;" title="&lt;span style="color: teal;"&gt;Google's Logo&lt;/span&gt;"&amp;gt;&lt;span style="color: darkgrey;"&gt;&amp;lt;img src="&lt;/span&gt;&lt;span style="color: darkgrey;"&gt;URL to image thumbnail"&amp;gt;&lt;/span&gt;&amp;lt;/a&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;class="&lt;span style="color: #0080ff;"&gt;preview&lt;/span&gt;" (required) - This class activates the tooltip which puts the linked image (from the href) into a tooltip. The tooltip size is adjusted automatically to fit the image.&lt;/li&gt;&lt;li&gt;class="preview { metadata }" (optional) - Add any of the predefined options (listed below) or any css style to apply to the tooltip.&lt;/li&gt;&lt;li&gt;href="&lt;span style="color: orange;"&gt;URL to full size image&lt;/span&gt;" (required) - URL to the image, for previewing in the tooltip and the URL you go to when you click on the image.&lt;/li&gt;&lt;li&gt;title="&lt;span style="color: teal;"&gt;TOOLTIP CONTENT&lt;/span&gt;" (optional) - This content becomes the image caption located below the image inside the tooltip. Note: Do NOT use quotes in the content. If you are using HTML tags, replace the quotes with single quotes, e.g. &amp;lt;img src='http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/Nax2-10.gif'&amp;gt;. If you must use quotes to surround some text, use the HTML escape code &lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; - this text has &lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt;quotes&lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; around it.&lt;/li&gt;&lt;li&gt;&lt;span style="color: darkgrey;"&gt;&amp;lt;img src="URL to image thumbnail"&amp;gt;&lt;/span&gt; (required) - This will be the thumbnail of the URL image (in orange), or you can pick any image as I did here. Or you can replace the &amp;lt;img&amp;gt; with text.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="font-size: 100%;"&gt;Screenshot Tooltips&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="keytable"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;a class="screenshot {direction:e;opacity:1;text-align:center;}" href="http://www.guildportal.com/Guild.aspx?GuildID=194525&amp;amp;TabID=1643295" rel="http://www.axiomfiles.com/Images/Spotlight/194525.jpg" title="Loch Modan Yacht Club"&gt;LMYC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;a class="&lt;span style="color: #0080ff;"&gt;screenshot&lt;/span&gt; { direction: e; opacity: 1; text-align: center; } " href="&lt;span style="color: orange;"&gt;http://www.guildportal.com/Guild.aspx?GuildID=194525&amp;amp;TabID=1643295&lt;/span&gt;" title="&lt;span style="color: teal;"&gt;&amp;lt;center&amp;gt;Loch Modan Yacht Club&amp;lt;/center&amp;gt;&lt;/span&gt;" rel="&lt;span style="color: skyblue;"&gt;http://www.axiomfiles.com/Images/Spotlight/194525.jpg&lt;/span&gt;"&amp;gt;&lt;span style="color: darkgrey;"&gt;LMYC&lt;/span&gt;&amp;lt;/a&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a class="screenshot {direction:e;}" href="http://www.google.com/" rel="#" title="&amp;lt;center&amp;gt;Google&amp;lt;/center&amp;gt;"&gt;Google&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;a class="&lt;span style="color: #0080ff;"&gt;screenshot&lt;/span&gt; { direction: e; }" href="&lt;span style="color: orange;"&gt;http://www.google.com&lt;/span&gt;" title="&lt;span style="color: teal;"&gt;&amp;lt;center&amp;gt;Google&amp;lt;/center&amp;gt;&lt;/span&gt;" rel="&lt;span style="color: skyblue;"&gt;#&lt;/span&gt;"&amp;gt;&lt;span style="color: darkgrey;"&gt;Google&lt;/span&gt;&amp;lt;/a&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;class="&lt;span style="color: #0080ff;"&gt;screenshot&lt;/span&gt;" (required) - This class activates the tooltip that gets the site screenshot image from the rel attribute (in &lt;span style="color: skyblue;"&gt;light blue&lt;/span&gt;)&lt;/li&gt;&lt;li&gt;href="&lt;span style="color: orange;"&gt;URL&lt;/span&gt;" (required) - URL of the target website&lt;/li&gt;&lt;li&gt;title="&lt;span style="color: teal;"&gt;Tooltip content&lt;/span&gt;" (optional) - This content becomes the screenshot (image) caption inside the tooltip. Note: Do NOT use quotes in the content. If you are using HTML tags, replace the quotes with single quotes, e.g. &amp;lt;img src='http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/Nax2-10.gif'&amp;gt;. If you must use quotes to surround some text, use the HTML escape code &lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; - this text has &lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt;quotes&lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; around it.&lt;/li&gt;&lt;li&gt;rel="&lt;span style="color: skyblue;"&gt;Website_Screenshot.jpg&lt;/span&gt;" or rel="&lt;span style="color: skyblue;"&gt;#&lt;/span&gt;" (required) &lt;span style="color: red;"&gt;&lt;/span&gt; This attribute can contain either the URL to the screenshot image of the site to which you have the link pointing. Yes, you will have to take, resize and upload the screenshot image yourself OR you can now use rel="&lt;span style="color: skyblue;"&gt;#&lt;/span&gt;" to have &lt;a href="http://www.websnapr.com/"&gt;Websnapr.com&lt;/a&gt; generate a thumbnail of the site for you.&lt;/li&gt;&lt;li&gt;&lt;span style="color: darkgrey;"&gt;text or image&lt;/span&gt; (required) - Text or image that becomes the clickable link to the site.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 130%;"&gt;Customizing&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Initializing the script (showing all default settings) &lt;br /&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$(document).ready(function(){&lt;br /&gt; $.jatt({&lt;br /&gt;  // options that can be modified by metadata&lt;br /&gt;  direction      : 'n',     // direction of tooltip&lt;br /&gt;  followMouse    : true,    // tooltip follows mouse movement&lt;br /&gt;  content        : 'title', // attribute containing tooltip text&lt;br /&gt;  speed          : 300,     // tooltip fadein speed&lt;br /&gt;  local          : false,   // if true, the script attachs the tooltip locally; if false, the tooltip is added to the body&lt;br /&gt;  xOffset        : 20,      // x distance from mouse (no negative values)&lt;br /&gt;  yOffset        : 20,      // y distance from mouse (no negative values)&lt;br /&gt;  zIndex         : 1000,    // z-index of tooltip&lt;br /&gt;&lt;br /&gt;  // options not supported by metadata&lt;br /&gt;  live           : false,                 // use live event support?&lt;br /&gt;  metadata       : 'class',               // attribute that contains the metadata, use "false" (no quotes) to disable the metadata.&lt;br /&gt;  activate       : 'mouseenter focusin',  // how tooltip is activated&lt;br /&gt;  deactivate     : 'mouseleave focusout', // how tooltip is deactivated&lt;br /&gt;&lt;br /&gt;  // change tooltip, screenshot and preview class&lt;br /&gt;  tooltip        : '.tooltip',             // tooltip class&lt;br /&gt;  screenshot     : 'a.screenshot',        // screenshot class&lt;br /&gt;  preview        : 'a.preview',           // preview class&lt;br /&gt;&lt;br /&gt;  // tooltip &amp;amp; preview ID (div that contains the tooltip)&lt;br /&gt;  tooltipId      : 'tooltip',             // ID of actual tooltip&lt;br /&gt;  previewId      : 'preview'              // ID of screenshot/preview tooltip &lt;br /&gt; });&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;List of Options&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="keytable"&gt;&lt;tbody&gt;&lt;tr style="background-color: #555555; color: #dddddd;"&gt;&lt;th&gt;Key&lt;/th&gt;&lt;th&gt;Value (default shown)&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;direction&lt;/td&gt;&lt;td&gt;'n'&lt;/td&gt;&lt;td&gt;Choose the direction of the tooltip (in quotes; choose from n, ne, e, se, s, sw, w, nw).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;followMouse&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;When hovering over the object with a tooltip, the tooltip will follow the mouse if true. If false, it will be positioned relative to the object.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;content&lt;/td&gt;&lt;td&gt;'title'&lt;/td&gt;&lt;td&gt;Attribute containing the tooltip content. By default it is the "title" attribute.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;speed&lt;/td&gt;&lt;td&gt;300&lt;/td&gt;&lt;td&gt;Time in milliseconds for the tooltip to fade in. By design the tooltip has no fade out because it is removed immediately.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;local&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;Where the tooltip is attached. By default it is false and will attach to the document body; if true, it will be attached before the object.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;xOffset&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;Number of pixels between the tooltip and the mouse (or object if followMouse = false) in the X direction.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;yOffset&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;Number of pixels between the tooltip and the mouse (or object if followMouse = false) in the Y direction.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;zIndex&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;&lt;td&gt;Adjust this if the tooltip is below another object.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;live&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;Set to true if you add tooltip objects to your page dynamically (added after the page is loaded).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;metadata&lt;/td&gt;&lt;td&gt;'class'&lt;/td&gt;&lt;td&gt;Location of the tooltip metadata. By default it will look in the class attribute. If set to "false" it will disable the metadata.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;activate&lt;/td&gt;&lt;td&gt;'mouseenter focusin'&lt;/td&gt;&lt;td&gt;The event that causes the tooltip to display information.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;deactivate&lt;/td&gt;&lt;td&gt;'mouseleave focusout'&lt;/td&gt;&lt;td&gt;The event that causes the tooltip to be removed.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;tooltip&lt;/td&gt;&lt;td&gt;'.tooltip'&lt;/td&gt;&lt;td&gt;The class used to activate the tooltip. And the ID of the actual tooltip.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;screenshot&lt;/td&gt;&lt;td&gt;'a.screenshot'&lt;/td&gt;&lt;td&gt;The class used to activate the screenshot script which shows an image associated with the URL. And this is the ID of both the screenshot &amp;amp; preview tooltips.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;preview&lt;/td&gt;&lt;td&gt;'a.preview'&lt;/td&gt;&lt;td&gt;The class used to activate the preview script which shows the an image in the tooltip from the href.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;tooltipId&lt;/td&gt;&lt;td&gt;'tooltip'&lt;/td&gt;&lt;td&gt;The ID of the actual tooltip.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;previewId&lt;/td&gt;&lt;td&gt;'preview'&lt;/td&gt;&lt;td&gt;The ID of the actual preview/screenshot tooltip (the share the same one).&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 130%;"&gt;Known Issues&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Fixed:&lt;del&gt;If the tooltip contents go out of the viewport, the script attempt to adjust the tooltip to make it visible. If it moves the tooltip under the mouse, the tooltip will flicker and become unreadable. This occurs when the east or west direction is used, so limit use of 'east' when the tooltip is near the right side and 'west' when it is near the left. I'll look into fixing this problem in future versions.&lt;/del&gt;&lt;/li&gt;&lt;li&gt;The tooltip script won't obtain cross-domain ajax requests by default, but I have included James Padolsey's &lt;a href="http://github.com/jamespadolsey/jQuery-Plugins/tree/master/cross-domain-ajax/"&gt;cross-domain ajax&lt;/a&gt; script (jquery.xdomainajax.js) which should enable it. Just include the script in the head of your document.&lt;/li&gt;&lt;li&gt;If you find any other issues, please submit an issue to &lt;a href="http://github.com/Mottie/Jatt/issues"&gt;Jatt's github repository&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-3140601492909672447?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/3140601492909672447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/08/tooltips-jatt-just-another-tooltip.html#comment-form' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3140601492909672447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3140601492909672447'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/08/tooltips-jatt-just-another-tooltip.html' title='Tooltips - Jatt (Just another tooltip)'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-1636625548413209111</id><published>2010-07-10T00:10:00.002-05:00</published><updated>2010-09-24T19:31:25.108-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>How to click on a drag/sort object</title><content type='html'>I've seen this question come up a few times on Stackoverflow. How can I make a draggable/sortable/resizable/selectable object clickable as well?&lt;br /&gt;&lt;br /&gt;You can use the built in &lt;a href="http://api.jquery.com/event.timeStamp/"&gt;event timestamp&lt;/a&gt; to determine the time difference between when the mouse down and mouse up events occur. Here is a &lt;a href="http://dl.dropbox.com/u/1510510/misc/sortable-hidable-content2.htm"&gt;basic demo&lt;/a&gt; of a sortable list that contains hidden content - clicking on the header "Content #" will open the hidden below. Holding the mouse down on the header will allow you to sort the list.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;HTML&lt;/span&gt;&lt;br /&gt;This is a basic list which contains a header (h3) and a hidden div.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;ul id="sortable"&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;lt;h3&amp;gt;Content 1&amp;lt;/h3&amp;gt;&lt;br /&gt;&amp;lt;div class="hidden"&amp;gt;Some Content&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;lt;h3&amp;gt;Content 2&amp;lt;/h3&amp;gt;&lt;br /&gt;&amp;lt;div class="hidden"&amp;gt;Some Content&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;lt;h3&amp;gt;Content 3&amp;lt;/h3&amp;gt;&lt;br /&gt;&amp;lt;div class="hidden"&amp;gt;Some Content&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;lt;h3&amp;gt;Content 4&amp;lt;/h3&amp;gt;&lt;br /&gt;&amp;lt;div class="hidden"&amp;gt;Some Content&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;lt;h3&amp;gt;Content 5&amp;lt;/h3&amp;gt;&lt;br /&gt;&amp;lt;div class="hidden"&amp;gt;Some Content&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;CSS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;This css sets the styling of the list and hidden content.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css"&gt;/* set list width &amp;amp; remove bullets */&lt;br /&gt;#sortable {&lt;br /&gt;width: 500px;&lt;br /&gt;list-style: none;&lt;br /&gt;}&lt;br /&gt;/* clickable header */&lt;br /&gt;h3 {&lt;br /&gt;font-size: 20px;&lt;br /&gt;width: 200px;&lt;br /&gt;background: #444;&lt;br /&gt;margin: 5px;&lt;br /&gt;padding-left: 5px;&lt;br /&gt;}&lt;br /&gt;/* header with revealed content */&lt;br /&gt;h3.opened {&lt;br /&gt;background: #0080c0;&lt;br /&gt;}&lt;br /&gt;/* hidden content */&lt;br /&gt;.hidden {&lt;br /&gt;display: none;&lt;br /&gt;min-height: 100px;&lt;br /&gt;background: #444;&lt;br /&gt;color: #ddd;&lt;br /&gt;padding: 5px;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Script&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;I've included a lot of inline comments in the script which I hope makes it clear as to what it does.&lt;br /&gt;&lt;b&gt;Updated code&lt;/b&gt; (9/24/2010 - &lt;a href="http://dl.dropbox.com/u/1510510/misc/sortable-hidable-content2.htm"&gt;Demo&lt;/a&gt;) - added mouse move flag:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;$(document).ready(function(){&lt;br /&gt;var last, diff, moved,&lt;br /&gt;clickDelay = 500; // millisecond delay&lt;br /&gt;$('#sortable')&lt;br /&gt;// make the list sortable&lt;br /&gt;.sortable()&lt;br /&gt;// make h3 in the list "clickable"&lt;br /&gt;.find('h3')&lt;br /&gt;.bind('mousedown', function(e){&lt;br /&gt;// set time on mousedown (start of click)&lt;br /&gt;last = e.timeStamp;&lt;br /&gt;// clear moved flag&lt;br /&gt;moved = false;&lt;br /&gt;})&lt;br /&gt;.bind('mouseup mousemove', function(e){&lt;br /&gt;    // flag showing that the mouse had been moved&lt;br /&gt;    if (e.type == 'mousemove') {&lt;br /&gt;     moved = true;&lt;br /&gt;     // no need to continue&lt;br /&gt;     return;&lt;br /&gt;    }&lt;br /&gt;// find time difference on mouse up (end of click)&lt;br /&gt;diff = e.timeStamp - last;&lt;br /&gt;    // check moved variable, to ignore click if the mouse had been moved (dragged)&lt;br /&gt;    // if time difference is less than delay, then it was a click&lt;br /&gt;    // if time difference is greater than the delay, then it was meant for dragging&lt;br /&gt;if ( !moved &amp;amp;&amp;amp;  diff &amp;lt; clickDelay ) {&lt;br /&gt;// toggle the opened class and the hidden content&lt;br /&gt;$(this).toggleClass('opened').next().toggle();&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;Original code - &lt;a href="http://dl.dropbox.com/u/1510510/misc/sortable-hidable-content.htm"&gt;Demo&lt;/a&gt;:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;$(document).ready(function(){&lt;br /&gt;var last, diff,&lt;br /&gt;clickDelay = 500; // millisecond delay&lt;br /&gt;$('#sortable')&lt;br /&gt;// make the list sortable&lt;br /&gt;.sortable()&lt;br /&gt;// make h3 in the list "clickable"&lt;br /&gt;.find('h3')&lt;br /&gt;.bind('mousedown', function(e){&lt;br /&gt;// set time on mousedown (start of click)&lt;br /&gt;last = e.timeStamp;&lt;br /&gt;})&lt;br /&gt;.bind('mouseup', function(e){&lt;br /&gt;// find time difference on mouse up (end of click)&lt;br /&gt;diff = e.timeStamp - last;&lt;br /&gt;// if time difference is less than delay, then it was a click&lt;br /&gt;// if time difference is greater than the delay, then it was meant for dragging&lt;br /&gt;if ( diff &amp;lt; clickDelay ) {&lt;br /&gt;// toggle the opened class and the hidden content&lt;br /&gt;$(this).toggleClass('opened').next().toggle();&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;In case you don't understand what's going on, a click is basically composed of a mousedown event and a mouseup event. The time difference between the two events is how you can determine if you have clicked or just pressed the mouse button to select text or drag an object around (like in this demo).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;So in this script, the "last" variable contains the time stamp of the mouse down event&lt;/li&gt;&lt;li&gt;The "diff" is the time difference from the mouseup event and the last variable time.&lt;/li&gt;&lt;li&gt;I picked a default of 500 milliseconds for a mouse click delay (&lt;a href="http://en.wikipedia.org/wiki/Double-click#Speed_and_timing"&gt;reference&lt;/a&gt;)  for really slow clickers, but you can adjust it to anything you want.&lt;/li&gt;&lt;li&gt;If the time difference is less than 500 milliseconds then we can determine that the user clicked and preform the appropriate action (toggle the hidden content).&lt;/li&gt;&lt;li&gt;If the time difference is greater, then the user is probably trying to sort the list.&lt;/li&gt;&lt;li&gt;You could potentially add another action if the time difference is greater than the delay, but the script wouldn't do anything until the user released the mouse (mouseup event). But then you could bind a "mousemove" event that checks the timer against the "last" variable to find out how long the user has been clicking the mouse.&lt;/li&gt;&lt;li&gt;Update (9/24/2010): The newer script added above the original adds a mouse move flag that ignores the timer if the user moved the mouse during the click.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-1636625548413209111?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/1636625548413209111/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/07/how-to-click-or-dragsort-object.html#comment-form' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/1636625548413209111'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/1636625548413209111'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/07/how-to-click-or-dragsort-object.html' title='How to click on a drag/sort object'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-6463359467583111625</id><published>2010-07-09T10:58:00.020-05:00</published><updated>2010-11-06T09:27:11.041-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Menu'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Visual Navigation</title><content type='html'>There are a few sites that have a navigation menu that can highlight / change when the menu's target scrolls into view (e.g. &lt;a href="http://www.brizk.com/"&gt;brizk design&lt;/a&gt; &amp;amp; &lt;a href="http://crushlovely.com/"&gt;Crush + Lovely&lt;/a&gt;) . I tried to generalize the script so it would work with any site and I ended making up with this jQuery plugin.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://mottie.github.com/visualNav/index.html"&gt;&lt;img src="http://i201.photobucket.com/albums/aa236/Mottie1/Blog/visualNavDemo.jpg" /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I set up a &lt;a href="http://mottie.github.com/visualNav/index.html"&gt;demo page here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Download: &lt;a href="http://mottie.github.com/visualNav/js/jquery.visualNav.js"&gt;Uncompressed&lt;/a&gt;  | &lt;a href="http://mottie.github.com/visualNav/js/jquery.visualNav.min.js"&gt;Minified&lt;/a&gt;  | &lt;a href="http://github.com/Mottie/visualNav/downloads"&gt;Zipped Demo&lt;/a&gt; | &lt;a href="http://github.com/Mottie/visualNav"&gt;Github&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have tested this plugin in IE8, Firefox and Chrome. Please leave me  feedback if you any problems with how it works or if it doesn't work in  other browsers.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 180%; font-weight: bold;"&gt;Setup&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This plugin requires jQuery in order to function properly.&lt;/li&gt;&lt;li&gt;Follow the basic templates below to set this up on your site. For more  details, go to the specific section.&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Default Setup&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;HTML&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;div id="sidemenu"&amp;gt;&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#home"&amp;gt;Home&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#work"&amp;gt;Work&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#blog"&amp;gt;Blog&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#projects"&amp;gt;Projects&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#about"&amp;gt;About&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#contact"&amp;gt;Contact&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;Change the side menu id to whatever you want, just make sure you  target it with the script.&lt;/li&gt;&lt;li&gt;This side menu example will work  with the plugin's default settings. See the alternate example of a  different layout.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;CSS&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: css"&gt;#sidemenu { position: fixed; top: 50px; left: 20px; background: #444; width: 120px; }&lt;br /&gt;#sidemenu ul { list-style-type: none; margin: 0; padding: 0; }&lt;br /&gt;#sidemenu li { margin: 5px; padding: 5px; width: 100px; text-align: center; }&lt;br /&gt;#sidemenu li.selected { background: #555; }&lt;br /&gt;#sidemenu a { text-decoration: none; color: #bbbbff; }&lt;br /&gt;#sidemenu a:hover { color: #fff; }&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;This CSS highly variable. Change the position, size and colors as desired.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Script&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: js"&gt;$(document).ready(function(){&lt;br /&gt;$('#sidemenu').visualNav();&lt;br /&gt;});&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Alternate Setup&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;HTML&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;div id="menu"&amp;gt;&lt;br /&gt;&amp;lt;div class="link" title="#Home"&amp;gt;Home&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="link" title="#work"&amp;gt;Work&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="link" title="#blog"&amp;gt;Blog&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="link" title="#projects"&amp;gt;Projects&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="link" title=".about"&amp;gt;About&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;div class="link" title=".contact"&amp;gt;Contact&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;ul&gt;&lt;li&gt;This side menu uses divs with a title attribute. The value in this attribute can be used to target an Id or a class (which should be unique).&lt;/li&gt;&lt;li&gt;It is important to note, that this menu will not work with javascript disabled, whereas the default one will work.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;CSS&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: css"&gt;#menu { position: fixed; top: 50px; left: 20px; background: #444; width: 120px; }&lt;br /&gt;#menu div.link { margin: 5px; padding: 5px; width: 100px; text-align: center; }&lt;br /&gt;#menu div.selected { background: #555; }&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Script&lt;/span&gt;&lt;br /&gt;&lt;pre class="brush: js"&gt;$(document).ready(function(){&lt;br /&gt;$('#menu').visualNav({&lt;br /&gt;link              : 'div.link',&lt;br /&gt;targetAttr        : 'title',&lt;br /&gt;selectedAppliedTo : 'div.link'&lt;br /&gt;});&lt;br /&gt;});&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 180%; font-weight: bold;"&gt;Customizing / Options&lt;/span&gt;&lt;br /&gt;This plugin has the following default options, so you will only need to include the line below in the script options if you want to change the default:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;$('#sidemenu').visualNav({&lt;br /&gt;link              : 'a',        // Add a link class, as necessary&lt;br /&gt;targetAttr        : 'href',     // added in case you have link = "div" and attribute something like&lt;br /&gt;selectedClass     : 'selected', // css class applied to menu&lt;br /&gt;selectedAppliedTo : 'li',       // to only apply to the link, use "a"&lt;br /&gt;topRange          : 100,        // measure from the top of the viewport to X pixels down&lt;br /&gt;topMargin         : 100,        // margin above the top where the target updates the menu&lt;br /&gt;bottomMargin      : 20,         // margin from the end of the page where the last menu item is used&lt;br /&gt;animationTime     : 1200        // time in milliseconds&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;The first four options should were hopefully made clear in the examples above.&lt;/li&gt;&lt;li&gt;To modify how the menu acts, you will need to adjust the "topRange", "topMargin" and "bottomMargin" values. I made this picture to better understand what these values do for you.&lt;img alt="" border="0" src="http://i201.photobucket.com/albums/aa236/Mottie1/Blog/visualNavLayout.gif" style="float: right;" /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;topRange&lt;/span&gt;: The "topRange" is basically the area where target needs to be inside of in order for the menu to update. For example, the target (found in the link attribute) starts under the topRange. As it moves up and crosses into the topRange. The script then updates the side menu to show that the target area is in view (or inside the view port).&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;topMargin&lt;/span&gt;: The top edge margin (topMargin) is the area above the view port. The top edge margin is used while the page is being scrolled up - the target is above the view port and as you scroll up, the target moves down. When the target is inside the edge margin, the menu will update and point to that target.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;bottomMargin&lt;/span&gt;: The bottom edge margin is the area below the view port. It is when the page is scrolled down (the contents are moving up). When the bottom of the page is inside the bottom edge margin, the menu will update with the last targeted id. This was necessary to be include in case the last section is too short and unable to reach the top range area.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;animationTime&lt;/span&gt;: The animation time is the time in milliseconds that the menu will scroll to the selected section.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 180%;"&gt;&lt;span style="font-weight: bold;"&gt;Known Problems / Bugs / Suggestions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The menu will not select (or highlight) the item above  the last item if they are both very short. For example, if your browser  shows three sections while at the bottom of the page. The third to last  may have shown for a brief time just before the bottom of the page  reached the bottom edge margin. The menu would then skip directly to the  last menu item. This is one reason why the bottom margin value is kept a low number (20 pixels by default).&lt;/li&gt;&lt;li&gt;If you click on a menu item, the page contents will automatically scroll to that section and update the browser url with that target. But if you manually scroll the page using the scroll bar or mouse, the web page url will not update with the current position. This was done on purpose, because if the script changes the location, the page will jump to that target automatically. This wouldn't look good if you are quickly scrolling through the page as it would make the movement jittery.&lt;/li&gt;&lt;li&gt;To make suggestions or report any bugs please email me at wowmotty at g  mail dot com.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-6463359467583111625?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/6463359467583111625/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/07/visual-navigation.html#comment-form' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6463359467583111625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6463359467583111625'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/07/visual-navigation.html' title='Visual Navigation'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i201.photobucket.com/albums/aa236/Mottie1/Blog/th_visualNavDemo.jpg' height='72' width='72'/><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-8265636366182579514</id><published>2010-07-04T02:42:00.016-05:00</published><updated>2011-11-14T05:01:12.168-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Images'/><category scheme='http://www.blogger.com/atom/ns#' term='Date'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>todaysImage v1.0</title><content type='html'>The plugin will take a group of images which have a set date range, and show an image randomly from the group depending on the current  date. It is based on my original &lt;a href="http://wowmotty.blogspot.com/2009/09/random-image-by-date.html"&gt;Random Image by Date&lt;/a&gt; script but has been significantly modified and improved! It's shiny and sparkly, but you won't be able to tell much difference on the surface.&lt;br /&gt;&lt;br /&gt;The frame below contains a demo of this script... you can view the page directly by clicking &lt;a href="http://mottie.github.com/todaysImage/index.html"&gt;this link&lt;/a&gt; so you can more easily understand what it does and test the debuging features.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe align="top" allowtransparency="true" frameborder="0" height="600" src="http://mottie.github.com/todaysImage/index.html" width="500"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;Download: &lt;a href="http://mottie.github.com/todaysImage/js/jquery.todaysImage.js"&gt;Uncompressed&lt;/a&gt;  | &lt;a href="http://mottie.github.com/todaysImage/js/jquery.todaysImage.min.js"&gt;Minified&lt;/a&gt;  | &lt;a href="http://github.com/Mottie/todaysImage/zipball/master"&gt;Zipped Demo&lt;/a&gt; (2.5Mb - includes all images) | &lt;a href="http://github.com/Mottie/todaysImage"&gt;Github&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 180%; font-weight: bold;"&gt;Setup&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The set up is fairly simple (I hope). The page requires three things to work:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;jQuery loaded (you can use Google's copy as seen in the page source).&lt;/li&gt;&lt;li&gt;An &lt;span style="font-style: italic;"&gt;&amp;lt;img&amp;gt;&lt;/span&gt; anywhere on your page.&lt;/li&gt;&lt;li&gt;Data source consisting of a date range and image url. You can also include optional comments.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Data Format&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To include an image in this script, you will need the following bits of information:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Date (required) - Use the format below&lt;/li&gt;&lt;li&gt;Image URL (required)&lt;/li&gt;&lt;li&gt;Comment (optional)&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Date format &lt;/span&gt;(do not include the year):&lt;br /&gt;&lt;br /&gt;&lt;table class="table"&gt;&lt;thead&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center" style="background-color: #595959; color: white;"&gt;&lt;b&gt;&lt;span style="color: white;"&gt;Dates&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td style="background-color: #595959;"&gt;&lt;span style="color: white;"&gt;&lt;b&gt;Description&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;span style="color: red;"&gt;0&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Set image as a &lt;b&gt;default&lt;/b&gt; (will only display if no date specific images are found).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;span style="color: red;"&gt;1/1 &lt;/span&gt;&lt;/td&gt;&lt;td&gt;Dispaly image only on Jan 1st.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;span style="color: red;"&gt;1/1 - 1/5&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Dispaly image from Jan 1st to Jan 5th (spaces are okay).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;span style="color: red;"&gt;7/20 - 8/20&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Display image from June 20th to August 20th.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;span style="color: red;"&gt;1/3rdMon&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Display image only on the 3rd Monday of January.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;span style="color: red;"&gt;5/lastMon&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Display image only on the last Monday of May.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;span style="color: red;"&gt;11/3rdThur-11/4thThur&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Display image from the 3rd Thursday of Nov to the 4th Thursday of Nov.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;span style="color: red;"&gt;12/20-1/1stSun&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Display image from Dec 20th to the 1st Sunday of January.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;IMPORTANT NOTES:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The dates that cross months (&lt;span style="color: red;"&gt;&lt;i&gt;7/20-8/20&lt;/i&gt;&lt;/span&gt;) will display along with date specific images (added to the randomization).&lt;/li&gt;&lt;li&gt;Use slashes "&lt;span style="color: red;"&gt;/&lt;/span&gt;" to  separate the month and day and dashes "&lt;span style="color: red;"&gt;-&lt;/span&gt;" to set a range (e.g., using &lt;i&gt;"1-1 to 1-5"&lt;/i&gt; will break the script) &lt;/li&gt;&lt;li&gt;Using the &lt;i&gt;last&lt;/i&gt; weekday (&lt;span style="color: red;"&gt;&lt;i&gt;lastMon&lt;/i&gt;&lt;/span&gt;) of the month in the date has one restriction at this time... it'll only works for 30 day months for now. I may fix this in future versions.&lt;/li&gt;&lt;li&gt;When using the text in the date (e.g. &lt;i&gt;&lt;span style="color: red;"&gt;1st&lt;/span&gt;, &lt;span style="color: red;"&gt;2nd&lt;/span&gt;, &lt;span style="color: red;"&gt;3rd&lt;/span&gt;, &lt;span style="color: red;"&gt;last&lt;/span&gt;&lt;/i&gt;) don't spell these fully out ( first, second, third) as the script is looking for the number and not the text.&lt;/li&gt;&lt;li&gt;The weekday in the date must have at least 3 letters - these are okay: (&lt;span style="color: red;"&gt;&lt;i&gt;Mon&lt;/i&gt;&lt;/span&gt; or &lt;span style="color: red;"&gt;&lt;i&gt;Monday&lt;/i&gt;&lt;/span&gt;); these are &lt;span style="text-decoration: underline;"&gt;not&lt;/span&gt; okay (&lt;i&gt;M&lt;/i&gt; or &lt;i&gt;Mo&lt;/i&gt;).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Image URL - Umm, yeah it's required.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Comment (optional)&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The image comment will be added to the image title (or not, as desired) or into any HTML tag using an ID or class name.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The script is set up so that the comment can include HTML elements to add styling, but be careful to not use quotes. The script does replace quotes with the HTML escape code " but this doesn't guarantee it will work once viewed in the comment div.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Data Sources&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This plugin is set up to accept data from a jQuery selector (for data contained in HTML), an array or a JSON variable that is inline or retrieved remotely.&lt;/li&gt;&lt;li&gt;There is an example how to accomplish each method below and there is also a demo of each (included in the zipped file).&lt;/li&gt;&lt;li&gt;The examples below expect an image with the ID of "todaysImage"&lt;/li&gt;&lt;li&gt;All data should be presented to the script in this order: date, url, comment; you can change this order, but it will require additional option settings, described later.&lt;/li&gt;&lt;li&gt;There is no need to maintain the exact chronological order of the data. I tried to keep them this way in the demo to make finding dates easier.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;All script should be wrapped in a $(document).ready function.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;HTML&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The data can be stored in an HTML list. You point your jQuery selector at the list and tell it which attributes have the data.&lt;/li&gt;&lt;li&gt;Here is an example list (hidden using CSS):&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;ul id="myImageList"&amp;gt;&lt;br /&gt;&amp;lt;li rel="0" title="images/main1.jpg"&amp;gt;Hello&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li rel="0" title="images/main2.jpg"&amp;gt;Hello&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li rel="12/31-1/5" title="images/new-year.jpg"&amp;gt;Happy New Year!&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li rel="5/1-8/5" title="images/Summer.jpg"&amp;gt;Summer time!&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;As you see, the list is stored in an&lt;span style="font-family: monospace;"&gt; &lt;/span&gt;&amp;lt;li&amp;gt; tag with the date in the rel attribute, the url in the title attribute and the comment inside the tag. This is how to set the script to gather the data correctly.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;$('#todaysImage').todaysImage({&lt;br /&gt;data       : $('#myImageList li'),&lt;br /&gt;dataObject : ['rel', 'title', 'html'] // these must be in this order: [date, url, comment]&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;The 'rel' and 'title' parts of the dataObject are attributes of the tag while the comments needs either a 'text' or 'html' to target its data; use 'html' as in the example, if you have included any styling in your comment.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;NOTE&lt;/span&gt;: As stated before the order of the dataObject is important - [ date, url, comment ]&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;ARRAY&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;An array can be set up, as I did in my original script, to contain all of the data needed for this script.&lt;/li&gt;&lt;li&gt;Once again, the order these are placed in the array are important, here is a basic template:&lt;br /&gt;&lt;br /&gt;images.push (["&lt;span style="color: red;"&gt;DATES&lt;/span&gt;","&lt;span style="color: #f79646;"&gt;IMAGE URL&lt;/span&gt;", "COMMENT"]);&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Here is an example:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;var images = [];&lt;br /&gt;images.push(["0","images/main1.jpg","Hello"]);&lt;br /&gt;images.push(["0","images/main2.jpg","Hello"]);&lt;br /&gt;images.push(["12/31-1/5","images/new-year.jpg","Happy New Year!"]);&lt;br /&gt;images.push(["5/1-8/5","images/Summer.jpg","Summer time!"]);&lt;/pre&gt;&lt;/blockquote&gt;the script below will access this data. Notice the dataObject option sets the order of the image array. If you already have an array with similar data, all you need to do is set the dataObject to point to the correct index so that this order is maintained [ date, image URL, comments ]  (e.g. images.push([ "comment", "other data", "dates", "url' ]), would required the dataObject to be [2, 3, 0]).&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;$('#todaysImage').todaysImage({&lt;br /&gt;data        : images,&lt;br /&gt;dataObject  : [0,1,2]&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JSON - inline&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I use this method when I have a short list and want to save myself a server call.&lt;/li&gt;&lt;li&gt;Take a standard JSON object and just add "var json =" in front of it.&lt;/li&gt;&lt;li&gt;If you already have a JSON set up but it has different names (or even a different language) then just adjust the dataObject as needed&lt;/li&gt;&lt;li&gt;Here is a basic template:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;var imageList = {"images": [&lt;br /&gt;{&lt;br /&gt;"dates"  : "0",&lt;br /&gt;"image"  : "images/main1.jpg",&lt;br /&gt;"comment": "Hello"&lt;br /&gt;},{&lt;br /&gt;"dates"  : "0",&lt;br /&gt;"image"  : "images/main2.jpg",&lt;br /&gt;"comment": "Hello"&lt;br /&gt;},{&lt;br /&gt;"dates"  : "12/31-1/5",&lt;br /&gt;"image"  : "images/new-year.jpg",&lt;br /&gt;"comment": "Happy New Year!"&lt;br /&gt;},{&lt;br /&gt;"dates"  : "5/1-8/5",&lt;br /&gt;"image"  : "images/Summer.jpg",&lt;br /&gt;"comment": "Summer time!"&lt;br /&gt;}&lt;br /&gt;]};&lt;/pre&gt;&lt;/blockquote&gt;The script below will access this data. Notice that "imageList" matches the variable and "images" matches the very first name in the JSON object (the key). The dataObject by default is [ 'dates', 'image', 'comment' ] which matches the JSON above; but if you have a JSON object that has different key names like "dateRange", "imageURL" and "imageComment", then you will need to set the dataObject appropriately to [ 'dataRange', 'imageURL', 'imageComment' ].&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;$('#todaysImage').todaysImage({&lt;br /&gt;data: imageList.images&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;JSON - remote&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use this method to load JSON from your server. It won't work cross domain (unless you have it setup to work with JSONP)&lt;/li&gt;&lt;li&gt;This method requires your JSON to be valid, or the object won't parse properly (this includes removing all comments)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This JSON, as stated before, is essentially the same as the JSON inline.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;{"images": [&lt;br /&gt;{&lt;br /&gt;"dates"  : "0",&lt;br /&gt;"image"  : "images/main1.jpg",&lt;br /&gt;"comment": "Hello"&lt;br /&gt;},{&lt;br /&gt;"dates"  : "0",&lt;br /&gt;"image"  : "images/main2.jpg",&lt;br /&gt;"comment": "Hello"&lt;br /&gt;},{&lt;br /&gt;"dates"  : "12/31-1/5",&lt;br /&gt;"image"  : "images/new-year.jpg",&lt;br /&gt;"comment": "Happy New Year!"&lt;br /&gt;},{&lt;br /&gt;"dates"  : "5/1-8/5",&lt;br /&gt;"image"  : "images/Summer.jpg",&lt;br /&gt;"comment": "Summer time!"&lt;br /&gt;}&lt;br /&gt;]};&lt;/pre&gt;&lt;/blockquote&gt;Access this remote JSON data as follows:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;$.getJSON( 'images.json', function(imageList){&lt;br /&gt;$('#todaysImage').todaysImage({&lt;br /&gt;data: imageList.images&lt;br /&gt;})&lt;br /&gt;})&lt;/pre&gt;&lt;/blockquote&gt;The JSON data in the example is from the file "images.json". Replace this with the URL pointing to your data. I used "imageList" as the JSON data to show the similarities to the JSON inline method. Of course "images" is the first element (key) in the JSON object, and the dataObject doesn't need modification as the names in the JSON object match.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: 180%; font-weight: bold;"&gt;Customizing&lt;/span&gt;&lt;br /&gt;This plugin has the following default options, so you will only need to include the line below if you want to change the default:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;$('#todaysImage').todaysImage({&lt;br /&gt;data         : '', // dataObject contains the date, image and comment names as seen in the data (names if JSON, numbers [0,1,2] in an array)&lt;br /&gt;dataObject   : ['dates','image','comment'],&lt;br /&gt;comment      : '.imageComment', // class or id where the current image comment will be added; if it doesn't exist, no comment will be shown&lt;br /&gt;noImageTitle : false,           // if true, the script will not add the comment to the image's title attribute&lt;br /&gt;&lt;br /&gt;/* language options */&lt;br /&gt;dayEndings : 'st|nd|rd|th',  // 1st, 2nd, 3rd, 4th, etc. (e.g. 1stMon &amp;amp; 3rdThu)&lt;br /&gt;dayLast    : 'last',         // last weekday/weekend of the month&lt;br /&gt;dayWeek    : ['sun','mon','tue','wed','thu','fri','sat'], // days of the week (case insensitive)&lt;br /&gt;&lt;br /&gt;/* debugging options */&lt;br /&gt;locked          : false,// prevent debug mode onscreen output if true (debug setting from browser URL only).&lt;br /&gt;debug           : false,// set debug mode.&lt;br /&gt;debugId         : 'imagedebug', // id of the debug output div - all info and show all images will be added here.&lt;br /&gt;debugElement    : 'body',       // Location where debug id is added (where debugId div is appended)&lt;br /&gt;defaultDate     : '1/1/2010',   // date used if setting debug mode but no default date.&lt;br /&gt;inRangeColor    : '#080',       // color highlight (green) for signifying the date is in range.&lt;br /&gt;notInRangeColor : '#f00'// color highlight (red) for dates not in range.&lt;br /&gt;})&lt;/pre&gt;&lt;/blockquote&gt;&lt;table class="table"&gt;&lt;tbody&gt;&lt;tr style="background-color: #595959;"&gt;&lt;td style="color: white; width: 100px;"&gt;Option&lt;/td&gt;&lt;td style="color: white;"&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;data&lt;/td&gt;&lt;td&gt;Please refer to the Data Sources section above on how to set this data&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dataObject&lt;/td&gt;&lt;td&gt;Please refer to the Data Sources section above on how to set this data&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;comment&lt;/td&gt;&lt;td&gt;This option targets the class or Id of an HTML element where you want the current image comment to be displayed, if this target doesn't exist, no comment will be shown&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;noImageTitle&lt;/td&gt;&lt;td&gt;Prevent the script from adding the comment to the image title. Done if you want to apply a tooltip to the image to display the message&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dayEndings&lt;/td&gt;&lt;td&gt;Abbreviation suffixes for 1st, 2nd, 3rd, 4th, etc. The script actually only uses these to match the date string, but they are ignored otherwise. So if you mistakenly add 4rd, it will use the 4 and not the "rd"&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dayLast&lt;/td&gt;&lt;td&gt;String used to match and causes the script to find the last weekday/weekend of the month (e.g. lastMon)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;dayWeek&lt;/td&gt;&lt;td&gt;List of days of the week. It is used to match the weekday from the data date, so this is language agnostic, but the first day of the array must start with sunday to match the javascript date method. Limit these names to three letters and the letter case doesn't matter.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;monthFirst&lt;/td&gt;&lt;td&gt;Set to true (default) to use standard US date formatting - mm/dd/yyyy. If set to false, the European date format can be used - dd/mm/yyyy.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;locked&lt;/td&gt;&lt;td&gt;Locks out using the debug mode from the browser address bar (adding "#debug" to the url will enable debug mode if the script isn't locked, like my demo)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;debug&lt;/td&gt;&lt;td&gt;Enable debug mode through the script. This value is set to true if the script is not locked and "#debug" is added to the url. This mode will display image data to show matches found and date ranges. For more detail, see the troubleshooting section below&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;debugId&lt;/td&gt;&lt;td&gt;This is the Id of the element to find to output the debug data. If it doesn't exist and debug mode is initiated, a div with this Id will be added to the debugElement (see below) which by default is the document body. If using the showAll() method above, this element will need to me manually added before images will be displayed.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;debugElement&lt;/td&gt;&lt;td&gt;By default, the debug element is the document body. This is where the debugId div is appended, if it doesn't exist, when debug mode is initiated.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;defaultDate&lt;/td&gt;&lt;td&gt;This date is only used if the debug mode is initiated by the script and no other date is supplied. The default date for the debug mode when adding it to the url would be the current date unless otherwise specified - see the troubleshooting section below for more details&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;inRangeColor&lt;/td&gt;&lt;td&gt;Text color applied to the debug text when an image date is in range (green by default)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;notInRangeColor&lt;/td&gt;&lt;td&gt;Text color applied to the debug text when an image date is not in range (red by default)&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size: 180%; font-weight: bold;"&gt;Methods&lt;/span&gt;&lt;br /&gt;You can get, set, find current number or have the script choose another random image as follows:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Get current image data&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Use the "currentImage()" method to get this data.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This method will return an array of the currently displayed image's date, url and comment (in that order).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The second line was added to show how to target the image url.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;var current = $(image).data('todaysImage').currentImage(); // returns array ['dates','image url','comment']&lt;br /&gt;alert( 'current image url = ' + current[1] );&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Set/Get current image&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Add a number to the "currentImage()" method to set the image. An array of the image is returned (as above).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Setting a number that is greater than the number of images in the date range will cause the image to wrap around back to the beginning&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// Sets displayed image to the first (zero based index) image that falls within the date range,&lt;br /&gt;// then returns array ['dates','image url','comment'] of that image&lt;br /&gt;var current = $(image).data('todaysImage').currentImage(1);&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Get current number of images&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Use the "currentNumber()" method to get this information.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This value is the number of images with a date range that covered the date (e.g. if the date is 12/24, the  demo script will find 8 images from which to choose)&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// return the number of images that have date ranges that match the date&lt;br /&gt;var currentNumber = $(image).data('todaysImage').currentNumber(); // returns a number&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Random Image&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use the "randomImage()" method to display another random image.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This method will return an array of the currently displayed image's date, url and comment (in that order).&lt;pre class="brush: js"&gt;$(image).data('todaysImage').randomImage(); // displays a random image in the date range &amp;amp; returns array&lt;/pre&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Show All Images&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This method is used by in edit mode when clicking on the "Show All Images" button. It is useful for checking that all the image urls are correct and all the data is valid.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// Show all images in the data, the script targets the id found in "debugId" option&lt;br /&gt;$(image).data('todaysImage').showAll();&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;This method will not work if the element targeted by the "debugId" option doesn't exist. By default, the "debugId" is "imagedebug" which is added while the script is in debug mode. But if you want to display a list somewhere else, just make sure the target exists (Id only, no class) and change the "debugId" option to match it.&lt;br /&gt;&lt;blockquote&gt;CSS&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css"&gt;#allImages img { height: 100px; width: 100px; } /* make images thumbnail size */&lt;/pre&gt;&lt;/blockquote&gt;HTML&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;div id="allImages"&amp;gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;Script&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// initialization of script&lt;br /&gt;$('#todaysImage').todaysImage(&lt;br /&gt;// other options here, including data source&lt;br /&gt;debugId : 'allImages'&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 180%;"&gt;&lt;span style="font-weight: bold;"&gt;Troubleshooting&lt;/span&gt;&lt;/span&gt;  &lt;ul&gt;&lt;li&gt;If you are noticing that one image isn't showing up or something just doesn't work right, you can try to trouble shoot the problem.&lt;/li&gt;&lt;li&gt;Initiate the debug mode in the script as follows:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// initialization of script&lt;br /&gt;$('#todaysImage').todaysImage(&lt;br /&gt;// other options here, including data source&lt;br /&gt;debug: true,&lt;br /&gt;defaultDate: '12/24/2010' // choose any date using this format&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Additionally, you can  access the debug mode from the address bar simply by adding the following (in &lt;span style="color: #6666cc;"&gt;blue&lt;/span&gt;) to the end:&lt;br /&gt;&lt;br /&gt;http://myurl.com/randomImage.htm&lt;b style="color: #6666cc;"&gt;&lt;span style="color: #b2a2c7;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #33ccff; font-weight: bold;"&gt;#debug:12/31/2009&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: #33ccff; font-weight: bold;"&gt;#debug&lt;/span&gt; - actives the debug mode&lt;/li&gt;&lt;li&gt;&lt;b style="color: #6666cc; font-weight: normal;"&gt;&lt;span style="color: #b2a2c7;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;span style="color: #33ccff; font-weight: bold;"&gt;12/31/2009&lt;/span&gt; - sets the date you want to check (month/day/year)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;To prevent debug from working once you are done with your script, simply set the locked variable in the script to true:&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// initialization of script&lt;br /&gt;$('#todaysImage').todaysImage(&lt;br /&gt;// other options here, including data source&lt;br /&gt;// locks out debug mode from the URL&lt;br /&gt;locked: true&lt;br /&gt;});&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Sample debug output:&lt;br /&gt;&lt;blockquote&gt;Date used: 11/20/2009&lt;br /&gt;(11/11), derived range: 11-11 is &lt;span style="color: red;"&gt;NOT in range&lt;/span&gt;; image = veterans1.jpg&lt;br /&gt;(11/11), derived range: 11-11 is &lt;span style="color: red;"&gt;NOT in range&lt;/span&gt;; image = veterans2.jpg&lt;br /&gt;(11/11), derived range: 11-11 is &lt;span style="color: red;"&gt;NOT in range&lt;/span&gt;; image = veterans3.jpg&lt;br /&gt;(11/3rdThur-11/4thThur), derived range: 19-26 &lt;span style="color: #008800;"&gt;is in range&lt;/span&gt;; image = thanksgiving1.jpg&lt;br /&gt;(11/3rdThur-11/4thThur), derived range: 19-26 &lt;span style="color: #008800;"&gt;is in range&lt;/span&gt;; image = thanksgiving2.jpg&lt;br /&gt;(11/3rdThur-11/4thThur), derived range: 19-26 &lt;span style="color: #008800;"&gt;is in range&lt;/span&gt;; image = thanksgiving3.jpg&lt;br /&gt;(11/3rdThur-11/4thThur), derived range: 19-26 &lt;span style="color: #008800;"&gt;is in range&lt;/span&gt;; image = thanksgiving4.jpg&lt;br /&gt;&lt;br /&gt;# of currentImages = 4&lt;br /&gt;current random image = thanksgiving4.jpg&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Try out these links to see the debug mode in action (my example script isn't locked):&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://mottie.github.com/todaysImage/index.html#debug:1.1.2010"&gt;#debug:1.1.2010&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://mottie.github.com/todaysImage/index.html#debug:10/31/2009"&gt;#debug:10/31/2009&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://mottie.github.com/todaysImage/index.html#debug"&gt;#debug&lt;/a&gt; - This will default to todays date, but edit mode is active&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-8265636366182579514?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/8265636366182579514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/07/todaysimage-v10.html#comment-form' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/8265636366182579514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/8265636366182579514'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/07/todaysimage-v10.html' title='todaysImage v1.0'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-7851223085074232476</id><published>2010-06-30T12:41:00.023-05:00</published><updated>2010-10-12T14:21:08.291-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Images'/><category scheme='http://www.blogger.com/atom/ns#' term='Highlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Media'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>ImageHighlighter v1.01</title><content type='html'>ImageHighlighter is an updated version of my original &lt;a href="http://wowmotty.blogspot.com/2009/09/imghighlighter-jquery-plugin.html"&gt;imgHighLighter&lt;/a&gt; plugin with lot of improvements! Most are under the hood so you probably won't see too much of a difference on the surface.&lt;br /&gt;&lt;br /&gt;This plugin allows you to highlight a portion of an image when you hover over a link. In the image below, the mouse is hovering over the different links and you can see the corresponding portion of the image becomes highlighted (there is an animate gif below, but just click on the image to go to the demo page).&lt;br /&gt;&lt;a href="http://mottie.github.com/imageHighlighter/index.html"&gt;&lt;img alt="" border="0" src="http://dl.dropbox.com/u/1510510/jquery-imageHighlighter/imgHighlight.gif" style="cursor: pointer; display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;/a&gt;I set up an &lt;a href="http://mottie.github.com/imageHighlighter/index.html"&gt;demo page here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Download: &lt;a href="http://mottie.github.com/imageHighlighter/js/jquery.imageHighlighter.js"&gt;Uncompressed&lt;/a&gt; | &lt;a href="http://mottie.github.com/imageHighlighter/js/jquery.imageHighlighter.min.js"&gt;Minified&lt;/a&gt; | &lt;a href="http://github.com/Mottie/imageHighlighter/zipball/master"&gt;Zipped Demo&lt;/a&gt; | &lt;a href="http://github.com/Mottie/imageHighlighter"&gt;Github&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have tested this plugin in IE8, Firefox and Chrome. Please leave me feedback if you any problems with how it works or if it doesn't work in other browsers.&lt;br /&gt;&lt;br /&gt;7/6/2010: Updated this post to describe v1.01 where the editor portion of the script was moved into a plugin extension. And support for jCrop was added to allow selecting the entire box instead of just getting the mouse coordinates. Check out the updated demo page!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 180%; font-weight: bold;"&gt;Setup&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This plugin requires jQuery.&lt;/li&gt;&lt;li&gt;&lt;a href="http://cherne.net/brian/resources/jquery.hoverIntent.html"&gt;HoverIntent&lt;/a&gt; is an optional plugin, this plugin will use it's functionality if it is included.&lt;/li&gt;&lt;li&gt;Follow this basic template with a quick summary for each image you want to apply imageHighlighter functionality. For more details, go to the specific section.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;HTML&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css; html-script: true"&gt;&amp;lt;div&amp;gt;&lt;br /&gt;&amp;lt;ul class="imgHL"&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;lt;a href="#" rel="sx1,sy1,ex2,ey2"&amp;gt;Item #1&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;Description for item #1&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;lt;a href="#" rel="sx1,sy1,ex2,ey2"&amp;gt;Item #2&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;Description for item #2&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;lt;a href="#" rel="sx1,sy1,ex2,ey2"&amp;gt;Item #3&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;lt;p&amp;gt;Description for item #3&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;br&amp;gt;&lt;br /&gt;&amp;lt;img id="imgHL" src="myimage.jpg" alt="" /&amp;gt;&lt;br /&gt;&amp;lt;div class="description"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;In the HTML above, the highlight links are all wrapped in a div with a class name "imgHL" to make them easier to target.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The highlight links (&amp;lt;a&amp;gt;) must contain a rel attribute with the highlight box coordinates (see the Highlights section below for more detail).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Each link/description pair is wrapped together (inside an &amp;lt;li&amp;gt; in this case). See the Descriptions section below for more details.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The image is the central element. Once the script is initialized, the image will contain all of the plugin information. It is also the target of both the imageHighlighter and imageHighlighterEditor scripts.&lt;/li&gt;&lt;li&gt;The highlight description will be placed into the div with class "description". You can target a different class/Id when you modify the script options.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;CSS&lt;/span&gt;&lt;/span&gt; (basic example)&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css;"&gt;/* List link: currently hovered/selected */&lt;br /&gt;a.current { color: #fff; }&lt;br /&gt;&lt;br /&gt;/* Hide &amp;amp; Position Descriptions */&lt;br /&gt;.imgHL p { display: none; }&lt;br /&gt;.description { margin: 1em auto; clear: both; width: 450px; height: 2.4em; }&lt;br /&gt;&lt;br /&gt;/* General imageHighlighter (overlay and highlight) */&lt;br /&gt;.imageHighlighter, .imgHLDark, .imgHLLight, .imgHLOverlay { padding: 0; margin: 0; } /* overlay and highlight divs */&lt;br /&gt;.imgHLOverlay { background: #000; opacity: .5; filter: alpha(opacity=50); } /* overlay color &amp;amp; opacity *&lt;/pre&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;When a link is hovered and the image reveals the highlight box, the class "current" is applied to the link. You can use this to style the link and make it stand out.&lt;/li&gt;&lt;li&gt;The css definition ".imgHL p" hides the descriptions that appear under the image (in this example). The description is moved into the ".description" element when the highlight link is hovered.&lt;/li&gt;&lt;li&gt;The description class can be placed anywhere on the page; but because of this, the class name ".description" must be unique for each imageHighlighter instance on the page. You can easily modify this class name using the plugin options.&lt;/li&gt;&lt;li&gt;The general imageHighlighter definitions apply to the div wrapping the image (.imageHighlighter), the overlay (.imgHLOverlay &amp;amp; .imgHLDark) and the highlighted box (.imgHLLight). As you can see, the overlay has a background color and 50% opacity to darken the image behind the highlight. This can be set to transparent here in the CSS or disabled using the script.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 130%;"&gt;&lt;span style="font-weight: bold;"&gt;Javascript&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;/* window load ensures all images are loaded */&lt;br /&gt;$(window).load(function(){&lt;br /&gt;$('#imgHL').imageHighlighter({&lt;br /&gt;list : '.imgHL a'&lt;br /&gt;});&lt;br /&gt;})&lt;/pre&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;This script uses "window.load" instead of "document.ready" to ensure that all images have been loaded. This is necessary as the script needs the image dimensions in order to initialize properly.&lt;/li&gt;&lt;li&gt;In this basic example, the highlight links are targeted using the ".imgHL" div that wraps the entire list. The default list setting is "a" which is much too general to use, but the script will ignore any link that doesn't contain a rel tag.&lt;/li&gt;&lt;li&gt;There are more options that can be set. For a full list and detailed descriptions, look under the customizing/options section!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Highlights&lt;/span&gt;: The highlight link's "rel" attribute contains all the information needed for the highlights.&lt;br /&gt;&lt;blockquote&gt;&lt;table class="table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td colspan="3"&gt;rel="&lt;span style="font-weight: bold;"&gt;&lt;span style="color: #993399;"&gt;sx1&lt;/span&gt;,&lt;span style="color: #993399;"&gt;sy1&lt;/span&gt;,&lt;span style="color: #cc0000;"&gt;ex2&lt;/span&gt;,&lt;span style="color: #cc0000;"&gt;ey2&lt;/span&gt;&lt;/span&gt;"&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="color: #993399; font-weight: bold;"&gt;sx1&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Starting X position of the highlight box &lt;/td&gt;&lt;td rowspan="2"&gt;&lt;span style="font-size: 24px;"&gt;}&lt;/span&gt; top left corner&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="color: #993399; font-weight: bold;"&gt;sy1&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Starting Y position of the highlight box&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="color: #cc0000; font-weight: bold;"&gt;ex2&lt;/span&gt; &lt;/td&gt;&lt;td&gt;Ending X position of the highlight box&lt;/td&gt;&lt;td rowspan="2"&gt;&lt;span style="font-size: 24px;"&gt;}&lt;/span&gt; bottom right corner &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="color: #cc0000; font-weight: bold;"&gt;ey2&lt;/span&gt;&lt;/td&gt;&lt;td&gt;Ending Y position of the highlight box&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt;You can change the highlight properties  of each image using: &lt;span style="font-style: italic; font-weight: bold;"&gt;borderColor&lt;/span&gt;, &lt;span style="font-style: italic; font-weight: bold;"&gt;borderSize&lt;/span&gt; &amp;amp; &lt;span style="font-style: italic; font-weight: bold;"&gt;borderType&lt;/span&gt; described in the Customizing/Options section below.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Image:&lt;/span&gt; The image must be targeted when initializing the script. You could target the class ('.imgHL') in the example above and the script will initialize once it has found the image from that group of selections. The image contains all of the data associated with this plugin, from using the built in methods to targeting custom events.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$("#imgHL").imageHighlighter();&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Descriptions:&lt;/span&gt; Each link/description pair should be wrapped together. In the demo where the links are in a paragraph, the link/description pairs are wrapped in a span:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;span&amp;gt;&amp;lt;a rel="sx1,sy1,ex2,ey2"&amp;gt;Item #1&amp;lt;/a&amp;gt;&amp;lt;span class="desc"&amp;gt;Description for Item #1&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;In the other example, the pair are wrapped inside of a list (&amp;lt;li&amp;gt;). Make sure that the descriptions are hidden and targeted by the "descrip" plugin option. The script will look inside the link highlight wrapper, so you don't necessarily have to have a specific class assigned to it as long as the element is unique (e.g. don't have two &amp;lt;p&amp;gt;'s inside with the highlight link otherwise the contents of both will be displayed in the description.&lt;br /&gt;&lt;br /&gt;The second part of the description is set using the "descripClass". The descriptions for the highlight will appear inside an element with this class, when hovering over a link. It can be located anywhere on the page, but the class/id needs to be set in the plugin options and unique for each instance of the plugin.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Overlay:&lt;/span&gt; The overlay covers the image (darkens the background) to make the highlighted portion stand out more. You can adjust the opacity of this overlay in the CSS and you can turn off the overlay functi0nality by setting the &lt;span style="font-style: italic; font-weight: bold;"&gt;overlay&lt;/span&gt; option to false.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 180%;"&gt;&lt;span style="font-weight: bold;"&gt;Customizing / Options&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;This plugin has the following default options, so you will only need to include the line below if you want to change the default:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$("#imgHL").imageHighlighter({&lt;br /&gt;borderColor : "#fff",         // highlight border color&lt;br /&gt;borderSize  : 4,              // highlight border thickness&lt;br /&gt;borderType  : "solid",        // highlight border type&lt;br /&gt;list        : "a",            // links that contain the highlight coordinates (e.g. "li.imgHL a")&lt;br /&gt;descrip     : "p",            // HTML tag sibling of the link, that contains the description text (hidden) (e.g. "p.desc")&lt;br /&gt;descripClass: ".description", // HTML tag where description text is shown (placeholder)&lt;br /&gt;overlay     : true,           // display an overlay to make the highlight stand out&lt;br /&gt;current     : "current",      // class applied to link currently used to highlight the image&lt;br /&gt;hoverTimeout: 100,            // hoverIntent timeout (only applied if hoverIntent plugin is loaded)&lt;br /&gt;zindex      : 10              // z-index of highlight box, overlay is automatically made 1 less than this number&lt;br /&gt;})&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-size: 180%;"&gt;&lt;span style="font-weight: bold;"&gt;Methods&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;You can use the following methods to get and set the highlighted content. Note that these methods must target the image.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Get:&lt;/span&gt; In the following example, the variable current will contain the current link &lt;span style="font-style: italic;"&gt;object &lt;/span&gt;that has been highlighted. If nothing is currently highlighted, the script will return &lt;span style="font-style: italic;"&gt;null&lt;/span&gt;.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;var $current = $('#imgHL').data('imageHighlighter').highlight();&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Set/Get:&lt;/span&gt;&lt;/li&gt;&lt;blockquote&gt;&lt;li&gt;Use a number (indexed from one: first, second, etc) - if the nth link doesn't exist, it will return &lt;span style="font-style: italic;"&gt;null&lt;/span&gt;.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;var $current = $('#imgHL').data('imageHighlighter').highlight(1); // select the first link&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Search for the case-sensitive text within the link (uses the jQuery ":contains()" selector) - if the text is not found, the script will return &lt;span style="font-style: italic;"&gt;null&lt;/span&gt;.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;var $current = $('#imgHL').data('imageHighlighter').highlight("frames");&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Search for the link with a class or ID - if the selector is not found, the script will return &lt;span style="font-style: italic;"&gt;null&lt;/span&gt;.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;var $current = $('#imgHL').data('imageHighlighter').highlight(".box");&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;&lt;span style="font-size: 180%;"&gt;&lt;span style="font-weight: bold;"&gt;Edit Mode&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Updated in v1.01:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The edit mode script was moved into an extension for the plugin. This was done because the edit script is not required once the coordinates are obtained and the script is deployed on your site.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Additionally, the script was made to work with the &lt;a href="http://deepliquid.com/content/Jcrop.html"&gt;Jcrop&lt;/a&gt; plugin (included with the demo file zip) allowing you to use a resizable selection box to more easily get the coordinates.&lt;/li&gt;&lt;li&gt;If you click on the coordinates, the coordinates (contained in an input tag) become selected, so you can more easily copy them.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Edit mode for this plugin should make it easier to obtain the coordinates of the highlight box - the coordinates added to the highlight link rel attribute.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;As of v1.01, edit mode can be activated by:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Including the imageHighlighterEditor script &amp;amp; the jCrop plugin script, if desired.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Set up the editor by calling the script on the same image(s) as the imageHighlighter script. You can generalize the call by targeting the ".imageHighlighter" class (applied to a div that wraps the image after the imageHighlighter script is applied to it). There is only one options, seen below:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// Enable the editor and use the Jcrop plugin, if it is available&lt;br /&gt;$('div.imageHighlighter img').imageHighlighterEditor();&lt;br /&gt;&lt;br /&gt;// Enable the editor, but don't use the Jcrop plugin (even if it has been loaded)&lt;br /&gt;$('div.imageHighlighter img').imageHighlighterEditor({ useJcrop: false });&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Now activate or deactivate edit mode by double clicking on the image. A green bar (styled in the CSS) will appear below the image which will show the mouse coordinates (default editor) or the box coordinates (Jcrop plugin added).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;li&gt;With the editor active:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Default editor - move the cursor over the image to find the coordinates. Then clicking on the image will lock the coordinate display and make copying these numbers easier.&lt;blockquote&gt;Mouse x,y coordinates (click to lock/unlock) : x,y&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Jcrop plugin installed - single click anywhere on the image to make the a corner of the box, then drag your mouse any direction to create a resizeable box. The coordinates of the upper left and bottom right corners of the box will display under the image:&lt;blockquote&gt;Current box coordinates : x1,y1,x2,y2&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Click on the coordinates (they are inside an input tag). The contents will automatically be selected, but not copied.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When you hover over a highlight link, the highlight link name and coordinates from that link is displayed above the coordinate bar.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 180%;"&gt;&lt;span style="font-weight: bold;"&gt;Bugs / Suggestions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;When the window is repositioned, the highlights may be off until it is refreshed again when you hover over a link (especially while in edit mode), and sometimes you'll need to reload the page.&lt;/li&gt;&lt;li&gt;To make suggestions or report any bugs please email me at wowmotty at g mail dot com.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-7851223085074232476?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/7851223085074232476/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/06/imagehighlighter-v10.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7851223085074232476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7851223085074232476'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/06/imagehighlighter-v10.html' title='ImageHighlighter v1.01'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-5931974498635006807</id><published>2010-06-21T13:11:00.012-05:00</published><updated>2011-10-08T08:11:29.094-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Images'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Moving Boxes Updated</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Update (10/8/2011):&lt;/span&gt;&amp;nbsp;A plugin is now available for WordPress for MovingBoxes v2.1.4, which you can &lt;a href="http://wordpress.org/extend/plugins/movingboxes-wp/"&gt;download here&lt;/a&gt; or search for 'movingboxes' in your 'Install Plugins' page of your site admin section. More features and options will be added once craftyhub, the author, gets settled in :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Update&amp;nbsp;(10/13/2010):&lt;/b&gt; Version 1.5 now available!&lt;br /&gt;&lt;br /&gt;I've updated the &lt;a href="http://css-tricks.com/moving-boxes/"&gt;Moving Boxes&lt;/a&gt; script by Chris Coyier by converting the script into a plugin so now you can add multiple Moving Boxes blocks on the page at one time.&lt;br /&gt;&lt;br /&gt;I haven't done extensive testing of the script, so if you find any bugs please feel free to contact me.&lt;br /&gt;&lt;br /&gt;Download: &lt;a href="http://chriscoyier.github.com/MovingBoxes/js/jquery.movingboxes.js"&gt;uncompressed&lt;/a&gt;  | &lt;a href="http://chriscoyier.github.com/MovingBoxes/js/jquery.movingboxes.min.js"&gt;minified&lt;/a&gt;  | &lt;a href="http://github.com/chriscoyier/MovingBoxes/zipball/master"&gt;zipped file&lt;/a&gt; | &lt;a href="http://github.com/chriscoyier/MovingBoxes"&gt;github&lt;/a&gt; (see a &lt;a href="http://chriscoyier.github.com/MovingBoxes"&gt;demo&lt;/a&gt;!)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Options&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use these key : value pairs as follows; Note that  the last key : value  pair does not have a trailing comma&lt;/li&gt;&lt;/ul&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;$(function(){&lt;br /&gt;$(selector).movingBoxes({ key: value, key: value, key: value })&lt;br /&gt;})&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;table class="keytable"&gt;&lt;tbody&gt;&lt;tr style="background-color: #555555; color: #dddddd;"&gt;&lt;td style="font-weight: bold; text-align: center;"&gt;Key&lt;/td&gt;&lt;td style="font-weight: bold; text-align: center;"&gt;Value&lt;br /&gt;(default  shown)&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;startPanel&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Choose the initial panel to show in the scroll window.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;width&lt;/td&gt;&lt;td&gt;800&lt;/td&gt;&lt;td&gt;Overall width of movingBoxes.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;panelWidth&lt;/td&gt;&lt;td&gt;.50&lt;/td&gt;&lt;td&gt;Current panel width adjusted to 50% of movingBoxes width.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;reducedSize&lt;/td&gt;&lt;td&gt;.8&lt;/td&gt;&lt;td&gt;Non-current panel size: 80% of current panel size.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;imageRatio&lt;/td&gt;&lt;td&gt;4/3&lt;/td&gt;&lt;td&gt;Image ratio set to 4:3. Wide screen would be 16:9 (16/9).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;speed&lt;/td&gt;&lt;td&gt;500&lt;/td&gt;&lt;td&gt;Animation time in milliseconds for the scroll and expanding of the panel.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;hashTags&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;If true, hash tags (browser history) are enabled.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;wrap&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;If true,the panel will "wrap" at the ends.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt;&lt;span style="font-weight: bold;"&gt;Methods&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;Panels are numbered as a standard index (1st panel number is one, second is two, etc.).&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Get number of currently selected panel:&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$('.slider').data('movingBoxes').currentPanel();&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Set currently selected panel:&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$('.slider').data('movingBoxes').currentPanel(2);&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;External controls:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$('.slider').data('movingBoxes').goForward(); // go forward one slide (if possible)&lt;br /&gt;$('.slider').data('movingBoxes').goBack();    // go back one slide (if possible)&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-5931974498635006807?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/5931974498635006807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/06/moving-boxes-updated.html#comment-form' title='25 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/5931974498635006807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/5931974498635006807'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/06/moving-boxes-updated.html' title='Moving Boxes Updated'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>25</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-4935088650336351614</id><published>2010-06-19T17:46:00.022-05:00</published><updated>2010-10-12T13:48:37.451-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Images'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Progress Indicator</title><content type='html'>&lt;img alt="" border="0" src="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/loading7.gif" style="float: right; height: 32px; width: 32px;" /&gt;I wrote this plugin to allow more control over the progress indicator. To the right is an animated gif progress indicator. All you can do is show or hide this image. This plugin allows you to make a similar indicator that you can fully control. The plugin will animate both text (including bullets) or images, I guess  you could also animate embedded objects, but I haven't tested this. The reason I call this progress indicator dynamic is you can modify or update the objects in the indicator at any time (e.g. replace images or text while the indicator is active). I'll make a demo of this when I have more time :)&lt;br /&gt;&lt;br /&gt;In the demo below, you can start or stop the timer to make the progression indicator simulate the animated image or you can move the slider to animate the indicator.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe align="top" allowtransparency="true" frameborder="0" height="500" scrolling="no" src="http://mottie.github.com/progressIndicator/index.html" width="465"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;Download: &lt;a href="http://mottie.github.com/progressIndicator/js/jquery.progressindicator.js"&gt;uncompressed&lt;/a&gt; | &lt;a href="http://mottie.github.com/progressIndicator/js/jquery.progressindicator.min.js"&gt;minified&lt;/a&gt; | &lt;a href="http://github.com/Mottie/progressIndicator/zipball/master"&gt;zipped file&lt;/a&gt; | &lt;a href="http://github.com/Mottie/progressIndicator"&gt;github&lt;br /&gt;&lt;/a&gt;(zip includes demo; go to link, then download... I'm not sure why you can't download it  directly)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Setup&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;CSS (basic setup)&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css;"&gt;.progress {&lt;br /&gt;position: relative;&lt;br /&gt;top: 0;&lt;br /&gt;left: 0;&lt;br /&gt;width: 200px;&lt;br /&gt;height: 200px;&lt;br /&gt;overflow: hidden;&lt;br /&gt;}&lt;br /&gt;.progress span {&lt;br /&gt;position: absolute;&lt;br /&gt;left: -50px; /* hide spans until initialized */&lt;br /&gt;top: 0;&lt;br /&gt;padding: 0;&lt;br /&gt;margin: 0;&lt;br /&gt;border: 0;&lt;br /&gt;}&lt;br /&gt;.display {&lt;br /&gt;position: absolute;&lt;br /&gt;top: 95px;&lt;br /&gt;left: 90px;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;HTML&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;div class="progress"&amp;gt;&lt;br /&gt;&amp;lt;!-- this displays the percent value, position in the middle with CSS --&amp;gt;&lt;br /&gt;&amp;lt;div class="display"&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;!-- add as many &amp;lt;span&amp;gt;s as you want, add any text or image inside --&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&amp;amp;bull;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&amp;amp;bull;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&amp;amp;bull;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&amp;amp;bull;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&amp;amp;bull;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;span&amp;gt;&amp;amp;bull;&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Script - Initialization&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;&amp;lt;script type="text/javascript" src="jquery.progressindicator.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;$(document).ready(function(){&lt;br /&gt;// initialize: initialValue is uaually zero, and a full list of "options" can be found below.&lt;br /&gt;$(selector).progressIndicator( initialValue, options );&lt;br /&gt;})&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;List of &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Default Settings&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Use these key : value pairs as follows; Note that  the last key : value pair does not have a trailing comma and values  that use true or false (Boolean values) should not be in quotes.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;$(selector).progressIndicator( initialValue, { key: value, key: value, key: value })&lt;/pre&gt;&lt;/blockquote&gt;&lt;table class="keytable"&gt;&lt;tbody&gt;&lt;tr style="background-color: #555555; color: #dddddd;"&gt;&lt;td style="font-weight: bold; text-align: center;"&gt;Key&lt;/td&gt;&lt;td style="font-weight: bold; text-align: center;"&gt;Value&lt;br /&gt;(default  shown)&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;max&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;The circle is split into this max number of increments (default set to 100 to match a percentage going from 0-99).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;radius&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;Sets the radius of the circle in pixels measured from the centerX and centerY position (middle).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;centerX&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;Positions the center of the circle 100 pixels from the left edge of its container.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;centerY&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;Positions the center of the circle 100 pixels from the top edge of the container.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;clockwise&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;Sets the direction of the rotation. Clockwise if true and counter (or anti for you British folk) clockwise if false.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;startPosition&lt;/td&gt;&lt;td&gt;0.75&lt;/td&gt;&lt;td&gt;This may not make sense if you don't know the coordinate system, but basically zero is the far right side of the circle or the x-y coordinates of  ( x=radius, y=0 ) . So if you want to have the indicator start with the "zero" at the top of the circle, you need to start from 75% or 3/4 of your way around the circle. So basically, set 0 to start on the right, .25 (25%) for bottom, .5 (50%) for left and .75 (75%) would be the top of the circle  where ( x = 0 , y = radius ).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sizeStart&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;Sets the starting size of the element to 80 pixels. This sets the font size, the height &amp;amp; width of any element inside the span (like an image)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;sizeDec&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;Sets how much to decrement the size of the next element from the starting size. Try to avoid making the decrement size that would cause the last element to be too small or negative (for example: these settings would not look good, 10 spans inside the progress indicator (in the HTML), sizeStart = 20, sizeDec = 2; this would make the last span element have a size of zero (20 - 2 * 10 = 0).&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;showValue&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;Adds the progress indicator value to the "display" class inside the progress div. If you want to be tricky, add the display class to one of your spans to have the indicator move around with the other elements.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;timerActive&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;Initialize progression indicator start and stop functions allowing the indicator to move independent of the percent value.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;timerSpeed&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;Sets the setInterval time in milliseconds.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;timerIncrement&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;At each setInterval call, the progression indicator is incremented by this value. Make this number bigger to speed up the animation, but the bigger the number, the more choppy the animation.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Methods&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Get &amp;amp; Set Progression Value&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;// Get current value (percentage)&lt;br /&gt;var value = $(selector).data('progressIndicator').getValue();&lt;br /&gt;&lt;br /&gt;// Set/Update current value&lt;br /&gt;$(selector).data('progressIndicator').update( value );&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Animation timer functions (the timerActive option must be true before these will work)&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;// Start animation timer&lt;br /&gt;$(selector).data('progressIndicator').start();&lt;br /&gt;&lt;br /&gt;// Stop animation timer&lt;br /&gt;$(selector).data('progressIndicator').stop();&lt;br /&gt;&lt;br /&gt;// Reset animation timer (just resets position)&lt;br /&gt;$(selector).data('progressIndicator').reset();&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Examples&lt;/span&gt; - Be sure to look at the demo source to see some other examples of what is possible!&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;&lt;/b&gt;These examples  should be wrapped inside of a:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family: courier new;"&gt;$(document).ready(function(){  ... })&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;replace the  ellipsis (...) with the script in the column below.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;table class="keytable"&gt;&lt;tbody&gt;&lt;tr&gt;                      &lt;td align="center" style="background-color: #595959; width: 110px;"&gt;&lt;span style="color: white;"&gt;&lt;b&gt;Action&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;                      &lt;td align="center" style="background-color: #595959; width: 240px;"&gt;&lt;span style="color: white;"&gt;&lt;b&gt;Script&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;                      &lt;td align="center" style="background-color: #595959;"&gt;&lt;span style="color: white;"&gt;&lt;b&gt;Notes:&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;                  &lt;/tr&gt;&lt;tr&gt;                     &lt;td&gt;Set up timer, so the start &amp;amp; stop methods are available. And adjust animation speed.&lt;/td&gt;                      &lt;td&gt;&lt;span style="font-family: courier new; font-size: 85%;"&gt;$('.progress').progressIndicator(&lt;br /&gt;0, {&lt;br /&gt;timerActive       : true,&lt;br /&gt;showValue           : false,&lt;br /&gt;timerSpeed        : 20,&lt;br /&gt;timerIncrement : 1&lt;br /&gt;});&lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;                      &lt;td&gt;The zero in the first line sets the initial position of the indicator, it's not really that important for the animation timer mode, but necessary to include.&lt;br /&gt;&lt;br /&gt;"timerActive" enables the start and stop timer methods. "showValue" is set to false to hide the progression value. "timerSpeed" and "timerIncrement" were adjusted to make the progression animation fairly quick. In the demo they are set to 50 and 5 respectively so you can see how much faster you could make this animation without it being too choppy.&lt;/td&gt;                 &lt;/tr&gt;&lt;tr&gt;                      &lt;td&gt;Rotate counter (anti) clockwise &amp;amp; other adjustments&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: courier new; font-size: 85%;"&gt;$('.progress').progressIndicator({&lt;br /&gt;clockwise        : false,&lt;br /&gt;startPosition : .32,&lt;br /&gt;sizeStart         : 5,&lt;br /&gt;sizeDec             : -1&lt;br /&gt;}); &lt;/span&gt;&lt;/td&gt;&lt;td&gt;Setting the clockwise option to false with reverse the indicator rotation. Note that reversing the direction also effects the "startPosition" so you may need to adjust this value as well. This example is from progression3 in the demo and it needs a startPostion of .32 (32%) to move the images to the top... the reason it isn't 25% is because the sizeStart begins small (5 pixels) and the sizeDec is negative so this actually increases the image size as it progresses through the elements. You'll probably end up tweeking these numbers to get the look you want.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Max value&lt;/td&gt;&lt;td&gt;&lt;span style="font-family: courier new; font-size: 85%;"&gt;$(&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 85%;"&gt;'.progress').progressIndicator&lt;/span&gt;&lt;span style="font-family: courier new; font-size: 85%;"&gt;({&lt;br /&gt;max : 200&lt;br /&gt;}); &lt;/span&gt;&lt;/td&gt;&lt;td&gt;By default, the progress indicator is set to work with percentages.. it really only goes from 0 to 99%, but by changing the max option, you can set a full rotation of the progress indicator to any value. Note, the value, set using the update method, and the max value can be fractions.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-4935088650336351614?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/4935088650336351614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/06/dynamic-progress-indicator.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/4935088650336351614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/4935088650336351614'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/06/dynamic-progress-indicator.html' title='Progress Indicator'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-3379440416117285979</id><published>2010-05-17T23:38:00.020-05:00</published><updated>2011-06-06T18:27:58.966-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='fullCalendar'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Drag External Events Into fullCalendar</title><content type='html'>&lt;span style="font-size: large;"&gt;&lt;b&gt;Update:&lt;/b&gt; FullCalendar now supports &lt;a href="http://arshaw.com/js/fullcalendar/examples/external-dragging.html"&gt;dragging external events&lt;/a&gt; into the calendar, but the external events don't include any event data =(&lt;/span&gt;&lt;br /&gt;&lt;hr /&gt;I want to first preface this post with &lt;a href="http://code.google.com/p/fullcalendar/issues/detail?id=238"&gt;this fullCalendar ticket&lt;/a&gt; where the author provides a github branch with a fullCalendar version, but he hasn't officially integrated the code into the main plugin as of yet.&lt;br /&gt;&lt;br /&gt;I didn't want to use the non-supported version, so I wrote this plugin that essentially does that same thing. But this version only allows you to add external events to fullCalendar while it is in month mode. The author's version allows you to drop external events into the calendar while it is in any mode (month, week, day, etc). The reason is because this plugin will work with any version of fullCalendar, while the author's version would require that you use the unsupported code.&lt;br /&gt;&lt;br /&gt;So, until fullCalendar officially releases a version that allows dragging in external events, you could consider using this plugin.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Download&lt;/span&gt; ( &lt;a href="http://dl.dropbox.com/u/1510510/jquery-fullCalendarExtention/fcAddExternalEvents.js"&gt;uncompressed&lt;/a&gt; | &lt;a href="http://dl.dropbox.com/u/1510510/jquery-fullCalendarExtention/fcAddExternalEvents.min.js"&gt;minified&lt;/a&gt; ) : &lt;a href="http://dl.dropbox.com/u/1510510/jquery-fullCalendarExtention/demo.htm" style="font-weight: bold;"&gt;Demo&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://dl.dropbox.com/u/1510510/jquery-fullCalendarExtention/demo.htm"&gt;&lt;img src="http://dl.dropbox.com/u/1510510/jquery-fullCalendarExtention/demo.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Setup&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li style="font-weight: bold;"&gt;Required scripts&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://arshaw.com/fullcalendar/"&gt;fullCalendar&lt;/a&gt; plugin&lt;/li&gt;&lt;li&gt;&lt;a href="http://jquery.com/"&gt;jQuery library&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://jqueryui.com/"&gt;jQuery UI&lt;/a&gt; Draggable, Resizable &amp;amp; Dialog components&lt;/li&gt;&lt;li&gt;&lt;a href="http://plugins.jquery.com/project/metadata"&gt;jQuery metadata&lt;/a&gt; plugin (optional)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li style="font-weight: bold;"&gt;CSS&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;fullCalendar CSS (included with the plugin, but you will need to modify it if you want to use different colors (or set the calendar to use jQuery UI themes)&lt;/li&gt;&lt;li&gt;&lt;a href="http://jqueryui.com/themeroller/"&gt;jQuery UI theme&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Any additional CSS to position the external event panel (view the demo source for some basic settings)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;HTML&lt;/span&gt; (basic setup with variations)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;ul id="eventsToAdd"&amp;gt;&lt;br /&gt;&amp;lt;li class="fc-event"&amp;gt;&amp;lt;span data-id="holiday" class="title" data-start="8a" data-end="4p"&amp;gt;Holiday&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li class="fc-event"&amp;gt;&amp;lt;span data-id="host" class="title {start: '7p', end: '10p', title: 'Get drunk!', duration : 2}"&amp;gt;Hosting Event&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li class="fc-event"&amp;gt;&amp;lt;span data-id="meeting" class="title" data-title="Nap Time!"&amp;gt;Meeting&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li class="fc-event"&amp;gt;&amp;lt;span data-id="party" class="title" data-allDay="false"&amp;gt;Party&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li class="fc-event"&amp;gt;&amp;lt;span data-id="plan" class="title" data-start="5pm" data-end="7p"&amp;gt;Planning Session&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li class="fc-event"&amp;gt;&amp;lt;span data-id="vacation" class="title" data-allDay="true" data-duration="7"&amp;gt;Vacation&amp;lt;/span&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Script Setup&lt;/span&gt; (default settings shown)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$('#eventsToAdd li').fcExternalEvents({&lt;br /&gt;calendar         : '#calendar',      // Selector string that points to the calendar object&lt;br /&gt;newEventObject   : 'span.title',     // Contains all event data (store in metaData or in data-'attr' as seen in the HTML)&lt;br /&gt;&lt;br /&gt;workDayStart     : '8a',             // use any time format '8','8a','8am','8 a.m.','0800','8:00' -&amp;gt; '08:00:00'&lt;br /&gt;workDatEnd       : '4pm',            // use any time format '4','4p','4pm','4 p.m.','1600','16:00' -&amp;gt; '16:00:00'&lt;br /&gt;&lt;br /&gt;draggableOptions : { revert: true }, // Available options: http://jqueryui.com/demos/droppable/&lt;br /&gt;useMetaData      : true,             // If plugin exists get metadata from class (plugin: http://docs.jquery.com/Plugins/Metadata)&lt;br /&gt;metaDataOptions  : {},               // use this if you put the metadata anywhere beside inside the class attribute (http://docs.jquery.com/Plugins/Metadata/metadata#options)&lt;br /&gt;editExternalEvent: true,             // true: allows you to click on an external event to edit it's data.&lt;br /&gt;addExternalEvent : true,             // true: allows you to add an external event to the list.&lt;br /&gt;disableConfirm   : false             // true: disables the confirmation popup when you try to delete an event.&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Script for Event Triggers&lt;/span&gt; (used to update your database)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;External Event added to FullCalendar&lt;/span&gt; - triggered on the calendar itself&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;// *****************************************&lt;br /&gt;// External event added to fullCalendar event trigger&lt;br /&gt;// *****************************************&lt;br /&gt;// fcEventObject  = fullCalendar event object&lt;br /&gt;$('#calendar').bind('ExternalEventAddedToFullCalendar', function(event, fcEventObject){&lt;br /&gt;updateDisplay('Event added to fullCalendar: ' + fcEventObject.title );&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Add, Update or Delete an External Event&lt;/span&gt; - triggered on external event container&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;// *****************************************&lt;br /&gt;// External Event triggers:&lt;br /&gt;// Add, update and delete are triggered on the PARENT element!&lt;br /&gt;// *****************************************&lt;br /&gt;$('#eventsToAdd')&lt;br /&gt;&lt;br /&gt;// External Event Added/Updated&lt;br /&gt;// ********************&lt;br /&gt;// externalEventElement = jQuery object targeting newly added draggable event&lt;br /&gt;// fcEventObject  = fullCalendar event object&lt;br /&gt;.bind('ExternalEventUpdated ExternalEventAdded', function( event, fcEventObject, externalEventElement ){&lt;br /&gt;var whichEvent = ( event.type == 'ExternalEventAdded' ) ? 'added' : 'updated';&lt;br /&gt;var txt = 'External event ' + whichEvent + ':' + externalEventElement.find('span.title').text() + ' (' + fcEventObject.title + ')';&lt;br /&gt;updateDisplay( txt );&lt;br /&gt;})&lt;br /&gt;&lt;br /&gt;// External Event Deleted&lt;br /&gt;// ********************&lt;br /&gt;// externalEventElement = jQuery object targeting newly added draggable event&lt;br /&gt;// fcEventObject  = fullCalendar event object&lt;br /&gt;.bind('ExternalEventDeleted', function(event, fcEventObject, externalEventElement ){&lt;br /&gt;var txt = 'External event Deleted:' + externalEventElement.text();&lt;br /&gt;updateDisplay( txt );&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;fcEventObject&lt;/span&gt; - Please refer to the &lt;a href="http://arshaw.com/fullcalendar/docs/event_data/Event_Object/"&gt;FullCalendar  Event Object&lt;/a&gt; documents for details.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Customization&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;HTML data&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Inside of the "newEventObject" (&amp;lt;span&amp;gt; contained inside of the &amp;lt;li&amp;gt; in the HTML above) you can add data in three different ways:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Add a data-[name] attribute supported by HTML5. Each Full Calendar Event Object property key should replace the [name] so you'll end up adding these data attributes:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="keytable"&gt;&lt;tbody&gt;&lt;tr style="background-color: #555555; color: #dddddd;"&gt;&lt;td&gt;Event Object&lt;/td&gt;&lt;td&gt;Data attribute&lt;/td&gt;&lt;td&gt;Type&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;id&lt;/td&gt;&lt;td&gt;data-id&lt;/td&gt;&lt;td&gt;String/Integer&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;title&lt;/td&gt;&lt;td&gt;data-title&lt;/td&gt;&lt;td&gt;String&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;allDay&lt;/td&gt;&lt;td&gt;data-allDay&lt;/td&gt;&lt;td&gt;true or false (&lt;span style="font-style: italic;"&gt;Boolean&lt;/span&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;start&lt;/td&gt;&lt;td&gt;data-start&lt;/td&gt;&lt;td&gt;String (time only) - The external event script adds the correct month, day &amp;amp; year&lt;br /&gt;to the event after it is dropped on the calendar&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;end&lt;/td&gt;&lt;td&gt;data-end&lt;/td&gt;&lt;td&gt;String (time only) -The external event script adds the correct month, day &amp;amp; year&lt;br /&gt;to the event after it is dropped on the calendar&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;url&lt;/td&gt;&lt;td&gt;data-url&lt;/td&gt;&lt;td&gt;String - the editor &lt;span style="font-style: italic;"&gt;does not&lt;/span&gt; validate the URL.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;className&lt;/td&gt;&lt;td&gt;data-className&lt;/td&gt;&lt;td&gt;String/Array&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;editable&lt;/td&gt;&lt;td&gt;data-editable&lt;/td&gt;&lt;td&gt;true or false (&lt;span style="font-style: italic;"&gt;Boolean&lt;/span&gt;)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;duration&lt;/td&gt;&lt;td&gt;data-duration&lt;/td&gt;&lt;td&gt;Integer (# of days) - This attribute is used by the external event script to determine&lt;br /&gt;the end date of an event. It might be best to also set the "allDay" attribute to true&lt;br /&gt;if this value is more than one.&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;For more details see the FullCalendar &lt;a href="http://arshaw.com/fullcalendar/docs/event_data/Event_Object/"&gt;Event Object&lt;/a&gt; Documentation.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add metadata contained inside of the class attribute, as in this example:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;li&amp;gt;&lt;br /&gt;&amp;lt;span class="title { id: 'event1', title: 'My Event', allDay: false, start: '1pm', end: '2pm' }"&amp;gt;My External Event Name&amp;lt;/span&amp;gt;&lt;br /&gt;&amp;lt;/li&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add data using this plugin's Add or Edit Event functions&lt;br /&gt;&lt;br /&gt;When adding or editing an external event, a few more event options are listed. These include the "&lt;span style="font-weight: bold;"&gt;Event Location&lt;/span&gt;" &amp;amp; "&lt;span style="font-weight: bold;"&gt;Event Description&lt;/span&gt;" which are part of the google calendar event object, but not standard in FullCalendar, so some customizing of FullCalendar would be required to see this part of the data. It is added here in case you are using google calendar events.&lt;br /&gt;&lt;br /&gt;You will also notice a checkbox that is labeled "&lt;span style="font-weight: bold;"&gt;Make id unique&lt;/span&gt;". By default this is checked. What it does is adds a date stamp to the end of the id so that adding multiple copies of one event will move separately when dragging and dropping on FullCalendar. You can try it out by adding two copies of any event, when you attempt to move the event around in fullCalendar, both events will move, keeping the number of days between events the same - if you don't understand my description, just try it out in the demo :)&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;If a piece of data is not listed in the data-[name] or in the metadata then it will be set to its default value when added to the FullCalendar.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;List of Standard Options&lt;/span&gt;:&lt;br /&gt;&lt;br /&gt;Use these key : value pairs as follows; Note that the last key : value pair does not have a trailing comma and values that use true or false (Boolean values) should not be in quotes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$('#listWrapper eventWrapper').fcExternalEvents({ key: value, key: value, key: value })&lt;/pre&gt;&lt;/blockquote&gt;&lt;table class="keytable"&gt;&lt;tbody&gt;&lt;tr style="background-color: #555555; color: #dddddd;"&gt;&lt;td style="font-weight: bold; text-align: center;"&gt;Key&lt;/td&gt;&lt;td style="font-weight: bold; text-align: center;"&gt;Value&lt;br /&gt;(default shown)&lt;/td&gt;&lt;td style="font-weight: bold;"&gt;Description&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;calendar&lt;/td&gt;&lt;td&gt;'#calendar'&lt;/td&gt;&lt;td&gt;This selector string should point to a fullCalendar object. After fullCalendar renders a calendar, it adds an '.fc' class, but this doesn't target specific calendars, so please use a unique ID for this value if you have more than one calendar per page.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;newEventObject&lt;/td&gt;&lt;td&gt;'span.title'&lt;/td&gt;&lt;td&gt;In the HTML above, the external event list is added as an unordered list. Using this option allows you to target each event using this selector, but the way the script is set up, it should have at least three levels (main wrapper &amp;gt; event wrapper &amp;gt; newEventObject) or (#eventsToAdd &amp;gt; li &amp;gt; span.title)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;workDayStart&lt;/td&gt;&lt;td&gt;'8a'&lt;/td&gt;&lt;td&gt;I tried to account for just about any time format (8, 8a, 8am, 8 a.m., 0800, 08:00). But this time is basically the default event start time if no start time is set.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;workDatEnd&lt;/td&gt;&lt;td&gt;'4pm'&lt;/td&gt;&lt;td&gt;As with the workDayStart, I tried to account for different time formats (it may not be 100% perfect). This time sets the default event stop time if no end time is set.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;draggableOptions&lt;/td&gt;&lt;td&gt;{ revert: true }&lt;/td&gt;&lt;td&gt;By default, the draggable element will revert to the starting position. Use this option to add or remove any of the &lt;a href="http://jqueryui.com/demos/draggable/#options"&gt;draggable options&lt;/a&gt;.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;useMetaData&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;The script detects the &lt;a href="http://docs.jquery.com/Plugins/Metadata"&gt;metadata&lt;/a&gt; plugin. It will use the metadata it finds if this option is set to true.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;metaDataOptions&lt;/td&gt;&lt;td&gt;{}&lt;/td&gt;&lt;td&gt;If you do have metadata you want to use, it will by default look in the "newEventObject" class attribute. Adjust these metadata options if it is located elsewhere.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;editExternalEvent&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;If you don't want users to edit the list of external events, set this option to false&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;addExternalEvent&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;Allows users to add additional external events. They will automatically be able to edit these newly added events even if the "editExternalEvent" option is false.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;disableConfirm&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;Disables the confirmation to delete an external event&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size: 130%; font-weight: bold;"&gt;Bugs / Suggestions&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You will only be able to move external events into the Full Calendar month view. The reason is this script targets the rendered month calendar cells. I don't really plan on making this plugin work in other views as hopefully the author of FullCalendar will  include these options in future versions making this script obsolete.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To make  suggestions or report any bugs please email me at wowmotty at g mail dot  com. Thanks!&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-3379440416117285979?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/3379440416117285979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/05/drag-external-events-into-fullcalendar.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3379440416117285979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3379440416117285979'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/05/drag-external-events-into-fullcalendar.html' title='Drag External Events Into fullCalendar'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-5918446723763913527</id><published>2010-05-13T02:06:00.018-05:00</published><updated>2011-10-31T11:29:41.123-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Extensions'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>jQuery Selectors - Adding a :contains exact match</title><content type='html'>I have included a demo to show you the utility of two selectors that you can easily add to your jQuery library.&lt;br /&gt;&lt;br /&gt;The standard "&lt;span style="font-weight: bold;"&gt;:contains()&lt;/span&gt;" selector matches the contents of the element in a case sensitive manner. But it is limited and there have been many times that I've needed to exactly match the contents of an element, so I threw together these two useful selectors.&lt;br /&gt;&lt;br /&gt;In this demo, you can see the difference when you see what "td:contains(2)" matches - doing so will match all table cells that contain a "2" including dates that begin and end with "2" and the event titles that contains a "2".&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-weight: bold;"&gt;:containsExact()&lt;/span&gt;" will grab the innerHTML from the element (the date span in this case) and exactly match it. I made this selector case-insensitve so you won't have to worry about the text case.&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-weight: bold;"&gt;:containsExactCase()&lt;/span&gt;" will grab the innerHTML from the element (the event span in this case) and exactly match the contents in a case-sensitive manner. Try both "Vacation" and "vacation" in the demo.&lt;br /&gt;&lt;br /&gt;"&lt;span style="font-weight: bold;"&gt;:containsRegex()&lt;/span&gt;" will grab  the innerHTML from the element (also the event span in this case) and use regex to  match the contents in either a case-sensitive or insensitive manner (depending on the regex "i" flag).&lt;br /&gt;&lt;br /&gt;&lt;center&gt;&lt;iframe align="top" allowtransparency="true" frameborder="0" height="710" scrolling="no" src="http://dl.dropbox.com/u/1510510/misc/contains-selectors.htm" width="600"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;br /&gt;To include these selectors, just add the following code outside of any $(document).ready(function(){...})&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;$.extend($.expr[':'],{&lt;br /&gt;containsExact: function(a,i,m){&lt;br /&gt;return $.trim(a.innerHTML.toLowerCase()) === m[3].toLowerCase();&lt;br /&gt;},&lt;br /&gt;containsExactCase: function(a,i,m){&lt;br /&gt;return $.trim(a.innerHTML) === m[3];&lt;br /&gt;},&lt;br /&gt;containsRegex: function(a,i,m){&lt;br /&gt; var regreg =  /^\/((?:\\\/|[^\/])+)\/([mig]{0,3})$/,&lt;br /&gt;  reg = regreg.exec(m[3]);&lt;br /&gt; return RegExp(reg[1], reg[2]).test($.trim(a.innerHTML));&lt;br /&gt;}&lt;br /&gt;});&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-5918446723763913527?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/5918446723763913527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/05/jquery-selectors-adding-contains-exact.html#comment-form' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/5918446723763913527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/5918446723763913527'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/05/jquery-selectors-adding-contains-exact.html' title='jQuery Selectors - Adding a :contains exact match'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-7615465769444785969</id><published>2010-04-23T10:47:00.015-05:00</published><updated>2010-07-03T11:01:28.656-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Get Parameters from your Script Tag</title><content type='html'>I had a situation where I only needed to pass one variable to a script and asking users to do something like this seemed cumbersome&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var color = blue;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript" src="test.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;I think it'd be better to have them include the variable setting in the script URL. Something like this:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;&amp;lt;script type="text/javascript" src="test.js?color=blue"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;Of course, after I figured it all out, I found it &lt;a href="http://feather.elektrum.org/book/src.html"&gt;posted elsewhere&lt;/a&gt; on the internet, but the other method uses javascript and I figured out a nice jQuery method :P&lt;br /&gt;&lt;br /&gt;So this method uses a compressed version of the function from an older post "&lt;a href="http://wowmotty.blogspot.com/2009/06/extracting-url-parameters-with.html"&gt;Extracting URL parameters with Javascript&lt;/a&gt;". Here is the setup:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;&amp;lt;script type="text/javascript" src="test.js?color=blue&amp;amp;background=#222"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;Access the script, as above, by  adding the parameter to the end of the script url, preceded by a &lt;span style="color: rgb(255, 0, 0);"&gt;question mark&lt;/span&gt;, an &lt;span style="color: rgb(255, 0, 0);"&gt;equal sign&lt;/span&gt; between the &lt;span style="color: rgb(92, 230, 56);"&gt;key&lt;/span&gt; and &lt;span style="color: rgb(91, 161, 207);"&gt;value&lt;/span&gt;, then followed by an &lt;span style="color: rgb(255, 0, 0);"&gt;ampersand&lt;/span&gt; for any additional parameters:&lt;br /&gt;&lt;br /&gt;&lt;div style="padding-left: 20px;"&gt;&lt;span style="font-weight: bold;"&gt;test.js&lt;span style="color: rgb(255, 0, 0);"&gt;?&lt;/span&gt;&lt;span style="color: rgb(92, 230, 56);"&gt;color&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt;=&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(91, 161, 207);"&gt;blue&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&amp;amp;&lt;/span&gt;&lt;span style="color: rgb(92, 230, 56);"&gt;background&lt;/span&gt;&lt;/span&gt;&lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;=&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(91, 161, 207);"&gt;#222&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;In the script you load, add the following:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js;"&gt;var scriptSrc = $('script[src*=test.js]').attr('src');&lt;br /&gt;var color = gup( 'color', scriptSrc );&lt;br /&gt;var background = gup( 'background', scriptSrc );&lt;br /&gt;&lt;br /&gt;// do something with the parameters&lt;br /&gt;alert( 'color = ' + color + ', background = ' + background );&lt;br /&gt;&lt;br /&gt;// extract out the parameters&lt;br /&gt;function gup(n,s){&lt;br /&gt;n = n.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");&lt;br /&gt;var p = (new RegExp("[\\?&amp;amp;]"+n+"=([^&amp;amp;#]*)")).exec(s);&lt;br /&gt;return (p===null) ? "" : p[1];&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;Configuration:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;First off, this method requires that you have jQuery loaded on your page before you load this script.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;In the first line, make sure the "&lt;span style="font-weight: bold;"&gt;test.js&lt;/span&gt;" matches the name of the javascript file you are loading. This code should be inside this file as well, but even this isn't necessary - you can grab parameters from other script tags.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Add a line for each parameter in the script src. The parameter key must match in both places.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;var color = gup( 'color', scriptSrc );&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;If a parameter doesn't exist in the script src, then the result of the gup() function will be an empty string.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-7615465769444785969?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/7615465769444785969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/04/get-parameters-from-your-script-tag.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7615465769444785969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/7615465769444785969'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/04/get-parameters-from-your-script-tag.html' title='Get Parameters from your Script Tag'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-6425234791720311614</id><published>2010-03-21T07:47:00.017-05:00</published><updated>2010-07-03T11:09:41.592-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MMORPG'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='server status'/><title type='text'>How To Add A Champions Online Server Status To Your Site</title><content type='html'>&lt;a href="http://www.champions-online.com/"&gt;Champions Online&lt;/a&gt; is a MMORPG made by Cryptic. You can normally find the server status by looking at the top of the page of their official site or from the launcher (from what I've read). This post will allow you to either (1) embed a Champions Online Server Status page on your site or (2) make your own page using php and XML RPC.&lt;br /&gt;&lt;style type="text/css"&gt;.examples, .examples td, .examples th { border: #777 1px solid; border-collapse: collapse; }&lt;/style&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Embed a Server Status on your site&lt;/span&gt;&lt;br /&gt;Adding a server status to your site, using the page I provided, is pretty simple. Just add an iframe to your page widget using this code:&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;div align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;&amp;lt;iframe src=&amp;quot;http://motty.000space.com/champions/status.php?css=co.css&amp;quot; allowtransparency=&amp;quot;true&amp;quot; align=&amp;quot;top&amp;quot; scrolling=&amp;quot;auto&amp;quot; frameborder=&amp;quot;0&amp;quot; height=&amp;quot;50&amp;quot; width=&amp;quot;160&amp;quot;&amp;gt;&amp;lt;/iframe&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;The frame height is set to only contain the "Server Status" and "Up" or "Down". Any additional text from a notice will make the window scrollable.&lt;br /&gt;&lt;br /&gt;I've also included a way to choose several other stylesheets or add to add your own. The default stylesheet uses images on a dark background.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/co-ss-preview.png" alt="" border="0" /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;To make your own stylesheet, follow this basic template (this is the default CSS)&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css"&gt;/* Overall page */&lt;br /&gt;body {&lt;br /&gt;background-color: #222;&lt;br /&gt;margin: 0 auto;&lt;br /&gt;font-family: Verdana, Helvetica, sans-serif;&lt;br /&gt;color: #ddd;&lt;br /&gt;text-align: center;&lt;br /&gt;}&lt;br /&gt;/* wraps contents */&lt;br /&gt;.wrapper {&lt;br /&gt;color: #ddd;&lt;br /&gt;width: 130px;&lt;br /&gt;padding: 5px;&lt;br /&gt;text-align: center;&lt;br /&gt;margin: 0 auto;&lt;br /&gt;overflow-x: hidden;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Server Status text */&lt;br /&gt;.serverStatus .text {&lt;br /&gt;color: #ddd;&lt;br /&gt;background: url(server-status.png) no-repeat;&lt;br /&gt;text-align: center;&lt;br /&gt;text-indent: -9999em; /* hide text if using images */&lt;br /&gt;margin: 0 auto;&lt;br /&gt;height: 20px;&lt;br /&gt;width: 120px;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/* Server Status Up or Down */&lt;br /&gt;.statusUp {&lt;br /&gt;color: #ddd;&lt;br /&gt;background: url(server-up.png) no-repeat;&lt;br /&gt;text-align: center;&lt;br /&gt;text-indent: -9999em; /* hide text if using images */&lt;br /&gt;margin: 0 auto;&lt;br /&gt;height: 20px;&lt;br /&gt;width: 40px;&lt;br /&gt;}&lt;br /&gt;.statusDown {&lt;br /&gt;color: #ddd;&lt;br /&gt;background: url(server-down.png) no-repeat;&lt;br /&gt;text-align: center;&lt;br /&gt;text-indent: -9999em; /* hide text if using images */&lt;br /&gt;margin: 0 auto;&lt;br /&gt;height: 20px;&lt;br /&gt;width: 75px;&lt;br /&gt;}&lt;br /&gt;.notice {&lt;br /&gt;color: #ddd;&lt;br /&gt;font-weight: bold;&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;Then name the file something like "co.css", upload it to your server and finally, point the iframe src css variable to the file:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;http://motty.000space.com/champions/status.php?css=http://mysite.com/co.css&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-size:130%;"&gt;Add Your Own Server Status&lt;/span&gt;&lt;br /&gt;This method shows you how to add your own server status using php and XML RPC (you'll need &lt;a href="http://phpxmlrpc.sourceforge.net/"&gt;this extension&lt;/a&gt; installed on your server). I barely know php and I don't know XML RPC at all, so piecing this  code together took some work and help from &lt;a href="http://forums.champions-online.com/member.php?u=1"&gt;Diamonds&lt;/a&gt;  who works at Cryptic. I'm just posting the result of that work and to  hopefully keep Diamonds from being barraged with more questions about  setting up a server status.&lt;br /&gt;&lt;br /&gt;Check your phpinfo() and make sure you have the XMLRPC enabled&lt;br /&gt;&lt;br /&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 103px;" src="http://3.bp.blogspot.com/_JneK2yV_JhA/S6YnBEb6MeI/AAAAAAAAABQ/hS9Yf7Wnvkw/s400/xmlrpc.jpg" alt="" id="BLOGGER_PHOTO_ID_5451087298302718434" border="0" /&gt;Here is the basic php required to obtain the server status:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: php"&gt;# Using the XML-RPC extension to format the XML package&lt;br /&gt;$request = xmlrpc_encode_request( "wgsLauncher.getServerStatus", $srvr );&lt;br /&gt;&lt;br /&gt;$ch = curl_init();&lt;br /&gt;curl_setopt($ch, CURLOPT_POSTFIELDS, $request);&lt;br /&gt;curl_setopt($ch, CURLOPT_URL, "http://www.champions-online.com/xmlrpc.php");&lt;br /&gt;curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);&lt;br /&gt;curl_setopt($ch, CURLOPT_TIMEOUT, 1);&lt;br /&gt;$result = curl_exec($ch);&lt;br /&gt;curl_close($ch);&lt;br /&gt;&lt;br /&gt;$method = null;&lt;br /&gt;$params = xmlrpc_decode_request($result, &amp;amp;$method);&lt;br /&gt;&lt;br /&gt;# server status result = true (up) or false (down)&lt;br /&gt;$status = ($params['status']) ? 'Up' : 'Down';&lt;br /&gt;$notice = ($params['notice'] == "") ? "" : "Notice: " + $params['notice'];&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-6425234791720311614?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/6425234791720311614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2010/03/how-to-add-champions-online-server.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6425234791720311614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6425234791720311614'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2010/03/how-to-add-champions-online-server.html' title='How To Add A Champions Online Server Status To Your Site'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_JneK2yV_JhA/S6YnBEb6MeI/AAAAAAAAABQ/hS9Yf7Wnvkw/s72-c/xmlrpc.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-3827411021139327423</id><published>2009-09-26T21:21:00.016-05:00</published><updated>2010-09-16T10:15:24.180-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Images'/><category scheme='http://www.blogger.com/atom/ns#' term='Highlight'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Media'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>imgHighLighter - jQuery Plugin</title><content type='html'>&lt;hr /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;A &lt;a href="http://wowmotty.blogspot.com/2010/06/imagehighlighter-v10.html"&gt;newer version&lt;/a&gt; of this plugin is now available!&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;imgHighLighter is a jQuery plugin I wrote (my first!) that allows you to highlight a portion of an image when you hover over a link. In the image below, the mouse is hovering over the "Toolbar" link and you can see the toolbar portion of the image is highlighted (click on the image to go to the demo page).&lt;br /&gt;&lt;a href="http://dl.dropbox.com/u/1510510/jquery-imageHighlighter/imgHighLight%20demo.htm"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://dl.dropbox.com/u/1510510/jquery-imageHighlighter/imgHighlight.gif" alt="" border="0" /&gt;&lt;/a&gt;I set up an &lt;a href="http://dl.dropbox.com/u/1510510/jquery-imageHighlighter/imgHighLight%20demo.htm"&gt;example page here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This is still an early version of this plugin but I know it works with IE8, FF and Chrome. Please leave me feedback if you any problems with how it works.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Setup&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;This plugin requires jQuery.&lt;/li&gt;&lt;li&gt;&lt;a href="http://cherne.net/brian/resources/jquery.hoverIntent.html"&gt;HoverIntent&lt;/a&gt; is an optional plugin, this plugin will use it's functionality if it is included.&lt;/li&gt;&lt;li&gt;Follow this basic template for each image you want to apply imgHighLighter functionality.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;CSS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css"&gt;/* Image &amp;amp; descriptions */&lt;br /&gt;div.imgHL { width: 500px; margin:0 auto; }&lt;br /&gt;div.imgHL ul { text-align: center; }&lt;br /&gt;div.imgHL ul li { margin: 0; padding: 5px; list-style-type: none; float: left; }&lt;br /&gt;div.imgHL .descriptions { margin-top: 1em; clear: both; width: 450px; height: 2em; }&lt;br /&gt;div.imgHL .descriptions p {display:none;}&lt;br /&gt;&lt;br /&gt;/* General imgHighLight (overlay and highlight) */&lt;br /&gt;.imgHLOverlay { background: #000; opacity: .6; filter: alpha(opacity=60); }&lt;br /&gt;.imgHLDark, .imgHLLight, .imgHLOverlay { padding: 0; margin: 0; }&lt;br /&gt;&lt;br /&gt;/* imgHighLight Edit Mode CSS */&lt;br /&gt;.imgHLInfo { margin: 5px auto; }&lt;br /&gt;.imgHLCoords { margin: 5px auto; }&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;HTML&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;div class="imgHL"&amp;gt;&lt;br /&gt;&amp;lt;ul&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#" rel="desc1:sx1,sy1,ex2,ey2"&amp;gt;Link 1&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#" rel="desc2:sx1,sy1,ex2,ey2"&amp;gt;Link 2&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#" rel="desc3:sx1,sy1,ex2,ey2"&amp;gt;Link 3&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;&amp;lt;/ul&amp;gt;&lt;br /&gt;&amp;lt;img class="imgHLMain" src="whole.jpg" alt="" /&amp;gt;&lt;br /&gt;&amp;lt;div class="descriptions"&amp;gt;&lt;br /&gt;&amp;lt;p id="desc1"&amp;gt;Description for item #1&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;p id="desc2"&amp;gt;Description for item #2&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;p id="desc3"&amp;gt;Description for item #3&amp;lt;/p&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Javascript&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;/* window load ensures all images are loaded */&lt;br /&gt;$(window).load(function(){&lt;br /&gt;$(".imgHL").imgHighLight();&lt;br /&gt;})&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Highlights&lt;/span&gt;: The link's "rel" attribute contains all the information needed for the highlights.&lt;br /&gt;&lt;blockquote class="code"&gt;rel="&lt;span style="font-weight: bold;"&gt;&lt;span style="color: rgb(51, 102, 255);"&gt;desc1&lt;/span&gt;:&lt;span style="color: rgb(153, 51, 153);"&gt;sx1&lt;/span&gt;,&lt;span style="color: rgb(153, 51, 153);"&gt;sy1&lt;/span&gt;,&lt;span style="color: rgb(204, 0, 0);"&gt;ex2&lt;/span&gt;,&lt;span style="color: rgb(204, 0, 0);"&gt;ey2&lt;/span&gt;&lt;/span&gt;"&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(51, 102, 255);"&gt;desc1&lt;/span&gt; = ID of the description that is associated with the highlighted area (do not include the "#")&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;sx1&lt;/span&gt;   = Starting X position of the highlight box&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(153, 51, 153);"&gt;sy1&lt;/span&gt;   = Starting Y position of the highlight box&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;ex2&lt;/span&gt;   = Ending X position of the highlight box&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;ey2&lt;/span&gt;   = Ending Y position of the highlight box&lt;br /&gt;&lt;/blockquote&gt;You can change the highlight properties using: &lt;span style="font-weight: bold; font-style: italic;"&gt;borderColor&lt;/span&gt;, &lt;span style="font-style: italic; font-weight: bold;"&gt;borderSize&lt;/span&gt; &amp;amp; &lt;span style="font-weight: bold; font-style: italic;"&gt;borderType&lt;/span&gt; described below&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Image:&lt;/span&gt; The script is set by default to find any image inside the main wrapper (.imgHL) as set by the function call&lt;br /&gt;&lt;blockquote class="code"&gt;$(".imgHL").imgHighLight();&lt;/blockquote&gt;You can specify the exact image to modify by adding the&lt;span style="font-weight: bold; font-style: italic;"&gt; imageID&lt;/span&gt; option (described below)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Descriptions:&lt;/span&gt; The wrapper class that contains the image highlight descriptions is set to "descriptions" by default. You can change this default using the &lt;span style="font-style: italic; font-weight: bold;"&gt;descriptionWrapper&lt;/span&gt; option (described below). Each description within the wrapper is contained in a paragraph tag with a specific ID that matches the &lt;span style="color: rgb(51, 102, 255); font-weight: bold;"&gt;desc1&lt;/span&gt; ID in the rel attribute.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Overlay:&lt;/span&gt; The overlay covers the image (darkens the background) to make the highlighted portion stand out more. You can adjust the opacity of this overlay in the CSS and you can turn off the overlay functi0nality (as it script does while in edit mode) by setting the &lt;span style="font-style: italic; font-weight: bold;"&gt;overlay&lt;/span&gt; option.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Customizing / Options&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;This plugin has the following options:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;$(".imgHL").imgHighLight({&lt;br /&gt;borderColor: '#fff',                  // Color of the highlight border&lt;br /&gt;borderSize: '2',                      // Thickness of highlight border&lt;br /&gt;borderType: 'solid',                  // Type of highlight border&lt;br /&gt;imageID: 'img',                       // Object or ID of the main image (e.g. #myimage or just img - if it's the only img inside the container)&lt;br /&gt;descriptionWrapper: '.descriptions',  // Class wrapping all the descriptions&lt;br /&gt;overlay: true,                        // Activate overlay (default = true)&lt;br /&gt;editMode: false                       // Enable edit mode - on screen display of the image coords so you can get the info you need easier&lt;br /&gt;})&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Edit Mode&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I've included an edit mode for this plugin which should make it easier for you to obtain and add the coordinates of the edges of the highlight box.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Edit mode can be activated in two ways:&lt;br /&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Using the &lt;span style="font-weight: bold; font-style: italic;"&gt;editMode&lt;/span&gt; option when calling the plugin (described in the last section)&lt;/li&gt;&lt;li&gt;Add a link along with the other highligh links. This method is the best as it allows you to activate and deactive edit mode.&lt;br /&gt;&lt;blockquote class="code"&gt;&amp;lt;li&amp;gt;&amp;lt;a href="#" class="imgHLEdit"&amp;gt;Edit Mode&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;While in edit mode, additional information is added into the caption area... it displays the current cursor X and Y position.&lt;br /&gt;&lt;blockquote class="code"&gt;X = 0px, Y = 0px - Click to lock/unlock coordinates&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;If you click on the image while in edit mode, it locks the displayed coordinates so moving the mouse off the image won't change the display. Hopefully this will make it easier to edit your source document with the coordinates.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Additionally if you hover over a link, the highlight box will display (with overlay off) to allow better visualization of the highlight box.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Bugs / Suggestions&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;At this time, the options you chose will apply to all the imgHighlighter images on the page (to be fixed in future versions)&lt;/li&gt;&lt;li&gt;When the window is repositioned, the highlights may be off until it is refreshed again when you hover over a link (especially while in edit mode), and sometimes you'll need to reload the page.&lt;/li&gt;&lt;li&gt;Future versions will allow you to highlight the image from links located anywhere on the page.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;To make suggestions or report any bugs please email me at wowmotty at g mail dot com. Additonally, this is my first plugin, so if you can help me out with any suggestions or tips on how to improve the code I would greatly appreciate it :)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-3827411021139327423?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/3827411021139327423/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2009/09/imghighlighter-jquery-plugin.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3827411021139327423'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3827411021139327423'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2009/09/imghighlighter-jquery-plugin.html' title='imgHighLighter - jQuery Plugin'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-1315814641489198538</id><published>2009-09-24T12:32:00.011-05:00</published><updated>2010-09-16T10:17:45.108-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Images'/><category scheme='http://www.blogger.com/atom/ns#' term='Date'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Random Image by Date</title><content type='html'>&lt;hr /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:180%;"&gt;A &lt;a href="http://wowmotty.blogspot.com/2010/07/todaysimage-v10.html"&gt;newer version&lt;/a&gt; of this plugin is now available!&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;&lt;br /&gt;The following script will show a random image depending on the date.&lt;br /&gt;&lt;br /&gt;The frame below contains this script... you can view it directly by clicking &lt;a href="https://dl.dropbox.com/u/1510510/jquery-todaysImage/random-images-by-date.htm"&gt;this link&lt;/a&gt;. You can view the page source from there.&lt;br /&gt;&lt;center&gt;&lt;iframe src="https://dl.dropbox.com/u/1510510/jquery-todaysImage/random-images-by-date.htm" allowtransparency="true" align="top" scrolling="no" frameborder="0" height="400" width="420"&gt;&lt;/iframe&gt;&lt;/center&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Setup&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The set up is fairly simple. The page requires two things to work:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;jQuery installed (you can use Google's copy as seen in the page source)&lt;/li&gt;&lt;li&gt;An &amp;lt;&lt;span style="font-style: italic;"&gt;img&lt;/span&gt;&amp;gt; anywhere on your page with an ID of "todaysimage", if it doesn't exist, it will append it to the body.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Then you'll need to set up your image arrays as follows:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;In the javascript, add the template below.&lt;br /&gt;&lt;br /&gt;images.push (["&lt;span style="color: rgb(255, 0, 0);"&gt;DATES&lt;/span&gt;","&lt;span style="color: rgb(247, 150, 70);"&gt;IMAGE URL&lt;/span&gt;"]);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;DATES&lt;/span&gt; = The date range to display the image.&lt;br /&gt;&lt;span style="color: rgb(247, 150, 70);"&gt;IMAGE URL&lt;/span&gt; = Full path to your image.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The &lt;span style="color: rgb(255, 0, 0);"&gt;DATES&lt;/span&gt; must follow this format:&lt;br /&gt;&lt;br /&gt;&lt;style&gt;.tbl, .tbl td { border: thin solid #7f7f7f; padding: 3px; border-collapse: collapse;}&lt;/style&gt;&lt;table class="tbl"&gt;&lt;thead&gt;        &lt;/thead&gt;        &lt;tbody&gt;&lt;tr&gt;                &lt;td style="background-color: rgb(89, 89, 89);" align="center"&gt;&lt;strong&gt;&lt;span style="color: rgb(255, 255, 255);"&gt;Dates&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/td&gt;                &lt;td style="background-color: rgb(89, 89, 89);"&gt;&lt;span style="color: rgb(255, 255, 255);"&gt; &lt;strong&gt;Description&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;            &lt;/tr&gt;&lt;tr&gt;                &lt;td align="center"&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;0&lt;/span&gt;&lt;/td&gt;                &lt;td&gt; Set image as a &lt;strong&gt;default&lt;/strong&gt; (will only display if no date specific images are found).&lt;br /&gt;&lt;/td&gt;            &lt;/tr&gt;&lt;tr&gt;                &lt;td align="center"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1/1 &lt;/span&gt;&lt;/td&gt;                &lt;td&gt; Dispaly image only on Jan 1st.&lt;/td&gt;            &lt;/tr&gt;&lt;tr&gt;                &lt;td align="center"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1/1 - 1/5&lt;/span&gt;&lt;/td&gt;                &lt;td&gt; Dispaly image from Jan 1st to Jan 5th (spaces are okay).&lt;br /&gt;&lt;/td&gt;            &lt;/tr&gt;&lt;tr&gt;                &lt;td align="center"&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;7/20 - 8/20&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;                &lt;td&gt; Display image from June 20th to August 20th.&lt;br /&gt;&lt;/td&gt;            &lt;/tr&gt;&lt;tr&gt;                &lt;td align="center"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1/3rdMon&lt;/span&gt;&lt;/td&gt;                &lt;td&gt; Display image only on the 3rd Monday of Janurary.&lt;br /&gt;&lt;/td&gt;            &lt;/tr&gt;&lt;tr&gt;                &lt;td align="center"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;5/lastMon&lt;/span&gt;&lt;/td&gt;                &lt;td&gt; Display image only on the last Monday of May.&lt;br /&gt;&lt;/td&gt;            &lt;/tr&gt;&lt;tr&gt;                &lt;td align="center"&gt; &lt;span style="color: rgb(255, 0, 0);"&gt;11/3rdThur-11/4thThur&lt;/span&gt;&lt;/td&gt;                &lt;td&gt; Display image from the 3rd Thursday of Nov to the 4th Thursday of Nov.&lt;br /&gt;&lt;/td&gt;            &lt;/tr&gt;&lt;tr&gt;                &lt;td align="center"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;12/20-1/1stSun&lt;/span&gt;&lt;br /&gt;&lt;/td&gt;                &lt;td&gt; Display image from Dec 20th to the 1st Sunday of Janurary.&lt;br /&gt;&lt;/td&gt;            &lt;/tr&gt;&lt;/tbody&gt;    &lt;/table&gt;&lt;br /&gt;IMPORTANT NOTES:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The dates that&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt; cross months (&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;em&gt;7/20-8/20&lt;/em&gt;&lt;/span&gt;) will display along with date specific images (added to the randomization).&lt;/li&gt;&lt;li&gt;Use slashes "&lt;span style="color: rgb(255, 0, 0);"&gt;/&lt;/span&gt;" to  separate the month and day and dashes "&lt;span style="color: rgb(255, 0, 0);"&gt;-&lt;/span&gt;" to set a range (e.g., using &lt;em&gt;1-1 to 1-5&lt;/em&gt; will break the script) &lt;/li&gt;&lt;li&gt;Using the &lt;em&gt;last&lt;/em&gt; weekday (&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;em&gt;lastMon&lt;/em&gt;&lt;/span&gt;) of the month in the date has one restriction at this time... it'll only works for 30 day months for now. I may fix this in future versions.&lt;/li&gt;&lt;li&gt;When using the text in the date (e.g. &lt;em&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;1st&lt;/span&gt;, &lt;span style="color: rgb(255, 0, 0);"&gt;2nd&lt;/span&gt;, &lt;span style="color: rgb(255, 0, 0);"&gt;3rd&lt;/span&gt;, &lt;span style="color: rgb(255, 0, 0);"&gt;last&lt;/span&gt;&lt;/em&gt;) don't spell these fully out ( first, second, third) as the script is looking for the number.&lt;/li&gt;&lt;li&gt;The weekday in the date must have at least 3 letters - these are okay: (&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;em&gt;Mon&lt;/em&gt;&lt;/span&gt; or &lt;span style="color: rgb(255, 0, 0);"&gt;&lt;em&gt;Monday&lt;/em&gt;&lt;/span&gt;); these are &lt;span style="text-decoration: underline;"&gt;not&lt;/span&gt; okay (&lt;em&gt;M&lt;/em&gt; or &lt;em&gt;Mo&lt;/em&gt;).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Troubleshooting&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you are noticing that one image isn't showing up or something just doesn't work right, you can try to trouble shoot the problem.&lt;/li&gt;&lt;li&gt;Look for the following lines in the script below the "Don't change anything below this line"&lt;br /&gt;&lt;br /&gt;var debug = &lt;span style="color: rgb(102, 102, 204);"&gt;false&lt;/span&gt;; /* for debugging purposes */&lt;br /&gt;var thismonth = (debug) ? &lt;span style="color: rgb(102, 102, 204);"&gt;11&lt;/span&gt; : date.getMonth() + 1;&lt;br /&gt;var thisday = (debug) ? &lt;span style="color: rgb(102, 102, 204);"&gt;20&lt;/span&gt; : date.getDate();&lt;br /&gt;var thisyear = (debug) ? &lt;span style="color: rgb(102, 102, 204);"&gt;2009&lt;/span&gt; : date.getFullYear();&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Set the debug variable to "&lt;span style="color: rgb(102, 102, 204);"&gt;true&lt;/span&gt;" and then adjust the date (in &lt;span style="color: rgb(102, 102, 204);"&gt;blue&lt;/span&gt;) to manually adjust the date.&lt;/li&gt;&lt;li&gt;Run the script and you can see what the script gets for results from your variables.&lt;/li&gt;&lt;li&gt;The display will show images found for the current month (thismonth variable) and show the date it derived as well as if it's within the date range.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Additionally, you can  access the debug mode from the address bar simply by adding the following (in &lt;span style="color: rgb(102, 102, 204);"&gt;blue&lt;/span&gt;) to the end:&lt;br /&gt;&lt;br /&gt;http://myurl.com/randomImage.htm&lt;strong style="color: rgb(102, 102, 204);"&gt;&lt;span style="color: rgb(178, 162, 199);"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-weight: bold; color: rgb(102, 102, 204);"&gt;#debug:12/31/2009&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: rgb(102, 102, 204); font-weight: bold;"&gt;#debug&lt;/span&gt; - actives the debug mode&lt;/li&gt;&lt;li&gt;&lt;strong style="color: rgb(102, 102, 204); font-weight: normal;"&gt;&lt;span style="color: rgb(178, 162, 199);"&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: rgb(102, 102, 204); font-weight: bold;"&gt;12/31/2009&lt;/span&gt; - sets the date you want to check (month/day/year)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;To prevent debug from working once you are done with your script, simply set the locked variable in the script to true:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;/* locks out debug mode from the URL*/&lt;/span&gt;&lt;br /&gt;var locked = &lt;span style="color: rgb(102, 102, 204); font-weight: bold;"&gt;true&lt;/span&gt;; &lt;/li&gt;&lt;li&gt;Sample debug output:&lt;br /&gt;&lt;br /&gt;Date used: 11/20/2009&lt;br /&gt;(11/11), derived range: 11-11 is &lt;span style="color: rgb(255, 0, 0);"&gt;NOT in range&lt;/span&gt;; image = veterans1.jpg&lt;br /&gt;(11/11), derived range: 11-11 is &lt;span style="color: rgb(255, 0, 0);"&gt;NOT in range&lt;/span&gt;; image = veterans2.jpg&lt;br /&gt;(11/11), derived range: 11-11 is &lt;span style="color: rgb(255, 0, 0);"&gt;NOT in range&lt;/span&gt;; image = veterans3.jpg&lt;br /&gt;(11/3rdThur-11/4thThur), derived range: 19-26 &lt;span style="color: rgb(0, 136, 0);"&gt;is in range&lt;/span&gt;; image = thanksgiving1.jpg&lt;br /&gt;(11/3rdThur-11/4thThur), derived range: 19-26 &lt;span style="color: rgb(0, 136, 0);"&gt;is in range&lt;/span&gt;; image = thanksgiving2.jpg&lt;br /&gt;(11/3rdThur-11/4thThur), derived range: 19-26 &lt;span style="color: rgb(0, 136, 0);"&gt;is in range&lt;/span&gt;; image = thanksgiving3.jpg&lt;br /&gt;(11/3rdThur-11/4thThur), derived range: 19-26 &lt;span style="color: rgb(0, 136, 0);"&gt;is in range&lt;/span&gt;; image = thanksgiving4.jpg&lt;br /&gt;&lt;br /&gt;# of currentImages = 4&lt;br /&gt;current random image = thanksgiving4.jpg&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Try out these links to see the debug mode in action (my example script isn't locked):&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="https://dl.dropbox.com/u/1510510/jquery-todaysImage/random-images-by-date.htm#debug:1.1.2010"&gt;#debug:1.1.2010&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://dl.dropbox.com/u/1510510/jquery-todaysImage/random-images-by-date.htm#debug:10/31/2009"&gt;#debug:10/31/2009&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://dl.dropbox.com/u/1510510/jquery-todaysImage/random-images-by-date.htm#debug"&gt;#debug&lt;/a&gt; - This will default to todays date, but edit mode is active&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-1315814641489198538?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/1315814641489198538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2009/09/random-image-by-date.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/1315814641489198538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/1315814641489198538'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2009/09/random-image-by-date.html' title='Random Image by Date'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-6822449209870170420</id><published>2009-09-19T12:24:00.013-05:00</published><updated>2010-09-16T10:20:57.594-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MMORPG'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='server status'/><title type='text'>MMORPG Server Status</title><content type='html'>I just started teaching myself php and figured out how to make a server status box  for a couple of online games. So far I've added a server status for Aion, Lord of the Rings and Warhammer. These are free for anyone to use. I made it so you can add your own CSS and I added a few parameters to make them even more customizable!&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://motty.000space.com/"&gt;motty.000space.com&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;img alt="" border="0" src="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/serverstatus-2.jpg" style="display: block; margin: 0px auto 10px; text-align: center;" /&gt;&lt;span style="font-weight: bold;"&gt;Note&lt;/span&gt;: These server status boxes obtain information directly from their respective pages (see the source of the page). The information is cached every 10 minutes and hopefully that is enough to keep from aggravating the site admin and locking me out.&lt;br /&gt;&lt;br /&gt;If you require more detailed instructions, click the appropriate link below.&lt;br /&gt;&lt;style type="text/css"&gt;.status td {border: #333 1px solid}&lt;/style&gt;&lt;br /&gt;&lt;table class="status"&gt;&lt;thead&gt;&lt;tr&gt;&lt;th style="background-color: #595959; color: white;"&gt;Server Status Available&lt;/th&gt;&lt;th align="center" style="background-color: #595959; color: white;"&gt;000Space&lt;br /&gt;Site&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://guildportal.com/Guild.aspx?GuildID=258012&amp;amp;TabID=2168224&amp;amp;ForumID=1233963&amp;amp;TopicID=8527995&amp;amp;Page=1#42128235"&gt;Aion&lt;/a&gt;&lt;/td&gt;&lt;td align="center"&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://guildportal.com/Guild.aspx?GuildID=258012&amp;amp;TabID=2168224&amp;amp;ForumID=1233963&amp;amp;TopicID=8523495&amp;amp;Page=1#42106712"&gt;LOTRO - US&lt;/a&gt;&lt;/td&gt;&lt;td align="center"&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://guildportal.com/Guild.aspx?GuildID=258012&amp;amp;TabID=2168224&amp;amp;ForumID=1233963&amp;amp;TopicID=8523495&amp;amp;Page=1#42106712"&gt;LOTRO - EU&lt;/a&gt;&lt;/td&gt;&lt;td align="center"&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://guildportal.com/Guild.aspx?GuildID=258012&amp;amp;TabID=2168224&amp;amp;ForumID=1233963&amp;amp;TopicID=8531213&amp;amp;Page=1#42143065"&gt;Warhammer&lt;/a&gt;&lt;/td&gt;&lt;td align="center"&gt;X*&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://guildportal.com/Guild.aspx?GuildID=258012&amp;amp;ForumID=1233963&amp;amp;TabID=2168224&amp;amp;Replies=0&amp;amp;TopicID=8562821"&gt;WoW - US&lt;/a&gt;&lt;/td&gt;&lt;td align="center"&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://guildportal.com/Guild.aspx?GuildID=258012&amp;amp;ForumID=1233963&amp;amp;TabID=2168224&amp;amp;Replies=0&amp;amp;TopicID=8562821"&gt;WoW - EU&lt;/a&gt;&lt;/td&gt;&lt;td align="center"&gt;X&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt;: The mirror site at &lt;a href="http://motty.000space.com/"&gt;motty.000space.com&lt;/a&gt;, well is almost a mirror site. I'm still working the bugs out of accessing the server status page for that site, so it's using the warhammer server status from heliohost.org.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update #2&lt;/span&gt;: I ditched l4rge.com since it turned out to be so unreliable, sorry for the inconvenience; But I've found a newer and better hosting site with heliohost.org. The above post has been updated to reflect this information.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-6822449209870170420?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/6822449209870170420/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2009/09/mmorpg-server-status.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6822449209870170420'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6822449209870170420'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2009/09/mmorpg-server-status.html' title='MMORPG Server Status'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-258724403578128327</id><published>2009-09-11T22:06:00.018-05:00</published><updated>2010-09-16T10:22:03.139-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Video'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='Media'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Chained Video Selection Box</title><content type='html'>This video box does two things.&lt;br /&gt;(1) Videos are grouped and can be selected from a drop down menu.&lt;br /&gt;(2) You can change the video size on the fly.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;Click on the image below to see the demo page, view source for the full code.&lt;/div&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a href="http://dl.dropbox.com/u/1510510/misc/videoBox.htm"&gt;&lt;img src="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/forums/videobox2.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-size: 130%;"&gt;Customizing&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey;"&gt;&lt;b&gt;&lt;span style="font-size: 100%;"&gt;Setting up Groups&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;To add a new group, you'll need to first add it to the group selector box - it looks like the example below. Add the new group option in whatever order you desire.&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;&lt;span style="color: #009900;"&gt;&amp;lt;!-- Add New Groups below --&amp;gt;&lt;br /&gt;&amp;lt;!-- ******************** --&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;option value="group1"&amp;gt;&lt;span style="color: #ffc000;"&gt;The Guild&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="group2"&amp;gt;&lt;span style="color: #ffc000;"&gt;Muppets&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="group3"&amp;gt;&lt;span style="color: #ffc000;"&gt;Misc Videos&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #009900;"&gt;&amp;lt;!-- Add New Groups Above --&amp;gt;&lt;br /&gt;&amp;lt;!-- ******************** --&amp;gt;&lt;/span&gt;&lt;/blockquote&gt;Add this for a new group:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;&amp;lt;option value="&lt;span style="color: #0080ff;"&gt;group#&lt;/span&gt;"&amp;gt;&lt;span style="color: #ffc000;"&gt;GROUP NAME&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;/blockquote&gt;Now replace the "&lt;span style="color: #0080ff;"&gt;group#&lt;/span&gt;" with the next number and the text in &lt;span style="color: #ffc000;"&gt;yellow&lt;/span&gt; with the group name.  &lt;/li&gt;&lt;li&gt;Now you'll need to add the group's box, follow this template:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;&amp;lt;div id="&lt;span style="color: #0080ff;"&gt;group#&lt;/span&gt;"&amp;gt;&amp;lt;!--&lt;br /&gt;&amp;lt;option value="&lt;span style="color: orange;"&gt;VIDEO #1 URL or Embed code&lt;/span&gt;"&amp;gt;&lt;span style="color: #993399;"&gt;VIDEO #1 TITLE&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option value="&lt;span style="color: orange;"&gt;VIDEO #2 URL or Embed code&lt;/span&gt;"&amp;gt;&lt;span style="color: #993399;"&gt;VIDEO #2 TITLE&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;br /&gt;--&amp;gt;&amp;lt;/div&amp;gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;         Make sure the &lt;span style="color: #0080ff;"&gt;group#&lt;/span&gt; matches the number in the selector box&lt;/li&gt;&lt;li&gt;         Replace the URL in &lt;span style="color: orange;"&gt;orange&lt;/span&gt; with the video's URL or Embed code (&lt;b&gt;*Note*&lt;/b&gt; read the "Video URL" section below before adding the URL)&lt;/li&gt;&lt;li&gt;         Replace the text in &lt;span style="color: #993399;"&gt;purple&lt;/span&gt; with your Video's title.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;If you want to change the displayed text from "Select a group", "Select a video" or "&amp;lt;- select". I highlighted the text in &lt;span style="color: teal;"&gt;teal &lt;/span&gt;so you can find it easier. *&lt;b&gt;Note*&lt;/b&gt; &amp;lt; is the HTML code for the left bracket "&amp;lt;".&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-size: 100%;"&gt;&lt;b&gt;&lt;span style="color: grey;"&gt;Video URL or Embed Code&lt;/span&gt;&lt;/b&gt;&lt;/span&gt; &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Only certain sites have support for the URL shortcut versus using the entire embed code provided by the site, I could add more but it'll just make the code that much longer:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.dailymotion.com/us"&gt;Daily Motion&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://video.google.com/"&gt;Google Video&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://video.yahoo.com/"&gt;Yahoo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.youtube.com/"&gt;You Tube&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;&lt;b&gt;DailyMotion&lt;/b&gt;&lt;/u&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;&amp;lt;option value='&lt;span style="color: #f79646;"&gt;http://www.dailymotion.com/video/x1bxhu_tunak-tunak-tun_fun&lt;/span&gt;'&amp;gt;&lt;span style="color: #993399;"&gt;Tunak Tunak (DailyMotion 4:3)&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;&lt;b&gt;Google Video&lt;/b&gt;&lt;/u&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;&amp;lt;option value='&lt;span style="color: #f79646;"&gt;http://video.google.com/videoplay?docid=3034123062262825045&lt;/span&gt;'&amp;gt;&lt;span style="color: #993399;"&gt;Final Fantasy X-2 Intro (Google 4:3)&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;&lt;b&gt;Vimeo&lt;/b&gt;&lt;/u&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top"&gt;SD:&lt;/td&gt;                &lt;td&gt;&amp;lt;option value='&lt;span style="color: #f79646;"&gt;http://www.vimeo.com/5336440&lt;/span&gt;'&amp;gt;&lt;span style="color: #993399;"&gt;Blip (Vimeo 4:3)&lt;/span&gt;&amp;lt;/option&amp;gt;                &lt;/td&gt;            &lt;/tr&gt;&lt;tr&gt;                &lt;td valign="top"&gt;HD:&lt;/td&gt;&lt;td&gt;&amp;lt;option value='&lt;span style="color: #f79646;"&gt;http://www.vimeo.com/&lt;span style="color: red;"&gt;hd#&lt;/span&gt;6235286&lt;/span&gt;'&amp;gt;&lt;span style="color: #993399;"&gt;The Forest (Vimeo 16:9)&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option title='&lt;span style="color: red;"&gt;hd&lt;/span&gt;' value='&lt;span style="color: #f79646;"&gt;http://www.vimeo.com/6235286&lt;/span&gt;'&amp;gt;&lt;span style="color: #993399;"&gt;The Forest (Vimeo 16:9)&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;br /&gt;&amp;lt;option title='&lt;span style="color: red;"&gt;1.78&lt;/span&gt;' value='&lt;span style="color: #f79646;"&gt;http://www.vimeo.com/6235286&lt;/span&gt;'&amp;gt;&lt;span style="color: #993399;"&gt;The Forest (Vimeo 16:9)&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;ul&gt;&lt;li&gt;All three of the HD examples are equivalent.&lt;/li&gt;&lt;li&gt;Note the "&lt;span style="color: red;"&gt;hd#&lt;/span&gt;" in the URL is specific for HD videos - so you could manually add this, but you may not get the HD version if it doesn't exist)&lt;/li&gt;&lt;/ul&gt;&lt;/td&gt; &lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;&lt;b&gt;Yahoo&lt;/b&gt;&lt;/u&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;&amp;lt;option value='&lt;span style="color: #f79646;"&gt;http://video.yahoo.com/watch/5292856/13959401&lt;/span&gt;'&amp;gt;&lt;span style="color: #993399;"&gt;Skateboarding Bulldog! (Yahoo 4:3)&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;&lt;b&gt;You Tube&lt;/b&gt;&lt;/u&gt;:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top"&gt;SD:&lt;/td&gt;                &lt;td&gt;&amp;lt;option value='&lt;span style="color: #f79646;"&gt;http://www.youtube.com/watch?v=qNfDzfhRgkU&amp;amp;fmt=&lt;/span&gt;'&amp;gt;&lt;span style="color: #993399;"&gt;Alizee - I'm Fed Up! (YouTube 4:3)&lt;/span&gt;&amp;lt;/option&amp;gt; &lt;/td&gt;            &lt;/tr&gt;&lt;tr&gt;                &lt;td valign="top"&gt;HD: &lt;/td&gt;                &lt;td&gt;&amp;lt;option title='&lt;span style="color: red;"&gt;hd&lt;/span&gt;' value='&lt;span style="color: #f79646;"&gt;http://www.youtube.com/watch?v=cKg6CVki5hk&amp;amp;fmt=&lt;/span&gt;'&amp;gt;&lt;span style="color: #993399;"&gt;Wet - Trailer (YouTube 16:9)&lt;/span&gt;&amp;lt;/option&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;&lt;u&gt;&lt;b&gt;All other Video sites&lt;/b&gt;&lt;/u&gt;: I'm using Yahoo here, but it applies to any site that provides an embed code... make sure there are no single quotes (apostrophes) in the code... Replace these with a &lt;span style="color: red;"&gt;\'&lt;/span&gt; (backslash + apostrophe) if you have to.&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;&amp;lt;option value='&lt;span style="color: #ff9900;"&gt;&amp;lt;div&amp;gt;&amp;lt;object width="512" height="322"&amp;gt;&amp;lt;param name="movie" value="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" /&amp;gt;&amp;lt;param name="allowFullScreen" value="true" /&amp;gt;&amp;lt;param name="AllowScriptAccess" VALUE="always" /&amp;gt;&amp;lt;param name="bgcolor" value="#000000" /&amp;gt;&amp;lt;param name="flashVars" value="id=13959401&amp;amp;vid=5292856&amp;amp;lang=en-us&amp;amp;intl=us&amp;amp;thumbUrl=http%3A//l.yimg.com/a/i/us/sch/cn/video06/5292856_rnd9461b9a5_19.jpg&amp;amp;embed=1&amp;amp;ap=10513021" /&amp;gt;&amp;lt;embed src="http://d.yimg.com/static.video.yahoo.com/yep/YV_YEP.swf?ver=2.2.46" type="application/x-shockwave-flash" width="512" height="322" allowFullScreen="true" AllowScriptAccess="always" bgcolor="#000000" flashVars="id=13959401&amp;amp;vid=5292856&amp;amp;lang=en-us&amp;amp;intl=us&amp;amp;thumbUrl=http%3A//l.yimg.com/a/i/us/sch/cn/video06/5292856_rnd9461b9a5_19.jpg&amp;amp;embed=1&amp;amp;ap=10513021" &amp;gt;&amp;lt;/embed&amp;gt;&amp;lt;/object&amp;gt;&lt;/span&gt;'&amp;gt;&lt;span style="color: #993399;"&gt;Skateboarding Bulldog (using full embed code)&lt;/span&gt;&amp;lt;/option&amp;gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-258724403578128327?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/258724403578128327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2009/09/video-selection-box.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/258724403578128327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/258724403578128327'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2009/09/video-selection-box.html' title='Chained Video Selection Box'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-3040169335117721899</id><published>2009-08-28T13:45:00.009-05:00</published><updated>2010-09-16T10:23:18.055-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Color'/><category scheme='http://www.blogger.com/atom/ns#' term='Forms'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Replacing Checkbox and Radio buttons</title><content type='html'>I found this pretty cool website (&lt;a href="http://www.hieu.co.uk/blog/index.php/2009/07/09/customize-html-control-with-jquery-checkbox-radio/"&gt;Hieuuk&lt;/a&gt;) that had an example of how to replace the checkbox and radio buttons with images. I was thinking about using it until I read the comments about how it doesn't work with the keyboard.&lt;br /&gt;&lt;br /&gt;Well, I was inspired to mess around with the script, so I started working on it!&lt;br /&gt;&lt;br /&gt;Here is a demo of the result of my work...&lt;br /&gt;&lt;br /&gt;&lt;iframe src="http://dl.dropbox.com/u/1510510/misc/formControls1.htm" allowtransparency="true" align="top" frameborder="0" height="480" scrolling="auto" width="420"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;But sadly, I guess it was just a nice exercise for me because I have no idea how to make it into a jQuery plugin and well as I just found out... it's already been done, twice LOL. *Note to self* search the net before spending hours on a project o.O&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;The other versions:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;I'm not sure, but &lt;a href="http://www.protofunc.com/scripts/jquery/checkbox-radiobutton/"&gt;this version&lt;/a&gt; looks like it was made to work with the jQuery UI&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I really like &lt;a href="http://widowmaker.kiev.ua/checkbox/"&gt;this plugin version&lt;/a&gt; since it animates the radio button look... toggling a switch on and off. It just looks cool :P&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Oh well, I don't want to say it was time wasted, but I still sort of like my version ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-3040169335117721899?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/3040169335117721899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2009/08/replacing-checkbox-and-radio-buttons.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3040169335117721899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/3040169335117721899'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2009/08/replacing-checkbox-and-radio-buttons.html' title='Replacing Checkbox and Radio buttons'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-6487389392048057366</id><published>2009-08-15T19:50:00.013-05:00</published><updated>2010-07-03T12:05:37.520-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Canvas'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>Auto-resizing background image</title><content type='html'>&lt;span style="font-weight: bold;"&gt;JQuery:&lt;/span&gt; I found a very nice jQuery plugin called &lt;a href="http://www.buildinternet.com/project/supersized/"&gt;Supersized&lt;/a&gt; that makes it very easy to add an auto-resizing background image to your website. And it  includes a slideshow function!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Canvas:&lt;/span&gt; I recently started to teach myself how to use  &lt;a href="http://www.w3schools.com/tags/html5_canvas.asp"&gt;Canvas&lt;/a&gt; and I thought, hey.. I bet I could do that with canvas too! For those of you that don't know, you can easily draw (graphs), resize and rotate images with canvas. Here is a &lt;a href="http://www.ernestdelgado.com/public-tests/canvasphoto/demo/canvas.html"&gt;very nice demo&lt;/a&gt; of image manipulation.&lt;br /&gt;&lt;br /&gt;So, I'm pretty sure this is an un-approved method of using canvas as it's meant for smaller sized images. But it works! :P Well, it works for all current browsers, except IE - you'll need this plugin called &lt;a href="http://code.google.com/p/explorercanvas/"&gt;ExploreCanvas&lt;/a&gt; to make it work.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;&amp;lt;canvas id="myCanvas" style="width: 100%; height: 100%; position: absolute; left: 0px; top: 0px; z-index: -1;"&amp;gt;&amp;lt;/canvas&amp;gt;&lt;br /&gt;&amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;var elem = document.getElementById('myCanvas');&lt;br /&gt;var context = elem.getContext('2d');&lt;br /&gt;var w = document.body.clientWidth;&lt;br /&gt;var h = document.body.clientHeight;&lt;br /&gt;img = new Image();&lt;br /&gt;img.src='http://i201.photobucket.com/albums/aa236/Mottie1/testsite/screenshots/bg1.jpg';&lt;br /&gt;img.onload = function () {&lt;br /&gt; context.drawImage(this,0,0,300,150);&lt;br /&gt;};&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;*Note* The drawImage function of canvas needs to be 300 x 150 for this script as that is the default canvas size, which then gets stretched to 100% width and height using the CSS.&lt;br /&gt;&lt;br /&gt;And the problem I discovered with both the jQuery plugin and the canvas script above is that you are limited to the content on the screen. Should you need to scroll the page down, the image scrolls up (I had to modify the jQuery plugin to discover that).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-6487389392048057366?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/6487389392048057366/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2009/08/auto-resizing-background-image.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6487389392048057366'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/6487389392048057366'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2009/08/auto-resizing-background-image.html' title='Auto-resizing background image'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-8140923193251831596</id><published>2009-06-10T09:02:00.024-05:00</published><updated>2010-09-16T10:27:41.730-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Tooltip'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><category scheme='http://www.blogger.com/atom/ns#' term='jQuery'/><title type='text'>New and Improved jQuery Tooltips</title><content type='html'>&lt;hr /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size: 180%;"&gt;A &lt;a href="http://wowmotty.blogspot.com/2010/08/tooltips-jatt-just-another-tooltip.html"&gt;newer version&lt;/a&gt; of this plugin is now available!&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;hr /&gt;The guild hosting site that I use recently stopped using the tooltip script from Dynamic Drive's &lt;a href="http://www.dynamicdrive.com/dynamicindex5/dhtmltooltip.htm"&gt;Cool DHTML Tooltip&lt;/a&gt; due to it's interference with site functionality. The tooltips are now provided by an easier to use &lt;a href="http://cssglobe.com/post/1695/easiest-tooltip-and-image-preview-using-jquery"&gt;jQuery Tooltip&lt;/a&gt; script from cssglobe.com. It's a nice elegant script and very simple to use. But the tooltip goes out of bounds when it reaches the right and bottom edge of the browser window.&lt;br /&gt;&lt;br /&gt;After reading through most of the comments on the jQuery Tooltip post and decided the script needed updating. I also wanted this script to still work with the tooltips that were made for the DHTML Tooltip "onmouseover" and "onmouseout" functions. And while working on this script, I added in a few improvements along the way! So here is the result...&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;jQuery Tooltips v.2&lt;/b&gt;:&lt;/u&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Version 2 tooltips behaves like the original DHTML tooltips.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;They will stay within the browser window at all times.&lt;/li&gt;&lt;li&gt;You can assign a width to each individual tooltip.&lt;/li&gt;&lt;li&gt;You can assign a background and text color to each individual tooltip.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Version 2 tooltips will work with the DHTML tooltip event actions:&lt;br /&gt;&lt;br /&gt;onmouseover="ddrivetip('tooltip content','color','width')" onmouseout="hideddrivetip()"&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The original jQuery tooltips included image and site preview tooltips. These are now incorporated into this one script.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The version 2 tooltips can now have a specific CSS style assigned to them, both in the CSS and for each individual tooltip.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You can make the version 2 tooltips display content from a separate location on the page (display the content of any object in a tooltip)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span class="style1" style="font-size: 130%;"&gt;Adding the Tooltips&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First make sure you have jQuery installed on your site, download the latest version from &lt;a href="http://jquery.com/"&gt;jQuery&lt;/a&gt;. Then add the following CSS and script to your site, or you can &lt;a href="http://dl.dropbox.com/u/1510510/misc/tooltip.js"&gt;download the script here&lt;/a&gt;.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css"&gt;&amp;lt;style type="text/css"&amp;gt;&lt;br /&gt;.tooltip, .preview, .screenshot { cursor:pointer; }&lt;br /&gt;#tooltip, #tooltip2 { width: 250px; }&lt;br /&gt;#tooltip, #tooltip2, #preview {&lt;br /&gt;color:#dddddd;&lt;br /&gt;background:#222222;&lt;br /&gt;border: 1px solid #333333;&lt;br /&gt;padding:5px;&lt;br /&gt;opacity: 0.9;&lt;br /&gt;filter: alpha(opacity=90);&lt;br /&gt;text-align:left;&lt;br /&gt;display:none;&lt;br /&gt;}&lt;br /&gt;&amp;lt;/style&amp;gt;&lt;br /&gt;&amp;lt;script src="http://dl.dropbox.com/u/1510510/misc/tooltip.js" type="text/javascript"&amp;gt;&amp;lt;/script&amp;gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;span class="style1" style="font-size: 130%;"&gt;Using the Tooltips&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Basic Tooltip&lt;/b&gt;&lt;br /&gt;&lt;table class="table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center" width="100"&gt;&lt;a class="tooltip" href="http://www.blogger.com/URL" rel="100,#222222;color:#dddddd" title="Tooltip (a) Content"&gt;Link (a)&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;a class="&lt;span style="color: mediumvioletred;"&gt;tooltip&lt;/span&gt;" href="#" title="&lt;span style="color: teal;"&gt;Tooltip (a) Content&lt;/span&gt;" rel="&lt;span style="color: red;"&gt;100&lt;/span&gt;"&amp;gt;Link (a)&amp;lt;/a&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;div class="tooltip" rel="150,#9bff8f;color:#333333;" title="Tooltip (div) Content"&gt;Link (div)&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;div class="&lt;span style="color: mediumvioletred;"&gt;tooltip&lt;/span&gt;" title="&lt;span style="color: teal;"&gt;Tooltip (div) Content&lt;/span&gt;" rel="&lt;span style="color: red;"&gt;150&lt;/span&gt;,&lt;span style="color: #0080ff;"&gt;#9bff8f;color:#333333;&lt;/span&gt;"&amp;gt;Link (div)&amp;lt;/div&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;img class="tooltip" rel="200,#808080;color:#000000;" src="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/hideshow.gif" title="Tooltip (img) Content" /&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;img class="&lt;span style="color: mediumvioletred;"&gt;tooltip&lt;/span&gt;" src="IMG URL" title="&lt;span style="color: teal;"&gt;Tooltip (img) Content&lt;/span&gt;" rel="&lt;span style="color: red;"&gt;200&lt;/span&gt;,&lt;span style="color: #0080ff;"&gt;#808080;color:black;&lt;/span&gt;"&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;span class="tooltip" rel="300,#008080;color:#dddddd;" title="Tooltip (span) Content"&gt;Link (span)&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;span class="&lt;span style="color: mediumvioletred;"&gt;tooltip&lt;/span&gt;" title="&lt;span style="color: teal;"&gt;Tooltip (span) Content&lt;/span&gt;" rel="&lt;span style="color: red;"&gt;250&lt;/span&gt;,&lt;span style="color: #0080ff;"&gt;#008080;color:#dddddd;&lt;/span&gt;"&amp;gt;Link (span)&amp;lt;/span&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;class="&lt;span style="color: mediumvioletred;"&gt;tooltip&lt;/span&gt;" (required) - This class activates the tooltip&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;title="&lt;span style="color: teal;"&gt;TOOLTIP CONTENT&lt;/span&gt;" (required) - The title attribute should contain whatever you want to display inside the tooltip. This can include HTML or a pointer to content to display in the tooltip (discussed in the advanced tooltips section). Note: Do NOT use quotes in the content. If you are using HTML tags, replace the quotes with single quotes, e.g. &amp;lt;img src='http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/Nax2-10.gif'&amp;gt;. If you must use quotes to surround some text, use the HTML escape code &lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; - this text has &lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt;quotes&lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; around it.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;rel="&lt;span style="color: red;"&gt;100&lt;/span&gt;,&lt;span style="color: #0080ff;"&gt;#222222;color:#dddddd&lt;/span&gt;" (optional) - the rel attribute contains the tooltip width &amp;amp; CSS&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The width of the tooltip must be at the beginning of the rel attribute (in &lt;span style="color: red;"&gt;red&lt;/span&gt;). Do not include the "px" at the end, it is added by the script.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The tooltip CSS follows the width and is separated by a comma. The first hex code "&lt;span style="color: #0080ff;"&gt;#222222&lt;/span&gt;" is for the background color of the tooltip. You can add any additional CSS (in standard CSS format) separated by a semi-colon.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="font-size: 100%;"&gt;Preview Tooltips&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;a class="preview" href="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/styles/Help-Site.png" title="&amp;lt;center&amp;gt;Help Site&amp;lt;/center&amp;gt;"&gt;&lt;img src="http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/Nax2-10.gif" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;a class="&lt;span style="color: mediumvioletred;"&gt;preview&lt;/span&gt;" href="&lt;span style="color: orange;"&gt;http://i201.photobucket.com/albums/aa236/Mottie1/testsite/styles/Help-Site.png&lt;/span&gt;" title="&lt;span style="color: teal;"&gt;&amp;lt;center&amp;gt;Help Site&amp;lt;/center&amp;gt;&lt;/span&gt;"&amp;gt;&lt;span style="color: darkgrey;"&gt;&amp;lt;img src="&lt;/span&gt;&lt;span style="color: darkgrey;"&gt;http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/Nax2-10.gif"&amp;gt;&lt;/span&gt;&amp;lt;/a&amp;gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;class="&lt;span style="color: mediumvioletred;"&gt;preview&lt;/span&gt;" (required) - This class activates the tooltip which puts the linked image (from the href) into a tooltip. The tooltip size is adjusted automatically to fit the image.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;href="&lt;span style="color: orange;"&gt;URL&lt;/span&gt;" (required) - URL to the image, for previewing in the tooltip and the URL you go to when you click on the image.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;title="&lt;span style="color: teal;"&gt;TOOLTIP CONTENT&lt;/span&gt;" (optional) - This content becomes the image caption located below the image inside the tooltip. Note: Do NOT use quotes in the content. If you are using HTML tags,&lt;br /&gt;replace the quotes with single quotes, e.g. &amp;lt;img&lt;br /&gt;src='http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/Nax2-10.gif'&amp;gt;.&lt;br /&gt;If you must use quotes to surround some text, use the HTML escape code&lt;br /&gt;&lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; - this text has &lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt;quotes&lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; around it.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="color: darkgrey;"&gt;&amp;lt;img src="URL_THUMBNAIL"&amp;gt;&lt;/span&gt; (required) - This will be the thumbnail of the URL image (in orange), or you can pick any image as I did here. Or you can replace the &amp;lt;img&amp;gt; with text.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="font-size: 100%;"&gt;Screenshot Tooltips&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;table class="table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center"&gt;&lt;a class="screenshot" href="http://www.guildportal.com/Guild.aspx?GuildID=194525&amp;amp;TabID=1643295" rel="http://www.axiomfiles.com/Images/Spotlight/194525.jpg" title="&amp;lt;center&amp;gt;Loch Modan Yacht Club&amp;lt;/center&amp;gt;"&gt;LMYC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;a class="&lt;span style="color: mediumvioletred;"&gt;screenshot&lt;/span&gt;" href="&lt;span style="color: orange;"&gt;http://www.guildportal.com/Guild.aspx?GuildID=194525&amp;amp;TabID=1643295&lt;/span&gt;" title="&lt;span style="color: teal;"&gt;&amp;lt;center&amp;gt;Loch Modan Yacht Club&amp;lt;/center&amp;gt;&lt;/span&gt;" rel="&lt;span style="color: skyblue;"&gt;http://www.axiomfiles.com/Images/Spotlight/194525.jpg&lt;/span&gt;"&amp;gt;&lt;span style="color: darkgrey;"&gt;LMYC&lt;/span&gt;&amp;lt;/a&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;a class="screenshot" href="http://www.google.com/" rel="#" title="Google"&gt;Google&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;a class="&lt;span style="color: mediumvioletred;"&gt;screenshot&lt;/span&gt;" href="&lt;span style="color: orange;"&gt;http://www.google.com&lt;/span&gt;" title="&lt;span style="color: teal;"&gt;&amp;lt;center&amp;gt;Google&amp;lt;/center&amp;gt;&lt;/span&gt;" rel="&lt;span style="color: skyblue;"&gt;#&lt;/span&gt;"&amp;gt;&lt;span style="color: darkgrey;"&gt;Google&lt;/span&gt;&amp;lt;/a&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;ul&gt;&lt;li&gt;class="&lt;span style="color: mediumvioletred;"&gt;screenshot&lt;/span&gt;" (required) - This class activates the tooltip that gets the site screenshot image from the rel attribute (in &lt;span style="color: skyblue;"&gt;light blue&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;href="&lt;span style="color: orange;"&gt;URL&lt;/span&gt;" (required) - URL to your desired website&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;title="&lt;span style="color: teal;"&gt;TOOLTIP CONTENT&lt;/span&gt;" (optional) - This content becomes the screenshot (image) caption inside the tooltip. Note: Do NOT use quotes in the content. If you are using HTML tags,&lt;br /&gt;replace the quotes with single quotes, e.g. &amp;lt;img&lt;br /&gt;src='http://i201.photobucket.com/albums/aa236/Mottie1/testsite/icons/Nax2-10.gif'&amp;gt;.&lt;br /&gt;If you must use quotes to surround some text, use the HTML escape code&lt;br /&gt;&lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; - this text has &lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt;quotes&lt;span style="color: teal;"&gt;&amp;amp;quot;&lt;/span&gt; around it.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;rel="&lt;span style="color: skyblue;"&gt;URL_SCREENSHOT&lt;/span&gt;" or rel="&lt;span style="color: skyblue;"&gt;#&lt;/span&gt;" (required) &lt;span style="color: red;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This attribute can contain either the URL to the screenshot image of the site to which you have the link pointing. Yes, you do have to take, resize and upload the screenshot image yourself.&lt;br /&gt;&lt;br /&gt;&lt;span style="color: red;"&gt;*UPDATED (8/29/09)*&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;You can now use rel="&lt;span style="color: skyblue;"&gt;#&lt;/span&gt;" to have &lt;a href="http://www.websnapr.com/"&gt;Websnapr.com&lt;/a&gt; generate a thumbnail of the site for you&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: darkgrey;"&gt;text or image&lt;/span&gt; (required) - Text or image that becomes the clickable link to the site.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;b&gt;&lt;span style="font-size: 100%;"&gt;Advanced Tooltips&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;table class="table"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center" width="80"&gt;&lt;a class="tooltip" href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=8140923193251831596#" rel="300" title="###tt1"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div id="tt1" style="display: none;"&gt;&lt;a class="tooltip" href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=8140923193251831596#" rel="300" title="###tt1"&gt;This Tooltip is from a &amp;lt;div&amp;gt; that is inside a link&lt;/a&gt;&lt;/div&gt;&lt;a class="tooltip" href="http://www.blogger.com/post-edit.g?blogID=3474748080814775582&amp;amp;postID=8140923193251831596#" rel="300" title="###tt1"&gt;Hover me&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;a class="&lt;span style="color: mediumvioletred;"&gt;tooltip&lt;/span&gt;" rel="&lt;span style="color: red;"&gt;300&lt;/span&gt;" title="&lt;span style="color: teal;"&gt;###&lt;span style="color: orange;"&gt;tt1&lt;/span&gt;&lt;/span&gt;" href="#"&amp;gt;&lt;span style="color: #33cc00;"&gt;&amp;lt;div id="&lt;/span&gt;&lt;span style="color: #33cc00;"&gt;&lt;span style="color: orange;"&gt;tt1&lt;/span&gt;" style="display:none"&amp;gt;&lt;/span&gt;This Tooltip is from a &amp;lt;div&amp;gt; that is inside a link&lt;span style="color: #33cc00;"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;Hover me&amp;lt;/a&amp;gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;div align="center" class="tooltip" rel="300" title="###tt2"&gt;Hover me&lt;/div&gt;&lt;br /&gt;&lt;div id="tt2" style="display: none;"&gt;This tooltip is from a &amp;lt;div&amp;gt; that can be put anywhere on the page&lt;/div&gt;&lt;/td&gt;&lt;td&gt;&amp;lt;div class="&lt;span style="color: mediumvioletred;"&gt;tooltip&lt;/span&gt;" rel="&lt;span style="color: red;"&gt;300&lt;/span&gt;" title="&lt;span style="color: teal;"&gt;###&lt;span style="color: orange;"&gt;tt2&lt;/span&gt;&lt;/span&gt;"&amp;gt;Hover me&amp;lt;/div&amp;gt;&lt;br /&gt;&lt;span style="color: #33cc00;"&gt;&amp;lt;div id="&lt;/span&gt;&lt;span style="color: lime;"&gt;&lt;span style="color: orange;"&gt;tt2&lt;/span&gt;&lt;span style="color: #33cc00;"&gt;" style="display:none"&amp;gt;&lt;/span&gt;&lt;/span&gt;This tooltip is from a &amp;lt;div&amp;gt; that can be put anywhere on the page&lt;span style="color: #33cc00;"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;class="&lt;span style="color: mediumvioletred;"&gt;tooltip&lt;/span&gt;" (required) - This activates the tooltip&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;rel="&lt;span style="color: red;"&gt;300&lt;/span&gt;" (optional) - sets the tooltip width. You can also add CSS as described in the basic tooltip section&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;title="&lt;span style="color: teal;"&gt;###&lt;/span&gt;&lt;span style="color: orange;"&gt;tt1&lt;/span&gt;" (required) - The title is broken up into two parts: the tooltip object flag and the id of the object whose contents will be shown in the tooltip.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;The "&lt;span style="color: teal;"&gt;###&lt;/span&gt;" is the tooltipObjFlag. In the script is set to a default value of "&lt;span style="color: teal;"&gt;###&lt;/span&gt;". So the script will look for this specific pattern in the title. If it finds this pattern, it will then load the tooltip content from the ID that follows the flag.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The "&lt;span style="color: orange;"&gt;tt1&lt;/span&gt;" is ID of the object (a &amp;lt;div&amp;gt; in the example above) that contains the tooltip contents. Each tooltip you add in this way should have a unique ID. So the next tooltip should be "&lt;span style="color: orange;"&gt;tt2&lt;/span&gt;", etc...&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;So "&lt;span style="color: teal;"&gt;###&lt;/span&gt;&lt;span style="color: orange;"&gt;tt1&lt;/span&gt;" tells the script to load the tooltip from an object instead of the title, and that object has an ID of "&lt;span style="color: orange;"&gt;tt1&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;This was added so you could display content on your site that varies.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;&lt;span style="color: #33cc00;"&gt;&amp;lt;div id="&lt;/span&gt;&lt;span style="color: lime;"&gt;&lt;span style="color: orange;"&gt;tt1&lt;/span&gt;&lt;span style="color: #33cc00;"&gt;" style="display:none"&amp;gt;&lt;/span&gt;&lt;/span&gt;TOOLTIP CONTENT GOES HERE&lt;span style="color: #33cc00;"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt; (required) - This div (or any object like &amp;lt;span&amp;gt;, &amp;lt;table&amp;gt;, etc.) can be located anywhere on the page. It can contain anything inside of it without worrying about quotes, single quotes or embeded video. Note that the &lt;span style="color: #33cc00;"&gt;style="display:none"&lt;/span&gt; must be included so that it won't show on the page (unless you want it to).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If your tooltip content just happens to contain a lot of &lt;span style="color: teal;"&gt;#&lt;/span&gt;'s then you can change the tooltipObjectFlag to anything you want. But you must avoid using the following characters in the flag:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;. $ ^ { [ ( | ) * + ? \ &lt;/blockquote&gt;Add the new tooltipObjectFlag as follows (replace the text in &lt;span style="color: teal;"&gt;teal&lt;/span&gt; to whatever flag you want):&lt;br /&gt;&lt;blockquote class="code"&gt;&amp;lt;&lt;i&gt;script&lt;/i&gt; type="text/javascript"&amp;gt;&lt;br /&gt;var tooltipObjFlag = "&lt;span style="color: teal;"&gt;@@@&lt;/span&gt;";&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/blockquote&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span class="style1" style="font-size: 130%;"&gt;Tooltip CSS&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can edit the CSS that is included with the code to modify your overall tooltip look. This CSS should be added into the Footer HTML because GuildPortal added the tooltip CSS after the Custom CSS which makes it override the definitions in the Custom CSS.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Change the font color by modifying the text (in blue) - color:&lt;span style="color: #0080ff;"&gt;#dddddd&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Change the background color of the tooltip (in blue) - background:&lt;span style="color: #0080ff;"&gt;#222222&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Change the tooltip border thickness, style and color (red and blue) -  border: &lt;span style="color: red;"&gt;1px&lt;/span&gt; solid &lt;span style="color: #0080ff;"&gt;#333333&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You can remove or change the semi-transparent tooltips by changing the opacity setting. The "filter" is IE specific. Make sure the opacity is a deminal equivalent of the filter opacity ( &lt;span style="color: red;"&gt;0.9&lt;/span&gt; = &lt;span style="color: red;"&gt;90%&lt;/span&gt; )&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;opacity: &lt;span style="color: red;"&gt;0.9&lt;/span&gt;;&lt;br /&gt;filter: alpha(opacity=&lt;span style="color: red;"&gt;90&lt;/span&gt;);&lt;/blockquote&gt;&lt;/li&gt;&lt;li&gt;Additionally you can add a soon to be supported CSS class called border-radius which makes your tooltip have rounded edges. The "-moz-border-radius" is specific to Firefox browsers and is currently working.&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;border-radius: &lt;span style="color: red;"&gt;1em&lt;/span&gt;;&lt;br /&gt;-moz-border-radius: &lt;span style="color: red;"&gt;1em&lt;/span&gt;;&lt;/blockquote&gt;The "&lt;span style="color: red;"&gt;1em&lt;/span&gt;" means to make the size equal to 100% of the height of the current font size.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The last thing you can modify with the script is it's display speed. This really isn't part of the CSS, but I'm lazy and didn't feel like adding another section LOL. The display speed tells the script how long it should take to show the tooltip. Add the following anywhere ABOVE the tooltip.js script link.&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;&amp;lt;&lt;i&gt;script&lt;/i&gt; type="text/javascript"&amp;gt;&lt;br /&gt;var tooltipSpeed = &lt;span style="color: red;"&gt;600&lt;/span&gt;;&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;/blockquote&gt;The default speed is &lt;span style="color: red;"&gt;300&lt;/span&gt; milliseconds. You can't use negative values (no going back in time!!) and I wouldn't recommend going above &lt;span style="color: red;"&gt;1000&lt;/span&gt; milliseconds or your site users will begin to hate you.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-8140923193251831596?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/8140923193251831596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2009/06/new-and-improved-jquery-tooltips.html#comment-form' title='19 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/8140923193251831596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/8140923193251831596'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2009/06/new-and-improved-jquery-tooltips.html' title='New and Improved jQuery Tooltips'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>19</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-4215117904284950917</id><published>2009-06-03T09:55:00.011-05:00</published><updated>2010-07-03T12:23:32.742-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><title type='text'>Extracting URL parameters with Javascript</title><content type='html'>I found this very nice script over at &lt;a href="http://www.netlobo.com/"&gt;Netlobo.com&lt;/a&gt; that will extract the desired parameter from browser URL (&lt;a href="http://www.netlobo.com/url_query_string_javascript.html"&gt;see the article here&lt;/a&gt;). Maybe I can explain this better with examples.&lt;br /&gt;&lt;br /&gt;Here is a basic browser URL&lt;br /&gt;&lt;blockquote&gt;http://www.somegame.com/character.php?realm=MyRealm&amp;amp;name=Motty&lt;/blockquote&gt;You can extract out the realm or the name value using the script&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;var myStr = 'http://www.test.com/character.php?realm=MyRealm&amp;amp;name=Motty';&lt;br /&gt;document.write ( gup('name', myStr) );&lt;br /&gt;// outputs: Motty&lt;br /&gt;&lt;br /&gt;document.write ( gup('realm', myStr) );&lt;br /&gt;// outputs: MyRealm&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;Here is the modified code:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;function gup(n,s){&lt;br /&gt;n = n.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]");&lt;br /&gt;var p = (new RegExp("[\\?&amp;amp;]"+n+"=([^&amp;amp;#]*)")).exec(s);&lt;br /&gt;return (p===null) ? "" : p[1];&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-4215117904284950917?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/4215117904284950917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2009/06/extracting-url-parameters-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/4215117904284950917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/4215117904284950917'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2009/06/extracting-url-parameters-with.html' title='Extracting URL parameters with Javascript'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-2336686381339176997</id><published>2009-06-02T01:10:00.032-05:00</published><updated>2011-12-15T17:21:22.568-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Color'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>Convert jQuery RGB output to Hex Color</title><content type='html'>My current project uses &lt;a href="http://acko.net/dev/farbtastic"&gt;Farbtastic&lt;/a&gt; which is a fantastic jQuery plugin which allows users to visually choose a color for an element. The problem I ran into was loading a default color from the element:&lt;br /&gt;&lt;br /&gt;jQuery returns the element color in RGB format&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js; html-script: true"&gt;document.write( $('#myElement').css('background-color') );&lt;br /&gt;// outputs: rgb(34, 34, 34)&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;but Farbtastic uses the hex color format, just like the CSS.&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: css"&gt;#myElement { background-color: #222222 }&lt;/pre&gt;&lt;/blockquote&gt;I found this &lt;a href="http://markmail.org/message/hilbsejsl4zxwlv6#query:+page:1+mid:hilbsejsl4zxwlv6+state:results"&gt;really nice script&lt;/a&gt; (by R0bb13) which converts RGB to hex. This script requires the input variable to be in an array "[34,34,34]". In order to make the script use an RGB format "rgb(34,34,34)", I had to add one line to the script to remove the "rgb" and parenthesis and then convert (split) the result into an array...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update #2&lt;/span&gt; (allows entering an rgba value - opacity is ignored)&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="allowfullscreen" frameborder="0" src="http://jsfiddle.net/Mottie/xcqpF/1/embedded/result,js,html" style="height: 300px; width: 100%;"&gt;&lt;/iframe&gt;&lt;span style="font-weight: bold;"&gt;Updated&lt;/span&gt; (removing internal function):&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;//Function to convert hex format to a rgb color&lt;br /&gt;function rgb2hex(rgb){&lt;br /&gt; rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);&lt;br /&gt; return "#" +&lt;br /&gt;  ("0" + parseInt(rgb[1],10).toString(16)).slice(-2) +&lt;br /&gt;  ("0" + parseInt(rgb[2],10).toString(16)).slice(-2) +&lt;br /&gt;  ("0" + parseInt(rgb[3],10).toString(16)).slice(-2);&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;Here is an example of how to use this code with jQuery:&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;document.write( rgb2hex($('#myElement').css('background-color')) );&lt;br /&gt;// outputs: #222222&lt;/pre&gt;&lt;/blockquote&gt;Here is the original code from this post (not nearly as efficient as the updated script):&lt;br /&gt;&lt;blockquote class="pre"&gt;&lt;pre class="brush: js"&gt;//Function to convert hex format to a rgb color&lt;br /&gt;function rgb2hex(rgb) {&lt;br /&gt;var hexDigits = ["0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"];&lt;br /&gt;rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);&lt;br /&gt;function hex(x) {&lt;br /&gt;return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];&lt;br /&gt;}&lt;br /&gt;return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);&lt;br /&gt;}&lt;/pre&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-2336686381339176997?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/2336686381339176997/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2009/06/convert-jquery-rgb-output-to-hex-color.html#comment-form' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2336686381339176997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/2336686381339176997'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2009/06/convert-jquery-rgb-output-to-hex-color.html' title='Convert jQuery RGB output to Hex Color'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-14828936952266044</id><published>2009-06-01T08:46:00.007-05:00</published><updated>2009-09-24T18:56:18.987-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Color'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS'/><category scheme='http://www.blogger.com/atom/ns#' term='Resources'/><category scheme='http://www.blogger.com/atom/ns#' term='Design'/><title type='text'>Design Resources</title><content type='html'>I haven't started working on the layout of my new blog, but I do have a list of design resources that I wanted to share! Hopefully you will find something useful here.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Grid Layout:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;List of &lt;a href="http://www.webdesignbooth.com/15-extremely-useful-css-grid-layout-generator-for-web-designers/"&gt;15 useful CSS Grid Layout Generators&lt;/a&gt; @ Web Design Booth&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Or, you can use these grid background images that I made. Screen resolutions are getting bigger and bigger, so I figured that an 1800 x 1800 grid should cover it for at least a little bit longer :)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://i201.photobucket.com/albums/aa236/Mottie1/styles/layout-grid-black.gif"&gt;Black on White Grid&lt;/a&gt; (1800 x 1800) 172kb&lt;br /&gt;&lt;a href="http://i201.photobucket.com/albums/aa236/Mottie1/styles/layout-grid-black.gif"&gt;White on Black Grid&lt;/a&gt; (1800 x 1800) 161kb&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Theme Colors:&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://creativecurio.com/2008/05/the-color-wheel-and-color-theory/"&gt;Color Theory&lt;/a&gt; - A nice overview on complementary colors&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://colorschemedesigner.com/"&gt;Color Scheme Designer&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.hypergurl.com/colormatch.php"&gt;Color matcher&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.degraeve.com/color-palette/"&gt;Color palette generator&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Clean up messy CSS:&lt;/li&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.cleancss.com/"&gt;Clean CSS&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-14828936952266044?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/14828936952266044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2009/06/design-resources.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/14828936952266044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/14828936952266044'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2009/06/design-resources.html' title='Design Resources'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3474748080814775582.post-4001571876179328332</id><published>2009-05-31T10:12:00.001-05:00</published><updated>2009-05-31T10:59:39.723-05:00</updated><title type='text'>Welcome</title><content type='html'>&lt;span style="font-size:130%;"&gt;Welcome to my blog!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Who I am:&lt;/span&gt; I'm a self-taught amateur site designer/improver/manipulator. I know a little bit of HTML, javascript and jquery, but I've dabbled in lots of other things. I don't profess that I am the best at what I do, but it's a hobby and I like to explore my limits and try new things. Basically it's better than being bored! I also enjoy helping people. I've been told that I have the patience of a saint, but I also have the temper of a tiger LOL - rawr. It's why my avatar is almost always a cat o.O&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;How I started:&lt;/span&gt; I started working on my World of Warcraft guild site, but sadly after all my work the site was left unused (for two different guilds!). So, I figured I was cursed with guild sites, so I started helping people on the admin site. I was soon overwhelmed with questions for help. I set up a &lt;a href="http://guildportal.com/Guild.aspx?GuildID=258012&amp;amp;TabID=2168223"&gt;test-site&lt;/a&gt; to show other users examples of page content and to post instructions. It's just gone on from there...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why I made this blog:&lt;/span&gt; I hope that some of the scripts and instructions I post here will benefit people that aren't using a specific web site. Basically, I'm trying to help a broader range of people. It's what I enjoy doing *shrug*... and you thought you were demented! Ha ha ha ha&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3474748080814775582-4001571876179328332?l=wowmotty.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wowmotty.blogspot.com/feeds/4001571876179328332/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://wowmotty.blogspot.com/2009/05/welcome.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/4001571876179328332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3474748080814775582/posts/default/4001571876179328332'/><link rel='alternate' type='text/html' href='http://wowmotty.blogspot.com/2009/05/welcome.html' title='Welcome'/><author><name>Mottie</name><uri>http://www.blogger.com/profile/03268017297500430302</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://4.bp.blogspot.com/_JneK2yV_JhA/SiKjywM0vqI/AAAAAAAAAAM/hS2OlShQNH8/s1600-R/SMRT.jpg'/></author><thr:total>0</thr:total></entry></feed>
