// array containing key's to skip a check for in forms
var keyCodeExceptions = new Array(9,13,16,17,18,19,20,27,33,34,35,36,37,38,39,40,46);

function swapModelOptions(selectfrom, selectto)
{
    var selectedbrand, obj, option;

    if (selectfrom.selectedIndex > 0) {

        selectedbrand = selectfrom.options[selectfrom.selectedIndex].value;

        if (selectto && selectedbrand) {

            selectedbrand = selectedbrand.replace(' ', '_');
            selectedbrand = selectedbrand.replace('-', '_');

            obj = eval(selectedbrand);

            if (typeof(obj) == 'object') {

                removeChildren(selectto);

                for (var i = 0; i < obj.length; i++) {

                    txt = document.createTextNode(obj[i]);
                    option = document.createElement('option');

                    option.setAttribute('value', obj[i]);
                    option.appendChild(txt);
                    selectto.appendChild(option);
                }
            }
        }
    } else {

        selecttoOptions = selectto.childNodes;
        for (j=0; j < selecttoOptions.length; j++) {
            selectto.removeChild(selecttoOptions[j]);
        }

        txt = document.createTextNode(all);
        option = document.createElement('option');
        option.setAttribute('value', '');
        option.appendChild(txt);
        selectto.appendChild(option);

        for (var i = 0; i < brands.length; i++) {
            for (var j = 0; j < brands[i].length; j++) {
                txt = document.createTextNode(brands[i][j]);
                option = document.createElement('option');

                option.setAttribute('value', brands[i][j]);
                option.appendChild(txt);
                selectto.appendChild(option);
            }
        }
    }
}

function isValidBPM(bpm)
{
    // only accept digits
    var refno= new RegExp("^\\d{1,}$");

    return bpm.match(refno);
}

function calculatetaxvalue(inputid, fueltypeid, outputid)
{
    var taxvalue;
    var input = document.getElementById(inputid);
    var fueltype = document.getElementById(fueltypeid);
    var output = document.getElementById(outputid);

    if (input && fueltype && output) {

        var bpm = input.value;

        if (bpm) {

            if (isValidBPM(bpm)) {

                bpm = parseFloat(bpm);

                taxvalue = (fueltype.options[fueltype.selectedIndex].value == 3) ? Math.round((((bpm - 328) / 0.452) * 1.19) + bpm) : Math.round((((bpm + 1540) / 0.452) * 1.19) + bpm);
                output.firstChild.nodeValue = taxvalue;

            } else {
                alert('U mag alleen cijfers invoeren');
            }

        } else {
            alert('Vul eerst het BPM-bedrag in');
        }
    }
}

function applyKeyUpEvent(id, callback)
{
    var el = document.getElementById(id);

    if (el) {
        if (window.addEventListener) {
            el.addEventListener('keyup', callback, false);
        } else {
            el.attachEvent('onkeyup', callback);
        }
    }
}

function moveOnIfFieldCompleted(e)
{
    var input = e['srcElement'] || e['target'];
    var keycode = e.keyCode || e.which;

    // check if no exception key is pressed
    if (keycode) {
        for (var i = 0; i < keyCodeExceptions.length; i++) {
            if (keycode == keyCodeExceptions[i]) {
                var nocheck = true;
            }
        }

        if (typeof(nocheck) == 'undefined') {

            // maxlength is 2
            if (input.value.length == 2) {

                // locate next form element
                if (input.form.elements) {

                    for (var i = 0; i < input.form.elements.length; i++) {

                        // we found the current input
                        if (input.form.elements[i] == input) {

                            // move on to the next input, and focus it
                            var nextinput = input.form.elements[++i];
                            if (typeof(nextinput) != 'undefined') nextinput.focus();

                            break;
                        }
                    }
                }
            }
        }
    }
}

function onToggle(e)
{
    if (e) {
        var target = getTarget(e);
        toggle(target);
    }
}

