//  zufallWekzeuge 0.7
//
//  Ken Frederick
//	ken.frederick@gmx.de
//
//  http://www.thebarricades.de/kenfrederick/
// 
//  this script uses stuff borrowed from keegan's "rando-color.js"
//  as well as from some other things i had written in processing
//
//

// ------------------------------------------------------------------------
// variablen
// ------------------------------------------------------------------------
z_konturStaerke = false;
z_minKontur = 0.25;
z_maxKontur = 48;

z_farbe = false;
z_farbeFlaeche = true;
z_farbeKontur = false;
z_farbeFelder = true;
z_farbe_c = 0;
z_farbe_m = 0;
z_farbe_y = 0;
z_farbe_k = 0;

z_loeschen = false;
z_loeschenOft = 2;

z_deckkraft = false;
z_minDeckkraft = 25;
z_maxDeckkraft = 100;

Einstellungen();

// ------------------------------------------------------------------------
// funktionen
// ------------------------------------------------------------------------
function assignRandom(minr, maxr) {
	rand = minr + Math.random() * (maxr - minr);
	//rand = Math.round(minr + Math.random() * (maxr - minr));
	return rand;
}

function randomSwatch(farben) {
	var randswatch = farben.getSwatch(assignRandom(4, farben.length));
	//var randswatch = farben.getSwatch(Math.round(Math.random() * farben.length));
	if (randswatch != null) {
		if (randswatch.color != null) { //make sure swatch is a color or gradient
			var color = randswatch.color;
		}
	}
	return color;
}

