<script language="javascript" type="text/javascript">
/* Noviembre 2001, David Hernández Sanz
http://www.terra.es/personal3/davidhdezsanz/
Realiza cambios monetarios entre las monedas nacionales de los paises de la
"zona euro" y el euro y el dolar estadounidense (US$). Al cambiar el valor de
cualquier moneda, se calculan las cantidades equivalentes en el resto.
Para el calculo del cambio con el dolar estadounidense se requiere introducir
la razon de cambio US$/euro. Si esta no se indica se toma un valor por defecto.
Si el navegador no admite scripts, se visualizan los tipos de cambio manejados
pero no se realizan cambios.
*/
//Este script y otros muchos pueden
//descarse on-line de forma gratuita
//en El Código:
www.elcodigo.com
// DECLARACION DE FUNCIONES
// function euroconversor(mon, form) JS1.1;
// function vacio(cadena) JS1.0; euroconversor
// function normalizar(formato_ant) JS1.0; euroconversor
// function cambiar(cambios, inf, sup, euros, formato, form)
// JS1.1; euroconversor
// DECLARACION DE CONSTANTES
var cambio_dolar = 0.8770; // cambio US$/euro
var cambio_dolar_fecha = "23/11/2001";
// DECLARACION DE VARIABLES GLOBALES
var valor; // valor de la moneda a cambiar
var error; // error o no
/* convierte mon al resto, en form */
function euroconversor(mon, form)
{ // DECLARACION DE VARIABLES
cambios = [1.0, // cambios monetarios x/euro; euro
cambio_dolar, // US$
1.95583, // marcos alemanes
13.7603, // chelines austriacos
40.3399, // francos belgas
166.386, // pesetas espanolas
5.94573, // marcos finlandeses
6.55957, // francos franceses
340.75, // dracmas griegos
2.20371, // florines holandeses
0.787564, // libras irlandesas
1936.27, // liras italianas
40.3399, // francos luxemburgueses
200.482]; // escudos portugueses
var valor_euros; // cantidad de mon en euros
var formato; // formato (¿?, 0; 1,1, 1; 1.0, 2)
var decimal; // punto decimal segun formato
valor = form.dolar.value; // INICIO
if(!vacio(valor))
{
formato = normalizar(0); // normaliza form.dolar
if(isNaN(valor))
alert("El cambio US$/euro no es un número correcto.\n" +
"Debe estar en la forma 1552,95 o 1552.95.\n" +
"Se tomará el valor " + cambios[1] + " US$/euro por defecto " +
"(" + cambio_dolar_fecha + ").");
else
cambios[1] = valor;
}
else
formato = 0;
decimal = formato == 1 ? ',' : '.';
valor = form.moneda[mon].value; // normaliza form.moneda[mon]
if(vacio(valor))
alert("No hay cantidad a cambiar.");
else
{
formato = normalizar(formato);
if(isNaN(valor))
alert("La moneda no es un número correcto.\n" +
"Debe estar en la forma 1552,95 o 1552.95.");
else
if(error)
alert("La moneda no está en la misma forma que el valor " +
"US$/euro.\n" +
"Debe estar en la forma 1552" + decimal + "95.");
else
{
if(mon == 0) // cambia a euros
valor_euros = valor; // cambios[0] = 1.0
else
valor_euros = valor / cambios[mon];
cambiar(cambios, 0, mon, valor_euros, formato, form);
cambiar(cambios, mon + 1, cambios.length, valor_euros, formato,
form);
}
}
}
/* dice si cadena es texto no vacio o no */
function vacio(cadena)
{ // DECLARACION DE CONSTANTES
var blanco = " \n\r\t"; // blancos (SP, LF, CR, TAB)
// DECLARACION DE VARIABLES
var i; // indice en cadena
var es_vacio; // cadena es vacio o no
for(i = 0, es_vacio = true; (i < cadena.length) && es_vacio; i++) // INICIO
es_vacio = blanco.indexOf(cadena.charAt(i)) != - 1;
return(es_vacio);
}
/* escribe valor en forma inglesa (1552,95 -> 1552.95) y dice la forma ori- */
/* ginal, segun sea el formato_ant */
function normalizar(formato_ant)
{ // DECLARACION-INICIALIZACION VARIABLES
var formato_act = 0; // formato actual (¿?, 1,1, 1.0)
var coma = valor.indexOf(','); // indice de ',' en valor
var punto = valor.indexOf('.'); // indice de '.' en valor
if((coma == -1) && (punto == -1)) // INICIO
{ // valor 9999
formato_act = formato_ant;
error = false;
}
else
if(coma != -1) // valor 9999,99
{
formato_act = 1;
error = formato_ant == 2;
}
else // punto; valor 9999.99
{
formato_act = 2;
error = formato_ant == 1;
}
if((formato_act == 1) && (coma != -1)) // pasa a formato ingles
valor = valor.substring(0, coma) + '.' +
valor.substring(coma + 1, valor.length);
return(formato_act);
}
/* cambia euros a monedas [inf, sup], desnormaliza segun formato y copia en */
/* form */
function cambiar(cambios, inf, sup, euros, formato, form)
{ // DECLARACION DE VARIABLES
var i; // indice en form.monedas
var valor_x; // valor de moneda x
var punto; // indice de '.' en valor_x
for(i = inf; i < sup; i++) // INICIO
{ // cambia
valor_x = euros * cambios[i];
valor_x = valor_x.toString();
if(formato == 1) // desnormaliza
{
punto = valor_x.indexOf('.');
if(punto != -1)
valor_x = valor_x.substring(0, punto) + ',' +
valor_x.substring(punto + 1, valor_x.length);
}
form.moneda[i].value = valor_x; // copia en form
}
}
</script>