var  Max = 1002; // Max = Anzahl der Namen * 3 

var _Names = new Array(
    '', 
    'Tausend', 'Million', 'Milliarde', 
    'Billion', 'Billiarde', 'Trillion',
    'Trilliarde', 'Quadrillion', 'Quadrilliarde', 
    'Quintillion','Quintilliarde', 'Sextillion', 
    'Sextilliarde', 'Septillion','Septilliarde', 
    'Oktillion', 'Oktilliarde', 'Nonillion', 
    'Nonilliarde','Dezillion', 'Dezilliarde', 
    'Undezillion', 'Undezilliarde','Duodezillion', 
    'Duodezilliarde', 'Tredezillion', 'Tredezilliarde',
    'Quattuordezillion', 'Quattuordezilliarde', 'Quindezillion',
    'Quindezilliarde', 'Sexdezillion', 'Sexdezilliarde', 
    'Septendezillion','Septendezilliarde', 'Oktodezillion', 
    'Oktodezilliarde', 'Novemdezillion','Novemdezilliarde', 
    'Vigintillion', 'Vigintilliarde', 'Unvigintillion',
    'Unvigintilliarde', 'Duovigintillion', 'Duovigintilliarde', 
    'Trevigintillion','Trevigintilliarde', 'Quattuorvigintillion', 
    'Quattuorvigintilliarde','Quinvigintillion', 'Quinvigintilliarde', 
    'Sexvigintillion','Sexvigintilliarde', 'Septenvigintillion', 
    'Septenvigintilliarde','Oktovigintillion', 'Oktovigintilliarde', 
    'Novemvigintillion','Novemvigintilliarde', 'Trigintillion', 
    'Trigintilliarde','Untrigintillion', 'Untrigintilliarde', 
    'Duotrigintillion','Duotrigintilliarde', 'Tretrigintillion', 
    'Tretrigintilliarde','Quattuortrigintillion', 'Quattuortrigintilliarde', 
    'Quintrigintillion','Quintrigintilliarde', 'Sextrigintillion', 
    'Sextrigintilliarde','Septentrigigintillion', 'Septentrigigintilliarde', 
    'Oktotrigintillion','Oktotrigintilliarde', 'Novemtrigintillion', 
    'Novemtrigintilliarde','quadragintillion','quadragintilliarde',
    'unquadragintillion','unquadragintilliarde','duoquadragintillion',
    'duoquadragintilliarde','trequadragintillion','trequadragintilliarde',
    'quattuorquadragintillion','quattuorquadragintilliarde','quinquadragintillion',
    'quinquadragintilliarde','sexquadragintillion','sexquadragintilliarde',
    'septenquadragintillion','septenquadragintilliarde','oktoquadragintillion',
    'oktoquadragintilliarde','novemquadragintillion','novemquadragintilliarde',
    'quinquagintillion','quinquagintilliarde','unquinquagintillion',
    'unquinquagintilliarde','duoquinquagintillion','duoquinquagintilliarde',
    'trequinquagintillion','trequinquagintilliarde','quattuorquinquagintillion',
    'quattuorquinquagintilliarde','quinquinquagintillion','quinquinquagintilliarde',
    'sexquinquagintillion','sexquinquagintilliarde','septenquinquagintillion',
    'septenquinquagintilliarde','oktoquinquagintillion','oktoquinquagintilliarde',
    'novemquinquagintillion','novemquinquagintilliarde','sexagintillion',
    'sexagintilliarde','unsexagintillion','unsexagintilliarde',
    'duosexagintillion','duosexagintilliarde','tresexagintillion',
    'tresexagintilliarde','quattuorsexagintillion','quattuorsexagintilliarde',
    'quinsexagintillion','quinsexagintilliarde','sexsexagintillion',
    'sexsexagintilliarde','septensexagintillion','septensexagintilliarde',
    'oktosexagintillion','oktosexagintilliarde','novemsexagintillion',
    'novemsexagintilliarde','septuagintillion','septuagintilliarde',
    'unseptuagintillion','unseptuagintilliarde','duoseptuagintillion',
    'duoseptuagintilliarde','treseptuagintillion','treseptuagintilliarde',
    'quattuorseptuagintillion','quattuorseptuagintilliarde','quinseptuagintillion',
    'quinseptuagintilliarde','sexseptuagintillion','sexseptuagintilliarde',
    'septenseptuagintillion','septenseptuagintilliarde','oktoseptuagintillion',
    'oktoseptuagintilliarde','novemseptuagintillion','novemseptuagintilliarde',
    'oktogintillion','oktogintilliarde','unoktogintillion',
	'unoktogintilliarde','duooktogintillion','duooktogintilliarde',
	'treoktogintillion','treoktogintilliarde','quattuoroktogintillion',
	'quattuoroktogintilliarde','quinoktogintillion','quinoktogintilliarde',
	'sexoktogintillion',	'sexoktogintilliarde','septenoktogintillion',
	'septenoktogintilliarde','oktooktogintillion','oktooktogintilliarde',
	'novemoktogintillion','novemoktogintilliarde','nonagintillion',
	'nonagintilliarde','unnonagintillion','unnonagintilliarde',
	'duononagintillion','duononagintilliarde','trenonagintillion',
	'trenonagintilliarde','quattuornonagintillion','quattuornonagintilliarde',
	'quinnonagintillion','quinnonagintilliarde','sexnonagintillion',
	'sexnonagintilliarde','septennonagintillion','septennonagintilliarde',
	'oktononagintillion','oktononagintilliarde','novemnonagintillion',
	'novemnonagintilliarde','centillion','centilliarde',
	'centuntillion','centuntilliarde','centduotillion',
	'centduotilliarde','centtretillion','centtretilliarde',
	'centquattuortillion','centquattuortilliarde','centquintillion',
	'centquintilliarde','centsextillion','centsextilliarde',
	'centseptentillion','centseptentilliarde','centoktotillion',
	'centoktotilliarde','centnovemtillion','centnovemtilliarde',
	'centdezillion','centdezilliarde','centundezillion',
	'centundezilliarde','centduodezillion','centduodezilliarde',
	'centtredezillion','centtredezilliarde','centquattuordezillion',
	'centquattuordezilliarde','centquindezillion','centquindezilliarde',
	'centsexdezillion','centsexdezilliarde','centseptendezillion',
	'centseptenezilliarde','centoktodezillion','centoktodezilliarde',
	'centnovemdezillion','centnovemdezilliarde','centvigintillion',
	'centvigintilliarde','centunvigintillion','centunvigintilliarde',
	'centduovigintillion','centduovigintilliarde','centtrevigintillion',
	'centtrevigintilliarde','centquattuorvigintillion','centquattuorvigintilliarde',
	'centquinvigintillion','centquinvigintilliarde','centsexvigintillion',
	'centsexvigintilliarde','centseptenvigintillion','centseptenvigintilliarde',
	'centoktovigintillion','centoktovigintilliarde','centnovemvigintillion',
	'centnovemvigintilliarde','centtrigintillion','centtrigintilliarde',
	'centuntrigintillion','centuntrigintilliarde','centduotrigintillion',
	'centduotrigintilliarde','centtretrigintillion','centtretrigintilliarde',
	'centquattuortrigintillion','centquattuortrigintilliarde','centquintrigintillion',
	'centquintrigintilliarde','centsextrigintillion','centsextrigintilliarde',
	'centseptentrigintillion','centseptentrigintilliarde','centoktotrigintillion',
	'centoktotrigintilliarde','centnovemtrigintillion','centnovemtrigintilliarde',
	'centquadragintillion','centquadragintilliarde','centunquadragintillion',
	'centunquadragintilliarde','centduoquadragintillion','centduoquadragintilliarde',
	'centtrequadragintillion','centtrequadragintilliarde','centquattuorquadragintillion',
	'centquattuorquadragintilliarde','centquinquadragintillion','centquinquadragintilliarde',
	'centsexquadragintillion','centsexquadragintilliarde','centseptenquadragintillion',
	'centseptenquadragintilliarde','centoktoquadragintillion','centoktoquadragintilliarde',
	'centnovemquadragintillion','centnovemquadragintilliarde','centquinquagintillion',
	'centquinquagintilliarde','centunquinquagintillion','centunquinquagintilliarde',
	'centduoquinquagintillion','centduoquinquagintilliarde','centtrequinquagintillion',
	'centtrequinquagintilliarde','centquattuorquinquagintillion','centquattuorquinquagintilliarde',
	'centquinquinquagintillion','centquinquinquagintilliarde','centsexquinquagintillion',
	'centsexquinquagintilliarde','centseptenquinquagintillion','centseptenquinquagintilliarde',
	'centoktoquinquagintillion','centoktoquinquagintilliarde','centnovemquinquagintillion',
	'centnovemquinquagintilliarde','centsexagintillion','centsexagintilliarde',
	'centunsexagintillion','centunsexagintilliarde','centduosexagintillion',
	'centduosexagintilliarde','centtresexagintillion','centtresexagintilliarde',
	'centquattuorsexagintillion','centquattuorsexagintilliarde','centquinsexagintillion',
	'centquinsexagintilliarde','centsexsexagintillion','centsexsexagintilliarde');
     
 
