!!!5
%html
  %head
    %title Deltacloud API #{settings.version}
    %link{ :charset => "utf-8", :href => "/stylesheets/jquery.mobile-1.0.1.min.css", :media => "screen", :rel => "stylesheet", :type => "text/css"}
    %link{ :charset => "utf-8", :href => "/stylesheets/new.css", :media => "screen", :rel => "stylesheet", :type => "text/css"}
    %script{:type => "text/javascript", :src => "/javascripts/jquery.min.js" }
    %script{:type => "text/javascript", :src => "/javascripts/application.js" }
    %script{:type => "text/javascript", :src => "/javascripts/jquery.mobile-1.0.1.min.js" }
    :javascript
      $(document).ready(function() {
        $(document).bind("mobileinit", function(){
          $.mobile.ajaxEnabled = false;
          $.mobile.hashListeningEnabled = false;
        });
      })
  %body
    %div{ 'data-role' => :page, :'data-theme' => 'e', :class => :error }
      =header "#{response.status} - #{translate_error_code(response.status)[:message]}"
      - if err
        =subheader err.message
      - elsif response.status.to_s =~ /4(\d{2})/
        =subheader request.env['REQUEST_URI']
      = yield
      %div{ 'data-role' => :footer, :'data-theme' => 'a'}
        %div{ 'data-role' => :navbar}
          %ul
            %li
              %a{ :'data-icon' => 'home', :href => url_for(''), :'data-ajax' => 'false'} Home
            %li=link_to_format(:xml)
            %li=link_to_format(:json)
        %div{ 'data-role' => :header, 'data-theme' => 'a' }
          #copyright
            Copyright 2009-2011
            %a{:href => 'http://incubator.apache.org/deltacloud/'} The Apache Software Foundation
            and individual contributors.
