var d = function(el) {
    return document.getElementById(el);
}

var getChildImages = function(elId) {
    var cn = d(elId).childNodes;
    var imageNodes = [];
    for (var i = 0; i < cn.length; i++) {
        if (cn[i].tagName == 'img' || cn[i].tagName == 'IMG') {
            imageNodes.push(cn[i]);
        }
    }
    return imageNodes;
};

function array_intersect() {
    // http://kevin.vanzonneveld.net
    // +   original by: Brett Zamir (http://brett-zamir.me)
    // %        note 1: These only output associative arrays (would need to be
    // %        note 1: all numeric and counting from zero to be numeric)
    // *     example 1: $array1 = {'a' : 'green', 0:'red', 1: 'blue'};
    // *     example 1: $array2 = {'b' : 'green', 0:'yellow', 1:'red'};
    // *     example 1: $array3 = ['green', 'red'];
    // *     example 1: $result = array_intersect($array1, $array2, $array3);
    // *     returns 1: {0: 'red', a: 'green'}

    var arr1 = arguments[0], retArr = {};
    var k1 = '', arr = {}, i = 0, k = '';

    arr1keys:
    for (k1 in arr1) {
        arrs:
        for (i=1; i < arguments.length; i++) {
            arr = arguments[i];
            for (k in arr) {
                if (arr[k] === arr1[k1]) {
                    if (i === arguments.length-1) {
                        retArr[k1] = arr1[k1];
                    }
                    // If the innermost loop always leads at least once to an equal value, continue the loop until done
                    continue arrs;
                }
            }
            // If it reaches here, it wasn't found in at least one array, so try next value
            continue arr1keys;
        }
    }

    return retArr;
}

var finanztyp = {
    aktuelleAntwortCheckboxen: [],
    fragenHistory: []
};

finanztyp.init = function() {
    finanztyp.aktiviereFrage(fdata.ersteFrage);

    // bilder preloaden
    var preloadStepImages = ['1_blue_active.gif','1_blue_inactive.gif',
        '2_blue_active.gif','2_blue_inactive.gif','2_grey_active.gif',
        '3_blue_active.gif','3_blue_inactive.gif','3_grey_active.gif','3_grey_inactive.gif',
        '4_blue_active.gif','4_blue_inactive.gif','4_grey_active.gif','4_grey_inactive.gif',
        '5_blue_active.gif','5_blue_inactive.gif','5_grey_active.gif','5_grey_inactive.gif',
        '6_blue_active.gif','6_blue_inactive.gif','6_grey_active.gif','6_grey_inactive.gif'];
    var im = [];
    for (var i = 0; i < preloadStepImages.length; i++) {
        im[i] = new Image();
        im[i].src = preloadStepImages[i];
    }
};

var onloadBefore = window.onload;
window.onload = function() {
    onloadBefore();
    finanztyp.init();
};

finanztyp.reset = function()
{
    d('btnReset').style.display = 'none';
    d('ergebnisdiv').style.display = 'none';
    d('nothingChecked').style.display = 'none';
    finanztyp.aktuelleAntwortCheckboxen = [];
    finanztyp.fragenHistory = [];
    finanztyp.aktiviereFrage(fdata.ersteFrage);
};

finanztyp.aktiviereFrage = function(frageId)
{
    var frage = fragen[frageId];
    d('frageTitel').innerHTML = frage.Frage;

    // reset antwort images
    var answerImages = getChildImages('frageAntwortenBilder');
    for (var i = 0; i < answerImages.length; i++) {
        answerImages[i].src = '/files/finanzierungstyp/defaultAnswerImage.gif';
    }

    var elAntworten = d('frageAntworten');
    elAntworten.innerHTML = '';
    finanztyp.aktuelleAntwortCheckboxen = [];
    for (var i = 0; i < frage.antworten.length; i++) {

        var input = document.createElement('input');
        input.className = 'antwortCheckbox';
        input.type = 'checkbox';
        input.value = '1';
        input.onclick = finanztyp.antwortClicked;
        input.frageId = frageId;
        input.antwort = frage.antworten[i];
        finanztyp.aktuelleAntwortCheckboxen.push(input);

        var span = document.createElement('div');
        span.className = 'antwortLabel';
        span.appendChild(document.createTextNode(frage.antworten[i].Titel));

        var label = document.createElement('label');
        label.appendChild(input);
        label.appendChild(span);

        var div = document.createElement('div');
        div.className = 'antwortWrapper antwortWrapper' + (i + 1);
        div.appendChild(label);

        elAntworten.appendChild(div);

        if (frage.antworten[i].imagePath) {
            answerImages[i].src = '/'+frage.antworten[i].imagePath;
        }
    }
    var div = document.createElement('div');
    div.className = 'clear';
    elAntworten.appendChild(div);

    finanztyp.renderButtonsAndImages();
};

finanztyp.aktiviereAntwort = function(i)
{
    if (finanztyp.aktuelleAntwortCheckboxen[i]) {
        finanztyp.aktuelleAntwortCheckboxen[i].checked = true;
        finanztyp.antwortClicked.call(finanztyp.aktuelleAntwortCheckboxen[i]);
    }
};

