<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" />
<head itemscope itemtype="http://schema.org/Article">
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  <meta itemprop="name" content="Download Apache OpenOffice" />
  <meta itemprop="description" content="Join the OpenOffice revolution, the free office productivity suite with over 125 million trusted downloads." />
  <meta itemprop="image" content="http://www.openoffice.org/images/aoo-logo-100x100.png" />
  <meta property="og:title" content="Download Apache OpenOffice" />
  <meta property="og:description" content="Join the OpenOffice revolution, the free office productivity suite with over 125 million trusted downloads." />
  <meta property="og:image" content="http://www.openoffice.org/images/aoo-logo-100x100.png" />
  <meta name="description" content="Official Apache OpenOffice download page. Join the OpenOffice revolution, the free office productivity suite with over 125 million trusted downloads." />
  <title>Apache OpenOffice Downloads - Official Site</title>
  <script type="text/javascript" src="globalvars.js"></script>
  <script type="text/javascript" src="msg_prop_l10n_en.js"></script>
  <script type="text/javascript" src="languages.js"></script>
  <script type="text/javascript" src="release_matrix.js"></script>
  <script type="text/javascript" src="boxed_download.js"></script>
  <script type="text/javascript" src="download.js"></script>
  <style type="text/css">
  /* <![CDATA[ */
  /*-------------------- Exceptions on standard css -----------------------*/
  @import "styles.css";
  @import "exceptions.css";
  /* ]]> */
  </style>
  <script>
    if ( window.document.referrer.indexOf( "shell.windows.com" ) != -1 ) {
       location.href = "http://www.openoffice.org/why/why_odf.html";
    }

    function share( platform ) {
      // _gaq.push( ['_trackEvent', 'social', 'shareDownload', platform] ); 

      if ( platform == 'apacheblog' ) {
        window.open( 'http://blogs.apache.org/OOo/', '_blank' );
      } else if ( platform == 'facebook' ) {
        window.open( 'http://www.facebook.com/sharer/sharer.php?u=http%3A%2F%2Fwww.openoffice.org%2Fdownload%2F', '_blank', 'toolbar=0, status=0, width=580, height=325' );
      } else if ( platform == 'twitter' ) {
        window.open( 'http://twitter.com/intent/tweet?url=http%3A%2F%2Fwww.openoffice.org%2Fdownload%2F&text=Join+the+OpenOffice+revolution%2C+the+free+office+productivity+suite+with+over+100+million+trusted+downloads.', '_blank', 'toolbar=0, status=0, width=580, height=325' );
      } else if ( platform == 'google+' ) {
        window.open( 'http://plus.google.com/share?url=http%3A%2F%2Fwww.openoffice.org%2Fdownload%2F', '_blank', 'toolbar=0, status=0, width=580, height=325' );
      }
    }
  </script>
</head>

<body>

<div class="overall_optionset">

  <div class="optionset">

    <!-- Text above the first colored box -->
    <script type="text/javascript">
    <!--
    // The text in the H1 tag is intentionally shown as "display: none" (do not display).
    // This is to please accessibility tools like a screen reader.
    document.write( "<h1 style='display: none;'>" + l10n.dl_headline_text + "</h1>" );
    //-->
    </script>

    <!-- Green: Stable release -->
    <!-- Download via select boxes -->
    <script type="text/javascript">
    <!--

    // Set a specific language ISO code to force to assemble a certain localized build as download link.
    // Changed: The variable can now be found in the "msg_prop_l10n_<ISO_code>.js".

    // Get the download box from a separate file.
    DL.createDownloadBox();

    // Fill the select boxes and wait for the user's choice.
    DL.init( 1 );

    // entourage.initialize();

    //-->
    </script>

    <!-- Green: Stable release: No JavaScript enabled -->
    <noscript>
    <div class="first button green-sel" id="optionitem2">
      <div class="green-sel-icon"></div>
      <h2>
        <a style="cursor: pointer;" href="http://www.apache.org/dyn/aoo-closer.cgi/openoffice/"
          title="Select from all platforms, languages, language packs to download">
          Apache OpenOffice Downloads - Official Site
        </a>
      </h2>
      <p>
        <a style="cursor: pointer;" href="http://www.apache.org/dyn/aoo-closer.cgi/openoffice/"
          title="Select from all platforms, languages and language packs to download">The browser seems to have JavaScript
          disabled. This technique is used for showing the actual download link. If you want to download Apache
          OpenOffice anyway, click this text to choose from the alternative download webpage.
          Our apologies for the inconvenience.
        </a>
      </p>
    </div>
    </noscript>

    <!-- Light Blue: Share download with social networks -->
    <script type="text/javascript">
    <!--
    // Get the share box from a separate file.
    DL.createShareBox();
    //-->
    </script>

    <!-- Blue: Extensions -->
    <script type="text/javascript">
    <!--
    // Get the extensions box from a separate file.
    DL.createExtensionsBox();
    //-->
    </script>

    <!-- Blue: Templates -->
    <script type="text/javascript">
    <!--
    // Get the templates box from a separate file.
    DL.createTemplatesBox();
    //-->
    </script>

  </div> <!-- class "optionset" -->

  <div class="additionalinformation">

    <!-- Navigation bar -->
    <script type="text/javascript">
    <!--
    // Get the navigation bar from a separate file.
    DL.createNavigationBar();
    //-->
    </script>

    <br /><br />

    <!-- Logo section -->
    <script type="text/javascript">
    <!--
    // Get the logo section from a separate file.
    DL.createLogoSection();
    //-->
    </script>

  </div> <!-- class: additionalinformation -->

</div> <!-- class: overall_optionset -->

</body>
</html>

