# Donut widget

radarIndicators = []

radar = (json, state) ->

    lmain = new HTML('div')
    state.widget.inject(lmain, true)

    radarChart = new Chart(lmain, 'radar', json.radar)


    # Harmonizer
    id = Math.floor(Math.random() * 987654321).toString(16)
    chk = document.createElement('input')
    chk.setAttribute("type", "checkbox")
    chk.setAttribute("id", id)
    chk.style.marginLeft = '10px'
    if globArgs.harmonize and globArgs.harmonize == 'true'
            chk.checked = true
    chk.addEventListener("change", () ->
            harmonize = null
            if this.checked
                    harmonize = 'true'
                    globArgs['harmonize'] = 'true'

            updateWidgets('radar', null, { harmonize: harmonize })
            )
    state.widget.inject(mk('br'))
    state.widget.inject(chk)
    label = document.createElement('label')
    label.setAttribute("for", id)
    label.setAttribute("title", "Check this box to harmonize edges to organisational averages")
    chk.setAttribute("title", "Check this box to harmonize edges to organisational averages")
    label.style.paddingLeft = '5px'
    label.appendChild(document.createTextNode('Harmonize edges'))
    state.widget.inject(label)

    # Relativizer
    id = Math.floor(Math.random() * 987654321).toString(16)
    chk = document.createElement('input')
    chk.setAttribute("type", "checkbox")
    chk.setAttribute("id", id)
    chk.style.marginLeft = '10px'
    if globArgs.relativize and globArgs.relativize == 'true'
            chk.checked = true
    chk.addEventListener("change", () ->
            relativize = null
            if this.checked
                    relativize = 'true'
                    globArgs['relativize'] = 'true'

            updateWidgets('radar', null, { relativize: relativize })
            )
    state.widget.inject(mk('br'))
    state.widget.inject(chk)
    label = document.createElement('label')
    label.setAttribute("for", id)
    label.setAttribute("title", "Check this box to force all areas to be relative to their own projects (and not the compared projects). This may help to display focus areas.")
    chk.setAttribute("title", "Check this box to force all areas to be relative to their own projects (and not the compared projects). This may help to display focus areas.")
    label.style.paddingLeft = '5px'
    label.appendChild(document.createTextNode('Make all projects relative to themselves'))
    state.widget.inject(label)
