<?php
// set states at a root level to reduce typos
$active_state = 'active';
$incubation_state = 'incubating';
$proposed_state = 'proposed';
$inactive_state = 'inactive';

$working_group[] = array(
  'title' => 'AsciiDoc®',
  'logo' => 'wg_asciidoc.svg',
  'body' => '<p>The AsciiDoc® Working Group drives the standardization, adoption, and evolution of AsciiDoc. This group encourages and shapes the open, collaborative development of the AsciiDoc language and its processors. </p>',
  'website' => 'https://asciidoc-wg.eclipse.org/',
  'charter' => '/org/workinggroups/asciidoc-charter.php',
  'faq' => '',
  'wgpa' => '/org/workinggroups/wgpa/asciidoc-working-group-participation-agreement.pdf',
  'wgpa-individual' => '/org/workinggroups/wgpa/asciidoc-individual-participation-agreement.pdf',
  'mailing-list' => '',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'members' => 'https://asciidoc-wg.eclipse.org/membership/members/'
);

$working_group[] = array(
  'title' => 'Cloud Development Tools',
  'logo' => 'wg-ecd-tools.svg',
  'body' => '<p>The Eclipse Cloud Development (ECD) Tools Working Group drives the evolution and broad adoption of de facto standards for cloud development tools, including language support, extensions, and developer workspace definition.</p>',
  'website' => 'https://ecdtools.eclipse.org/',
  'charter' => '/org/workinggroups/eclipse_cloud_development_charter.php',
  'faq' => '',
  'wgpa-both' => '/org/workinggroups/wgpa/eclipse-cloud-development-tools-participation-agreement.pdf',
  'sponsorship' => '/org/workinggroups/sponsorship/working-group-sponsorship-agreement.pdf',
  'mailing-list' => 'https://accounts.eclipse.org/mailing-list/ecd-tools-wg',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership/ecdtools',
  'style' => 'width:190px;max-height:60px;',
  'members' => 'https://ecdtools.eclipse.org/#members'
);

$working_group[] = array(
  'title' => 'Jakarta EE',
  'logo' => 'wg-jakarta.svg',
  'body' => '<p>The Jakarta EE Working Group enables Java ecosystem players to collaborate on advancing enterprise Java technologies in the cloud. This initiative focuses on cultivating the business interests associated with Eclipse Enterprise for Java (EE4J) technologies.</p>',
  'website' => 'https://jakarta.ee/',
  'charter' => '/org/workinggroups/jakarta_ee_charter.php',
  'faq' => '/org/workinggroups/jakarta_ee_faq.php',
  'wgpa' => '/org/workinggroups/wgpa/jakarta-ee-working-group-participation-agreement.pdf',
  'wgpa-individual' => '/org/workinggroups/wgpa/jakarta-ee-individual-working-group-participation-agreement.pdf',
  'mailing-list' => 'https://accounts.eclipse.org/mailing-list/jakarta.ee-wg',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership/jakarta-ee',
  'members' => 'https://jakarta.ee/membership/members/'
);

$working_group[] = array(
  'title' => 'openPASS',
  'logo' => 'wg-openpass.svg',
  'body' => '<p>The openPASS Working Group promotes a collaborative and innovative ecosystem by offering tools, systems, and adapters for a standardized, openly-available and vendor-neutral platform for traffic scenario simulation.</p>',
  'website' => 'https://openpass.eclipse.org/',
  'charter' => '/org/workinggroups/openpasswg_charter.php',
  'wgpa-both' => '/org/workinggroups/wgpa/openpass-working-group-participation-agreement.pdf',
  'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/openpass-wg',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'style' => 'width:115px;max-height:60px;',
  'members' => 'https://openpass.eclipse.org/about/#members'
);

$working_group[] = array(
  'title' => 'GEMOC RC',
  'logo' => 'wg_gemoc-rc.png',
  'body' => '<p>The GEMOC Research Consortium is an open and collaborative initiative which supports the development, coordination, and dissemination of the research efforts on the use and globalization of modeling languages.</p>',
  'website' => 'http://gemoc.org',
  'wgpa' => '',
  'charter' => '/org/workinggroups/gemoc_rc_charter.php',
  'mailing-list' => 'https://accounts.eclipse.org/mailing-list/gemoc-rc',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'style' => 'max-height:48px;',
  'members' => ''
);