function GetName(Index,Plural)
{ 
  temp_max = parseInt(Max/3,10);
  if (Index >= temp_max) 
   { 
     alert('Die von Ihne ausgewählte Zahl überschreitet den Wertebereich!' + Index + '/' + Max); // Zu große zahl   -> Keine Name mehr im Array
     return;
   }  
  Result = _Names[Index];
  
  letztes_zeichen = Result.charAt(Result.length-1);
  
  if (Plural && (Result != '')) {
     switch (letztes_zeichen) {     
       case 'n': Result = Result + 'en';break;
       case 'e': Result = Result + 'n'; break;
    }
  }  
 return Result;
}
  
    
function Short(Zahl,AddAnd,Last) 
// * AddAnd - Wenn True, wird ein 'und' am Ende angefügt.
  {    
    Result = '';
    switch (Zahl) {
    case  1 :
      {
        if (Last == true){
          Result = 'eins';
          }
        else {
          Result = 'ein';}
      }break;
      case 2: Result = 'zwei';break;
      case 3: Result = 'drei';break;
      case 4: Result = 'vier';break;
      case 5: Result = 'fünf';break;
      case 6: Result = 'sechs';break;
      case 7: Result = 'sieben';break;
      case 8: Result = 'acht';break;
      case 9: Result = 'neun';break;
    default:
      Result = '';break;
    };
  
    if ((AddAnd == true) && (Zahl != 0)){
      Result = Result + 'und';}
      
  return Result;    
  };  
  
  
