global proc JPL_randomSelec (float $perc)
{
	string $allObj [] = `ls -l -sl`;

	//important to declare this array as an empty array if you try this script in the scriptEditor:
	//as everything is declared as global, you would have always the same selection
	string $randomSelec [] = {};
	float $objectsToSelectNbFloat = (($perc/100) * `size $allObj`);
	int $objectsToSelectNb = $objectsToSelectNbFloat;

	if (size ($allObj))//very important to avoid infinite loop
	{
		while (size ($randomSelec) < $objectsToSelectNb)
		{
		    int $random = `rand (size ($allObj))`;
		    if (!stringArrayContains ($allObj [$random], $randomSelec))
		    	$randomSelec [size ($randomSelec)] = $allObj [$random];
		}

		select -r $randomSelec;
	}
}

//JPL_randomSelec (50);





global proc selectPercent(int $percent)
{
	intSliderGrp -e -v $percent daValue;
	KernFade();
	global string $KernSelectKeep[];
	// string $getSel = `textField -q -tx KernSelectKeepField`;
	string $sel[];
	if(size($KernSelectKeep)==0)
	{
		$sel = `ls -sl -l`;
	} else {
		$sel = $KernSelectKeep;
	}
    string $newSel[] = $sel;
	int $numberOfItemsSelected = size($sel);
	int $numberOfItemsToSelect = ($numberOfItemsSelected * $percent * 0.01);
    int $i = 0;
	string $items[];
	select -r $sel;
	for ($i=0;$i<($numberOfItemsSelected - $numberOfItemsToSelect);$i++)
	{
		$remaining = size($newSel);
		int $rand =  rand(0,$remaining);
		$items[$i] = $newSel[$rand];
		stringArrayRemoveAtIndex($rand, $newSel);
	}
	$newSel = stringArrayRemove($items, $newSel);
	
    select -r $newSel;
    print ("original => " + size($sel) + " objects selected, result => " + size($newSel) + " objects selected, value => " + $percent + "%");
}

global proc KernFade()
{
    $value = `intSliderGrp -q -v daValue`;
	text -e -l ("Percent : "+$value+"%") daMsg;
    float $red = (0.1625 + ($value*0.00375));
    float $green = (0.5 - ($value*0.00375));
    if ($red>0.5) $red=0.5;
    if ($red<0.2) $red=0.2;
    if ($green>0.5) $green=0.5;
    if ($green<0.2) $green=0.2;
    window -e -bgc $red $green 0.2 KernSelectUI;
	iconTextButton -style "textOnly" -e -bgc $green $red 0.2 KernSelectAction;
	iconTextButton -style "textOnly" -e -bgc $green $red 0.2 KernSelectForgetBtn;
	iconTextButton -style "textOnly" -e -bgc $red $green 0.2 KernSelectKeepBtn;
}
global proc KernSelectClear()
{
	global string $KernSelectKeep[];
	clear $KernSelectKeep;
}
global proc KernSelectUI()
{
if (`window -ex KernSelectUI`) deleteUI KernSelectUI;
    window -title "KernSelectUI ToolBox" -bgc 0.2 0.5 0.2 -rtf 1 KernSelectUI;
        columnLayout -adjustableColumn true daSelectColumn;
				flowLayout -columnSpacing 0;
					iconTextButton -style "textOnly" -w 30 -l "10%" -bgc 0.2 0.4625 0.2 -c "selectPercent(10);";
					iconTextButton -style "textOnly" -w 30 -l "20%" -bgc 0.2375 0.425 0.2 -c "selectPercent(20);";
					iconTextButton -style "textOnly" -w 30 -l "30%" -bgc 0.275 0.3875 0.2 -c "selectPercent(30);";
					iconTextButton -style "textOnly" -w 30 -l "40%" -bgc 0.3125 0.35 0.2 -c "selectPercent(40);";
					iconTextButton -style "textOnly" -w 30 -l "50%" -bgc 0.35 0.3125 0.2 -c "selectPercent(50);";
					iconTextButton -style "textOnly" -w 30 -l "60%" -bgc 0.3875 0.275 0.2 -c "selectPercent(60);";
					iconTextButton -style "textOnly" -w 30 -l "70%" -bgc 0.425 0.2375 0.2 -c "selectPercent(70);";
					iconTextButton -style "textOnly" -w 30 -l "80%" -bgc 0.4625 0.2 0.2 -c "selectPercent(80);";
					iconTextButton -style "textOnly" -w 30 -l "90%" -bgc 0.5 0.2 0.2 -c "selectPercent(90);";
					setParent ..;
				columnLayout -adjustableColumn true daAttrColumn;
				text -l "Percent : 10%" daMsg;
				intSliderGrp -field false
					-minValue 0 -maxValue 100
					-fieldMinValue 0 -fieldMaxValue 100
					-dc "KernFade()"
					-cc "KernFade()"
					-h 24
					-value 10 daValue;
				rowLayout -numberOfColumns 2 -adj 2;
					columnLayout -adjustableColumn true;
						iconTextButton -style "textOnly" -l "keep selection" -w 100 -vis 1 -bgc 0.2 0.5 0.2 -c "global string $KernSelectKeep[]; $KernSelectKeep = `ls -sl -l`;iconTextButton -e -vis 0 KernSelectKeepBtn;iconTextButton -e -vis 1 KernSelectForgetBtn;" KernSelectKeepBtn;
						iconTextButton -style "textOnly" -l "forget selection" -w 100 -vis 0 -bgc 0.5 0.2 0.2  -c "clear $KernSelectKeep; iconTextButton -e -vis 0 KernSelectForgetBtn;iconTextButton -e -vis 1 KernSelectKeepBtn;" KernSelectForgetBtn;
						setParent ..;
					iconTextButton -style "textOnly" -l "Select" -bgc 0.5 0.2 0.2 -c "$value = `intSliderGrp -q -v daValue`; selectPercent($value);" KernSelectAction;
					setParent ..;
				setParent ..;
				rowLayout -numberOfColumns 2 -adj 1;
					iconTextButton -style "textOnly" -l "close" -h 15 -c "deleteUI KernSelectUI";
					iconTextButton -style "textOnly" -l "refresh" -h 15 -w 150 -c "source KernSelect.mel; KernSelectUI();"; 
				setParent ..;
			setParent daSelectColumn;
    showWindow KernSelectUI;
	window -e -w 271 -h 107 KernSelectUI;
	scriptJob -uid KernSelectUI KernSelectClear;
	KernFade();
}
KernSelectUI();