Modul:Infoboks småplanet

local p = {}

local wiki = 
{
	langcode = mw.language.getContentLanguage().code
}

local getArgs = require('Modul:Arguments').getArgs
local getValue = require('Modul:Sandkasse/Cocu/Wikidata').getValue
local getRawValue = require('Modul:Sandkasse/Cocu/Wikidata').getRawValue
local getDateValue = require('Modul:Sandkasse/Cocu/Wikidata').getDateValue
local Pgname = require('Modul:String').replace

local S1 = '<table class="infoboks"><tr class="hode overskrift"><th colspan="4">'
local S2 = '</th></tr>'
local I1 = '<tr class="bilde" valign="top"><td colspan="4" class="sentrert">'
local I2 = '</td></tr>'
local R1 = '<tr class="rad" valign="top"><th colspan="2" width="">'
local R2 = '</th><td colspan="2" class="">'
local R3 = '</td></tr>'
local DR1 = '<tr class="rad" valign="top"><td colspan="4" class="center">'
local DR2 = '</td></tr>'
local H1 = '<tr class="overskrift" valign="top"><td colspan="4">'
local H2 = '</td></tr>'

function dump( out )
	if type( out ) == 'table' then
		local s = '{ '
		for k,v in pairs( out ) do
				if type( k ) ~= 'number' then k = '"'..k..'"' end
				s = s .. '['..k..'] = ' .. dump( v ) .. ','
		end
		return s .. '} '
	else
		return tostring( out )
	end
end

-- SETTER SAMMEN SEKSJONENE
function p.infoboks(frame)
	if not mw.wikibase then
		return ""
	end
	local artikkel = mw.wikibase.getEntityObject()
	if not artikkel then
		return ""
	end
	local claims = artikkel.claims
	if not claims then
		return ""
	end

	return p._startSection(frame)
	.. p._imageSection(frame)
	.. p._discoverySection(frame)
	.. p._orbitSection( frame )
	.. p._physicsSection( frame )
	.. p._atmosphereSection( frame )
	.. p._sourceSection( frame )
	.. p._nextSection( frame )
	.. p._endSection( frame )
end

