var LastStage = 0
var mailed  = false
var changed = false
var enabled = true
var tabsPast = [0, 0, 0, 0, 0]
var months = ['Jan', 'Febr', 'Mrt', 'Apr', 'Mei', 'Jun', 'Jul',
              'Aug', 'Sept', 'Okt', 'Nov', 'Dec']
var sel_row
var products
var eStage = 0
var pageresults = 10

function initialize()
{
    document.onclick = hideTip
    changed = (getStage() == 0)

    if (getStage() == 10)
    {
        tabsPast[0] = 1
        mailed = true
        changed = true
    }
    setOldValues()

    var val      = ctl('in_startdate')
    var mon      = ctl('in_startdate_m')
    var now      = new Date()
    var nowYear  = now.getFullYear()
    var nowMonth = now.getMonth()
    var nowDate  = now.getDate()

    eStage       = getStage()
    
    if (eStage == 4 || eStage == 6) 
    {
        eStage = 3
        ctl('stage').value = eStage
    }
    if (eStage >= 3) tabsPast = [1, 1, 1, 1, ((eStage > 3 && eStage != 10 ) ? 2 : 0)]

    mon.minDate = new Date(nowYear, nowMonth, nowDate + 7)
    mon.maxDate = new Date(nowYear + 1, nowMonth, nowDate)
    getDate(mon, val)

    initializePortal()
    setOldValues()
    showStage(null, eStage)
}

function setHealth(l, f, eln, t)
{
    if (f > 0)
    {
        ctl(eln).innerHTML = '€ ' + formatFloat(l, 1, 1, 1)
                      + ' t/m € ' + formatFloat(f, 1, 1, 1)
    }
      else
    {
        ctl(eln).innerHTML = (l > 0) ? '€ ' + formatFloat(l, 1, 1, 1) + ' en hoger' : ''
    }
}

function concatNull(pre, value, suf, nullvalue)
{
    return (value) ? pre + value + suf : nullvalue
}


// S H O W  -  H I D E

function getStage()
{
    return parseInt(ctl('stage').value)
}

function showStage(e, iStage, iMoving)
{
    if (!enabled) return
    if (!tabsPast[2] && iStage == 4) return
    if (e) e.cancelBubble = true
    if (e)
    {
        var el = ((!e.target) ? e.srcElement : e.target).parentNode

        if (el.id && el.id.substr(0, 3) == 'cmd'
         && el.id.charAt(el.id.length - 1) != ((LastStage==3) ? 2:LastStage)) return
    }
    eStage = getStage()
    tabsPast[(eStage == 3) ? 2 : eStage] = true

    if (LastStage < iStage && iStage < 5)
    {
        if (!validate(LastStage, iStage)) return
    }

    /* next | previous */
    switch (iMoving)
    {
        case -1:

            if (eStage == 6)
            {
                iStage = 3
                break
            }
            if (eStage >  0) iStage = eStage + iMoving
            if (iStage == 2) iStage = 1

            break

        case  1:

            if (eStage == 6)
            {
                iStage = 4
                break
            }
            if (!validate(eStage)) return
            if (eStage <  5) iStage = eStage + iMoving

            break
    }
    ctl('stage').value = (iStage == 2) ? 3 : iStage

    if (iStage == 5 && eStage < 5)
    {
        ctl('stage').value = 10
        ctl('in_all').submit()
        return
    }

    if (iStage == 2 && !changed)
    {
        iStage = 3
    }

    LastStage = iStage

    for (var i = 0; i < 7; i++)
    {
        if (i != 3 && i < 5)
        {
            hitTab(i, i == iStage)
            ctl('cmdStage' + i).disabled = (iStage == 2 && iStage < 10)
        }
        ctl('cmdStage4').disabled = changed
        ctl('stage' + i).style.display = (i == iStage) ? 'block' : 'none'
    }

    if (mailed)
    {
        ctl('stage1').style.display = 'none'
        ctl('stage5').style.display = 'block'
        mailed = false
    }

    var cmdBack = ctl('cmdBack')
    var cmdNext = ctl('cmdNext')

    switch (parseInt(iStage))
    {
        case 0:
            cmdBack.style.visibility = 'hidden'
            cmdNext.innerHTML = 'volgende »'
            break

        case 2:
            if (eStage < 4)
            {
                showWait(true)
                enabled = false
                sel_row = null
                with (ctl('wait'))
                {
                    style.backgroundImage = 'url(/static/img/rekenmachines/' + calc_style + '_wait.gif)'
                    className = 'wait'
                }
                setDate('in_startdate')
                setTimeout("ctl('in_all').submit(); showWait(false)", 50)
            }
            break

        case 3:
            hitTab(2, true)
            break

        case 4:
            cmdNext.innerHTML = 'verzenden'
            setProductSel()
            break

        case 5:
            cmdNext.style.display = 'none'
            break

        case 6:
            cmdNext.innerHTML = 'offerte »'
            ctl('stage6').display = 'block'
            break

        case 10:
            ctl('stage').value = 1
            cmdBack.style.visibility = 'hidden'
            cmdNext.style.width = '150px'
            cmdNext.innerHTML = 'Offerte ander product »'
            break

        default:
            cmdBack.style.visibility = 'visible'
            cmdNext.style.display = 'block'
            cmdNext.innerHTML = 'volgende »'
            break
    }
}

