<?xml version='1.0' encoding='UTF-8'?>
<macro name="cycloplegisk_refraktion" version="1.0">
  <resume language="lua">
    out = ''
    if ( getValue('cycloplegisk_refraktion.mangler.odxt') == '' )
    then
      out = out .. 'Cycloplegisk refraktion, o.dxt: ' .. getValue('cycloplegisk_refraktion.sf.odxt') .. ' sf'
      if ( getValue('cycloplegisk_refraktion.cyl.odxt') ~= '' )
      then
        out = out .. ', ' .. getValue('cycloplegisk_refraktion.cyl.odxt') .. ' cyl'
      end
      if ( getValue('cycloplegisk_refraktion.grader.odxt') ~= '' )
      then
        out = out .. ', ' .. getValue('cycloplegisk_refraktion.grader.odxt') .. ' grader\n'
      else
        out = out .. '\n'
      end
    end

    if ( getValue('cycloplegisk_refraktion.mangler.osin') == '' )
    then
      out = out .. 'Cycloplegisk refraktion, o.sin: ' .. getValue('cycloplegisk_refraktion.sf.osin') .. ' sf'
      if ( getValue('cycloplegisk_refraktion.cyl.osin') ~= '' )
      then
        out = out .. ', ' .. getValue('cycloplegisk_refraktion.cyl.osin') .. ' cyl'
      end
      if ( getValue('cycloplegisk_refraktion.grader.osin') ~= '' )
      then
        out = out .. ', ' .. getValue('cycloplegisk_refraktion.grader.osin') .. ' grader\n'
      else
        out = out .. '\n'
      end
    end

    return out
  </resume>
  <queries>
