var valoreNormale;
var numeroCifre;

risultati=new Array;
risultatiFormattati=new Array;

function visualizzaRisultati(){
	var maxlen = uDati.length;
	for(var i=1; i<maxlen; i++){
		eval("document.formConversioni.cUnit"+i+".value=risultatiFormattati["+uDati[i]["seq"]+"];");
	}
}

function calcolaValoreNormale(valore){
	var ind = document.formConversioni.unitaDaConvertire.selectedIndex;
	switch(uDati[ind]["rsv"]){
		case 0:
			valoreNormale=valore;
			break;
		case 1:
			valoreNormale=valore*uDati[ind]["value"];
			break;
		case 2:
			valoreNormale=valore/uDati[ind]["value"];
			break;
		case 3:
			valoreNormale=uDati[ind]["value"]/valore;
			break;
		case 11:
			valoreNormale=valore-AbZero;
			if(Math.abs(valoreNormale) < 1e-12){
				valoreNormale=0;
			}
			if(valoreNormale < 0){
				return "N";
			} else {
				return "Y";
			}
			break;
		case 12:
			valoreNormale=5*(valore-32)/9-AbZero;
			if(Math.abs(valoreNormale) < 1e-12){
				valoreNormale=0;
			}
			if(valoreNormale < 0){
				return "N";
			} else {
				return "Y";
			}
			break;
		case 13:
			valoreNormale=5*valore/4-AbZero;
			if(Math.abs(valoreNormale) < 1e-12){
				valoreNormale=0;
			}
			if(valoreNormale < 0){
				return "N";
			} else {
				return "Y";
			}
			break;
		case 14:
			valoreNormale=5*(valore-491.67)/9-AbZero;
			if(Math.abs(valoreNormale) < 1e-12){
				valoreNormale=0;
			}
			if(valoreNormale < 0){
				return "N";
			} else {
				return "Y";
			}
			break;
	}
}

function calcolaRisultati(){
	var maxlen = uDati.length;
	for(var i=1; i<maxlen; i++){
		switch(uDati[i]["rov"]){
			case 0:
				risultati[i]=valoreNormale;
				break;
			case 1:
				risultati[i]=valoreNormale*uDati[i]["value"];
				break;
			case 2:
				risultati[i]=valoreNormale/uDati[i]["value"];
				break;
			case 3:
				risultati[i]=uDati[i]["value"]/valoreNormale;
				break;
			case 11:
				risultati[i]=eval(valoreNormale)+AbZero;
				break;
			case 12:
				risultati[i]=9*risultati[2]/5+32;
				break;
			case 13:
				risultati[i]=4*risultati[2]/5;
				break;
			case 14:
				risultati[i]=9*risultati[2]/5+491.67;
				break;
		}
	}
}

function eliminaSpazi(valore){
	var valore=""+valore;
	var risultato = "";
	var parti=valore.split(" ");
	for (var i=0; i<parti.length; i++){
		risultato += parti[i];
	}
	while(risultato.charAt(0)=="0"){
		risultato=risultato.substring(1)
	}
	return risultato
}

function verificaInput(daTestare){
	var test= ""+daTestare,Allow="1234567890-.",IsAt;
	if (test == ""){
		return "N"
	}
	for (var i=0; i<test.length; i++){
		var CharIs=test.charAt(i);
		IsAt=Allow.indexOf(CharIs);
		if(IsAt==-1){
			return "N"
		}
	}
	var test=Number(daTestare);
	if(isNaN(test)){ 
		return "N"
	}
	if(test > 1e9){ 
		return "N"
	}
	if(test < 1e-5 && test > 0){  
		return "N"
	}
	if (test < 0) { 
		return "N"
	}
	if(test == 0){ 
		return "N"
	}
	return "Y";
}

function verificaFormato(NumIs){
	var NumIs=Number(NumIs);
	if(NumIs == 0){
		return "0"
	}
	if(NumIs <0){
		NumIs=Math.abs(NumIs);
		var SignIs="-";
	} else {
		var SignIs="";
	}
	if(NumIs > 1e15 || NumIs < 1e-10){
		var Output1=realizzaNumeroE(NumIs);
		return SignIs+Output1;
	} else {
		var Output1=realizzaCifreSignificative(NumIs);
		var Output2=Format(Output1);
		return SignIs+Output2
	}
}