function showComment(el)
{
    try
    {
        var comm = ctl('rescom_' + el.id.substring(10))
        var disp = (document.all) ? 'block' : 'table-row'

        comm.style.display = (comm.style.display == disp) ? 'none' : disp
    }
    catch(e) {}
}

function showTip(e, disc)
{
    var ie = !e.target

    hideTip(e)
    if (ie) e = event
    var el = (ie) ? e.srcElement : e.target

    with (nextElement((disc) ? el : el.parentNode))
    {
        if (innerHTML.length > 60)
        {
            style.width = '400px'
        }

        var wd = parseInt(style.width.replace('px', ''))

        if (ie)
        {
            style.left = e.clientX + ((disc) ? -wd - 32 : 16) + 'px'
            style.top = (document.documentElement.scrollTop + e.clientY ) + 'px'
        }
           else
        {
            style.left = e.pageX + ((disc) ? -wd - 32 : 16) + 'px'
            style.top = e.pageY + 'px'
        }

        style.display = 'block'
        e.cancelBubble= true
    }
}

function hideTip(e)
{
    if (!e) e = event

    var el = (!e.target) ? e.srcElement : e.target
    var a  = document.getElementsByTagName('div')

    if (a.length == 0) return

    for (var i = 0; i < a.length; i++)
    {
        if (a[i].className == 'helptxt')
        {
            if (a[i] != e.srcElement) a[i].style.display = 'none'
        }
    }
}

// S U B   P A G E

function movePage(direction)
{
    page += (direction > 0) ? 1 : -1

    if (page < 1) page = 1
    if (page > pagelast) page = pagelast

    clickPage(page)

    return false
}

function clickPage(newpage){
    
    if (resultcount == 0) return
    if (resultcount <= pageresults)
    {
        ctl('calc').style.paddingTop = '24px'
        ctl('pagebar_top').style.display = 'none'
        ctl('pagebar_bottom').style.display = 'none'
        ctl('pagelinks_top').style.display = 'none'
        ctl('pagelinks_bottom').style.display = 'none'
    }
      else
    {
        var tbl = ctl('calc')
    	var is_ie6 = navigator.userAgent.indexOf('MSIE 6.0') > 0
    	var is_ie7 = navigator.userAgent.indexOf('MSIE 7.0') > 0
        var showtbody = (is_ie6 || is_ie7) ? 'block' : 'table-row-group'
        page = newpage

        minres = (page - 1) * pageresults + 1
        maxres = page * pageresults
        if (maxres > resultcount) maxres = resultcount

        for (var i = 1; i <= tbl.tBodies.length; i++)
        {
            ctl('resgrp_' + i).style.display = (i == page) ? showtbody : 'none'
            ctl('page_' + i + '_top').className = (i == page) ? 'pagelink_a' : 'pagelink_i'
            ctl('page_' + i + '_bottom').className = (i == page) ? 'pagelink_a' : 'pagelink_i'
        }

        for (var i = 0; i < 2; i++)
        {
            pos = (i == 0) ? 'top' : 'bottom'
            ctl('page_results_' + pos).innerHTML = minres + '&nbsp;t/m&nbsp;' + maxres
            ctl('page_back_' + pos).style.display = (page > 1) ? 'inline' : 'none'
            ctl('page_next_' + pos).className = (page < pagelast) ? 'pagelink_i' : 'pagelink_a'
        }

    }
    return false
}


