Tra le più controverse e roventi tematiche legate alla Rete, la gestione complessiva delle telecomunicazioni nel nostro paese è certamente un punto fondamentale. La famigerata TUT (Tariffa Urbana a Tempo) agita i sonni di centinaia di migliaia di navigatori che adirittura, con scopi e finalità discutibili, si sono riuniti in comitati di lotta per la sua abolazione. Non entriamo nel merito della questione, vuoi per la sua complessità, vuoi per evitare facile demagogia. Comunque sia il mercato si evolve e da qualche giorno, precisamente dal primo novembre, sono entrate in vigore nuove tariffe per le telefonate urbane coniate con il termine TAT: tariffa a tempo.
La TAT si basa sull'effettivo numero di secondi di chiamata e sul principio che per telefonate più lunghe si ha un minor costo. Come in passato viene comunque conteggiato uno scatto alla risposta.
Lo script che presentiamo si riferisce a questo nuovo regime tariffario presentando uno script che consente di calcolare il costo della TAT inserendo ore, minuti e secondi di conversazione. In questo modo potrai conoscere i nuovi costi delle chiamate telefoniche ed eventualmente mettere a disposizione dei visitatori del tuo sito questo strumento.
Il file si compone di 1 file:
- esempio.htm
Per una più semplice comprensione del presente script fai continuamente riferimento al file sopracitato, verificando le procedure e i dati espressi. Solo in questo modo, con un continuo confronto, comprenderai le peculiarità di questo Javascript.
esempio.htm
Il file esempio.htm è una seplice pagina HTML nella quale inserire il codice necessario al funzionamento dello script. Come solitamente accade per gli script di calcolo e conversione, anche in questo caso ci serviremo dei campi di un modulo HTML per mostrare i dati restituiti dal codice. Ma andiamo con ordine, prima di tutto è necessario impostare il codice nell'intestazione del documento (elemento <head>):
<script type="text/javascript" language="javascript">
function checkNumber(input, min, max, msg)
{
msg = msg + " Dati non Validi: " + input.value;
var str = input.value;
for (var i = 0; i < str.length; i++) {
var ch = str.substring(i, i + 1)
if ((ch < "0" || "9" < ch) && ch != '.') {
alert(msg);
return false;
}
}
var num = parseFloat(str)
if (num < min || max < num) {
alert(msg + " not in range [" + min + ".." + max + "]");
return false;
}
input.value = str;
return true;
}
function computeField(input)
{
if (input.value != null && input.value.length != 0)
input.value = "" + eval(input.value);
}
function computeForm(form)
{
if ((form.ore.value == null || form.ore.value.length == 0) &&
(form.minuti.value == null || form.minuti.value.length == 0) &&
(form.secondi.value == null || form.secondi.value.length == 0)) {
return;
}
if (!checkNumber(form.ore, 0, 48, "# di ore") ||
!checkNumber(form.minuti, 0, 48000, "# di minuti") ||
!checkNumber(form.secondi, 0, 100000, "# di secondi")) {
form.pagamento.value = "TROPPO Alto";
return;
}
var o = form.ore.value;
var m = form.minuti.value;
var s = form.secondi.value;
if (o> 0) {
o = +o*3600;
} else o = 0;
if (m> 0.1) {
m = m*60 + +o;
} else m = o;
if (s>0) {
m = +m + +s;
}
;
var sat = m - 15*60;
if (sat> 0) {
form.pagamento.value = 0.354*15*60 + 0.318*sat + 120 ;
form.display.value = 0.612*15*60 + 0.552*sat + 120;}
else
{ form.pagamento.value = 0.354*m + 120;
form.display.value = 0.612*m + 120; }
}
function clearForm(form)
{
form.ore.value = "";
form.minuti.value = "";
form.secondi.value = "";
form.pagamento.value = "";
}
</script>
Questo codice abbastanza lungo è anche relativamente semplice. Impostiamo diverse fuzioni: checkNumber, computeField, computeForm e clearForm. Perchè tutto funzioni correttamente è necessario *non* modificare questa sintassi che imposta tempi, costi e quant'altro prevede la nuova tariffazione.
Inserito il codice nell'intestazione del documento è necessario creare il form che richiama le funzioni impostate in precedenza, permette di inserire i dati ed ottenere i corrispondenti risultati. Questo il codice da riportare tra i tag <body>:
<form method=post>
<table class="tabella" border="1" width="550">
<tr>
<td width="70"><div align="center"> <strong> #
di <br />ore </strong></div></td>
<td width="69"><div align="center"> <strong> #
di <br />minuti
e </strong></div></td>
<td width="60"><div align="center"><strong># di
secondi</strong></div></td>
<td width="162"><div align="center"> <strong>importo in
lire</strong></div><div
align="center"> <strong> (iva
e set up compresi)</strong></div></td>
</tr>
<tr>
<td width="70"><input name=ore size=3 onchange=computefield(this)>
</td>
<td width="69"><input type=text name=minuti size=5
onchange=computefield(this)> </td>
<td width="60"><input name=secondi size=6
onchange=computefield(this)>
</td>
<td width="162">
<p align="right"><font
color="#008000"><strong>ridotta</strong></font> <input
name=pagamento size=9 onchange=computefield(this)></p>
<p align="right"><font
color="#ff0000"><strong>normale</strong></font><input
name=display size=9 onchange=computefield(this)> </p>
</td>
<td width="82"><input type="button" value="calcola"
onclick=computeform(this.form) name="calcola"> </td>
<td width="139"><input type="reset" value="reset"
onclick=clearform(this.form)> </td>
</tr>
</table>
</form>
Il Javascript di questa settimana è perfettamente compatibile con MsIe e Netscape. Finalmente ringraziamo Andrea Casanova per la gentile concessione.