$working_group[] = array(
  'title' => 'OS.bea',
  'logo' => 'wg_os-bea.png',
  'body' => '<p>The OS.bea Working Group fosters and supports an open, collaborative, and innovative ecosystem by providing tools, systems, and adapters for the standardized, openly-available, and vendor-neutral Open Standard Business Platform (OSBP). This initiative helps support OS.bea-related Eclipse projects that develop related software components and provides the resources for managing their quality and maturity throughout the components’ lifecycle.</p>',
  'website' => 'https://projects.eclipse.org/projects/technology.osbp',
  // 'wgpa' => '/org/workinggroups/wgpa/eclipse_osbea_working_group_participation_agreement.pdf',
  'charter' => '/org/workinggroups/osbea_wg_charter.php',
  'mailing-list' => 'https://accounts.eclipse.org/mailing-list/osbp-dev',
  'type' => $inactive_state,
  'join' => '',
  'members' => ''
);

$working_group[] = array(
  'title' => 'Capella IC',
  'logo' => 'wg_capella.png',
  'body' => '<p>The Capella Industry Consortium is dedicated to developing the ecosystem around the Capella project with vendor-neutral and open governance. Capella is an open Model-Based Systems Engineering (MBSE) solution which offers methodological guidance, intuitive model editing, and viewing capabilities for Systems, Software, and Hardware Architects. The Capella IC provides its members with a place to foster collaborations, share investment and best practices and leverage open innovation to co-develop new MBSE capabilities.</p>',
  'website' => 'https://www.polarsys.org/capella/industry-consortium.html',
  'wgpa' => '',
  'charter' => '/org/workinggroups/capellaic_charter.php',
  'mailing-list' => 'https://dev.polarsys.org/mailman/listinfo/capella-ic',
  'wiki' => 'https://wiki.polarsys.org/Capella_IC',
  'type' => $inactive_state,
  'join' => '',
  'members' => ''
);

$working_group[] = array(
  'title' => 'LocationTech',
  'logo' => 'wg_locationtech.png',
  'body' => '<p>The LocationTech Working Group is dedicated to developing advanced location-aware technologies by providing a collaborative environment for stakeholders to jointly develop Big Geospatial Data processing and visualization components, tools, and frameworks. LocationTech manages the quality and maturity of tools and components and establishes sustainable commercial services and ecosystems around them.</p>',
  'website' => 'https://www.locationtech.org/',
  'wgpa' => '',
  'charter' => '/org/workinggroups/locationtech_charter.php',
  'mailing-list' => 'https://www.locationtech.org/mailman/listinfo/location-iwg',
  'wiki' => 'http://wiki.eclipse.org/Location',
  'type' => $inactive_state,
  'join' => '',
  'members' => ''
);

$working_group[] = array(
  'title' => 'Science',
  'logo' => 'wg_science.png',
  'body' => '<p>The Science Working Group represents a collaborative effort involving industry, academia, and government with the purpose of developing reusable open source software for scientific research.</p>',
  'website' => 'https://science.eclipse.org/',
  'wgpa' => '',
  'charter' => '/org/workinggroups/science_charter.php',
  'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/science-iwg',
  'wiki' => 'https://wiki.eclipse.org/Science_IWG',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'style' => 'max-width:90px;max-height:60px;',
  'members' => 'https://science.eclipse.org/membership/'
);

$working_group[] = array(
  'title' => 'Internet of Things',
  'logo' => 'wg_iot.svg',
  'body' => '<p>The Eclipse IoT Working Group  enables collaboration on the development of open source implementations of IoT standards and protocols, frameworks and services used by IoT solutions, and tools for IoT developers for commercial-grade IoT.</p>',
  'website' => 'http://iot.eclipse.org/',
  'wgpa-both' => '/org/workinggroups/wgpa/eclipse-iot-working-group-participation-agreement.pdf',
  'charter' => '/org/workinggroups/iotwg_charter.php',
  'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/m2m-iwg',
  'wiki' => 'http://wiki.eclipse.org/Machine-to-Machine',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership/iot',
  'style' => 'width:135px;max-height:55px;',
  'members' => 'https://iot.eclipse.org/membership/members/'
);

