﻿
var msGarbage = navigator.appName.indexOf("Microsoft Internet Explorer") > -1;

// ----------------- EXTRA FUNCTIES ------------------

function get_popupwindow_left(p_intWidth) {
    var x = 0;
    if (document.body.clientWidth) {
        x += document.body.clientWidth / 2;
    }
    else {
        x += window.innerWidth / 2;
    }

    x += document.body.scrollLeft;

    x -= p_intWidth / 2;

    return x;
}

function get_popupwindow_top() {
    var y = 0;

    y += document.body.scrollTop;

    return y;
}

function ajax_request(url, parameters, target_success, target_error) {
    //alert('ajax call  parameters = ' + parameters);
    //return;

    if (global_mx_data != '') {
        if (parameters.length > 0) parameters += '&'
        parameters += global_mx_data;
    }


    $.ajax({
        type: 'POST'
		, url: url
		, data: parameters
		, success: function(msg) {
		    if (msg != '') {
		        if (target_success != null)
		            document.getElementById(target_success).innerHTML = msg;
		        else {
		            var div_success = document.getElementById('div_mx_ajax_success');
		            if (!div_success) {
		                div_success = document.createElement('div');
		                div_success.id = 'div_mx_ajax_success';
		                document.body.appendChild(div_success);
		            }
		            div_success.innerHTML = msg;
		        }

		    }
		}
		, error: function(XMLHttpRequest, textStatus, errorThrown) {
		    if (XMLHttpRequest.responseText != '') {
		        if (target_error != null)
		            document.getElementById(target_error).innerHTML = XMLHttpRequest.responseText;
		        else {
		            var div_error = document.getElementById('div_mx_ajax_error');
		            if (!div_error) {
		                div_error = document.createElement('div');
		                div_error.id = 'div_mx_ajax_error';
		                document.body.appendChild(div_error);
		            }
		            div_error.innerHTML = XMLHttpRequest.responseText;
		        }
		    }
		}
    });
}




// gebruik deze functies bij het onkeypress event.
// (bij onkeydown is de window.event.keyCode een unicode ipv een ascii, en dat maakt vergelijken met - en . onmogelijk.

// backspace, ctrl, enter zijn toegestaan
function checkAllowedKeys(e) {
    var key;
    var isCtrl = false;
    var isShift = false;
    var keychar;
    var isAllowed = false;

    if (window.event) {
        key = window.event.keyCode;
        keychar = String.fromCharCode(key); // is idd een ascii waarde, maar alleen bij het onkeypress event. Anders is het een unicode.
        isCtrl = window.event.ctrlKey;
        isShift = window.event.shiftKey;
    }
    else if (e.which) {
        key = e.which;
        keychar = String.fromCharCode(key); // is goed, 'which' geeft ascii value ... (heb ik ergens gelezen)
        isCtrl = e.ctrlKey;
        isShift = e.shiftKey;
    }

    if (isNaN(key)) isAllowed = true;


    // check for backspace or delete, or if Ctrl was pressed
    if (key == 8 || isCtrl) {
        isAllowed = true;
    }

    return { key: key, keychar: keychar, isAllowed: isAllowed, isShift: isShift };
}


// controleer of het getypte char binnen een string van toegestane chars voor komt.
// er wordt onderscheid gemaakt tussen chars waar de shift-toets van belang is (bij 1,!,2,@,3,#....)
// en waar dat niet van belang is (bij a,A,b,B,c,C....)
function checkChars(keychar, anyChars, isShift, nonShiftChars) {
    if (nonShiftChars.indexOf(keychar) != -1) {  // keychar komt voor in nonShiftChars
        return !isShift;
    }
    return (anyChars.indexOf(keychar) != -1);
}


function checkHex(obj, e) {
    var keys;
    var reg;

    keys = checkAllowedKeys(e);
    //if (keys.key != 16) alert('key=' + keys.key + ' char=' + keys.keychar + ' isallowed=' + keys.isAllowed);

    // default, speciale chars toestaan.
    if (keys.isAllowed) return true;

    // lijstje van toegestane chars controleren
    if (!checkChars(keys.keychar, 'abcdef', keys.isShift, '0123456789')) return false;

    // alle controles zijn gelukt.
    return true;
}



function checkInt(obj, e) {
    var keys;
    var reg;

    keys = checkAllowedKeys(e);
    //if (keys.key != 16) alert('key=' + keys.key + ' char=' + keys.keychar + ' isallowed=' + keys.isAllowed);

    // default, speciale chars toestaan.
    if (keys.isAllowed) return true;

    // lijstje van toegestane chars controleren
    if (!checkChars(keys.keychar, '', keys.isShift, '0123456789')) return false;

    // alle controles zijn gelukt.
    return true;
}

function checkIntSigned(obj, e) {
    var keys;
    var reg;

    keys = checkAllowedKeys(e);
    //if (keys.key != 16) alert('key=' + keys.key + ' char=' + keys.keychar + ' isallowed=' + keys.isAllowed);

    // default, speciale chars toestaan.
    if (keys.isAllowed) return true;

    // lijstje van toegestane chars controleren
    if (!checkChars(keys.keychar, '', keys.isShift, '-0123456789')) return false;

    // overige controle
    if (keys.keychar == '-') {
        // alleen het eerste teken mag negatief zijn
        // dus of string='', of anders moet je op de 1e positie zitten...
        return (obj.value.length == 0 || getSelectionStart(obj) == 0);
    }

    // alle controles zijn gelukt.
    return true;
}


function checkDouble(obj, e) {
    var keys;
    var reg;

    keys = checkAllowedKeys(e);
    //if (keys.key != 16) alert('key=' + keys.key + ' char=' + keys.keychar + ' isallowed=' + keys.isAllowed);

    // default, speciale chars toestaan.
    if (keys.isAllowed) return true;

    // lijstje van toegestane chars controleren
    if (!checkChars(keys.keychar, '', keys.isShift, '.,-0123456789')) return false;

    // overige controle
    if (keys.keychar == '-') {
        // alleen het eerste teken mag negatief zijn
        // dus of string='', of anders moet je op de 1e positie zitten...
        return (obj.value.length == 0 || getSelectionStart(obj) == 0);
    }

    // er mag hooguit 1 punt (of comma) in het getal voorkomen.
    var count = 0;
    var i;
    if (keys.keychar == '.' || keys.keychar == ',') {
        count = 1;  // je typt er nu eentje in.
        for (i = 0; i < obj.value.length; i++) {
            if (obj.value.charAt(i) == '.' || obj.value.charAt(i) == ',') count += 1;
        }
        if (count > 1) return false;  // er mag maar 1 punt/komma zijn.
    }

    // alle controles zijn gelukt.
    return true;
}


// gekopieerd van http://javascript.nwbox.com/cursor_position/cursor.js
function getSelectionStart(o) {
    if (o.createTextRange) {
        var r = document.selection.createRange().duplicate()
        r.moveEnd('character', o.value.length)
        if (r.text == '') return o.value.length
        return o.value.lastIndexOf(r.text)
    } else return o.selectionStart
}

function getSelectionEnd(o) {
    if (o.createTextRange) {
        var r = document.selection.createRange().duplicate()
        r.moveStart('character', -o.value.length)
        return r.text.length
    } else return o.selectionEnd
}


function getE(p_strId) {
    var element = document.getElementById(p_strId);
    if (!element) {
        var elements = document.getElementsByName(p_strId);
        if (elements.length > 0) {
            element = elements[0];
        }
    }
    return element;
}

