function setTitle(div, arr) {
	var split_array = arr.split("|");
	setInnerHTML(div, split_array[2]);
}

function getCookie(name) {
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	if (begin == -1) {
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
	} else {
		begin += 2;
	}
	var end = document.cookie.indexOf(";", begin);
	if (end == -1) {
		end = dc.length;
	}
	return unescape(dc.substring(begin + prefix.length, end));
}

function setCookie(name, value, nDays, path, domain, secure) {
	if (getCookie(name) == value) return;
	var today = new Date();
	var expires = new Date();
	if (nDays==null || nDays==0) nDays=365;
	expires.setTime(today.getTime() + 86400000*nDays);
	document.cookie = name + "=" + escape(value) +
		((expires) ? "; expires=" + expires.toGMTString() : "") +
		((path) ? "; path=" + path : "");
}

function externalLinks() {
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("href") &&
			anchor.getAttribute("rel") == "external")
		anchor.target = "_blank";
	}
}

function LZ(x) { return (x>=10||x<0?"":"0") + x; }
function Expo(E) { return "e" + (E<0?'-':'+') + LZ(Math.abs(E)); }
function Prfx(Q, L, c) { var s = Q + ""; if (c.length>0) while (s.length<L) { s = c+s; } return s; }
function StrU(X, M, N) { var T, S=new String(Math.round(X*Number("1e"+N))); if (/\D/.test(S)) return '' + X; with (new String(Prfx(S, M+N, '0'))) return substring(0, T=(length-N)) + '.' + substring(T); }
function Sign(X) { return X>0 ? "" : X<0 ? "-" : " "; }
function GetSEM(X) {
	var U, Obj = { S : Sign(X), E : 0, M : X==U?U:Math.abs(X) }
	with (Obj) { 
		if (M==0 || !isFinite(M)) return Obj
		while (M >= 10) { E++; M /= 10; }
		while (M < 1.0) { E--; M *= 10; }
	}
	return Obj;
}
function myRoundForced(X, N) {
	N = Math.round(N) + 1;
	with (GetSEM(X)) {
		var ret = S + StrU(M, 1, N-1) + (isFinite(M) ? Expo(E) : " ");
		return ret.replace('.e','e');
	}
}

function myRound(number, decimals) {
	if (decimals == 0) {
		number = Math.round(number);
	} else {
		var p = Math.pow(10, decimals);
		number = number * p;
		number = Math.round(number);
		number = number / p;
	}
	return number;
}

function replaceAll(sString, sReplaceThis, sWithThis) {
	if (sReplaceThis != "" && sReplaceThis != sWithThis) {
		var counter = 0;
		var start = 0;
		var before = "";
		var after = "";
		while (counter < sString.length) {
			start = sString.indexOf(sReplaceThis, counter);
			if (start == -1) {
				break;
			} else {
				before = sString.substr(0, start);
				after = sString.substr(start + sReplaceThis.length, sString.length);
				sString = before + sWithThis + after;
				counter = before.length + sWithThis.length;
			}
		}
	}
	return sString;
}

function setInnerHTML(id, str) {
	if(!document.getElementById) return; // Not Supported
	if(document.getElementById){
		document.getElementById(id).innerHTML = str;
	}
}

/*
function convertCurrency(amount, from, to, div, day, month, year, clicked, lang) {
	var d = new Date();
	var thisDay = d.getDate();
	var thisMonth = d.getMonth() + 1;
	var thisYear = d.getYear();
	if (thisYear <= 99) thisYear = "19"+nyear;
	if ((thisYear > 99) && (thisYear<2000)) thisYear += 1900;
	if (!clicked || (day == thisDay && month == thisMonth && year == thisYear)) {
		convert(amount, from, to, div);
	} else {
		var from_split = from.split("|");
		var from_unit = from_split[2];
		var to_split = to.split("|");
		var to_unit = to_split[2];
		amount = amount.replace(",",".");
		window.location = '/' + lang + '/currency/'+amount+'+'+from_unit+'+'+to_unit+'+'+year+'-'+month+'-'+day+'/';
//		window.location = '/www/convertworld/?page=currency&part='+from_unit+'&conv='+amount+'+'+from_unit+'+'+to_unit+'+'+year+'-'+month+'-'+day;
	}
}
*/

