          RavelryGallery = function() {            var projectData = null;                        // Dollar and Dollar E convenience            var $ = function(id) { return document.getElementById(id); };                    var $E = function(data) {                var el;                if ('string' == typeof data) {                  el = document.createTextNode(data);                } else {                  el = document.createElement(data.tag);                  delete(data.tag);                  if ('undefined' != typeof data.children) {                    for (var i=0, child=null; 'undefined' != typeof (child=data.children[i]); i++) { if (child) { el.appendChild($E(child)); } }                    delete(data.children);                  }                  for (attr in data) {                     if (attr == 'style') {                      for (s in data[attr]) {                        el.style[s] =  data[attr][s];                      }                     } else if (data[attr]) {                      el[attr]=data[attr];                     }                  }                }                return el;            };                        return {              dataReceived: function(data) {                projectData = data;              },                      draw: function() {                if (!projectData) return;                                var container = $('gallery');                                   var projectsByDate = {};                var projectDates = [];                for (var i=0; i < projectData.projects.length; i++) {                  var project = projectData.projects[i];                  var date = project.completed;                  if (!date) date = "2006-01-01";                  if (!projectsByDate[date]) {                    projectsByDate[date] = new Array();                    projectDates.push(date);                  }                   projectsByDate[date].push(project);                }                projectDates.sort().reverse();                var sortedProjects = [];                for (var i=0; i < projectDates.length; i++) {                  var currentDate = projectsByDate[projectDates[i]];                  for (var j=0; j < currentDate.length; j++) {                    sortedProjects.push(currentDate[j]);                  }                }                for (var i=0; i < sortedProjects.length; i++) {                  var project = sortedProjects[i];                  if (project.thumbnail) {                    var title = { tag: 'a', className: 'rav_gallery_title', href: project.url, children: [project.name] };
                    
                    var date = null;
                    if (project.completed) {                    date = { tag: 'div', className: 'sidebar_detail', children: [ 'Finished: ',
                          { tag: 'b', children: [project.completed] }
                          ] };
                    }
                                              var photo = { tag: 'a', className: 'rav_gallery_photo', href: project.url, children: [                        {tag: 'img', src: project.thumbnail.src }]                    };
                    
                var pattern = null;
                if (project.pattern) {
                       pattern = { tag: 'div', className: 'sidebar_detail', children: [ 'Pattern: ',
                          { tag: 'a', href: project.pattern.url, children: [project.pattern.name] }
                          ]
                      };
                  }
                  
                  var yarn = null;
                    if (project.yarns[0]) {
                       yarn = { tag: 'div', className: 'sidebar_detail', children: [ 'Yarn: ',
                          { tag: 'a', href: project.yarns[0].url, children: [project.yarns[0].brand, ' ', project.yarns[0].name] }
                          ]
                      };
                  }
                  
                  var favs = null;
                  if (project.favorited > 0)
                  {
                   favs = { tag: 'div', className: 'rav_gallery_favs', children: [
                    { tag: 'a', href: project.url + '/comments', children: [
                        { tag: 'img', src: '/knit/img/heart.png' }] 
                        }, ' ' + project.favorited]
                    };
                  }                    container.appendChild($E({                      tag: 'div',                      className: 'rav_gallery_project',                      children: [ photo, title, favs, {tag: 'div', className: 'rav_gallery_details', children: [ date, pattern, yarn]}]                    }));                  }                }              }            }          }();
