var stosunekTxt = new Array("dziennie", "rocznie");

function calc_GenerateResultHTML(resultObj)
{
    var odsetki = MONEY_roundToZloty(resultObj.outCash);
    rv =
          '<div class="calc_result">'+
          '<table><tr><td>Kwota odsetek:</td><td align="right"><strong>'+MONEY_toString100Groszy(odsetki)+' PLN</strong></td></tr>'
        + '<tr><td>Suma odsetek i zaległóści:</td><td align="right"><strong>'+ MONEY_toString100Groszy(MONEY_roundToGroszy(odsetki + resultObj.inCash)) + ' PLN</strong></td></tr>'
        + '</table></div><br/>'
        + '<table class="results" border="1" width="100%"><tbody>'
        + '<tr class="header"><td colspan="4">' + ODSETKI_caption + '</td></tr>';

    var cnt = resultObj.outArray.length;
    var lastStosunek = -1;
    for (idx = 0; idx < cnt; idx++)
    {
        if (resultObj.outArray[idx].stosunek != lastStosunek)
        {
            rv = rv + '<tr class="header"><td width="100">Okres</td><td width="100">Stopa<br/>'
                + stosunekTxt[resultObj.outArray[idx].stosunek]
                + '</td><td width="80">Ile dni'
                + '</td><td width="80">Kwota</td></tr>';
            lastStosunek = resultObj.outArray[idx].stosunek;
        }
        rv = rv + '<tr class="centered"><td width="100">od '
            + resultObj.outArray[idx].getString() + '</td><td align="center">'
            + resultObj.outArray[idx].v + '</td><td align="center">'
            + resultObj.outArray[idx].daysCnt + '</td><td align="center">'
            + MONEY_toString100Groszy(resultObj.outArray[idx].cash) + '</td></tr>';
    }

    rv = rv
        + '</tbody></table>';

    return rv;
}

function calc_valueChange(elem)
{
    var ODSETKI_DEF = (ODSETKI_mode == 1) ? ODSETKI_USTAWOWE : ODSETKI_PODATKOWE;
    var inStart = new DateYMD(
        NUMBER_parseInput(document.getElementById('calc_InStartYear').value),
        NUMBER_parseInput(document.getElementById('calc_InStartMonth').value),
        NUMBER_parseInput(document.getElementById('calc_InStartDay').value)
        );
    var inEnd   = new DateYMD(
        NUMBER_parseInput(document.getElementById('calc_InEndYear').value),
        NUMBER_parseInput(document.getElementById('calc_InEndMonth').value),
        NUMBER_parseInput(document.getElementById('calc_InEndDay').value)
        );
    var inCash  = NUMBER_parseInput(document.getElementById('calc_InCash').value);
    var maxYMD  = ODSETKI_DEF[ODSETKI_DEF.length - 1];

    if ( (!inStart.isValid()) || (!inEnd.isValid())
         || (inEnd.isBefore(inStart))
         )
    {
        document.getElementById('calc_result').innerHTML = '<center><strong>Podaj poprawne daty</strong></center>';
    }
    else
    {
        if ((inStart.isBefore(ODSETKI_DEF[0]))
            || (!inEnd.isBefore(maxYMD))
            )
        {
            document.getElementById('calc_result').innerHTML = '<center>Ten kalkulator liczy odsetki od '
                + ODSETKI_DEF[0].getString()
                + ' do '
                + maxYMD.getString()
                + '.<br/> Podany okres przekracza obecny zakres kalkulatora.</center>';
        }
        else
        {
            var resultObj      = new Object();
            var iteratorYMD    = new createDateYMDfromYMD(inStart);
            var odsetkiDefIdx  = 0;
            var outArrayIdx    = 0;
            resultObj.outArray = new Array();
            resultObj.inCash   = inCash;
            resultObj.outCash  = 0;

            /* look for starting date matching entry in ODSETKI_DEF */
            while (!ODSETKI_DEF[odsetkiDefIdx].isAfter(iteratorYMD))
            {
                odsetkiDefIdx++;
            }
            odsetkiDefIdx--;

            /* start counting loop */
            iteratorYMD.nextDay();
            while (iteratorYMD.isBefore(inEnd))
            {
                var currentOdsetkiDefinition = ODSETKI_DEF[odsetkiDefIdx];

                /* odsetki podatkowe przed 1998.01.01 sa liczone w stosunku dziennym
                   wiec wybieramy poprawny sposob liczenia */
                var stosunek = 1;
                if ((ODSETKI_mode == 0) && currentOdsetkiDefinition.isBefore(new DateYMD(1998, 0, 0)))
                {
                    stosunek = 0;
                }

                /* create new outArray entry */
                resultObj.outArray[outArrayIdx]          = new createDateYMDfromYMD(currentOdsetkiDefinition);
                resultObj.outArray[outArrayIdx].stosunek = stosunek;
                resultObj.outArray[outArrayIdx].v        = currentOdsetkiDefinition.v;

                /* liczymy dni i odsetki */
                var daysInCurrentStep    = 0;
                var daysInCurrentYear    = 0;
                var odsetkiInCurrentStep = 0;
                var odsetkiInCurrentYear = 0;
                var yearInLastIteration  = iteratorYMD.y;
                while ((iteratorYMD.isBefore(inEnd)) && (iteratorYMD.isBefore(ODSETKI_DEF[odsetkiDefIdx+1])))
                {
                    iteratorYMD.nextDay();
                    daysInCurrentStep++;
                    daysInCurrentYear++;

                    /* kwota odsetek */
                    if (stosunek == 0)
                    {
                        odsetkiInCurrentYear = MONEY_roundTo10Groszy(inCash * currentOdsetkiDefinition.v * 0.01 * daysInCurrentYear);
                    }
                    else
                    {
                        var allDaysInYear = ((yearInLastIteration & 3) == 0) ? 366 : 365;
                        odsetkiInCurrentYear = MONEY_roundToGroszy(inCash * currentOdsetkiDefinition.v * 0.01 * daysInCurrentYear / allDaysInYear);
                    }

                    if (yearInLastIteration != iteratorYMD.y)
                    {
                        odsetkiInCurrentStep = MONEY_roundToGroszy(odsetkiInCurrentStep + odsetkiInCurrentYear);
                        yearInLastIteration  = iteratorYMD.y;
                        daysInCurrentYear    = 0;
                        odsetkiInCurrentYear = 0;
                    }
                }
                odsetkiInCurrentStep                    = MONEY_roundToGroszy(odsetkiInCurrentStep + odsetkiInCurrentYear);

                /* sumarize and copy results */
                resultObj.outCash                      += odsetkiInCurrentStep;
                resultObj.outArray[outArrayIdx].daysCnt = daysInCurrentStep;
                resultObj.outArray[outArrayIdx].cash    = odsetkiInCurrentStep;

                odsetkiDefIdx++;
                outArrayIdx++;
                daysInCurrentStep = 0;
            }

            document.getElementById('calc_result').innerHTML = calc_GenerateResultHTML(resultObj);
        }
    }
}

//document.getElementById('calc_InStartYear').value = '1994';
//document.getElementById('calc_InEndYear').value = '2009'; //dodane

