// Molar Mass tool follows
<!--
var strElement = "";
var temp = "";
var DataError = false;
var varMolM = 0;
var formula = "";
var NumberElements = "";
var modPercent;
var adjMole = "";
var adjMM = "";
var adjGram ="";

NumberAtoms = new Array(0,0,0,0,0,0,0,0,0,0,0,0);
PercentOfMass = new Array(0,0,0,0,0,0,0,0,0,0,0,0);
ANofAtom = new Array(0,0,0,0,0,0,0,0,0,0,0,0);

function cmpd(NumberAtoms,ANofAtom,MMM,printString) {
        this.NumberAtoms = NumberAtoms;
        this.ANofAtom = ANofAtom;
        this.MMM = MMM;
        this.printString = printString;
        };
compound = new cmpd(NumberAtoms,ANofAtom,varMolM)
        function ParseFormula(formula)  {
        var c=0; x=0; y=0; c1=0; marker1=0; marker2=-1; loopCount=0;
        var DataError=false; multiplier=1
        a1 = new Array(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0);
        a2 = new Array(0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0);
        while (c <= formula.length - 1 && !DataError){
                AN = findAN(formula.substring(c,c+2));
                if (AN == -1){
                        AN = findAN(formula.substring(c,c+1));  
                        y=1;
                        }
                else y=2;
                if (AN > -1){
                        marker2=-1
                        for (var c2=0; c2<=11; c2++)  {
                                if (a2[c2] == AN) { 
                                        marker2 = c2; break
                                        }}
                        if (marker2>=0) {marker1=marker2;loopCount-=1;} else marker1=loopCount;
                        c += y;
                        a2[marker1] = AN;
                        var OK = true;
                        var c3 = 0;
                        while (OK && c+c3 <= formula.length-1)  {
                                AN = findNum(formula.substring(c+c3, c+c3+1));
                                if (AN >= 0) c3++; else OK = false;
                                }
                        if (c3>0) {
                                if (marker2>=0) a1[marker1] += parseInt(formula.substring(c, c+c3))*multiplier;
                                else a1[marker1] = parseInt(formula.substring(c, c+c3))*multiplier;
                                }
                        else { if (marker2>=0) a1[marker1] += 1*multiplier; else a1[marker1] = 1*multiplier 
                                }
                
                        c += c3;
                        loopCount++
                        }
                else {
                        AN="[]().".indexOf(formula.substring(c,c+1));
                        if (AN==-1) {DataError=true;break}
                        if (AN==0 || AN==2){
                                if (AN==2) {
                                        var zz=0
                                        for (x=c;x<=formula.length-1;x++){
                                                if (formula.substring(x,x+1)==")"){zz=x; break}
                                                }}
                                else{
                                        for (x=c;x<=formula.length-1;x++){
                                                if (formula.substring(x,x+1)=="]"){zz=x; break}
                                                }}
                                var c4=1;OK=true
                                while (OK && zz+c4 <= formula.length-1) {
                                        var AN1 = findNum(formula.substring(zz+c4, zz+c4+1));
                                        if (AN1 >= 0) c4++; else OK = false;
                                        }
                                if (c4>1) {
                                        var z=parseInt(formula.substring(1+zz, c4+zz));
                                        multiplier=multiplier*z
                                        }
                                c++
                                }
                        if (AN==1 || AN==3){
                                var c5=1;OK=true
                                while (OK && c+c5 <= formula.length-1)  {
                                        var AN1 = findNum(formula.substring(c+c5, c+c5+1));
                                        if (AN1 >= 0) c5++; else OK = false;
                                        }
                                if (c5>1){
                                        multiplier=Math.round(multiplier/parseInt(formula.substring(c+1, c+c5)));
                                        }
                                c+=c5
                                }
                        if (AN==4){
                                var c6=1;OK=true
                                while (OK && c+c6 <= formula.length-1)  {
                                        var AN1 = findNum(formula.substring(c+c6, c+c6+1));
                                        if (AN1 >= 0) c6++; else OK = false;
                                        }
                                if (c6>1) {
                                        multiplier *= parseInt(formula.substring(c+1, c+c6));
                                        }
                                c+=c6
                                }
                        }
                }
        NumberElements = loopCount-1
        for (var i=0; i<=NumberElements; i++)  {
                NumberAtoms[i] = a1[i];
                ANofAtom[i] = a2[i];
                }
        if (DataError) {alert(" Please restructure formula!")};
        }
        function findAN(aSym)  {
        var AN = 0
        if (aSym.length == 1) aSym +="*";
        var x = strElement.indexOf(aSym);
        AN = (x == -1) ?  x : (x/2) + 1;
        return AN;
        }
        function findNum(ch)  {
        var numstring = "0123456789";
        var x = numstring.indexOf(ch);
        return x;
        }
                function CalculateMass()  {
        MMM = 0;
        for (var c=0; c<=NumberElements; c++)  {
                var x =ANofAtom[c];
                MMM += a[x]["mass"]*NumberAtoms[c]
                }
        }
        function Element(symbol, mass)  {
        this.symbol = symbol;
        this.mass = mass;
        }
        function makeArray(arraySize)  {
        this.length = arraySize;
        for (var c=0; c <= arraySize; c++)  {
                this[c] = 0;
                }
        return this;
        }
