﻿#include "../yScripts/y_JSExtensions.jsx";
function yFlattenSelectedFolderContentsTool()
{
    this.info =
    {
	name : "yFlatten",
	version : 0.11,
	stage : "alpha",
	description : "Set the Folder Structure for a new Project",
	url : "yorchnet.com"
    };
    this.appearence =
    {
	buttonHeight : 30,
	buttonWidth : 126
    };
    this.resources = 
    {
	icon : new File('yNet.png'),
    };
    this.init = function init()
    {
	//alert("my name is:" + this.info.name);
	this.btnLauyout = 
	"button\
	 {\
	    preferredSize: ['" + this.appearence.buttonWidth + "','" + this.appearence.buttonHeight + "'],\
	    text:'" + this.info.name + "',\
	    helpTip:'" + this.info.description + "'\
	 }";
	
	this. res = 
	 "window\
	{\
	    type:'palette',\
	    text:'" + this.info.name + ' ' + this.info.ver + ' ' + this.info.stage + "',\
	    info: Group \
	    {\
		alignment:['center','bottom'],\
		icon: Image \
		{\
		    icon:'" + this.resources.icon.path + '/' + this.resources.icon.name + "',\
		    preferredSize: [15, 18]\
		},\
		website: StaticText\
		{\
		    text:'" + this.info.url + "',\
		    alignment:['fill','center']\
		},\
	    }\
	}";
    }
    this.createUI = function createUI()
    {
		
		
	this.window = new Window ( this.res );
	this.window.show() ;
    }
    
	this.getSelectedProjectItems = function getSelectedProjectItems (){
		var items = [];
		var p = app.project;
		for ( var i = 1 ; i <= p.numItems ; i ++ ){
			var item = p.item(i);
			if ( item.selected ){
				items.push(item);
			}
		}
		return items;
	}
	this.getAllItems = function getAllItems( folderItem ){
		
		var items = [];
		var folders = [];
		
		for ( var i = 1 ; i <= folderItem.numItems ; i ++ ){
		var item = folderItem.item(i);
		
		if ( (item.typeName != "Folder") ){
				//if ( (isInArray( items ,item )) == false ){
					items.push( item );
				//}
			}else{
					var new_items = yFlattenSelectedFolderContentsTool().getAllItems(item);
					for ( var j = 0 ; j < new_items.length ; j ++ ){
						new_item = new_items[j];
						//if ( (isInArray ( new_item )) == false ){
							items.push ( new_item );
						//}
					}
				}
			}
		return items
	}
	this.flatten = function flatten( items, root ){
		app.beginUndoGroup("Flatten Selected Folder Contents")
		for ( var i = 0; i < items.length ; i ++){
			item = items[i];
			item.parentFolder = root;
		}
		app.endUndoGroup()
		purgeEmptyFolders();
		return
	}
	this.purgeEmptyFolders = function purgeEmptyFolders(){
		app.beginUndoGroup("Purge Empty Folders")
		var emptyFolders = [];
		
		var p = app.project;
		for ( var i = p.numItems ; i >= 1 ; i -- ){
			item = p.item(i);
			if ( item.typeName == "Folder" ){
				if ( item.numItems <= 0 ){
					item.remove();
				}
			}
		}
		
		app.endUndoGroup()
	}
    this.yFlattenSelectedFolderContents = function yFlattenSelectedFolderContents()
    {
	//alert("is this working");
	app.beginUndoGroup(yFlattenSelectedFolderContentsTool().info.description);
	yFlattenSelectedFolderContentsTool().flatten( yFlattenSelectedFolderContentsTool().getAllItems( yFlattenSelectedFolderContentsTool().getSelectedProjectItems()[0] ) , yFlattenSelectedFolderContentsTool().getSelectedProjectItems()[0] );
	app.endUndoGroup();
    }
    
    this.activate = this.yFlattenSelectedFolderContents;
    
    this.init();
    return this;
}

//CHECKS that the toolbox exists, and if it doesn´t it runs the script on its own.
if (typeof(YTB)=='undefined')
{
    yFlattenSelectedFolderContentsTool = new yFlattenSelectedFolderContentsTool();
    yFlattenSelectedFolderContentsTool.activate();
}
else
{
    yFlattenSelectedFolderContentsTool = YTB.addTool(new yFlattenSelectedFolderContentsTool());
}
