I can't help right now but move your topic to Photoshop Scripting and ask of help r-bin that should be easy for him 
function sTT(v) {return stringIDToTypeID(v)} $.level = 0
function R() {return ref = new ActionReference()} arr = []
function DoL(v) {R().putEnumerated(sTT(v), sTT('ordinal'), sTT('targetEnum'))}
function bGrnd(v) {R().putIndex(sTT('layer'), v)}
function SC(v) {
return typeIDToStringID((dsc = executeActionGet(ref))
.getEnumerationValue(sTT(lS = 'layerSection'))) == lS + v
}
function sNL() {
DoL('layer'); (dsc = new ActionDescriptor()).putReference(sTT('null'), ref)
executeAction(sTT('selectNoLayers'), dsc, DialogModes.NO)
}
function mLN(v) {
R().putIdentifier(sTT('layer'), v);
(dsc = new ActionDescriptor()).putReference(sTT('null'), ref)
dsc.putBoolean(sTT('makeVisible'), true)
executeAction(sTT('select'), dsc, DialogModes.NO)
executeAction(sTT('mergeLayersNew'), undefined, DialogModes.NO)
}
function prcs(v1, v2) {
bGrnd(idx = v1), lID = executeActionGet(ref).getInteger(sTT('layerID'))
if (SC('Start')) {
bGrnd(idx - 1); if (SC('Content')) v2 ? arr.push(lID) : (sNL(), mLN(lID))
}
}
try{
R().putIdentifier(sTT('layer'), 1)
bG = !(executeActionGet(ref))
.getBoolean(sTT('background'))
}
catch (err) {bG = 1}
DoL('document'), tL = sTT('targetLayers')
if ((dsc = executeActionGet(ref)).hasKey(tL)) {
for(lst = dsc.getList(tL), i = 0; i < lst.count;) {
prcs(lst.getReference(i++).getIndex() + bG, true)
}
sNL(); for(i = 0; i < arr.length; i++) mLN(arr[i])
}
else {
DoL('layer'), prcs(executeActionGet(ref)
.getInteger(sTT('itemIndex')) - !bG, false)
}