﻿// Add Parented Null to Selected Layers.jsx
// ©July 2009  Lloyd Alvarez  http://aescripts.com
//
//   Creates a parented null for the selected layers.
// 
//	
// version history
// 1.5 Checks to see if any layer is 3D and makes null 3D if necessary. Sep 2011
// 1.0 Initial release. Jul 2009
//


var proj = app.project;
	var undoStr = "Add Parented Null to Selected Layers";

	if (proj){
		var myComp = app.project.activeItem;
		if (myComp != null && (myComp instanceof CompItem)){
			app.beginUndoGroup(undoStr);
			
			var myLayers = myComp.selectedLayers;
			if (myLayers.length != 0) {
			var saveIn = myComp.duration;
			var saveOut = 0;
			var saveIndex = myComp.numLayers;
			var newInpoint=myComp.duration, newOutpoint=0, myIndex=myComp.numLayers;
			var newNull = myComp.layers.addNull(myComp.duration);
            //check to see if any of the selected layers is a 3d layer
            for (i=0; i <= myLayers.length-1; i++){
                if (myLayers[i].threeDLayer) {
                    newNull.threeDLayer = true;
                    break;
                    }
                }
            
			for (i=0; i <= myLayers.length-1; i++){
				
				currentLayer = myLayers[i];
				saveIn = (currentLayer.stretch < 0) ? currentLayer.outPoint : currentLayer.inPoint;
				saveOut = (currentLayer.stretch < 0) ? currentLayer.inPoint : currentLayer.outPoint;
				saveIndex = currentLayer.index;
			
				if (saveIn < newInpoint) {newInpoint = saveIn}
				if (saveOut > newOutpoint) {newOutpoint = saveOut}
				if (saveIndex < myIndex) {myIndex = saveIndex}
				
				currentLayer.parent = newNull;
			}
		
				newNull.moveBefore(myComp.layer(myIndex));
				newNull.inPoint = newInpoint;
				newNull.outPoint = newOutpoint;
				
			app.endUndoGroup();
			} else {
				alert("Please select at least one layer");
				}
		} else {
			alert("Please select an active comp to use this script");
		}
	}
	else
	{
		alert("Please open a project first to use this script.");
	}
