Source Code for Compare-O-Matic
<html> <head> </head> <body> <!-- NOTE: this code copyright (c) 2008 Matthew Miller. Unlike the rest of this site, it is NOT licensed under the Creative Commons SA-BY License. I plan to put it under a less-restrictive license eventually, but for now, please don't copy. --> <img id="outputchart" alt="This is a Javascript application."> <script> function slider (sliderlabel,initial) { this.setvalue = slidersetvalue; this.getpos = slidergetpos; if (!window.sliderlist) window.sliderlist = []; this.idx = window.sliderlist.length; window.sliderlist[sliderlabel] = this; document.write( '<div style="width:70px; margin-bottom:10px; white-space: normal; text-align:center; font-family: sans-serif; font-size:9px">' + '<div style="width:68px;height:21px;border:2px inset #808080; background: #f3f2eb" id="sliderbar' + sliderlabel + '" ondblclick="return sliderreset(\'' + sliderlabel+ '\')">' + '<div style="width:14px;height:17px;border:2px outset; background: #404040;position:relative;left:0px;top:0px;z-index:1;cursor:pointer;" id="slider' + sliderlabel + '" onmousedown="return slidermousedown(\'' + sliderlabel + '\')">' + '</div></div>' + sliderlabel + '</div>' ); this.elementbase = get_element('sliderbar' + sliderlabel); this.elementslider = get_element('slider' + sliderlabel); if (initial == null) { this.setvalue(25); this.initial=25 } else { this.setvalue(50*initial); this.initial=50*initial } if (document.onmousemove != slidermousemove) { window.savedmousemove = document.onmousemove; document.onmousemove = slidermousemove; } if (document.onmouseup != slidermouseup) { window.savedmouseup = document.onmouseup; document.onmouseup = slidermouseup; } } function slidersetvalue (slidervalue) { var elementimg = get_element("outputchart"); if (!elementimg) return false; if (slidervalue == null) slidervalue = this.slidervalue == null ? 0 : this.slidervalue; if (isNaN(slidervalue)) return false; if (slidervalue < 0) slidervalue = 0; if (slidervalue > 50) slidervalue = 50; this.slidervalue = slidervalue; this.elementslider.style.left = slidervalue + 'px'; var highscore=0.01; var labelstring=""; for (cidx in window.cameralist) { var score=0; for (s in window.sliderlist) { // make max value special if (window.sliderlist[s].slidervalue==50 && window.cameralist[cidx][s]==0) { score=0; break; } // logarithmic //score = score + (window.cameralist[cidx][s] * window.sliderlist[s].slidervalue * window.sliderlist[s].slidervalue ); // plain score = score + (window.cameralist[cidx][s] * window.sliderlist[s].slidervalue); } if (score > highscore) { highscore = score; window.bestmatch = window.cameralist[cidx]["Name"]; } window.cameralist[cidx]["Score"]=score; labelstring = labelstring + window.cameralist[cidx]["Name"] + ",404040,0," + cidx + ",12,0|t"; } labelstring = labelstring.slice(0,-2); var datastring=""; var zerostring=""; for (cidx in window.cameralist) { datastring = datastring + (window.cameralist[cidx]["Score"] * 100) / highscore + ","; zerostring = zerostring + "0," } datastring = datastring.slice(0,-1); zerostring = zerostring.slice(0,-1); if (window.updateimgflag) { elementimg.alt="Best Match: " + window.bestmatch elementimg.title="Best Match: " + window.bestmatch elementimg.src="http://chart.apis.google.com/chart?chtt=P-TTL+Flash+Compare-O-Matic+Weighted+Composite+Score++++++++++++++++++++++++++++++%3Chttp%3A%2F%2Fpttl.mattdm.org%2F%3E&chs=640x" + 24*(window.cameralist.length+1) + "&chbh=20&cht=bhs&chg=10,0,1,2&chds=0,100&chd=t:" + zerostring + "|" + datastring + "&chm=t&chm=t" + labelstring; } } // get absolute position of the element in the document function slidergetpos (b_base) { var position = 0; var o_elem = o_elem2 = b_base ? this.elementbase : this.elementslider; while (o_elem) { position += o_elem["offsetLeft"]; o_elem = o_elem.offsetParent; } o_elem = o_elem2; var offset; while (o_elem.tagName != "BODY") { offset = o_elem["scrollLeft"]; if (offset) position -= o_elem["scrollLeft"]; o_elem = o_elem.parentNode; } return position; } function sliderreset (sliderlabel) { window.sliderlist[sliderlabel].setvalue(window.sliderlist[sliderlabel].initial); return true; } function slidermousedown (sliderlabel) { window.activeslider = sliderlabel; return false; } function slidermouseup (elementevent) { if (window.activeslider != null) { var o_slider = window.sliderlist[window.activeslider]; o_slider.setvalue(parseInt(o_slider.elementslider.style.left)); window.activeslider = null; } if (window.savedmouseup) return window.savedmouseup(elementevent); } function slidermousemove (elementevent) { if (!elementevent && window.event) elementevent = window.event; if (elementevent) { window.mousex = elementevent.clientX + scrollleft(); } // check if in drag mode if (window.activeslider != null) { var o_slider = window.sliderlist[window.activeslider]; var sliderleft = window.mousex - 14 / 2 - o_slider.getpos(1) - 3; if (sliderleft < 0) sliderleft = 0; if (sliderleft > 50) sliderleft = 50; o_slider.elementslider.style.left = sliderleft + 'px'; return false; } if (window.savedmousemove) return window.savedmousemove(elementevent); } function scrollleft() { return filterresults ( window.pageXOffset ? window.pageXOffset : 0, document.documentElement ? document.documentElement.scrollleft : 0, document.body ? document.body.scrollleft : 0 ); } function filterresults(nwin, ndocel, nbody) { var nresult = nwin ? nwin : 0; if (ndocel && (!nresult || (nresult > ndocel))) nresult = ndocel; return nbody && (!nresult || (nresult > nbody)) ? nbody : nresult; } get_element = document.all ? function (s_id) { return document.all[s_id] } : function (s_id) { return document.getElementById(s_id) }; </script> <script language="JavaScript"> window.cameralist = []; window.cameralist[0]=[]; window.cameralist[0]["Name"] = "K10D/K2000 Built-In"; window.cameralist[0]["Focused Power"]=4; window.cameralist[0]["Normal Power"] =6; window.cameralist[0]["Wide-Angle Power"] =10; window.cameralist[0]["On-Camera Shooting"] = 7; window.cameralist[0]["Wireless Master"] = 16; window.cameralist[0]["Wireless Slave"] = 0; window.cameralist[0]["Advanced Features"] = 11; window.cameralist[0]["Manual Control"] = 0; window.cameralist[0]["Price (USA)"] = 200; window.cameralist[1]=[]; window.cameralist[1]["Name"] = "K20D/K200D Built-In"; window.cameralist[1]["Focused Power"]=5; window.cameralist[1]["Normal Power"] =8; window.cameralist[1]["Wide-Angle Power"] =14; window.cameralist[1]["On-Camera Shooting"] = 7; window.cameralist[1]["Wireless Master"] = 16; window.cameralist[1]["Wireless Slave"] = 0; window.cameralist[1]["Advanced Features"] = 11; window.cameralist[1]["Manual Control"] = 0; window.cameralist[1]["Price (USA)"] = 200; window.cameralist[2]=[]; window.cameralist[2]["Name"] = "Pentax AF200FG"; window.cameralist[2]["Focused Power"]=12; window.cameralist[2]["Normal Power"] =20; window.cameralist[2]["Wide-Angle Power"] =33; window.cameralist[2]["On-Camera Shooting"] = 4; window.cameralist[2]["Wireless Master"] = 0; window.cameralist[2]["Wireless Slave"] = 0; window.cameralist[2]["Advanced Features"] = 1; window.cameralist[2]["Manual Control"] = 5; window.cameralist[2]["Price (USA)"] = 143; window.cameralist[3]=[]; window.cameralist[3]["Name"] = "Pentax AF360FGZ"; window.cameralist[3]["Focused Power"]=39; window.cameralist[3]["Normal Power"] =44; window.cameralist[3]["Wide-Angle Power"] =40; window.cameralist[3]["On-Camera Shooting"] = 55; window.cameralist[3]["Wireless Master"] = 63; window.cameralist[3]["Wireless Slave"] = 88; window.cameralist[3]["Advanced Features"] = 45; window.cameralist[3]["Manual Control"] = 60; window.cameralist[3]["Price (USA)"] = 113; window.cameralist[4]=[]; window.cameralist[4]["Name"] = "Pentax AF540FGZ"; window.cameralist[4]["Focused Power"]=87; window.cameralist[4]["Normal Power"] =100; window.cameralist[4]["Wide-Angle Power"] =100; window.cameralist[4]["On-Camera Shooting"] = 71; window.cameralist[4]["Wireless Master"] = 93; window.cameralist[4]["Wireless Slave"] = 93; window.cameralist[4]["Advanced Features"] = 58; window.cameralist[4]["Manual Control"] = 75; window.cameralist[4]["Price (USA)"] = 40; window.cameralist[5]=[]; window.cameralist[5]["Name"] = "Metz 36 AF-4"; window.cameralist[5]["Focused Power"]=39; window.cameralist[5]["Normal Power"] =44; window.cameralist[5]["Wide-Angle Power"] =33; window.cameralist[5]["On-Camera Shooting"] = 44; window.cameralist[5]["Wireless Master"] = 0; window.cameralist[5]["Wireless Slave"] = 0; window.cameralist[5]["Advanced Features"] = 21; window.cameralist[5]["Manual Control"] = 0; window.cameralist[5]["Price (USA)"] = 138; window.cameralist[6]=[]; window.cameralist[6]["Name"] = "Metz 48 AF-1"; window.cameralist[6]["Focused Power"]=68; window.cameralist[6]["Normal Power"]= 60; window.cameralist[6]["Wide-Angle Power"] =55; window.cameralist[6]["On-Camera Shooting"] = 74; window.cameralist[6]["Wireless Master"] = 0; window.cameralist[6]["Wireless Slave"] = 92; window.cameralist[6]["Advanced Features"] = 53; window.cameralist[6]["Manual Control"] = 85; window.cameralist[6]["Price (USA)"] = 75; window.cameralist[7]=[]; window.cameralist[7]["Name"] = "Metz 54 MZ-4i"; window.cameralist[7]["Focused Power"]=87; window.cameralist[7]["Normal Power"] =79; window.cameralist[7]["Wide-Angle Power"] =78; window.cameralist[7]["On-Camera Shooting"] = 78; window.cameralist[7]["Wireless Master"] = 0; window.cameralist[7]["Wireless Slave"] = 0; window.cameralist[7]["Advanced Features"] = 74; window.cameralist[7]["Manual Control"] = 95; window.cameralist[7]["Price (USA)"] = 25; window.cameralist[8]=[]; window.cameralist[8]["Name"] = "Metz 58 AF-1"; window.cameralist[8]["Focused Power"]=100; window.cameralist[8]["Normal Power"]=87; window.cameralist[8]["Wide-Angle Power"] =78; window.cameralist[8]["On-Camera Shooting"] = 100; window.cameralist[8]["Wireless Master"] = 100; window.cameralist[8]["Wireless Slave"] = 100; window.cameralist[8]["Advanced Features"] = 100; window.cameralist[8]["Manual Control"] = 100; window.cameralist[8]["Price (USA)"] = 1; window.cameralist[9]=[]; window.cameralist[9]["Name"] = "Sigma EF-530 DG ST"; window.cameralist[9]["Focused Power"]=84; window.cameralist[9]["Normal Power"] =79; window.cameralist[9]["Wide-Angle Power"] =69; window.cameralist[9]["On-Camera Shooting"] = 43; window.cameralist[9]["Wireless Master"] = 0; window.cameralist[9]["Wireless Slave"] = 0; window.cameralist[9]["Advanced Features"] = 12; window.cameralist[9]["Manual Control"] = 5; window.cameralist[9]["Price (USA)"] = 125; window.cameralist[10]=[]; window.cameralist[10]["Name"] = "Sigma EF-530 DG Super"; window.cameralist[10]["Focused Power"]=84; window.cameralist[10]["Normal Power"] =79; window.cameralist[10]["Wide-Angle Power"] =69; window.cameralist[10]["On-Camera Shooting"] = 63; window.cameralist[10]["Wireless Master"] = 72; window.cameralist[10]["Wireless Slave"] = 85; window.cameralist[10]["Advanced Features"] = 45; window.cameralist[10]["Manual Control"] = 75; window.cameralist[10]["Price (USA)"] = 93; window.cameralist[11]=[]; window.cameralist[11]["Name"] = "Promaster 5250DX"; window.cameralist[11]["Focused Power"]=17; window.cameralist[11]["Normal Power"] =28; window.cameralist[11]["Wide-Angle Power"] =47; window.cameralist[11]["On-Camera Shooting"] = 27; window.cameralist[11]["Wireless Master"] = 0; window.cameralist[11]["Wireless Slave"] = 0; window.cameralist[11]["Advanced Features"] = 13; window.cameralist[11]["Manual Control"] = 10; window.cameralist[11]["Price (USA)"] = 138; window.cameralist[12]=[]; window.cameralist[12]["Name"] = "Promaster 5550DX"; window.cameralist[12]["Focused Power"]=27; window.cameralist[12]["Normal Power"] =44; window.cameralist[12]["Wide-Angle Power"] =73; window.cameralist[12]["On-Camera Shooting"] = 44; window.cameralist[12]["Wireless Master"] = 0; window.cameralist[12]["Wireless Slave"] = 0; window.cameralist[12]["Advanced Features"] = 13; window.cameralist[12]["Manual Control"] = 10; window.cameralist[12]["Price (USA)"] = 128; window.cameralist[13]=[]; window.cameralist[13]["Name"] = "Promaster 5750DX"; window.cameralist[13]["Focused Power"]=48; window.cameralist[13]["Normal Power"] =64; window.cameralist[13]["Wide-Angle Power"] =47; window.cameralist[13]["On-Camera Shooting"] = 56; window.cameralist[13]["Wireless Master"] = 0; window.cameralist[13]["Wireless Slave"] = 0; window.cameralist[13]["Advanced Features"] = 33; window.cameralist[13]["Manual Control"] = 10; window.cameralist[13]["Price (USA)"] = 108; window.cameralist[14]=[]; window.cameralist[14]["Name"] = "Promaster 7200EDF"; window.cameralist[14]["Focused Power"]=27; window.cameralist[14]["Normal Power"] =44; window.cameralist[14]["Wide-Angle Power"] =73; window.cameralist[14]["On-Camera Shooting"] = 27; window.cameralist[14]["Wireless Master"] = 0; window.cameralist[14]["Wireless Slave"] = 0; window.cameralist[14]["Advanced Features"] = 10; window.cameralist[14]["Manual Control"] = 0; window.cameralist[14]["Price (USA)"] = 128; window.cameralist[15]=[]; window.cameralist[15]["Name"] = "Promaster 7400EDF"; window.cameralist[15]["Focused Power"]=41; window.cameralist[15]["Normal Power"] =44; window.cameralist[15]["Wide-Angle Power"] =33; window.cameralist[15]["On-Camera Shooting"] = 27; window.cameralist[15]["Wireless Master"] = 0; window.cameralist[15]["Wireless Slave"] = 0; window.cameralist[15]["Advanced Features"] = 10; window.cameralist[15]["Manual Control"] = 0; window.cameralist[15]["Price (USA)"] = 113; window.cameralist[16]=[]; window.cameralist[16]["Name"] = "Promaster 7500EDF"; window.cameralist[16]["Focused Power"]=52; window.cameralist[16]["Normal Power"] =57; window.cameralist[16]["Wide-Angle Power"] =55; window.cameralist[16]["On-Camera Shooting"] = 61; window.cameralist[16]["Wireless Master"] = 0; window.cameralist[16]["Wireless Slave"] = 0; window.cameralist[16]["Advanced Features"] = 42; window.cameralist[16]["Manual Control"] = 75; window.cameralist[16]["Price (USA)"] = 73; window.cameralist[17]=[]; window.cameralist[17]["Name"] = "Sakar 952AF/PEN (and similar)"; window.cameralist[17]["Focused Power"]=43; window.cameralist[17]["Normal Power"] =51; window.cameralist[17]["Wide-Angle Power"] =47; window.cameralist[17]["On-Camera Shooting"] = 56; window.cameralist[17]["Wireless Master"] = 0; window.cameralist[17]["Wireless Slave"] = 0; window.cameralist[17]["Advanced Features"] = 20; window.cameralist[17]["Manual Control"] = 20; window.cameralist[17]["Price (USA)"] = 140; </script> <table width="480px"> <tr style="vertical-align: top"> <td> <script language="JavaScript"> new slider('Focused Power', 0.5); new slider('Normal Power', 0.5); new slider('Wide-Angle Power', 0.5); </script> </td> <td> <script> new slider('On-Camera Shooting', 1.0); new slider('Wireless Master', 0.2); new slider('Wireless Slave', 0.5); </script> </td> <td> <script> new slider('Advanced Features', 0.2); new slider('Manual Control', 0.1); window.updateimgflag=true; new slider('Price (USA)', 0.5); </script> </td> </tr> </table> </body> </html>