function convert(amount, from, to, div, include_short, decimals) {
	var split_array = from.split("|");
	var from_constant_str = split_array[0];
	var from_constant_str_extra = split_array[1];
	var from_unit = split_array[2];
	var split_array = to.split("|");
	var to_constant_str = split_array[0];
	var to_constant_str_extra = split_array[1];
	var to_unit = split_array[2];
	var new_str;
	
	amount = amount.replace(",",".");
	to_constant_str = to_constant_str.replace(",",".");
	from_constant_str = from_constant_str.replace(",",".");

	var amount = parseFloat(amount);
	var a1 = parseFloat(to_constant_str);
	var a2 = parseFloat(to_constant_str_extra);
	var b1 = parseFloat(from_constant_str);
	var b2 = parseFloat(from_constant_str_extra);
	
	var result, tmp;
	var k;
	var m;
	if  (a2 == -999 && b2 == -999) {
//		alert(a1);
//		alert(b1);
//		alert(amount);
		k = a1 / b1;
		result = amount * k;
	} else if ((a2 == -999 && b2 != -999) || (a2 != -999 && b2 == -999)) {
		k = a1 * b1;
		result =  k / amount;		
	} else if ((a2 == 0 && b2 == 0) || (10+a2+b2-a2-b2 != 10) ) {
		k = a1 / b1;
		result = amount * k;
	} else {
		k = (a1-a2) / (b1-b2);
		m = (b1*a2 - b2*a1) / (b1 - b2);
		result = amount * k + m;
	}
	tmp = result;
	result = myRound(result, decimals);
	tmpStr = '' + result;
	if (result == 0 || tmpStr.length > 12 || tmpStr.indexOf('e') > 0) result = myRoundForced(tmp, decimals);
	if (isNaN(result)) new_str = '-';
	else if (include_short) new_str = result + ' ' + to_unit;
	else new_str = result;
	if (!div) {
		div = replaceAll(to_unit, ' ', '-');
		div = replaceAll(div, '/', '-');
//		div = replaceAll(div, '³', '-');
		div = 'value_' + div;
	}
	else new_str = "<b>" + new_str + "</b>";
	setInnerHTML(div, new_str);
}