function realizzaNumeroE(UseNum){
	var BaseIs,ExpIs,Shift,SignIs,IsE="N";
	var UseNum = "" + UseNum;
	for(var i=0; i < UseNum.length; i++){
		var CharIs=UseNum.charAt(i);
		if(CharIs == "e" || CharIs == "E"){
			IsE="Y";
			break
		}
	}
	if(IsE == "Y"){
		BreakUp=UseNum.split("e");
		ExpIs=BreakUp[1];
		if(eval(ExpIs) < 0){
			SignIs="-"
		} else {
			SignIs="+"
		}
		ExpIs=Math.abs(Number(ExpIs));
		BaseIs=realizzaCifreSignificative(BreakUp[0]);
		if(eval(BaseIs) == 10){
			BaseIs="1";
			if(SignIs == "-"){
				ExpIs=ExpIs-1
			} else {
				ExpIs=ExpIs+1
			}
		}
		ExpIs=SignIs+ExpIs;
		UseNum=BaseIs+" "+"e"+ExpIs;
	} else {
		ExpIs=0;
		while(UseNum > 10){
			UseNum=UseNum/10;
			ExpIs++;
			Shift="e+"
		}
		while(UseNum < 1){
			UseNum=UseNum*10;
			ExpIs++;
			Shift="e-"
		}
		BaseIs=realizzaCifreSignificative(UseNum);
		if(eval(BaseIs) == 10){
			BaseIs="1";
			ExpIs=ExpIs+1
		}
		UseNum=BaseIs+" "+Shift+ExpIs
	}
	return UseNum
}

function realizzaCifreSignificative(UseNum){
	var CountE=0;
	var Shift="";
	var UseNum=Number(UseNum);
	var AllowError= 1e-12;
	if(Math.abs(UseNum) < AllowError){
		return 0
	}
	if(Math.abs(UseNum - 1) < AllowError){
		return 1
	}
	if(Math.abs(UseNum - 10) < AllowError){
		return 10
	}
	if(Math.abs(UseNum - 100) < AllowError){
		return 100
	}
	if(Math.abs(UseNum - 1000) < AllowError){
		return 1000
	}
	if(UseNum > 1 && UseNum < 10){
		CountE=0;
		Shift="N"
	}
	while(UseNum > 10){
		UseNum=UseNum/10;
		CountE++;
		Shift="L"
	}
	while(UseNum < 1){
		UseNum=UseNum*10;
		CountE++;
		Shift="R"
	}
	for(var i=0; i < numeroCifre-1; i++){
		UseNum=UseNum*10
	}
	UseNum=Math.round(UseNum);
	UseNum=""+UseNum;
	var NumLength=UseNum.length;
	if(NumLength > numeroCifre){
		CountE=CountE+1;
		if(Shift=="R"){
			Shift="X"
		}
	}
	var BuildNumber="",NextDigit="";
	if(Shift=="N"){
		for(var i=0; i < NumLength;	i++){
			NextDigit=UseNum.charAt(i);
			BuildNumber=BuildNumber+NextDigit;
			if(i == CountE){
				BuildNumber=BuildNumber+"."
			}
		}
	}
	if(Shift=="L"){
		for(var i=0; i < NumLength; i++){
			NextDigit=UseNum.charAt(i);
			BuildNumber=BuildNumber+NextDigit;
			if(i == CountE){
				BuildNumber=BuildNumber+"."
			}
		}
		while(i < CountE+1){
			BuildNumber=BuildNumber+"0";
			i++
		}
	}
	if(Shift=="R" && CountE < 13){
		BuildNumber="0.";
		for(var i=0; i < CountE-1; i++){
			BuildNumber=BuildNumber+"0"
		}
		BuildNumber=BuildNumber+UseNum.charAt(0);
		for(var i=1; i < NumLength;	i++){
			BuildNumber=BuildNumber+UseNum.charAt(i)
		}
	}
	if(Shift=="X" && CountE < 13){
		if(CountE==2){
			BuildNumber="1"
		} else {
			BuildNumber="0.";
			for(var i=3; i < CountE; i++){
				BuildNumber=BuildNumber+"0"
			}
			BuildNumber=BuildNumber+"1"
		}
	}
	var DPisAt=BuildNumber.indexOf(".");
	if(DPisAt > 0){
		while(BuildNumber.length > DPisAt){
			if(BuildNumber.charAt(BuildNumber.length-1) == "0"){
			BuildNumber=BuildNumber.substring(0,BuildNumber.length-1)
			} else {
				break;
			}
		}
	}
	if(BuildNumber.charAt(BuildNumber.length-1) == "."){
		BuildNumber=BuildNumber.substring(0,BuildNumber.length-1)
	}
	return BuildNumber;
}

