<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

  <!-- ========================================================================== -->
  <!-- mapping-v001.xsl - Variable og templater som aksesserer mappingfiler       -->
  <!-- ========================================================================== -->

  <xsl:variable name="emne-mappingfil" select="'/vrtx/mapping/mapping-emne.xml'"/> <!-- plassering av emne-mappingfil på vortex -->
  <xsl:variable name="kurs-mappingfil" select="'/vrtx/mapping/mapping-kurs.xml'"/> <!-- plassering av kurs-mappingfil på vortex -->
  <xsl:variable name="emnegruppe-mappingfil" select="'/vrtx/mapping/mapping-emnegruppe.xml'"/> <!-- plassering av emne-mappingfil på vortex -->
  <xsl:variable name="studieprogram-mappingfil" select="'/vrtx/mapping/mapping-studieprogram.xml'"/> <!-- plassering av studieprogram-mappingfil på vortex -->
  <xsl:variable name="studieretning-mappingfil" select="'/vrtx/mapping/mapping-studieretning.xml'"/> <!-- plassering av studieretning-mappingfil på vortex -->
  <xsl:variable name="ub-mappingfil" select="'/vrtx/mapping/UB-mapping.xml'"/> 

  <xsl:variable name="doku-spraak">
    <xsl:choose>
      <xsl:when test="/*/spraak = 'engelsk'">
        <xsl:value-of select="'engelsk'" />
      </xsl:when>
      <xsl:when test="$documentLanguage = 'engelsk'"><!-- variable specified in system/api-v001.xsl -->
        <xsl:value-of select="'engelsk'" />
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="'norsk'" />
      </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>

  <!-- template for referanser som finnes i fritekst -->
  <xsl:template match="referanse[@type='emne'] | emnekode-referanse">
    <xsl:variable name="emne" select="document($emne-mappingfil)/mapping/emne[@emnekode=normalize-space(current())][@spraak=$doku-spraak]"/>
    <xsl:choose>
      <xsl:when test="$emne/@url!=''">
        <a href="{$emne/@url}"><xsl:value-of select="concat(.,' - ',$emne/@emnenavn)"/></a>
      </xsl:when>
      <xsl:otherwise>
        <xsl:variable name="alt-emne" select="document($emne-mappingfil)/mapping/emne[@emnekode=normalize-space(current())]"/>
        <xsl:choose>
          <xsl:when test="$alt-emne/@url!=''">
            <a href="{$alt-emne/@url}"><xsl:value-of select="concat(.,' - ',$alt-emne/@emnenavn)"/></a>
          </xsl:when>
          <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise>
        </xsl:choose>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <!-- template for emnekode-referanser med studiepoeng (brukes i emnegrupper) -->
  <xsl:template match="emnekode-referanse" mode="studiepoeng">
    <xsl:variable name="emne" select="document($emne-mappingfil)/mapping/emne[@emnekode=normalize-space(current())][@spraak=$doku-spraak]"/>
    <!-- span class="{$emne/@status}" -->
    <xsl:choose>
      <xsl:when test="$emne/@url!=''">
        <a href="{$emne/@url}"><xsl:value-of select="concat(.,' - ',$emne/@emnenavn)"/></a>
      </xsl:when>
      <xsl:otherwise>
        <xsl:variable name="alt-emne" select="document($emne-mappingfil)/mapping/emne[@emnekode=normalize-space(current())]"/>
        <xsl:choose>
          <xsl:when test="$alt-emne/@url!=''">
            <a href="{$alt-emne/@url}"><xsl:value-of select="concat(.,' - ',$alt-emne/@emnenavn)"/></a>
          </xsl:when>
          <xsl:otherwise><xsl:value-of select="."/></xsl:otherwise>
        </xsl:choose>
      </xsl:otherwise>
    </xsl:choose>
    <xsl:if test="$emne/@studiepoeng!=''">
      <xsl:text> (</xsl:text>
      <xsl:value-of select="$emne/@studiepoeng"/><xsl:text> </xsl:text>
      <xsl:call-template name="oversett-diverse">
        <xsl:with-param name="diversetekst" select="'studiepoeng'"/>
      </xsl:call-template>
      <xsl:if test="not(normalize-space($emne/@undervisningssemester)='')">
        - <xsl:call-template name="oversett-diverse">
          <xsl:with-param name="diversetekst" select="'undervisningssemester'"/>
        </xsl:call-template><xsl:text> </xsl:text>
        <xsl:value-of select="$emne/@undervisningssemester"/>
      </xsl:if>
      <xsl:text>)</xsl:text>
    </xsl:if>
    <!-- /span -->
  </xsl:template>

  <xsl:template match="referanse[@type='emnegruppe'] | emnegruppekode-referanse">
    <xsl:variable name="emnegruppe" select="document($emnegruppe-mappingfil)//emnegruppe[@emnegruppekode=normalize-space(current())][@spraak=$doku-spraak]" />
    <xsl:choose>
      <xsl:when test="$emnegruppe">
        <xsl:variable name="gruppetekst">
          <xsl:choose>
            <xsl:when test="$emnegruppe/@spraak = 'engelsk'">
              <xsl:value-of select="' group - '" />
            </xsl:when>
            <xsl:otherwise>
              <xsl:value-of select="' gruppe - '" />
            </xsl:otherwise>            
          </xsl:choose>
        </xsl:variable>
        <a href="{$emnegruppe/@url}">
          <xsl:value-of select="concat($emnegruppe/@emnegruppeomfang, $gruppetekst, $emnegruppe/@emnegruppenavn,'&#160;(',.,')')" />
        </a>
      </xsl:when>
      <xsl:otherwise>
        <xsl:variable name="alt-emnegruppe" select="document($emnegruppe-mappingfil)//emnegruppe[@emnegruppekode=normalize-space(current())]" />
        <xsl:choose>
          <xsl:when test="$alt-emnegruppe">
            <xsl:variable name="gruppetekst">
              <xsl:choose>
                <xsl:when test="$alt-emnegruppe/@spraak = 'engelsk'">
                  <xsl:value-of select="' group - '" />
                </xsl:when>
                <xsl:otherwise>
                  <xsl:value-of select="' gruppe - '" />
                </xsl:otherwise>            
              </xsl:choose>
            </xsl:variable>
            <a href="{$alt-emnegruppe/@url}">
              <xsl:value-of select="concat($alt-emnegruppe/@emnegruppeomfang, $gruppetekst, $alt-emnegruppe/@emnegruppenavn,'&#160;(',.,')')" />
            </a>
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="."/>    
          </xsl:otherwise>
        </xsl:choose>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  
  <xsl:template match="referanse[@type='studieprogram'] | programkode-referanse">    
    <xsl:variable name="studieprogram" select="document($studieprogram-mappingfil)//studieprogram[@programkode=normalize-space(current())][@spraak=$doku-spraak]"/>
    <xsl:choose>
      <xsl:when test="$studieprogram">
        <a href="{$studieprogram/@url}"><xsl:value-of select="$studieprogram/@programnavn"/></a> (<xsl:call-template name="oversett-diverse"><xsl:with-param name="diversetekst" select="$studieprogram/@type"/></xsl:call-template>)
      </xsl:when>
      <xsl:otherwise>
        <xsl:variable name="alt-studieprogram" select="document($studieprogram-mappingfil)//studieprogram[@programkode=normalize-space(current())]"/>
        <xsl:choose>
          <xsl:when test="$alt-studieprogram">
            <a href="{$alt-studieprogram/@url}"><xsl:value-of select="$alt-studieprogram/@programnavn"/></a> (<xsl:call-template name="oversett-diverse"><xsl:with-param name="diversetekst" select="$alt-studieprogram/@type"/></xsl:call-template>)
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="." />
          </xsl:otherwise>
        </xsl:choose>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <xsl:template match="referanse[@type='studieretning'] | studieretningskode-referanse">    
    <xsl:variable name="studieretning" select="document($studieretning-mappingfil)//studieretning[@studieretningskode=normalize-space(current())][@spraak=$doku-spraak]"/>
    <xsl:choose>
      <xsl:when test="$studieretning">
        <a href="{$studieretning/@url}"><xsl:value-of select="$studieretning/@studieretningsnavn"/></a> (<xsl:call-template name="oversett-diverse"><xsl:with-param name="diversetekst" select="'studieretning'"/></xsl:call-template>)
      </xsl:when>
      <xsl:otherwise>
        <xsl:variable name="alt-studieretning" select="document($studieretning-mappingfil)//studieretning[@studieretningskode=normalize-space(current())]"/>
        <xsl:choose>
          <xsl:when test="$alt-studieretning">
            <a href="{$alt-studieretning/@url}"><xsl:value-of select="$alt-studieretning/@studieretningsnavn"/></a> (<xsl:call-template name="oversett-diverse"><xsl:with-param name="diversetekst" select="'studieretning'"/></xsl:call-template>)
          </xsl:when>
          <xsl:otherwise>
            <xsl:value-of select="."/>
          </xsl:otherwise>
        </xsl:choose>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
    
 
  <!-- ***********  -->

  <!-- brukes i studieprogram-hjemmeside/v002 -->
  <xsl:template match="studieretninger">
    <xsl:variable name="programkode" select="//programkode" />
    <xsl:variable name="studieretninger" select="document($studieretning-mappingfil)//studieretning[$programkode=@programkode-referanse]" />

    <xsl:if test="$studieretninger">
      <h2><xsl:call-template name="oversett-element" /></h2> <!-- studieretninger -->
    </xsl:if>
    
    <xsl:for-each select="$studieretninger">
      <xsl:sort select="@studieretningsnavn" order="ascending" data-type="text" />
      <a href="{@url}"><xsl:value-of select="@studieretningsnavn"/></a>
      <xsl:if test="not(position()=last())">
        <xsl:text>&#160;-&#32;</xsl:text>
      </xsl:if>
    </xsl:for-each>
  </xsl:template>

  <!-- *********** -->

  <xsl:template match="programkode" mode="hent-kortnavn">
    <xsl:variable name="spraak">
      <xsl:choose>
        <xsl:when test="//spraak='engelsk'"><xsl:value-of select="'engelsk'" /></xsl:when>
        <xsl:otherwise><xsl:value-of select="'norsk'" /></xsl:otherwise>
       </xsl:choose>
    </xsl:variable>
    <xsl:variable name="URL" select="document($studieprogram-mappingfil)//studieprogram[@programkode=normalize-space(current())][@spraak=$spraak]/@url"/> 
    <xsl:variable name="URL-UTEN-PRESENTASJON" select="substring-before($URL,'presentasjon/')"/>
    <xsl:variable name="kortnavn" select="substring-after($URL-UTEN-PRESENTASJON,'http://www.uio.no/studier/program/')"/>
    <xsl:value-of select="substring($kortnavn,1,string-length($kortnavn)-1)"/>
  </xsl:template>

  <xsl:template match="programkode" mode="hent-tittel-og-type">
    <!-- kun mulig å referere til program med samme språk som er satt i dokumentet som kaller denne templaten -->
    <xsl:variable name="spraak">
      <xsl:choose>
         <xsl:when test="//spraak='engelsk'"><xsl:value-of select="'engelsk'" /></xsl:when>
         <xsl:otherwise><xsl:value-of select="'norsk'" /></xsl:otherwise>
      </xsl:choose>
   </xsl:variable>
   <xsl:variable name="programnavn" select="document($studieprogram-mappingfil)//studieprogram[@programkode=normalize-space(current())][@spraak=$spraak]/@programnavn"/> 

  <xsl:choose>
     <xsl:when test="not(normalize-space($programnavn) = '')">
       <xsl:value-of select="$programnavn" />
       (<xsl:call-template name="oversett-attributtverdi"> 
         <xsl:with-param name="attributtverdi" 
           select="document($studieprogram-mappingfil)/mapping/studieprogram[@programkode=normalize-space(current())][@spraak=$spraak]/@type" /> 
        </xsl:call-template>)
     </xsl:when>
     <xsl:otherwise>
       <font color="red" size="+1">Fikk ikke treff på programkode: <xsl:value-of select="."/></font>
     </xsl:otherwise>
   </xsl:choose>
  </xsl:template>


  <!-- brukes i underdokumenter til program (for å velge riktig css-klasse til overstrek) -->
  <xsl:template match="programkode" mode="kun-orginal-typeverdi" >
   <xsl:variable name="spraak">
     <xsl:choose>
       <xsl:when test="//spraak='engelsk'"><xsl:value-of select="'engelsk'" /></xsl:when>
       <xsl:otherwise><xsl:value-of select="'norsk'" /></xsl:otherwise>
     </xsl:choose>
   </xsl:variable>
    <xsl:value-of select="document($studieprogram-mappingfil)/mapping/studieprogram[@programkode=normalize-space(current())][@spraak=$spraak]/@type" /> 
  </xsl:template>


  <!-- brukes for å lage lenker til studieretningene fra studieprogram-hjemmeside -->
  <xsl:template match="programkode" mode="hent-studieretninger" >
   <xsl:variable name="spraak">
     <xsl:choose>
       <xsl:when test="//spraak='engelsk'"><xsl:value-of select="'engelsk'" /></xsl:when>
       <xsl:otherwise><xsl:value-of select="'norsk'" /></xsl:otherwise>
     </xsl:choose>
   </xsl:variable>
   <xsl:variable name="foo" select="normalize-space()"/>

   <xsl:variable name="studieretninger">
     <xsl:value-of select="document($studieretning-mappingfil)//studieretning[@programkode-referanse=$foo]/@studieretningsnavn"/>
   </xsl:variable>

   <!-- sjekk på om det er studieretninger, ellers ingen output -->
   <xsl:if test="not($studieretninger = '')">
     <table WIDTH="100%" CELLPADDING="3" CELLSPACING="0"> 
       <tr> 
       <td>
         <b>
           <xsl:call-template name="oversett-diverse">
             <xsl:with-param name="diversetekst" select="'For studenter på studieretningene:'"/>
           </xsl:call-template>
         </b>
       </td> 
       </tr> 
       <xsl:for-each select="document($studieretning-mappingfil)//studieretning">
         <xsl:sort select="@studieretningsnavn" order="ascending" data-type="text"/>
         <xsl:if test="$foo=@programkode-referanse">
           <tr><td><a href="{@studieretningskode}/"><xsl:value-of select="@studieretningsnavn"/></a></td></tr>
         </xsl:if>
       </xsl:for-each>
     </table> 
   </xsl:if>
  </xsl:template>

  <!-- brukes for å liste opp studieretningene fra studieprogram-hjemmeside -->
  <xsl:template match="programkode" mode="hent-studieretninger-edit">
   <xsl:variable name="spraak">
     <xsl:choose>
       <xsl:when test="//spraak='engelsk'"><xsl:value-of select="'engelsk'" /></xsl:when>
       <xsl:otherwise><xsl:value-of select="'norsk'" /></xsl:otherwise>
     </xsl:choose>
   </xsl:variable>
   <xsl:variable name="foo" select="normalize-space()"/>

   <xsl:variable name="studieretninger">
     <xsl:value-of select="document($studieretning-mappingfil)//studieretning[@programkode-referanse=$foo]/@studieretningsnavn"/>
   </xsl:variable>

   <!-- sjekk på om det er studieretninger, ellers ingen output -->
   <xsl:choose>
     <xsl:when test="not($studieretninger = '')">
       <br/><br/><b>Programmet har følgende studieretninger:</b><br/>
       <xsl:for-each select="document($studieretning-mappingfil)//studieretning">
         <xsl:sort select="@studieretningsnavn" order="ascending" data-type="text"/>
         <xsl:if test="$foo=@programkode-referanse">
           <xsl:value-of select="@studieretningsnavn"/><br/>
         </xsl:if>
       </xsl:for-each>
     </xsl:when>
     <xsl:otherwise>
       <br/><br/>Kunne ikke finne noen studieretninger for dette programmet...
     </xsl:otherwise>
   </xsl:choose>
  </xsl:template>


  <xsl:template match="studieretningskode" mode="hent-tittel">
    <!-- kun mulig å referere til program med samme språk som er satt i dokumentet som kaller denne templaten -->
    <xsl:variable name="spraak">
      <xsl:choose>
         <xsl:when test="//spraak='engelsk'"><xsl:value-of select="'engelsk'" /></xsl:when>
         <xsl:otherwise><xsl:value-of select="'norsk'" /></xsl:otherwise>
      </xsl:choose>
   </xsl:variable>
   <xsl:variable name="studieretningsnavn" select="document($studieretning-mappingfil)//studieretning[@studieretningskode=normalize-space(current())][@spraak=$spraak]/@studieretningsnavn"/> 
   <xsl:choose>
     <xsl:when test="not(normalize-space($studieretningsnavn) = '')">
       <xsl:value-of select="$studieretningsnavn" />
     </xsl:when>
     <xsl:otherwise>
       <font color="red" size="+1">Fikk ikke treff på studieretningskode: <xsl:value-of select="."/></font>
     </xsl:otherwise>
   </xsl:choose>
  </xsl:template>


  <xsl:template match="studieretningskode" mode="hent-tittel-og-type">
    <!-- kun mulig å referere til program med samme språk som er satt i dokumentet som kaller denne templaten -->
    <xsl:variable name="spraak">
      <xsl:choose>
         <xsl:when test="//spraak='engelsk'"><xsl:value-of select="'engelsk'" /></xsl:when>
         <xsl:otherwise><xsl:value-of select="'norsk'" /></xsl:otherwise>
      </xsl:choose>
   </xsl:variable>
   <xsl:value-of select="document($studieretning-mappingfil)//studieretning[@studieretningskode=normalize-space(current())][@spraak=$spraak]/@studieretningsnavn"/> (<xsl:call-template name="oversett-diverse">
     <xsl:with-param name="diversetekst" select="'studieretning'" />
   </xsl:call-template>)
  </xsl:template>


  <!-- brukes for å legge på lenke til biblioteksressurser i kurs.xsl -->
  <xsl:template match="emnekode" mode="hent-bibliotekslenke">
    <xsl:variable name="spraak">
      <xsl:choose>
        <xsl:when test="//spraak='engelsk'"><xsl:value-of select="'engelsk'" /></xsl:when>
        <xsl:otherwise><xsl:value-of select="'norsk'" /></xsl:otherwise>
       </xsl:choose>
    </xsl:variable>
    <xsl:variable name="foo" select="normalize-space()"/>
    <xsl:variable name="ub-mapping" select="document($ub-mappingfil,self::node())"/> 

    <xsl:for-each select="$ub-mapping//UB-kategori">
      <xsl:variable name="prefiks">
        <xsl:value-of select="normalize-space(prefiks)"/>
      </xsl:variable>

      <xsl:if test="starts-with($foo,$prefiks) and not(normalize-space($prefiks)='')">
        <!-- sjekker om neste tegn er et tall eller om prefikset er hele emnekoden -->
        <xsl:if test="starts-with(substring-after($foo,$prefiks), '0') or
                      starts-with(substring-after($foo,$prefiks), '1') or
                      starts-with(substring-after($foo,$prefiks), '2') or
                      starts-with(substring-after($foo,$prefiks), '3') or
                      starts-with(substring-after($foo,$prefiks), '4') or
                      starts-with(substring-after($foo,$prefiks), '5') or
                      starts-with(substring-after($foo,$prefiks), '6') or
                      starts-with(substring-after($foo,$prefiks), '7') or
                      starts-with(substring-after($foo,$prefiks), '8') or
                      starts-with(substring-after($foo,$prefiks), '9') or
                      substring-after($foo,$prefiks)=''">
          <xsl:text disable-output-escaping="yes">&lt;br&gt;&lt;br&gt;</xsl:text>    
          <b>
            <xsl:call-template name="oversett-diverse">
              <xsl:with-param name="diversetekst" select="'Universitetsbiblioteket'"/>
            </xsl:call-template>
          </b>
          <xsl:text disable-output-escaping="yes">&lt;br&gt;</xsl:text>    
          <a href="{weblenke/webadresse}">
            <xsl:call-template name="oversett-diverse">
              <xsl:with-param name="diversetekst" select="'Bibliotekssider for dette emnet'"/>
            </xsl:call-template>
          </a> <!-- (<xsl:value-of select="$prefiks"/>) -->
        </xsl:if>
      </xsl:if>
    </xsl:for-each>

  </xsl:template>

  <!-- brukes for å sjekke om det finnes en beskrivelse på motsatt språk (norsk vs. engelsk) -->
  <xsl:template match="emnekode" mode="sjekk-spraakversjon">
    <xsl:variable name="kode" select="normalize-space(.)" />
    <xsl:variable name="spraak">
      <xsl:choose>
        <xsl:when test="$malspraak='engelsk'"><xsl:value-of select="'engelsk'" /></xsl:when>
        <xsl:otherwise><xsl:value-of select="'norsk'" /></xsl:otherwise>
      </xsl:choose>
    </xsl:variable>  
    <xsl:call-template name="sjekk-versjon-paa-motsatt-malspraak">
      <xsl:with-param name="webadresse" select="document($emne-mappingfil)//emne[@emnekode=$kode][not(@spraak=$spraak)]/@url"/>
      <xsl:with-param name="spraak" select="$spraak" />
    </xsl:call-template>
  </xsl:template>

  <!-- kalles av programkode, studieretningskode, emnekode mode="sjekk-spraak-versjon" templatene -->
  <xsl:template name="sjekk-versjon-paa-motsatt-malspraak">
   <xsl:param name="webadresse" />
   <xsl:param name="spraak"/>
   <xsl:if test="not(normalize-space($webadresse)='')">
     <xsl:choose>
       <xsl:when test="$spraak='engelsk'">
         <div class="norsk"><a href="{$webadresse}">Norsk versjon</a></div>         
       </xsl:when>
       <xsl:otherwise>
         <div class="engelsk"><a href="{$webadresse}">English version</a></div>          
       </xsl:otherwise>
     </xsl:choose>
     </xsl:if>
  </xsl:template>

  <xsl:template name="undervisning-i-emnet">

   <xsl:variable name="emnekode">
     <xsl:value-of select="normalize-space(/emne/tittel/emnekode)" />
   </xsl:variable>
   
   <xsl:variable name="kurs" select="document($kurs-mappingfil)" />

   <xsl:if test="$kurs//kurs[@emnekode=$emnekode]"> <!-- det finnes undervisning -->
     <table class="master" cellpadding="5" cellspacing="5" width="100%">
      <tr>
        <td>
          <xsl:call-template name="oversett-diverse">
            <xsl:with-param name="diversetekst" select="'Semestersider:'" />
          </xsl:call-template>
          <ul>
	   <!-- NB! Legg til neste semester ved opplenking av dette semesteret - ikke fjern sjekk!!! -->
           <!--     [eks: not(@aar='2007' and @semester='høst|vår')] -->
           <xsl:for-each select="$kurs//kurs[@emnekode=$emnekode and not(@aar='2008' and @semester='vår')]">              
              <xsl:sort select="@aar" order="descending" />
              <xsl:sort select="@semester" order="ascending" />
              <li><a href="{@url}"><xsl:call-template name="oversett-diverse">
              <xsl:with-param name="diversetekst" select="@semester" />
              </xsl:call-template>&#160;<xsl:value-of select="@aar" /></a></li>
            </xsl:for-each>
            </ul>
        </td>
      </tr>
    </table>
    </xsl:if>
  </xsl:template>
  
</xsl:stylesheet>