a = new makeArray(118);
a[1] = new Element("H",1.00794);
a[2] = new Element("He",4.002602);
a[3] = new Element("Li",6.941);
a[4] = new Element("Be",9.012182);
a[5] = new Element("B",10.811);
a[6] = new Element("C",12.0107);
a[7] = new Element("N",14.0067);
a[8] = new Element("O",15.9994);
a[9] = new Element("F",18.9984032);
a[10] = new Element("Ne",20.1797);
a[11] = new Element("Na",22.989770);
a[12] = new Element("Mg",24.3050);
a[13] = new Element("Al",26.981538);
a[14] = new Element("Si",28.0855);
a[15] = new Element("P",30.973761);
a[16] = new Element("S",32.066);
a[17] = new Element("Cl",35.4527);
a[18] = new Element("Ar",39.948);
a[19] = new Element("K",39.0983);
a[20] = new Element("Ca",40.078);
a[21] = new Element("Sc",44.955910);
a[22] = new Element("Ti",47.867);
a[23] = new Element("V",50.9415);
a[24] = new Element("Cr",51.9961);
a[25] = new Element("Mn",54.938049);
a[26] = new Element("Fe",55.845);
a[27] = new Element("Co",58.933200);
a[28] = new Element("Ni",58.6934);
a[29] = new Element("Cu",63.546);
a[30] = new Element("Zn",65.39);
a[31] = new Element("Ga",69.723);
a[32] = new Element("Ge",72.61);
a[33] = new Element("As",74.92160);
a[34] = new Element("Se",78.96);
a[35] = new Element("Br",79.904);
a[36] = new Element("Kr",83.80);
a[37] = new Element("Rb",85.4678);
a[38] = new Element("Sr",87.62);
a[39] = new Element("Y",88.90585);
a[40] = new Element("Zr",91.224);
a[41] = new Element("Nb",92.90638);
a[42] = new Element("Mo",95.94);
a[43] = new Element("Tc",98.9063);
a[44] = new Element("Ru",101.07);
a[45] = new Element("Rh",102.90550);
a[46] = new Element("Pd",106.42);
a[47] = new Element("Ag",107.8682);
a[48] = new Element("Cd",112.411);
a[49] = new Element("In",114.818);
a[50] = new Element("Sn",118.710);
a[51] = new Element("Sb",121.760);
a[52] = new Element("Te",127.60);
a[53] = new Element("I",126.90447);
a[54] = new Element("Xe",131.29);
a[55] = new Element("Cs",132.90545);
a[56] = new Element("Ba",137.327);
a[57] = new Element("La",138.9055);
a[58] = new Element("Ce",140.116);
a[59] = new Element("Pr",140.90765);
a[60] = new Element("Nd",144.24);
a[61] = new Element("Pm",144.9127);
a[62] = new Element("Sm",150.36);
a[63] = new Element("Eu",151.964);
a[64] = new Element("Gd",157.25);
a[65] = new Element("Tb",158.92534);
a[66] = new Element("Dy",162.50);
a[67] = new Element("Ho",164.93032);
a[68] = new Element("Er",167.26);
a[69] = new Element("Tm",168.93421);
a[70] = new Element("Yb",173.04);
a[71] = new Element("Lu",174.967);
a[72] = new Element("Hf",178.49);
a[73] = new Element("Ta",180.9479);
a[74] = new Element("W",183.84);
a[75] = new Element("Re",186.207);
a[76] = new Element("Os",190.23);
a[77] = new Element("Ir",192.217);
a[78] = new Element("Pt",195.078);
a[79] = new Element("Au",196.96655);
a[80] = new Element("Hg",200.59);
a[81] = new Element("Tl",204.3833);
a[82] = new Element("Pb",207.2);
a[83] = new Element("Bi",208.98038);
a[84] = new Element("Po",208.9824);
a[85] = new Element("At",209.9871);
a[86] = new Element("Rn",222.0176);
a[87] = new Element("Fr",223.0197);
a[88] = new Element("Ra",226.0254);
a[89] = new Element("Ac",227.0277);
a[90] = new Element("Th",232.0381);
a[91] = new Element("Pa",213.03588);
a[92] = new Element("U",238.0289);
a[93] = new Element("Np",237.0482);
a[94] = new Element("Pu",244.0642);
a[95] = new Element("Am",243.0614);
a[96] = new Element("Cm",247.0703);
a[97] = new Element("Bk",247.0703);
a[98] = new Element("Cf",251.0796);
a[99] = new Element("Es",252.0830);
a[100] = new Element("Fm",257.0951);
a[101] = new Element("Md",258.0984);
a[102] = new Element("No",259.1011);
a[103] = new Element("Lr",262.110);
a[104] = new Element("Rf",261.1089);
a[105] = new Element("Db",262.1144);
a[106] = new Element("Sg",263.1186);
a[107] = new Element("Bh",264.12);
a[108] = new Element("Hs",265.1306);
a[109] = new Element("Mt",268);
a[110] = new Element("Un",269);
a[111] = new Element("Uu",272);
a[112] = new Element("Ub",277);
a[113] = new Element("Ut",283);
a[114] = new Element("Uq",285);
a[115] = new Element("Up",287);
a[116] = new Element("Uh",289);
a[117] = new Element("Us",291);
a[118] = new Element("Uo",293);




        function makestrElement()  {
                for (var c=1; c <= a.length; c++)  {
                strElement += a[c]["symbol"]
                if (a[c]["symbol"].length == 1) strElement += "*";
                }
        return strElement
        }