$working_group[] = array(
  'title' => 'Polarsys',
  'logo' => 'wg_polarsys.png',
  'body' => '<p>PolarSys is an Eclipse Working Group created by large industry players and by tools providers to collaborate on the creation and support of Open Source tools for the development of embedded systems.</p>',
  'website' => 'http://www.polarsys.org/',
  'wgpa' => '',
  'charter' => '/org/workinggroups/polarsys_charter.php',
  'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/polarsys-iwg',
  'wiki' => 'http://wiki.eclipse.org/Polarsys',
  'type' => $inactive_state,
  'join' => '',
  'members' => ''
);

$working_group[] = array(
  'title' => 'openMDM',
  'logo' => 'wg-openmdm.svg',
  'body' => '<p>The openMDM Working Group fosters and supports an open and innovative eco-system providing tools and systems, qualification kits and adapters for standardized and vendor independent management of measurement data in accordance with the ASAM ODS standard.</p>',
  'website' => 'http://www.openmdm.org/',
  'wgpa-both' => '/org/workinggroups/wgpa/openmdm-working-group-participation-agreement.pdf',
  'charter' => '/org/workinggroups/mdmwg_charter.php',
  'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/open-measured-data-wg',
  'wiki' => 'http://www.openmdm.org',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'members' => 'https://www.openmdm.org/members'
);

$working_group[] = array(
  'title' => 'Mobile (Pulsar)',
  'logo' => 'wg_pulsar.gif',
  'body' => '<p>Pulsar is a tools integration platform for the mobile developer. It makes it easy to get the tools and handset SDKs you need for developing mobile applications.</p>',
  'website' => '/pulsar/',
  'wgpa' => '',
  'charter' => '/org/workinggroups/mobilewg.php',
  'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/mobile-iwg',
  'wiki' => 'http://wiki.eclipse.org/EMIWG',
  'type' => $inactive_state,
  'join' => '',
  'members' => ''
);

$working_group[] = array(
  'title' => 'Eclipse SOA Initiative',
  'logo' => 'wg_soa.gif',
  'body' => '<p>The goal of "Eclipse SOA Initiative", will be to define, implement and promote a common Equinox-based SOA platform including both design time and runtime components.</p>',
  'website' => '/org/workinggroups/soawg.php',
  'wgpa' => '',
  'charter' => '/org/workinggroups/mobilewg.php',
  'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/soa-iwg',
  'type' => $inactive_state,
  'join' => '',
  'members' => ''
);

$working_group[] = array(
  'title' => 'Edge Native',
  'logo' => 'wg-edgenative.svg',
  'body' => '<p>The Eclipse Edge Native Working Group drives the adoption of Edge Computing technologies. It provides services like vendor-neutral marketing to the Eclipse Edge Native ecosystem and defines licensing and intellectual property flows that encourage the community to open collaboration. </p>',
  'website' => 'https://edgenative.eclipse.org/',
  'wgpa-both' => '/org/workinggroups/wgpa/eclipse-edge-working-group-participation-agreement.pdf',
  'charter' => '/org/workinggroups/eclipse_edge_charter.php',
  'mailing-list' => '',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'style' => 'width:220px;max-height:77px;',
  'members' => 'https://edgenative.eclipse.org/#members'
);

$working_group[] = array(
  'title' => 'Sparkplug',
  'logo' => 'wg-sparkplug.svg',
  'body' => '<p>The Eclipse Sparkplug Working Group drives the evolution and broad adoption of the Eclipse Sparkplug protocol and related technologies that enable the creation of open, collaborative, and interoperable Industrial IoT solutions, and a framework for supporting Industry 4.0.</p>',
  'website' => 'https://sparkplug.eclipse.org/',
  'wgpa-both' => '/org/workinggroups/wgpa/sparkplug-working-group-participation-agreement.pdf',
  'charter' => '/org/workinggroups/eclipse_sparkplug_charter.php',
  'mailing-list' => '',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'members' => 'https://sparkplug.eclipse.org/#members'
);