// deze functie mag per applicatie verschillen...
function table_selection_td_selectable(p_elementTD, x, y) {
    var blnResult;
    // in deze applicatie...
    if (p_elementTD.className == 'calendarEmpty' || x == 0 || y == 0)
        blnResult = false;
    else
        blnResult = true;

    return blnResult;
}

// deze functie mag ook verschillen
// default: per rij selecteren.
// via deze functie kun je (true) een block-selectie aanzetten.
function table_select_type_block(p_x1, p_y1, p_x2, p_y2) {
    // in dit geval, als je teveel regels overschrijdt, wordt het geinterpreteerd als een block-type.
    // ook is het een persistent iets.
    return (table_select_type == 2 || Math.abs(p_y2 - p_y1) > 3);
}



var table_selection_property = new Array();
var table_selection_active = false;
var table_selection_start_x = 0;
var table_selection_start_y = 0;
var table_selection_end_x = 0;
var table_selection_end_y = 0;
var table_width = 0;
var table_height = 0;
var table_elementTable = null;
var table_select_type = 1; 			// 1: per rij, 2: als blok


// dit geeft de selectie weer.
// dit negeert de eerste kolom/rij, want die zijn er alleen voor commentaar.
function table_get_selection(p_blnIgnoreFirstRow, p_blnIgnoreFirstColumn) {
    var ix, iy, k;
    var ymin = 0;
    var xmin = 0;
    var strResult = '';

    if (p_blnIgnoreFirstRow == true)
        ymin = 1;
    if (p_blnIgnoreFirstColumn == true)
        xmin = 1;

    for (iy = ymin; iy < table_height; iy++) {
        for (ix = xmin; ix < table_width; ix++) {
            k = ix + iy * table_width;
            if (table_selection_property[k].blnSelected == true) {
                if (strResult != '')
                    strResult += ',';

                k = (ix - xmin) + (iy - ymin) * (table_width - xmin);
                strResult += k;
            }
        }
    }
    return strResult;
}

// een object om een table-element te beschrijven:
function table_selection_properties(p_intOldColor, p_strOldImage) {
    this.blnSelected = false;
    this.intOldColor = p_intOldColor;
    this.strOldImage = p_strOldImage;
    this.intNewColor = 0;
}

function table_selection_init(p_elementTable) {
    var ix, iy, k;

    if (p_elementTable != null) {
        table_elementTable = p_elementTable;
        table_height = table_elementTable.rows.length;
        table_width = 0;

        // controleer of alle rijen dezelfde lengte hebben
        for (iy = 0; iy < table_height; iy++) {
            //alert('iy = ' + iy + '  lengte = ' + table_elementTable.rows.item(iy).cells.length);
            if (table_width == 0)	// initialisatie
                table_width = table_elementTable.rows.item(iy).cells.length;
            else if (table_width != table_elementTable.rows.item(iy).cells.length)	// controle
            {
                alert('Tabel bevat ongelijke rij-lengtes - operatie afgebroken (rij=' + iy + ' vorige lengte=' + table_width + ' nieuwe lengte=' + table_elementTable.rows.item(iy).cells.length)
                return false;
            }
        }

        //alert('Table Init: id = ' + table_elementTable.id +  '  w = ' + table_width + '  h = ' + table_height);

        for (iy = 0; iy < table_height; iy++) {
            for (ix = 0; ix < table_width; ix++) {
                k = ix + iy * table_width;
                var el = table_elementTable.rows.item(iy).cells.item(ix);
                table_selection_property[k] = new table_selection_properties(el.style.backgroundColor, el.style.backgroundImage);
            }
        }
    }
}

function js_intDirection(p_x1, p_y1, p_x2, p_y2) {
    var intDirection = 0;

    if (p_y1 < p_y2) {
        // normaal
        intDirection = 1;
    } else if (p_y1 == p_y2) {
        if (p_x1 <= p_x2) {
            // normaal
            intDirection = 1;
        } else {
            // omgekeerd
            intDirection = -1;
        }
    } else {
        // omgekeerd
        intDirection = -1
    }

    return intDirection;
}

function table_selection_extend() {
    var x1, y1, x2, y2;
    var blnAdd = false;
    var xmin, xmax;

    if (js_intDirection(table_selection_start_x, table_selection_start_y, table_selection_end_x, table_selection_end_y) == 1) {
        y1 = table_selection_start_y;
        y2 = table_selection_end_y;
        x1 = table_selection_start_x;
        x2 = table_selection_end_x;
    } else {
        y2 = table_selection_start_y;
        y1 = table_selection_end_y;
        x2 = table_selection_start_x;
        x1 = table_selection_end_x;
    }
    //alert('Extend: x1=' + x1 + ' y1=' + y1 + 'x2=' + x2 + ' y2=' + y2);

    // afhankelijk van de status van de beginpositie: selectie toevoegen of verwijderen.
    k = table_selection_start_x + table_selection_start_y * table_width;
    if (table_selection_property[k].blnSelected == false)
        blnAdd = true;
    else
        blnAdd = false;

    //var comment = 'table_selection_extend: ';
    var ix, iy, k;
    for (iy = y1; iy <= y2; iy++) {
        if (table_select_type == 1) {
            // selecteer een rij of deel van een rij.
            xmin = 0;
            xmax = table_width - 1;
            if (iy == y1)
                xmin = x1;
            if (iy == y2)
                xmax = x2;
        } else {
            // selecteer een deel van een blok
            xmin = Math.min(x1, x2);
            xmax = Math.max(x1, x2);
        }

        for (ix = xmin; ix <= xmax; ix++) {
            k = ix + iy * table_width;
            //comment += ' ' + k;

            if (blnAdd == true) {
                // selectie toevoegen
                if (table_selection_property[k].blnSelected == false) {
                    if (table_selection_td_selectable(table_elementTable.rows.item(iy).cells.item(ix), ix, iy) == true)	// alleen als dit element aangepast mag worden.
                    {
                        table_selection_property[k].blnSelected = true;
                        //comment += ' add';
                    }
                }
            } else {
                // selectie wissen
                table_selection_property[k].blnSelected = false;
                //comment += ' del';
            }
        }
    }

    /*
    //test:
    for ( k = 0; k < table_width*table_height; k++ )
    {
    if (table_selection_property[k].blnSelected == true)
    comment += ' ' + k + '=true';
    }
    alert(comment);
    */
}


function table_selection_start(ev, p_elementTD) {
    if (ev == null)
        ev = window.event;

    // accepteer alleen de linker muisknop
    if (ev.button != 1)
        return true;

    var elementTR = p_elementTD.parentNode;
    var elementTable = elementTR.parentNode;

    if (table_width == 0 || table_height == 0)
        table_selection_init(elementTable)

    // tabel-kleuren terugzetten bij de start van een nieuwe selectie.
    table_setcolor(elementTable, -1, -1, -1, -1, '#FFFFFF'); // dit wist de oude selectie-kleuren.

    table_selection_active = true;
    table_selection_start_x = p_elementTD.cellIndex;
    table_selection_start_y = elementTR.rowIndex;
    table_selection_end_x = table_selection_start_x;
    table_selection_end_y = table_selection_start_y;
    table_select_type = 1; // default
    //alert(' x = ' + document.table_selection_start_x + ' y = ' + document.table_selection_start_y );

    return true;
}

function table_selection_end(ev, p_elementTD) {
    if (table_selection_active == true) {
        if (ev == null)
            ev = window.event;

        // accepteer alleen de linker muisknop
        if (ev.button != 1)
            return true;

        table_selection_active = false;
        table_selection_end_x = p_elementTD.cellIndex;
        table_selection_end_y = p_elementTD.parentNode.rowIndex;

        table_selection_extend();
        table_setcolor(table_elementTable, -1, -1, -1, -1, '#FFFFFF'); // dit wist de oude selectie-kleuren.
    }

    return true;
}

