

// Skriver ut det som användaren trycker in på miniräknaren.
function skriv_ut_nummer(nummer)
{
	var txt = document.getElementById("resultat_text_osynlig").value; 
		
	// Kontrollerar om texten är: "Var god vänta..."
	if(txt == "Var god v&auml;nta...")  {
		// Gör inget. (1+1 håller på att räknas ut.)
	}
	
	else  {
	
		// Om den står "Var god vänta..." som synlig text, så skall det raderas. 
		// Det söks efter "Var", och om det blir större än 0, så betyder det att "Var" finns.
		if(document.getElementById("resultat_text_synlig").innerHTML.search(/Var/) >= 0 ) {
			document.getElementById("resultat_text_synlig").innerHTML = "";
		}
	
		// Kontrollerar att det inte redan är "fullt" i "text-remsan".
		// Om det är "fullt", så skrivs inget nytt ut.
		// (Däremot så ökas den "osynliga delen" i vilket fall som helst.)
		if(txt.length >= 14)  {
			// Bara den osynliga delen ökas.
			document.getElementById("resultat_text_osynlig").value += "" + nummer;
		}
	
		// Både den synliga och den osynliga delen ökas.
		else  {
			document.getElementById("resultat_text_osynlig").value += "" + nummer;
			document.getElementById("resultat_text_synlig").innerHTML += "" + nummer;
		}
	}
}



// "Rensar" (Raderar) allt som användaren har skrivit in på miniräknaren.
// (Både den osynliga och den synliga delen raderas.)
function text_rensa()
{
	document.getElementById("resultat_text_osynlig").value = "";
	document.getElementById("resultat_text_synlig").innerHTML = "";
}



// Räknar ut resultatet. (Och skriver ut speciella meddelanden om 
// användaren har skrivit in 1+1.)
function rakna_ut()
{
	// Försöker "genomföra" själva uträkningen.
	try {
	genomfor_utrakning();
	}
	// Ett fel har inträffat. Skriver bara ut "tomrum".
	catch(fel)  {
	document.getElementById("resultat_text_osynlig").value = "";
	document.getElementById("resultat_text_synlig").innerHTML = "";
	}
	
}


// "Genomför" själva uträkningen. (Och skriver ut speciella meddelanden om 
// användaren har skrivit in 1+1.)
function genomfor_utrakning()
{
	// Det som användaren har skrivit in (t.ex 1+1)
	var berakning_text = document.getElementById("resultat_text_osynlig").value;
	// Resultatet av det som användaren har skrivit in (t.ex 2).
	var nytt_resultat = eval(berakning_text);

	// 1+1 är inskrivet. Detta är ett specialfall.
	if (berakning_text == "1+1")  {
		document.getElementById("resultat_text_osynlig").
		value = "Var god v&auml;nta...";
		document.getElementById("resultat_text_synlig").
		innerHTML = "Var god v&auml;nta...";
		
		// Låter användaren vänta i 1,8 sekunder.
   	    setTimeout ("norsk_raknare()", "1800");
   	}

   	
   	// Något felaktigt (t.ex ++--**978*) är inskrivet. (Eller är ett oändligt tal inskrivet.)
   	// (Eller är inget alls inskrivet (berakning_text = "")).
   	else if (nytt_resultat == "undefined" || nytt_resultat == "Infinity"
   	|| berakning_text == "")  {
        document.getElementById("resultat_text_osynlig").value = "";
        document.getElementById("resultat_text_synlig").innerHTML = "";
    }


    
    // En "vanlig" uträkning.
    else {
    	
    	var nytt_resultat_string = "" + nytt_resultat;
    	
		// Kontrollerar om en tio-potens ("e") finns.  
    	var tio_potens_finns = nytt_resultat_string.lastIndexOf("e");
    	
    	// En tio-potens ("e") finns på plats nr. 8 eller senare.)
    	if(tio_potens_finns > 7)  {
    			
    		// De nio första siffrorna tas fram. 
    		var nytt_resultat_forsta_tio_siffror = nytt_resultat_string.substring(0, 
    		7); 
				
			// Tar fram själva "tio-potensen".
			var nytt_resultat_tio_potens = nytt_resultat_string.substring(tio_potens_finns);

    			
    		// Sätter samman de olika delarna.
    		nytt_resultat_string = "" + nytt_resultat_forsta_tio_siffror + ""
    		+ nytt_resultat_tio_potens + "";
    	
    	}
    	
    	// Om det är mer än (eller lika med) 14 tecken, så skrivs bara de 15 första ut. 
    	if(nytt_resultat_string.length >= 14) {
    			    			
    	    // Alla tecken lagras i "den osynliga delen".
    		document.getElementById("resultat_text_osynlig").value = 
    		"" + nytt_resultat_string;
    		
    		// Bara de 12 första tecknen skrivs ut.
    		// Resten "ersätts" av "..."
    		document.getElementById("resultat_text_synlig").innerHTML = 
    		"" + nytt_resultat_string.substring(0,11) + "...";
    	}
    	
    	// Allt skrivs ut. 
    	else  {
    	document.getElementById("resultat_text_osynlig").value = 
    	"" + nytt_resultat_string;
    	document.getElementById("resultat_text_synlig").innerHTML = 
    	"" + nytt_resultat_string;
    	}
    }
}



