/*
This code was created by the New Hampshire Housing and Finance Authority. 
Use of any part of this code is prohibited without written permission.
http://www.nhhfa.org
Created: 12/2006
By: Sean Vickers
*/
function bar_chart(dataSets,setNames) {
   this.data	  = new Array();
   this.label     = new Array();
   this.color	  = new Array("#6f80ce",
   							  "#8e3e81",
							  "#ffffcc",
							  "#91c8bb",
							  "purple",
							  "gray",
							  "blue",
							  "lightblue",
							  "tan",
							  "lime");
		  
   if (typeof(dataSets) == "number") var ds = dataSets;
   else var ds = 1;
   
   if (setNames) {
      this.setName = new Array();
	  for(var i=0; i<ds; i++) {
	     if(setNames.indexOf("|")>=0) {
		    this.setName.push(setNames.substring(0,setNames.indexOf("|")));
			setNames = setNames.substring(setNames.indexOf("|")+1);
		 }
		 else this.setName.push(setNames);
	  }
   }
   
   for(var i=0; i<ds; i++) {
      this.data[i]  = new Array();
	  this.label[i] = new Array();
   }							  
							  					  
   this.add = function(name, value, set) {
      this.label[set].push(name);
      this.data[set].push(parseInt(value,10));
   }

    this.build = function(myDiv, chartTitle, chartWidth, yLines, barWidth, vals, yLabelWidth) {
       var jg = new jsGraphics(myDiv);

	  /* Chart Width  */
      if (typeof(chartWidth) == "number") var w = chartWidth;
      else var w = 400;	 
	  
	  /* Number of Y Axis Lines  */
      if (typeof(yLines) == "number") var yl = yLines;
      else var yl = 5;			  	   
	   
	  /* Width of Columns  */
      if (typeof(barWidth) == "number") var bw = barWidth;
      else var bw = 50;			
	  
	  /* Width of Columns  */
      if (typeof(yLabelWidth) == "number") var yw = yLabelWidth;
      else var yw = 75;			     
	   
	  /* Max Value on X Axis */	
	  var newMax = 0; 
	  for(var j=0; j<ds; j++) {
	     var myMax = 0;
	     for(var i=0; i<this.data[j].length; i++) {
	  	    myMax = myMax + this.data[j][i];
	     }
		 if(myMax>newMax) newMax = myMax;
	  }
	  
	  myMax = newMax + Math.round(1/yl*newMax/2);
	  var maxLen = myMax.toString().length;
	  if (maxLen > 1) var newMax = Math.round((myMax/Math.pow(10,(maxLen-2)))+1)*Math.pow(10,(maxLen-2));
	  else var newMax = 10;	 	   
	
      var sx 	= 0;
      var sx0	= sx
      var fnt   = 10;       

       /* Length of Y Axis */
   	  var rtmax = (bw+Math.round(bw/2))*ds;
	  
	  /* Draw Graph Background */
	  jg.setColor("#c0c0c0");
	  jg.fillRect(sx,0,w-sx,rtmax);	
	  
       // Draw markers
       jg.setColor("black");
       jg.drawLine(sx,0,sx+w,0);
	   jg.drawLine(sx,0,sx,rtmax);
       jg.drawLine(sx,rtmax,sx+w,rtmax);

	   jg.setFont("Verdana", fnt,  Font.BOLD);   
       for(var i=0; i<=yl; i++) {
	      jg.drawLine(sx+Math.round(w/yl*i),0,sx+Math.round(w/yl*i),rtmax);    	   
          if (vals == "$") {
             var xLabel = "$" + addCommas(Math.round(newMax/yl*i).toString());
          } else {
             var xLabel = addCommas(Math.round(newMax/yl*i).toString());     
          }       
		  jg.drawStringRect(xLabel,sx+Math.round(w/yl*i)-Math.round(w/yl/2),rtmax,Math.round(w/yl), "center");		
       }
	   
	   /* Create Bars */
       for(var j=0; j<ds; j++) {
	      for(var i=0; i<this.data[j].length; i++) {
		     var sy = Math.round(bw/4)+Math.round(j*1.5*bw);
			 var rw = Math.round(this.data[j][i]*w/newMax);
			 var rh = bw;

	         jg.setColor(this.color[i]);
			 if(!this.data[j][i]) rw = 0;
             jg.fillRect(sx,sy,rw,rh);	
			 jg.setColor("black");
			 jg.drawRect(sx,sy,rw,rh);
			 if(!this.data[j][i]) sx = sx;
			 else sx = sx+Math.round(this.data[j][i]*w/newMax);
		  }
		  sx = sx0;
		  jg.setFont("Verdana", fnt+2,  Font.BOLD);
		  jg.setColor("black");
		  jg.drawStringRect(this.setName[j],sx-yw,sy,yw, "center");
       }	   
	   
	   /* Create Ledgen */
	   if(ds>1 && this.label[0][0] != "") {
          var ledgen = "<div id='ledgen' style='position:relative;padding:2px;border:solid 1px black;" +
		 			  "width:85%;background-color:white;color:black;text-align:center;'>" +
					  "<table cellspacing='0' cellpadding='0'><tr><td><font size='1'>" +
					  "&nbsp;&nbsp;</font></td><td>";
		  for(var i=0; i<this.data[0].length; i++) {
		    ledgen = ledgen + "<div id='color"+i+"' style='position:relative;width:10px;height:5px;" +
							  "line-height:5px;padding:5px;background-color:" +
							  this.color[i] +
							  ";border:solid 1px black;float:left;'>&nbsp;</div>" +
							  "<div id='text"+i+"' style='position:relative;width:125px;" +
							  "padding:5px;float:left;font-size:10px;font-weight:bold;text-align:left;'>" +
							  this.label[0][i] +
							  "</div>";
		  }		  
		  ledgen = ledgen + "</td></tr></table></div>";
          jg.drawStringRect(ledgen, -50, Math.round(bw/4)+Math.round(ds*1.5*bw)+35, w+100, "center"); 
	   }	 
	   /* Label X Axis */
       jg.setFont("Verdana", fnt+4,  Font.BOLD);
       jg.drawStringRect(chartTitle, -50, Math.round(bw/4)+Math.round(ds*1.5*bw)+fnt+4, w+100, "center");
       jg.paint();
              
    }
}