function writeOut()  {
// This section formats the output of the molar mass calculator
                makestrElement()
                formula = document.forms[0].ChemicalFormula.value
                ParseFormula(formula)
                if (!DataError) CalculateMass(); else MMM = " Bad Data";
                
                Presorted = new Array("","","","","","","","","","","","");
                document.forms[0].cell1.value = "";
                document.forms[0].cell2.value = "";
                document.forms[0].cell3.value = "";
                document.forms[0].cell4.value = "";
                document.forms[0].cell5.value = "";
                document.forms[0].cell6.value = "";
                document.forms[0].cell7.value = "";
                document.forms[0].cell8.value = "";
                document.forms[0].cell9.value = "";
                document.forms[0].cell10.value = "";
                document.forms[0].cell11.value = "";
                document.forms[0].cell12.value = "";
                var adjAMA="";
                 SignificantDigits = 6;
zx = 1000000;
for (var q=0; q<=NumberElements; q++) {
if((a[ANofAtom[q]]["mass"]*10)%10==0){SignificantDigits=0}
                        else  if((a[ANofAtom[q]]["mass"]*100)%10==0){if(SignificantDigits>1){SignificantDigits =1}}
                        else  if((a[ANofAtom[q]]["mass"]*1000)%10==0){if(SignificantDigits>2){SignificantDigits=2}}
                        else  if((a[ANofAtom[q]]["mass"]*10000)%10==0){if(SignificantDigits>3){SignificantDigits =3}}
                        else  if((a[ANofAtom[q]]["mass"]*100000)%10==0){if(SignificantDigits>4){SignificantDigits =4}}
                        else  if((a[ANofAtom[q]]["mass"]*1000000)%10==0){if(SignificantDigits>5){SignificantDigits =5}};
}                       
                                
                for (var c=0; c<=NumberElements; c++) {
                         if(a[ANofAtom[c]]["symbol"]=="H" ||
a[ANofAtom[c]]["symbol"]=="B" || a[ANofAtom[c]]["symbol"]=="C" || a[ANofAtom[c]]["symbol"]=="N" || a[ANofAtom[c]]["symbol"]=="F" || a[ANofAtom[c]]["symbol"]=="P" || a[ANofAtom[c]]["symbol"]=="S" || a[ANofAtom[c]]["symbol"]=="K" || a[ANofAtom[c]]["symbol"]




=="V" || a[ANofAtom[c]]["symbol"]=="Y" || a[ANofAtom[c]]["symbol"]=="I" || a[ANofAtom[c]]["symbol"]=="U" || a[ANofAtom[c]]["symbol"]=="O"){
                                a[ANofAtom[c]]["symbol"]=a[ANofAtom[c]]["symbol"]+" "};
                        
MqMM = a[ANofAtom[c]]["mass"] * NumberAtoms[c];
if(SignificantDigits==0){
                        adjMqMA = Math.round(MqMM);     
                }
                else if(SignificantDigits==1){
                        adjMqM = Math.round(MqMM*10)/10;
                        if (adjMqM*10%10==0){
                                adjMqMA =  adjMqM+".0";
                        }
                        else adjMqMA =  adjMqM;
                }
                else if(SignificantDigits==2){
                        adjMqM = Math.round(MqMM*100)/100;
                        if (adjMqM*10%10==0){
                                adjMqMA =  adjMqM+".00";
                        }
                        else if (adjMqM*100%10==0){
                                adjMqMA =  adjMqM+"0";
                        }
                        else adjMqMA =   adjMqM;
                }
                else if(SignificantDigits==3){
                        adjMqM = Math.round(MqMM*1000)/1000;
                        if (adjMqM*10%10==0){
                                adjMqMA = adjMqM+".000";
                        }
                        else if (adjMqM*100%10==0){
                                adjMqMA = adjMqM+"00";
                        }
                        else if (adjMqM*1000%10==0){
                                adjMqMA = adjMqM+"0";
                        }
                        else adjMqMA = adjMqM;
                }
                else if(SignificantDigits==4){
                        adjMqM = Math.round(MqMM*10000)/10000;
                        if (adjMqM*10%10==0){
                                adjMqMA = adjMqM+".0000";
                        }
                        else if (adjMM*100%10==0){
                                adjMqMA = adjMqM+"000";
                        }
                        else if (adjMM*1000%10==0){
                                adjMqMA = adjMqM+"00";
                        }
                        else if (adjMqM*10000%10==0){
                                adjMqMA = adjMqM+"0";
                        }
                        else adjMqMA = adjMqM;
                }
                else if(SignificantDigits==5){
                        adjMqM = Math.round(MqMM*100000)/100000;
                        if (adjMqM*10%10==0){
                                adjMqMA = adjMqM+".00000";
                        }
                        else if (adjMqM*100%10==0){
                                adjMqMA = adjMqM+"0000";
                        }
                        else if (adjMqM*1000%10==0){
                                adjMqMA = adjMqM+"000";
                        }
                        else if (adjMqM*10000%10==0){
                                adjMqMA = adjMqM+"00";
                        }
                        else if (adjMM*100000%10==0){
                                adjMqMA = adjMqM+"0";
                        }
                        else adjMqMA =  adjMqM;
                }
                else if(SignificantDigits>5) {adjMqM = Math.round(MqMM*1000000)/1000000;
                        if (adjMqM*10%10==0){
                                adjMqMA = adjMqM+".000000";
                        }
                        else if (adjMqM*100%10==0){
                                adjMqMA = adjMqM+"00000";
                        }
                        else if (adjMqM*1000%10==0){
                                adjMqMA = adjMqM+"0000";
                        }
                        else if (adjMqM*10000%10==0){
                                adjMqMA = adjMqM+"000";
                        }
                        else if (adjMqM*100000%10==0){
                                adjMqMA = adjMqM+"00";
                        }
                        else if (adjMqM*1000000%10==0){
                                adjMqMA = adjMqM+"0";
                        }
                        else adjMqMA =  adjMqM;
                }
                        if(adjMqMA<10){adjAMA="   "}
                        else if(adjMqMA<100){adjAMA="  "}
                        else if(adjMqMA<1000){adjAMA=" "}
                        else adjAMA="";
Presorted[c]="Total Mass of "+a[ANofAtom[c]]["symbol"]+" = "+adjAMA+adjMqMA;
}               
                var adjMMA="";
                if(SignificantDigits==0){
                        adjMMA = Math.round(MMM);       
                }
                else if(SignificantDigits==1){
                        adjMM = Math.round(MMM*10)/10;
                        if (adjMM*10%10==0){
                                adjMMA =  adjMM+".0";
                        }
                        else adjMMA =  adjMM;
                }
                else if(SignificantDigits==2){
                        adjMM = Math.round(MMM*100)/100;
                        if (adjMM*10%10==0){
                                adjMMA =  adjMM+".00";
                        }
                        else if (adjMM*100%10==0){
                                adjMMA =  adjMM+"0";
                        }
                        else adjMMA =   adjMM;
                }
                else if(SignificantDigits==3){
                        adjMM = Math.round(MMM*1000)/1000;
                        if (adjMM*10%10==0){
                                adjMMA = adjMM+".000";
                        }
                        else if (adjMM*100%10==0){
                                adjMMA = adjMM+"00";
                        }
                        else if (adjMM*1000%10==0){
                                adjMMA = adjMM+"0";
                        }
                        else adjMMA = adjMM;
                }
                else if(SignificantDigits==4){
                        adjMM = Math.round(MMM*10000)/10000;
                        if (adjMM*10%10==0){
                                adjMMA = adjMM+".0000";
                        }
                        else if (adjMM*100%10==0){
                                adjMMA = adjMM+"000";
                        }
                        else if (adjMM*1000%10==0){
                                adjMMA = adjMM+"00";
                        }
                        else if (adjMM*10000%10==0){
                                adjMMA = adjMM+"0";
                        }
                        else adjMMA = adjMM;
                        adjGram = Math.round(10000000/MMM)/10000;
                }
                else if(SignificantDigits==5){
                        adjMM = Math.round(MMM*100000)/100000;
                        if (adjMM*10%10==0){
                                adjMMA = adjMM+".00000";
                        }
                        else if (adjMM*100%10==0){
                                adjMMA = adjMM+"0000";
                        }
                        else if (adjMM*1000%10==0){
                                adjMMA = adjMM+"000";
                        }
                        else if (adjMM*10000%10==0){
                                adjMMA = adjMM+"00";
                        }
                        else if (adjMM*100000%10==0){
                                adjMMA = adjMM+"0";
                        }
                        else adjMMA =  adjMM;
                }
                else if(SignificantDigits>5) {adjMM = Math.round(MMM*1000000)/1000000;
                        if (adjMM*10%10==0){
                                adjMMA = adjMM+".000000";
                        }
                        else if (adjMM*100%10==0){
                                adjMMA = adjMM+"00000";
                        }
                        else if (adjMM*1000%10==0){
                                adjMMA = adjMM+"0000";
                        }
                        else if (adjMM*10000%10==0){
                                adjMMA = adjMM+"000";
                        }
                        else if (adjMM*100000%10==0){
                                adjMMA = adjMM+"00";
                        }
                        else if (adjMM*1000000%10==0){
                                adjMMA = adjMM+"0";
                        }
                        else adjMMA =  adjMM;
                }
for(i=0;i<NumberElements;i++){for(j=0;j<NumberElements-i;j++){if (Presorted[j]>Presorted[j+1]){temp=Presorted[j];Presorted[j]=Presorted[j+1];Presorted[j+1]=temp;}}}
if(adjMMA<10){adjAMA="   "}
else if(adjMMA<100){adjAMA="  "}
else if(adjMMA<1000){adjAMA=" "}
else adjAMA="";
document.forms[0].varMolM.value="Molar Mass = "+adjAMA+adjMMA;document.forms[0].cell1.value = Presorted[0];document.forms[0].cell2.value = Presorted[1];document.forms[0].cell3.value = Presorted[2];document.forms[0].cell4.value =
Presorted[3];document.forms[0].cell5.value = Presorted[4];document.forms[0].cell6.value = Presorted[5];document.forms[0].cell7.value = Presorted[6];document.forms[0].cell8.value = Presorted[7];document.forms[0].cell9.value = Presorted[8];document.forms[0].cell10.value = Presorted[9];document.forms[0].cell11.value = Presorted[10];document.forms[0].cell12.value =  Presorted[11];};
<!-- -->