function table_selection_restore(p_strSelection) {
    var strCells = p_strSelection.split(',');
    var i;
    for (i = 0; i < strCells.length; i++) {
        table_selection_property[i].blnSelected = true;
    }

    table_setcolor(table_elementTable, -1, -1, -1, -1, '#FFFFFF'); // dit wist de oude selectie-kleuren.
}

function table_selection_clear() {
    var i;
    for (i = 0; i < table_selection_property.length; i++) {
        table_selection_property[i].blnSelected = false;
    }

    table_setcolor(table_elementTable, -1, -1, -1, -1, '#FFFFFF'); // dit wist de oude selectie-kleuren.
}

function table_setcolor(elementTable, p_x1, p_y1, p_x2, p_y2, color) {
    var x1, y1, x2, y2;
    var blnAdd = false;

    if (js_intDirection(p_x1, p_y1, p_x2, p_y2) == 1) {
        x1 = p_x1;
        y1 = p_y1;
        x2 = p_x2;
        y2 = p_y2;
    } else {
        x1 = p_x2;
        y1 = p_y2;
        x2 = p_x1;
        y2 = p_y1;
    }
    var rows = elementTable.rows;

    if (p_y1 >= 0) {
        // afhankelijk van de status van de beginpositie: selectie toevoegen of verwijderen.
        k = p_x1 + p_y1 * table_width;
        if (table_selection_property[k].blnSelected == false)
            blnAdd = true;
        // anders is hij al false.
    }

    // kleuren aanpassen van alle elementen tussen x1,y1 en x2,y2
    var k;
    var ix, iy;

    // kleuren "wissen" (reset op grond van de oude selectie)
    for (iy = 0; iy < table_height; iy++) {
        for (ix = 0; ix < table_width; ix++) {
            k = ix + iy * table_width;
            if (table_selection_property[k].blnSelected == true)
                table_selection_property[k].intNewColor = color;
            else
                table_selection_property[k].intNewColor = table_selection_property[k].intOldColor;
        }
    }

    if (p_y1 >= 0) {
        // de huidige selectie bekijken	
        for (iy = y1; iy <= y2; iy++) {
            // grens binnen een row bepalen.
            var cells = rows.item(iy).cells;

            var xmin;
            var xmax;

            if (table_select_type == 1) {
                // selecteer een rij/deel van een rij.
                xmin = 0;
                xmax = cells.length - 1;
                if (iy == y1)
                    xmin = x1;
                if (iy == y2)
                    xmax = x2
            } else {
                // selecteer een deel van een blok
                xmin = Math.min(x1, x2);
                xmax = Math.max(x1, x2);
            }

            for (ix = xmin; ix <= xmax; ix++) {
                k = ix + iy * table_width;
                var element_td = cells.item(ix);

                if (blnAdd == true) {
                    if (table_selection_td_selectable(element_td, ix, iy) == true) {
                        // geselecteerd, dus de nieuwe kleur hier laten verschijnen.
                        // dit is een nieuwe selectie, dus niet af laten hangen van overige selectie (die wordt overschreven).
                        table_selection_property[k].intNewColor = color;

                        /*
                        if (element_td.old_color == null)
                        element_td.old_color = element_td.style.backgroundColor;
							
						if (color != '')
                        element_td.style.backgroundColor = color;
                        else if (element_td.old_color != null)
                        element_td.style.backgroundColor = element_td.old_color;
                        */
                    }
                } else {
                    // selectie verwijderd, dus de oude kleur
                    table_selection_property[k].intNewColor = table_selection_property[k].intOldColor;
                }
            }
        }
    }

    // de opgeslagen kleuren toepassen op de tabel
    for (iy = 0; iy < table_height; iy++) {
        var cells = rows.item(iy).cells;

        for (ix = 0; ix < table_width; ix++) {
            k = ix + iy * table_width;
            var el = cells.item(ix);
            if (el.style.backgroundColor != table_selection_property[k].intNewColor) {
                el.style.backgroundColor = table_selection_property[k].intNewColor;
                if (table_selection_property[k].intNewColor == table_selection_property[k].intOldColor)
                    el.style.backgroundImage = table_selection_property[k].strOldImage;
                else
                    el.style.backgroundImage = 'url()';
            }
        }
    }
}

function table_selection_render(ev, element) {
    if (ev == null)
        ev = window.event;

    // accepteer alleen de linker muisknop
    if (ev.button != 1)
        return true;

    if (table_selection_active == true) {
        var temp = 0;
        var x1, y1;
        var x2, y2;
        var elementTR = element.parentNode;
        var elementTable = elementTR.parentNode;

        // grenzen bepalen.
        /*
        x1 = element.cellIndex;
        y1 = elementTR.rowIndex;
        x2 = document.table_selection_end_x;
        y2 = document.table_selection_end_y;
        table_setcolor(elementTable, x1, y1, x2, y2, '');
        */

        x1 = table_selection_start_x;
        y1 = table_selection_start_y;
        x2 = element.cellIndex;
        y2 = elementTR.rowIndex;

        if (table_select_type_block(x1, y1, x2, y2) == true)
            table_select_type = 2;
        else
            table_select_type = 1;

        //alert('Render! x1=' + x1 + ' y1=' + y1 + 'x2=' + x2 + ' y2=' + y2);
        table_setcolor(table_elementTable, x1, y1, x2, y2, '#FFFFFF');

        // het tijdelijke einde bijhouden.
        table_selection_end_x = x2;
        table_selection_end_y = y2;
    }

    return true;
}



// loopt oneindig door;
// schrijft de waarde die uit de cardreader wordt opgehaald naar het veld crd_mifarenumber.
function doCheckReader() {
    var cr = document.getElementById('CardReader');

    try {
        var bit = cr.doCheck();

        if (bit != '') {
            //alert(bit); 
            var element = document.getElementById('crd_mifarenumber');
            if (bit != element.value) {
                element.value = bit; // dit bevat de waarde die de pas doorgeeft.
                if (element.onpaste) {
                    element.onpaste(); // het bijbehorende event triggeren.
                }
            }
        };
    } catch (err) {
    };

};


/* deze gebruik ik niet meer: te ingewikkeld omdat verschillende browsers verschillende functies/eigenschappen van elementen gebruiken.
Ik laat het staan ter referentie, misschien is het ooit nog eens handig.
function js_recurse_area_left(obj)
{
var p = obj;
var x = obj.offsetLeft;
while (p.parentNode != null)
{
p = p.parentNode;
if (p.offsetLeft)	// not 0, not undefined
{
x += p.offsetLeft;
}
}
return x;
}

// dit bekijkt het oppervlak van een element
function js_inside_area(obj, e, p_px_left)
{
if (e == null)
{
e = window.event;
}
	
//alert('clientX = ' + e.clientX + 'layerX = ' + e.layerX + 'pageX = ' + e.pageX + 'screenX = ' + e.screenX + '  objOffsetX=' + js_recurse_area_left(obj));

//dit werkt in explorer:
if (obj.getBoundingClientRect)
{
var oRect = obj.&nbsp;getBoundingClientRect();
var px_rel_mouse = e.clientX - oRect.left;	// relatieve muis-positie binnen het object.
if (px_rel_mouse > p_px_left)
{
return true;
} else {
return false;
}
} else if (obj.getBoxObjectFor) {
var oRect = doc.getBoxObjectFor(viewportElement);
alert('posX = ' + oRect.screenX);
} else {
}
}
*/