-- DEFINERER DE ULIKE SEKSJONENE, HVORDAN DE SER UT OG HVORDAN DE FÅR INFORMASJON
	-- STARTSEKSJONEN
	function p._startSection( frame )
		if frame.args['navn'] ~= "" then PgName = frame.args['navn']
			else PgName = Pgname({args = {[1] = mw.title.getCurrentTitle().baseText, [2] = '%s%(.*%)', [3] = '', ['plain'] = 'false'}})
		end
		
		return S1 .. PgName .. S2
	end
	
	-- BILDESEKSJON
		-- FINNER BILDE FRA WIKIDATA OG PLASSERER DET I EN EGEN BILDERAD
		function p._imageSection(frame)
			local p18 = mw.wikibase.getEntityObject().claims.P18
			if not p18 then
				if mw.text.trim(frame.args["bilde"]) == "" then
					return "[[Kategori:Artikler i astronomiprosjektet som trenger bilde]]"
				end
			end
			if mw.text.trim(frame.args["bilde"]) ~= "" then
				ImageFile = mw.text.trim(frame.args["bilde"])
			else
				ImageFile = p18[1].mainsnak.datavalue.value
			end
			
			if mw.text.trim(frame.args["bildetekst"]) ~= "" then
				if mw.text.trim(frame.args["bilde"]) ~= "" then
					ImageText = '<br />' .. mw.text.trim(frame.args["bildetekst"])
				else
					ImageText = ""
				end
			else
				ImageText = ""
			end
			if mw.text.trim(frame.args["bildebredde"]) ~= "" then
				ImageWidth = '|' .. mw.text.trim(frame.args["bildebredde"])
			else
				ImageWidth = ""
			end

			return I1 .. '[[Fil:' .. ImageFile .. '|frameless' .. ImageWidth .. ']]' .. ImageText .. I2
		end

	-- OPPDAGELSESSEKSJONEN
		-- OPPDAGER(E)
		function p._discoverer(frame)
			local discoverer = frame.args["oppdager"]
			local p61 = mw.wikibase.getEntityObject().claims.P61
			if discoverer ~= "" and discoverer ~= nil then
				argDiscoverer = discoverer
			elseif p61 then
				if not mw.wikibase.label('Q' .. p61[1].mainsnak.datavalue.value["numeric-id"]) then
					return ""
				else
					argDiscoverer = getValue({args = {[1] = 'P61', [2] = 'hent_wikidata'}})
				end
			else return ""
			end
			
			return R1 .. 'Oppdaget av' .. R2 .. argDiscoverer .. R3
		end

		-- OPPDAGELSESSTIDSPUNKT
		function p._discovered(frame)
			local formatISOdate = require('Modul:ISOtilNorskdato').formatIsoDate
			local p575 = mw.wikibase.getEntityObject().claims.P575
			if not p575 then
				if mw.text.trim(frame.args["oppdaget"]) == "" then
					return ""
				end
			end

			local discovered_value = mw.wikibase.getEntityObject().claims.P575[1].mainsnak.datavalue.value["time"]
			local discovered_date = string.sub(discovered_value,2,11)
			local year_cat = string.sub(discovered_date,1,4)
			local category = '[[Kategori:Himmellegemer oppdaget i ' .. year_cat .. ']]'
			
			if mw.text.trim(frame.args["oppdaget"]) ~= "" then
				argDiscovered = formatISOdate(mw.text.trim(frame.args["oppdaget"]))
			else
				argDiscovered = formatISOdate(discovered_date)
			end
			
			return R1 .. 'Oppdaget' .. R2 .. argDiscovered .. R3 .. category
		end

		-- FUNNSTED
		function p._location(frame)
			local p65 = mw.wikibase.getEntityObject().claims.P65
			if p65 then
				if not mw.wikibase.label('Q' .. p65[1].mainsnak.datavalue.value["numeric-id"]) then
					if mw.text.trim(frame.args["funnsted"]) == "" then
						return ""
					end 
				end
			elseif not p65 then
				if mw.text.trim(frame.args["funnsted"]) == "" then
					return ""
				end
			end
		
			if mw.text.trim(frame.args["funnsted"]) ~= "" then
				return R1 .. 'Oppdaget fra' .. R2 .. mw.text.trim(frame.args["funnsted"]) ..R3
			else
				return R1 .. 'Oppdaget fra' .. R2 .. getValue({args = {[1] = 'P65', [2] = 'hent_wikidata'}}) .. R3
			end
		end

		-- SMÅPLANETNAVN (KAN IKKE HENTES FRA WIKIDATA)
		function p._minorname(frame)
			if mw.text.trim(frame.args["småplanetnavn"]) == "" then
				return ""
			else
				return R1 .. '[[Småplanetnavn]]' .. R2 .. mw.text.trim(frame.args["småplanetnavn"]) .. R3
			end
		end
		
		-- OVERGANGSNAVN
		function p._tempname(frame)
			local p490 = mw.wikibase.getEntityObject().claims.P490
			if not p490 then
				if mw.text.trim(frame.args["overgangsnavn"]) == "" then
					return ""
				end
			end

			if mw.text.trim(frame.args["overgangsnavn"]) ~= "" then
				return R1 .. 'Overgangsnavn' .. R2 .. mw.text.trim(frame.args["overgangsnavn"]) .. R3
			else
				return R1 .. 'Overgangsnavn' .. R2 .. getValue({args = {[1] = 'P490', [2] = 'hent_wikidata'}}) .. R3
			end
		end

		-- OPPKALT
		function p._named(frame)
			local p138 = mw.wikibase.getEntityObject().claims.P138
			if not p138 then
				if mw.text.trim(frame.args["oppkalt"]) == "" then
					return ""
				end
			end

			if mw.text.trim(frame.args["oppkalt"]) ~= "" then
				return R1 .. 'Oppkalt etter' .. R2 .. mw.text.trim(frame.args["oppkalt"]) .. R3
			else
				return R1 .. 'Oppkalt etter' .. R2 .. getValue({args = {[1] = 'P138', [2] = 'hent_wikidata'}}) .. R3
			end
		end
	
		-- OBJEKTTYPE
		function p._objtype(frame)
			local p31= mw.wikibase.getEntityObject().claims.P31
			if not p31 then
				if mw.text.trim(frame.args["objekttype"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["objekttype"]) ~= "" then
				return R1 .. 'Objekttype' .. R2 .. mw.text.trim(frame.args["objekttype"]) .. R3
			else
				return R1 .. 'Objekttype' .. R2 .. getValue({args = {[1] = 'P31', [2] = 'hent_wikidata'}}) .. R3
			end
		end

		-- GRUPPETILHØRIGHET
		function p._group(frame)
			local p196= mw.wikibase.getEntityObject().claims.P196
			if not p196 then
				if mw.text.trim(frame.args["gruppe"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["gruppe"]) ~= "" then
				argGroup = mw.text.trim(frame.args["gruppe"])
			else
				argGroup = getValue({args = {[1] = 'P196', [2] = 'hent_wikidata'}})
			end

			if mw.text.trim(frame.args["familie"]) ~= "" then
				return R1 .. '[[Smålegemer i solsystemet|Gruppe]]<br />&nbsp;&nbsp;&nbsp;&nbsp;[[Asteroidefamilie|Familie]]' .. R2 .. 
				argGroup .. '<br />' .. mw.text.trim(frame.args["familie"]) .. R3
			elseif mw.wikibase.getEntityObject().claims.P744 then
				return R1 .. '[[Smålegemer i solsystemet|Gruppe]]<br />&nbsp;&nbsp;&nbsp;&nbsp;[[Asteroidefamilie|Familie]]' .. R2 .. 
				argGroup .. '<br />' .. getValue({args = {[1] = "P744", [2] = 'hent_wikidata'}}) .. R3
			else
				return R1 .. '[[Smålegemer i solsystemet|Gruppe]]' .. R2 .. argGroup .. R3
			end
		end
		
			-- SETTER SAMMEN INFORMASJONEN I OPPDAGELSESSEKSJONEN
			function p._discoverySection( frame )

				-- ANGIR OM SEKSJONEN SKAL VISES, OG HVILKEN OVERSKRIFT SOM I TILFELLE SKAL VISES
				if p._discoverer(frame) ~= "" or p._discovered(frame) ~= "" or p._location(frame) ~= "" or p._tempname(frame) ~= "" or
				p._named(frame) ~= "" or p._objtype(frame) ~= "" or p._group(frame) then
					HeaderDiscovery = H1 .. 'Oppdagelse' .. mw.text.trim(frame.args["ref_oppdagelse"]) .. H2
				else
					return ""
				end
				
				-- ANGIR REKKEFØLGEN I OPPDAGELSESSEKSJONEN
				local DiscoverySection = 
					HeaderDiscovery
					.. p._discoverer(frame)
					.. p._discovered(frame)
					.. p._location(frame)
					.. p._minorname(frame)
					.. p._tempname(frame)
					.. p._named(frame)
					.. p._objtype(frame)
					.. p._group(frame)

				return DiscoverySection
			end
	
	-- BANESEKSJONEN
		-- MODERLEGEME
		function p._parent( frame )
			local p397= mw.wikibase.getEntityObject().claims.P397
			if not p397 then
				if mw.text.trim(frame.args["moderlegeme"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["moderlegeme"]) ~= "" then
				return R1 .. 'Moderlegeme' .. R2 .. mw.text.trim(frame.args["moderlegeme"]) .. R3
			else
				return R1 .. 'Moderlegeme' .. R2 .. getValue({args = {[1] = 'P397', [2] = 'hent_wikidata'}}) .. R3
			end
		end
		
		-- SATELLITTER
		function p._satellites( frame )
			local p398= mw.wikibase.getEntityObject().claims.P398
			if not p398 then
				if mw.text.trim(frame.args["satellitter"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["satellitter"]) ~= "" then
				return R1 .. '[[Naturlig satellitt|Satellitter]]' .. R2 .. mw.text.trim(frame.args["satellitter"]) .. R3
			else
				return R1 .. '[[Naturlig satellitt|Satellitter]]' .. R2 .. getValue({args = {[1] = 'P398', [2] = 'hent_wikidata'}}) .. R3
			end
		end
		
		-- AVSTAND
		function p._distance( frame )
			if mw.text.trim(frame.args["avstandkm"]) and mw.text.trim(frame.args["avstandae"]) == "" then
				return ""
			end
			
			local kilometer = tonumber(149597870.691)
			if mw.text.trim(frame.args["avstandkm"]) ~= "" then
				argDistKM = mw.text.trim(frame.args["avstandkm"])
				argDistAE = tonumber(argDistKm / kilometer)
				argDist = argDistKM .. '&nbsp;[[Kilometer|km]]<br />' .. argDistAE .. '&nbsp;[[Astronomisk enhet|AE]]'
			elseif mw.text.trim(frame.args["avstandae"]) ~= "" then
				argDistAE = mw.text.trim(frame.args["avstandae"])
				argDistKM = tonumber(argDistAE * kilometer)
				argDist = argDistAE .. '&nbsp;[[Astronomisk enhet|AE]]<br />' .. argDistKM .. '&nbsp;[[Kilometer|km]]'
			end

			if mw.text.trim(frame.args["moderlegeme"]) then
				DistText = 'Avstand fra ' .. mw.text.trim(frame.args["moderlegeme"])
			elseif mw.wikibase.getEntityObject().claims.P397 then
				DistText = 'Avstand fra ' .. getValue({args = {[1] = 'P397', [2] = 'hent_wikidata'}})
			else
				DistText = 'Avstand fra [[solen]'
			end
			
			return R1 .. DistText .. R2 .. argDist .. R3
		end
		
		-- APHEL
		function p._aphel( frame )
			local p2243= mw.wikibase.getEntityObject().claims.P2243
			if not p2243 then
				if mw.text.trim(frame.args["aphel"]) == "" then
					return ""
				end
			end
			
			local p2243 = getValue({args = {[1] = 'P2243', [2] = 'hent_wikidata'}})
			
			if string.sub(p2243,-18,-1) == ' astronomisk enhet' then
				p2243 = string.sub(p2243,1,-19) .. '&nbsp;AE'
			else
				p2243 = p2243
			end
			
			if mw.text.trim(frame.args["aphel"]) ~= "" then
				return R1 .. '[[Aphelium]]' .. R2 .. mw.text.trim(frame.args["aphel"]) .. R3
			else
				return R1 .. '[[Aphelium]]' .. R2 .. p2243 .. R3
			end
		end
		
		-- PERIHEL
		function p._perihel( frame )
			local p2244= mw.wikibase.getEntityObject().claims.P2244
			if not p2244 then
				if mw.text.trim(frame.args["perihel"]) == "" then
					return ""
				end
			end
			
			local p2244 = getValue({args = {[1] = 'P2244', [2] = 'hent_wikidata'}})
			
			if string.sub(p2244,-18,-1) == ' astronomisk enhet' then
				p2244 = string.sub(p2244,1,-19) .. '&nbsp;AE'
			else
				p2244 = p2244
			end
			
			if mw.text.trim(frame.args["perihel"]) ~= "" then
				return R1 .. '[[Perihelium]]' .. R2 .. mw.text.trim(frame.args["perihel"]) .. R3
			else
				return R1 .. '[[Perihelium]]' .. R2 .. p2244 .. R3
			end
		end
		
		-- STORE HALVAKSE
		function p._semimajoraxis( frame )
			local p2233= mw.wikibase.getEntityObject().claims.P2233
			if not p2233 then
				if mw.text.trim(frame.args["store halvakse"]) == "" then
					return ""
				end
			end
			
			local p2233 = getValue({args = {[1] = 'P2233', [2] = 'hent_wikidata'}})
			
			if string.sub(p2233,-18,-1) == ' astronomisk enhet' then
				p2233 = string.sub(p2233,1,-19) .. '&nbsp;AE'
			else
				p2233 = p2233
			end
			
			if mw.text.trim(frame.args["store halvakse"]) ~= "" then
				return R1 .. '[[Store halvakse]]' .. R2 .. mw.text.trim(frame.args["store halvakse"]) .. R3
			else
				return R1 .. '[[Store halvakse]]' .. R2 .. p2233 .. R3
			end
		end
		
		-- EKSENTRISITET
		function p._eccentricity( frame )
			local p1096= mw.wikibase.getEntityObject().claims.P1096
			if not p1096 then
				if mw.text.trim(frame.args["eksentrisitet"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["eksentrisitet"]) ~= "" then
				return R1 .. '[[Baneeksentrisitet|Eksentrisitet]]' .. R2 .. mw.text.trim(frame.args["eksentrisitet"]) ..R3
			else
				return R1 .. '[[Baneeksentrisitet|Eksentrisitet]]' .. R2 .. getValue({args = {[1] = 'P1096', [2] = 'hent_wikidata'}}) .. R3
			end
		end
		
		-- OMLØPSTID
		function p._orbitalperiod( frame )
			local p2146= mw.wikibase.getEntityObject().claims.P2146
			if not p2146 then
				if mw.text.trim(frame.args["omløpstid"]) == "" then
					return ""
				end
			end
			
			local p2146 = getValue({args = {[1] = 'P2146', [2] = 'hent_wikidata'}})
			
			if string.sub(p2146,-4,-1) == ' dag' then
				p2146 = string.sub(p2146,1,-5) .. '&nbsp;dager'
			else
				p2146 = p2146
			end
			
			if mw.text.trim(frame.args["omløpstid"]) ~= "" then
				return R1 .. '[[Omløpstid]]' .. R2 .. mw.text.trim(frame.args["omløpstid"]) .. R3
			else
				return R1 .. '[[Omløpstid]]' .. R2 .. p2146 .. R3
			end
		end
		
		-- DRAKONISK
		function p._draconiticperiod( frame )
			
			if mw.text.trim(frame.args["omløpstid"]) ~= "" then
				if mw.text.trim(frame.args["drakonisk"]) ~= "" then
					return R1 .. '&nbsp;&nbsp;([[Omløpstid|drakonisk]])' .. R2 .. mw.text.trim(frame.args["drakonisk"]) ..R3
				else
					return ""
				end
			else
				return ""
			end
		end
		
		-- TROPISK
		function p._tropicalperiod( frame )
			
			if mw.text.trim(frame.args["omløpstid"]) ~= "" then
				if mw.text.trim(frame.args["tropisk"]) ~= "" then
					return R1 .. '&nbsp;&nbsp;([[Omløpstid|tropisk]])' .. R2 .. mw.text.trim(frame.args["tropisk"]) .. R3
				else
					return ""
				end
			else
				return ""
			end
		end
		
		-- SYNODISK
		function p._synodicalperiod( frame )
			
			if mw.text.trim(frame.args["synodisk"]) ~= "" then
				return R1 .. '([[Omløpstid|Synodisk omløpstid]])' .. R2 .. mw.text.trim(frame.args["synodisk"]) .. R3
			else
				return ""
			end
		end
		
		-- SIDERISK OMLØP
		function p._siderealperiod( frame )
			
			if mw.text.trim(frame.args["siderisk"]) ~= "" then
				return R1 .. '([[Omløpstid|Siderisk omløpstid]])' .. R2 .. mw.text.trim(frame.args["siderisk"]) .. R3
			else
				return ""
			end
		end
		
		-- GJENNOMSNITTSFART
		function p._avgspeed( frame )
			
			if mw.text.trim(frame.args["gjennomsnittsfart"]) ~= "" then
				argAvgSpeed = mw.text.trim(frame.args["gjennomsnittsfart"])
			else
				return ""
			end
			if mw.text.trim(frame.args["gjennomsnittsfart_enhet"]) ~= "" then
				argAvgSpeed = argAvgSpeed .. '&nbsp;' .. mw.text.trim(frame.args["gjennomsnittsfart_enhet"])
			else
				argAvgSpeed = argAvgSpeed .. '&nbsp;km/s'
			end
			
			return R1 .. 'Gjennomsnittlig banefart' .. R2 .. argAvgSpeed .. R3
		end
		
		-- ANOMALISTISK
		function p._anomaly( frame )
			local p2325 = mw.wikibase.getEntityObject().claims.P2325
			if not p2325 then
				if mw.text.trim(frame.args["anomalistisk"]) == "" then
					return ""
				end
			end
			
			local p2325 = getValue({args = {[1] = 'P2325', [2] = 'hent_wikidata'}})
			
			if string.sub(p2325,-5,-1) == ' grad' then
				p2325 = string.sub(p2325,1,-6) .. '&deg;'
			else
				p2325 = p2325
			end
			
			--if frame.args["midlere_anomali"] ~= nil and mw.text.trim(frame.args["midlere_anomali"]) ~= "" then
			if mw.text.trim(frame.args["anomalistisk"]) ~= "" then
				return R1 .. '[[Midlere anomali|Midlere&nbsp;anomali]]' .. R2 .. mw.text.trim(frame.args["anomalistisk"]) .. '&deg;' .. R3
			else
				return R1 .. '[[Midlere anomali|Midlere&nbsp;anomali]]' .. R2 .. p2325 .. R3
			end
		end
		
		-- INKLINASJON
		function p._inclination( frame )
			local p2045 = mw.wikibase.getEntityObject().claims.P2045
			if not p2045 then
				if mw.text.trim(frame.args["inklinasjon"]) == "" then
					return ""
				end
			end
			
			local p2045 = getValue({args = {[1] = 'P2045', [2] = 'hent_wikidata'}})
			
			if string.sub(p2045,-5,-1) == ' grad' then
				p2045 = string.sub(p2045,1,-6) .. '&deg;'
			else
				p2045 = p2045
			end
			
			if mw.text.trim(frame.args["inklinasjon"]) ~= "" then
				return R1 .. '[[Inklinasjon]]' .. R2 .. mw.text.trim(frame.args["inklinasjon"]) .. '&deg;' .. R3
			else
				return R1 .. '[[Inklinasjon]]' .. R2 .. p2045 .. R3
			end
		end
	
		-- BANEPLANKNUTE
		function p._ascendingnode( frame )
			local p2213 = mw.wikibase.getEntityObject().claims.P2213
			if not p2213 then
				if mw.text.trim(frame.args["baneplanknute"]) == "" then
					return ""
				end
			end
			
			local p2213 = getValue({args = {[1] = 'P2213', [2] = 'hent_wikidata'}})
			
			if string.sub(p2213,-5,-1) == ' grad' then
				p2213 = string.sub(p2213,1,-6) .. '&deg;'
			else
				p2213 = p2213
			end
 			
			if mw.text.trim(frame.args["baneplanknute"]) ~= "" then
				return R1 .. '[[Baneplanknute|Lengden til oppstigende knute]]' .. R2 .. mw.text.trim(frame.args["baneplanknute"]) .. '&deg;' .. R3
			else
				return R1 .. '[[Baneplanknute|Lengden til oppstigende knute]]' .. R2 .. p2213 .. R3
			end
		end
		
		-- PERIHELARGUMENT
		function p._perihelargument( frame )
			local p2248 = mw.wikibase.getEntityObject().claims.P2248
			if not p2248 then
				if mw.text.trim(frame.args["perihelargument"]) == "" then
					return ""
				end
			end
			
			local p2248 = getValue({args = {[1] = 'P2248', [2] = 'hent_wikidata'}})
			
			if string.sub(p2248,-5,-1) == ' grad' then
				p2248 = string.sub(p2248,1,-6) .. '&deg;'
			else
				p2248 = p2248
			end
 			
			if mw.text.trim(frame.args["perihelargument"]) ~= "" then
				return R1 .. '[[Perihelargument]]' .. R2 .. mw.text.trim(frame.args["perihelargument"]) .. '&deg;' .. R3
			else
				return R1 .. '[[Perihelargument]]' .. R2 .. p2248 .. R3
			end
		end
		
		-- BANEDIAGRAM
		-- FINNER BILDE FRA WIKIDATA OG PLASSERER DET I EN EGEN BILDERAD
		function p._orbitdiagram(frame)
			local p491= mw.wikibase.getEntityObject().claims.P491
			if not p491 then
				if mw.text.trim(frame.args["banediagram"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["banediagram"]) ~= "" then
				OrbitDiagram = mw.text.trim(frame.args["banediagram"])
			else 
				OrbitDiagram = p491[1].mainsnak.datavalue.value
			end
			
			return I1 .. '[[Fil:' .. OrbitDiagram .. '|frameless]]' .. I2
		end
		
		-- EPOKE
		function p._epoch( frame )
			
			if mw.text.trim(frame.args["epoke"]) ~= "" then
				return '<br /><small>[[Epoke (astronomi)|Epoke]]&nbsp;' .. mw.text.trim(frame.args["epoke"]) .. '</small>'
			else
				return ""
			end
		end
		
			-- SETTER SAMMEN INFORMASJONEN I BANESEKSJONEN
			function p._orbitSection( frame )
	
				-- ANGIR OM SEKSJONEN SKAL VISES, OG HVILKEN OVERSKRIFT SOM I TILFELLE SKAL VISES
				if p._parent(frame) ~= "" or p._satellites(frame) ~= "" or p._distance(frame) ~= "" or p._aphel( frame ) ~= "" 
				or p._perihel( frame ) ~= "" or p._semimajoraxis( frame ) ~= "" or p._eccentricity( frame ) ~= "" 
				or p._orbitalperiod( frame ) ~= "" or p._draconiticperiod( frame ) ~= "" or p._tropicalperiod( frame ) ~= "" 
				or p._synodicalperiod( frame ) ~= "" or p._siderealperiod( frame ) ~= "" or p._avgspeed( frame ) ~= "" 
				or p._anomaly( frame ) ~= "" or p._inclination( frame ) ~= "" or p._ascendingnode( frame ) ~= ""
				or p._perihelargument( frame ) ~= "" or p._orbitdiagram( frame ) ~= "" then
					HeaderOrbit = H1 .. '[[Bane]]egenskaper' .. mw.text.trim(frame.args["bane_ref"]) .. p._epoch( frame ) .. H2
				else
					return ""
				end
				-- ANGIR REKKEFØLGEN I BANESEKSJONEN
				local OrbitSection = 
					HeaderOrbit
					.. p._parent(frame)
					.. p._satellites(frame)
					.. p._distance(frame)
					.. p._aphel( frame )
					.. p._perihel( frame )
					.. p._semimajoraxis( frame )
					.. p._eccentricity( frame )
					.. p._orbitalperiod( frame )
					.. p._draconiticperiod( frame )
					.. p._tropicalperiod( frame )
					.. p._synodicalperiod (frame )
					.. p._siderealperiod( frame )
					.. p._avgspeed( frame )
					.. p._anomaly( frame )
					.. p._inclination( frame )
					.. p._ascendingnode( frame )
					.. p._perihelargument( frame )
					.. p._orbitdiagram( frame )

				return OrbitSection
			end
		
	-- FYSIKKSEKSJONEN
		-- DIMENSJONER
		function p._dimensions( frame )
			if mw.text.trim(frame.args["dimensjoner"]) == "" then
				return ""
			elseif mw.text.trim(frame.args["dimensjoner"]) ~= "" then
				argDimension = mw.text.trim(frame.args["dimensjoner"])
			end
			if mw.text.trim(frame.args["dimensjoner_ref"]) ~= "" then
				argDimension = argDimension .. mw.text.trim(frame.args["dimensjoner_ref"])
			end
			
			return R1 .. 'Dimensjoner' .. R2 .. argDimension .. R3
		end
		
		-- GJENNOMSNITTSDIAMETER
		function p._avgdiameter( frame )
			if mw.text.trim(frame.args["gjennomsnittsdiameter"]) == "" then
				return ""
			else
				return R1 .. 'Gjennomsnittlig diameter' .. R2 .. mw.text.trim(frame.args["gjennomsnittsdiameter"]) .. '&nbsp;km' .. R3	
			end
		end
		
		-- GJENNOMSNITTSRADIUS
		function p._avgradius( frame )
			if mw.text.trim(frame.args["gjennomsnittsradius"]) == "" then
				return ""
			else
				return R1 .. 'Gjennomsnittlig radius' .. R2 .. mw.text.trim(frame.args["gjennomsnittsradius"]) .. '&nbsp;km' .. R3	
			end
		end
		
		-- EKVATORDIAMETER
		function p._equatordiameter( frame )
			if mw.text.trim(frame.args["ekvatordiameter"]) == "" then
				return ""
			else
				return R1 .. 'Ekvatordiameter' .. R2 .. mw.text.trim(frame.args["ekvatordiameter"]) .. '&nbsp;km' .. R3	
			end
		end
		
		-- EKVATORRADIUS
		function p._equatorradius( frame )
			if mw.text.trim(frame.args["ekvatorradius"]) == "" then
				return ""
			else
				return R1 .. 'Ekvatorradius' .. R2 .. mw.text.trim(frame.args["ekvatorradius"]) .. '&nbsp;km' .. R3	
			end
		end
		
		-- POLDIAMETER
		function p._polardiameter( frame )
			if mw.text.trim(frame.args["poldiameter"]) == "" then
				return ""
			else
				return R1 .. 'Poldiameter' .. R2 .. mw.text.trim(frame.args["poldiameter"]) .. '&nbsp;km' .. R3	
			end
		end
		
		-- POLRADIUS
		function p._polarradius( frame )
			if mw.text.trim(frame.args["polradius"]) == "" then
				return ""
			else
				return R1 .. 'Polradius' .. R2 .. mw.text.trim(frame.args["polradius"]) .. '&nbsp;km' .. R3	
			end
		end
		
		-- FLATTRYKTHET
		function p._flattening( frame )
			local p1102= mw.wikibase.getEntityObject().claims.P1102
			if not p1102 then
				if mw.text.trim(frame.args["flattrykthet"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["flattrykthet"]) ~= "" then
				return R1 .. '[[Flattrykthet]]' .. R2 .. mw.text.trim(frame.args["flattrykthet"]) .. R3
			else
				return R1 .. '[[Flattrykthet]]' .. R2 .. getValue({args = {[1] = 'P1102', [2] = 'hent_wikidata'}}) .. R3
			end
		end
		
		-- OVERFLATEAREAL
		function p._surfacearea( frame )
			if mw.text.trim(frame.args["overflateareal"]) == "" then
				return ""
			else
				return R1 .. 'Overflatens [[areal]]' .. R2 .. mw.text.trim(frame.args["overflateareal"]) .. '&nbsp;[[Kvadratkilometer|km²]]' .. R3	
			end
		end
		
		-- VOLUM
		function p._volume( frame )
			if mw.text.trim(frame.args["volum"]) == "" then
				return ""
			else
				return R1 .. '[[Volum]]' .. R2 .. mw.text.trim(frame.args["volum"]) .. '&nbsp;[[kubikkilometer|km³]]' .. R3	
			end
		end
		
		-- MASSE
		function p._mass( frame )
			local p2067= mw.wikibase.getEntityObject().claims.P2067
			if not p2067 then
				if mw.text.trim(frame.args["masse"]) == "" then
					return ""
				end
			end
		
			if mw.text.trim(frame.args["masse"]) ~= "" then
				return R1 .. '[[Masse]]' .. R2 .. mw.text.trim(frame.args["masse"]) ..R3
			else
				return R1 .. '[[Masse]]' .. R2 .. getValue({args = {[1] = 'P2067', [2] = 'hent_wikidata'}}) .. R3
			end
		end
	
		-- TETTHET
		function p._density( frame )
			if mw.text.trim(frame.args["tetthet"]) == "" then
				return ""
			else
				return R1 .. '[[Tetthet|Middeltetthet]]' .. R2 .. mw.text.trim(frame.args["tetthet"]) .. '&nbsp;g/cm³' .. R3	
			end
		end
		
		-- GRAVITASJON
		function p._gravity( frame )
			
			if mw.text.trim(frame.args["gravitasjon"]) ~= "" then
				argGravity = mw.text.trim(frame.args["gravitasjon"])
			else
				return ""
			end
			if mw.text.trim(frame.args["gravitasjon_enhet"]) ~= "" then
				argGravity = argGravity .. '&nbsp;' .. mw.text.trim(frame.args["gravitasjon_enhet"])
			else
				argGravity = argGravity .. '&nbsp;m/s²'
			end
			
			return R1 .. '[[Tyngdekraft|Gravitasjon]] ved ekvator' .. R2 .. argGravity .. R3
		end
		
		-- UNNSLIPNINGSHASTIGHET
		function p._escapevelocity( frame )
			if mw.text.trim(frame.args["unnslipningshastighet"]) == "" then
				return ""
			else
				return R1 .. '[[Unnslipningshastighet]]' .. R2 .. mw.text.trim(frame.args["unnslipningshastighet"]) .. '&nbsp;km/s' .. R3	
			end
		end
		
		-- ROTASJON
		function p._rotation( frame )
			if mw.text.trim(frame.args["rotasjon"]) == "" then
				return ""
			else
				return R1 .. '[[Rotasjonsperiode]]' .. R2 .. mw.text.trim(frame.args["rotasjon"]) 
				.. mw.text.trim(frame.args["rotasjon_ref"]) .. R3	
			end
		end
		
		-- SIDERISK ROTASJON
		function p._siderealrotation( frame )
			if mw.text.trim(frame.args["siderisk_rot"]) == "" then
				return ""
			else
				return R1 .. '[[Rotasjonsperiode|Sidersik rotasjonsperiode]]' .. R2 .. mw.text.trim(frame.args["siderisk_rot"]) .. R3	
			end
		end
		
		-- ROTASJONSHASTIGHET
		function p._rotationvelocity( frame )
			if mw.text.trim(frame.args["rotasjonshastighet"]) == "" then
				return ""
			else
				return R1 .. 'Rotasjonshastighet ved ekvator' .. R2 .. mw.text.trim(frame.args["rotasjonshastighet"]) .. R3	
			end
		end
		
		-- REKTASCENSJON
		function p._rightasc( frame )
			if mw.text.trim(frame.args["rektascensjon"]) == "" then
				return ""
			else
				return R1 .. '[[Rektascensjon]] ved nordpolen' .. R2 .. mw.text.trim(frame.args["rektascensjon"]) .. R3	
			end
		end
		
		-- AKSEHELNING
		function p._axialtilt( frame )
			if mw.text.trim(frame.args["aksehelning"]) == "" then
				return ""
			else
				return R1 .. '[[Aksehelning]]' .. R2 .. mw.text.trim(frame.args["aksehelning"]) .. '&deg;' .. R3	
			end
		end
		
		-- OVERFLATEREFLEKSJON
		function p._albedo( frame )
			if mw.text.trim(frame.args["albedo"]) == "" then
				return ""
			else
				return R1 .. '[[Albedo|Overflaterefleksjon]]' .. R2 .. mw.text.trim(frame.args["albedo"]) .. R3	
			end
		end
		
		-- TEMPERATURER
		function p._surfacetemperature( frame )
			if mw.text.trim(frame.args["tempnavn1"]) == "" and mw.text.trim(frame.args["tempnavn2"]) == "" and mw.text.trim(frame.args["tempnavn3"]) == "" and mw.text.trim(frame.args["tempnavn4"]) == "" then
				return ""
			end
			if mw.text.trim(frame.args["tempnavn1"]) == "" then
				argMintemp1 = ""
				argSnittemp1 = ""
				argMaxtemp1 = ""
				tempRow1 = ""
				argTemp1 = ""
			else
				argTemp1 = '<br /><div style="float: right; font-size:smaller;">' .. mw.text.trim(frame.args["tempnavn1"]) .. ':&nbsp;&nbsp;&nbsp;</div>'
				if mw.text.trim(frame.args["mintemp1"]) == "" then
					argMintemp1 = '<div style="float: left; font-size:smaller; text-align:center;">–</div>'
				else
					argMintemp1 = '<div style="float: left; font-size:smaller; text-align:center;">' .. mw.text.trim(frame.args["mintemp1"]) .. '</div>'
				end
				if mw.text.trim(frame.args["snittemp1"]) == "" then
					argSnittemp1 = '<small>–</small>'
				else
					argSnittemp1 = mw.text.trim(frame.args["snittemp1"])
				end
				if mw.text.trim(frame.args["maxtemp1"]) == "" then
					argMaxtemp1 = '<div style="float: right; font-size:smaller; text-align:center;">–</div>'
				else
					argMaxtemp1 = '<div style="float: right; font-size:smaller; text-align:center;">' .. mw.text.trim(frame.args["maxtemp1"]) .. '</div>'
				end
			end
			if mw.text.trim(frame.args["tempnavn2"]) == "" then
				argMintemp2 = ""
				argSnittemp2 = ""
				argMaxtemp2 = ""
				tempRow2 = ""
				argTemp2 = ""
			else
				argTemp2 = '<br /><div style="float: right; font-size:smaller;">' .. mw.text.trim(frame.args["tempnavn2"]) .. ':&nbsp;&nbsp;&nbsp;</div>'
				if mw.text.trim(frame.args["mintemp2"]) == "" then
					argMintemp2 = '<div style="text-align:center; font-size:smaller;"><div style="float: left;">–</div>'
				else
					argMintemp2 = '<div style="text-align:center;"><div style="float: left;">' .. mw.text.trim(frame.args["mintemp2"]) .. '</div>'
				end
				if mw.text.trim(frame.args["snittemp2"]) == "" then
					argSnittemp2 = '–'
				else
					argSnittemp2 = mw.text.trim(frame.args["snittemp2"])
				end
				if mw.text.trim(frame.args["maxtemp2"]) == "" then
					argMaxtemp2 = '<div style="float: right;">–</div></div>'
				else
					argMaxtemp2 = '<div style="float: right;">' .. mw.text.trim(frame.args["maxtemp2"]) .. '</div></div>'
				end
			end
			if mw.text.trim(frame.args["tempnavn3"]) == "" then
				argMintemp3 = ""
				argSnittemp3 = ""
				argMaxtemp3 = ""
				tempRow3 = ""
				argTemp3= ""
			else
				argTemp3 = '<br /><div style="float: right; font-size:smaller;">' .. mw.text.trim(frame.args["tempnavn3"]) .. ':&nbsp;&nbsp;&nbsp;</div>'
				if mw.text.trim(frame.args["mintemp3"]) == "" then
					argMintemp3 = '<div style="text-align:center; font-size:smaller;"><div style="float: left;">–</div>'
				else
					argMintemp3 = '<div style="text-align:center;"><div style="float: left;">' .. mw.text.trim(frame.args["mintemp3"]) .. '</div>'
				end
				if mw.text.trim(frame.args["snittemp3"]) == "" then
					argSnittemp3 = '–'
				else
					argSnittemp3 = mw.text.trim(frame.args["snittemp3"])
				end
				if mw.text.trim(frame.args["maxtemp3"]) == "" then
					argMaxtemp3 = '<div style="float: right;">–</div></div>'
				else
					argMaxtemp3 = '<div style="float: right;">' .. mw.text.trim(frame.args["maxtemp3"]) .. '</div></div>'
				end
			end
			if mw.text.trim(frame.args["tempnavn4"]) == "" then
				argMintemp4 = ""
				argSnittemp4 = ""
				argMaxtemp4 = ""
				tempRow4 = ""
				argTemp4= ""
			else
				argTemp4 = '<br /><div style="float: right; font-size:smaller;">' .. mw.text.trim(frame.args["tempnavn4"]) .. ':&nbsp;&nbsp;&nbsp;</div>'
				if mw.text.trim(frame.args["mintemp4"]) == "" then
					argMintemp4 = '<div style="text-align:center; font-size:smaller;"><div style="float: left;">–</div>'
				else
					argMintemp4 = '<div style="text-align:center;"><div style="float: left;">' .. mw.text.trim(frame.args["mintemp4"]) .. '</div>'
				end
				if mw.text.trim(frame.args["snittemp4"]) == "" then
					argSnittemp4 = '–'
				else
					argSnittemp4 = mw.text.trim(frame.args["snittemp4"])
				end
				if mw.text.trim(frame.args["maxtemp4"]) == "" then
					argMaxtemp4 = '<div style="float: right;">–</div></div>'
				else
					argMaxtemp4 = '<div style="float: right;">' .. mw.text.trim(frame.args["maxtemp4"]) .. '</div></div>'
				end
			end
			
			local tempHeader = '<div style="text-align:center; font-size:smaller;"><div style="float: left;">min.</div>snitt<div style="float: right;">max</div></div>'
			local tempRow1 = argMintemp1 .. argSnittemp1 .. argMaxtemp1
			local tempRow2 = argMintemp2 .. argSnittemp2 .. argMaxtemp2
			local tempRow3 = argMintemp3 .. argSnittemp3 .. argMaxtemp3
			local tempRow4 = argMintemp4 .. argSnittemp4 .. argMaxtemp4
			return R1 .. '[[Temperatur|Overflatetemperatur]]' .. argTemp1 .. argTemp2 .. argTemp3 .. R2 .. tempHeader .. tempRow1 .. tempRow2 .. tempRow3 .. tempRow4 .. R3
		end
		
		-- ENKELTTEMPERATUR
		function p._singletemp( frame )
			if mw.text.trim(frame.args["enkelttemperatur"]) == "" then
				return ""
			else
				return R1 .. '[[Temperatur]]' .. R2 .. mw.text.trim(frame.args["enkelttemperatur"]) .. R3	
			end
		end
		
		-- SPEKTRALKLASSE
		function p._spectralclass( frame )
			local p215= mw.wikibase.getEntityObject().claims.P215
			if not p215 then
				if mw.text.trim(frame.args["spektralklasse"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["spektralklasse"]) ~= "" then
				return R1 .. '[[Asteroidespektralklasser|Spektralklasse]]' .. R2 .. mw.text.trim(frame.args["spektralklasse"]) .. R3
			else
				return R1 .. '[[Asteroidespektralklasser|Spektralklasse]]' .. R2 .. getValue({args = {[1] = 'P215', [2] = 'hent_wikidata'}}) .. R3
			end
		end
		
		-- VISMAG_V
		function p._vismagv( frame )
			local p1215= mw.wikibase.getEntityObject().claims.P1215
			if not p1215 then
				if mw.text.trim(frame.args["vismag_v"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["vismag_v"]) ~= "" then
				return R1 .. '[[Tilsynelatende størrelsesklasse]]' .. R2 .. mw.text.trim(frame.args["vismag_v"]) .. R3
			else
				return R1 .. '[[Tilsynelatende størrelsesklasse]]' .. R2 .. getValue({args = {[1] = 'P1215', [2] = 'hent_wikidata'}}) .. R3
			end
		end
		
		-- ABS_MAG
		function p._absmag( frame )
			local p1457= mw.wikibase.getEntityObject().claims.P1457
			if not p1457 then
				if mw.text.trim(frame.args["abs_mag"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["abs_mag"]) ~= "" then
				return R1 .. '[[Absolutt størrelsesklasse]] (MV)' .. R2 .. mw.text.trim(frame.args["abs_mag"]) .. R3
			else
				return R1 .. '[[Absolutt størrelsesklasse]] (MV)' .. R2 .. getValue({args = {[1] = 'P1457', [2] = 'hent_wikidata'}}) .. R3
			end
		end
		
		-- VINKELDIAMETER
		function p._aungularsize( frame )
			if mw.text.trim(frame.args["vinkeldiameter"]) == "" then
				return ""
			else
				return R1 .. '[[Vinkeldiameter]]' .. R2 .. mw.text.trim(frame.args["vinkeldiameter"]) .. R3	
			end
		end
				
			-- SETTER SAMMEN INFORMASJONEN I FYSIKKSEKSJONEN
			function p._physicsSection( frame )
	
				-- ANGIR OM SEKSJONEN SKAL VISES, OG HVILKEN OVERSKRIFT SOM I TILFELLE SKAL VISES
				if p._dimensions( frame ) ~= "" or p._avgdiameter( frame ) ~= "" or p._avgradius( frame ) ~= "" 
				or p._equatordiameter( frame ) ~= "" or p._equatorradius( frame ) ~= "" or p._polardiameter( frame ) ~= "" 
				or p._polarradius( frame ) ~= "" or p._flattening( frame ) ~= "" or p._surfacearea( frame ) ~= "" 
				or p._volume( frame ) ~= "" or p._mass( frame ) ~= "" or p._density( frame ) ~= "" 
				or p._gravity( frame ) ~= "" or p._escapevelocity( frame ) ~= "" or p._rotation( frame ) ~= "" 
				or p._siderealrotation( frame ) ~= "" or p._rotationvelocity( frame ) ~= "" or p._rightasc( frame ) ~= ""
				or p._axialtilt( frame ) ~= "" or p._albedo( frame ) ~= "" or p._surfacetemperature( frame ) ~= "" 
				or p._singletemp( frame ) ~= "" or p._spectralclass( frame ) ~= "" or p._vismagv( frame ) ~= "" 
				or p._absmag( frame ) ~= "" or p._aungularsize( frame ) ~= "" then
					HeaderPhysics = H1 .. 'Fysiske egenskaper' .. H2
				else
					return ""
				end
				return HeaderPhysics
				.. p._dimensions(frame)
				.. p._avgdiameter( frame )
				.. p._avgradius( frame )
				.. p._equatordiameter( frame )
				.. p._equatorradius( frame )
				.. p._polardiameter( frame )
				.. p._polarradius( frame )
				.. p._flattening( frame )
				.. p._surfacearea( frame )
				.. p._volume( frame )
				.. p._mass( frame )
				.. p._density( frame )
				.. p._gravity( frame )
				.. p._escapevelocity( frame )
				.. p._rotation( frame )
				.. p._siderealrotation( frame )
				.. p._rotationvelocity( frame )
				.. p._rightasc( frame )
				.. p._axialtilt( frame )
				.. p._albedo( frame )
				.. p._surfacetemperature( frame )
				.. p._singletemp( frame )
				.. p._spectralclass( frame )
				.. p._vismagv( frame )
				.. p._absmag( frame )
				.. p._aungularsize( frame )
			end

	-- ATMOSFÆRESEKSJONEN
		-- SKALAHØYDE
		function p._scalehight( frame )
			if mw.text.trim(frame.args["skalahøyde"]) == "" then
				return ""
			else
				return R1 .. '[[Skalahøyde]]' .. R2 .. mw.text.trim(frame.args["skalahøyde"]) .. R3	
			end
		end
	
		-- TRYKK
		function p._pressure( frame )
			if mw.text.trim(frame.args["trykk"]) == "" then
				return ""
			else
				return R1 .. '[[Atmosfærisk trykk]]' .. R2 .. mw.text.trim(frame.args["trykk"]) .. '&nbsp;[[Pascal (enhet)|Pascal]]' .. R3	
			end
		end
	
		-- ATMOSFÆRISK SAMMENSETNING
		function p._atmcomposition( frame )
			if mw.text.trim(frame.args["sammensetning"]) == "" then
				return ""
			else
				return R1 .. 'Sammensetning' .. R2 .. mw.text.trim(frame.args["sammensetning"]) .. R3
			end
		end
	
			-- SETTER SAMMEN INFORMASJONEN I ATMOSFÆRESEKSJONEN
			function p._atmosphereSection( frame )
	
				-- ANGIR OM SEKSJONEN SKAL VISES, OG HVILKEN OVERSKRIFT SOM I TILFELLE SKAL VISES
				if p._scalehight( frame ) ~= "" or p._pressure( frame ) ~= "" or p._atmcomposition( frame ) ~= "" then
					HeaderAtmosphere = H1 .. 'Atmosfæriske egenskaper' .. mw.text.trim(frame.args["atmosfære_ref"]) .. H2
				else
					return ""
				end
				return HeaderAtmosphere
				.. p._scalehight( frame )
				.. p._pressure( frame )
				.. p._atmcomposition( frame )
			end
			
	-- KILDESEKSJONEN
		-- JPL-DATA
		function p._JPLid( frame )
			local p716= mw.wikibase.getEntityObject().claims.P716
			if not p716 then
				if mw.text.trim(frame.args["JPL-id"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["JPL-id"]) ~= "" then
				argJPLid = mw.text.trim(frame.args["JPL-id"])
			else
				argJPLid = getValue({args = {[1] = 'P716', [2] = 'hent_wikidata'}})
			end
			
			return R1 .. '[[Jet Propulsion Laboratory|JPL-id]]' .. R2 .. '[http://ssd.jpl.nasa.gov/sbdb.cgi?sstr=' .. argJPLid .. ' lenke]' .. R3
		end
		
			-- SETTER SAMMEN INFORMASJONEN I KILDESEKSJONEN
			function p._sourceSection( frame )
	
				-- ANGIR OM SEKSJONEN SKAL VISES, OG HVILKEN OVERSKRIFT SOM I TILFELLE SKAL VISES
				if p._JPLid(frame) ~= "" then
					HeaderSource = H1 .. 'Kilder' .. H2
				else
					HeaderSource = ""
				end
				-- ANGIR REKKEFØLGEN I OPPDAGELSESSEKSJONEN
				local SourceSection = 
					HeaderSource
					.. p._JPLid(frame)

				return SourceSection
			end
	
	-- NESTE-SEKSJONEN
		-- FORRIGE
		function p._previous( frame )
			local p155 = mw.wikibase.getEntityObject().claims.P155
			if not p155 then
				return ""
			else
				return getValue({args = {[1] = 'P155', [2] = 'hent_wikidata'}})
			end
		end
		
		-- NESTE
		function p._next( frame )
			local p156 = mw.wikibase.getEntityObject().claims.P156
			if not p156 then
				return ""
			else
				return getValue({args = {[1] = 'P156', [2] = 'hent_wikidata'}})
			end
		end
	
			-- SETTER SAMMEN INFORMASJONEN I NESTESEKSJONEN
			function p._nextSection( frame )
				if p._previous(frame) ~= "" and p._next(frame) == "" then
					return '<tr valign="top" class="rad"><td colspan="4"><hr>' .. '<div class="sentrert">'
							.. '←&nbsp;Forrige<br />' .. p._previous(frame) .. '</div></td></tr>'
				elseif p._previous(frame) == "" and p._next(frame) ~= "" then
					return '<tr valign="top" class="rad"><td colspan="4"><hr>' .. '<div class="sentrert">'
							.. 'Neste&nbsp;→<br />' .. p._next(frame) .. '</div></td></tr>'
				elseif p._previous(frame) ~= "" and p._next(frame) ~= "" then
					return '<tr valign="top" class="rad"><td colspan="4"><hr>' .. '<div class="sentrert">'
							.. '←&nbsp;Forrige&nbsp;–&nbsp;Neste&nbsp;→<br />' .. p._previous(frame) .. '&nbsp;–&nbsp;' .. p._next(frame) .. '</div></td></tr>'
				else
					return ""
				end
			end
		
	-- SLUTTSEKSJONEN
		-- COMMONSKATEGORI
		function p._comcat( frame )
			local p373= mw.wikibase.getEntityObject().claims.P373
			if not p373 then
				if mw.text.trim(frame.args["comcat"]) == "" then
					return ""
				end
			end
			
			if mw.text.trim(frame.args["comcat"]) ~= "" then
				argComCat = mw.text.trim(frame.args["comcat"])
			else
				argComCat = getValue({args = {[1] = 'P373', [2] = 'hent_wikidata'}})
			end
			
			if frame.args['navn'] ~= "" then PgName = frame.args['navn']
				else PgName = Pgname({args = {[1] = mw.title.getCurrentTitle().baseText, [2] = '%s%(.*%)', [3] = '', ['plain'] = 'false'}})
			end
		
			return '<div class="sentrert nowrap">[[:commons:' .. argComCat .. '|' .. PgName .. ' på Commons]]</div>'
		end
	
		-- SLUTTKOMMENTAR
		function p._endcomment( frame )
			return "" --'<div class="sentrert"><small>Deler av informasjonen i infoboksen er hentet fra [[Wikidata]].</small></div>'
		end
		
			-- SETTER SAMMEN INFORMASJONEN I SLUTTSEKSJONEN
			function p._endSection( frame )
				endSectionStart = '<tr class="skjult"><td></td><td></td><td></td><td></td></tr>'
				endSectionEnd = '</td></tr></table>'
				if p._comcat(frame) or p._endcomment(frame) ~= "" then
					endSectionMiddle = '<tr valign="top" class="rad"><td colspan="4"><hr>'
				else
					endSectionMiddle = ""
				end
				
				return endSectionStart .. endSectionMiddle .. p._comcat(frame) .. p._endcomment(frame) .. endSectionEnd
			end

return p