function GetShortName(Zahl,Tousand,Last) // Private
  //
  // * Gibt den Zahlenname für Ziffern größer 1 zurück.
  // * Last - Gibt an, dass es sich um die letzte Ziffer eines Segments handelt.
  // * Wenn True und Zahl = 1, dann wird 'eins' zurückgegeben, wenn False und
  // * Zahl = 1, dann 'ein'.
  // 
{
  Result = '';
  if (Zahl >= 100)
  {
    switch (parseInt(Zahl / 100,10)){
      case 1 : Result = 'einhundert'; break;
    default :
      Result = Short(parseInt(Zahl / 100,10),false,Last) + 'hundert'; break;
    };
  };
  
  if (Zahl >= 10)
  {         
    Temp = Zahl - parseInt(Zahl / 10,10) * 10;
 
    switch (parseInt((Zahl - (parseInt(Zahl / 100,10) * 100)) / 10,10)){
      case 1:
      {
        switch (Zahl - (parseInt(Zahl / 100,10) * 100)){ 
          case 11: Result = Result + 'elf'; break;
          case 12: Result = Result + 'zwölf'; break;
          case 16: Result = Result + 'sechzehn'; break;
          case 17: Result = Result + 'siebzehn'; break;

          default :
            Result = Result + Short(Temp,false,Last) + 'zehn'; break;
        };
        break;
      };
      case 2: Result = Result + Short(Temp, true, false) + 'zwanzig';break;
      case 3: Result = Result + Short(Temp, true, false) + 'dreißig';break;
      case 4: Result = Result + Short(Temp, true, false) + 'vierzig';break;
      case 5: Result = Result + Short(Temp, true, false) + 'fünfzig';break;
      case 6: Result = Result + Short(Temp, true, false) + 'sechzig';break;
      case 7: Result = Result + Short(Temp, true, false) + 'siebzig';break;
      case 8: Result = Result + Short(Temp, true, false) + 'achtzig'; break;
      case 9: Result = Result + Short(Temp, true, false) + 'neunzig';break;
      case 0: Result = Result + Short(Temp, false, Last, true);break;
    };
  }
  else if (Zahl > 0)
  {
    switch (Zahl){
      case 1:
      {
        if (Last == true){
          Result = 'eins';
          }
        else { 
          if (Tousand == true){
            Result = 'ein';}
          else {
            Result = 'eine';}
        }    
      }break;
    default :
     Result = Short(Zahl,false,Last);
     
     break;
    };
  }
  else
  {
    if ((Zahl % 1000) != 0)
      Result = 'null';
  }
 return Result;  
}  
    
  
//**
//* Der eigentliche Konverierungsvorgang. Gibt den vollen Zahlenname als
//* TStrings zurück.
//*
//* Zahl - Die Zahl
//* Full - Wenn True, wird die Anzahl der Potenzen die durch 3 teilbar sind
//*        ausgeschrieben, wenn False, werden diese in Zahlen angeschrieben
//*        (True: dreihundertsiebzehn Millionen; False: 317 Millionen)
//* ShowEmpty - Wenn False, werden Potenzen die durch 3 teilbar sind nicht
//*             ausgegeben.