//  V A L I D A T I O N

function ageByDate(d, birth)
{
    if (!d) d = new Date()

    var v = new Date(d.getFullYear() - birth.getFullYear(),
                     d.getMonth() - birth.getMonth(),
                     d.getDate() - birth.getDate())

    return v.getFullYear() - 1900 + (v.getMonth() * 1 / 12) + (v.getDate() * 1 / 365)
}

function validateNull(nm, i, txt)
{
    if (!ctl(nm).value) return getErr(i, txt)

    return ''
}

function validateNum(value, min, max, is_float)
{
    var n = value.toString()

    if (!is_float)
    {
        n = n.replace('.', '')
        n = parseInt(n.replace(',', ''))
    }
    if (isNaN(parseFloat(n))) return false

    return !(n < min || n > max)
}

function getErr(x, var1)
{

    function addTabs(txt)
    {
        return txt + '\t\t'
    }

    switch(x)
    {
        case 1:  return addTabs('\n- Het verzekerd bedrag kan minimaal €1.000,- zijn of maximaal €1.000.000,-.')
        case 2:  return addTabs('\n- De looptijd mag niet kleiner zijn dan 0 of groter dan 60 jaar.')
        case 3:  return addTabs('\n- Verzekerden zijn tenminste 18 jaar en niet ouder dan 65 jaar.')
        case 4:  return addTabs('\n- De leeftijd van de verzekerde(n) plus de looptijd mag niet groter zijn dan 90.')
        case 5:  return addTabs('\n- Email adres is niet ingevuld')
        case 6:  return addTabs('\n- Algemeen: Straat is niet ingevuld')
        case 7:  return addTabs('\n- Algemeen: Huisnummer is niet ingevuld')
        case 8:  return addTabs('\n- Algemeen: Postcode is niet ingevuld')
        case 9:  return addTabs('\n- Algemeen: Plaats is niet ingevuld')
        case 10: return addTabs('\n- ' + var1 + ': Voorletters zijn niet ingevuld')
        case 11: return addTabs('\n- ' + var1 + ': Achternaam is niet ingevuld')
        case 12: return addTabs('\n- Er is geen telefoonnummer ingevuld')
        case 16: return addTabs('\n- Het product is niet geselecteerd')
        case 17: return addTabs('\n- Algemeen: Postcode is niet correct')
        case 18: return addTabs('\n- Er is geen verzekerde geselecteerd')
        case 19: return addTabs('\n- Er is geen voertuig geselecteerd')
        case 20: return addTabs('\n- De lengte kan minimaal 50cm zijn of maximaal 250cm')
        case 21: return addTabs('\n- Het gewicht kan minimaal 40kg zijn en maximaal 240kg')
        case 22: return addTabs('\n- Het aantal sigaretten kan minimaal 0 stuks zijn en maximaal 50 stuks')
        case 23: return addTabs('\n- De leeftijd van de verzekerde(n) plus de looptijd mag niet groter zijn dan 75.')
        default: return addTabs('Onbekende fout opgetreden')
    }

}

//  C O N T R O L   E V E N T S


function hitRadio(el, nochange)
{
    if (el.childNodes[0].disabled) return

    el.childNodes[0].checked = 'checked'

    if (!nochange) change(el.childNodes[0])
}

function hitCheck(el, nochange)
{
    var chk = el.previousSibling

    chk.checked = !chk.checked

    if (!nochange) change(chk)
}

function hitResult(el)
{
    if (el.childNodes[0].childNodes[0].disabled) return
    el.childNodes[0].childNodes[0].checked = 'checked'
}