$working_group[] = array(
  'title' => 'OpenADx',
  'logo' => 'wg-openadx.svg',
  'body' => '<p>The OpenADx Working Group is centered around the autonomous driving toolchain and aims to bring transparency and better integration capabilities into the autonomous driving tool space.</p>',
  'website' => 'https://openadx.eclipse.org',
  'charter' => '/org/workinggroups/openadx_charter.php',
  'wgpa-both' => '/org/workinggroups/wgpa/openadx-working-group-participation-agreement.pdf',
  'mailing-list' => '',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'style' => 'width:135px;max-height:60px;',
  'members' => 'https://openadx.eclipse.org/members/'
);

$working_group[] = array(
  'title' => 'openMobility',
  'logo' => 'wg-openmobility.svg',
  'body' => '<p>The openMobility Working Group drives the evolution and broad adoption of mobility modelling and simulation technologies.</p>',
  'website' => 'https://openmobility.eclipse.org/',
  'charter' => '/org/workinggroups/openmobility_charter.php',
  'wgpa-both' => '/org/workinggroups/wgpa/openmobility-working-group-participation-agreement.pdf',
  'mailing-list' => 'https://dev.eclipse.org/mailman/listinfo/openmobility',
  'wiki' => 'https://wiki.eclipse.org/OpenMobility',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'members' => 'https://openmobility.eclipse.org/members/'
);

$working_group[] = array(
  'title' => 'OpenHW Group',
  'logo' => 'wg_openhw.svg',
  'body' => '<p>OpenHW Group is an independent not-for-profit, global organization where hardware and software designers collaborate in the development of open-source cores, related IP, tools and software, using industry best practices. OpenHW has released its first 32bit RISC-V compliant processor core and has several processor cores in active development.</p>',
  'website' => 'https://www.openhwgroup.org/#about-us',
  'charter' => '',
  'wgpa' => '',
  'mailing-list' => 'https://mailchi.mp/77bbac3766fb/openhwgroup',
  'wiki' => '',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'home-website' => 'https://www.openhwgroup.org/',
  'members' => 'https://www.openhwgroup.org/membership/members/',
  'membership' => 'https://www.openhwgroup.org/membership/'
);

$working_group[] = array(
  'title' => 'Tangle EE',
  'logo' => 'wg-tangle-ee.svg',
  'body' => '<p>The Tangle EE Working Group drives the adoption of IOTA\'s underlying network, the Tangle, and explores key IOTA use case areas including decentralized identity, data integrity and feeless payments.</p>',
  'website' => 'https://tangle.ee',
  'charter' => '/org/workinggroups/tangle_ee_charter.php',
  'wgpa-both' => '/org/workinggroups/wgpa/tangle-ee-working-group-participation-agreement.pdf',
  'mailing-list' => '',
  'wiki' => '',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'members' => 'https://tangle.ee/members'
);

$working_group[] = array(
  'title' => 'MicroProfile®',
  'logo' => 'wg_microprofile.svg',
  'body' => '<p>The MicroProfile® Working Group drives the evolution and broad adoption of technologies related to the <a href="https://microprofile.io" >MicroProfile Project</a>. MicroProfile is an open forum that optimizes Enterprise Java for a microservice architecture by innovating across multiple implementations and collaborating on common areas of interest with a goal of standardization. </p>',
  'website' => 'https://microprofile.io/',
  'charter' => '/org/workinggroups/microprofile-charter.php',
  'wgpa' => '/org/workinggroups/wgpa/microprofile-working-group-participation-agreement.pdf',
  'wgpa-individual' => '/org/workinggroups/wgpa/microprofile-working-group-participation-agreement-individual.pdf',
  'mailing-list' => '',
  'wiki' => '',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'style' => 'width:200px;max-height:70px',
  'members' => 'https://microprofile.io/workinggroup/'
);

$working_group[] = array(
  'title' => 'OSGi',
  'logo' => 'wg-osgi.png',
  'body' => '<p>The OSGi Working Group drives the evolution and broad adoption of software technologies derived from or related to the OSGi Specification Project which is an open source initiative to create software specifications, compatible implementations and TCKs to enable development, deployment and management of embedded, server-side, and cloud-native applications by using software modularity to vastly improve the evolution, maintainability, and interoperability of applications and infrastructure.</p>',
  'website' => 'https://www.osgi.org/',
  'charter' => '/org/workinggroups/osgi-charter.php',
  'wgpa' => '/org/workinggroups/wgpa/osgi-working-group-participation-agreement.pdf',
  'wgpa-individual' => '/org/workinggroups/wgpa/osgi-individual-participation-agreement.pdf',
  'mailing-list' => '',
  'wiki' => '',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'style' => 'max-height: 50px;',
  'members' => '/org/workinggroups/members.php?wg=osgi'
);