function BuildList(Zahl,Full,ShowEmpty) 
{
  Temp = '';
  var Result = new Array ();
  var Erg = new Array ();
  
  TMax = Zahl.length - 1;
  
  k = 0;
  for (i = TMax; i >= 0; i--)
  {    
    if (((TMax - i + 1) % 3 != 0) && (i != 0))
    {    
      Temp = Zahl[i].toString() + Temp;  
    }
    else
    {
      Temp = Zahl[i].toString() + Temp;
      iTemp = parseInt(Temp,10);
      if ((ShowEmpty) || (iTemp != 0) || (Result.length == 0))
      {
        k++;
        //if  (i == 0 && Zahl[i] > 1 )
        if  (Temp != '1' && iTemp > 1)
          plural = true;
        else
          plural = false;
            //plural = false;
        var iIndex = parseInt((TMax - i) / 3,10);
        if (Full == true)
        {
          var sZahl = GetShortName(iTemp, iIndex == 1, i >= TMax - 2);
          var sPotenz = GetName(iIndex, plural);
          if (iIndex == 1) // iIndex == 1 ist "Tausend"
          {
            // x Tausend zusammen schreiben (z.B. "dreihunderttausend"),
            // und bei "eintausend" nur "tausend" schreiben (mh, revidiert am 20.03.2010 durch Mantis Id 181, da beides möglich ist)
            if (plural) { Result[k] = sZahl + sPotenz.toLowerCase(); } // x Tausend zusammen schreiben
            else { Result[k] = sZahl + sPotenz.toLowerCase(); } // "eintausend" schreiben (Wunsch Mantis Id 181, beides ist möglich; 20.03.2010)
            //else { Result[k] = sPotenz.toLowerCase(); } // nur "tausend" statt "eintausend" schreiben (Zahl "ein" wird weggelassen) (wie in den gegebenen Beispielen; 08.03.2010)
            if (k == 2)
            {
              // x Tausend y hundert zusammen schreiben (z.B. "dreihunderttausendvierhundert")
              Result[k] += Result[k-1];
              Result[k-1] = "";
            }
          }
          else  
          {
            Result[k] = sZahl + " " + sPotenz;
          }
        }
        else
        {       
          Result[k] = (iTemp.toString() + ' ' + GetName(iIndex, Temp != '1'))
        }
      }
      Temp = '';
    }
  }
  
  j = 1; // Sortierreihenfoldge umdrehern
  for (i = k; i >= 1; i--){
    Erg[j] = Result[i];    
    j++;
    };
 return Erg;  
};


//*
//* Konvertiert einen String mit der Zahl in Ziffern, in einen String mit der
//* ausgeschrieben Zahl.
//*
//* Input - Die Zahl in Ziffern.
//*
function ConvertString(Input,Zeilenumbruch,mit_zahlen,verkuerzt,Ausgabefeld) 
{
  var Zahl = new Array (Input.length);
    
  for (i = 0; i < Input.length; i++) Zahl[i] = Input.charAt(i);    
  
  if (mit_zahlen)
    if (verkuerzt) 
      List = BuildList(Zahl, false, false);
    else  
      List = BuildList(Zahl, false, true);
  else  
    if (verkuerzt)
      List = BuildList(Zahl, true, false);
    else  
      List = BuildList(Zahl, true, true);
  
 
  if (Zeilenumbruch) 
    zb = '\r\n';
  else
    zb = ' ';
  
  Result = '';    
  for (i = 1; i < List.length; i++) {
    Result = Result + " "+List[i] + zb;}
      
  Ausgabefeld.value = Result;
//  return Result; 
};