function toggle(node)
{
    if (node) {
        var sibling = node.nextSibling;
        while (sibling) {
            if (sibling.nodeType == 1) {
                if (sibling.nodeName.toLowerCase() == 'dt') {
                    break;
                } else {
                    if (sibling.style.display == 'undefined' || sibling.style.display == 'none') {
                        sibling.style.display = 'block';
                        node.style.backgroundImage = 'url(/images/a_3hoek_down.gif)';
                    } else {
                        sibling.style.display = 'none';
                        node.style.backgroundImage = 'url(/images/a_3hoek.gif)';
                    }
                }
            }
            sibling = sibling.nextSibling;
        }
    }
}

function toggleOptions()
{
    var options = document.getElementById('options');
    options.style.display = (options.style.display == 'undefined' || options.style.display == 'none') ? 'block' : 'none';
}

function closeList(id)
{
    var e = document.getElementById(id);

    if (e) {
        for (var i = 0; i < e.childNodes.length; i++) {
            if (e.childNodes[i].nodeName.toLowerCase() == 'dt') {
                toggle(e.childNodes[i]);
            }
        }
    }
}

function printWindow()
{
    window.print();
}

function onSwapImg(e)
{
    var target = getTarget(e);
    swapImg(target.properties.element_id, target.properties.img_src);
}

function swapImg(id, newSrc)
{
    if (id != '' && newSrc != '') {
        e = document.getElementById(id);
        if (e) {
            e.setAttribute('src', newSrc);
        }
    }
}

function getCookie(name)
{
    var start = document.cookie.indexOf( name + "=" );
    var len = start + name.length + 1;
    if ((!start) && (name != document.cookie.substring(0, name.length))) {
        return null;
    }
    if (start == -1) return null;
    var end = document.cookie.indexOf(";", len);
    if (end == -1) end = document.cookie.length;
    return unescape(document.cookie.substring(len, end));
}

function initBillBoard()
{
    // check if cookie has been set
    var cookie = getCookie('hideBillBoard');

    if (cookie) return;

    if (billBoardArgs) {
        var id = billBoardArgs[0].id;
        if (id) {
            var node = document.getElementById(id);
            billBoardArgs.push(node);
            swfobject.createSWF.apply(swfobject, billBoardArgs);
            openBillBoard();
        }
    }
}

function openBillBoard()
{
    var id = "hoegroen-container";
    var node = document.getElementById(id);
    if (node) {
        node.className = node.className.replace(/nodisplay/, '');
    }
}

function closeBillBoard()
{
    var id = "hoegroen-container";
    var node = document.getElementById(id);
    if (node) {
        node.className = "nodisplay";
    }
}

function closeBillBoardForever()
{
    closeBillBoard();

    // set expiration date for cookie
    var date = new Date();
    date.setDate((date.getDate()+7)); // set to 7 days

    // set cookie
    var cookiestring = 'hideBillBoard=1; expires=' + date;
    document.cookie = cookiestring;
}

function hideTellAFriendFields()
{
    window.tellAFriendFieldStartIndex = 4;
    window.tellAFriendFieldEndIndex = 15;
    window.tellAFriendFieldCurrentIndex = 4;

    for (var i = window.tellAFriendFieldStartIndex; i <= window.tellAFriendFieldEndIndex; i++) {
        var fields = getTellAFriendFields(i);
        for (var a in fields) {
            toggleTellAFriendFieldVisibility(fields[a], false);
        }
    }

    // add a link after the last input
    if (fields[a]) {

        // create node
        var dt = document.createElement('dt');
        addTextNode(dt, '\u00a0');

        var dd = document.createElement('dd');
        var span = document.createElement('span');
        addTextNode(span, getText('TellAFriendAddRecipient'));
        setClassName(span, 'button');
        applyEvent(span, 'click', showNextTellAFriendField);
        dd.appendChild(span);

        // add after the last input
        var parent = input.parentNode;
        if (parent) {
            insertAfter(dd, insertAfter(dt, parent));
        }
    }
}

function toggleTellAFriendFieldVisibility(input, visible)
{
    if (input) {
        // find dd and dt
        var dd = bubbleUpToNodeName(input, 'dd');
        if (dd) {
            var dt = findPreviousSibling(dd, 'dt');
            if (dt) {
                var className = visible ? '' : 'nodisplay';
                setClassName(dt, className);
                setClassName(dd, className);
            }
        }
    }
}

