local p = {}
 
function p.start(frame)
    local pFrame = frame:getParent();
    local args = pFrame.args;
    for k,v in pairs( frame.args ) do
        args[k] = v;
    end

    local text = ''
    local partiet = require('Modul:Partier dk')
 
    text = mw.text.tag( 'th', {style="width:4em;"}, mw.text.tag('span', {style = "cursor: help; border-bottom: 1px dotted;", title = 'Valgåret'}, 'Valgår') )
 
    local i = 1
 
    while args[i] and args[i] ~= '' do
        local kort = args[i]
        frame.args = { kort }
        local vector = partiet.partisnack(frame) 
        if vector == nil then
             return 'ERROR'
        end
        local a = vector['a']
        local t = vector['t']
        local n = vector['n']
        local f = vector['f']
        local l = vector['l']
        local t4 = mw.text.tag('span', {style="color:" .. t .. ";"}, a)
        t4 = mw.text.tag('th', {style = "background:" .. f .. ";min-width:2.1em;max-width:2.3em;", title = n}, "[[" .. l .. "|" .. t4 .. "]]")
        text = text .. t4
        i = i + 1
    end
    i = i*2.1+60.5
 
 
    t4 = mw.text.tag('span',{style="cursor: help; border-bottom: 1px dotted;", title="Grafisk præsentation af mandatfordeling og valgdeltagelse"}, 'Grafik: Mandatfordeling og valgdeltagelse')
    text = text .. mw.text.tag('th', {style="box-sizing:content-box;width:400px;"},t4)
 
    t4 = mw.text.tag('span',{style="cursor: help; border-bottom: 1px dotted;", title="Totale antal mandater"}, "TOT")
    text = text .. mw.text.tag('th', {style="width:2.1em;"}, t4)
    t4 = mw.text.tag('span',{style="cursor: help; border-bottom: 1px dotted;", title="valgdeltagelse"}, '%')
    text = text .. mw.text.tag('th', {style="width:2.5em;"}, t4)
    t4 = mw.text.tag('span',{style="cursor: help; border-bottom: 1px dotted;", title="Kønsfordeling af medlemmer, mænd/kvinder"}, "Kønsfordeling ([[Mand|M]]/[[Kvinde|K]])")
    text = text .. mw.text.tag('th', {style="box-sizing:content-box;width:120px;"}, t4)
 
    text = mw.text.tag('tr', {}, text)
    --text = mw.text.tag('table', {class="wikitable", border="1", style="text-align:center;font-size:88%;width:" .. i .. "em;"}, text)
    return text 
 
end
 
function p.relativmandatstapel(frame)
    local pFrame = frame:getParent();
    local args = pFrame.args;
    for k,v in pairs( frame.args ) do
        args[k] = v;
    end
 
    local text = ''
    local partiet = require('Modul:Partier dk')
    local bredd = args.bredd
    if bredd == nil then
    	bredd = '400'
    end
    local sum = args[2]
    local valgdelt = args.valgdelt or ''
    local valgdelt2 = tonumber(valgdelt)
    local y = ''
    if valgdelt2 == nil then
        local y1 = string.find(valgdelt, ',')
        if y1 then
            valgdelt2 = string.sub(valgdelt,1,y1-1).. '.' .. string.sub(valgdelt,y1+1,string.region(valgdelt))
        end
    end
 
    local i = 3
    while (args[i] and args[i] ~= '') or args[i+1] do
        local kort = args[i]
        frame.args = { kort }
        local vector = partiet.partisnack(frame) 
        if tonumber( args[i+1] ) == nil then
        	args[i+1] = '0'
        end
        if vector == nil then
             return 'ERROR'
        end
        local t = vector['t']
        local f = vector['f']
        local stylus = ''
        local content = ''
        if (tonumber(args[i+1]) or 0) > 0 then
            stylus = 'padding:0;border:0;background:' .. f .. ';color:' .. t .. ';width:' .. math.floor(tonumber(bredd)*tonumber(args[i+1])/tonumber(sum) + 0.5) .. 'px;'
            if tonumber(bredd)*tonumber(args[i+1])/tonumber(sum) > 16 then
            	content = args[i+1]
            end
            text = text .. mw.text.tag('td', {style = stylus, title = args[i+1]}, content)
        end
        y = text
        i = i + 2
    end
    text = mw.text.tag('tr', {}, text)
    text = mw.text.tag('table', {cellspacing="0",cellpadding="0", border="0", style="border:0;width:"..bredd.."px; text-align:center;line-height:1.3em;padding:0;"}, text)
    if valgdelt2 ~= nil then
    	local div = mw.text.tag( 'div', {style="width:1px;height:4px;position:absolute;top:0;left:25%;z-index:10;background-color:#666666;"}, '')
    	div = div .. mw.text.tag('div', {style="width:1px;height:4px;position:absolute;top:0;left:50%;z-index:10;background-color:#666666;"}, '')
    	div = div .. mw.text.tag('div', {style="width:1px;height:4px;position:absolute;top:0;left:75%;z-index:10;background-color:#666666;"}, '')
    	div = div .. mw.text.tag('div', {title="valgdeltagande: " .. valgdelt .. "%", style="padding:0;background-color:#b0b0b0;height:4px;width:" .. math.floor(tonumber(bredd)*valgdelt2/100+0.5) .. "px;"}, '')
    	div = mw.text.tag('div', {style="margin:2px 0 0 0;padding:0;position:relative;height:4px;width:"..bredd.."px;"}, div)
    	text = text .. div
    end
    y = text
    return y or 'Hej'
