// Javascript (c) Arndt Brünner
// Alle Rechte vorbehalten
// Version: 14.12.2008

var kze=new Array("","un1","du2","tr3","quattuor","quinque","sex","septem","octo","novem");
var kzx=new Array("decem","undecim","duodecim","tredecim","quattuordecim","quindecim","sedecim","septendecim","duodeviginti","undeviginti");
var kzz=new Array("","","viginti","triginta","quadraginta","quinquaginta","sexaginta","septuaginta","octoginta","nonaginta");
var kzh=new Array("","centum","duC","treC","quadrinC","quinC","sesC","septinC","octinC","nonC");
var oze=new Array("","prim4","secund4","terti4","quart4","quint4","sext4","septim4","octav4","non4");
var ozx=new Array("decim4","undecim","duodecim","terti4 X","quart4 X","quint4 X","sext4 X","septim4 X","duodeviXC","undeviXC");
var ozz=new Array("","","viXC","triXC","quadraXG","quinquaXG","sexaXG","septuaXG","octoXG","nonaXG");
var ozh=new Array("","C","duC","treC","quadrinC","quinC","sesC","septinC","octinC","nonC");
var aze=new Array("","semel","bis","ter","quater","quinquies","sexies","septies","octies","nonies");
var azx=new Array("D","unD","duoD","ter D","quater D","quinquies D","sexies D","septies D","duodevicies","undevicies");
var azz=new Array("","","vicies","tricies","quadragies","quintagies","sexagies","septagies","octogies","nonagies");
var azh=new Array("","C","duC","treC","quadrinC","quinC","sesC","septinC","octinC","nonC");
var dze=new Array("","singul","bin","trin","quatern","quin","sen","septen","octon","noven");
var dzx=new Array("D","unD","duoD","tern4 D","quatern4 D","quin4 D","sen4 D","septen4 D","duodevicen","undevicen");
var dzz=new Array("","","vicen","tricen","quadragen","quintagen","sexagen","septagen","octogen","nonagen");
var dzh=new Array("","C","duC","treC","quadrinC","quinC","sesC","septinC","octinC","nonC");
var decl0=new Array("i","orum","is","os","is","ae","arum","is","as","is","a","orum","is","a","is");
var decl1=new Array("us","ius","i","um","o","a","ius","i","am","a","um","ius","i","um","o");
var decl2=new Array("o","orum","obus","os","obus","ae","arum","abus","as","abus","o","orum","obus","o","abus");
var decl3=new Array("es","ium","ibus","es","ibus","es","ium","ibus","es","ibus","ia","ium","ibus","ia","ibus");
var decloa=new Array("us","i","o","um","o","i","orum","is","um","is","a","ae","ae","am","a","ae","arum","is","as","is","um","i","o","um","o","a","orum","is","a","is");
var declp=new Array("s","tis","ti","tem","te");
function getKardinal(n,casus,genus,inv,inv99)
{
	var t=Math.floor(n/1000),h=Math.floor((n/100)%10),z=Math.floor(n/10)%10,e=n%10,a="";
	if((n>100)||(e==0))inv=false;
	if(t>0)
	{
		a=((t>1)?getKardinal(t,casus,genus,inv)+" ":"")+"mil"+decl3[10+casus]+" ";
		if(t==1)a="mille ";
		if(t>999)
		{
			a=getAdverb(Math.floor(t/100),inv,rerw)+" centena "+getAdverb(t%100,inv,rerw)+" milia ";
		}
	}
	if(h>0)a+=kzh[h].replace(/C/,"cent").replace(/nc/,"ng")+((h>1)?decl0[genus*5+casus]:"")+" ";
	if(z>1)
	{
		if(t+h>0)inv99=false;
		var Z=kzz[z],E=kze[e];
		if((e<8)&&(z<10))a+=(inv)?E+" et "+Z:Z+" "+E;
		else if(z<9)a+=((e==9)?"unde":"duode")+kzz[z+1];
		else a+=((e==9)?((inv99)?"undecentum":"nonaginta novem"):((inv99)?"duodecentum":"nonaginta octo"));
		a+=" ";
	}
	else if(z>0)a+=kzx[e]+" ";
	else a+=kze[e]+" ";
	a=a.replace(/1/,decl1[casus+genus*5]).replace(/2/,decl2[casus+genus*5]).replace(/3/,decl3[casus+genus*5]);
	a=(a+" ß").replace(/ +/g," ").replace(/ ß/g,"");
	return a;
}
function getOrdinal(n,casus,genus,inv,inv99)
{
	var t=Math.floor(n/1000),h=Math.floor((n/100)%10),z=Math.floor(n/10)%10,e=n%10,a="";
	if((n>100)||(e==0))inv=false;
	var i=genus*10+casus,E=decloa[i];
	if(t>0)
	{
		a=((t>1)?getAdverb(t,inv,inv99)+" ":"")+"millesim"+E+" ";
	}
	if(h>0)a+=ozh[h].replace(/C/,"centesim"+E).replace(/nc/,"ng")+" ";
	if(z>1)
	{
		if(t+h>0)inv99=false;
		var Z=ozz[z]+E,ee=(inv)?kze[e]:oze[e];
		if(e==2)ee="alter"+((i>0)?decl1[i]:"");
		if((e<8)&&(z<10))a+=(inv)?ee+" et "+Z:Z+" "+ee;
		else if(z<9)a+=((e==9)?"unde":"duode")+ozz[z+1]+E;
		else a+=((e==9)?((inv99)?"undecentesim"+E:"nonagesim"+E+" nov"+E):((inv99)?"duodecentesim"+E:"nonagesim"+E+" octav"+E));
		a+=" ";
	}
	else if(z>0)a+=ozx[e]+((e>0)?E:"")+" ";
	else if(e>0)a+=oze[e]+" ";
	a=a.replace(/XC/g,"cesim").replace(/XG/g,"gesim").replace(/X/g,"decim");
	a=a.replace(/1/,decl1[i]).replace(/2/,decl2[i]).replace(/3/,decl3[i]).replace(/4/g,E);
	a=(a+" ß").replace(/ +/g," ").replace(/ ß/g,"");
	return a;
}
function getAdverb(n,inv,inv99)
{
	if(n<10)return aze[n];
	if(n<20)return azx[n-10].replace(/D/g,"decies");
	var t=Math.floor(n/1000),h=Math.floor((n/100)%10),z=Math.floor(n/10)%10,e=n%10,a="";
	if((n>100)||(e==0))inv=false;
	if(t>0)a=((t>1)?getAdverb(t,inv,inv99)+" ":"")+"milies ";
	a+=azh[h].replace(/C/,"centies").replace(/ncent/,"ngent")+" ";
	if(z>1)
	{
		if((z==9)&&(e==8)&&(inv99))a+="duodecenties";
		else if((z==9)&&(e==9)&&(inv99))a+="undecenties";
		else if((e==8)&&(z<9))a+="duode"+azz[z+1];
		else if((e==9)&&(z<9))a+="unde"+azz[z+1];
		else if(inv)a+=aze[e]+" et "+azz[z];
		else a+=azz[z]+" "+aze[e];
	}
	else if(z>0)a+=azx[e];
	else if(e>0)a+=aze[e];
	a=a.replace(/D/g,"decies");
	a=(a+" ß").replace(/ +/g," ").replace(/ ß/g,"");
	return a;
}
function getDistributiv(n,casus,genus,inv,inv99)
{
	var t=Math.floor(n/1000),h=Math.floor((n/100)%10),z=Math.floor(n/10)%10,e=n%10,a="";
	if((n>100)||(e==0))inv=false;
	var i=genus*10+casus+5,E=decloa[i];
	if(t>0)a=((t>1)?getDistributiv(t,casus,2,inv,inv99)+" ":"")+"mil"+decl3[10+casus]+" ";
	if(h>0)a+=dzh[h].replace(/C/,"cen"+E).replace(/nc/,"ng")+" ";
	if(z>1)
	{
		if(t+h>0)inv99=false;
		var Z=dzz[z]+E,ee=(inv)?dze[e]+E:dze[e]+((e>0)?E:"");
		if((e<8)&&(z<10))a+=(inv)?ee+" et "+Z:Z+" "+ee;
		else if(z<9)a+=((e==9)?"unde":"duode")+dzz[z+1]+E;
		else a+=((e==9)?((inv99)?"undecen"+E:"nonagen"+E+" noven"+E):((inv99)?"duodecen"+E:"nonagen"+E+" octon"+E));
		a+=" ";
	}
	else if(z>0)a+=dzx[e]+E+" ";
	else if(e>0)a+=dze[e]+E+" ";
	a=a.replace(/XC/g,"cesim").replace(/XG/g,"gesim").replace(/X/g,"decim");
	a=a.replace(/4/g,E).replace(/D/g,"den");
	a=a.replace(/1/,decl1[i]).replace(/2/,decl2[i]).replace(/3/,decl3[i]);
	a=(a+" ß").replace(/ +/g," ").replace(/ ß/g,"");
	return a;
}