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>
You can copy from this site, with conditions. See the license page for copyright and licensing details.