finanztyp.antwortClicked = function()
{
    d('nothingChecked').style.display = 'none';

    // this = clicked checkbox
    // Andere Antworten dieser Frage unchecken
    for (var i = 0; i < finanztyp.aktuelleAntwortCheckboxen.length; i++) {
        if (finanztyp.aktuelleAntwortCheckboxen[i] != this && finanztyp.aktuelleAntwortCheckboxen[i].checked) {
            finanztyp.aktuelleAntwortCheckboxen[i].checked = false;
        }
    }
};

finanztyp.nextStep = function()
{
    var checkedInput = false;
    for (var i = 0; i < finanztyp.aktuelleAntwortCheckboxen.length; i++) {
        if (finanztyp.aktuelleAntwortCheckboxen[i].checked) {
            checkedInput = finanztyp.aktuelleAntwortCheckboxen[i];
        }
    }

    if (!checkedInput) {
        d('ergebnisdiv').style.display = 'none';
        d('nothingChecked').style.display = 'block';
        return;
    }

    // Antworten in variable merken
    finanztyp.fragenHistory.push({
        frageId: checkedInput.frageId,
        antwort: checkedInput.antwort
    });

    // Frage hinzufügen
    if (checkedInput.antwort.AktiviertFrage == '-1') {
        d('ergebnisdiv').style.display = 'block';
        finanztyp.calcErgebnis();
    } else {
        d('ergebnisdiv').style.display = 'none';
        finanztyp.aktiviereFrage(checkedInput.antwort.AktiviertFrage);
    }
};

finanztyp.prevStep = function()
{
    var letzteFrage = finanztyp.fragenHistory.pop();
    d('nothingChecked').style.display = 'none';
    d('ergebnisdiv').style.display = 'none';
// da momentan der reset button nur ganz am ende angezeigt wird, bei jedem prev klick ausblenden
//     if (!finanztyp.fragenHistory.length) {
        d('btnReset').style.display = 'none';
//     }
    finanztyp.aktiviereFrage(letzteFrage.frageId);

    for (var i = 0; i < finanztyp.aktuelleAntwortCheckboxen.length; i++) {
        if (finanztyp.aktuelleAntwortCheckboxen[i].antwort == letzteFrage.antwort) {
            finanztyp.aktuelleAntwortCheckboxen[i].checked = true;
        }
    }
};

finanztyp.renderButtonsAndImages = function(pos)
{
    if (finanztyp.fragenHistory.length) {
        d('btnPrev').style.display = 'inline';
    } else {
        d('btnPrev').style.display = 'none';
    }

    if (pos == 'end') {
        d('fragenContent').style.display = 'none';
        d('btnNext').style.display = 'none';
    } else {
        d('fragenContent').style.display = 'block';
        d('btnNext').style.display = 'inline';
    }

    // step images holen und setzen
    var imagePath = '/files/finanzierungstyp/schritte/';
    var imageNodes = getChildImages('steps');
    if (!finanztyp.fragenHistory.length) {
        imageNodes[0].src = imagePath+'1_blue_active.gif';
        for (var j = 2; j <= 6; j++) {
            imageNodes[j-1].src = imagePath + j + '_grey_active.gif'; 
        }
    } else {
        for (var j = 1; j <= finanztyp.fragenHistory.length; j++) {
            imageNodes[j-1].src = imagePath + j + '_blue_inactive.gif';
        }
        for (var j = finanztyp.fragenHistory.length + 1; j <= 6; j++) {
            if (pos == 'end') {
                imageNodes[j-1].src = imagePath + j + '_grey_inactive.gif';
            } else {
                imageNodes[j-1].src = imagePath + j + '_grey_active.gif';
            }
        }
        if (imageNodes[finanztyp.fragenHistory.length]) {
            imageNodes[finanztyp.fragenHistory.length].src =
                imagePath + (finanztyp.fragenHistory.length + 1) + '_blue_active.gif';
        } else {
            imageNodes[finanztyp.fragenHistory.length - 1].src =
                imagePath + (finanztyp.fragenHistory.length) + '_blue_active.gif';
        }
    }
};

finanztyp.calcErgebnis = function()
{

    var ergebnis = [];
    for (var i = 0; i < finanztyp.fragenHistory.length; i++) {
        if (i == 0) {
            ergebnis = finanztyp.fragenHistory[i].antwort.typen;
        } else {
            ergebnis = array_intersect(ergebnis, finanztyp.fragenHistory[i].antwort.typen);
        }
    }

    for (var i in ergebnis) {
        if (typeof ergebnis[i] == 'string' || typeof ergebnis[i] == 'int' || typeof ergebnis[i] == 'integer') {
            var ergebnis = ergebnis[i];
            break;
        }
    }

    d('btnReset').style.display = 'block';
    d('ergebnisTitel').innerHTML = typen[ergebnis].Titel;
    d('ergebnisText').innerHTML = typen[ergebnis].Beschreibung;

    var ergebnisImage = getChildImages('ergebnisdiv')[0];
    if (typen[ergebnis].imagePath) {
        ergebnisImage.src = '/' + typen[ergebnis].imagePath;
    } else {
        ergebnisImage.src = '/files/finanzierungstyp/defaultResult.jpg';
    }

    finanztyp.renderButtonsAndImages('end');
};