end
 
function mqstapel(tot, kvinder, tom)
 
    local stylus = 'padding:0;border:0;background:#C0C0FF;width:' .. math.floor(120*(tot-tom-kvinder)/tot) .. 'px;'
    local d = ''
    if 120*(tot-tom-kvinder) > 16 then
        d = tostring(tot-tom-kvinder)
    end
    local text = mw.text.tag('td', {style=stylus, title = tostring(tot-tom-kvinder)}, d)
    if tom ~= 0 then
       stylus = 'padding:0;border:0;background:#ffffff;width:' .. math.floor(120*tom/tot) .. 'px;'
       text = text .. mw.text.tag('td', {style=stylus, title = tostring(tom)}, '')
    end
    if kvinder ~= 0 then
       stylus = 'padding:0;border:0;background:#FFC0C0;width:' .. math.floor(120*kvinder/tot) .. 'px;'
       d = ''
       if 120*kvinder/tot > 16 then
           d = tostring(kvinder)
       end
       text = text .. mw.text.tag('td', {style=stylus, title = tostring(kvinder)}, d)
    end 
    text = mw.text.tag('tr', {}, text)
    text = mw.text.tag('table', {cellspacing="0", cellpadding="0", border="0", style="border:0;width:120px; text-align:center;line-height:1.3em;padding:0;"}, text)
 
	return text
end
 
 
function p.rad(frame)
    local pFrame = frame:getParent();
    local args = pFrame.args;
    for k,v in pairs( frame.args ) do
        args[k] = v;
    end
    local text = ''
    text = text .. mw.text.tag('td', {}, args[1])
    local i = 3
    local u = 0
    local valgdelt = args.valgdelt or ''
 
    while tonumber(args[i+1]) ~= nil do
        local t = ''
        if tonumber(args[i+1]) > 0 then
            t = args[i+1]
        end
        text = text .. mw.text.tag('td', {}, t)
        u = u + tonumber(args[i+1])
        i = i + 2
    end
 
    if u == tonumber(args[2]) then
        text = text .. mw.text.tag('td', {}, p.relativmandatstapel(frame))
    else
        text = text .. mw.text.tag('td', {}, mw.text.tag('span', {style="color:red;"}, 'FORKERT ANTAL MANDATER'))
    end
    text = text .. mw.text.tag('td', {}, args[2])
    if valgdelt ~= nil then
        text = text .. mw.text.tag('td', {}, valgdelt)
    else
    	text = text .. mw.text.tag('td', {}, '')
    end
    if args.kvinder ~= nil and args.kvinder ~= '' then
        text = text .. mw.text.tag('td', {}, mqstapel(tonumber(args[2]), tonumber(args.kvinder), tonumber(args.tom) or 0))
    else
    	text = text .. mw.text.tag('td', {}, '')
    end
    text = mw.text.tag('tr', {}, text)
 
    return text
end

function p.n(frame)
    local pFrame = frame:getParent();
    local args = pFrame.args;
    local i = 1
    while args[i] ~= nil do
        i = i + 1
    end
    local h = 2.1 * i + 58.4
    return h .. ''
end

function p.slut(frame)
    local pFrame = frame:getParent();
    local args = pFrame.args;
    local text = ''
    if args[1] ~= nil then
        local i = 2
        while args[i] ~= nil do
            text = text .. mw.text.tag('br') .. args[i]
            i = i + 1
        end
        text = mw.text.tag('td', {colspan="100", style="text-align:left;"}, args[1] .. text)
        text = mw.text.tag('tr', {}, text)
    end
    local t = mw.text.tag('td', {colspan="100", style="text-align:left;background:#eeeeee;"}, "Data hentet fra <i>[http://www.statistikbanken.dk/ Danmarks Statistik]</i>, <i>[http://www.kmdvalg.dk/ KMD Valg]</i> og  <i>[http://www.sa.dk/ Statens Arkiver]</i>.")
    text = text .. mw.text.tag('tr', {}, t)
    return text
end
 
return p