// Houd een lijst bij van welke keys zijn ingedrukt/losgelaten, je moet dit toepassen of document-niveau (keydown/keyup events -> value=1/0).
//zoals dit aan het begin van je pagina: strResult.AppendLine("<script type=""text/javascript"">document.onkeyup=js_key_up;document.onkeydown=js_key_down</script>")
var keys = new Array()
function js_key_change(e, p_value) {
    if (e.keyCode > 0 && e.keyCode < 100) {
        if (keys[e.keyCode] != p_value)		// doe niets als de waarde onveranderd blijft.
        {
            keys[e.keyCode] = p_value;

            // extra: activeer het "huidige& element, als dat bestaat.
            // dit moet apart worden bijgehouden
            if (document.current_element) {
                // voer een event-functie uit als terugkoppeling.
                // hetzelfde als wanneer een element aandacht krijgt.
                document.last_inp_hidden = null; 												// reset de referentie naar het laatste aangepaste element (=specifiek voor deze applicatie)
                document.current_element.onmouseover(e);
            }
        }
    }
}

function js_key_down(e) {
    if (!e) var e = window.event		// dit is nodig voor IE ; Firefox geeft het via het argument door.
    js_key_change(e, 1);
    //alert(keys);
}
function js_key_up(e) {
    if (!e) var e = window.event
    js_key_change(e, 0);
}



function js_radio_clear(p_strRadioButtons) {
    var elements = document.getElementsByName(p_strRadioButtons)
    for (var i = 0; i < elements.length; i++) {
        elements[i].checked = false;
    }
}


// genereert een random getal van 0-9.
function js_random_number(p_intNumChars) {
    var strResult = '';
    for (var i = 0; i < p_intNumChars; i++) {
        strResult += Math.floor(Math.random() * 10.0);
    }
    return strResult;
}


// reset de inhoud van de genoemde velden.
// de waarde wordt ''
//

function js_clear_fields() {
    for (var i = 0; i < arguments.length; i++) {
        var element = document.getElementById(arguments[i]);
        if (element != null) {
            if (element.value != 'undefined') {
                element.value = '';
            }
        }
    }
}


// ondersteuning voor cookies: om een langere query-style cookie te schrijven
// waar waardes uit velden in worden gestopt (via ID benaderen)
// Je kunt een lijst van IDs doorgeven. Het eerste argument moet de cookiename zijn.

function js_getElementByIdOrName(p_strIdOrName) {
    var element = null;
    element = document.getElementById(p_strIdOrName); // zoek op eerste ID
    //alert('Get: op ID');
    if (element == null) {
        var elements = document.getElementsByName(p_strIdOrName);
        //alert('Get: op Name, aantal=' + elements.length);
        if (elements.length > 0) {
            element = elements[0]; // zoek op eerste Name (Firefox doet dit alternatief niet automatisch).
        }
    }
    return element;
}

function js_set_cookie_query_checkboxes(p_strName)	// naam + onbekend aantal argumenten
{
    var strQuery = '';
    for (var i = 1; i < arguments.length; i++) {
        var element = null;
        element = js_getElementByIdOrName(arguments[i]); // zoek op eerste ID
        //alert('Veldkeuze-cookie = ' + arguments[i] + ' element = ' + element);

        if (element != null && element.checked == true && element.value != '') {
            if (strQuery != '') {
                strQuery += '&';
            }
            strQuery += arguments[i] + '=' + element.value;
        }
    }
    if (strQuery != '') {
        var days = 100;
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = '; expires=' + date.toGMTString();

        document.cookie = p_strName + '=' + strQuery + expires;
        //js_setCookie(p_strName, strQuery);
        return true;
    } else {
        return false;
    }
}

// activeer het element via een andere bron (bijv. een TD element)
// aanzetten
function InpYNSet(inp_id) {
    return InpYNChange(inp_id, true)
}

// uitzetten
function InpYNCancel(inp_id) {
    return InpYNChange(inp_id, false)
}

// verandering (aan of uit)
function InpYNChange(inp_id, valueYN) {
    if (valueYN != true && valueYN != false) {
        return false;
    }

    var inp_hidden = document.getElementById(inp_id);

    if (inp_hidden != null) {

        // aanpassen indien nodig:
        if (inp_hidden.checked != valueYN && inp_hidden.style.display != 'none') {
            inp_hidden.checked = valueYN;
            inp_hidden.update();
        }
        return true;
    } else {
        return false;
    }
}


// dit wordt direct uitgevoerd.
document.last_inp_hidden = null

// verandering (aan of uit)
function InpYNToggle(inp_id) {

    var inp_hidden = document.getElementById(inp_id);

    if (inp_hidden != null && inp_hidden != document.last_inp_hidden && inp_hidden.style.display != 'none') {

        inp_hidden.checked = !inp_hidden.checked;

        if (inp_hidden.update) {
            inp_hidden.update();
        }
        document.last_inp_hidden = inp_hidden;
        return true;
    } else {
        return false;
    }
}

// activeer het element via een andere bron (bijv. een TD element)
function InpYNActivate(element, inp_id) {
    InpYNClick_inp(inp_id)
}

// activeer het element door op het gerelateerde image te klikken
function InpYNClick(img) {
    InpYNClick_inp(img.refid)
}

function InpYNClick_inp(inp_id) {
    if (inp_id == '') {
        return false
    }

    var inp_hidden = document.getElementById(inp_id);

    //var img = inp_hidden.img

    if (inp_hidden != null && inp_hidden.style.display != 'none') {
        if (inp_hidden.checked != true) {
            inp_hidden.checked = true;
            //inp_hidden.value = inp_hidden.value_on;
            //img.src = img.src_on;
        } else {
            inp_hidden.checked = false;
            //inp_hidden.value = '';
            //img.src = img.src_off;
        }

        if (inp_hidden.update) {
            inp_hidden.update()
        }
    }

    return true
}

function InpYNUpdate() {
    if (this.checked == true) {
        this.value = this.value_on;
        this.img.src = this.img.src_on;
    } else {
        this.value = '';
        this.img.src = this.img.src_off;
    }
}

function InpYNInit(ImgsName, ImgSrc_off, ImgSrc_on) {
    //alert('init start ' + ImgsName);
    var imgs = document.getElementsByName(ImgsName);

    for (var i = 0; i < imgs.length; i++) {
        var img = imgs[i];
        if (i < 1) {
            //alert('img = ' + img + ' img.refid = ' + img.refid);
        }
        // in FireFox: img.refig=undefined...

        var inp_hidden = document.getElementById(img.refid);
        if (inp_hidden != null) {
            // it's checked if it's been defined.

            inp_hidden.checked = (inp_hidden.initstate == 'True')
            inp_hidden.img = img; // referentie naar het image

            img.src_off = ImgSrc_off;
            img.src_on = ImgSrc_on;
            inp_hidden.update = InpYNUpdate

            inp_hidden.value_on = inp_hidden.value;

            if (inp_hidden.checked != true) {
                img.src = img.src_off;
                inp_hidden.value = '';
            } else {
                img.src = img.src_on;
                inp_hidden.value = inp_hidden.value_on;
            }
        }

    }
}




// overschrijf waarde van een select-box, indien de waarde nonzero is.
// het is voldoende om de "value" aan te passen.
function write_select(p_selectId, p_selectValue) {
    if ((p_selectValue != 0) & (p_selectValue != "")) {
        var element = document.getElementById(p_selectId)
        if (element != "undefined") {
            element.value = p_selectValue
        }
    }
}


