// Scientific Calculator written by Eni Generalic - http://www.ktf-split.hr/~eni/
// If you use a variant of this in your page, then please email me (eni@ktf-split.hr)

var broj = "0"
var tocka = 0
var eksp = 0
var eksponent = 3
var rjesenje = 0
var decimala = 0
var enter = "";


function start() {
	document.racunalo.zadatak.focus()
}

function memory(operator) {

	document.racunalo.zadatak.focus();

	if (operator == 1) {		// MS 
		document.racunalo.memorija.value = document.racunalo.rezultat.value
	}
	else if (operator == 2)	{	// MR
		var memorija = document.racunalo.memorija.value;
		if (memorija==0 || slovo(memorija.charAt(0))) {memorija = ""};
		document.racunalo.zadatak.value += memorija
	}
	else if (operator == 3) {	// CLS
		if (document.racunalo.zadatak.value == "") {
			document.racunalo.rezultat.value = ""
		}
		else {
			document.racunalo.zadatak.value = ""
		}
	}
	else if (operator == 4) {	// Reset
		document.racunalo.zadatak.focus()
	}
}


function display(noviznak) {
	if (noviznak=="")
		{document.racunalo.zadatak.focus()}
	else
		{document.racunalo.rezultat.select()}
}


function dodajBroj(noviznak) {
	document.racunalo.zadatak.focus();
	document.racunalo.zadatak.value += noviznak
}


function izracunaj(zarez) {
	var pitanje = "";
	var mem = 0;

	if (zarez >= 1) {
		if (document.racunalo.zadatak.value == "") {
			broj = document.racunalo.rezultat.value
		}
		else {
	    	broj = document.racunalo.zadatak.value;
			if (ubacirezultat(broj.charAt(0))) {
				broj = document.racunalo.rezultat.value + broj
			}
		}
	}

	for (var i=0; i<broj.length; i++) {
		if (slovo(broj.charAt(i))) {var kem = 1};
		if (broj.charAt(i) == ",") {pitanje += "."}
		else if (broj.charAt(i) == " ") {}
		else {pitanje += broj.charAt(i)}
	}

	if (operator(broj.charAt(broj.length-1))) {return false};

	if (zarez == 1) {
		if (kem == 1) {
			var atom = "+" + pitanje;
			pitanje = masa(atom)
		}
		else {
			pitanje = eval("1*" + pitanje)
		}
	}
	else if (zarez > 1) {
		pitanje = eval("1*" + pitanje);
		pitanje = matematika(zarez, pitanje)
	}

	document.racunalo.oldrezultat.value = pitanje;

	zaokruzi(pitanje);

	document.racunalo.zadatak.value = "";
 	document.racunalo.zadatak.focus()
}


function matematika(zarez, rjesenje) {
 with (Math)
  {
	if (zarez == 2) {
		rjesenje = pow(rjesenje, 2)
	}
	else if (zarez == 3) {
		rjesenje = sqrt(rjesenje)
	}
	else if (zarez == 4) {
		rjesenje = -rjesenje
	}
	else if (zarez == 5) {
		rjesenje = log(rjesenje)
	}
	else if (zarez == 6) {
		rjesenje = pow(E, rjesenje)
	}
	else if (zarez == 7) {
		rjesenje = 1/rjesenje
	}
	else if (zarez == 8) {
		rjesenje = log(rjesenje)/LN10
	}
	else if (zarez == 9) {
		rjesenje = pow(10, rjesenje)
	}
	else if (zarez >= 10 && zarez <= 12) {
		if (zarez == 10) {
			rjesenje = atan(rjesenje)
		}
		else if (zarez == 11) {
			rjesenje = acos(rjesenje)
		}
		else if (zarez == 12) {
			rjesenje = asin(rjesenje)
		}

		if (document.racunalo.stupnjevi[1].checked) {rjesenje = (rjesenje * 180) / PI}
	}
	else if (zarez >= 14 && zarez <= 16) {
		if (document.racunalo.stupnjevi[1].checked)
			{radijani = (rjesenje / 180) * PI}
		else
			{radijani = rjesenje};

		if (zarez == 14) {
			rjesenje = tan(radijani)
		}
		else if (zarez == 15) {
			rjesenje = cos(radijani)
		}
		else if (zarez == 16) {
			rjesenje = sin(radijani)
		}
	}
	else if (zarez == 17) {
		rjesenje = rjesenje/100
	}
	else if (zarez == 18) {
		rjesenje = rjesenje/1000000
	}
	else if (zarez == 20) {
		rjesenje = factorial(rjesenje)
	}
	else if (zarez == 21) {
		rjesenje = pow(rjesenje, eksponent)
	}
	else if (zarez == 22) {
		rjesenje = pow(rjesenje, (1/eksponent))
	}
	return rjesenje
 }
}


