[%# 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
  #%]

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

[% IF Bugzilla.session_data.title %]
  [% title = Bugzilla.session_data.title %]
  [% do_save_session = 1 %]
[% END %]
[% IF Bugzilla.session_data.header %]
  [% header = Bugzilla.session_data.header %]
  [% do_save_session = 1 %]
[% END %]

[% DEFAULT
  subheader = ""
  header_addl_info = ""
  onload = ""
  style_urls = []
%]

[%# 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 XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    [% Hook.process("start") %]
    <title>[% title %]</title>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge" />

[%# Migration note: contents of the old Param 'headerhtml' would go here %]

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

    [%# Set up the skin CSS cascade:
      #  1. Standard Bugzilla stylesheet set (persistent)
      #  2. Standard Bugzilla stylesheet set (selectable)
      #  3. All third-party "skin" stylesheet sets (selectable)
      #  4. Page-specific styles
      #  5. Custom Bugzilla stylesheet set (persistent)
      # "Selectable" skin file sets may be either preferred or alternate.
      # Exactly one is preferred, determined by the "skin" user preference.
      #%]
    [% IF user.settings.skin.value != 'standard' %]
      [% user_skin = user.settings.skin.value %]
    [% END %]
    [% style_urls.unshift('skins/standard/global.css') %]

    [%# CSS cascade, part 1: Standard Bugzilla stylesheet set (persistent).
      # Always present.
      #%]
    [% FOREACH style_url = style_urls %]
      <link href="[% style_url | ts_url | html %]"
            rel="stylesheet"
            type="text/css" />
    [% END %]
    <!--[if lte IE 7]>
      [%# Internet Explorer treats [if IE] HTML comments as uncommented.
        # Use it to import CSS fixes so that Bugzilla looks decent on IE 7
        # and below.
        #%]
      <link href="[% 'skins/standard/IE-fixes.css' | ts_url %]"
            rel="stylesheet"
            type="text/css">
    <![endif]-->

    [%# CSS cascade, part 2: Standard Bugzilla stylesheet set (selectable)
      # Present if skin selection is enabled.
      #%]
    [%# Зачем стандартные стили упоминать дважды? То есть понятно, зачем -
      # чтобы выбрать можно было. Но это не дело, оно ломает Opera 10.6.
      # Причём в Bugzilla 4 их указывают в другом порядке, и получается нормально. O_o %]
    [% IF 0 # user.settings.skin.is_enabled %]
      [% FOREACH style_url = style_urls %]
        <link href="[% style_url | ts_url | html %]"
              rel="[% 'alternate ' IF user_skin %]stylesheet"
              title="[% lc_messages.setting_descs.standard FILTER html %]"
              type="text/css" />
      [% END %]
      <!--[if lte IE 7]>
      [%# Internet Explorer treats [if IE] HTML comments as uncommented.
        # Use it to import CSS fixes so that Bugzilla looks decent on IE 7
        # and below.
        #%]
        <link href="[% 'skins/standard/IE-fixes.css' | ts_url | html %]"
              rel="[% 'alternate ' IF user_skin %]stylesheet"
              title="[% lc_messages.setting_descs.standard FILTER html %]"
              type="text/css" />
      <![endif]-->
    [% END %]

    [%# CSS cascade, part 3: Third-party stylesheet set (selectable).
      # All third-party skins are present if skin selection is enabled.
      # The admin-selected skin is always present.
      #%]
    [% FOREACH contrib_skin = user.settings.skin.legal_values %]
      [% NEXT IF contrib_skin == 'standard' %]
      [% NEXT UNLESS contrib_skin == user_skin
                  OR user.settings.skin.is_enabled %]
      [% contrib_skin = contrib_skin FILTER url_quote %]
      [% IF contrib_skin.match('\.css$') %]
        [%# 1st skin variant: single-file stylesheet %]
        <link href="[% "skins/contrib/$contrib_skin" | ts_url %]"
              rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet"
              title="[% contrib_skin FILTER html %]"
              type="text/css" />
      [% ELSE %]
        [%# 2nd skin variant: stylesheet set %]
        [% FOREACH style_url = style_urls %]
          [% IF style_url.match('^skins/standard/') %]
            [% skinned_url = style_url.replace('^skins/standard/', "skins/contrib/$contrib_skin/") %]
            [% ts_skin_url = skinned_url | ts_url %]
            [% IF ts_skin_url != skinned_url %][%# == means that css does not exist %]
            <link href="[% ts_skin_url | none %]"
                  rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet"
                  title="[% contrib_skin FILTER html %]"
                  type="text/css" />
            [% END %]
          [% END %]
        [% END %]
        [% skinned_url = 'skins/contrib/' _ contrib_skin _ '/IE-fixes.css' %]
        [% ts_skin_url = skinned_url | ts_url %]
        [% IF ts_skin_url != skinned_url %][%# == means that css does not exist %]
        <!--[if lte IE 7]>
          [%# Internet Explorer treats [if IE] HTML comments as uncommented.
            # Use it to import CSS fixes so that Bugzilla looks decent on IE 7
            # and below.
            #%]
          <link href="[% ts_skin_url | none %]"
                rel="[% 'alternate ' UNLESS contrib_skin == user_skin %]stylesheet"
                title="[% contrib_skin FILTER html %]"
                type="text/css" />
        <![endif]-->
        [% END %]
      [% END %]
    [% END %]

    [%# CSS cascade, part 4: page-specific styles.
      #%]
    [% IF style %]
      <style type="text/css">
        [% style %]
      </style>
    [% END %]

    [%# CSS cascade, part 5: Custom Bugzilla stylesheet set (persistent).
      # Always present. Site administrators may override all other style
      # definitions, including skins, using custom stylesheets.
      #%]
    [% FOREACH style_url = style_urls %]
      [% IF style_url.match('^skins/standard/') %]
        [% skinned_url = style_url.replace('^skins/standard/', "skins/custom/") %]
        [% ts_skin_url = skinned_url | ts_url %]
        [% IF ts_skin_url != skinned_url %]
          [%# Skins are allowed to miss some stylesheets. == means checked css does not exist %]
          <link href="[% ts_skin_url | none %]" rel="stylesheet" type="text/css" />
        [% END %]
      [% END %]
    [% END %]
    [% skinned_url = 'skins/custom/IE-fixes.css' %]
    [% ts_skin_url = skinned_url | ts_url %]
    [% IF ts_skin_url != skinned_url %][%# == means that css does not exist %]
    <!--[if lte IE 7]>
      [%# Internet Explorer treats [if IE] HTML comments as uncommented.
        # Use it to import CSS fixes so that Bugzilla looks decent on IE 7
        # and below.
        #%]
      <link href="[% ts_skin_url | none %]"
            rel="stylesheet"
            type="text/css" />
    <![endif]-->
    [% END %]

    <script src="[% 'js/util.js' | ts_url %]" type="text/javascript"></script>
    <script src="[% 'js/global.js' | ts_url %]" type="text/javascript"></script>
    <script src="[% 'js/hinter.js' | ts_url %]" type="text/javascript"></script>
    <script type="text/javascript">
    <!--
        [%# 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() {
            removeClass('lang_links_container', 'bz_default_hidden');
        }
        addListener(window, 'load', 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 %]'
            },
            string: {
                attach_desc_required: 'You must enter a Description for this attachment.'
            }
        };
        [% IF javascript %]
          [% javascript %]
        [% END %]
    // -->
    </script>

    [% IF javascript_urls %]
      [% FOREACH javascript_url = javascript_urls %]
        <script src="[% javascript_url | ts_url | html %]" type="text/javascript"></script>
      [% END %]
    [% 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.Bugzilla %]" href="./search_plugin.cgi" />
    <link rel="shortcut icon" href="images/favicon.ico" />
    [% 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('[-~@:/.]+','-') %]
               [% FOREACH class = bodyclasses %]
                 [% ' ' %][% class FILTER css_class_quote %]
               [% END %]">

<div id="header">

[% Param('bannerhtml') %]

<table border="0" cellspacing="0" cellpadding="0" id="titles">
<tr>
    <td id="title">
      <p>[% terms.Bugzilla %]
      [% " &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>

[% IF Bugzilla.languages.size > 1 %]
<table id="lang_links_container" cellpadding="0" cellspacing="0"
       class="bz_default_hidden"><tr><td>
  <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>
</td></tr></table>
[% END %]

[% IF user.id AND user.settings.saved_searches_position.value == "footer" %]
[% PROCESS "global/common-links.html.tmpl" qs_suffix = "top" standalone = 1 %]
[% ELSE %]
[% PROCESS "global/useful-links.html.tmpl" qs_suffix = "top" %]
[% END %]
</div> [%# header %]

<div id="bugzilla-body">
[%# Used to workaround table sizing inside div, see also skins/contrib/Dusk/global.css#bugzilla-body %]
<div id="bugzilla-padding">

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

[% IF Param('new_functionality_msg') && Param('new_functionality_tsp') && user.read_new_functionality %]
<div id="new_functionality">
  <div class="close-link"><a href="javascript:void(0)" onclick="return readNewFunctionality();" title="Mark news as read">Close</a></div>
  <div>[% Param('new_functionality_msg') FILTER none %]</div>
</div>
[% END %]

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

[% Hook.process('aftermessage') %]

[%# Show result messages from the session and delete them %]
[% IF Bugzilla.result_messages.size %]
  [% FOR m = Bugzilla.result_messages %]
    [% "global/messages.html.tmpl" FILTER process(m) %]
  [% END %]
  [% do_save_session = 1 %]
[% END %]

[% IF do_save_session; x = Bugzilla.delete_session_data('result_messages', 'title', 'header'); END %]
