[%# The contents of this file are subject to the Mozilla Public
  # License Version 1.1 (the "License"); you may not use this file
  # except in compliance with the License. You may obtain a copy of
  # the License at http://www.mozilla.org/MPL/
  #
  # Software distributed under the License is distributed on an "AS
  # IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  # implied. See the License for the specific language governing
  # rights and limitations under the License.
  #
  # The Original Code is the Bugzilla Bug Tracking System.
  #
  # The Initial Developer of the Original Code is Netscape Communications
  # Corporation. Portions created by Netscape are
  # Copyright (C) 1998 Netscape Communications Corporation. All
  # Rights Reserved.
  #
  # Contributor(s): Gervase Markham <gerv@gerv.net>
  #                 Vaskin Kissoyan <vkissoyan@yahoo.com>
  #                 Vitaly Harisov <vitaly@rathedg.com>
  #                 Svetlana Harisova <light@rathedg.com>
  #%]

[%# INTERFACE:
  # (All the below interface elements are optional.)
  # title: string. Page title.
  # header: string. Main page header.
  # subheader: string. Page subheader.
  # header_addl_info: string. Additional header information.
  # bodyclasses: array of extra CSS classes for the <body>
  # onload: string. JavaScript code to run when the page finishes loading.
  # javascript: string. Javascript to go in the header.
  # javascript_urls: list. List of URLs to Javascript.
  # style: string. CSS style.
  # style_urls: list. List of URLs to CSS style sheets.
  # message: string. A message to display to the user. May contain HTML.
  # atomlink: Atom link URL, May contain HTML
  # generate_api_token: generate a token which can be used to make authenticated webservice calls
  #%]

[% IF message %]
  [% PROCESS global/messages.html.tmpl %]
[% END %]

[% DEFAULT
  subheader = ""
  header_addl_info = ""
  onload = ""
  style_urls = []
  yui = []
  yui_css = {}
  yui_deps = {}
  no_yui = 0
  jquery = []
  jquery_css = []
  generate_api_token = 0
%]

[% IF NOT no_yui %]
  [% SET yui_css = {
    calendar     => 1,
    datatable    => 1,
    button       => 1,
  } %]

  [%# Note: This is simple dependency resolution--you can't have dependencies
    # that depend on each other. You have to specify all of a module's deps,
    # if that module is going to be specified in "yui".
    #%]
  [% SET yui_deps = {
    datatable    => ['json', 'connection', 'datasource', 'element'],
  } %]

  [%# When using certain YUI modules, we need to process certain
    # extra JS templates.
    #%]
  [% SET yui_templates = {
    datatable => ['global/value-descs.js.tmpl'],
  } %]
[% END %]

[%# These are JS URLs that are *always* on the page and come before
  # every other JS URL.
  #%]
[% SET starting_js_urls = [
  "js/jquery/jquery-min.js",
  "js/jquery/ui/jquery-ui-min.js"
] %]

[% IF NOT no_yui %]
  [% starting_js_urls.push("js/yui/yahoo-dom-event/yahoo-dom-event.js",
                           "js/yui/cookie/cookie-min.js") %]
[% END %]

[% SET jq_css_urls = [
  "js/jquery/ui/jquery-ui-min.css",
  "js/jquery/ui/jquery-ui-structure-min.css",
  "js/jquery/ui/jquery-ui-theme-min.css",
] %]
[% style_urls.import(jquery_css, jq_css_urls) FILTER null %]

[%# Add our required jQuery plugins %]
[% jquery.push("cookie", "devbridgeAutocomplete") %]

[%# We should be able to set the default value of the header variable
  # to the value of the title variable using the DEFAULT directive,
  # but that doesn't work if a caller sets header to the empty string
  # to avoid header inheriting the value of title, since DEFAULT
  # mistakenly treats empty strings as undefined and gives header the
  # value of title anyway.  To get around that problem we explicitly
  # set header's default value here only if it is undefined. %]
[% IF !header.defined %][% header = title %][% END %]

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
                      "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
  <head>
    [% Hook.process("start") %]
    <title>[% title %]</title>

    [% IF Param('utf8') %]
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    [% END %]

    [% PROCESS "global/site-navigation.html.tmpl" %]

    [% PROCESS 'global/setting-descs.none.tmpl' %]

    [% IF NOT no_yui %]
      [% SET yui = yui_resolve_deps(yui, yui_deps) %]
    [% END %]

    [% SET css_sets = css_files(style_urls.unique, yui, yui_css) %]
    [% IF constants.CONCATENATE_ASSETS %]
      [% PROCESS format_css_link asset_url = css_sets.unified_standard_skin %]
    [% ELSE %]
      [% FOREACH asset_url = css_sets.standard %]
        [% PROCESS format_css_link %]
      [% END %]
      [% FOREACH asset_url = css_sets.skin %]
        [% PROCESS format_css_link %]
      [% END %]
    [% END %]

    [% IF style %]
      <style type="text/css">
        [% style %]
      </style>
    [% END %]

    [% IF css_sets.unified_custom %]
      [% IF constants.CONCATENATE_ASSETS %]
        [% PROCESS format_css_link asset_url = css_sets.unified_custom %]
      [% ELSE %]
        [% FOREACH asset_url = css_sets.custom %]
          [% PROCESS format_css_link %]
        [% END %]
      [% END %]
    [% END %]

    [% IF NOT no_yui %]
      [%# YUI Scripts %]
      [% FOREACH yui_name = yui %]
        [% starting_js_urls.push("js/yui/$yui_name/${yui_name}-min.js") %]
      [% END %]
    [% END %]

    [%# jQuery Plugins %]
    [% FOREACH jq_name = jquery.unique %]
      [% starting_js_urls.push("js/jquery/plugins/$jq_name/${jq_name}-min.js") %]
    [% END %]
    [% starting_js_urls.push('js/global.js') %]

    [% FOREACH asset_url = concatenate_js(starting_js_urls) %]
      [% PROCESS format_js_link %]
    [% END %]

    <script type="text/javascript">
    <!--
        [% IF NOT no_yui %]
          YAHOO.namespace('bugzilla');
          YAHOO.util.Event.addListener = function (el, sType, fn, obj, overrideContext) {
              if ( ("onpagehide" in window || YAHOO.env.ua.gecko) && sType === "unload") { sType = "pagehide"; };
              var capture = ((sType == "focusin" || sType == "focusout") && !YAHOO.env.ua.ie) ? true : false;
              return this._addListener(el, this._getType(sType), fn, obj, overrideContext, capture);
          };
          if ( "onpagehide" in window || YAHOO.env.ua.gecko) {
              YAHOO.util.Event._simpleRemove(window, "unload",
                                             YAHOO.util.Event._unload);
          }
        [% END %]

        [%# The language selector needs javascript to set its cookie,
          # so it is hidden in HTML/CSS by the "bz_default_hidden" class.
          # If the browser can run javascript, it will then "unhide"
          # the language selector using the following code.
          #%]
        function unhide_language_selector() {
            $('#lang_links_container').removeClass('bz_default_hidden');
        } 
        $(document).ready(unhide_language_selector);

        [%# Make some Bugzilla information available to all scripts. 
          # We don't import every parameter and constant because we
          # don't want to add a lot of uncached JS to every page. 
          #%]
        var BUGZILLA = {
            param: {
                cookiepath: '[% Param('cookiepath') FILTER js %]',
                maxusermatches: [% Param('maxusermatches') FILTER js %]
            },
            constant: {
                COMMENT_COLS: [% constants.COMMENT_COLS FILTER js %]
            },
            string: {
                [%# Please keep these in alphabetical order. %]

                attach_desc_required:
                    'You must enter a Description for this attachment.',
                component_required:
                    'You must select a Component for this [% terms.bug %].',
                description_required:
                    'You must enter a Description for this [% terms.bug %].',
                short_desc_required:
                    'You must enter a Summary for this [% terms.bug %].',
                version_required:
                    'You must select a Version for this [% terms.bug %].'
            }
            [% IF generate_api_token %]
              , api_token: '[% get_api_token FILTER js FILTER html %]'
            [% END %]
        };

        [% IF NOT no_yui %]
          [% FOREACH yui_name = yui %]
            [% FOREACH yui_template = yui_templates.$yui_name %]
              [% INCLUDE $yui_template %]
            [% END %]
          [% END %]
        [% END %]

        [% IF javascript %]
          [% javascript %]
        [% END %]
    // -->
    </script>

    [% FOREACH asset_url = concatenate_js(javascript_urls) %]
      [% PROCESS format_js_link %]
    [% END %]

    [%# this puts the live bookmark up on firefox for the Atom feed %]
    [% IF atomlink %]
       <link rel="alternate" 
             type="application/atom+xml" title="Atom feed" 
             href="[% atomlink FILTER html %]">
    [% END %]

    [%# Required for the 'Autodiscovery' feature in Firefox 2 and IE 7. %]
    <link rel="search" type="application/opensearchdescription+xml"
                       title="[% terms.BugzillaTitle %]" href="./search_plugin.cgi">
    [% Hook.process("additional_header") %]
  </head>

[%# Migration note: contents of the old Param 'bodyhtml' go in the body tag,
  # but set the onload attribute in the DEFAULT directive above.
  #%]

  <body onload="[% onload %]"
        class="[% urlbase.replace('^https?://','').replace('/$','').replace('[-~@:/.]+','-') FILTER css_class_quote %]
               skin-[% user.settings.skin.value FILTER css_class_quote %]
               [% FOREACH class = bodyclasses %]
                 [% ' ' %][% class FILTER css_class_quote %]
               [% END %] yui-skin-sam">

[%# Migration note: the following file corresponds to the old Param
  # 'bannerhtml'
  #%]

<div id="header">

[% IF user.settings.skin.value == 'Mozilla' || user.settings.skin.value == 'Mozilla-OpenSans' %]
  <div class="wrapper">
    <table border="0" cellspacing="0" cellpadding="0" id="titles">
    <tr>
      <td id="title">
        <a href="./" title="Home">[% terms.BugzillaTitle %]</a>
      </td>
      <td>
        [% Hook.process("message") %]
      </td>
      <td id="moz_login">
        [% IF user.id %]
          <ul class="links">
            <li class="dropdown">
              <span class="anchor">[% user.login FILTER html %]</span>
              <ul>
                [% IF user.showmybugslink %]
                  [% filtered_username = user.login FILTER uri %]
                  <li><a href="[% Param('mybugstemplate').replace('%userid%', filtered_username) %]">My [% terms.Bugs %]</a></li>
                [% END %]
                <li><a href="page.cgi?id=mydashboard.html">My Dashboard</a></li>
                <li><a href="user_profile">My Profile</a></li>
                <li><a href="page.cgi?id=user_activity.html&amp;action=run&amp;who=[% user.login FILTER uri %]">My Activity</a></li>
                <li><a href="request.cgi?requester=[% user.login FILTER uri %]&amp;requestee=[% user.login FILTER uri %]&amp;do_union=1&amp;group=type&amp;action=queue">My Requests</a></li>
                <li><a href="userprefs.cgi">Preferences</a></li>
                [% IF user.in_group('tweakparams') || user.in_group('editusers') || user.can_bless
                      || (Param('useclassification') && user.in_group('editclassifications'))
                      || user.in_group('editcomponents') || user.in_group('admin') || user.in_group('creategroups')
                      || user.in_group('editkeywords') || user.in_group('bz_canusewhines')
                      || user.get_products_by_permission("editcomponents").size %]
                  <li><a href="admin.cgi">Administration</a></li>
                [% END %]
                [% IF user.authorizer.can_logout %]
                  <li><a href="index.cgi?logout=1">Log&nbsp;out</a></li>
                [% END %]
                [% IF sudoer %]
                  <li>
                    <a href="relogin.cgi?action=end-sudo">End sudo session impersonating [% user.login FILTER html %]</a>
                  </li>
                [% END %]
              </ul>
            </li>
          </ul>
        [% ELSE %]
          <ul class="login-links">
            [% IF Param('createemailregexp')
                  && user.authorizer.user_can_create_account %]
              <li id="moz_new_account_container_top"><a href="createaccount.cgi">New&nbsp;Account</a></li>
            [% END %]

            [%# Only display one login form when we're on a LOGIN_REQUIRED page. That
              # way, we're guaranteed that the user will use the form that has 
              # hidden_fields in it (the center form) instead of this one. Also, it's
              # less confusing to have one form (as opposed to  three) when you're 
              # required to log in.
              #%]
            [% IF user.authorizer.can_login && !Bugzilla.page_requires_login %]
              [% PROCESS "account/auth/login-small.html.tmpl" qs_suffix = "_top" %]
            [% END %]
          </ul>
        [% END %]
      </td>
      <td id="moz_tab">
        <a href="https://www.mozilla.org/" title="Mozilla - Home of the Mozilla Project">
          <img src="skins/contrib/Mozilla/tabzilla.png" border="0" height="42" width="154"></a>
      </td>
    </tr>
    </table>

    [%# display the version number on the index page %]
    [% IF title == "$terms.Bugzilla Main Page" %]
      <div id="bugzilla_version">
        [% header_addl_info FILTER html %]
      </div>
    [% END %]

    [% PROCESS "global/common-links.html.tmpl" qs_suffix = "_top" %]

  </div>

[% ELSE %]

[% INCLUDE global/banner.html.tmpl %]

<table border="0" cellspacing="0" cellpadding="0" id="titles">
<tr>
    <td id="title">
      <p>[% terms.BugzillaTitle %]
      [% Hook.process("message") %]
      [% " &ndash; $header" IF header %]</p>
    </td>

  [% IF subheader %]
    <td id="subtitle">
      <p class="subheader">[% subheader %]</p>
    </td>
  [% END %]

  [% IF header_addl_info %]
    <td id="information">
      <p class="header_addl_info">[% header_addl_info %]</p>
    </td>
  [% END %]
</tr>
</table>

<table id="lang_links_container" cellpadding="0" cellspacing="0"
       class="bz_default_hidden"><tr><td>
[% IF Bugzilla.languages.size > 1 %]
  <ul class="links">
  [% FOREACH lang = Bugzilla.languages.sort %]
    <li>[% IF NOT loop.first %]<span class="separator"> | </span>[% END %]
    [% IF lang == current_language %]
      <span class="lang_current">[% lang FILTER html FILTER upper %]</span>
    [% ELSE %]
      <a href="#" onclick="set_language('[% lang FILTER none %]');">
       [%- lang FILTER html FILTER upper %]</a>
    [% END %]
    </li>
  [% END %]
  </ul>
[% END %]
</td></tr></table>

[% PROCESS "global/common-links.html.tmpl" qs_suffix = "_top" %]

[% END %]

</div> [%# header %]

<div id="bugzilla-body">

[%# in most cases the "header" variable provides redundant information, however
  # there are exceptions where not displaying this text is problematic. %]
[% IF (user.settings.skin.value == 'Mozilla' || user.settings.skin.value == 'Mozilla-OpenSans')
      && template.name.match('^attachment/')
      && !header.match('^Bug&nbsp;\d+$')
%]
  <h2>[% header FILTER none %]</h2>
[% END %]

[% IF Param('announcehtml') %]
[% Param('announcehtml') FILTER none %]
[% END %]

[% IF message %]
  <div id="message">[% message %]</div>
[% END %]

[% BLOCK format_css_link %]
  <link href="[% asset_url FILTER html %]" rel="stylesheet" type="text/css">
[% END %]

[% BLOCK format_js_link %]
  <script type="text/javascript" src="[% asset_url FILTER mtime FILTER html %]"></script>
[% END %]