function hitSmoker(el)
{
    var inp = el.childNodes[0]
    var id = inp.name.substr(4,1)

    var div = ctl('pers' + id + '_smokerdates')
    div.style.display = (inp.value == '1') ? 'block' : 'none'

    var div = ctl('pers' + id + '_smokerdiv')
    div.style.display = (inp.value == '2') ? 'block' : 'none'

    var txt = ctl('pers' + id + '_smokertxt1')
    txt.innerHTML = (inp.value == '1') ? 'Niet-roker, gestopt op:' : 'Niet-roker (gestopt)'

    var txt = ctl('pers' + id + '_smokertxt2')
    txt.innerHTML = (inp.value == '2') ? 'Roker van tabakswaren' : 'Roker'

    hitRadio(el)
}

function hitMail(el)
{
    var tr = el.parentNode.parentNode

    hitResult(tr.previousSibling)
    requestOffer()
}

function hitTab(ix, hi)
{
    if (!enabled) return
    if (!calc_style) calc_style='orv'

    var pth = 'url("/static/img/rekenmachines/' + calc_style + '_'
    var el = (ctl('cmdStage'+ix))

    if (hi)
    {
        hitCmd(el, 2)
        el.style.backgroundImage = pth + ix + '_now.jpg")'
        return
    }
    if (tabsPast[ix])
    {
        hitCmd(el, 1)
        el.style.backgroundImage = pth + ix + '_past.jpg")'
    }
      else
    {
        hitCmd(el, 0)
        el.style.backgroundImage = pth + ix + '.jpg")'
    }
}

function hitCmd(el, show)
{
    if (!calc_style) calc_style = 'orv'

    for (var i = 0; i < el.childNodes.length; i++)
    {
        if (el.childNodes[i].tagName)
        {
            with (el.childNodes[i])
            {
                style.cursor = (show == 2) ? 'pointer' : 'default'

                var nb = src.substr(src.length - 9, 4)

                src = src.substr(0, src.length - 13) + calc_style + '_' + nb + show + '.gif'
            }
        }
    }
}

function change(el)
{
    if(!el) return

    switch(el.tagName)
    {
        case 'INPUT':
            if (el.type=='text')
            {
                if (el.oldvalue != el.value)
                {
                    changed = true
                    el.oldvalue = el.value
                }
            }
              else
            {
                if (el.oldchecked != el.checked)
                {
                    changed = true
                    el.oldchecked = el.checked
                }
            }
            break

        case 'SELECT':
            if (el.oldselectedIndex != el.selectedIndex)
            {
                changed = true
                el.oldselectedIndex = el.selectedIndex
            }
            break
    }

    tabsPast[2] = false; hitTab(2, 0)
    tabsPast[4] = false; hitTab(4, 0)

    if (document.all) cmdStage4.disabled = true
}

function disable(el, da)
{
    el.disabled=da
    el.style.borderColor = (da) ? '#ccc' : '#5c82a5'
}

function onProductOver(el)
{
    el.style.textDecoration = 'underline'
}

function onProductOut(el)
{
    el.style.textDecoration = 'none'
}


//G E T  -  S E T