function Format(NumToDo){
//	var re = new RegExp ('.', 'gi') ;
//	document.formConversioni.valoreDaConvertire.value = valoreInput.replace(re, '') ;

	NumToDo=""+NumToDo;
	TestForSize=Number(NumToDo);
	if(TestForSize > 1e15 || TestForSize < 1e-10){
		return NumToDo;
	}
	var DPisAt=NumToDo.indexOf(".");
	if(DPisAt > 0){
		while (NumToDo.length > DPisAt){
			if (NumToDo.charAt(NumToDo.length-1) == "0"){
				NumToDo=NumToDo.substring(0,NumToDo.length-1)
			} else {
				break;
			}
		}
	}
	if(NumToDo.charAt(NumToDo.length-1) == "."){
		NumToDo=NumToDo.substring(0,NumToDo.length-1)
	}
	var DPisAt=NumToDo.indexOf(".");
	if (DPisAt == -1){
		DPisAt=999
	}
	var NumLength=NumToDo.length;
	if(DPisAt < NumLength){
		var LenLeft=DPisAt;
		var LenRight=NumLength-DPisAt
	} else {
		var LenLeft=NumLength;
		var LenRight=0
	}
	var LeftStr=NumToDo.substring(0,LenLeft);
	var RightStr=NumToDo.substring(LenLeft+1);
	var LSeparator = ".";
	var RSeparator = " ";
	var NewLeft="";
	var Count=0;
	for(var i=LenLeft-1; i >= 0; i--){
		NextDigit=LeftStr.charAt(i);
		NewLeft=""+NextDigit+NewLeft;
		Count++;
		if (Count > 0 && Count % 3 == 0 && !(Count == LenLeft)){
			NewLeft=LSeparator+NewLeft
		}
	}
	var NewRight="";
	var Count=0;
	for(var i=0; i < LenRight; i++){
		NextDigit=RightStr.charAt(i);
		NewRight=NewRight+NextDigit;
		Count++;
		if(Count > 0 && Count % 3 == 0 && !(Count == LenRight-1)){
			NewRight=NewRight+RSeparator;
		}
	}
	if (LenRight == 0){
		return NewLeft;
	}
	if(LenLeft == 0){
		return "0,"+NewRight;
	}
	return NewLeft+","+NewRight;
}

function Ripulisci(){
	qtUnita = uDati.length;
	for(var i=1; i < qtUnita; i++){
		risultatiFormattati[i]=" "
	}
	visualizzaRisultati();
	document.formConversioni.valoreDaConvertire.value="";
	return;
}

function Converti(){
	var valoreInput = document.formConversioni.valoreDaConvertire.value;
	
	var re = new RegExp (' ', 'gi') ;
	valoreInput = valoreInput.replace(re, '') ;

	var re = new RegExp ('\\.', 'gi') ;
	valoreInput = valoreInput.replace(re, '') ;

	var re = new RegExp (',', 'gi') ;
	valoreInput = valoreInput.replace(re, '.') ;
	
	valoreInput = eliminaSpazi(valoreInput);
	if(verificaInput(valoreInput)=="N"){
		Ripulisci();
		return;
	}
	
	document.formConversioni.valoreDaConvertire.value = Format(valoreInput);
	
	calcolaValoreNormale(valoreInput);
	calcolaRisultati();
	numeroCifre = document.formConversioni.numeroCifreSignificative.value;
	if(numeroCifre < 3){
		numeroCifre=3;
	}
	if(numeroCifre > 9){
		numeroCifre = 9;
	}
	qtUnita = uDati.length;
	for(var i=1; i < qtUnita; i++){
		risultatiFormattati[i] = verificaFormato(risultati[i]);
	}
	visualizzaRisultati();
}
