<?xml version="1.0" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    version="1.0" xmlns:xdif="http://www.wa5znu.org/2006/04/xdif/"
    xmlns:math="http://exslt.org/math" xmlns:exslt="http://exslt.org/common"
    xmlns:fybo="http://www.azqrp.org/azqrp/FYBO2005.htm#rules" >

  <xsl:output method="text" />

  <!-- Rules table for this contest -->
  <xsl:variable name="rules" select="exslt:node-set(document('')/xsl:stylesheet/fybo:rules)" />

  <!-- States and Provinces count only in the US and Canada -->
  <xsl:key 
      name="statesOrProvinces" 
      match="xdif:qso/xdif:om/xdif:location[xdif:state and (xdif:dxcc = 291 or xdif:dxcc = 1)]" use="xdif:state" />
  <xsl:variable 
      name="stateProvinceList" 
      select="exslt:node-set(/xdif:log/xdif:qsos/xdif:qso/xdif:om/xdif:location/xdif:state[generate-id(..)=generate-id(key('statesOrProvinces', .))])" />

  <!-- DXCC (Other than US or Canada) -->
  <xsl:key 
      name="dxccs" 
      match="xdif:qso/xdif:om/xdif:location[xdif:dxcc != /xdif:log/xdif:my/xdif:location/xdif:dxcc]" use="xdif:dxcc" />
  <xsl:variable
      name="dxcclist" 
      select="exslt:node-set(/xdif:log/xdif:qsos/xdif:qso/xdif:om/xdif:location/xdif:dxcc[generate-id(..)=generate-id(key('dxccs', .))])" />

  <!-- QRPp bonus is based on maximum power less than 1W -->
  <xsl:variable name="maxpower" select="math:max(/xdif:log/xdif:qsos/xdif:qso/xdif:my/xdif:equipment/xdif:power)" />

  <!-- Battery Power bonus is based on all battery power.  Thanks to KD6WYK for the boolean expression -->
  <xsl:variable 
      name="batterypowered" 
      select="count(/xdif:log/xdif:qsos/xdif:qso[xdif:my/xdif:equipment/xdif:powersource/xdif:battery/text()='true']) = count(/xdif:log/xdif:qsos/xdif:qso)" />

  <!-- Temperature bonus is based on minimum temperature -->
  <xsl:variable 
      name="mintemperature" 
      select="math:min($rules/fybo:defaults/fybo:temperature | /xdif:log/xdif:qsos/xdif:qso/xdif:my/fybo:temperature)"  />
  
  <xsl:variable name="statecount" select="count($stateProvinceList)" />
  <xsl:variable name="dxcccount" select="count($dxcclist)" />
  <xsl:variable name="spcs" select="$statecount + $dxcccount" />
  <xsl:variable name="qrppmultiplier" 
		select="$rules/fybo:multipliers/fybo:power/fybo:multiplier[(@maxExclusive and ($maxpower &lt; @maxExclusive)) or (@maxInclusive and ($maxpower &lt;= @maxInclusive))]" />
  <xsl:variable name="tempmulti" 
		select="$rules/fybo:multipliers/fybo:temperature/fybo:multiplier[(@maxExclusive and ($mintemperature &lt; @maxExclusive)) or (@maxInclusive and ($mintemperature &lt;= @maxInclusive)) or (@minInclusive and ($mintemperature &lt;= $minInclusive))]" />
  <xsl:variable name="fieldlocation" select="/xdif:log/xdif:my/xdif:location/fybo:field" />
  <xsl:variable name="batterypoweredmulti" select="$rules/fybo:multipliers/fybo:batterypowered/fybo:multiplier[@value=string($batterypowered)]" />
  <xsl:variable name="fieldlocationmulti" select="$rules/fybo:multipliers/fybo:fieldlocation/fybo:multiplier[@value=string($fieldlocation)]" />
  <xsl:variable name="nq7rpContacts" select="count(/xdif:log/xdif:qsos/xdif:qso[xdif:om/xdif:control/xdif:callsign='nq7rp'])" />
  <xsl:variable name="nq7rpbonus" select="$nq7rpContacts * $rules/fybo:bonuses/fybo:nq7rp/fybo:value" />

  <!-- This template copies the input document, applyinh the exceptions below to the entire document -->
  <xsl:template match="@*|node()" >
    <xsl:apply-templates select="*"/>
  </xsl:template>


  <xsl:template match="xdif:qsos" >
    <xsl:variable name="qsocount" select="count(xdif:qso)" />

    <xsl:text>Min temperature: </xsl:text>
    <xsl:copy-of select="$mintemperature" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>Temperature Multiplier: </xsl:text>
    <xsl:value-of select="$tempmulti" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>Max Power: </xsl:text>
    <xsl:value-of select="$maxpower" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>Battery Powered: </xsl:text>
    <xsl:value-of select="$batterypowered" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>Battery Powered Multiplier: </xsl:text>
    <xsl:value-of select="$batterypoweredmulti" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>Field Location: </xsl:text>
    <xsl:value-of select="$fieldlocation" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>Field Location Multiplier: </xsl:text>
    <xsl:value-of select="$fieldlocationmulti" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>QRPp Multiplier: </xsl:text>
    <xsl:value-of select="$qrppmultiplier" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>QSOs: </xsl:text>
    <xsl:value-of select="$qsocount" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>State/Province Count: </xsl:text>
    <xsl:value-of select="$statecount" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>DXCC Count: </xsl:text>
    <xsl:value-of select="$dxcccount" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>SPCs: </xsl:text>
    <xsl:value-of select="$spcs" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>NQ7RP Contacts: </xsl:text>
    <xsl:value-of select="$nq7rpContacts" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>NQ7RP Bonus: </xsl:text>
    <xsl:value-of select="$nq7rpbonus" />
    <xsl:text>&#xa;</xsl:text>
    <xsl:text>[(QSOs x SPCs)] x Temp Multi (x Field) (x Batterypowered) (x QRPp) + (NQ7RP Bonus Points) = </xsl:text>
    <xsl:value-of select="concat('(', $qsocount, '*', $spcs, ')*', $tempmulti, '*', $fieldlocationmulti ,'*', $batterypoweredmulti ,'*', $qrppmultiplier ,'+', $nq7rpbonus, '=')" />
    <xsl:value-of select="($qsocount * $spcs) * $tempmulti * $fieldlocationmulti * $batterypoweredmulti * $qrppmultiplier + $nq7rpbonus" />
    <xsl:text>&#xa;</xsl:text>
  </xsl:template>

  <!-- Rules for the FYBO contest -->
  <rules xmlns="http://www.azqrp.org/azqrp/FYBO2005.htm#rules">
    <multipliers>
      <power>
	<multiplier maxExclusive="1">2</multiplier>
	<multiplier maxInclusive="5">1</multiplier>
	<multiplier maxExclusive="1500">0</multiplier>
      </power>
      <temperature>
	<multiplier maxInclusive="20">6</multiplier>
	<multiplier maxInclusive="30">5</multiplier>
	<multiplier maxInclusive="40">4</multiplier>
	<multiplier maxInclusive="50">3</multiplier>
	<multiplier maxInclusive="50">3</multiplier>
	<multiplier maxInclusive="64">2</multiplier>
	<multiplier maxInclusive="999" >1</multiplier>
      </temperature>
      <batterypowered>
	<multiplier value="false">1</multiplier>
	<multiplier value="true">2</multiplier>
      </batterypowered>
      <fieldlocation>
	<multiplier value="false">1</multiplier>
	<multiplier value="true">4</multiplier>
      </fieldlocation>
    </multipliers>
    <bonuses>
      <nq7rp>
	<value>10000</value>
      </nq7rp>
    </bonuses>
    <defaults>
      <temperature>68</temperature>
    </defaults>
  </rules>
  
</xsl:stylesheet>



