// ---------------
// Timeline Creator
// ---------------
//
// AUTHOR:  Sammy Joe Osborne
// VERSION: 1.0
// DATE:    03/09/2007
//
// DESCRIPTION: Creates multiple timeline entries from a specified tab-delimmited txt file exported from excel
//
/* NOTES:   Uses an excel file exported to a tab sepperated txt file.  In excel, the Date goes in the first column,
the Content for that date goes into the second column.  The only two forbidden characters to use in either
the Date or Content column is a tab and a return (the enter key), as tabs are what sepperates each entry.
If you need a tab or a return, simply edit the entry after it's been brought into Flash.
*/

var doc = fl.getDocumentDOM();
fl.outputPanel.clear();
if (fl.getDocumentDOM() == null) {
        fl.trace("Error: No document open.");
}
//-----------------------This code creates the template if it doesn't already exist-------------------------------
if(!doc.library.itemExists("TEMPLATE_ROUNDBOX")){
        alert("The Template for this entry style does not yet exist. It will now be created.");
        
        //create the template for an entry with a rounded flag and rounded box around the content
        var lib = fl.getDocumentDOM().library;
        lib.addNewItem('movie clip', "TEMPLATE_ROUNDBOX");
        
        lib.editItem();
        fl.getDocumentDOM().addNewRectangle({left:0, top:0, right:230, bottom:60}, 16);
        fl.getDocumentDOM().setSelectionRect({left:-20, top:28, right:241, bottom:68}, true, true);
        fl.getDocumentDOM().deleteSelection();
        fl.getDocumentDOM().addNewLine({x:0, y:28.0}, {x:230, y:28.0});
        fl.getDocumentDOM().setSelectionRect({left:-10.1, top:-10.2, right:235.1, bottom:59.1}, true, true);
        fl.getDocumentDOM().setStroke('#000000', 1, 'solid');
        fl.getDocumentDOM().setStrokePixelHint(true);
        fl.getDocumentDOM().setStrokeScaleType('vertical');
        fl.getDocumentDOM().setStrokeColor('#000000');
        fl.getDocumentDOM().setSelectionRect({left:-16, top:-13, right:248, bottom:54}, true, true);
        fl.getDocumentDOM().setFillColor('#990000');
        fl.getDocumentDOM().setSelectionRect({left:-16, top:-13, right:248, bottom:54}, true, true);
        fl.getDocumentDOM().convertToSymbol('movie clip', 'T_RBFLAG', 'top left');
        fl.getDocumentDOM().library.setItemProperty('scalingGrid',  true);
        fl.getDocumentDOM().library.setItemProperty('scalingGridRect', {left:22, top:15, right:211, bottom:29});
        fl.getDocumentDOM().setTransformationPoint({x:0, y:0});
        fl.getDocumentDOM().getTimeline().setLayerProperty('name', 'Flag');
        
        
        fl.getDocumentDOM().getTimeline().addNewLayer();
        fl.getDocumentDOM().getTimeline().setLayerProperty('name', 'Date Text');
        
        fl.getDocumentDOM().setFillColor('#ffffff');
        fl.getDocumentDOM().addNewText({left:5, top:4.4, right:27.2, bottom:25.2});
        fl.getDocumentDOM().setElementTextAttr('size', 15);
        fl.getDocumentDOM().setElementTextAttr('face', 'Arial');
        fl.getDocumentDOM().setElementProperty('autoExpand', true);
        fl.getDocumentDOM().setTextString('Date Text');
        fl.getDocumentDOM().selectNone();
        
        fl.getDocumentDOM().getTimeline().addNewLayer();
        fl.getDocumentDOM().getTimeline().setLayerProperty('name', 'Content Text');
        
        fl.getDocumentDOM().setFillColor('#000000');
        fl.getDocumentDOM().addNewText({left:5, top:31.3, right:27.2, bottom:55.1});
        fl.getDocumentDOM().setElementTextAttr('size', 12);
        fl.getDocumentDOM().setElementTextAttr('face', 'Arial');
        fl.getDocumentDOM().setElementProperty('autoExpand', true);
        fl.getDocumentDOM().setTextString('Content Text');
        fl.getDocumentDOM().selectNone();
        
        fl.getDocumentDOM().getTimeline().addNewLayer();
        fl.getDocumentDOM().getTimeline().setLayerProperty('name', 'Content Box');
        
        fl.getDocumentDOM().setStroke('#000000', 1, 'solid');
        fl.getDocumentDOM().setStrokeColor('#000000');
        var myFill = fl.getDocumentDOM().getCustomFill("toolbar");
        myFill.color = '#FFFFFF';
        myFill.style = "solid";
        fl.getDocumentDOM().setCustomFill(myFill);
        var myStroke = fl.getDocumentDOM().getCustomStroke("toolbar");
        myStroke.color = "#000000";
        fl.getDocumentDOM().setCustomStroke(myStroke);
        fl.getDocumentDOM().addNewRectangle({left:0, top:0, right:230, bottom:56}, 16, false, false);
        
        
        fl.getDocumentDOM().getTimeline().reorderLayer(0, 3, false);
        fl.getDocumentDOM().getTimeline().reorderLayer(0, 2, false);
        fl.getDocumentDOM().selectNone();
        fl.getDocumentDOM().getTimeline().layers[3].frames[0].elements[0].selected = true;
        fl.getDocumentDOM().setStrokePixelHint(true);
        fl.getDocumentDOM().convertToSymbol('movie clip', 'T_RBCONTENT', 'top left');
        fl.getDocumentDOM().library.setItemProperty('scalingGrid',  true);
        fl.getDocumentDOM().library.setItemProperty('scalingGridRect', {left:22, top:15, right:211, bottom:41});
        fl.getDocumentDOM().setTransformationPoint({x:0, y:0});
        
        fl.getDocumentDOM().library.newFolder("TimelineElements");
        fl.getDocumentDOM().library.moveToFolder("TimelineElements", "T_RBCONTENT", true);
        fl.getDocumentDOM().library.moveToFolder("TimelineElements", "T_RBFLAG", true);
        
        alert("The template has now been created.  Customize colors, but do not change the structure of the template.  When finished, click the button again to create the timeline using this template.");
}
//---------------------------------This is the code that creates the timeline.  The script only makes it here if the template exists already-------------------
else{
        var fileURI = fl.browseForFileURL("open", "Choose Your Timeline Data");
        if(fileURI != undefined){
                var str = FLfile.read ( fileURI);
                
                
                var startYLocation = 50;
                var startXLocation = 30;
                var entryBuffer = 30; //this is the spacing between each entry in pixels
                var currentXLocation = 0; //will keep track of where to place next entry
                var lastEntryWidth = 0; //will equal the newest entry's width
                var area;
                var newWidth;
                var newHeight;
                var dateTextWidth;
                var newMatrix;
                var templateName = "TEMPLATE_ROUNDBOX";
                
                if (str) {
                        fl.trace("Importing data...");
                        var stringArray = str.split("\r\n");
                        
                        //remove any empty lines if they exist
                        for(var i=0; i < stringArray.length; i++){
                                if(stringArray[i] == ""){
                                        stringArray.splice(i, 1);
                                }
                        }
                        
                        var len = stringArray.length;
                        
                        //now separate all the tabs out
                        while(len--) stringArray[len] = stringArray[len].split("\t");
                }else{
                        alert("File not found.  Check your path again.");
                }
                
                //remove quotes around dates if they're present (ex: Mar 7, 2007 would appear "Mar 7, 2007" in the text file.
                //It's how excel exports it when a comma is included in the file.
                for(var i=0; i < stringArray.length; i++){
                        fl.trace("currently unquoting " + stringArray[i][0]);
                        //check the date to see if there are quotes around it, and remove them if so
                        if(stringArray[i][0][0] == '"'){
                                stringArray[i][0] = stringArray[i][0].substring(1, stringArray[i][0].lastIndexOf('"'));
                        }
                        //now to check the content text for quotes around it
                        if(stringArray[i][1][0] == '"'){
                                stringArray[i][1] = stringArray[i][1].substring(1, stringArray[i][1].lastIndexOf('"'));
                        }
                }
                
                for(var row = 0; row < stringArray.length; row++){
                        var carryOn = false;
                        var itemExists = false;
                        var date = stringArray[row][0];//Example: "Mar. 9, 2007";
                        var itemName = date;
                        var content = stringArray[row][1];
                        
                        //check and see if the item already exists
                        if(doc.library.itemExists("Timeline Entries/" + itemName)){
                                //add a number to its name
                                var i = 2;
                                while(doc.library.itemExists("Timeline Entries/" + itemName)){
                                        if(itemName.indexOf('_') != -1){
                                                itemName = itemName.substring(0, itemName.indexOf('_'))
                                        }
                                        itemName = itemName + "_" + i;
                                        fl.trace("itemName is now: " + itemName);
                                        i++;
                                }
                                carryOn = true;
                                
                                /*if(confirm(itemName + " already exists.  Overwrite " + itemName+"?")){
                                doc.library.deleteItem(itemName);
                                carryOn = true;
                        }
                                else{
                                carryOn = false;
                        }*/
                        }
                        //if it doesn't already exist, carryOn
                        else{carryOn = true}
                        
                        
                        
                        
                        
                        
                        if(carryOn){
                                //clears any selections that might be active
                                fl.getDocumentDOM().selectNone();
                                fl.getDocumentDOM().library.selectNone();
                                
                                fl.getDocumentDOM().library.duplicateItem(templateName);
                                fl.getDocumentDOM().library.renameItem(itemName);
                                fl.getDocumentDOM().library.newFolder("Timeline Entries");
                                fl.getDocumentDOM().library.moveToFolder("Timeline Entries", itemName, true);
                                fl.getDocumentDOM().library.editItem("Timeline Entries/" + itemName);
                                
                                //Date Text
                                fl.getDocumentDOM().getTimeline().layers[0].frames[0].elements[0].selected = true;
                                fl.getDocumentDOM().selection[0].setTextString(date);
                                dateTextWidth = fl.getDocumentDOM().selection[0].width;
                                fl.getDocumentDOM().selectNone();
                                
                                //Content Text
                                fl.getDocumentDOM().getTimeline().layers[2].frames[0].elements[0].selected = true;
                                fl.getDocumentDOM().selection[0].setTextString(content);
                                
                                //resize the text box to a 2:1 ratio (that seems to be most aesthetically pleasing)
                                area = fl.getDocumentDOM().selection[0].height * fl.getDocumentDOM ().selection[0].width;
                                newWidth = (Math.sqrt(area/.5));
                                fl.getDocumentDOM().setTextRectangle({left:0, top:0, right:newWidth, bottom:200}); //bottom and top are basically ignored, as it figures it out based on the width
                                newHeight = fl.getDocumentDOM().selection[0].height;
                                fl.getDocumentDOM().selectNone();
                                
                                //resize the flag above the text
                                fl.getDocumentDOM().getTimeline().layers[1].frames[0].elements[0].selected = true;
                                fl.getDocumentDOM().setTransformationPoint({x:0, y:0});
                                if(dateTextWidth > newWidth)
                                fl.getDocumentDOM().selection[0].width = dateTextWidth + 10;
                                else
                                fl.getDocumentDOM().selection[0].width = newWidth + 10;
                                newHeight += fl.getDocumentDOM().selection[0].height;
                                fl.getDocumentDOM().selectNone();
                                
                                //resize the flag content box (the colored box the text is on)
                                fl.getDocumentDOM().getTimeline().layers[3].frames[0].elements[0].selected = true;
                                if(fl.getDocumentDOM ().selection.length > 1){
                                        alert("Problem found.  Either group your Content box or restructure your entry template.");
                                }
                                else{
                                        fl.getDocumentDOM().setTransformationPoint({x:0, y:0});
                                        if(dateTextWidth > newWidth)
                                        fl.getDocumentDOM().selection[0].width = dateTextWidth + 10;
                                        else
                                        fl.getDocumentDOM().selection[0].width = newWidth + 10;
                                        fl.getDocumentDOM ().selection[0].height = newHeight + 10;
                                        fl.getDocumentDOM().selectNone();
                                }
                                
                                fl.getDocumentDOM().exitEditMode();
                                
                                currentXLocation += lastEntryWidth + entryBuffer;
                                fl.getDocumentDOM ().library.addItemToDocument({x:currentXLocation, y:startYLocation}, "Timeline Entries/" + itemName);
                                //even though the above command places it, it doesn't work quite right.  They aren't aligned.  So we must move them by chaning the matrix properties.
                                newMatrix = fl.getDocumentDOM().selection[0].matrix;
                                newMatrix.tx = currentXLocation;
                                newMatrix.ty = startYLocation;
                                fl.getDocumentDOM().selection[0].matrix = newMatrix;
                                lastEntryWidth = fl.getDocumentDOM().selection[0].width;
                        }
                        
                }
        }
}