/******
 * Hypotecni kalkulator zjednoduseny
 * Umoznuje spocitat orientacni hodnotu mesicni splatky hypoteky na nemovitost
 *
 * @author Jiri Malek
 * @package OlomouckeReality
 * @copyright Art-Data, s.r.o
 * @version 1.0
 * @since 3/13/2005
 */

//--- find form element by name
function findElement(aform, aname)
{
    if (document.all) {
        return document.all[aname];
    }

    if (aform.elements[aname]) {
        return aform.elements[aname];
    }

    if (aform.getElementById) {
        return aform.getElementById(aname);
    }

    for(i = 0; i < aform.elements.length; i++) {
        if (aform.elements[i].name == aname) {
            return aform.elements[i];
        }
    }
    return false;
}

//--- evaluate element value
function getElementValue(aform, aname)
{
    aElement = findElement(aform, aname);
    if (aElement && aElement.value) {
        return eval(aElement.value);
    } else {
        return 0;
    }
}

//--- set element value
function setElementValue(aform, aname, avalue)
{
    aElement = findElement(aform, aname);
    if (aElement && aElement.value) {
        aElement.value = avalue;
    }
    return true;
}

//--- format number
function formatResult(res)
{
   out = '';
   var pom = "" + res;

   //--- insert spaces
   while (pom.length > 3) {
       i = pom.length % 3;
       out = out + pom.substr(0,i) + " ";
       pom = pom.substr(i, pom.length - i);
   }
   
   //--- add rest
   out = out + pom;
   
   return out;
}

//--- calculate
function hypo_calc(aform)
{
    //--- ctu parametry
    celk_cena = getElementValue(aform, 'hc_price');
    zaloha = getElementValue(aform, 'hc_zaloha');
    urok = getElementValue(aform, 'hc_urok');
    roky = getElementValue(aform, 'hc_roky');
    stat = getElementValue(aform, 'hc_stat');

    //--- zakladni info
    if (celk_cena > 0) zaloha_proc = Math.round((zaloha / celk_cena) * 100);
    urok = urok - stat;
    uver = celk_cena - zaloha;

    //--- nahled splatky
    if (roky > 0) {
        splatka = (uver + (uver * (urok / 100.0) * roky)) / (roky * 12);
    } else {
        splatka = 0;
    }

    //--- jen pokud jsou validni data
    if ((splatka > 0) && (roky > 0)) {
        //--- navyseni - skutecny urok
        mesicu = roky * 12;
        navyseny_uver = uver;
        navyseny_urok = 0;
        for (var i = 0; i < mesicu; i++) {
            mes_urok = ((navyseny_uver * (urok / 100.0)) / 12);
            navyseny_urok = navyseny_urok + mes_urok;
            navyseny_uver = navyseny_uver + mes_urok - splatka;
        }

        //--- odhad skutecne slatky
        if (roky > 0) {
            splatka = (uver + navyseny_urok) / (roky * 12)
        } else {
            splatka = 0;
        }

        //--- aproximuj vypocet, pevny pocet aproximaci
        for (var k = 0; k < 50; k++) {
            pomocny_uver = uver;
            min_splatka = (((uver * urok) / (12 * 100.0)) + 10);
            if (splatka < min_splatka) splatka = min_splatka;

            //--- simuluj splaceni - metoda 2
            skut_mesicu = 0;
            while (pomocny_uver > 0) {
                pomocny_uver = pomocny_uver + ((pomocny_uver * urok) / (12 * 100.0)) - splatka;
                ++skut_mesicu;
            }

            //--- snizeni splatky
            if (skut_mesicu > mesicu) {
                splatka = splatka + (splatka / 50);
            }

            //--- zvyseni splatky
            if (skut_mesicu < mesicu) {
                splatka = splatka - (splatka / 50);
            }
        }

        //--- minimalni splatka
        min_splatka = (((uver * urok) / (12 * 100.0)) + 10);
        if (splatka < min_splatka) splatka = min_splatka;
    }//validni data

    //--- round splatka
    splatka = Math.round(splatka);

    //--- set values
    setElementValue(aform, 'hc_splatka', formatResult(splatka));
}

//--- find form
function findForm(aname)
{
    if (document.all) {
        return document.all[aname];
    }

    if (document.forms[aname]) {
        return document.forms[aname];
    }

    if (document.getElementById) {
        return document.getElementById(aname);
    }

    for(i=0; i<document.forms.length; i++) {
        if (document.forms[i].name == aname) {
            return document.forms[i];
        }
    }
    return false;
}


//--- calculate hypo
function calculateHypo()
{
    hForm = findForm('hypoForm');
    if (hForm) {
        hypo_calc(hForm);
    }
}

