$(function(){
  var language_names = {
    'js': 'JavaScript',
    'wordpress': "PHP/WordPress",
    'drupal': "PHP/Drupal",
    'php': "PHP",
    'rb': 'Ruby',
    'rails': 'Rails',
    'html': 'HTML',
    'cs-sl': '.NET &amp Silverlight',
    'cs': '.NET',    
    'py': 'Python',
    'sl': 'Silverlight',
    'as': 'ActionScript',
    'ios': 'iOS',
    'cs-mvc': 'ASP.NET MVC'
  };
  var language_classes = {
    'rails': "rb",
    'wordpress': "php",
    'drupal': "php",
  }

  $('div.code').each(function() {
    var div_code = $(this);
    var counter = 0;
    var ul = $(document.createElement('ul'));
    div_code.find('code').each(function() {
      var codeEl = $(this);
      var lang = codeEl.attr('data-lang');
      if (language_classes[lang]) {
        codeEl.addClass(language_classes[lang])
      } else {
        codeEl.addClass(lang)
      }
      codeEl.html($.trim(codeEl.html())); // don't tell micheil
      codeEl.wrap("<pre />");
      
      var linkEl = $('<a href="#" rel="'+lang+'">'+language_names[lang]+'</a>');
      var listItemEl = $('<li></li>');
      listItemEl.append(linkEl);
      ul.append(listItemEl);
      
      linkEl.click(function(e) {
        e.preventDefault();
        
        if ($(this).hasClass('active')) return;
        
        div_code.find('code').parent().hide();
        div_code.find('code[data-lang='+$(this).attr('rel')+']').parent().show();
        div_code.find('a').removeClass('active');
        $(this).addClass('active');
      });
      
      // This should be fixed to store the lang pref in a cookie and show that by default on page load
      div_code.prepend(ul)
      div_code.find('pre:not(:first)').hide();
      div_code.find('a:first').addClass('active');
    });
  });
  
  function showCodeFor(lang) {
    $("a[rel='" + lang + "']").click();
  }
  
  function getHashValues() {
    var hash = document.location.hash;
    hash = hash.replace("#", "");
    var parts = hash.split('&');
    var vals = {};
    $.each(parts, function(index, value) {
      var nameValue = value.split('=');
      vals[nameValue[0]] = nameValue[1];
    });
    return vals;
  }
  
  var hashVals = getHashValues();
  var lang = hashVals['lang'];
  if(lang) {
    showCodeFor(lang)
  }
});