function zaokruzi(ebroj) {

decimala=parseFloat(document.racunalo.izaZareza.options[document.racunalo.izaZareza.selectedIndex].value);
	var strbroj = ebroj + " ";
	if (strbroj.charAt(0) == ".") {strbroj = "0" + strbroj};
	var intbroj = strbroj.length - 1;
	deczarez(strbroj);

	if (intbroj > 16 && eksp == -1) {
		if (decimala == -1) {decimala = 14};
		strbroj = izazareza(strbroj.substring(0,intbroj)) + " ";
		intbroj = strbroj.length - 1;
		deczarez(strbroj)
	}

	if (decimala >= 0 && decimala != 14) {
		if (tocka > 0) {
			var odgovor = izazareza(strbroj.substring(0,intbroj))
		}
		else {
			ebroj = strbroj.substring(0,intbroj);
			if (decimala > 0) {
				ebroj += ".";
				for (var n = 0; n < decimala; n++) {
					ebroj += "0"
				}
			}
			var odgovor = ebroj
		}
	}
	else {
		decimala = 14;
		var odgovor = izazareza(strbroj)
	}

	if (odgovor.charAt(0) == ".") {odgovor = "0" + odgovor};

	document.racunalo.rezultat.value = odgovor;
}


function deczarez(novibroj) {
	tocka = 0;
	eksp = 0;

	tocka = novibroj.indexOf(".");
	eksp = novibroj.indexOf("e")
}


function izazareza(novibroj) {
 with (Math) {

	if (eksp == -1) {
		var duzina = tocka;
		if (duzina == -1) {duzina = novibroj.length};
		var desni = "";

		if (duzina > 16) {
			var privremeni = round(novibroj*pow(10, 18)) + " ";
			var novie = privremeni.indexOf("e");
			var lijevi = (privremeni.substring(0,novie));

			lijevi = round(lijevi*pow(10, 15))/pow(10, 15) + " ";
			desni = (privremeni.substring(novie+2,privremeni.length-1));
			desni = "e+" + (desni-18)
		}
		else {
			var lijevi = round(novibroj*pow(10, decimala))/pow(10, decimala) + " "
		}
	}
	else {
		var lijevi = novibroj.substring(0,eksp);
		var desni = novibroj.substring(eksp,novibroj.length);

		lijevi = round(lijevi*pow(10, decimala))/pow(10, decimala) + " "
	}

	lijevi = lijevi.substring(0,lijevi.length - 1);

	if (lijevi.charAt(0) == ".") {lijevi = "0" + lijevi};

	if (decimala < 14) {
		if (lijevi.indexOf(".") == -1 && decimala != 0) {lijevi += "."};
		var nula = (tocka + decimala) - (lijevi.length - 1);
		if (nula > 0 && decimala > 0) {
			for (var n = 0; n < nula; n++) {
				lijevi += "0"
			}
		}
	}

	return (lijevi + " " + desni)
 }
}


function factorial(n) {
	if ((n == 0) || (n == 1)) {
		return 1
	}
	else {
		var odgovor = (n * factorial(n-1));
		return odgovor
	}
}