// controleert of er tenminste een checkbox met een bepaalde naam is geselecteerd.
function checkboxes_named_selected(checkbox_name) {
    var checkbox_list = document.getElementsByName(checkbox_name);
    var count = 0;

    for (var i = 0; i < checkbox_list.length; i++) {
        if (checkbox_list[i].checked) {
            count += 1;
        }
    }

    if (count == 0) {
        //alert('Er zijn lege elementen');
        for (var i = 0; i < checkbox_list.length; i++) {
            checkbox_list[i].style.backgroundColor = '#ff5a27';
        }
        return false;
    }
    else {
        for (var i = 0; i < checkbox_list.length; i++) {
            checkbox_list[i].style.backgroundColor = '';
        }
        return true;
    }
}

// variatie op js_toggle.
// dit keer wordt de waarde standaard uitgezet, voor 1 element.

function js_toggle_off(p_Id) {
    var element;

    element = document.getElementById(p_Id);

    if (element != null) {
        element.style.display = 'none';
    }
}

// variatie op js_toggle.
// dit keer worden de waardes gekopieerd voor het element met een bepaald Id.

function js_toggle_set_byId(p_Id, p_RefId) {
    var elementRef;
    var element;

    element = document.getElementById(p_Id);
    elementRef = document.getElementById(p_RefId);

    if (element != null && elementRef != null) {
        element.style.display = elementRef.style.display;
    }
}

// variatie op js_toggle.
// dit keer worden de waardes bijgewerkt voor alle elementen met een bepaalde naam.

function js_toggle_set_byname(p_name, p_RefId) {
    var elementRef;
    var list;

    elementRef = document.getElementById(p_RefId);
    if (elementRef != null) {
        list = document.getElementsByName(p_name);

        for (var i = 0; i < list.length; i++) {
            list[i].style.display = elementRef.style.display;
        }
    }
}

// variatie op js_toggle.
// dit keer wordt de waarde bijgewerkt in een bijbehorend hidden-input veld.

function js_toggle_stored(p_id) {
    var element;

    element = document.getElementById(p_id);

    if (element != null) {

        if (element.style.display == 'block') {
            element.style.display = 'none';
        }
        else {
            element.style.display = 'block';
        }

        element_form = document.getElementById(p_id + '_Form');

        //alert('Adjusting value: ' + element.id + '.value=' + element.value + '  element_Form_Id = ' + p_id + '_Form');


        if (element_form != null) {
            element_form.value = element.style.display;
            //alert('Adjusting form value: ' + element_form.id + '.value=' + element_form.value);
        }
    }
}


// variatie op js_toggle.
// dit keer wordt de focus op een nieuw veld gelegd.

function js_toggle_refocus(p_id, focus_old, focus_new) {
    var element = document.getElementById(p_id)
    var focus2 = document.getElementById(focus_old)
    var focus1 = document.getElementById(focus_new)

    if (element.style.display == 'block') {
        element.style.display = 'none'
        focus1.focus()
    }
    else {
        element.style.display = 'block'
        focus2.focus()
    }
}



// checkboxes toggle.
// kopieert de waarde van een referentie-checkbox met een bepaalde ID naar alle checkboxes met een bepaalde Name
function toggleCheckboxes(name_copy, name_change) {
    var refcheckbox = document.getElementById(name_copy)
    var checkboxes = document.getElementsByName(name_change)

    if (checkboxes != "undefined") {

        //var checkboxcomment = ''

        if (checkboxes.length != 0) // oud: if (checkboxes.length != 'undefined')
        {
            for (var i = 0; i < checkboxes.length; i++) {
                checkboxes[i].checked = refcheckbox.checked
                if (checkboxes[i].update) {
                    checkboxes[i].update()		// indien nodig, updates vanwege die verandering in checked-waarde
                }
                //checkboxcomment += checkboxes[i].checked  + ','
            }
        } else {
            //checkboxes.checked = refcheckbox.checked
        }

        //alert(name_copy + ' ' + name_change + ' ' + checkboxes.length + ' ... ' + checkboxcomment)
    }
}

// -------------------- EINDE EXTRA FUNCTIES ----------------------


function toggleMenu(p_strID) {
    if (document.frmMenu.Menustate.value.indexOf(p_strID) > 0) {
        document.frmMenu.Menustate.value = document.frmMenu.Menustate.value.replace(p_strID + ',', '');
    }
    else {
        document.frmMenu.Menustate.value = document.frmMenu.Menustate.value + p_strID + ',';
    }
    js_toggle(p_strID);
    js_setCookie('Menu', document.frmMenu.Menustate.value, 10);
}

function js_toggle(p_id) {
    if (document.getElementById(p_id).style.display == 'none') {
        document.getElementById(p_id).style.display = 'block'
    }
    else {
        document.getElementById(p_id).style.display = 'none'
    }
}


function js_toggle_oud(p_id) {
    if (document.getElementById(p_id).style.display == 'none') {
        document.getElementById(p_id).style.display = 'block'
        new Effect.SlideDown(p_id, { duration: 0.5 });
        document.getElementById(p_id).style.display = 'none'
    }
    else {
        document.getElementById(p_id).style.display = 'none'
        new Effect.SlideUp(p_id, { duration: 0.5 });
        document.getElementById(p_id).style.display = 'block'
    }
}

function js_toggleTree(p_strID) {
    var TreeState;

    TreeState = document.frmForm.Treestate.value;

    TreeState = TreeState.replace('undefined', '');
    TreeState = TreeState.replace('null', '');
    TreeState = ',' + TreeState + ',';

    while (TreeState.indexOf(',,') >= 0) {
        TreeState = TreeState.replace(',,', ',');
    };

    if (TreeState.indexOf(',' + p_strID + ',') >= 0) {
        var arrTree;
        var i;
        var NewTree;

        NewTree = ',';

        arrTree = TreeState.substring(1, TreeState.length - 1).split(',');
        for (i = 0; i < arrTree.length; i++) {
            if (arrTree[i].substring(0, p_strID.length) == p_strID) {
                if (arrTree[i] == p_strID) {
                    // exact match, deze wordt later getoggled;
                } else {
                    // alert(arrTree[i])
                    toggleIcon(arrTree[i]);
                    js_toggle(arrTree[i]);
                };
            } else {
                // node met rust laten
                NewTree = NewTree + arrTree[i] + ',';
            };

        };
        TreeState = NewTree;
        //TreeState = TreeState.replace(p_strID + ',','');
    } else {
        TreeState = TreeState + p_strID + ',';
    }

    document.frmForm.Treestate.value = TreeState;

    toggleIcon(p_strID);
    js_toggle(p_strID);
    js_setCookie('Tree', TreeState, 10);
}

function js_confirmDelete(p_strURL) {
    if (confirm('Wilt u dit onderdeel verwijderen?') == true) {
        location.replace(p_strURL)
    }
}

function js_confirmDeleteIframe(url, confirmText, title, iFrameName, iFrameWidth, iFrameHeight, iFrameLeft, iFrameTop, onClose) {
    if (confirm(confirmText) == true) {
        iFrameBox(url, title, iFrameName, iFrameWidth, iFrameHeight, iFrameLeft, iFrameTop, onClose)
    }
}

function js_confirmUnDelete(p_strURL) {
    if (confirm('Wilt u deze verwijdering ongedaan maken?') == true) {
        location.replace(p_strURL)
    }
}

function js_confirmCopy(p_strURL) {
    if (confirm('Wilt u dit onderdeel copieren?') == true) {
        location.replace(p_strURL)
    }
}