function initRoman() {
	for ( var i = 0; i < initRoman.arguments.length; i++ ) this[ i + 1 ] = initRoman.arguments[ i ];
}
function toRoman(number) {
	if (number <= 0 || isNaN(number) || number >= 4000000) return '-';
	var roman_unit = new initRoman("","I","II","III","IV","V","VI","VII","VIII", "IX");
	var roman_tens = new initRoman("","X","XX","XXX","XL","L","LX","LXX","LXXX","XC");
	var roman_hund = new initRoman("","C","CC","CCC","CD","D","DC","DCC","DCCC","CM");
	var roman_thou = new initRoman("","M","MM","MMM",'M<span class="overbar">V</span>','<span class="overbar">V</span>','<span  class="overbar">V</span>M','<span class="overbar">V</span>MM', '<span class="overbar">V</span>MMM', 'M<span class="overbar">X</span>');
	var roman_tenthou = new initRoman('','<span class="overbar">X</span>','<span class="overbar">XX</span>','<span class="overbar">XXX</span>','<span class="overbar">XL</span>','<span class="overbar">L</span>','<span class="overbar">LX</span>','<span class="overbar">LXX</span>','<span class="overbar">LXXX</span>','<span class="overbar">XC</span>');
	var roman_hunthou = new initRoman('','<span class="overbar">C</span>','<span class="overbar">CC</span>','<span class="overbar">CCC</span>','<span class="overbar">CD</span>','<span class="overbar">D</span>','<span class="overbar">DC</span>','<span class="overbar">DCC</span>','<span class="overbar">DCCC</span>','<span class="overbar">CM</span>');
	var roman_mili = new initRoman('','<span class="overbar">M</span>','<span class="overbar">MM</span>','<span class="overbar">MMM</span>');
	var s = 0; var t = 0; var u = 0; var v = 0; var w = 0; var x = 0; var y = 0;
	s = ((number - (number % 1000000)) / 1000000) + 1;
	number = (number % 1000000);
	t = ((number - (number % 100000)) / 100000) + 1;
	number = (number % 100000);
	u = ((number - (number % 10000)) / 10000) + 1;
	number = (number % 10000);
	v = ((number - (number % 1000)) / 1000) + 1;
	number = (number % 1000);
	w = ((number - (number % 100)) / 100) + 1;
	number = (number % 100);
	x = ((number - (number % 10)) / 10) + 1;
	y = (number % 10) + 1;
	return (roman_mili[s] + roman_hunthou[t] + roman_tenthou[u] + roman_thou[v] + roman_hund[w] + roman_tens[x] + roman_unit[y]);
}
function fromRoman(numeral) {
	var array_thousands=new Array("","M","MM","MMM","MMMM","MMMMM");
	var array_hundreds=new Array("","C","CC","CCC","CD","D","DC","DCC","DCCC","CM");
	var array_tens=new Array("","X","XX","XXX","XL","L","LX","LXX","LXXX","XC");
	var array_ones=new Array("","I","II","III","IV","V","VI","VII","VIII","IX");
	var ones=0; var tens=0; var hundreds=0; var thousands=0;
	var current=0; var width=0; var number=0;
	numeral=numeral.toUpperCase();	
	for (number=1; number<6; number++) {
		if (numeral.indexOf(array_thousands[number],current)==0){
			thousands=number;
			width=array_thousands[number].length;
		}
	}
	current=current+width;
	width=0;
	for (number=1; number<10; number++){
		if (numeral.indexOf(array_hundreds[number],current)==current){
			hundreds=number;
			width=array_hundreds[number].length;
		}
	}
	current=current+width;
	width=0;
	for (number=1; number<10; number++){
		if (numeral.indexOf(array_tens[number],current)==current){
			tens=number;
			width=array_tens[number].length;
		}
	}
	current=current+width;
	width=0;
	for (number=1; number<10; number++){
		if (numeral.indexOf(array_ones[number],current)==current){
			ones=number;
			width=array_ones[number].length;
		}
	}
	current=current+width;
	return thousands*1000+hundreds*100+tens*10+ones;
}
// Remove the trailing space from a string, if any
function removeLastSpace(str) {
	var result = new String();
	result = str.toString();
	if( result.charAt(result.length - 1) - 1 )
		result = result.substr(0, result.length - 1);
	return result;
}
// Function that spells a number into words
function toEnglish(amount) {
	if (amount > 100000000000000000000) return '-';
	// Arrays that hold \\known// Digits and Words...
	var _DigitPlace = new Array( "-", "thousand", "million", "billion", "trilion", "zillion", "smillion", "BIGTHING" );
	var _Digits = new Array( "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" );
	var _FromTenToTwenty = new Array( "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" );
	var _Tens = new Array( "-", "ten", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety" );
	amount = parseInt(amount);
	if (isNaN(amount)) return "-";
	var sb = new String();
	var amountString = new String();
	amountString = "" + amount;
	var amount_Digits =  new Array(); 
	var amountDigitValues = new Array();
	for(var i = 0; i < amountString.length; i++ ) {
		amount_Digits[i] = amountString.charAt(i);
		amountDigitValues[i] = 0;
	}
	// If only a single digit, go back quickly
	if (amount < 10 && amount > -10) {
		if(amount < 0) {
			sb += "minus ";
			amount = -amount;
		}
		sb += (_Digits[amount]);
		return sb;
	}
	// Loop through _Digits from most to least significant 			
	for(var i = 0; i < amount_Digits.length; i++) {
		if( amount_Digits[i] != '-' ) amountDigitValues[i] = parseInt(amount_Digits[i]);
		var offset = amount_Digits.length - i - 1;
		// If Negative sign
		if( amount_Digits[i] == '-' ) sb += ("Minus ");
		else if(amountDigitValues[i] > 0) {
			// For Zillions, Trillions, Millions and Thousands...
			if(offset > 2) {
				var nextOffset = offset - (offset % 3);
				var chunk = amountString.substring(i, amount_Digits.length - nextOffset);
				i = amount_Digits.length - nextOffset - 1;
				var digitOffset = parseInt((offset / 3));
				sb += ( toEnglish( chunk ) );
				sb += (" ");
				sb += ( _DigitPlace[ digitOffset ] ); // Append Place (Thousand, Million)
				sb += (" ");
			} else if(offset == 2) { // hundreds 
				sb += ( _Digits[ amountDigitValues[i] ] ); // Append prefix
				sb += (" ");
				sb += ( "hundred " ); // Append Place (Hundred, Thousand)
			} else if(offset == 1) { // Tens
				if(amountDigitValues[i] == 1) { // From ten to twenty
					amountDigitValues[i + 1] = parseInt(amount_Digits[i + 1]);
					sb += ( _FromTenToTwenty[ amountDigitValues[i + 1] ] );
					sb += (" ");
					i++;
				} else {
					sb += ( _Tens[ amountDigitValues[i] ] ); // Append prefix
					sb += (" ");
				}
			} else if(offset == 0) { // Solo Digits
				sb += ( _Digits[ amountDigitValues[i] ] ); // Append prefix
				sb += (" ");
			}
		} // end else digit not 0
	} // end for loop on Digits 
	var ret = removeLastSpace(sb);
	return ret;
}
function Num2TextConvertor() {
}
/* @param int number decimal number */
function toGerman(number) {
	if (number > 1e71) return '-';
	// --- fields
	var einsArray = new Array("", "ein", "zwei","drei","vier","fÃ¼nf","sechs","sieben","acht","neun");
	var zehnArray = new Array("zehn","elf","zwÃ¶lf","dreizehn","vierzehn","fÃ¼nfzehn","sechzehn","siebzehn","achtzehn","neunzehn");
	var zigArray = new Array("","","zwanzig","dreiÃŸig","vierzig","fÃ¼nfzig","sechzig","siebzig","achtzig","neunzig");
	var spec_unitpref = new Array("M", "B", "Tr", "Quadr", "Quint","Sext", "Sept", "Okt", "Non");
	var unitpref = new Array("Un", "Duo", "Tre", "Quattuor", "Quin","Sex", "Septen", "Okto", "Novem");
	var tenpref = new Array("Dez", "Vigint", "Trigint", "Quadragint", "Quinquagint","Sexagint", "Septuagint", "Oktogint", "Nonagint");
	var hundredpref = new Array("Zen", "Duzen", "Trezen", "Quadringen", "Quingen","Sescen", "Septingen", "Oktingen", "Nongen");
	// fill $bigsArray with numbers names
	// up to Zentilliarde = 10^603
	var bigsArray = new Array();
	var index = 0;
	var len = spec_unitpref.length;
	for (var i=0; i < len; i++) {
		bigsArray[index++] = spec_unitpref[i] + "illion";
		bigsArray[index++] = spec_unitpref[i] + "illiard";
	}

	len = tenpref.length;
	var len2 = unitpref.length;
	for (i=0; i < len; i++) {
		bigsArray[index++] = tenpref[i] + "illion";
		bigsArray[index++] = tenpref[i] + "illiard";
		for (var j=0; j < len2; j++) {
			bigsArray[index++] = unitpref[j] + tenpref[i].toLowerCase() + "illion";
			bigsArray[index++] = unitpref[j] + tenpref[i].toLowerCase() + "illiard";
		}
	}
	bigsArray[index] = hundredpref[0] + "tillion";
	maxNumLength = bigsArray.length*3+6;
	// --- methods
//	this.int2text = int2text;
//	this.isValidNatNumber = isValidNatNumber;

	var numstr = String(number);
	numstr = numstr.replace(/\s+/g, "");
	var msg = "";

	if (numstr.charAt(0) == '-') {
		msg += "minus ";
		numstr = numstr.substring(1); // remove the minus sign
	} else if (numstr.charAt(0) == '+') {
		numstr = numstr.substring(1);
	}
	var len = numstr.length;
	// remove the leading zeros (if any)
	for (var i=0; i<len; i++) {
		if (numstr.charAt(i) != '0') {
			numstr = numstr.substring(i);
			break;
		}
	}

	if ( !isValidNatNumber(numstr) ) {
		return "-";
	} else if (Number(numstr) == 0) {
		return "Null";
	} else if (numstr.length > maxNumLength) {
		var diff = numstr.length - maxNumLength;
		return "Support of only " + maxNumLength + " digits. There " +
			(diff == 1 ? "is one" : "are "+ diff) + " more!";
	}
	numstr = "0" + numstr; // for the cases when numstr is "1" or "\d\d01"

	len = numstr.length;
	var h1 = "numstr.charAt(len-pos)";  // current figure
	var h2 = "numstr.charAt(len-pos+1)"; // the figure on the right
	var h3 = "Number(numstr.substring(len-pos-2, len-pos+1))";
	var singEnd, bigsIndex;
	// begin of the conversion
	for (var pos = len; pos > 0; pos--) {
		/*
			example:
			number ->  0  x , x  x  x , x  x  x , x  x  x
			len = 11
			$pos   -> 11 10   9  8  7   6  5  4   3  2  1
			$pos%3 ->  2  1   0  2  1   0  2  1   0  2  1
		*/
		switch (pos%3) {
		case 0 :
			// (len - pos) -> Xxx
			// eval(h1) returns the figure at the big X place
			if (eval(h1) == "0") { // the triple is 0xx
			} else if (eval(h1)== "1") { // the triple is 1xx
				msg += "hundert";
			} else { // the triple is Xxx, X != 0,1
				msg += einsArray[eval(h1)] + "hundert" ;
			}
			break;
		case 2 :
			// (len - pos) -> xXx
			// number -> Xx (last two figures)
			// eval(h1) returns the figure at the big X place
			// eval(h2) returns the next figure
			if (eval(h1) == "0") { // 0 <= number (=0X) <= 9
				//if (eval(h2) == "1") { // the action is by case 1.case 1
				//} else {
					msg +=  einsArray[eval(h2)];
				//}
			} else if (eval(h1)== "1") { // 10 <= number (in form 1X) <= 19
				msg += zehnArray[eval(h2)];
			} else if (eval(h2) == "0") { // number -> X0
				msg += zigArray[eval(h1)];
			} else { // number -> XX
				msg += einsArray[eval(h2)] + "und" + zigArray[eval(h1)];
			}
			break;
		case 1 :
			// (len - pos) -> xxX
			// number (the triple) -> xxX = eval(h3)
			switch (pos) {
			// pos <- {3a+1, a = 0..this.bigsArray.length+1}
			// pos <- 1,4,7, .. ,94, .., (this.bigsArray.length+1)*3+1
			// eine Xillion or eine Xilliarde is 1*10^(pos-1)
			// example: for pos=97 it's 1*10^96 (96 zeros)
			default:
				// catches the cases: pos >= 7
				bigsIndex = (pos-7)/3;
				singEnd = bigsIndex%2 == 0 ? " " : "e ";
				if (eval(h3) == 1) {
					// number = 001
					// eine Xillion <- singEnd = " "
					// or eine Xilliarde <- singEnd = "e "
					msg += "e " + bigsArray[bigsIndex] + singEnd;
				} else if (eval(h3) != 0) {
					// the big X is != 1 => plural
					// and the triple is not 000
					// example: 2 000 345 980
					// there are   ^  no millions
					msg += " " + bigsArray[bigsIndex] + "en ";
				}
				break;
			case 4 :
				if (eval(h3) != 0) { // the triple is not 000
					msg += "tausend";
				}
				break;
			case 1 :
				if (numstr.substring(len-pos-1) == "01") { // the rest is '01'
					msg += "s";
				}
				break;
			} // end switch (pos)
			break;
		} // end switch (pos%3)
	} // end for
	return msg;
}// end int2text
function letras(c,d,u)
{
var centenas,decenas,decom
var lc=""
var ld=""
var lu=""
centenas=eval(c);
decenas=eval(d);
decom=eval(u);
switch(centenas)
{
case 0: lc="";break;
case 1:
{
if (decenas==0 && decom==0)
lc="Cien"
else
lc="Ciento ";
}
break;
case 2: lc="Doscientos ";break;
case 3: lc="Trescientos ";break;
case 4: lc="Cuatrocientos ";break;
case 5: lc="Quinientos ";break;
case 6: lc="Seiscientos ";break;
case 7: lc="Setecientos ";break;
case 8: lc="Ochocientos ";break;
case 9: lc="Novecientos ";break;
}
switch(decenas)
{
        case 0: ld="";break;
        case 1:
{
switch(decom)
{
        case 0:ld="Diez";break;
        case 1:ld="Once";break;
        case 2:ld="Doce";break;
        case 3:ld="Trece";break;
        case 4:ld="Catorce";break;
        case 5:ld="Quince";break;
        case 6:ld="Dieciseis";break;
        case 7:ld="Diecisiete";break;
        case 8:ld="Dieciocho";break;
        case 9:ld="Diecinueve";break;
}
}                     
break;
case 2:ld="Veinte";break;
case 3:ld="Treinta";break;
case 4:ld="Cuarenta";break;
case 5:ld="Cincuenta";break;
case 6:ld="Sesenta";break;
case 7:ld="Setenta";break;
case 8:ld="Ochenta";break;
case 9:ld="Noventa";break;
}
switch(decom)
{
        case 0: lu="";break;
        case 1: lu="Uno";break;
        case 2: lu="Dos";break;
        case 3: lu="Tres";break;
        case 4: lu="Cuatro";break;
        case 5: lu="Cinco";break;
        case 6: lu="Seis";break;
        case 7: lu="Siete";break;
        case 8: lu="Ocho";break;
        case 9: lu="Nueve";break;
}
 
if (decenas==1)
{
return lc+ld;
}
if (decenas==0 || decom==0)
{
return lc+" "+ld+lu;
}
else
{
if(decenas==2)
{
ld="Veinti";
return lc + ld + lu.toLowerCase();
}
else
{
return lc+ld+" y "+lu
}
}
}
 
function getNumberLiteral(n)
{
var m0,cm,dm,um,cmi,dmi,umi,ce,de,un,hlp,decimal;
 
if (isNaN(n)) {
return '-';
}
m0= parseInt(n/ 1000000000000); rm0=n% 1000000000000;
m1= parseInt(rm0/100000000000); rm1=rm0%100000000000;
m2= parseInt(rm1/10000000000); rm2=rm1%10000000000;
m3= parseInt(rm2/1000000000); rm3=rm2%1000000000;
cm= parseInt(rm3/100000000); r1= rm3%100000000;
dm= parseInt(r1/10000000); r2= r1% 10000000;
um= parseInt(r2/1000000); r3= r2% 1000000;
cmi=parseInt(r3/100000); r4= r3% 100000;
dmi=parseInt(r4/10000); r5= r4% 10000;
umi=parseInt(r5/1000); r6= r5% 1000;
ce= parseInt(r6/100); r7= r6% 100;
de= parseInt(r7/10); r8= r7% 10;
un= parseInt(r8/1);
//r9=r8%1;
//999123456789
if (n< 1000000000000 && n>=1000000000)
{
tmp=n.toString();
s=tmp.length;
tmp1=tmp.slice(0,s-9)
tmp2=tmp.slice(s-9,s);
 
tmpn1=getNumberLiteral(tmp1);
tmpn2=getNumberLiteral(tmp2);
 
if(tmpn1.indexOf("Un")>=0)
pred=" Bill\u00f3n "
else
pred=" Billones "
return tmpn1+ pred +tmpn2;
}
 
if (n<10000000000 && n>=1000000)
{
mldata=letras(cm,dm,um);
hlp=mldata.replace("Un","*");
if (hlp.indexOf("*")<0 || hlp.indexOf("*")>3)
{
mldata=mldata.replace("Uno","un");
mldata+=" Millones ";
}
else
{
mldata="Un Mill\u00f3n";
}
mdata=letras(cmi,dmi,umi);
cdata=letras(ce,de,un);
if(mdata!="     ")
{
if (n == 1000000) {
        mdata=mdata.replace("Uno","un");// + "de";
} else {
//		alert(cmi + ' ' + dmi + ' ' + umi);
//		alert(ce + ' ' + de + ' ' + un);
//        mdata=mdata.replace("Uno","un")+" mil ";
        mdata=mdata.replace("Uno","un");
		if (cmi+dmi+umi != 0) {
			mdata = mdata + " mil ";
		}
}
}
 
return (mldata+mdata+cdata);
}
if (n<1000000 && n>=1000)
{
mdata=letras(cmi,dmi,umi);
cdata=letras(ce,de,un);
hlp=mdata.replace("Un","*");
if (hlp.indexOf("*")<0 || hlp.indexOf("*")>3)
{
mdata=mdata.replace("Uno","un"); //!!!!
return (mdata +" mil "+cdata);
}
else
        return ("Mil "+ cdata);
}
if (n<1000 && n>=1)
{
return (letras(ce,de,un));
}
if (n==0)
{
return " Cero";
}
return "No disponible"
};

function toSpanish(numero)
{
  if (numero >= 1e9) return '-';
  var tmp=getNumberLiteral(numero);
  return tmp.toLowerCase();
}
function toSwedish(number) {
	if (number > 1e71) return '-';
	// --- fields
	var einsArray = new Array("", "ett", "tv\u00e5","tre","fyra","fem","sex","sju","\u00e5tta","nio");
	var zehnArray = new Array("tio","elva","tolv","tretton","fjorton","femton","sexton","sjutton","arton","nitton");
	var zigArray = new Array("","","tjugo","trettio","fyrtio","femtio","sextio","sjuttio","\u00e5ttio","nittio");
	var spec_unitpref = new Array("m", "b", "tr", "quadr", "quint","sext", "sept", "okt", "non");
	var unitpref = new Array("un", "duo", "tre", "quattuor", "quin","sex", "septen", "okto", "novem");
	var tenpref = new Array("Dez", "Vigint", "Trigint", "Quadragint", "Quinquagint","Sexagint", "Septuagint", "Oktogint", "Nonagint");
	var hundredpref = new Array("Zen", "Duzen", "Trezen", "Quadringen", "Quingen","Sescen", "Septingen", "Oktingen", "Nongen");
	// fill $bigsArray with numbers names
	// up to Zentilliarde = 10^603
	var bigsArray = new Array();
	var index = 0;
	var len = spec_unitpref.length;
	for (var i=0; i < len; i++) {
		bigsArray[index++] = spec_unitpref[i] + "iljon";
		bigsArray[index++] = spec_unitpref[i] + "iljard";
	}

	len = tenpref.length;
	var len2 = unitpref.length;
	for (i=0; i < len; i++) {
		bigsArray[index++] = tenpref[i] + "illion";
		bigsArray[index++] = tenpref[i] + "illiard";
		for (var j=0; j < len2; j++) {
			bigsArray[index++] = unitpref[j] + tenpref[i].toLowerCase() + "illion";
			bigsArray[index++] = unitpref[j] + tenpref[i].toLowerCase() + "illiard";
		}
	}
	bigsArray[index] = hundredpref[0] + "tillion";
	maxNumLength = bigsArray.length*3+6;
	// --- methods
//	this.int2text = int2text;
//	this.isValidNatNumber = isValidNatNumber;

	var numstr = String(number);
	numstr = numstr.replace(/\s+/g, "");
	var msg = "";

	if (numstr.charAt(0) == '-') {
		msg += "minus ";
		numstr = numstr.substring(1); // remove the minus sign
	} else if (numstr.charAt(0) == '+') {
		numstr = numstr.substring(1);
	}
	var len = numstr.length;
	// remove the leading zeros (if any)
	for (var i=0; i<len; i++) {
		if (numstr.charAt(i) != '0') {
			numstr = numstr.substring(i);
			break;
		}
	}

	if ( !isValidNatNumber(numstr) ) {
		return "-";
	} else if (Number(numstr) == 0) {
		return "noll";
	} else if (numstr.length > maxNumLength) {
		var diff = numstr.length - maxNumLength;
		return "Support of only " + maxNumLength + " digits. There " +
			(diff == 1 ? "is one" : "are "+ diff) + " more!";
	}
	numstr = "0" + numstr; // for the cases when numstr is "1" or "\d\d01"

	len = numstr.length;
	var h1 = "numstr.charAt(len-pos)";  // current figure
	var h2 = "numstr.charAt(len-pos+1)"; // the figure on the right
	var h3 = "Number(numstr.substring(len-pos-2, len-pos+1))";
	var singEnd, bigsIndex;
	// begin of the conversion
	for (var pos = len; pos > 0; pos--) {
		/*
			example:
			number ->  0  x , x  x  x , x  x  x , x  x  x
			len = 11
			$pos   -> 11 10   9  8  7   6  5  4   3  2  1
			$pos%3 ->  2  1   0  2  1   0  2  1   0  2  1
		*/
		switch (pos%3) {
		case 0 :
			// (len - pos) -> Xxx
			// eval(h1) returns the figure at the big X place
			if (eval(h1) == "0") { // the triple is 0xx
			} else if (eval(h1)== "1") { // the triple is 1xx
				msg += "etthundra";
			} else { // the triple is Xxx, X != 0,1
				msg += einsArray[eval(h1)] + "hundra" ;
			}
			break;
		case 2 :
			// (len - pos) -> xXx
			// number -> Xx (last two figures)
			// eval(h1) returns the figure at the big X place
			// eval(h2) returns the next figure
			if (eval(h1) == "0") { // 0 <= number (=0X) <= 9
				//if (eval(h2) == "1") { // the action is by case 1.case 1
				//} else {
					msg +=  einsArray[eval(h2)];
				//}
			} else if (eval(h1)== "1") { // 10 <= number (in form 1X) <= 19
				msg += zehnArray[eval(h2)];
			} else if (eval(h2) == "0") { // number -> X0
				msg += zigArray[eval(h1)];
			} else { // number -> XX
				msg += zigArray[eval(h1)] + einsArray[eval(h2)];
			}
			break;
		case 1 :
			// (len - pos) -> xxX
			// number (the triple) -> xxX = eval(h3)
			switch (pos) {
			// pos <- {3a+1, a = 0..this.bigsArray.length+1}
			// pos <- 1,4,7, .. ,94, .., (this.bigsArray.length+1)*3+1
			// eine Xillion or eine Xilliarde is 1*10^(pos-1)
			// example: for pos=97 it's 1*10^96 (96 zeros)
			default:
				// catches the cases: pos >= 7
				bigsIndex = (pos-7)/3;
				singEnd = " ";
				if (eval(h3) == 1) {
					// number = 001
					// eine Xillion <- singEnd = " "
					// or eine Xilliarde <- singEnd = "e "
					msg = msg.replace('ett', 'en');
					msg += " " + bigsArray[bigsIndex] + singEnd;
				} else if (eval(h3) != 0) {
					// the big X is != 1 => plural
					// and the triple is not 000
					// example: 2 000 345 980
					// there are   ^  no millions
					msg += " " + bigsArray[bigsIndex] + "er ";
				}
				break;
			case 4 :
				if (eval(h3) != 0) { // the triple is not 000
					msg += "tusen ";
				}
				break;
			case 1 :
//				if (numstr.substring(len-pos-1) == "01") { // the rest is '01'
//					msg += "s";
//				}
				break;
			} // end switch (pos)
			break;
		} // end switch (pos%3)
	} // end for
	msg = msg.replace('ttt', 'tt');
	return msg;
}
function toFrench(ValNum) {
	var i;
	var nPosition;
	var ValNb;
	var LesZeros;
	var strResultat;
	var strTemp;
	var tmpBuff;
	var Unites = new Array('zero', 'un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf');
	var Dixaines = new Array('dix', 'onze', 'douze', 'treize', 'quatorze', 'quinze', 'seize', 'dix-sept', 'dix-huit', 'dix-neuf');
	var LesDixaines = new Array('', 'dix', 'vingt', 'trente', 'quarante', 'cinquante', 'soixante', 'soixante-dix', 'quatre-vingt', 'quatre-vingt-dix');
	var Milliers = new Array ('', 'mille', 'million', 'millard', 'mille');

	for (var i=ValNum.length; i >= 1; i--) {
		
	}

/*
For i = Len(strTemp) To 1 Step -1
   ValNb = Val(Mid$(strTemp, i, 1))
   nPosition = (Len(strTemp) - i) + 1
   Select Case (nPosition Mod 3)
      Case 1
         LesZeros = False
         If i = 1 Then
            If ValNb > 1 Then
               tmpBuff = Unites(ValNb) & " "
            Else
               tmpBuff = ""
            End If
         ElseIf Mid$(strTemp, i - 1, 1) = "1" Then
            tmpBuff = Dixaines(ValNb) & " "
            i = i - 1
         ElseIf Mid$(strTemp, i - 1, 1) = "9" Then
            tmpBuff = LesDixaines(8) & " " & _
                Dixaines(ValNb) & " "
            i = i - 1
         ElseIf Mid$(strTemp, i - 1, 1) = "7" Then
            tmpBuff = LesDixaines(6) & " " & _
                 Dixaines(ValNb) & " "
            i = i - 1
         ElseIf ValNb > 0 Then
            tmpBuff = Unites(ValNb) & " "
         Else
            LesZeros = True
            If i > 1 Then
               If Mid$(strTemp, i - 1, 1) <> "0" Then
                  LesZeros = False
               End If
            End If
            If i > 2 Then
               If Mid$(strTemp, i - 2, 1) <> "0" Then
                  LesZeros = False
               End If
            End If
            tmpBuff = ""
         End If
         If LesZeros = False And nPosition > 1 Then
            tmpBuff = tmpBuff & Milliers(nPosition / 3) & " "
         End If
         strResultat = tmpBuff & strResultat
      Case 2
         If ValNb > 0 Then
            strResultat = LesDixaines(ValNb) & " " & _
               strResultat
         End If
      Case 0
         If ValNb > 0 Then
            If ValNb > 1 Then
               strResultat = Unites(ValNb) & " cent " & _
                  strResultat
            Else
               strResultat = "cent " & strResultat
            End If
         End If
   End Select
Next i
If Len(strResultat) > 0 Then
   strResultat = UCase$(Left$(strResultat, 1)) & _
      Mid$(strResultat, 2)
End If

EndNbVersTexte:
ConvertirEnText = strResultat
Exit Function

NbVersTexteError:
strResultat = "Une Erreur !"
Resume EndNbVersTexte
End Function
*/
}
function isValidNatNumber(number) {
	if ( !isNaN(number) ) {
		var str = String(number);
		var first = str.charAt(0);
		var hasNoPoint = str.indexOf('.') == -1;
		if (first != '+' && first != '-' && hasNoPoint)
			return true;
	}
	return false;
}
function populate() {
	var hex = new Array();
	hex[1] = "0"; hex[2] = "1"; hex[3] = "2"; hex[4] = "3"; hex[5] = "4"; hex[6] = "5"; hex[7] = "6"; hex[8] = "7"; hex[9] = "8"; hex[10] = "9";
	hex[11] = "A"; hex[12] = "B"; hex[13] = "C"; hex[14] = "D"; hex[15] = "E"; hex[16] = "F"; hex[17] = "G"; hex[18] = "H"; hex[19] = "I"; hex[20] = "J";
	hex[21] = "K"; hex[22] = "L"; hex[23] = "M"; hex[24] = "N"; hex[25] = "O"; hex[26] = "P"; hex[27] = "Q"; hex[28] = "R"; hex[29] = "S"; hex[30] = "T";
	hex[31] = "U"; hex[32] = "V"; hex[33] = "W"; hex[34] = "X"; hex[35] = "Y"; hex[36] = "Z";
	return hex;
}
function transpose(s) {
    N = s.length;
    t = "";
    for (i = 0; i < N; i++) {
        t = t + s.substring(N-i-1, N-i);
	}
    s = t;
    return s;
}
function toDecimal(x, base) {
	if (base == 'R') {
		return fromRoman(x);
	}
	if (base == 10 || base == 'A') return x;
	if (10+parseFloat(base)-parseFloat(base) == 10) {
		return parseInt(x, base);
	} else {
		return 0;
	}
}
function fromDecimal(x, base) {
	if (x < 0 || x == '') return '-';
	if (base == 'C') return toChinese(x);
	if (base == 'R') return toRoman(x);
	if (base == 'A') base = 10;
	if (base == '24') return toBase24(x);
	if (base == "en") return toEnglish(x);
	if (base == "de") return toGerman(x);
	if (base == 'es') return toSpanish(x);
	if (base == 'sv') return toSwedish(x);
	var s = "";
	var a = parseFloat(x);
	var b;
	var hex = populate();
	base = parseFloat(base);
	while (a >= base) {
		b = a % base;
		a = Math.floor(a / base);
		s += hex[b+1];
	}
	s += hex[a+1];
	if (s == 'undefined') return '-';
	else return transpose(s);
}
function convertNumerals(amount, from, to, div) {
	var split_array = from.split("|");
	var from_constant_str = split_array[0];
	var from_decimal;
	var from_unit = split_array[2];
	var split_array = to.split("|");
	var to_constant_str = split_array[0];
	var to_value;
	var to_unit = split_array[2];
	from_decimal = toDecimal(amount, from_constant_str);
	var new_str = fromDecimal(from_decimal, to_constant_str);
	to_value = '<b>' + to_value + '</b>';
	if (!div) {
		div = replaceAll(to_unit, ' ', '-');
		div = replaceAll(div, '/', '-');
		div = 'value_' + div;
	}
	else new_str = "<b>" + new_str + "</b>";
	setInnerHTML(div, new_str);
}


function showDiv(div) {
	document.getElementById(div).style.display = 'block';
}

function hideDiv(div) {
	document.getElementById(div).style.display = 'none';	
}

// Initial declarations
window.onload = externalLinks; // Set external links