//------Zusatz Funktionen ------------------------------------------------------------------------------------------------

var oldstring = "";            

function CheckNumbers1(obj) // Löscht alle Zeichen die nicht Zahlen
{                
  var text = obj.value;    
  
  if((isNaN(text)==true) || (text.search(/\W/) != -1))
    {                    
      obj.value=oldstring;                
    }
  else 
    {                    
      oldstring=text;                    
      if(text=="" || text=="undefined") 
        {                        
          text="";                   
        }                
	 }            
}        


function CheckNumbers(value)
{
  var s = '';
  var j = 0;
  var b = true;
  
  if (value.length != 0) 
    {
       for (i = 0; i < value.length; i++) 
	     {
          var ch = value.charAt(i);
		 
          if (ch >= "0" && ch <= "9") 
            {
             s = s + ch;  
             j++;
		     continue;
		      }
          else 
		  	{							  	  	  		
			  b = false;
          }
      	}      	
   	}
  
  if (!b) value = s; 	  
  return value;
} 


function wordwrap(s1,m, b, c){
var i, j, s, r;
    
    r = s1.split("\n");
    if(m > 0) 
      for(i in r){
        for(s = r[i], 
            r[i] = ""; 
            s.length > m;
            j = c ? m : (j = s.substr(0, m).match(/\S*$/)).input.length - j[0].length
            || m,
            r[i] += s.substr(0, j) + ((s = s.substr(j)).length ? b : "")
        );
        r[i] += s;
    }
    
  return r.join("\n");
};




function clear_fields() // Löscht alle Textfelder
{  
  document.Formular.Eingabe.value = '';
  document.Formular.Ergebnisfeld.value = '';
  document.Formular.Ergebnisfeld1.value = ''; 
}

function loesche_leer_zeichen(Input,Zeilenumbruch,mit_zahlen,verkuerzt,Ausgabefeld) 
{
  Input = check_all(Input);
  ConvertString(Input,Zeilenumbruch,mit_zahlen,verkuerzt,Ausgabefeld); 

  Ausgabefeld.value  =  Ausgabefeld.value.replace(/ {2}/," ") // Leer Zeichen löschen
  Ausgabefeld.value  =  Ausgabefeld.value.replace(/ {2}/g," ") // Leer Zeichen löschen
  
  Ausgabefeld.value = Ausgabefeld.value.substr(1, Ausgabefeld.value.length-1);
  //Ausgabefeld.value = wordwrap(Ausgabefeld.value,58, "\n", true);  
}  

function loesche_leer_zeichen2(Input,Zeilenumbruch,mit_zahlen,verkuerzt,Ausgabefeld) 
{
  Input = check_all(Input);
  ConvertString(Input,Zeilenumbruch,mit_zahlen,verkuerzt,Ausgabefeld); 
  Ausgabefeld.value  =  Ausgabefeld.value.replace(/ /g,"") // Leer Zeichen löschen
  Ausgabefeld.value  =  Ausgabefeld.value.toLowerCase() // Nur noch kleine Zeichen   
  
  temp = Ausgabefeld.value.charAt(0); // Erstes zeichen als Großbuchstabe
  temp = temp.toUpperCase();
  Ausgabefeld.value = temp + Ausgabefeld.value.substr(1, Ausgabefeld.value.length-1);
}  

function rtrim(stringToTrim) {
	return stringToTrim.replace(/\s+$/,"");
}

