  var pc = null,
    where = 0,
    initial = [0, 0, 0, 0, 0, 0, 0, 0],
    test = null,
    random = null,
    hiding = [],
    ivalid = null,
    spinner = null;
  
  Array.prototype.toString = function(){
    var res = "";
    for (var i = 0; i < this.length - 1; i++) {
      res += this[i] + ", ";
    }
    res += this[this.length - 1];
    return res;
  };
  
  // ==> TO DO <==
  // NEED TO CREATE +/- BUTTONS FOR INCLUDED COLORS
  // ==> TO DO <==

  function set_checkboxes() {
    var val = document.getElementById("test");
    var v, i, b, s;
    eval("v = [" + val.value + "]");
    for (i=0; i<v.length; i++) {
      if (v[i]) {
        b = document.getElementById("option_"+i);
        s = document.getElementById("color_"+i);
        if (b) b.checked = true;
        if (s) s.style.display = "inline";
      }
    }
  }

  window.onload = function(){
    pc = new PieChart();
    pc.setValues(initial);
    pc.printTo("pie");
    spinner = document.getElementById("spinner");
    test = document.getElementById("test");
    ivalid = document.getElementById("valid");
    var form = document.getElementById("pie-form");
    if (form && test) {
      // form.onsubmit = function(){
      pc.onsubmit = function(){
        if (test.valid) {
          if (test.digits) {
            eval("initial = [" + test.value + "]");
            pc.setValues(initial);
            test.value = initial;
          } 
        }
        return false;
      };
    }
    var rotcc = document.getElementById("rot-cc");
    var rotacc = document.getElementById("rot-acc");
    var perc = document.getElementById("perc");
    if (rotcc && rotacc) {
      rotcc.onmousedown = function(){
        where = 1;
      };
      rotacc.onmousedown = function(){
        where = -1;
      };
      document.documentElement.onmouseup = function(){
        where = 0;
      };
      perc.onclick = function(){
        pc.title();
      };
    }
    // var defvalues = document.location.search.replace(/\?/g, "");
    // if (defvalues && test && form) {
    //   test.value = defvalues;
    if (test && form) {
      spin();
      pc.onsubmit();
      set_checkboxes();
      // form.onsubmit();
    } else {
      spin();
    }
    //alert(defvalues);

	// COPIED FROM slider.js
//	sliders = carpeGetElementsByClass(carpeSliderClassName) // Find the horizontal sliders.
//	for (i = 0; i < sliders.length; i++) {
//		sliders[i].onmousedown = slide // Attach event listener.
//	}
//	displays = carpeGetElementsByClass(carpeSliderDisplayClassName) // Find the displays.
//	for (i = 0; i < displays.length; i++) {
//		displays[i].onfocus = focusDisplay // Attach event listener.
//	}
	// END OF CODE FROM slider.js

  };
  
  function spin () {
    if (where) {
      pc.rotate(where);
    }
    if (test && test.newvalue != test.value) {
      if (/^\d*\.?\d+(\s*,\s*\d*\.?\d+)*$/.test(test.value)) {
        test.className = "";
        test.valid = true;
        test.digits = true;
        // ivalid.style.visibility = "hidden";
      } 
      test.newvalue = test.value;
    }
    if (hiding.length) {
      for (var i = 0; i < hiding.length; i++) {
        hiding[i].obj.className = "opacity" + hiding[i].opacity--;
      }
      while (hiding[0].opacity == 0) {
        hiding.shift();
      }
    }
    setTimeout(spin, 1);
  }
  
  
  function randomizer () {
    for (var i = 0; i < initial.length; i++) {
      initial[i] += Math.round(Math.random() * 2) - 1;
      if (initial[i] < 0) {
        initial[i] = Math.abs(initial[i]);
      }
    }
    pc.setValues(initial);
    test.value = initial;
    random = setTimeout(randomizer, 100);
  }
  