$working_group[] = array(
  'title' => 'Adoptium',
  'logo' => 'wg-adoptium.svg',
  'body' => '<p>The Adoptium Working Group promotes and supports high-quality runtimes and associated technology for use across the Java ecosystem. Our vision is to meet the needs of Eclipse and the broader Java community by providing runtimes for Java-based applications. We embrace existing standards and a wide variety of hardware and cloud platforms.</p>',
  'website' => 'https://adoptium.net/',
  'charter' => '/org/workinggroups/adoptium-charter.php',
  'wgpa-both' => '/org/workinggroups/wgpa/adoptium-working-group-participation-agreement.pdf',
  'mailing-list' => '',
  'wiki' => '',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'style' => 'width:180px;max-height:60px;',
  'members' => 'https://adoptium.net/members.html',
  'sponsorship' => '/org/workinggroups/sponsorship/working-group-sponsorship-agreement.pdf'
);

$working_group[] = array(
  'title' => 'Eclipse® IDE',
  'logo' => 'wg_eclipse_ide.svg',
  'body' => '<p>The <a href="https://ide-wg.eclipse.org/">Eclipse® IDE Working Group</a> is formed to ensure the continued sustainability, integrity, evolution and adoption of the Eclipse IDE suite of products and related technologies. In particular, it is formed to provide governance, guidance, and funding for the communities that support the delivery of the Eclipse Foundation’s flagship “Eclipse IDE” products.</p>',
  'website' => 'https://ide-wg.eclipse.org/',
  'charter' => '/org/workinggroups/eclipse-ide-charter.php',
  'wgpa-both' => '/org/workinggroups/wgpa/eclipse-ide-working-group-participation-agreement.pdf',
  'mailing-list' => '',
  'wiki' => '',
  'type' => $active_state,
  'join' => 'https://ide-wg.eclipse.org/membership/',
  'style' => '',
  'members' => 'https://ide-wg.eclipse.org/',
  'sponsorship' => '/org/workinggroups/sponsorship/working-group-sponsorship-agreement.pdf'
);

$working_group[] = array(
  'title' => 'OpenHW Europe',
  'logo' => '',
  'body' => '<p>This working group is a joint initiative of the Eclipse Foundation AISBL and its partner the <a href="https://www.openhwgroup.org/">OpenHW Group</a>. The overarching goal of this working group is to engage in initiatives complementing the general work program of the OpenHW Group that are of strategic interest to the joint members of Eclipse Foundation and OpenHW Group that relate to the European marketplace, including strategic market analysis, development of technical requirements, and digital sovereignty.</p>',
  'website' => '',
  'charter' => '/org/workinggroups/openhw-europe-charter.php',
  'wgpa-both' => '/org/workinggroups/wgpa/openhw-europe-working-group-participation-agreement.pdf',
  'mailing-list' => '',
  'wiki' => '',
  'type' => $active_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'style' => '',
  'members' => '',
);

$working_group[] = array(
  'title' => 'AICE Working Group',
  'logo' => 'wg-aice.svg',
  'body' => '<p>The Eclipse AI, Cloud & Edge (AICE) Working Group will manage and operate an open lab (the “AICE OpenLab”) that will provide a set of resources to promote the advancement, implementation, and verification of open source software for AI, Cloud, and Edge computing.</p>',
  'website' => '',
  'charter' => '/org/workinggroups/aice-charter.php',
  'wgpa-both' => '/org/workinggroups/wgpa/aice-working-group-participation-agreement.pdf',
  'mailing-list' => '',
  'wiki' => '',
  'type' => $proposed_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'style' => 'width:100px;',
  'members' => '',
);

