

// name layers in group according to layers in next group up;
// 2024, use it at your own risk;
if (app.documents.length > 0) {
var ref = new ActionReference();
ref.putProperty (stringIDToTypeID ("property"), stringIDToTypeID ("parentLayerID"));
ref.putEnumerated( charIDToTypeID("Lyr "), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var layerDesc = executeActionGet(ref);
var parentId = layerDesc.getInteger(stringIDToTypeID ("parentLayerID"));
var theGroups = collectGroupsAboveCertainIndex (parentId);
var theLayers = collectLayersFromGroupsOfIndex(theGroups[0][1]);
var theOtherLayers = collectLayersFromGroupsOfIndex(theGroups[1][1]);
if (theLayers.length == theOtherLayers.length) {
for (var m = 0; m < theLayers.length; m++) {
changeNameById(theLayers[m][2], theOtherLayers[m][0])
}
}
};
////////////////////////////////////
////// collect groups including and up from id //////
function collectGroupsAboveCertainIndex (theTargetId) {
var theCheck = false;
// get number of layers;
var ref = new ActionReference();
ref.putProperty(stringIDToTypeID('property'), stringIDToTypeID('numberOfLayers'));
ref.putEnumerated( charIDToTypeID("Dcmn"), charIDToTypeID("Ordn"), charIDToTypeID("Trgt") );
var applicationDesc = executeActionGet(ref);
var theNumber = applicationDesc.getInteger(stringIDToTypeID("numberOfLayers"));
// process the layers;
var theLayers = new Array;
//for (var m = 0; m >= theNumber; m--) {
for (var m = 0; m <= theNumber; m++) {
try {
var ref = new ActionReference();
ref.putIndex( charIDToTypeID( "Lyr " ), m);
var layerDesc = executeActionGet(ref);
var layerSet = typeIDToStringID(layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")));
var isBackground = layerDesc.getBoolean(stringIDToTypeID("background"));
// if group collect values;
if (layerSet == "layerSectionStart") {
var theName = layerDesc.getString(stringIDToTypeID('name'));
// collect if condition is met;
var theID = layerDesc.getInteger(stringIDToTypeID('layerID'));
var theIndex = layerDesc.getInteger(stringIDToTypeID('itemIndex'));
if (theID == theTargetId) {theCheck = true}
if (theCheck == true) {theLayers.push([theName, theIndex, theID])}
};
}
catch (e) {};
};
return theLayers
};
////// collect layers and their parents if the top level group has a specific name //////
function collectLayersFromGroupsOfIndex (theTargetIndex) {
// a number is intended to keep track of layerset depth;
var aNumber = 0;
var theArray = new Array;
var theCheck = false;
try {
// work through layers;
while (theCheck == false) {
theTargetIndex--;
var ref = new ActionReference();
ref.putIndex( charIDToTypeID( "Lyr " ), theTargetIndex);
var layerDesc = executeActionGet(ref);
var layerSet = typeIDToStringID(layerDesc.getEnumerationValue(stringIDToTypeID("layerSection")));
var theName = layerDesc.getString(stringIDToTypeID('name'));
var theID = layerDesc.getInteger(stringIDToTypeID('layerID'));
var thisArray = [theName, theTargetIndex, theID];
////////////////////////////////////
// if group start add to mark group:
if (layerSet == "layerSectionStart") {
aNumber++
};
// if group end subtract to mark end of group;
if (layerSet == "layerSectionEnd") {
aNumber--;
};
// if corresponding group end;
if (layerSet == "layerSectionEnd" && aNumber == 0) {
theCheck = true;
} else {
// add to array;
theArray.push(thisArray);
};
////////////////////////////////////
};
} catch (e) {};
// the results;
theArray.shift();
return theArray
};
////// set name //////
function changeNameById (theID, theNewName) {
var desc2 = new ActionDescriptor();
var ref1 = new ActionReference();
ref1.putIdentifier( charIDToTypeID( "Lyr " ), theID );
desc2.putReference( charIDToTypeID( "null" ), ref1 );
var desc3 = new ActionDescriptor();
// desc3.putUnitDouble( charIDToTypeID( "Opct" ), charIDToTypeID( "#Prc" ), Math.round(theOpacity/2.55) );
desc3.putString( stringIDToTypeID( "name" ), theNewName );
desc2.putObject( charIDToTypeID( "T " ), charIDToTypeID( "Lyr " ), desc3 );
executeAction( charIDToTypeID( "setd" ), desc2, DialogModes.NO );
};