function getDate(el, valob)
{
    if (!el) return
    if (!valob) change(el)
    var val = (!valob) ? null : valob.value

    if (val)
    {
        var a = val.split('/')
        val = new Date(parseInt(a[2]), parseInt(a[1]) - 1, parseInt(a[0]))
    }

    switch (el.name.substring(el.name.length - 1))
    {
        case 'm':
            var mon = el
            var yea = el.nextSibling.nextSibling
            break

        case 'y':
            var yea = el
            var mon = el.previousSibling.previousSibling
            break
    }
    var day = mon.previousSibling.previousSibling
    var selday = (!val) ? day.value : val.getDate();      if (!selday) selday = 1
    var selmon = (!val) ? mon.value : val.getMonth() + 1; if (!selmon) selmon = 1
    var selyear= (!val) ? yea.value : val.getFullYear()

    day.options.length = 0
    mon.options.length = 0

    var mmi = yea.value == mon.minDate.getFullYear()
    var mma = yea.value == mon.maxDate.getFullYear()

    for (var i = 0; i < 12; i++)
    {
        if ((!mmi || mon.minDate.getMonth() <= i)
         && (!mma || mon.maxDate.getMonth() >= i))
        {
            var opt = document.createElement('option')
            mon.options.add(opt)
            opt.innerHTML = months[i]
            opt.value = i + 1
        }
    }

    mon.value = selmon
    if (!mon.value) mon.value = mon.childNodes[0].value

    var d  = new Date(yea.value, mon.value, 0)
    var b1 = new Date(yea.value, mon.value - 1, 1) < mon.minDate
    var b2 = new Date(yea.value, mon.value - 1, 1) > mon.maxDate
    var d1 = (!mon.minDate || !b1) ? 1 : mon.minDate.getDate()
    var d2 = (!mon.maxDate || !b2) ? d.getDate() : mon.maxDate.getDate()

    if (new Date(yea.value, mon.value - 1, d2) > mon.maxDate) d2 = mon.maxDate.getDate()

    for (var i = d1; i <= d2; i++)
    {
         var opt = document.createElement('option')
         day.options.add(opt)
         opt.innerHTML = i
         opt.value = i
    }
    day.value = (d.getDate() > selday) ? selday : d.getDate()
    if (!day.value) day.value = d1
}

function setDate(id)
{
    var d = ctl(id + '_d').value
    var m = ctl(id + '_m').value
    var y = ctl(id + '_y').value

    ctl(id).value = d + '/' + m + '/' + y
}

function showDates(adults, childs)
{
    var min          = new Date(ctl('in_startdate_y').value, ctl('in_startdate_m').value - 1, ctl('in_startdate_d').value)
    var minYear      = min.getFullYear()
    var minMonth     = min.getMonth()
    var minDate      = min.getDate()

    var max          = new Date()
    var maxYear      = max.getFullYear()
    var maxMonth     = max.getMonth()
    var maxDate      = max.getDate()

    for (var i = 1; i <= adults; i++)
    {
        val = ctl('pers' + i + '_birth')
        mon = ctl('pers' + i + '_birth_m')
        mon.minDate = new Date(minYear - 66, minMonth, minDate)
        mon.maxDate = new Date(maxYear - 18, maxMonth, maxDate)
        getDate(mon, val)

        val = ctl('pers' + i + '_smokerdate')

        if (val)
        {
            mon = ctl('pers' + i + '_smokerdate_m')
            mon.minDate = new Date(minYear - 18, 1, 1)
            mon.maxDate = new Date(maxYear - 0, 1, 1)
            getDate(mon, val)
        }
    }

    if (!childs) return

    for (var i = 1; i <= childs; i++)
    {
        val = ctl('child' + i + '_birth')
        mon = ctl('child' + i + '_birth_m')
        mon.minDate = new Date(minYear - 18, minMonth, minDate)
        mon.maxDate = new Date(maxYear - 0,  maxMonth, maxDate)
        getDate(mon, val)
    }
}

function getPersons()
{
    return ctl('pers_cnt').value
}

function getChildren()
{
    return ctl('child_cnt').value
}

function getProductSel()
{
    var a = document.getElementsByName('resitm')

    for (var i = 0; i < a.length; i++)
    {
        if (a[i].checked) return a[i].id.substr(7)
    }
}

function getProductRow()
{
    if (sel_row) return sel_row

    var inp = document.getElementById('resitm_' + getProductSel())

    if (inp) return inp.parentNode.parentNode
}

function setOldValues()
{
    var el = document.getElementsByTagName('input')

    for (var i = 0; i < el.length; i++)
    {
        if (el[i].type=='text')
        {
            el[i].oldvalue= el[i].value
        }
          else
        {
            el[i].oldchecked= el[i].checked
        }
    }
    var el = document.getElementsByTagName('select')

    for (var i = 0; i < el.length; i++)
    {
        el[i].oldselectedIndex = el[i].selectedIndex
    }
}



// F O R M A T


function formatZIP(el)
{
    var pc = chkPostcode(el.value)
    if (pc) el.value = pc
}