$working_group[] = array(
  'title' => 'Oniro',
  'logo' => 'wg-oniro.png',
  'body' => '<p>The Oniro Working Group will foster an ecosystem of organizations and individuals that supports the community
  in the production and evolution of the Oniro operating system and platform. Oniro is a new commercially oriented, modular, and multikernel open source software platform. Its ecosystem will be developed in an environment where collaboration is promoted via the core Eclipse Foundation principles of vendor-neutrality, transparency, and openness.</p>',
  'website' => 'https://oniroproject.org/',
  'charter' => '/org/workinggroups/oniro-charter.php',
  'wgpa-both' => '/org/workinggroups/wgpa/oniro-working-group-participation-agreement.pdf',
  'mailing-list' => '',
  'wiki' => '',
  'type' => $proposed_state,
  'join' => 'https://accounts.eclipse.org/contact/membership',
  'style' => '',
  'members' => '',
);

function clean_css_identifier($identifier, $filter = array(' ' => '-', '_' => '-', '/' => '-', '[' => '-', ']' => '')) {
  // By default, we filter using Drupal's coding standards.
  $identifier = strtr($identifier, $filter);

  // Valid characters in a CSS identifier are:
  // - the hyphen (U+002D)
  // - a-z (U+0030 - U+0039)
  // - A-Z (U+0041 - U+005A)
  // - the underscore (U+005F)
  // - 0-9 (U+0061 - U+007A)
  // - ISO 10646 characters U+00A1 and higher
  // We strip out any character not in the above list.
  return preg_replace('/[^\x{002D}\x{0030}-\x{0039}\x{0041}-\x{005A}\x{005F}\x{0061}-\x{007A}\x{00A1}-\x{FFFF}]/u', '', $identifier);
}

function wg_types_links($working_group = array()) {
  global $active_state, $incubation_state, $proposed_state, $inactive_state;
  $links = array(
    'all' => '<li><a style="width:150px;" class="wg-btn" data-wg="wg-all-item" role="button">All</a></li>'
  );
  foreach ($working_group as $g) {
    if (!empty($g['type']) && $g['type'] === $inactive_state) {
      continue;
    }

    if ($g['type'] === $active_state) {
      $links[$active_state] = '<li><a style="width:150px;" class="wg-btn" data-wg="wg-active-item" role="button">Active</a></li>';
    }

    if ($g['type'] === $incubation_state) {
      $links[$incubation_state] = '<li><a style="width:150px;" class="wg-btn" data-wg="wg-incubating-item" role="button">Incubating</a></li>';
    }

    if ($g['type'] === $proposed_state) {
      $links[$proposed_state] = '<li><a style="width:150px;" class="wg-btn" data-wg="wg-proposed-item" role="button">Proposed</a></li>';
    }
  }
  if (count($links) <= 2) {
    return '';
  }
  return '<ul class="dropdown-menu wg-links">' . implode(" ", $links) . '</ul>';
}

