/*
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 pieChart(dataSets,setNames) {
   this.maxValue  = 0;
   this.data	  = new Array();
   this.label     = new Array();
   this.xMore     = new Array();
   this.yMore     = 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);
	  }
   }							  
							  					  
   this.add = function(name, value, x, y) {
      this.label.push(name);  
	  if(!value) this.data.push(0);
      else this.data.push(parseInt(value,10));
   
      if (typeof(x) == "number") this.xMore.push(x);
      else this.xMore.push(0);  
   
      if (typeof(y) == "number") this.yMore.push(y);
      else this.yMore.push(0);  

      if(!value) this.maxValue += 0;
      else this.maxValue += parseInt(value,10);
   }

   this.fillArc = function(x, y, r, st_a, en_a, jg) {
	  if (en_a-st_a < 20 )
	  	var number_of_steps = 64*(en_a - st_a);
	  else
	    var number_of_steps = (en_a - st_a); 

      var angle_increment = 2 * Math.PI / number_of_steps;
      var xc = new Array();
      var yc = new Array();

      st_r = st_a*Math.PI / 180;
      en_r = en_a*Math.PI / 180;
	  
      for (angle = st_r; angle <= en_r; angle += angle_increment) {
         if(en_r < angle + angle_increment) angle = en_r;

	     var y2 = Math.sin(angle) * r ;
         var x2 = Math.cos(angle) * r ;

    	 xc.push(x+x2);
         yc.push(y-y2);

      }
      xc.push(x);
      yc.push(y);
      jg.fillPolygon(xc, yc);
   }

   this.build = function(myDiv, chartTitle, radius, moveLabel) {
      var jg = new jsGraphics(myDiv);

      if (typeof(radius) == "number") var r = radius;
      else var r  = 75;
         
      if (typeof(moveLabel) == "number") var ml = moveLabel;
      else var ml  = 0;		 
		 
      var sx 	= 100;
      var sy 	= 100;
      var hyp 	= 100;
      var fnt   = 12;
	  
      /* Create Shadow */
      jg.setColor("gray");
      jg.fillEllipse(sx+5-r, sy+5-r, 2*r, 2*r);

	  /* Fill Pie */
      var st_angle = 0;   
      for(i = 0; i<this.data.length; i++) {
	  	 var myData = this.data[i];
         var angle = Math.round(myData/this.maxValue*360);
         var pc    = Math.round(myData/this.maxValue*1000)/10;
       
	   	 if(!angle) angle = 0;
		 if(!pc)	pc = 0;
	   
	     jg.setColor(this.color[i]);
		 
         this.fillArc(sx, sy, r, st_angle, st_angle+angle, jg);

         var ang_rads = (st_angle+(angle/2))*2*Math.PI/360;
         var my  = Math.sin(ang_rads) * hyp;
         var mx  = Math.cos(ang_rads) * hyp;
		 
         st_angle = st_angle + angle;

         mxa = (mx < 0 ? 50 : 0);
         jg.setColor("black");
		 if(pc>0)
         	jg.drawString("<center><b>"+this.label[i]+" "+pc+"%"+" </b></center>",sx+mx-mxa-10+this.xMore[i],sy-my-10+this.yMore[i]);
      }

	  /* Create Ledgen */
	  if(ds>1) {
         var ledgen = "<div id='ledgen' style='position:relative;padding:2px;border:solid 1px black;" +
		 			  "width:95%;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<ds; 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:"+((400/ds)*.60)+"px;" +
							  "padding:3px;float:left;font-size:10px;font-weight:bold;text-align:left;'>" +
							  this.setName[i] +
							  "</div>";
		 }		  
		 ledgen = ledgen + "</td></tr></table></div>";
         jg.drawStringRect(ledgen, -60, 255, 363, "center"); 
	  }	 	  
	  
      jg.setColor("black");
      jg.drawEllipse(sx-r, sy-r, 2*r, 2*r);
      jg.setFont("Verdana", fnt+5,  Font.BOLD);
      jg.drawStringRect(chartTitle, 0, 220+ml, 200, "center");  
      jg.paint();
   }
}

