var idx_shift = 0;
try { activeDocument.backgroundLayer } catch (e) { idx_shift = 1; }
while (1)
{
var list = get_selected_layers();
if (!list) { alert("No selected layers"); break; }
var list2 = new Array();
for (var i in list) list2.push(list);
function cmp(a, b)
{
var x = expand_numbers(a[0]);
var y = expand_numbers(b[0]);
if (x > y) return -1;
if (x < y) return 1;
return 0;
}
list.sort(cmp);
var cont = false;
for (var i = 0; i < list.length; i++)
{
if (list2[1] != list[1])
{
set_layers_index(list2[1], list[1]);
cont = true;
break;
}
}
if (!cont) break;
}
alert("Done!");
//////////////////////////////////////////////////////////////////
function set_layers_index(cur_idx, new_idx)
{
try {
var d = new ActionDescriptor();
var r1 = new ActionReference();
r1.putIndex( charIDToTypeID( "Lyr " ), cur_idx);
var r2 = new ActionReference();
r2.putIndex( charIDToTypeID( "Lyr " ), new_idx-idx_shift );
d.putReference( charIDToTypeID( "null" ), r1 );
d.putReference( charIDToTypeID( "T " ), r2 );
executeAction( charIDToTypeID( "move" ), d, DialogModes.NO );
}
catch (e) { alert(e); throw(e); }
}
//////////////////////////////////////////////////////////////////
function get_selected_layers()
{
try {
var r = new ActionReference();
r.putProperty(charIDToTypeID("Prpr"), stringIDToTypeID("targetLayers"));
r.putEnumerated(charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt"));
var list = executeActionGet(r).getList(stringIDToTypeID("targetLayers"));
var len = list.count;
var selected_layers = new Array();
for (var i = 0; i < len; i++)
{
try
{
var idx = list.getReference(i).getIndex() + idx_shift;
var r = new ActionReference();
r.putProperty(charIDToTypeID("Prpr"), stringIDToTypeID("name"));
r.putIndex( charIDToTypeID( "Lyr " ), idx);
var ret = executeActionGet(r).getString(stringIDToTypeID("name"));
selected_layers.push([executeActionGet(r).getString(stringIDToTypeID("name")), idx]);
}
catch (e) { alert(e); return null; }
}
return selected_layers;
}
catch (e) { return null; }
}
////////////////////////////////////////////////////////////////////////////////////////////
function expand_numbers(s, max_digit)
{
if (max_digit == undefined) max_digit = 10;
var digit_cnt;
s = s.toString();
var len = s.length;
var s1 = "";
for (var i = len-1; i >= 0; i--)
{
var c = s.charAt(i);
if (c >= "0" && c <="9")
{
if (digit_cnt == undefined)
digit_cnt = 1;
else
++digit_cnt;
s1 += c;
}
else if (digit_cnt != undefined)
{
if (digit_cnt < max_digit) for (var n = 0; n < max_digit-digit_cnt; n++) s1 += "0";
s1 += c;
digit_cnt = undefined;
}
else
{
s1 += c;
}
}
if (digit_cnt != undefined && digit_cnt < max_digit)
for (var n = 0; n < max_digit-digit_cnt; n++) s1 += "0";
len = s1.length;
var ret = "";
for (var i = len-1; i >= 0; i--) ret += s1.charAt(i);
ret = ret.toUpperCase();
return ret;
}