function js_openFullscreenWindow(p_strURL) {
    window.open(p_strURL, "_blank", "fullscreen=yes,resizable=no,scrollbar=no,scrolling=no")
}


function js_setCookie(name, value, days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
        var expires = "; expires=" + date.toGMTString();
    }
    else var expires = "";
    document.cookie = name + "=" + value + expires + "; path=/";
}


function js_getCookie(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for (var i = 0; i < ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0) == ' ') c = c.substring(1, c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
    }
    return null;
}

function js_replace(p_value, p_replace_value, p_replace_by) {
    var strValue = p_value;
    strValue = strValue.replace(p_replace_value, p_replace_by);
    return strValue;
}

/*************************************************************************************************
***
***		FUNCTIES t.b.v. picklist
***
*************************************************************************************************/
function copyToList(from, to) {
    fromList = eval('document.frmForm.' + from);
    toList = eval('document.frmForm.' + to);
    if (toList.options.length > 0 && toList.options[0].value == 'temp') {
        toList.options.length = 0;
    }
    var sel = false;
    for (i = 0; i < fromList.options.length; i++) {
        var current = fromList.options[i];
        if (current.selected) {
            sel = true;
            if (current.value == 'temp') {
                alert('Deze optie mag niet verplaatst worden!');
                return;
            }
            txt = current.text;
            val = current.value;
            toList.options[toList.length] = new Option(txt, val);
            fromList.options[i] = null;
            i--;
        }
    }
}

function compareOptionValues(a, b) {
    var sA = parseInt(a.value, 36);
    var sB = parseInt(b.value, 36);
    return sA - sB;
}

function compareOptionText(a, b) {
    var sA = parseInt(a.text, 36);
    var sB = parseInt(b.text, 36);
    return sA - sB;
}

function moveDualList(srcList, destList, moveAll) {
    if ((srcList.selectedIndex == -1) && (moveAll == false)) {
        return;
    }
    newDestList = new Array(destList.options.length);
    var len = 0;
    for (len = 0; len < destList.options.length; len++) {
        if (destList.options[len] != null) {
            newDestList[len] = new Option(destList.options[len].text, destList.options[len].value, destList.options[len].defaultSelected, destList.options[len].selected);
        }
    }
    for (var i = 0; i < srcList.options.length; i++) {
        if (srcList.options[i] != null && (srcList.options[i].selected == true || moveAll)) {
            newDestList[len] = new Option(srcList.options[i].text, srcList.options[i].value, srcList.options[i].defaultSelected, srcList.options[i].selected);
            len++;
        }
    }
    for (var j = 0; j < newDestList.length; j++) {
        if (newDestList[j] != null) {
            destList.options[j] = newDestList[j];
        }
    }
    for (var i = srcList.options.length - 1; i >= 0; i--) {
        if (srcList.options[i] != null && (srcList.options[i].selected == true || moveAll)) {
            //srcList.options[i].value = "";
            //srcList.options[i].text  = "";
            srcList.options[i] = null;
        }
    }
}

/*************************************************************************************************
***
***		OVERIGE FUNCTIES
***
*************************************************************************************************/
function showNote(what, eventDOM) {
    var currentLayer = document.getElementById(what);
    if (msGarbage) {
        xPos = event.clientX + document.body.scrollLeft;
        yPos = event.clientY + document.body.scrollTop;
        Xwindow = document.body.scrollWidth;
        Ywindow = document.body.scrollHeigth;
    }
    else {
        xPos = eventDOM.pageX;
        yPos = eventDOM.pageY;
        Xwindow = 0;
        YWindow = 0;
    }
    //	alert(xPos);
    //	alert(yPos);
    with (currentLayer.style) {
        noteWidth = parseInt(200) + 10;
        noteHeight = parseInt(70) + 10;
        //		alert(noteWidth);
        //		alert(noteHeight);
        if (xPos + noteWidth > Xwindow) {
            xPos = xPos - noteWidth - 10;
        }
        else {
            xPos += 10;
        }
        if (yPos + noteHeight > Ywindow) {
            yPos = yPos - noteHeight - 10;
        }
        else {
            yPos += 10;
        }
        top = yPos;
        left = xPos;
        display = 'block';
    }
}

function hideNote(what) {
    document.getElementById(what).style.display = 'none';
}


function emptySelect(selectBox) {
    //alert(selectBox);
    var selSelect = document.getElementById(selectBox);
    /*Leegmaken select-opties, behalve eerste lege optie */
    //alert(selSelect.length);
    while (selSelect.length > 0) {
        selSelect.options[selSelect.length - 1] = null;
    }
}

function NumCheckKey(field) {
    var strChar;
    strChar = String.fromCharCode(event.keyCode);
    //alert(strChar)
    if ('0123456789'.indexOf(strChar) == -1) {
        if (strChar == String.fromCharCode(13)) {
            strChar = '[Enter]';
        }
        else {
            event.returnValue = false
        }
    }
}

function NumCheckKey2(field) {
    var strChar;
    strChar = String.fromCharCode(event.keyCode);
    //alert(strChar)
    if ('0123456789.,'.indexOf(strChar) == -1) {
        if (strChar == String.fromCharCode(13)) {
            strChar = '[Enter]';
        }
        else {
            event.returnValue = false
        }
    }
}

function NumCheckKeyAllowed(field, allowed) {
    var strChar;
    strChar = String.fromCharCode(event.keyCode);
    //alert(strChar)
    if (allowed.indexOf(strChar) == -1) {
        if (strChar == String.fromCharCode(13)) {
            strChar = '[Enter]';
        }
        else {
            event.returnValue = false
        }
    }
}

function maakrekenbedrag(Bedrag) {
    //alert ('maakrekenbedrag = ' + Bedragfieldname.value);
    ttl = Bedrag;
    //  ttl = document.all[Bedragfieldname].value;
    ttl = ttl.replace(',', '.')
    if (isNaN(ttl)) {
        //  	  alert('geen getal')
        ttl = '0';
    }
    return parseFloat(ttl);
}

function maakmooibedrag(Bedrag) {
    //alert ('maakmooibedrag = ' + Bedrag);
    var ttl = new String(Bedrag);
    ttl = ttl.replace('.', ',')
    var ttlarr = ttl.split(',');
    if (ttlarr.length == 1) {
        ttl = ttl + ',000';
    }
    else {
        if (ttlarr[1].length == 1) { ttl = ttl + '00' }
        if (ttlarr[1].length == 2) { ttl = ttl + '0' }
    }
    return ttl;
}

function maakmooibedrag2(field) {
    //alert ('maakmooibedrag = ' + Bedrag);
    var ttl = new String(field.value);
    ttl = ttl.replace('.', ',');
    var ttlarr = ttl.split(',');
    //	alert(ttlarr.length);
    if (ttlarr.length == 1) {
        ttl = ttl + ',000';
    }
    else {
        if (ttlarr[1].length == 1) { ttl = ttl + '00' }
        if (ttlarr[1].length == 2) { ttl = ttl + '0' }
    }
    field.value = ttl;
}

/*************************************************************************************************
***
***		TEXTAREA FUNCTIES
***
*************************************************************************************************/
var blnError = false;