function wg_output($working_group = array()){
  global $active_state, $incubation_state, $proposed_state, $inactive_state;

  //Re-order list alphabetically
  //php array sort does appear to work but can't be certain it's sorting on title key
  usort($working_group, "compare_wg_array_by_title");

  ob_start();
  foreach($working_group as $g):

    if (!empty($g['type']) && $g['type'] === $inactive_state) {
      continue;
    }

    $logo = '<img style="width:50px; max-height:60px; display:inline; margin-right:10px" src="assets/images/wg-logo-placeholder-flipped.svg" alt="Logo placeholder for '.$g['title'].'" class="img-responsive center-block"/>';
    if (!empty($g['logo'])) {
      $styles = "max-width:150px;max-height:60px;";
      // fixes issues w/ flex and unset height/width on svg items
      if (strpos($g['logo'], '.svg')) {
        $styles = "width:150px; max-height:60px;";
      }
      if (!empty($g['style'])) {
        $styles = $g['style'];
      }
      $logo = '<img style="'. $styles .'" src="assets/images/'.$g['logo'].'" alt="Logo for '.$g['title'].'" class="img-responsive center-block"/>';
    }
    $body = $g["body"];

    if (!empty($g['website'])) {
      $len = strlen($body);
      $body = substr($body, 0, $len - 4) . " <a class=\"hidden-xs\" href=\"" . $g['website'] . "\">Learn more</a>" . substr($body, -4);
    }

    $type = array(
      'class' => "background-secondary",
      'text' => "Active"
    );

    if ($g['type'] === $incubation_state) {
      $type = array(
        'class' => "background-light-grey",
        'text' => "Incubating"
      );
    }

    if ($g['type'] === $proposed_state) {
      $type = array(
        'class' => "background-primary",
        'text' => "Proposed"
      );
    }
    ?>

    <div id="wg-<?php print strtolower(preg_replace('/\s+/','-',$g['title'])); ?>" class="col-xs-24 col-sm-12 margin-bottom-20 wg-item wg-<?php print strtolower($type['text']); ?>-item">
      <div class="bordered-box bordered-box-light flex-column">
        <div class="box-header clearfix match-height-item-by-row vertical-align flex-column-mobile">
          <div class="col-xs-24 col-sm-16 box-header-logo vertical-align justify-left-desktop">
            <?php if (empty($g['logo'])): ?>
            <h3 class="vertical-align margin-top-0 margin-bottom-0">
            <?php endif; ?>
            <?php if (!empty($g['website'])): ?>
              <a href="<?php print $g['website'];?>">
            <?php else: ?>
              <span>
            <?php endif; ?>
            <?php print $logo; ?>
            <?php if (empty($g['logo'])): ?>
            <?php print $g['title'];?></h3>
            <?php endif; ?>
            <?php if (!empty($g['website'])): ?>
              </a>
            <?php else: ?>
              <span>
            <?php endif; ?>
            <?php if (empty($g['logo'])): ?>
            </h3>
            <?php endif; ?>
          </div>
          <div class="col-xs-24 col-sm-8 fw-700 vertical-align">
            Status: <?php print $type['text']; ?>
          </div>
        </div>
        <div class="flex-grow flex-column padding-30">
          <?php if(!empty($g['body'])):?>
          <div class="flex-grow"><?php print $body;?></div>
          <?php endif; ?>
          <div class="row flex-column-mobile display-flex">
            <div class="col-xs-24 col-sm-16">
              <h4>Resources:</h4>
              <ul class="padding-left-20">
                <?php if(!empty($g['charter'])):?>
                  <li><a href="<?php print $g['charter'];?>">Working Group Charter</a></li>
                <?php endif; ?>
                <?php if(!empty($g['wgpa'])):?>
                  <li><a href="<?php print $g['wgpa'];?>">Participation Agreement (For organizations)</a></li>
                <?php endif; ?>
                <?php if(!empty($g['wgpa-individual'])):?>
                  <li><a href="<?php print $g['wgpa-individual'];?>">Participation Agreement (For individuals)</a></li>
                <?php endif; ?>
                <?php if(!empty($g['wgpa-both'])):?>
                  <li><a href="<?php print $g['wgpa-both'];?>">Participation Agreement</a></li>
                <?php endif; ?>
                <?php if(!empty($g['sponsorship'])):?>
                  <li><a href="<?php print $g['sponsorship'];?>">Sponsorship Agreement</a></li>
                <?php endif; ?>
                <?php if(!empty($g['home-website'])):?>
                  <li><a href="<?php print $g['home-website'];?>"><?php print $g['title'];?> Website</a></li>
                <?php endif; ?>
                <?php if(!empty($g['members'])):?>
                  <li><a href="<?php print $g['members'];?>">Working Group Members</a></li>
                <?php endif; ?>
                <?php if(!empty($g['membership'])):?>
                  <li><a href="<?php print $g['membership'];?>"><?php print $g['title'];?> Membership</a></li>
                <?php endif; ?>
              </ul>
            </div>
            <div class="col-xs-24 col-sm-8 vertical-align justify-left-mobile">
              <div class="flex-column" style="height:100%">
              <?php if (!empty($g['join']) || !empty($g['website'])): ?>
              <p class="flex-grow" aria-hidden="true"></p>
              <p>
            <?php if (!empty($g['join'])): ?>
              <a href="<?php print $g['join'];?>" class="btn btn-primary padding-10 big">Join now</a>
            <?php endif; ?>
            <?php if (!empty($g['website'])): ?>
              <a href="<?php print $g['website'];?>" class="visible-xs margin-top-20 btn btn-primary padding-10 big">Learn more</a>
            <?php endif; ?>
              </p>
              <?php endif; ?>
              </div>
            </div>
          </div>
        </div>
      </div>
    </div>
  <?php
  endforeach;
  return ob_get_clean();
}

/**
 * usort callback function sort array by title key
 *
 */
function compare_wg_array_by_title($a, $b){
  return strcasecmp($a['title'],$b['title']);
}
