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

  <!-- =============================================================== -->
  <!-- url-tools-v001.xsl -                                            -->
  <!-- opprettet 21.12.04 - even.halvorsen@usit.uio.no                 -->
  <!-- =============================================================== -->
  <!-- =============================================================== -->
  <!-- make-me-a-url-xml:                                              -->
  <!-- Brukes for å lage riktig peker til et xmldokument.              -->
  <!-- Xmlrefranser kan ikke være fullstendige - gir mulighet for      -->
  <!-- transformert xml som ikke gir mening for document() funksjonen. -->
  <!-- Referanser kan ikke peke til mapper - gir kræsj.                -->
  <!-- $base legges til kun hvis $ref er relativ                       -->
  <!-- =============================================================== -->

 <xsl:template name="make-me-a-url-xml">
   <xsl:param name="ref" />
   <xsl:param name="basedoc" /> 

   <xsl:variable name="base"> <!-- base må slutte med slash -->
     <xsl:if test="not(normalize-space($basedoc)='')">
       <xsl:variable name="docname">
         <xsl:call-template name="strip-slash">
           <xsl:with-param name="string" select="$basedoc" />
         </xsl:call-template>
       </xsl:variable>
       <xsl:value-of select="substring-before($basedoc, $docname)" />
     </xsl:if>
   </xsl:variable>

   <xsl:variable name="tmpurl">
     <xsl:choose>
       <xsl:when test="starts-with($ref, 'http://') or 
                       starts-with($ref, 'https://')">
         <!-- returnerer rotrelativ url -->
         <xsl:value-of select="concat('/',substring-after(substring-after($ref, '://'),'/'))" />
       </xsl:when>
       <xsl:when test="starts-with($ref, '/')">
         <xsl:value-of select="$ref" /> <!-- returnerer rotrelativ -->  
       </xsl:when>
       <xsl:otherwise>
         <xsl:choose>
           <xsl:when test="not(normalize-space($base)='')">
             <xsl:value-of select="concat($base,$ref)" /> <!-- returnerer relativ/rotrelativ med ny base -->      
           </xsl:when>
           <xsl:otherwise>
             <xsl:value-of select="$ref" /> <!-- returnerer relativurl -->      
           </xsl:otherwise>
         </xsl:choose>
        </xsl:otherwise>
     </xsl:choose>
   </xsl:variable>

   <xsl:choose>
     <xsl:when test="substring($tmpurl,string-length($tmpurl) - 3, string-length($tmpurl))='.xml'">
       <xsl:value-of select="$tmpurl" /> 
     </xsl:when>
     <xsl:otherwise>
       <xsl:value-of select="false()" /> 
     </xsl:otherwise>
   </xsl:choose>
 </xsl:template>


  <!-- =============================================================== -->
  <!-- make-me-a-url-html:                                             -->
  <!-- Brukes for å lage riktig peker til en htmlresurss som det       -->
  <!-- refererers til fra et annnet dokument                           -->
  <!-- =============================================================== -->
  <xsl:template name="make-me-a-url-html">
    <xsl:param name="basedoc" />
    <xsl:param name="ref" />
    <xsl:param name="base"> <!-- base må slutte med slash -->
     <xsl:if test="not(normalize-space($basedoc)='')">
       <xsl:variable name="docname">
         <xsl:call-template name="strip-slash">
           <xsl:with-param name="string" select="$basedoc" />
         </xsl:call-template>
       </xsl:variable>
       <xsl:value-of select="substring-before($basedoc, $docname)" />
     </xsl:if>
   </xsl:param>
    <xsl:choose>
      <xsl:when test="starts-with($ref, 'http://') or 
                      starts-with($ref, 'https://') or 
                      starts-with($ref, '/') ">
        <xsl:value-of select="$ref" />
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="concat($base, $ref)" />
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

  <!-- =============================================================== -->
  <!-- strip-slash:                                                    -->
  <!-- Fjerner alle slash i en streng                             -->
  <!-- =============================================================== -->
  <xsl:template name="strip-slash">
    <xsl:param name="string" />
    <xsl:choose>
      <xsl:when test="contains($string,'/')">
        <xsl:call-template name="strip-slash">
          <xsl:with-param name="string" select="substring-after($string, '/')" />
        </xsl:call-template>
      </xsl:when>
      <xsl:otherwise>
        <xsl:value-of select="$string" />
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>

</xsl:stylesheet>
