function etoa(e) { result = ''; if (e.Emode == 0) { result = etoa(e.sides[0])+' '+e.sign+' '+etoa(e.sides[1]); } else if (e.iscomplex) { result = '('+etoa(e.value[0])+' '+e.value[1]+' '+etoa(e.value[2])+')'; } else { if (e.unit) { if (e.value == '1' || e.value == 1) { result = e.unit; } else { result = e.value+e.unit; } } else { result = e.value+e.unit; } } return result; } // works, output: //// ((a * x) + b) = 0 function etohtml(e) { result = ''; if (e.Emode == 0) { result = ''+etohtml(e.sides[0])+' '+e.sign+' '+etohtml(e.sides[1])+''; } else if (e.iscomplex) { result = ''+etohtml(e.value[0])+' '+e.value[1]+' '+etohtml(e.value[2])+''; } else { result = ''+etoa(e)+''; } return result; } // this one works - output: // a * x + b = 0 function etodom(e) { if (e.Emode == 0) { result = document.createElement('span'); try {result.className = 'equation';} catch (err) {result.class = 'equation';} result.appendChild(etodom(e.sides[0])); result.appendChild(document.createTextNode(' '+e.sign+' ')); result.appendChild(etodom(e.sides[1])); } else if (e.iscomplex) { result = document.createElement('span'); try {result.className = 'led';} catch (err) {result.class = 'led';} result.appendChild(etodom(e.value[0])); // Error here: // uncaught exception: [Exception... "Could not convert JavaScript // argument" nsresult: "0x80570009 (NS_ERROR_XPC_BAD_CONVERT_JS)" location: // "JS frame :: file:///H:/home/work/equations.html :: etodom :: line 124" data: no] result.appendChild(document.createTextNode(' '+e.value[1]+' ')); result.appendChild(etodom(e.value[2])); } else { result = document.createElement('span'); try {result.className = 'number';} catch (err) {result.class = 'number';} result.appendChild(document.createTextNode(etoa(e))); } return result; }