  var co = new Object;
  function recalc_onclick(ctl) {
    if (document.formc.automatic_recalc.checked || ctl=='') {
      co.pA1A = eeparseFloatTh(document.formc.pA1A.value);
      co.pA2A = eeparseFloat(document.formc.pA2A.value);
      co.pA3A = eeparsedate_keep_all(document.formc.pA3A.value);
      calc(co);

      document.formc.pA4A.value = eedisplayFloatNDTh(co.pA4A,2);             // Valor da Parcela
      document.formc.pA5A.value = eedisplayPercentND(co.pA5A,2);             // Taxa mensal
      document.formc.pA6A.value = eedisplayFloatNDTh(co.pA6A,2);             // Seguro
      document.formc.pA7A.value = eedisplayFloatNDTh(co.pA7A,2);             // Empréstimo + Seguro
      document.formc.pA8A.value = eedatefmt(fmtdate2,co.pA8A);               // Mês de início do pagamento
      document.formc.pA11A.value = eedisplayFloatNDTh(co.pA11A,2);           // IOF
      document.formc.pA12A.value = eedisplayFloatNDTh(co.pA12A,2) + '%';     // CET ANUAL
//      document.formc.pA13A.value = co.pA13A;                               // CAMPO PARA TESTAR VALORES
      document.formc.pA14A.value = eedisplayFloatNDTh(co.pA14A,2);           // EMPRÉSTIMO + SEGURO + IOF
      document.formc.pA15A.value = eedisplayFloatNDTh(co.pA15A,2);           // VALOR DA PARCELA MENSAL
      document.formc.pA16A.value = eedisplayFloatNDTh(co.pA16A,2);           // CET MENSAL

      // DEMAIS PARCELAS
      document.formc.pA1B.value = eedisplayFloatNDTh(co.pA1B,2);             // 6 parcelas
      document.formc.pA2B.value = eedisplayFloatNDTh(co.pA2B,2);             // 12 parcelas
      document.formc.pA3B.value = eedisplayFloatNDTh(co.pA3B,2);             // 24 parcelas
      document.formc.pA4B.value = eedisplayFloatNDTh(co.pA4B,2);             // 30 parcelas
 //     document.formc.pA5B.value = eedisplayFloatNDTh(co.pA5B,2);             // 36 parcelas
      document.formc.pA6B.value = eedisplayFloatNDTh(co.pA6B,2);             // 40 parcelas
      document.formc.pA8B.value = eedisplayFloatNDTh(co.pA8B,2);             // 50 parcelas
      document.formc.pA9B.value = eedisplayFloatNDTh(co.pA9B,2);             // 60 parcelas

    };
  };

  var eeisus = 0;
  var eetrue = "VERDADEIRO";
  var eefalse = "FALSO";
  var eedec = ",";
  var eeth = ".";
  var eedecreg = new RegExp(",","g");
  var eethreg = new RegExp("[.]","g");
  var fmtdaynamesshort = new Array("dom","seg","ter","qua","qui","sex","sáb");
  var fmtdaynameslong = new Array("domingo","segunda-feira","terça-feira","quarta-feira","quinta-feira","sexta-feira","sábado");
  var fmtmonthnamesshort = new Array("jan","fev","mar","abr","mai","jun","jul","ago","set","out","nov","dez");
  var fmtmonthnameslong = new Array("janeiro","fevereiro","março","abril","maio","junho","julho","agosto","setembro","outubro","novembro","dezembro");
  var fmtstrings = new Array("/"," ","de");
  var fmtdate1 = new Array(7,32,3,32,11);
  var fmtdate2 = new Array(5,33,34,33,11);
  var fmtdate3 = new Array(1);fmtdate3[0]=5;

  var eecm1=new Array();

  function calc(data){
    var cA1A = data.pA1A;
    var cA2A = data.pA2A;
    var cA3A = data.pA3A;

    var tmp1  = (((eeday((cA3A)))>(0)));
    var tmp2  = (((eeday((cA3A)))<(45)));
    var tmp4  = (((eeday((cA3A)))>(0)));
    var tmp5  = (((eeday((cA3A)))<(45)));
    var tmp7  = (((eeday((cA3A)))>(0)));
    var tmp8  = (((eeday((cA3A)))<(45)));
    var tmp10 = (((eeday((cA3A)))>(0)));
    var tmp11 = (((eeday((cA3A)))<(45)));
    var tmp13 = (((eeday((cA3A)))>(0)));
    var tmp14 = (((eeday((cA3A)))<(45)));
    var tmp16 = (((eeday((cA3A)))>(0)));
    var tmp17 = (((eeday((cA3A)))<(45)));
    var tmp19 = (((eeday((cA3A)))>(0)));
    var tmp20 = (((eeday((cA3A)))<(45)));
    var tmp25 = (((eeday((cA3A)))>(0)));
    var tmp26 = (((eeday((cA3A)))<(45)));
    var tmp28 = (((eeday((cA3A)))>(0)));
    var tmp29 = (((eeday((cA3A)))<(45)));
    var tmp31 = (((eeday((cA3A)))>(0)));
    var tmp32 = (((eeday((cA3A)))<(45)));
    var tmp34 = (((eeday((cA3A)))>(0)));
    var tmp35 = (((eeday((cA3A)))<(45)));

    var sumcnt3_sum  = ((true&&tmp2)&&tmp1);
    var sumcnt3_cnt  = 2;
    var sumcnt6_sum  = ((true&&tmp5)&&tmp4);
    var sumcnt6_cnt  = 2;
    var sumcnt9_sum  = ((true&&tmp8)&&tmp7);
    var sumcnt9_cnt  = 2;
    var sumcnt12_sum = ((true&&tmp11)&&tmp10);
    var sumcnt12_cnt = 2;
    var sumcnt15_sum = ((true&&tmp14)&&tmp13);
    var sumcnt15_cnt = 2;
    var sumcnt18_sum = ((true&&tmp17)&&tmp16);
    var sumcnt18_cnt = 2;
    var sumcnt21_sum = ((true&&tmp20)&&tmp19);
    var sumcnt21_cnt = 2;
    var sumcnt27_sum = ((true&&tmp26)&&tmp25);
    var sumcnt27_cnt = 2;
    var sumcnt30_sum = ((true&&tmp29)&&tmp28);
    var sumcnt30_cnt = 2;
    var sumcnt33_sum = ((true&&tmp32)&&tmp31);
    var sumcnt33_cnt = 2;
    var sumcnt36_sum = ((true&&tmp35)&&tmp34);
    var sumcnt36_cnt = 2;


    var tmp22 = (((eeday((cA3A)))>(0)));
    var tmp23 = (((eeday((cA3A)))<(45)));
    var sumcnt24_sum = ((true&&tmp23)&&tmp22);
    var sumcnt24_cnt = 2;

    // TAXA DE JUROS
   var cA5A = (((((cA2A)<=(6)))?(0.0120): (((((cA2A)<=(12)))?(0.0125): (((((cA2A)<=(36)))?(0.0127):(((((cA2A)<=(48)))?(0.0130):(((((cA2A)<=(72)))?(0.0132):(0.0132)))))))))));

    // VALOR EMPRÉSTIMO + SEGURO
    var cA7A = (((cA1A)/(((1)-(((0.0002165)*(cA2A)))))));

    // SEGURO DEDUZIDO
    var cA6A = (((cA7A)-(cA1A)));
    
    // EMPRÉSTIMO + SEGURO + IOF
    var cA14A=(((cA7A)/(((1)-(0.0038)))));
    
    // PARCELA MENSAL
    var cA15A=(((pmt((cA5A),(cA2A),(cA14A),(0),(0)))*(-1)));

    // IOF
    var cA11A = (((cA14A)-(cA7A)));

    // MÊS E ANO DO PRIMEIRO PAGAMENTO
    var cA8A = (((((((andgeneral(0,sumcnt12_sum,sumcnt12_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))+(cA3A)))+(30)));

    // VALOR DA PARCELA
    var cA4A = (cA15A);
//    var cA4A = (pmt((cA5A),(cA2A),(((((((((((cA5A)/(30)))*(((andgeneral(0,sumcnt27_sum,sumcnt27_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))))*(cA1A)))+(cA1A)+(cA6A)+(cA11A)))*(-1))),(0),(0)));

    // CET MENSAL
    var cA16A=(rate((cA2A),(cA15A),(((cA1A)*(-1))),(0),(0),(0.1)));

    // CET ANUAL
    var cA12A = (((((Math.pow((((((cA16A)/(1)))+(1))),(12)))-(1)))*(100)));

    // CALCULA OS VALORES PARA OS DEMAIS PRAZOS
    var cA1B = (((pmt((0.0120),(6),(((((((cA1A)/(((1)-(((0.0002165)*(6))))))))/(((1)-(0.0038)))))),(0),(0)))*(-1)));
    var cA2B = (((pmt((0.0125),(12),(((((((cA1A)/(((1)-(((0.0002165)*(12))))))))/(((1)-(0.0038)))))),(0),(0)))*(-1)));
    var cA3B = (((pmt((0.0127),(24),(((((((cA1A)/(((1)-(((0.0002165)*(24))))))))/(((1)-(0.0038)))))),(0),(0)))*(-1)));
    var cA4B = (((pmt((0.0127),(36),(((((((cA1A)/(((1)-(((0.0002165)*(36))))))))/(((1)-(0.0038)))))),(0),(0)))*(-1)));
	//var cA5B = (((pmt((0.0137),(36),(((((((cA1A)/(((1)-(((0.00025)*(36))))))))/(((1)-(0.0038)))))),(0),(0)))*(-1)));
    var cA6B = (((pmt((0.0130),(48),(((((((cA1A)/(((1)-(((0.0002165)*(48))))))))/(((1)-(0.0038)))))),(0),(0)))*(-1)));
    var cA8B = (((pmt((0.0132),(72),(((((((cA1A)/(((1)-(((0.0002165)*(72))))))))/(((1)-(0.0038)))))),(0),(0)))*(-1)));
    var cA9B = (((pmt((0.0132),(84),(((((((cA1A)/(((1)-(((0.0002165)*(84))))))))/(((1)-(0.0038)))))),(0),(0)))*(-1)));

    // CAULCULOS ANTERIORES
//    var cA1B = (pmt((cA5A),(6),(((((((((((cA5A)/(30)))*(((andgeneral(0,sumcnt36_sum,sumcnt36_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))))*(cA1A)))+(cA1A)+(cA6A)+(cA11A)))*(-1))),(0),(0)));
//    var cA2B = (pmt((cA5A),(12),(((((((((((cA5A)/(30)))*(((andgeneral(0,sumcnt33_sum,sumcnt33_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))))*(cA1A)))+(cA1A)+(cA6A)+(cA11A)))*(-1))),(0),(0)));
//    var cA3B = (pmt((cA5A),(24),(((((((((((cA5A)/(30)))*(((andgeneral(0,sumcnt30_sum,sumcnt30_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))))*(cA1A)))+(cA1A)+(cA6A)+(cA11A)))*(-1))),(0),(0)));
//    var cA4B = (pmt((cA5A),(30),(((((((((((cA5A)/(30)))*(((andgeneral(0,sumcnt24_sum,sumcnt24_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))))*(cA1A)))+(cA1A)+(cA6A)+(cA11A)))*(-1))),(0),(0)));
//    var cA5B = (pmt((cA5A),(36),(((((((((((cA5A)/(30)))*(((andgeneral(0,sumcnt21_sum,sumcnt21_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))))*(cA1A)))+(cA1A)+(cA6A)+(cA11A)))*(-1))),(0),(0)));
//    var cA6B = (pmt((cA5A),(40),(((((((((((cA5A)/(30)))*(((andgeneral(0,sumcnt18_sum,sumcnt18_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))))*(cA1A)))+(cA1A)+(cA6A)+(cA11A)))*(-1))),(0),(0)));
//    var cA7B = (pmt((cA5A),(45),(((((((((((cA5A)/(30)))*(((andgeneral(0,sumcnt15_sum,sumcnt15_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))))*(cA1A)))+(cA1A)+(cA6A)+(cA11A)))*(-1))),(0),(0)));
//    var cA8B = (pmt((cA5A),(50),(((((((((((cA5A)/(30)))*(((andgeneral(0,sumcnt9_sum,sumcnt9_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))))*(cA1A)))+(cA1A)+(cA6A)+(cA11A)))*(-1))),(0),(0)));
//    var cA9B = (pmt((cA5A),(55),(((((((((((cA5A)/(30)))*(((andgeneral(0,sumcnt6_sum,sumcnt6_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))))*(cA1A)))+(cA1A)+(cA6A)+(cA11A)))*(-1))),(0),(0)));
//    var cA10B = (pmt((cA5A),(72),(((((((((((cA5A)/(30)))*(((andgeneral(0,sumcnt3_sum,sumcnt3_cnt,eecm1))?(((25)-(eeday((cA3A))))):(((30)-(((eeday((cA3A)))-(25)))))))))*(cA1A)))+(cA1A)+(cA6A)+(cA11A)))*(-1))),(0),(0)));

    // CAPMO UTILIZADO PARA TESTE DE RESULTADOS DE VALORES
    var cA13A = (eeday((cA3A)));
//    var cA13A = eedatefmt(fmtdate2,cA8A);

    // ATRIBUIÇÕES DOS VALORES DE "P"
    data.pA1B=cA1B;
    data.pA2B=cA2B;
    data.pA3B=cA3B;
    data.pA4A=cA4A;
    data.pA4B=cA4B;
    data.pA5A=cA5A;
    //data.pA5B=cA5B;
    data.pA6A=cA6A;
    data.pA6B=cA6B;
    data.pA7A=cA7A;
    data.pA8A=cA8A;
    data.pA8B=cA8B;
    data.pA9B=cA9B;
  //  data.pA10B=cA10B;
    data.pA11A=cA11A;
    data.pA12A=cA12A;
    data.pA13A=cA13A;  //CAMPO DE TESTE
   data.pA14A=cA14A;
    data.pA15A=cA15A;
    data.pA16A=cA16A;
  };
  
  function myIsNaN(x){
    return(isNaN(x)||(typeof x=='number'&&!isFinite(x)));
  };

  function mod(n,d){
    return n-d*Math.floor(n/d);
  };

  function round(n,nd){
    if(isFinite(n)&&isFinite(nd)){
      var sign_n=(n<0)?-1:1;
      var abs_n=Math.abs(n);
      var factor=Math.pow(10,nd);
      return sign_n*Math.round(abs_n*factor)/factor;
    }else{
      return NaN;
    }
  };

  function andgeneral(cnt,vsum,vcnt,x){
    if(!vsum){
      return false;
    };
    for(var ii=0;ii<x.length;ii++){
      var arr=x[ii][0];
      for(var jj=x[ii][1];jj<=x[ii][3];jj++){
        for(var kk=x[ii][2];kk<=x[ii][4];kk++){
          if(!arr[jj][kk]){
            return false;
          };
        };
      };
    };
    return true;
  };

  function eeparseFloat(str){
    str = String(str).replace(eedecreg,".");
    var res = parseFloat(str);
    if(isNaN(res)){
      return 0;
    }else{
      return res;
    }
  };

  function eedisplayFloat(x){
    if(myIsNaN(x)){
      return Number.NaN;
    }else{
      return String(x).replace(/\./g,eedec);
    }
  };

  function eedisplayFloatND(x,nd){
    if(myIsNaN(x)){
      return Number.NaN;
    }else{
      var res = round(x,nd);
      if(nd>0){
        var str = String(res);
        if(str.indexOf('e')!=-1)
          return str;
        if(str.indexOf('E')!=-1)
          return str;
        var parts = str.split('.');
        if(parts.length<2){
        var decimals = ('00000000000000').substring(0,nd);
        return(parts[0]).toString()+eedec+decimals;
      }else{
        var decimals=((parts[1]).toString()+'00000000000000').substring(0,nd);
        return(parts[0]).toString()+eedec+decimals;}
      }else{
        return res;
      }
    }
  };

  function eedisplayPercentND(x,nd){
    if(myIsNaN(x)){
      return Number.NaN;
    }else{
      return eedisplayFloatND(x*100,nd)+'%';
    }
  }

  function eeparseFloatTh(str){
    str = String(str).replace(eethreg,"");
    str = String(str).replace(eedecreg,".");
    var res = parseFloat(str);
    if(isNaN(res)){
      return 0;
    }else{
    return res;
    }
  };

  function eedisplayFloatNDTh(x,nd){
    if(myIsNaN(x)){
      return Number.NaN;
    }else{
      var res = round(x,nd);
      if(nd>0){
        var str=String(res);
        if(str.indexOf('e')!=-1)
          return str;
        if(str.indexOf('E')!=-1)
          return str;
        var parts=str.split('.');
        var res2=eeinsertThousand(parts[0].toString());
        if(parts.length<2){
          var decimals=('00000000000000').substring(0,nd);
          return(res2+eedec+decimals);
        }else{
          var decimals=((parts[1]).toString()+'00000000000000').substring(0,nd);
          return(res2+eedec+decimals);
        }
      }else{
        return(eeinsertThousand(res.toString()));
      }
    }
  };

  function eeinsertThousand(whole){
    if(whole==""||whole.indexOf("e")>=0){
      return whole;
    }else{
      var minus_sign="";
      if(whole.charAt(0)=="-"){minus_sign="-";
      whole=whole.substring(1);};
      var res="";
      var str_length=whole.length-1;
      for(var ii=0;ii<=str_length;ii++){
        if(ii>0&&ii%3==0){
          res=eeth+res;
        };
        res=whole.charAt(str_length-ii)+res;
      };
      return minus_sign+res;
    }
  };
  function eedatefmt(fmt,x){
    if(!isFinite(x))
      return Number.NaN;
      var tmp=0;
      var res="";
      var len=fmt.length;
    for(var ii=0;ii<len;ii++){
      if(fmt[ii]>31){
        res+=fmtstrings[fmt[ii]-32];
      }else{
        switch(fmt[ii]){
          case 2:res+=eemonth(x);
            break;
          case 3:tmp=eemonth(x);
            if(tmp<10){
              res+="0";
            };
            res+=tmp;
            break;
          case 4:res+=fmtmonthnamesshort[eemonth(x)-1];
            break;
          case 5:res+=fmtmonthnameslong[eemonth(x)-1];
            break;
          case 6:res+=eeday(x);
            break;
          case 7:tmp=eeday(x);
            if(tmp<10){
              res+="0";
            };
            res+=tmp;
            break;
          case 8:res+=fmtdaynamesshort[weekday(x,1)-1];
            break;
          case 9:res+=fmtdaynameslong[weekday(x,1)-1];
            break;
          case 10:tmp=year(x)%100;
            if(tmp<10){
              res+="0";
            };
            res+=tmp;
            break;
          case 11:res+=year(x);
            break;
          case 12:res+=hour(x);
            break;
          case 13:tmp=hour(x);
            if(tmp<10){
              res+="0";
            };
            res+=tmp;
            break;
          case 14:res+=hour(x)%12;
            break;
          case 15:tmp=hour(x)%12;
            if(tmp<10){
              res+="0";
            };
            res+=tmp;
            break;
          case 16:res+=minute(x);
            break;
          case 17:tmp=minute(x);
            if(tmp<10){
              res+="0";
            };
            res+=tmp;
            break;
          case 18:res+=second(x);
            break;
          case 19:tmp=second(x);
            if(tmp<10){
              res+="0";
            };
            res+=tmp;
            break;
          case 21:
          case 22:res+="AM/PM";
            break;
        };
      };
    };
    return res;
  };

  function eeisstring(v){
    switch(typeof v){
      case "string":return true;
      case "object":return v.constructor==String;default:return false;
    }
  };

  function leap_gregorian(year){
    return((year%4)==0)&&(!(((year%100)==0)&&((year%400)!=0)));
  }

  var GREGORIAN_EPOCH=1721425;

  function gregorian_to_jd(year,month,day){
    return(GREGORIAN_EPOCH-0)+(365*(year-1))+Math.floor((year-1)/4)+(-Math.floor((year-1)/100))+Math.floor((year-1)/400)+Math.floor((((367*month)-362)/12)+((month<=2)?0:(leap_gregorian(year)?-1:-2))+day);
  }

  function jd_to_gregorian(jd){
    var wjd,depoch,quadricent,dqc,cent,dcent,quad,dquad,yindex,year,yearday,leapadj;
    wjd=Math.floor(jd);
    depoch=wjd-GREGORIAN_EPOCH-1;
    quadricent=Math.floor(depoch/146097);
    dqc=mod(depoch,146097);
    cent=Math.floor(dqc/36524);
    dcent=mod(dqc,36524);
    quad=Math.floor(dcent/1461);
    dquad=mod(dcent,1461);
    yindex=Math.floor(dquad/365);
    year=(quadricent*400)+(cent*100)+(quad*4)+yindex;
    if(!((cent==4)||(yindex==4))){
      year++;
    }
    yearday=wjd-gregorian_to_jd(year,1,1);
    leapadj=((wjd<gregorian_to_jd(year,3,1))?0:(leap_gregorian(year)?1:2));
    var month=Math.floor((((yearday+leapadj)*12)+373)/367);
    var day=(wjd-gregorian_to_jd(year,month,1))+1;
    return new Array(year,month,day);
  }

  var r99=new RegExp("[a-zA-Z]+|[0-9]+|:","g");

  function eeparsedate_keep_all(str){
    var res=eeparsedate(str,3);
    if(isNaN(res)){
      return 1;
    }else{
      return res;
    }
  };

  function eeparsedate_keep_allV(str){
    if(str=="")return str;
    var res=eeparsedate(str,3);
    if(isNaN(res)){
      return str;
    }else{
      return res;
    }
  };

  function eeparsedate_keep_time(str){
    var res=eeparsedate(str,2);
    if(isNaN(res)){
      return 0;
    }else{
      return res;
    }
  };

  function eeparsedate_keep_timeV(str){
    if(str=="")return str;
    var res=eeparsedate(str,2);
    if(isNaN(res)){
      return str;
    }else{
      return res;
    }
  };

  function eeparsedate(str,keep){
    var year=1900;
    var month=1;
    var day=1;
    var hour=0;
    var minutes=0;
    var seconds=0;
    var ptr=0;
    var current=0;
    var lookahead;
    var parts;
    parts=str.match(r99);
    var len=0;
    if(str.length>0)len=parts.length;
    var time_parsed=false;
    if(len<1){
      return Number.NaN;
    }else{
      var cmd=1;
      if(len>1){
        lookahead=parts[1];
        if(lookahead==":"){
          cmd=2
        };
      };
      while(cmd>0&&ptr<len){
        if(cmd==1){
          current=parseFloat(parts[ptr]);
          if(isNaN(current))return Number.NaN;
          lookahead=parts[ptr+1];
          if(lookahead==":"){
            cmd=2;
          }else{
            if(current>1899){
              year=current;ptr++;
              current=parseFloat(parts[ptr++]);
              if(isNaN(current))return Number.NaN;
              month=current;
              current=parseFloat(parts[ptr++]);
              if(isNaN(current))return Number.NaN;
              day=current;cmd=3;
            }else if(current<32){
              if(eeisus){
                month=current;
                ptr++;
                current=parseFloat(parts[ptr++]);
                if(isNaN(current))return Number.NaN;
                if(current>1899){
                  year=current;
                }else{
                  day=current;
                  current=parseFloat(parts[ptr++]);
                  if(isNaN(current))return Number.NaN;
                  year=current;
                  if(year<30){
                    year+=2000;
                  }
                };
              }else{
                day=current;
                ptr++;
                current=parseFloat(parts[ptr++]);
                if(isNaN(current))return Number.NaN;
                if(current>1899){
                  year=current;
                  month=day;
                  day=1;
                }else{
                  month=current;
                  current=parseFloat(parts[ptr++]);
                  if(isNaN(current))return Number.NaN;
                  year=current;
                  if(year<30){
                    year+=2000;
                  }
                };
              }
              cmd=3;
            }else{
              return Number.NaN;
            };
          };
        }else if(cmd==2||cmd==3){
          if(cmd==3&&time_parsed){
            return Number.NaN;
          };
          time_parsed=true;
          current=parseFloat(parts[ptr++]);
          if(isNaN(current))return Number.NaN;
          hour=current;
          lookahead=parts[ptr++];
          if(lookahead==":"){
            current=parseFloat(parts[ptr++]);
            if(isNaN(current))return Number.NaN;
            minutes=current;
            current=parts[ptr];
            if(current==":"){
              ptr++;
              current=parseFloat(parts[ptr++]);
              if(isNaN(current))return Number.NaN;
              seconds=current;
            };
          };
          cmd=1;
        }
      }
    };
    switch(keep){
      case 1:return date(year,month,day);
      case 2:return time(hour,minutes,seconds);
      case 3:return date(year,month,day)+time(hour,minutes,seconds);
      default:return Number.NaN;
    }
  };

  function date(year,month,day){
    if(!isFinite(day)||!isFinite(month)||!isFinite(year))return Number.NaN;
    if(year<1900){
      year+=1900
    };
    if(year>9999)return Number.NaN;
    var adj_year=year;
    var adj_month=month;
    if(month>0){
      adj_year=year+Math.floor((month-1)/12);
      adj_month=((month-1)%12)+1;
    }else if(month<0){
      var tmp=Math.ceil((-month)/12);
      adj_year=year-tmp;
      adj_month=adj_month+tmp*12;
    }
    var res=Math.floor(gregorian_to_jd(adj_year,adj_month,day)-2415020);
    if(res>59)return res+1;
    return res;
  };

  function eeday(serial_number){
    if(!isFinite(serial_number))return Number.NaN;
    if(serial_number<1){
      return 0;
    }
    if(serial_number>60)serial_number--;
    var res=jd_to_gregorian(serial_number+2415020);
    return res[2];
  };

  function hour(serial_number){
    if(!isFinite(serial_number))return Number.NaN;
    var res=Math.floor((serial_number-Math.floor(serial_number))*86400+0.5);
    return Math.floor(res/3600);
  }

  function minute(serial_number){
    if(!isFinite(serial_number))return Number.NaN;
    var res=Math.floor((serial_number-Math.floor(serial_number))*86400+0.5);
    return Math.floor(res/60)%60;
  };

  function eemonth(serial_number){
    if(!isFinite(serial_number))return Number.NaN;
    if(serial_number<1){
      return 1;
    }
    if(serial_number>60)serial_number--;
    var res=jd_to_gregorian(serial_number+2415020);
    return res[1];
  };

  function second(serial_number){
    if(!isFinite(serial_number))return Number.NaN;
    var res=Math.floor((serial_number-Math.floor(serial_number))*86400+0.5);
    return res%60;
  };

  function time(hour,minute,second){
    if(!isFinite(second)||!isFinite(minute)||!isFinite(hour))return Number.NaN;
    return((second+minute*60+hour*3600)%86400)/86400;
  };

  function weekday(serial_number,return_type){
    if(!isFinite(return_type)||!isFinite(serial_number))return Number.NaN;
    if(return_type<1||return_type>3)return Number.NaN;
    var res=(serial_number+6)%7;
    switch(Math.floor(return_type)){
      case 1:return res+1;
      case 2:return(res+6)%7+1;
      case 3:return(res+6)%7;
    };
    return "hej";
  };

  function year(serial_number){
    if(!isFinite(serial_number))return Number.NaN;
    if(serial_number<1){
      return 1900;
    }if(serial_number>60)serial_number--;
    var res=jd_to_gregorian(serial_number+2415020);
    return res[0];
  };

  function fv(rate,nper,pmt,pv,type){
    if(!isFinite(type)||!isFinite(pv)||!isFinite(pmt)||!isFinite(nper)||!isFinite(rate))return Number.NaN;
    if(rate==0)return-(pv+nper*pmt);
    var type1=(type!=0)?1:0;
    var pvif=Math.pow(1+rate,nper);
    var fvifa=(Math.pow(1+rate,nper)-1)/rate;
    return(-((pv*pvif)+pmt*(1+rate*type1)*fvifa));
  };

  function pmt(rate,nper,pv,fv,type){
    var pvif=Math.pow(1+rate,nper);
    var fvifa=(Math.pow(1+rate,nper)-1)/rate;
    var type1=(type!=0)?1:0;
    return((-pv*pvif-fv)/((1+rate*type1)*fvifa));
  };
  
  // PARTE 2
  
  var op2, ob_tb, ob_url, selected_node_id;
  function ob_wk(os, url) {
    var ot = os.parentNode.nextSibling.firstChild.nextSibling;
    var lensrc = (os.src.length - 8);
    var s = os.src.substr(lensrc, 8);
    if (s == "inus.gif") {
        ot.style.display = "none";
        os.src = "imagens/plusik.gif";
    }
    if (s == "usik.gif") {
        ot.style.display = "block";
        os.src = "imagens/minus.gif";
      if (url != "") {
        var s = os.parentNode.nextSibling.firstChild.nextSibling.innerText;
        if (s != "Loading ...") {
            return;
        }
        ob_url = url;
        ob_tb = os;
        window.setTimeout("ob_tm()", 100);
      }
    }
  }

  function ob_tm() {
	  var xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
  	xmlhttp.open("GET", ob_url, false);
	  xmlhttp.send("");
  	ob_tb.parentNode.nextSibling.firstChild.nextSibling.outerHTML = xmlhttp.responseText;
  }

  function ob_ft(e) {
    if (e.tagName == "TABLE" && e.className == "ob_zz") {
        if (typeof op2 != "undefined") {
            op2.style.backgroundColor = "transparent";
            op2.style.border = "0px solid #999999";
            op2.style.margin = "1px";
        }
        e.style.backgroundColor = "ccddee";
        e.style.border = "1px solid #666666";
        e.style.margin = "0px";
        op2 = e;
        selected_node_id = e.firstChild.firstChild.childNodes[1].id;
    }
    else {
        ob_ft(e.parentNode);
    }
  }

  function ob_os(e){
    var os = e.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.firstChild.firstChild;
    if (os != null) {
      if ((typeof os != "undefined") && (os.tagName == "IMG")) {
        var lensrc = (os.src.length - 8);
        var s = os.src.substr(lensrc, 8);
        if ((s == "inus.gif") || (s == "usik.gif")) {
            e.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.firstChild.firstChild.click();
        }
      }else {
        ob_os(e.parentNode);
      }
    }
  }
  
 function rate(nper,pmt,pv,fv,type,guess){
   if(!isFinite(guess)||!isFinite(type)||!isFinite(fv)||!isFinite(pv)||!isFinite(pmt)||!isFinite(nper))
     return Number.NaN;
   var type2=(type)?1:0;
   var wanted_precision=0.00000001;
   var current_diff=Number.MAX_VALUE;
   var x,next_x,y,z;
   if(guess==0)
     x=0.1;
   else
     x=guess;
   var max_iterations=100;
   var iterations_done=0;
   while(current_diff>wanted_precision&&iterations_done<max_iterations){
     if(x==0)
       next_x=x-(pv+pmt*nper+fv)/(pv*nper+pmt*(nper*(nper-1)+2*type2*nper)/2);
     else{
       y=Math.pow(1+x,nper-1);
       z=y*(1+x);
       next_x=x*(1-(x*pv*z+pmt*(1+x*type2)*(z-1)+x*fv)/(x*x*nper*pv*y-pmt*(z-1)+x*pmt*(1+x*type2)*nper*y));
     }iterations_done++;
     current_diff=Math.abs(next_x-x);
     x=next_x;
   }
   if(guess==0&&Math.abs(x)<wanted_precision)
     x=0;
   if(current_diff>=wanted_precision){
     return Number.NaN;
   }else{
     return x;
   };
 };