function showNextTellAFriendField()
{
    if (window.tellAFriendFieldCurrentIndex > window.tellAFriendFieldEndIndex) {
        alert(getText('TellAFriendMaxRecipientsReached'));
        return false;
    }

    var fields = getTellAFriendFields(window.tellAFriendFieldCurrentIndex);
    for (var a in fields) {
        toggleTellAFriendFieldVisibility(fields[a], true);
    }

    window.tellAFriendFieldCurrentIndex++;

    return true;
}

function getTellAFriendFields(number)
{
    var firstnamePrefix = 'fldrecipient_firstname_';
    var lastnamePrefix = 'fldrecipient_lastname_';
    var emailPrefix = 'fldrecipient_email_';
    var fields = [];

    // hide firstname
    input = document.getElementById(firstnamePrefix + number.toString());
    if (input) fields.push(input);

    // hide lastname
    input = document.getElementById(lastnamePrefix + number);
    if (input) fields.push(input);

    // hide email
    input = document.getElementById(emailPrefix + number);
    if (input) fields.push(input);

    return fields;
}

function openUrlInParentWindow(url)
{
    if (window.opener) {
        window.opener.document.location = url;
        window.close();
    }
}

function onToggle(e)
{
    if (e) {
        var target = getTarget(e);
        toggle(target);
    }
}

function toggle(node)
{
    if (node) {
        var sibling = node.nextSibling;
        while (sibling) {
            if (sibling.nodeType == 1) {
                if (sibling.nodeName.toLowerCase() == 'dt') {
                    break;
                } else {
                    if (sibling.style.display == 'undefined' || sibling.style.display == 'none') {
                        sibling.style.display = 'block';
                        node.className.replace(/collapsed/, 'expanded');
                    } else {
                        sibling.style.display = 'none';
                        node.className.replace(/expanded/, 'collapsed');
                    }
                }
            }
            sibling = sibling.nextSibling;
        }
    }
}

function toggleDemo(e)
{
    if (window.MMLBannerUrl == true) {
        if (e) cancelEvent(e);

        var node = document.getElementById('demo');
        if (node) {
            if (node.className.indexOf('nodisplay') >= 0) {
                node.className = '';
            } else {
                node.className = 'nodisplay';
            }
        }
    }
}

function displayTab(tabname)
{
    var tab = document.getElementById('engine');
    if (tab) { document.getElementById('engine').className = 'nodisplay'; }
    var tab = document.getElementById('prices');
    if (tab) { document.getElementById('prices').className = 'nodisplay'; }
    var tab = document.getElementById('default-equipment');
    if (tab) { document.getElementById('default-equipment').className = 'nodisplay'; }
    var tab = document.getElementById('optional');
    if (tab) { document.getElementById('optional').className = 'nodisplay'; }
    var tab = document.getElementById('conditions');
    if (tab) { document.getElementById('conditions').className = 'nodisplay'; }

    var tab = document.getElementById(tabname);
    if (tab) {
        tab.className = '';
        setSelectedTab(tabname);
    }
}

function setSelectedTab(tabname)
{
    var tab = document.getElementById('engine-tab');
    if (tab) { tab.className = ''; }
    var tab = document.getElementById('prices-tab');
    if (tab) { tab.className = ''; }
    var tab = document.getElementById('default-equipment-tab');
    if (tab) { tab.className = ''; }
    var tab = document.getElementById('optional-tab');
    if (tab) { tab.className = ''; }
    var tab = document.getElementById('conditions-tab');
    if (tab) { tab.className = ''; }

    var tab = document.getElementById(tabname+'-tab');
    if (tab) { tab.className = 'selected'; }
}

function initTabs()
{
    var tab = document.getElementById('prices');
    if (tab) { document.getElementById('prices').className = 'nodisplay'; }
    var tab = document.getElementById('default-equipment');
    if (tab) { document.getElementById('default-equipment').className = 'nodisplay'; }
    var tab = document.getElementById('optional');
    if (tab) { document.getElementById('optional').className = 'nodisplay'; }
    var tab = document.getElementById('conditions');
    if (tab) { document.getElementById('conditions').className = 'nodisplay'; }
}