// Testar om ett extra "mellanrum" skall läggas till.
function testa_mellanrum()
{
	// Tar fram User Agent. 
	var user_agent = "" + navigator.userAgent;
	
	// Avnvändaren använder operativsystemet Macintosh.
	if(user_agent.lastIndexOf("Mac") >= 0)  {
		// Användaren använder webbläsaren Safari (Mac). 
		if(user_agent.lastIndexOf("Safari") >= 0)  {
			// Inget extra "mellanrum".
			return " ";
		}
		// Användaren använder webbläsaren Firefox (Mac).
		else if(user_agent.lastIndexOf("Firefox") >= 0)  {
			// Inget extra "mellanrum".
			return " ";
		}
		// Användaren använder webbläsaren Opera (Mac). 
		else if(user_agent.lastIndexOf("Opera") >= 0)  {
			// Inget extra "mellanrum".
			return " ";
		}
		// Användaren använder en annan webbläsare för Mac, t.ex Camino. 
		else {
			// Inget extra "mellanrum".
			return "\n";
		}
	}
	// Användaren använder webbläsaren Opera. 
	else if(user_agent.lastIndexOf("Opera") >= 0)  {
		// Inget extra "mellanrum".
		return " "; 
	}
	// Användaren använder webbläsaren Safari. 
	else if(user_agent.lastIndexOf("Safari") >= 0)  {
		// Inget extra "mellanrum".
		return " "; 
	}
	// Användaren använder webbläsaren Konqueror. 
	else if(user_agent.lastIndexOf("Konqueror") >= 0)  {
		// Inget extra "mellanrum".
		return " "; 
	}
	
	else  {
		return "\n"; 
	}
}




// Denna funktion "sätts igång" om användaren slår in 1+1. 
function norsk_raknare()
{    
   // Texten som skall visas efter att användaren bekräftat.
   var text = "Ett svar kan inte l\u00e4mnas direkt," 
   + testa_mellanrum() 
   + "eftersom minir\u00e4knaren beh\u00f6ver l\u00e4ngre bet\u00e4nketid.\n \n"
   + "F\u00f6rhoppningar finns dock om att ett korrekt svar skall" 
   + testa_mellanrum()
   + "vara klart inom en snar framtid.";
   
   if  (confirm("VARNING! \nDetta \u00e4r en mycket sv\u00e5r "
   + "och avancerad r\u00e4kneoperation," 
   + testa_mellanrum()
   + "som kan ta l\u00e5ng tid f\u00f6r denna minir\u00e4knare att utf\u00f6ra.\n"
   + "Vill du forts\u00e4tta?")) {
 		alert(text);
   }
    else {
 	    alert("Denna komplicerade r\u00e4kneoperation "
 	    + "g\u00e5r tyv\u00e4rr inte att avbryta.");
   		alert(text);
   }

	// Låter användaren vänta i 2,9 sekunder.
	setTimeout ("norsk_miniraknare()", "2900")

}


// Forts. på norsk_raknare().
function norsk_miniraknare()
{
	alert("Det st\u00e5r nu klart att denna r\u00e4kneoperation" 
	+ testa_mellanrum() 
	+ "\u00e4r alldeles f\u00f6r komplicerad f\u00f6r denna minir\u00e4knare. \n \n"
	+ "F\u00f6r att kunna hitta en l\u00f6sning till det sv\u00e5ra talet," 
	+ testa_mellanrum()
	+ "kommer d\u00e4rf\u00f6r den norska superdatorn 'Nor-Smart-95' att kontaktas.");

	alert("Eftersom superdatorn 'Nor-Smart-95' \u00e4r ganska upptagen just nu,"
	+ testa_mellanrum()
	+ "s\u00e5 kan det dr\u00f6ja ett tag innan ett svar kan levereras.");


	// Låter användaren vänta i 4,4 sekunder.
	setTimeout ("norsk_superdator()", "4400")


}


// Forts. på norsk_miniraknare().
function norsk_superdator()
{
	alert("I samarbete med den norska superdatorn 'Nor-Smart-95' kan nu"  
	+ testa_mellanrum() 
	+ "\u00e4ntligen denna minir\u00e4knare presentera svaret till det sv\u00e5ra talet 1+1.");
	alert("Svaret \u00e4r 7.");
	
	// Ser till att "Var god v&auml;nta..." raderas (i den osynliga delen).
	document.getElementById("resultat_text_osynlig").value = "";
}