function loesche_leer_zeichen3(Input,Zeilenumbruch,mit_zahlen,verkuerzt,Ausgabefeld) 
{
  Input = check_all(Input);
  ConvertString(Input,Zeilenumbruch,mit_zahlen,verkuerzt,Ausgabefeld); 
  Ausgabefeld.value  =  Ausgabefeld.value.replace(/  /," ") // Leer Zeichen löschen
  

  Ausgabefeld.value  =  Ausgabefeld.value.replace(/ {2}/g," ") // Leer Zeichen löschen
  
  //Ausgabefeld.value  =  Ausgabefeld.value.toLowerCase() // Nur noch kleine Zeichen   
  Ausgabefeld.value = Ausgabefeld.value.substr(1, Ausgabefeld.value.length-1);
  
  /*
  temp = Ausgabefeld.value.charAt(0); // Erstes zeichen als Großbuchstabe
  temp = temp.toUpperCase();
  Ausgabefeld.value = temp + Ausgabefeld.value.substr(1, Ausgabefeld.value.length-1);
  */
  
  Ausgabefeld.value = rtrim(Ausgabefeld.value); // Leerzeichen am Ende löschen
}  

function MM_displayStatusMsg(msgStr) 
{
  status=msgStr;
  document.MM_returnValue = true;  
}


function check_all(value)  // Überprüft das die Maximale länge der Texte nicht überschritten wird
{   
  var h = value.substring(0, value.length);    
  if (oldstring != h)
    {     
      if (value.length > Max) value = value.substring(0, Max);
      value = CheckNumbers(value);  
   //   value = wordwrap(value,50, "\n", true); 
      oldstring = value.substring(0, value.length);
    }  
  return oldstring;  
}



function checkEingabe (field)
{

  if ( field != null && field.value == 'Bitte HIER die gesuchte Zahl eintragen.' )
  {
    field.value = '';
  }

}

function check_change(field)  // Überprüft das die Maximale länge der Texte nicht überschritten wird
{  
// CheckNumbers(field);             
// field.value = wordwrap(field.value,10, "\n", true);  
// field.value = check_all(field.value);

}


function check_down(field)  // Überprüft das die Maximale länge der Texte nicht überschritten wird
{      
  if (field.value.length > Max) field.value = field.value.substring(0, Max);      
}



function check_up(field)  // Überprüft das die Maximale länge der Texte nicht überschritten wird
{ 
  var newtext = check_all(field.value);
  
  if ( field.value != newtext ) {
      field.value = newtext;
  }
  
  if ( document.getElementById('ptype').value == 'lesbar' ) {
     if ( document.Formular.Eingabe.value <= 999 ) {
        document.Formular.Ergebnisfeld.value = document.Formular.Eingabe.value;
     } else {
        //loesche_leer_zeichen(document.Formular.Eingabe.value,false,true,true,document.Formular.Ergebnisfeld);
        loesche_leer_zeichen(document.Formular.Eingabe.value,false,true,true,document.Formular.Ergebnisfeld);
        //var foo = document.Formular.Ergebnisfeld.value.trim();
        var foo = document.Formular.Ergebnisfeld.value;
        foo = rtrim(foo);
        if ( foo.charAt(foo.length -2)+foo.charAt(foo.length -1) == " 0" ) {
         foo = foo.substr(0, foo.length-2)
        }
        document.Formular.Ergebnisfeld.value = foo;
     }
  } else if ( document.getElementById('ptype').value == 'duden'  ) {
     if ( document.Formular.Eingabe.value >= 1000000 ) {
        loesche_leer_zeichen3(document.Formular.Eingabe.value,false,false,true,document.Formular.Ergebnisfeld);
     } else {
        loesche_leer_zeichen(document.Formular.Eingabe.value,false,false,true,document.Formular.Ergebnisfeld);
        document.Formular.Ergebnisfeld.value  =  document.Formular.Ergebnisfeld.value.replace(/ /g,"");
        document.Formular.Ergebnisfeld.value = document.Formular.Ergebnisfeld.value.toLowerCase();
        /*
        temp = document.Formular.Ergebnisfeld.value.charAt(0); // Erstes zeichen als Großbuchstabe
        temp = temp.toUpperCase();
        document.Formular.Ergebnisfeld.value = temp + document.Formular.Ergebnisfeld.value.substr(1, document.Formular.Ergebnisfeld.value.length-1);
        */
     }
  } else if ( document.getElementById('ptype').value == 'endlos'  ) {
     loesche_leer_zeichen2(document.Formular.Eingabe.value,false,false,true,document.Formular.Ergebnisfeld);
  } else {
     // Default
     loesche_leer_zeichen(document.Formular.Eingabe.value,false,true,true,document.Formular.Ergebnisfeld);
  }
}