function TextCheckKey(maxlen, field) {
    var strChar;
    strChar = String.fromCharCode(event.keyCode);
    //alert(strChar)
    //	if('^@$èéùìòÇÅ !"#%&\'()*+,-.ÄÖÑÜäöñüàÉ/?à:;<=>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789[]_'.indexOf(strChar)==-1)
    if ('^@$ !"#%&\'()*+,-./?:;<=>abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789[]_'.indexOf(strChar) == -1) {
        if (strChar == String.fromCharCode(13)) {
            strChar = '[Enter]';
        }
        else {
            document.all("PCount" + field).innerText = 'Ongeldig teken: ' + strChar;
            blnError = true;
            event.returnValue = false
        }
    }
    else {
        blnError = false;
        if (CountChars(field) >= maxlen)
            event.returnValue = false;
    }
}

function UpdateCount(maxlen, field) {	//alert(maxlen)
    if (!blnError)
        document.all("PCount" + field).innerText = 'Aantal resterende tekens: ' + (maxlen - CountChars(field));
}

function CountChars(field) {
    return document.all(field).innerText.length;
}

function chkAreaOnPaste(maxlen, field) {
    var sNewString = ''
    var veld = document.getElementById(field)

    event.returnValue = false;
    veld.innerText = window.clipboardData.getData("Text", sNewString);

    if (veld.innerText.length > maxlen) {
        document.all("PCount" + field).innerText = 'Gecopieerde tekst is langer dan ' + maxlen + ' tekens;beperkt tot maximum';
        veld.innerText = veld.innerText.substr(0, maxlen);
        veld.focus();
        blnError = true;
    }
    else {
        blnError = false;
        UpdateCount(maxlen, field)
    }
}

/*************************************************************************************************
***
***		AJAX FUNCTIES
***
*************************************************************************************************/
var http_request = false;
var windowhandle;

function AJAXcallback(targetdiv, targeturl) {
    var target;
    //alert(targetdiv);
    //alert(targeturl);
    target = document.getElementById(targetdiv);
    target.innerHTML = '<table height="100%" width="100%"><tr><td valign="middle" align="center"><img src="/tbt/images/loading.gif"/></td></tr></table>';

    new Ajax.Updater(targetdiv, targeturl);
}

function searchBox(url, title) {
    searchBoxClose();
    var windowhandle = dhtmlwindow.open('searchWindow', 'iframe', url, title, 'width=500px,height=350px,resize=0,scrolling=0,center=0', 'recal');
    windowhandle.moveTo(200, 100);
    //		new Effect.Appear(windowhandle,{duration:0.8});
}

function searchBoxClose() {
    if (windowhandle != null) windowhandle.hide();
}

function iFrameBox(url, title, iFrameName, iFrameWidth, iFrameHeight, iFrameLeft, iFrameTop, onClose) {
    iFrameBoxClose();
    var windowhandle = dhtmlwindow.open(iFrameName, 'iframe', url, title, 'width=' + iFrameWidth + 'px,height=' + iFrameHeight + 'px,resize=0,scrolling=0,center=0', 'recal');
    windowhandle.moveTo(iFrameLeft, iFrameTop);
    //Run custom code when window is about to be closed
    if (onClose == 'ja') {
        windowhandle.onclose = function() {
            parent.window.location.reload();
        }
    }

    //	alert(document.getElementById('_iframe-'+iFrameName).scrollHeight);
    //	document.getElementById('_iframe-'+iFrameName).scrollHeight=14;


    //		new Effect.Appear(windowhandle,{duration:0.8});
}

function iFrameBoxClose() {
    if (windowhandle != null) windowhandle.hide();
}

function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent) {
        curleft = obj.offsetLeft

        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft
        }
    }
    return curleft;
}

function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent) {
        curtop = obj.offsetTop
        while (obj = obj.offsetParent) {
            curtop += obj.offsetTop
        }
    }
    return curtop;
}

/*-------------------------------------------------------------------------------
Naam       : funcGetSelect
Auteur     : Ronald Strous
Datum      : 23 mei 2006
Doel       : Ophalen opties selectbox
Parameters : selectBox	= naam select veld
parameters = met te geven parameters
							
-------------------------------------------------------------------------------*/
function funcGetSelect(selectBox, parameters, masterValue, selectValue) {
    //alert(selectBox);
    //alert(parameters);
    //alert(masterValue);
    var url = path_scripts + '/select_xml.aspx';
    var selSelect = document.getElementById(selectBox);
    //alert(url);
    // eventueel ophalen oude geselecteerde waarde
    if (selectValue == 1) {
        selectValue = selSelect.options[selSelect.selectedIndex].value;
    }

    /*Leegmaken select-opties, behalve eerste lege optie */
    while (selSelect.length > 0) {
        selSelect.options[selSelect.length - 1] = null;
    }

    /*Ophalen nieuwe opties */
    // aanmaken XMLhttp object
    parameters += masterValue;
    makeRequest(url, parameters);

    var strHTML = http_request.responseText;
    //alert(strHTML);

    // indien de geselecteerde waarde van de master (b.v. klant) niet leeg is (selectie van een andere klant)
    // ==> geselecteerde waarde van de beoogde selectbox (b.v. module) leeg maken (er moet dan opnieuw worden gekozen)
    if (masterValue != '') {
        selectValue = ''
    }

    // toevoegen opties aan selectbox
    var arrOptions = strHTML.split('|');
    var arrOption;
    for (var i = 0; i < arrOptions.length; i++) {
        arrOption = arrOptions[i].split('=');
        if (arrOption[1] == 'selectedvalue') {
            selectValue = arrOption[0];
            //      alert(selectValue);
        }
        else {
            if (arrOption[0] == selectValue) {
                selSelect.options[i] = new Option(arrOption[1], arrOption[0], false, true);
            }
            else {
                selSelect.options[i] = new Option(arrOption[1], arrOption[0], false, false);
            }
        }
    }

}

/*-------------------------------------------------------------------------------
Naam       : makeRequest
Auteur     : Ronald Strous
Datum      : 24 mei 2006
Doel       : xmlHTTP object aanmaken
Parameters : url					= de pagina die moet worden aangeroepen
parameters	= de parameters die mee moeten worden gegeven
-------------------------------------------------------------------------------*/
function makeRequest(url, parameters) {
    http_request = false;
    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
        if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/xml');
        }
    }
    else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        }
        catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            }
            catch (e) { }
        }
    }
    if (!http_request) {
        alert('Cannot create XMLHTTP instance');
        return false;
    }

    http_request.onreadystatechange = alertContents;
    http_request.open('GET', url + parameters, false);
    http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    http_request.setRequestHeader("Content-length", parameters.length);
    //	http_request.setRequestHeader("Connection", "close");
    http_request.send(null);
}


function alertContents() {
    if (http_request.readyState == 4) {
        if (http_request.status == 200) {
            //alert(http_request.responseText); 
        }
        else {
            alert('There was a problem with the request.');
        }
    }
}

/*************************************************************************************************
***
***		TBT-Functies
***
*************************************************************************************************/
function toggle_display(field, togglefieldName) {
    //alert(togglefieldName);
    var togglefield = document.getElementById(togglefieldName);
    // wijzigen display-waarde
    if (togglefield.style.display == 'none') {
        togglefield.style.display = ''
    }
    else {
        togglefield.style.display = 'none'
    }
    // link wijzigen
    if (field.innerHTML == '+') {
        field.innerHTML = '-'
    }
    else {
        field.innerHTML = '+'
    }
}