// ------------------------------------------------------------------------
// Dialog
// ------------------------------------------------------------------------
function Einstellungen() {
	// ------------------------------------
	// initialize the window
	// ------------------------------------
	var Dialog = new FloatingDialog(FloatingDialog.OPTION_TABBED);
	Dialog.setTitle("Random Tools");
	Dialog.setSize(200, 300);
	Dialog.setVisible(true);

	// ------------------------------------
	// löschen
	// ------------------------------------
	var a_loeschen = new CheckBox(Dialog);
	a_loeschen.setPosition(2, 5);
	a_loeschen.setSize(20, 15);
	a_loeschen.setChecked(z_loeschen);
	a_loeschen.onClick = function(){ 
		z_loeschen = a_loeschen.isChecked(); // set option on click
		a_loeschenOft.setEnabled(true);
	}

	var a_loeschenText = new Static(Dialog);
	a_loeschenText.setText("Delete");
	a_loeschenText.setPosition(23, 6);
	a_loeschenText.setSize(a_loeschenText.bestSize);
	a_loeschenText.setFont(6);

	var a_loeschenOft = new Slider(Dialog);
	a_loeschenOft.setPosition(28, 28);	
	a_loeschenOft.setSize(145,10);
	a_loeschenOft.setValue(z_loeschenOft);
	a_loeschenOft.setRange(2,10);
	a_loeschenOft.style=Slider.STYLE_SHOW_FRACTION;
	a_loeschenOft.value = 2;
	a_loeschenOft.setEnabled(false);

	var a_loeschenText = new Static(Dialog);
	a_loeschenText.setText("more");
	a_loeschenText.setPosition(5, 25);
	a_loeschenText.setSize(a_loeschenText.bestSize);
	a_loeschenText.setFont(0);

	var a_loeschenText = new Static(Dialog);
	a_loeschenText.setText("less");
	a_loeschenText.setPosition(175, 25);
	a_loeschenText.setSize(a_loeschenText.bestSize);
	a_loeschenText.setFont(0);

	//divider
	var loeschenDiv = new Frame(Dialog);
	loeschenDiv.setPosition(0, 43);
	loeschenDiv.setSize(200, 1);

	// ------------------------------------
	// kontur 
	// ------------------------------------
	var a_konturStaerke = new CheckBox(Dialog);
	a_konturStaerke.setPosition(2, 49);
	a_konturStaerke.setSize(20, 15);
	a_konturStaerke.setChecked(z_konturStaerke);
	a_konturStaerke.onClick = function(){ 
		z_konturStaerke = a_konturStaerke.isChecked();

		if (z_konturStaerke == true) {
			a_maxKontur.setEnabled(true);
			a_minKontur.setEnabled(true);
		} else {
			a_maxKontur.setEnabled(false);
			a_minKontur.setEnabled(false);
		}
	}

	//stroke text
	var a_konturStaerkeText = new Static(Dialog);
	a_konturStaerkeText.setText("Stroke");
	a_konturStaerkeText.setPosition(23, 50);
	a_konturStaerkeText.setSize(a_konturStaerkeText.bestSize);
	a_konturStaerkeText.setFont(6);

	//minimum stroke
	var a_minKontur = new SpinEdit(Dialog, [SpinEdit.STYLE_POPUP_VERTICAL]);
	a_minKontur.setPosition(30, 71);
	a_minKontur.setSize(60,20);
	a_minKontur.setValue(z_minKontur);
	a_minKontur.setUnits(1);
	a_minKontur.setEnabled(false);

	var a_minKonturText = new Static(Dialog);
	a_minKonturText.setText("Min.");
	a_minKonturText.setPosition(5, 75);
	a_minKonturText.setSize(a_minKonturText.bestSize);

	//maximum stroke
	var a_maxKontur = new SpinEdit(Dialog);
	a_maxKontur.setPosition(130, 71);
	a_maxKontur.setSize(60, 20);
	a_maxKontur.setValue(z_maxKontur);
	a_maxKontur.setUnits(1);
	a_maxKontur.setEnabled(false);

	var a_maxKonturText = new Static(Dialog);
	a_maxKonturText.setText("Max.");
	a_maxKonturText.setPosition(103, 75);
	a_maxKonturText.setSize(a_maxKonturText.bestSize);

	//divider
	var konturDiv = new Frame(Dialog);
	konturDiv.setPosition(0, 97);
	konturDiv.setSize(200, 1);

	// ------------------------------------
	// farbe
	// ------------------------------------
	var a_farbe = new CheckBox(Dialog);
	a_farbe.setPosition(2, 103);
	a_farbe.setSize(20, 15);
	a_farbe.setChecked(z_farbe);
	a_farbe.onClick = function(){ 
		z_farbe = a_farbe.isChecked();

		if (z_farbe == true) {
			a_farbeFlaeche.setEnabled(true);
			a_farbeKontur.setEnabled(true);
			a_farbeFelder.setEnabled(true);

			if (z_farbeFelder == false && z_farbe == true) {
				a_farbe_c.setEnabled(true);
				a_farbe_m.setEnabled(true);
				a_farbe_y.setEnabled(true);
				a_farbe_k.setEnabled(true);
			}
		} else {
			a_farbeFlaeche.setEnabled(false);
			a_farbeKontur.setEnabled(false);
			a_farbeFelder.setEnabled(false);

			//cmyk selectors
			a_farbe_c.setEnabled(false);
			a_farbe_m.setEnabled(false);
			a_farbe_y.setEnabled(false);
			a_farbe_k.setEnabled(false);
		}
	}

	var a_farbeText = new Static(Dialog);
	a_farbeText.setText("Colors");
	a_farbeText.setPosition(23, 104);
	a_farbeText.setSize(a_farbeText.bestSize);
	a_farbeText.setFont(6);

	//fill
	var a_farbeFlaeche = new CheckBox(Dialog);
	a_farbeFlaeche.setPosition(5, 125);
	a_farbeFlaeche.setSize(20, 15);
	a_farbeFlaeche.setChecked(z_farbeFlaeche);
	a_farbeFlaeche.setEnabled(false);
	a_farbeFlaeche.onClick = function(){ 
		z_farbeFlaeche = a_farbeFlaeche.isChecked(); // set option on click
	}

	var a_farbeFlaecheText = new Static(Dialog);
	a_farbeFlaecheText.setText("Fills");
	a_farbeFlaecheText.setPosition(24, 126);	
	a_farbeFlaecheText.setSize(a_farbeFlaecheText.bestSize);

	//stroke
	var a_farbeKontur = new CheckBox(Dialog);
	a_farbeKontur.setPosition(50, 125);
	a_farbeKontur.setSize(20, 15);
	a_farbeKontur.setChecked(z_farbeKontur);
	a_farbeKontur.setEnabled(false);
	a_farbeKontur.onClick = function() { 
		z_farbeKontur = a_farbeKontur.isChecked(); // set option on click
	}

	var a_farbeKonturText = new Static(Dialog);
	a_farbeKonturText.setText("Strokes");
	a_farbeKonturText.setPosition(70, 126);	
	a_farbeKonturText.setSize(a_farbeKonturText.bestSize);

	//document swatches
	var a_farbeFelder = new CheckBox(Dialog);
	a_farbeFelder.setPosition(110, 125);
	a_farbeFelder.setSize(20, 15);
	a_farbeFelder.setChecked(z_farbeFelder);
	a_farbeFelder.setEnabled(false);
	a_farbeFelder.onClick = function(){ 
		z_farbeFelder = a_farbeFelder.isChecked(); // set option on click

		if (z_farbeFelder == false && z_farbe == true) {
			a_farbe_c.setEnabled(true);
			a_farbe_m.setEnabled(true);
			a_farbe_y.setEnabled(true);
			a_farbe_k.setEnabled(true);
		} else if (z_farbeFelder == true) {
			a_farbe_c.setEnabled(false);
			a_farbe_m.setEnabled(false);
			a_farbe_y.setEnabled(false);
			a_farbe_k.setEnabled(false);
		}
	}

	var a_farbeFelderText = new Static(Dialog);
	a_farbeFelderText.setText("Use Document Swatches");
	a_farbeFelderText.setPosition(130, 126);	
	a_farbeFelderText.setSize(70,20);

	//if (activeDocument.getColorSpace == Color.MODEL_CMYK) {
		var a_farbe_c = new Slider(Dialog);
		a_farbe_c.setPosition(15, 149);	
		a_farbe_c.setSize(180,12);
		a_farbe_c.setValue(z_farbe_c);
		a_farbe_c.style=Slider.STYLE_SHOW_FRACTION;
		a_farbe_c.setRange(0,100);
		a_farbe_c.value = 0;
		a_farbe_c.setEnabled(false);

		var a_farbe_c_Text = new Static(Dialog);
		a_farbe_c_Text.setText("C");
		a_farbe_c_Text.setPosition(5, 147);
		a_farbe_c_Text.setSize(a_farbe_c_Text.bestSize);

/*
		var a_farbe_c_Value = new TextEdit(Dialog);
		a_farbe_c_Value.setText(a_farbe_c.value);
		a_farbe_c_Value.setPosition(156, 146);
		a_farbe_c_Value.setSize(35,17);
*/

		//color M
		var a_farbe_m = new Slider(Dialog);
		a_farbe_m.setPosition(15, 164);	
		a_farbe_m.setSize(180,12);
		a_farbe_m.setValue(z_farbe_m);
		a_farbe_m.style=Slider.STYLE_SHOW_FRACTION;
		a_farbe_m.setRange(0,100);
		a_farbe_m.value = 0;
		a_farbe_m.setEnabled(false);

		var a_farbe_m_Text = new Static(Dialog);
		a_farbe_m_Text.setText("M");
		a_farbe_m_Text.setPosition(5, 162);
		a_farbe_m_Text.setSize(a_farbe_m_Text.bestSize);

/*
		var a_farbe_m_Value = new TextEdit(Dialog);
		a_farbe_m_Value.setText(a_farbe_m.value);
		a_farbe_m_Value.setPosition(156, 166);
		a_farbe_m_Value.setSize(35,17);
*/

		//color Y
		var a_farbe_y = new Slider(Dialog);
		a_farbe_y.setPosition(15, 179);	
		a_farbe_y.setSize(180,12);
		a_farbe_y.setValue(z_farbe_y);
		a_farbe_y.style=Slider.STYLE_SHOW_FRACTION;
		a_farbe_y.setRange(0,100);
		a_farbe_y.value = 0;
		a_farbe_y.setEnabled(false);

		var a_farbe_y_Text = new Static(Dialog);
		a_farbe_y_Text.setText("Y");
		a_farbe_y_Text.setPosition(5, 177);
		a_farbe_y_Text.setSize(a_farbe_y_Text.bestSize);

/*
		var a_farbe_y_Value = new TextEdit(Dialog);
		a_farbe_y_Value.setText(a_farbe_y.value);
		a_farbe_y_Value.setPosition(156, 186);
		a_farbe_y_Value.setSize(35,17);

*/
		//color K
		var a_farbe_k = new Slider(Dialog);
		a_farbe_k.setPosition(15, 194);	
		a_farbe_k.setSize(180,12);
		a_farbe_k.setValue(z_farbe_k);
		a_farbe_k.style=Slider.STYLE_SHOW_FRACTION;
		a_farbe_k.setRange(0,100);
		a_farbe_k.value = 0;
		a_farbe_k.setEnabled(false);

		var a_farbe_k_Text = new Static(Dialog);
		a_farbe_k_Text.setText("K");
		a_farbe_k_Text.setPosition(5, 192);
		a_farbe_k_Text.setSize(a_farbe_k_Text.bestSize);

/*
		var a_farbe_k_Value = new TextEdit(Dialog);
		a_farbe_k_Value.setText(a_farbe_k.value);
		a_farbe_k_Value.setPosition(156, 206);
		a_farbe_k_Value.setSize(35,17);
*/

	//} else if (activeDocument.getColorSpace == Color.MODEL_RGB) {
		//color R
		//color G
		//color B
	//}

	//divider
	var farbeDiv = new Frame(Dialog);
	farbeDiv.setPosition(0, 209);
	farbeDiv.setSize(200, 1);
	farbeDiv.style=Frame.STYLE_SUNKEN;

	// ------------------------------------
	// deckkraft
	// ------------------------------------
	var a_deckkraft = new CheckBox(Dialog);
	a_deckkraft.setPosition(2, 214);
	a_deckkraft.setSize(20, 15);
	a_deckkraft.setChecked(z_deckkraft);
	a_deckkraft.onClick = function(){ 
		z_deckkraft = a_deckkraft.isChecked();

		if (z_deckkraft == true) {
			a_maxDeckkraft.setEnabled(true);
			a_minDeckkraft.setEnabled(true);
		} else {
			a_maxDeckkraft.setEnabled(false);
			a_minDeckkraft.setEnabled(false);
		}
	}

	//transparency text
	var a_deckkraftText = new Static(Dialog);
	a_deckkraftText.setText("Transparency");
	a_deckkraftText.setPosition(23, 215);
	a_deckkraftText.setSize(a_deckkraftText.bestSize);
	a_deckkraftText.setFont(6);

	//minimum transparency
	var a_minDeckkraft = new SpinEdit(Dialog, [SpinEdit.STYLE_POPUP_VERTICAL]);
	a_minDeckkraft.setPosition(30, 236);
	a_minDeckkraft.setSize(60,20);
	a_minDeckkraft.setValue(z_minDeckkraft);
	a_minDeckkraft.setUnits(0);
	a_minDeckkraft.setEnabled(false);

	var a_minDeckkraftText = new Static(Dialog);
	a_minDeckkraftText.setText("Min.");
	a_minDeckkraftText.setPosition(5, 240);
	a_minDeckkraftText.setSize(a_minDeckkraftText.bestSize);

	//maximum transparency
	var a_maxDeckkraft = new SpinEdit(Dialog);
	a_maxDeckkraft.setPosition(130, 236);
	a_maxDeckkraft.setSize(60, 20);
	a_maxDeckkraft.setValue(z_maxDeckkraft);
	a_maxDeckkraft.setUnits(0);
	a_maxDeckkraft.setEnabled(false);

	var a_maxDeckkraftText = new Static(Dialog);
	a_maxDeckkraftText.setText("Max.");
	a_maxDeckkraftText.setPosition(103, 240);
	a_maxDeckkraftText.setSize(a_maxDeckkraftText.bestSize);

	//divider
	var deckkraftDiv = new Frame(Dialog);
	deckkraftDiv.setPosition(0, 262);
	deckkraftDiv.setSize(200, 1);

	// ------------------------------------
	// apply that shit!
	// ------------------------------------
	var submit = new Button(Dialog);
	submit.setText("Apply");
	submit.setPosition(5, 271);
	submit.setSize(submit.bestSize);
	submit.onClick = function() {
		z_konturStaerke = a_konturStaerke.isChecked();
		z_minKontur = parseFloat(a_minKontur.getText());
		z_maxKontur = parseFloat(a_maxKontur.getText());

		z_farbe = a_farbe.isChecked();
		z_farbeFlaeche = a_farbeFlaeche.isChecked();
		z_farbeKontur = a_farbeKontur.isChecked();
		z_farbeFelder = a_farbeFelder.isChecked();
		z_farbe_c = parseFloat(a_farbe_c.value);
		z_farbe_m = parseFloat(a_farbe_m.value);
		z_farbe_y = parseFloat(a_farbe_y.value);
		z_farbe_k = parseFloat(a_farbe_k.value);

		z_loeschen = a_loeschen.isChecked();
		z_loeschenOft = a_loeschenOft.value;
		
		z_deckkraft = a_deckkraft.isChecked();
		z_minDeckkraft = parseFloat(a_minDeckkraft.getText());
		z_maxDeckkraft = parseFloat(a_maxDeckkraft.getText());

		magic();
	}

	//end?
	Dialog.setVisible(true);
	Dialog.onClose = function() {
		this.destroy();
		//openDialog = false;
	}
}

