var CURRENCY_SHORT_NAME = "у.е.";
var CHANGE_SHORT_NAME   = "cen.";

function triad(tr,fem)
{
   var result = '';
   var first  = tr.substr(0,1);
   var second = tr.substr(1,1);
   var third  = tr.substr(2,1);

   if (!(first>='0' && first <='9'))    first='0';
   if (!(second>='0' && second <='9'))  second='0';
   if (!(third>='0' && third <='9'))    third='0';
   switch (third){
     case '1' : if (fem) result = 'одна'; else result = 'один'; break;
     case '2' : if (fem) result = 'две'; else result = 'два';   break;
     case '3' : result = 'три';      break;
     case '4' : result = 'четыре';   break;
     case '5' : result = 'пять';     break;
     case '6' : result = 'шесть';    break;
     case '7' : result = 'семь';     break;
     case '8' : result = 'восемь';   break;
     case '9' : result = 'девять';   break;
   }
   switch (second) {
     case '1' : {
                  switch (third) {
                     case '0' : result = 'десять';       break;
                     case '1' : result = 'одиннадцать '; break;
                     case '2' : result = 'двенадцать ';  break;
                     case '3' : result = 'тринадцать ' ; break;
                     case '4' : result = 'четырнадцать ';break;
                     case '5' : result = 'пятнадцать ';  break;
                     case '6' : result = 'шестнадцать '; break;
                     case '7' : result = 'семнадцать ';  break;
                     case '8' : result = 'восемнадцать ';break;
                     case '9' : result = 'девятнадцать ';break;
                  }  
                }                                  break;
     case '2' : result = 'двадцать ' + result;    break;
     case '3' : result = 'тридцать ' + result;    break;
     case '4' : result = 'сорок ' + result;       break;
     case '5' : result = 'пятьдесят ' + result;   break;
     case '6' : result = 'шестесят ' + result;    break;
     case '7' : result = 'семьдесят ' + result;   break;
     case '8' : result = 'восемьдесят ' + result; break;
     case '9' : result = 'девяносто ' + result;   break;
   }
   switch (first) {
     case '1' : result = 'сто ' + result;         break;
     case '2' : result = 'двести ' + result;      break;
     case '3' : result = 'триста ' + result;      break;
     case '4' : result = 'четыреста ' + result;   break;
     case '5' : result = 'пятьсот ' + result;     break;
     case '6' : result = 'шестьсот ' + result;    break;
     case '7' : result = 'семьсот ' + result;     break;
     case '8' : result = 'восемьсот ' + result;   break;
     case '9' : result = 'девятьсот ' + result;   break;
   }
   return result;
}

function padezh(tr,deg)
{
  switch(tr.substr(2,1)){
    case '1' : { 
                 switch (deg) {
                   case 1 : return ' тысяча ';
                   case 2 : return ' миллион ';
                   case 3 : return ' миллиард ';
                 }
               }
    case '2' :
    case '3' :
    case '4' :
               { 
                 switch (deg) {
                   case 1 : return ' тысячи ';
                   case 2 : return ' миллиона ';
                   case 3 : return ' миллиарда ';
                 }
               }
    default :  { 
                 switch (deg) {
                   case 1 : return ' тысяч ';
                   case 2 : return ' миллионов ';
                   case 3 : return ' миллиардов ';
                 }
               }

  }
  return '';
}

function by_words(n)
{
   if (isNaN(n)) return '';
   var ntr,tr,ss,otr,sn;
   var res = ' ';                   // результат
   var por = '';                    // порядок
   var deg = 0;                     
   var fem = false;                 // признак женского рода
   var LC = 'одтчпшсвд';            // первые буквы цифр на нижнем регистре
   var UC = 'ОДТЧПШСВД';            // первые буквы цифр на верхнем регистре

   n = Math.round(n);               // Округлим до целого

   sn = n.toString();
   ntr = Math.ceil(sn.length / 3);
   for (var i = sn.length; i > 0; i-=3)
   {
      tr = sn.substring(i,i-3);
      switch(tr.length){
        case 1 : tr = '00'+tr; break;
        case 2 : tr = '0'+tr;  break;
      }
      por = padezh(tr,deg);
      fem = deg == 1;
      otr = triad(tr,fem);
      res = otr +  por +  res;       
      deg++;
   }
// Меняем первую букву на заглавную
   var letter = res.substr(0,1);
   i = LC.indexOf(letter); 
   res = UC.substr(i,1)+res.substring(1);

   return res;
}

function money_by_words(n)
{
   if (isNaN(n)) return '';
   var ntr,tr,ss,otr,sn;
   var res = ' ';                   // результат
   var por = '';                    // порядок
   var deg = 0;                     
   var fem = false;                 // признак женского рода
   var LC = 'одтчпшсвд';            // первые буквы цифр на нижнем регистре
   var UC = 'ОДТЧПШСВД';            // первые буквы цифр на верхнем регистре
   var int, frac;                   // целая и дробная части
// Округлим до двух знаков после запятой  
   int = Math.floor(n);
   frac = n - int; 
   frac = Math.round(frac * 100);
//
   sn = int.toString();
   ntr = Math.ceil(sn.length / 3);
   for (var i = sn.length; i > 0; i-=3)
   {
      tr = sn.substring(i,i-3);
      switch(tr.length){
        case 1 : tr = '00'+tr; break;
        case 2 : tr = '0'+tr;  break;
      }
      por = padezh(tr,deg);
      fem = deg == 1;
      otr = triad(tr,fem);
      res = otr +  por +  res;       
      deg++;
   }
// Меняем первую букву на заглавную
   var letter = res.substr(0,1);
   i = LC.indexOf(letter); 
   res = UC.substr(i,1)+res.substring(1);

   return res + ' ' + CURRENCY_SHORT_NAME + ' ' + frac + ' ' + CHANGE_SHORT_NAME;
}