<!--    <query service="pentominos" class="phoroptor" ttl="100000"/> -->
    <query service="pracro" class="missing_eye_odxt" ttl="1000000"/>
    <query service="pracro" class="missing_eye_osin" ttl="1000000"/>
  </queries>
  <maps>
    <map name="missing_eye_odxt_map">
      value = 0
      timestamp = 0
      source = 'pracro'

      if( missing_eye_odxt )
      then
        if( missing_eye_odxt.value and missing_eye_odxt.value == '' )
        then
          value = ''
          timestamp = missing_eye_odxt.timestamp
        else
          value = 'mangler'
          timestamp = missing_eye_odxt.timestamp
        end
      end
      return value, timestamp, source
    </map>
    <map name="missing_eye_osin_map">
      value = 0
      timestamp = 0
      source = 'pracro'
      
      if( missing_eye_osin )
      then
        if( missing_eye_osin.value and missing_eye_osin.value == '' )
        then
          value = ''
          timestamp = missing_eye_osin.timestamp
        else
          value = 'mangler'
          timestamp = missing_eye_osin.timestamp
        end
      end
      return value, timestamp, source
    </map>
    <map name="phoroptor.osin.sph">
      -- Returning 0, 0 invalidates the result
      value = 0
      timestamp = 0
      source = 0

      if(phoroptor and phoroptor.osin and phoroptor.osin.sph_n and phoroptor.osin.sph_n.value and phoroptor.osin.sph_n.timestamp)
      then
        value = phoroptor.osin.sph_n.value
        -- convert . to ,
        value = string.gsub(value, '[.]', ',')
        timestamp = phoroptor.osin.sph_n.timestamp
        source = phoroptor.osin.sph_n.source
      end
      return value, timestamp, source
    </map>
    <map name="phoroptor.osin.cyl">
      -- Returning 0, 0 invalidates the result
      value = 0
      timestamp = 0
      source = 0

      if(phoroptor and phoroptor.osin and phoroptor.osin.cyl and phoroptor.osin.cyl.value and phoroptor.osin.cyl.timestamp)
      then
        value = phoroptor.osin.cyl.value
        -- convert . to ,
        value = string.gsub(value, '[.]', ',')
        timestamp = phoroptor.osin.cyl.timestamp
        source = phoroptor.osin.cyl.source
      end
      return value, timestamp, source
    </map>
    <map name="phoroptor.osin.axis">
      -- Returning 0, 0 invalidates the result
      value = 0
      timestamp = 0
      source = 0

      if(phoroptor and phoroptor.osin and phoroptor.osin.axis and phoroptor.osin.axis.value and phoroptor.osin.axis.timestamp)
      then
        value = phoroptor.osin.axis.value
        -- convert . to ,
        value = string.gsub(value, '[.]', ',')
        timestamp = phoroptor.osin.axis.timestamp
        source = phoroptor.osin.axis.source
      end
      return value, timestamp, source
    </map>
    <map name="phoroptor.odxt.sph">
      -- Returning 0, 0 invalidates the result
      value = 0
      timestamp = 0
      source = 0

      if(phoroptor and phoroptor.odxt and phoroptor.odxt.sph_n and phoroptor.odxt.sph_n.value and phoroptor.odxt.sph_n.timestamp)
      then
        value = phoroptor.odxt.sph_n.value
        -- convert . to ,
        value = string.gsub(value, '[.]', ',')
        timestamp = phoroptor.odxt.sph_n.timestamp
        source = phoroptor.odxt.sph_n.source
      end
      return value, timestamp, source
    </map>
    <map name="phoroptor.odxt.cyl">
      -- Returning 0, 0 invalidates the result
      value = 0
      timestamp = 0
      source = 0

      if(phoroptor and phoroptor.odxt and phoroptor.odxt.cyl and phoroptor.odxt.cyl.value and phoroptor.odxt.cyl.timestamp)
      then
        value = phoroptor.odxt.cyl.value
        -- convert . to ,
        value = string.gsub(value, '[.]', ',')
        timestamp = phoroptor.odxt.cyl.timestamp
        source = phoroptor.odxt.cyl.source
      end
      return value, timestamp, source
    </map>
    <map name="phoroptor.odxt.axis">
      -- Returning 0, 0 invalidates the result
      value = 0
      timestamp = 0
      source = 0

      if(phoroptor and phoroptor.odxt and phoroptor.odxt.axis and phoroptor.odxt.axis.value and phoroptor.odxt.axis.timestamp)
      then
        value = phoroptor.odxt.axis.value
        -- convert . to ,
        value = string.gsub(value, '[.]', ',')
        timestamp = phoroptor.odxt.axis.timestamp
        source = phoroptor.odxt.axis.source
      end
      return value, timestamp, source
    </map>
  </maps>
  <scripts>
     <script language="lua" name="lt20gt-25">
      if(value == '')
      then
        return false
      end

      value = string.gsub(value, ',', '.')
      if(tonumber(value) &gt;= -25 and tonumber(value) &lt;= 20)
      then
        return true
      else
        return false
      end
    </script>
    <script language="lua" name="lt10gt-15">
      if(value == '')
      then
        return true
      end

      value = string.gsub(value, ',', '.')
      if(tonumber(value) &gt;= -15 and tonumber(value) &lt;= 10)
      then
        return true
      else
        return false
      end
    </script>
    <script language="lua" name="lt359gt0">
      if(value == '')
      then
        return true
      end

      value = string.gsub(value, ',', '.')
      if(tonumber(value) &gt;= 0 and tonumber(value) &lt;= 359)
      then
        return true
      else
        return false
      end
    </script>
    <script language="lua" name="right_eye">
      if ( value == 'mangler' )
      then
        disable('right_eye_frame')
      else
        enable('right_eye_frame')
      end
      return true
    </script>
    <script language="lua" name="left_eye">
      if ( value == 'mangler' )
      then
        disable('left_eye_frame')
      else
        enable('left_eye_frame')
      end
      return true
    </script>
  </scripts>
  <widgets caption="Cycloplegisk refraktion"
          layout="vbox">

    <frame layout="hbox">

      <!-- o.dxt -->
      <frame layout="vbox">
        <checkbox caption="Der er ikke målt på o.dxt"
		  name="cycloplegisk_refraktion.mangler.odxt" script="right_eye"
		  map="missing_eye_odxt_map"
		  truevalue="mangler" falsevalue="" value=""/>
	<frame name="right_eye_frame" caption="o.dxt" layout="hbox">
	  
	  <frame layout="vbox">
	    <label caption="Sf:"/>
	    <lineedit name="cycloplegisk_refraktion.sf.odxt" map="phoroptor.odxt.sph"
		      regexp="[+-]{0,1}\d{1,2},\d{2}" script="lt20gt-25" value=""/>
	  </frame>
	  <frame layout="vbox">
	    <label caption="Cyl:"/>
	    <lineedit name="cycloplegisk_refraktion.cyl.odxt" map="phoroptor.odxt.cyl"
		      regexp="|[+-]{0,1}\d{1,2},\d{2}" script="lt10gt-15" value=""/>
	  </frame>
	  <frame layout="vbox">
	    <label caption="Grader:"/>
	    <lineedit name="cycloplegisk_refraktion.grader.odxt" map="phoroptor.odxt.axis"
		      regexp="|[\d]+" script="lt359gt0" value=""/>
	  </frame>
	</frame>
      </frame>
      
      <!-- o.sin -->
      <frame layout="vbox">
	<checkbox caption="Der er ikke målt på o.sin"
		  name="cycloplegisk_refraktion.mangler.osin" script="left_eye"
		  map="missing_eye_osin_map"
		  truevalue="mangler" falsevalue="" value=""/>
	<frame name="left_eye_frame" caption="o.sin" layout="hbox">
	  
	  <frame layout="vbox">
	    <label caption="Sf:"/>
	    <lineedit name="cycloplegisk_refraktion.sf.osin" map="phoroptor.osin.sph"
		      regexp="[+-]{0,1}\d{1,2},\d{2}" script="lt20gt-25" value=""/>
	  </frame>
	  <frame layout="vbox">
	    <label caption="Cyl:"/>
	    <lineedit name="cycloplegisk_refraktion.cyl.osin" map="phoroptor.osin.cyl"
		      regexp="|[+-]{0,1}\d{1,2},\d{2}" script="lt10gt-15" value=""/>
	  </frame>
	  <frame layout="vbox">
	    <label caption="Grader:"/>
	    <lineedit name="cycloplegisk_refraktion.grader.osin" map="phoroptor.osin.axis"
		      regexp="|[\d]+" script="lt359gt0" value=""/>
	  </frame>
	</frame>
      </frame>

    </frame>
    
    <!-- Knapper -->
    <frame layout="hbox">
      <spacer />
      <button caption="Gem" action="commit"/>
    </frame>
  </widgets>
</macro>