function masa(atom) {
 with (Math) {
 	var atominfo = false
	var mm=""
	var mmdn=""
	var mmup=""
	var znak=""
	var izraz=""
	var H=1.00794
	var He=4.002602
	var Li=6.941
	var Be=9.012182
	var B=10.811
	var C=12.0107
	var N=14.0067
	var O=15.9994
	var F=18.9984032
	var Ne=20.1797
	var Na=22.98977
	var Mg=24.305
	var Al=26.981538
	var Si=28.0855
	var P=30.973761
	var S=32.065
	var Cl=35.453
	var Ar=39.948
	var K=39.0983
	var Ca=40.078
	var Sc=44.95591
	var Ti=47.867
	var V=50.9415
	var Cr=51.9961
	var Mn=54.938049
	var Fe=55.845
	var Co=58.9332
	var Ni=58.6934
	var Cu=63.546
	var Zn=65.39
	var Ga=69.723
	var Ge=72.64
	var As=74.9216
	var Se=78.96
	var Br=79.904
	var Kr=83.8
	var Rb=85.4678
	var Sr=87.62
	var Y=88.90585
	var Zr=91.224
	var Nb=92.90638
	var Mo=95.94
	var Tc=98
	var Ru=101.07
	var Rh=102.9055
	var Pd=106.42
	var Ag=107.8682
	var Cd=112.411
	var In=114.818
	var Sn=118.71
	var Sb=121.76
	var Te=127.6
	var I=126.90447
	var Xe=131.293
	var Cs=132.90545
	var Ba=137.327
	var La=138.9055
	var Ce=140.116
	var Pr=140.90765
	var Nd=144.24
	var Pm=145
	var Sm=150.36
	var Eu=151.964
	var Gd=157.25
	var Tb=158.92534
	var Dy=162.5
	var Ho=164.93032
	var Er=167.259
	var Tm=168.93421
	var Yb=173.04
	var Lu=174.967
	var Hf=178.49
	var Ta=180.9479
	var W=183.84
	var Re=186.207
	var Os=190.23
	var Ir=192.217
	var Pt=195.078
	var Au=196.96655
	var Hg=200.59
	var Tl=204.3833
	var Pb=207.2
	var Bi=208.98038
	var Po=209
	var At=210
	var Rn=222
	var Fr=223
	var Ra=226
	var Ac=227
	var Th=232.0381
	var Pa=231.03588
	var U=238.02891
	var Np=237
	var Pu=244
	var Am=243
	var Cm=247
	var Bk=247
	var Cf=251
	var Es=252
	var Fm=257
	var Md=258
	var No=259
	var Lr=262
	var Pi=3.141592653589793;
	
	for (var i=0; i<atom.length; i++) {
		mm = atom.charAt(i)
		mmup = atom.charAt(i+1)
		bigup=mm.toUpperCase()
		mmdn = atom.charAt(i-1);

		if (mm == "[") {mm = "("}
		else if (mm == "]") {mm = ")"}
		else if (mm == ",") {mm = "."}

		if (slovo(mm)) {atominfo = true};
		if (matoperator(mm)) {atominfo = false; znak=""};
		if (atominfo) {
			if (matoperator(mmup)) {znak=")"}
			if (matoperator(mmdn)) {izraz += "(" + mm + znak}
			else if (mmdn=="(") {izraz += mm + znak}
			else if (mmdn=="[") {izraz += mm + znak}
			else if (slovo(mm)) {izraz += "+" + mm + znak}
			else if (BrojAtoma(mmdn)) {izraz += mm + znak}
			else if (BrojAtoma(mm)) {izraz += "*" + mm + znak}
			else {izraz += mm + znak}
		}
		else {izraz += mm}
	}
	odgovor = eval(izraz);
	return odgovor
 }
}


function slovo(znak) {
	var slovo="(ABCDEFGHIKLMNOPRSTUVWXYZ";
	for (var i=0; i<slovo.length; i++)
		if (znak == slovo.charAt(i)) {return true} {return false}
}


function matoperator(znak) {
	var matoperator="*/+-";
	for (var i=0; i<matoperator.length; i++)
		if (znak == matoperator.charAt(i)) {return true}
		if (znak == "") {return true}
		if (znak == null) {return true}
	return false
}

function operator(znak) {
	var matoperator="*/+-";
	for (var i=0; i<matoperator.length; i++)
		if (znak == matoperator.charAt(i)) {return true}
	return false
}

function ubacirezultat(znak) {
	var ubacirezultat="*/+";
	for (var i=0; i<ubacirezultat.length; i++)
		if (znak == ubacirezultat.charAt(i)) {return true}
	return false
}

function BrojAtoma(znak)
{	var atom = "1234567890";
	for (var i=0; i<atom.length; i++)
		if (znak == atom.charAt(i)) {return true} {return false}
}

//Eni Generalic, Split, Create: 1999/10/14; Update: 2001/12/8
//Atomic Weights of the Elements 1999, Pure & Appl. Chem., Vol. 73, No. 4, 667-683 (2001)