function toggle_display2(field, togglefieldName, tabelNaam) {
    //alert('togglefieldName = ' + togglefieldName);
    var oObject = document.all.item(togglefieldName);
    var i;
    if (oObject != null) {
        if (oObject.length != null) {
            for (i = 0; i < oObject.length; i++) {
                if (oObject(i).style.display == 'none') {
                    //tonen, alleen voor huidige object
                    oObject(i).style.display = '';
                }
                else {
                    //niet tonen
                    oObject(i).style.display = 'none';
                    // nu eventueel voor de childs (alleen inklappen)
                    //alert('object ' + i + ' = ' + oObject(i).waarde);
                    inKlappen(oObject(i).waarde);
                } // einde if style.display
            } // einde for
        }
        else		// object bestaat wel, maar er is er maar 1 van
        {
            var togglefield = document.getElementById(togglefieldName);
            if (togglefield.style.display == 'none') {
                //tonen, alleen voor huidige object
                togglefield.style.display = '';
            }
            else {
                //niet tonen
                togglefield.style.display = 'none';
                // nu eventueel voor de childs (alleen inklappen)
                //alert('enkele = ' + togglefield.waarde);
                inKlappen(togglefield.waarde);
            }
        } // einde oObject.length != null	
    } // einde oObject != null

    // link wijzigen
    if (field.innerHTML == '+') {
        // uitgeklapt
        field.innerHTML = '-'
    }
    else //ingeklapt
    {
        field.innerHTML = '+'

        //nu de onderliggende niveau ook op openklappen zetten
        inKlapZetten(togglefieldName)
    }

    //* nu nog door de tablerows lopen en de class goed zetten
    //==> LET OP! table.id = tabel
    if (typeof tabelNaam == 'undefined') {
        tabelNaam = 'tabel';
    }
    OddEven(tabelNaam)

}

function inKlappen(waarde) {
    var i;
    //alert('waarde = ' + waarde);
    if (waarde != '') {
        var oObject = document.all.item(waarde);
        if (oObject != null) {
            if (oObject.length != null) {
                for (i = 0; i < oObject.length; i++) {
                    oObject(i).style.display = 'none';
                    // nu eventueel voor de childs (alleen inklappen)
                    //alert('object sub ' + i + ' = ' + oObject(i).waarde);
                    inKlappen(oObject(i).waarde);
                }
            }
            else {
                togglefield = document.getElementById(waarde);
                togglefield.style.display = 'none';
                // nu eventueel voor de childs (alleen inklappen)
                //alert('enkele sub = ' + togglefield.waarde);
                inKlappen(togglefield.waarde);
            }
        }

        // nu de de '+' zetten
        inKlapZetten(waarde)

    } // einde if waarde

}

function inKlapZetten(waarde) {
    //alert('waarde = ' + waarde);
    var i;
    var oObject = document.all.item('a_' + waarde);
    if (oObject != null) {
        if (oObject.length != null) {
            for (i = 0; i < oObject.length; i++) {
                oObject(i).innerHTML = '+';
            }
        }
        else {
            document.getElementById('a_' + waarde).innerHTML = '+';
        }
    }
}

function OddEven(tablename) {
    var i;
    var tabel = document.getElementById(tablename);
    var strClass = 'row_even';
    for (i = 0; i < tabel.rows.length; i++) {
        // alleen de regels die getoond worden
        if (tabel.rows(i).style.display != 'none') {
            tabel.rows(i).className = strClass;
            // wisselen van class
            if (strClass == 'row_odd') {
                strClass = 'row_even';
            }
            else {
                strClass = 'row_odd';
            }
        }
    }
}

function chkMaxValue(field, maxValue) {
    //	alert(field.value);
    if (field.value > parseFloat(maxValue)) {
        alert('Maximaal 100% toegestaan!');
        field.value = maxValue;
        field.focus();
    }
}

function chkMaxValues(changedRow, die_vermogen, con_vermogen, con_vermogen_geinstalleerd, culture) {
    var strName;
    var chkValue = maakrekenbedrag(changedRow.value);
    //nu eerst omzetten van Watt naar kW
    die_vermogen = parseFloat(die_vermogen / 1000);
    con_vermogen = parseFloat(con_vermogen / 1000);
    con_vermogen_geinstalleerd = parseFloat(con_vermogen_geinstalleerd / 1000);
    //controleren of het ingevoerde vermogen groter is dan het vermogen van de dienst
    if (chkValue > die_vermogen) {
        alert('Ingevoerde vermogen is groter dan het maximum vermogen van deze positie; vermogen is gezet op het maximum vermogen');
        chkValue = die_vermogen;
    }
    //controleren of het nieuwe vermogen groter is dan het con_vermogen
    //optellen huidige velden van de ruimte
    var arrInput = document.getElementsByTagName('input');
    for (i = 0; i < arrInput.length; i++) {
        if (arrInput[i].type == 'text') {
            strName = arrInput[i].name;
            if (strName.indexOf('text_') == 0) {
                con_vermogen_geinstalleerd += maakrekenbedrag(arrInput[i].value);
            }
        }
    }
    //nu controleren of nieuwe geinstalleerde contractvermogen groter is dan het contractvermogen
    if (con_vermogen_geinstalleerd > con_vermogen) {
        alert('Totale waarde van nieuwe geinstalleerde contract vermogen is groter dan het contract vermogen');
        chkValue = die_vermogen;
    }
    changedRow.value = maakmooibedrag(chkValue);
}

function js_toggleMenu(p_strID) {
    if (document.frmMenu.Menustate.value.indexOf(p_strID) > 0) {
        document.frmMenu.Menustate.value = document.frmMenu.Menustate.value.replace(p_strID + ',', '');
    }
    else {
        document.frmMenu.Menustate.value = document.frmMenu.Menustate.value + p_strID + ',';
    }
    js_toggle(p_strID);
    js_setCookie('Menu', document.frmMenu.Menustate.value, 10);
}

function reset_velden() {
    var oObject = document.frmForm.elements;
    var i;
    if (oObject != null) {
        if (oObject.length != null) {
            for (i = 0; i < oObject.length; i++) {
                //alert(oObject(i).id + ' = ' + oObject(i).type);
                if (oObject(i).type == 'text') {
                    oObject(i).value = '';
                }
                if (oObject(i).type == 'select-one') {
                    oObject(i).selectedIndex = -1;
                }

            } // einde for

        } // einde oObject.length != null	
    } // einde oObject != null

}

function formatNumber(veld) {
    var waarde = veld.value;
    var part1, part2, part3, part4;
    waarde = waarde.replace('.', '');
    waarde = waarde.replace('.', '');
    waarde = waarde.replace('.', '');
    waarde = waarde.replace('.', '');

    if (waarde.length > 9) {
        // meer dan 9 tekens ==> drie punten toevoegen
        part1 = waarde.substr(waarde.length - 3, 3);
        part2 = waarde.substr(waarde.length - 6, 3);
        part3 = waarde.substr(waarde.length - 9, 3);
        part4 = waarde.substr(0, waarde.length - 9);
        veld.value = part4 + '.' + part3 + '.' + part2 + '.' + part1;
        return true;
    }

    if (waarde.length > 6) {
        // meer dan 6 tekens, maar minder dan 10 tekens ==> twee punten toevoegen
        part1 = waarde.substr(waarde.length - 3, 3);
        part2 = waarde.substr(waarde.length - 6, 3);
        part3 = waarde.substr(0, waarde.length - 6);
        veld.value = part3 + '.' + part2 + '.' + part1;
        return true;
    }

    if (waarde.length > 3) {
        // meer dan 3 tekens, maar minder dan 7 tekens ==> een punten toevoegen
        part1 = waarde.substr(waarde.length - 3, 3);
        part2 = waarde.substr(0, waarde.length - 3);
        veld.value = part2 + '.' + part1;
        return true;
    }

    if (waarde.length <= 3) {
        veld.value = waarde;
        return true;
    }
}