function formatInitials(el)
{
    var s = '', t = el.value

    t = t.replace(/[.]/g, '')
    t = t.replace(/[ ]/g, '')

    for (var i = 0; i < t.length; i++)
    {
        s += t.charAt(i) + '.'
    }
    el.value = s.toUpperCase()
}

function formatValue(el)
{
    el.value = formatFloat(el.value)
}

function formatNumber(value, use_decimal)
{
    var sNum = value.toString()

    if (sNum && sNum.substr(sNum.length - 3, 1) == '.')
    {
        sNum = sNum.substr(0, sNum.length - 3) + '#' + sNum.substr(sNum.length - 2)
    }
    sNum = sNum.replace('.', '')
    sNum = sNum.replace(',', '')

    var re = /(\d+)(\d{3})/

    while (re.test(sNum))
    {
        sNum = sNum.replace(re, '$1' + '.' + '$2')
    }

    sNum = sNum.replace('#', ',')

    if (use_decimal && sNum && sNum.substr(sNum.length - 3, 1) != ',') sNum = sNum + ',-'

    return sNum
}

function formatFloat(s, dutch, grouping, decimals)
{
    var t = ''

    s = s.toString()
    if (dutch == null)    dutch    = 1
    if (grouping == null) grouping = 1
    if (decimals == null) decimals = 0
    if (s.length == 0)    s = '0.0'

    for (var i = 1; i < 4; i++)
    {
        t = s.substr(s.length - i, 1)
        if ( t == '.' || t == ',') break
    }

    var si = (i < 4) ? s.substr(0, s.length - i) : s
    var sd = (i < 4) ? s.substr(s.length - i + 1) : '00'

    si = si.replace(/[,]/g, '')
    si = si.replace(/[.]/g, ''); s = ''

    for (var i = si.length - 3; i > 0; i -= 3)
    {
        s = '.' + si.substr(i, 3) + s
    }
    s = si.substr((i < 0) ? 0 : i, 3 + i) + s

    if (!grouping)
    {
        s = s.replace('.', '')
    }
      else
    {
        if (!dutch) s = s.replace('.', ',')
    }
    if (sd.length == 1) sd += '0'

    switch (decimals)
    {
        case 0:
            return s

        case 1:
            return s + ((dutch) ? ',' : '.') + ((sd == '00') ? '-' : sd)

        case 2:
            return s + ((dutch) ? ',' : '.') + sd
    }
}

function isNumeric(s)
{
    return s.search(/[^\d]/g) < 0
}


// M I S C


function ctl(id)
{
    return document.getElementById(id)
}

function nextElement(el)
{
    while (!el.nextSibling.tagName) el = el.nextSibling
    return el.nextSibling
}

function previousElement(el)
{
    while (!el.previousSibling.tagName) el = el.previousSibling
    return el.previousSibling
}

function showWait(show)
{
    var cursor = (show) ? 'default' : 'wait'

    document.body.style.cursor=cursor
    ctl('cmdNext').style.cursor=cursor

    for (var i = 0; i < 5; i++)
    {
        if (i != 3) ctl('cmdStage'+i).style.cursor = cursor
    }
}

function chkPostcode(pc)
{
    pc = stripSpacing(pc)

    if (pc.length > 3)
    {
        var pcint = parseFloat(pc.substr(0, 4))

        if (isNaN(pcint))       return false
        if (pcint < 1000)       return false

        var pcstr = pc.substr(4, 2)

        if (pcstr.length != 2)  return false
        if (!isChar(pcstr))     return false

        return pcint + ' ' + pcstr.toUpperCase()
    }

    return false
}

function stripSpacing(s)
{
    s = s.replace(' ', '')
    s = s.replace('\t', '')

    return s.replace('\n', '')
}

function isChar(s)
{
    for (var i = 0; i < s.length; i++)
    {
        if (!((s.charCodeAt(i) > 0x40 && s.charCodeAt(i) <= 0x5A) ||
              (s.charCodeAt(i) > 0x60 && s.charCodeAt(i) <= 0x7A))) return false
    }

    return true
}