// ------------------------------------------------------------------------
// magic!
// ------------------------------------------------------------------------

function magic() {

	var sel = activeDocument.getMatchingItems(Art, { selected: true }); 
	//var sel = activeDocument.selectedItems;
	var swatches = activeDocument.swatches;

	for (var i=0; i<sel.length; i++) {
		auswahl = sel[i];

		// ------------------------------------
		// zufall farbe
		// ------------------------------------
		if (z_farbe == true) {
			if (z_farbeFelder == true) {
				var color = randomSwatch(swatches);
			} else {
				//if (activeDocument.getColorSpace == Color.MODEL_CMYK) {
					c = assignRandom(0, z_farbe_c)/100;
					m = assignRandom(0, z_farbe_m)/100;
					y = assignRandom(0, z_farbe_y)/100;
					k = assignRandom(0, z_farbe_k)/100;
					var color = new CMYKColor(c, m, y, k);
				//} else if (activeDocument.getColorSpace == Color.MODEL_RGB) {
					//color R
					//color G
					//color B
				//}
			}

			if (z_farbeFlaeche == true) {
				if (randomSwatch(swatches) != null) auswahl.style.fill.color = color
			}
			if (z_farbeKontur == true) {
				if (randomSwatch(swatches) != null) auswahl.style.stroke.color = color;
			}
		}
		// ------------------------------------
		// zufall kontur stärke
		// ------------------------------------
		if (z_konturStaerke == true) {
			//print("z_min: " + z_minKontur);
			//print("z_max: " + z_maxKontur);
			if (auswahl.style.stroke.width != null) auswahl.style.stroke.width = assignRandom(z_minKontur,z_maxKontur);
		}

		// ------------------------------------
		// zufall löschen
		// ------------------------------------
		if (z_loeschen == true) {
			rand = parseInt(Math.random()*z_loeschenOft);
			//print(rand + " vs. " + z_loeschenOft);
			if (rand == 0) {
				auswahl.remove();
			}
		}

		// ------------------------------------
		// zufall deckkraft
		// ------------------------------------
		if (z_deckkraft == true) auswahl.opacity = assignRandom(z_minDeckkraft,z_maxDeckkraft)/100;

	}

}