text:
/*global SWFUpload*/
/*global swfobject*/
/*global jQuery*/
/*global fluid_1_1*/

fluid_1_1 = fluid_1_1 || {};

/*******************
 * File Queue View *
 *******************/

(function ($, fluid) {

    // Real data binding would be nice to replace these two pairs.
    var rowForFile = function (that, file) {
        return that.locate("fileQueue").find("#" + file.id);
    };

    var errorRowForFile = function (that, file) {
        return $("#" + file.id + "_error", that.container);
    };

    var fileForRow = function (that, row) {
        var files = that.uploadManager.queue.files;
        for (var i = 0; i < files.length; i++) {
            var file = files[i];
            if (file.id.toString() === row.attr("id")) {
                return file;
            }
        }
        return null;
    };

    var progressorForFile = function (that, file) {
        var progressId = file.id + "_progress";
        return that.fileProgressors[progressId];
    };

    var startFileProgress = function (that, file) {
        var fileRowElm = rowForFile(that, file);
        that.scroller.scrollTo(fileRowElm);

        // update the progressor and make sure that it's in position
        var fileProgressor = progressorForFile(that, file);
        fileProgressor.refreshView();
        fileProgressor.show();
    };

    var updateFileProgress = function (that, file, fileBytesComplete, fileTotalBytes) {
        var filePercent = fluid.uploader.derivePercent(fileBytesComplete, fileTotalBytes);
        var filePercentStr = filePercent + "%";
        progressorForFile(that, file).update(filePercent, filePercentStr);
    };

    var hideFileProgress = function (that, file) {
        var fileRowElm = rowForFile(that, file);
        progressorForFile(that, file).hide();
        if (file.filestatus === fluid.uploader.fileStatusConstants.COMPLETE) {
            that.locate("fileIconBtn", fileRowElm).removeClass(that.options.styles.dim);
        }
    };

    var removeFileProgress = function (that, file) {
        var fileProgressor = progressorForFile(that, file);
        if (!fileProgressor) {
            return;
        }
        var rowProgressor = fileProgressor.displayElement;
        rowProgressor.remove();
    };

    var animateRowRemoval = function (that, row) {
        row.fadeOut("fast", function () {
            row.remove();
            that.refreshView();
        });
    };

    var removeFileErrorRow = function (that, file) {
        if (file.filestatus === fluid.uploader.fileStatusConstants.ERROR) {
            animateRowRemoval(that, errorRowForFile(that, file));
        }
    };

    var removeFileAndRow = function (that, file, row) {
        // Clean up the stuff associated with a file row.
        removeFileProgress(that, file);
        removeFileErrorRow(that, file);

        // Remove the file itself.
        that.uploadManager.removeFile(file);
        animateRowRemoval(that, row);
    };

    var removeFileForRow = function (that, row) {
        var file = fileForRow(that, row);
        if (!file || file.filestatus === fluid.uploader.fileStatusConstants.COMPLETE) {
            return;
        }
        removeFileAndRow(that, file, row);
    };

    var removeRowForFile = function (that, file) {
        var row = rowForFile(that, file);
        removeFileAndRow(that, file, row);
    };

    var bindHover = function (row, styles) {
        var over = function () {
            if (row.hasClass(styles.ready) && !row.hasClass(styles.uploading)) {
                row.addClass(styles.hover);
            }
        };

        var out = function () {
            if (row.hasClass(styles.ready) && !row.hasClass(styles.uploading)) {
                row.removeClass(styles.hover);
            }
        };
        row.hover(over, out);
    };

    var bindDeleteKey = function (that, row) {
        var deleteHandler = function () {
            removeFileForRow(that, row);
        };

        fluid.activatable(row, null, {
            additionalBindings: [{
                key: $.ui.keyCode.DELETE,
                activateHandler: deleteHandler
            }]
        });
    };

    var bindRowHandlers = function (that, row) {
        if ($.browser.msie && $.browser.version < 7) {
            bindHover(row, that.options.styles);
        }

        that.locate("fileIconBtn", row).click(function () {
            removeFileForRow(that, row);
        });

        bindDeleteKey(that, row);
    };

    var renderRowFromTemplate = function (that, file) {
        var row = that.rowTemplate.clone();
        row.removeClass(that.options.styles.hiddenTemplate);
        that.locate("fileName", row).text(file.name);
        that.locate("fileSize", row).text(fluid.uploader.formatFileSize(file.size));
        that.locate("fileIconBtn", row).addClass(that.options.styles.remove);
        row.attr("id", file.id);
        row.addClass(that.options.styles.ready);
        bindRowHandlers(that, row);

        return row;
    };

    var createProgressorFromTemplate = function (that, row) {
        // create a new progress bar for the row and position it
        var rowProgressor = that.rowProgressorTemplate.clone();
        var rowId = row.attr("id");
        var progressId = rowId + "_progress";
        rowProgressor.attr("id", progressId);
        rowProgressor.css("top", row.position().top);
        rowProgressor.height(row.height()).width(5);
        that.container.after(rowProgressor);

        that.fileProgressors[progressId] = fluid.progress(that.uploadContainer, {
            selectors: {
                progressBar: "#" + rowId,
                displayElement: "#" + progressId,
                label: "#" + progressId + " .fl-uploader-file-progress-text",
                indicator: "#" + progressId
            }
        });
    };

    var addFile = function (that, file) {
        var row = renderRowFromTemplate(that, file);
        /* FLUID-2720 - do not hide the row under IE8 */
        if (!($.browser.msie && ($.browser.version >= 8))) {
            row.hide();
        }
        that.container.append(row);
        row.fadeIn("slow");
        that.scroller.scrollBottom();
        createProgressorFromTemplate(that, row);

        that.refreshView();
    };

    var prepareForUpload = function (that) {
        var rowButtons = that.locate("fileIconBtn", that.locate("fileRows"));
        rowButtons.attr("disabled", "disabled");
        rowButtons.addClass(that.options.styles.dim);
    };

    var refreshAfterUpload = function (that) {
        var rowButtons = that.locate("fileIconBtn", that.locate("fileRows"));
        rowButtons.removeAttr("disabled");
        rowButtons.removeClass(that.options.styles.dim);
    };

    var changeRowState = function (that, row, newState) {
        row.removeClass(that.options.styles.ready).removeClass(that.options.styles.error).addClass(newState);
    };

    var markRowAsComplete = function (that, file) {
        // update styles and keyboard bindings for the file row
        var row = rowForFile(that, file);
        changeRowState(that, row, that.options.styles.uploaded);
        row.attr("title", that.options.strings.status.success);
        fluid.enabled(row, false);

        // update the click event and the styling for the file delete button
        var removeRowBtn = that.locate("fileIconBtn", row);
        removeRowBtn.unbind("click");
        removeRowBtn.removeClass(that.options.styles.remove);
		removeRowBtn.attr("title", that.options.strings.status.success);
    };

    var renderErrorInfoRowFromTemplate = function (that, fileRow, error) {
        // Render the row by cloning the template and binding its id to the file.
        var errorRow = that.errorInfoRowTemplate.clone();
        errorRow.attr("id", fileRow.attr("id") + "_error");

        // Look up the error message and render it.
        var errorType = fluid.keyForValue(fluid.uploader.errorConstants, error);
        var errorMsg = that.options.strings.errors[errorType];
        that.locate("errorText", errorRow).text(errorMsg);
        fileRow.after(errorRow);
        that.scroller.scrollTo(errorRow);
    };

    var showErrorForFile = function (that, file, error) {
        hideFileProgress(that, file);
        if (file.filestatus === fluid.uploader.fileStatusConstants.ERROR) {
            var fileRowElm = rowForFile(that, file);
            changeRowState(that, fileRowElm, that.options.styles.error);
            renderErrorInfoRowFromTemplate(that, fileRowElm, error);
        }
    };

    var bindModelEvents = function (that) {
        that.returnedOptions = {
            listeners: {
                afterFileQueued: that.addFile,
                onUploadStart: that.prepareForUpload,
                onFileStart: that.showFileProgress,
                onFileProgress: that.updateFileProgress,
                onFileSuccess: that.markFileComplete,
                onFileError: that.showErrorForFile,
                afterFileComplete: that.hideFileProgress,
                afterUploadComplete: that.refreshAfterUpload
            }
        };
    };

    var addKeyboardNavigation = function (that) {
        fluid.tabbable(that.container);
        that.selectableContext = fluid.selectable(that.container, {
            selectableSelector: that.options.selectors.fileRows,
            onSelect: function (itemToSelect) {
                $(itemToSelect).addClass(that.options.styles.selected);
            },
            onUnselect: function (selectedItem) {
                $(selectedItem).removeClass(that.options.styles.selected);
            }
        });
    };

    var prepareTemplateElements = function (that) {
        // Grab our template elements out of the DOM.
        that.rowTemplate = that.locate("rowTemplate").remove();
        that.errorInfoRowTemplate = that.locate("errorInfoRowTemplate").remove();
        that.errorInfoRowTemplate.removeClass(that.options.styles.hiddenTemplate);
        that.rowProgressorTemplate = that.locate("rowProgressorTemplate", that.uploadContainer).remove();
    };

    var setupFileQueue = function (that, uploadManager) {
        that.uploadManager = uploadManager;
        that.scroller = fluid.scroller(that.container);
        prepareTemplateElements(that);
        addKeyboardNavigation(that);
        bindModelEvents(that);
    };

    /**
     * Creates a new File Queue view.
     *
     * @param {jQuery|selector} container the file queue's container DOM element
     * @param {UploadManager} uploadManager an upload manager model instance
     * @param {Object} options configuration options for the view
     */
    fluid.fileQueueView = function (container, parentContainer, uploadManager, options) {
        var that = fluid.initView("fluid.fileQueueView", container, options);
        that.uploadContainer = parentContainer;
        that.fileProgressors = {};

        that.addFile = function (file) {
            addFile(that, file);
        };

        that.removeFile = function (file) {
            removeRowForFile(that, file);
        };

        that.prepareForUpload = function () {
            prepareForUpload(that);
        };

        that.refreshAfterUpload = function () {
            refreshAfterUpload(that);
        };

        that.showFileProgress = function (file) {
            startFileProgress(that, file);
        };

        that.updateFileProgress = function (file, fileBytesComplete, fileTotalBytes) {
            updateFileProgress(that, file, fileBytesComplete, fileTotalBytes);
        };

        that.markFileComplete = function (file) {
            progressorForFile(that, file).update(100, "100%");
            markRowAsComplete(that, file);
        };

        that.showErrorForFile = function (file, error) {
            showErrorForFile(that, file, error);
        };

        that.hideFileProgress = function (file) {
            hideFileProgress(that, file);
        };

        that.refreshView = function () {
            that.scroller.refreshView();
            that.selectableContext.refresh();
        };

        setupFileQueue(that, uploadManager);
        return that;
    };

    fluid.defaults("fluid.fileQueueView", {
        selectors: {
            fileRows: ".flc-uploader-file",
            fileName: ".flc-uploader-file-name",
            fileSize: ".flc-uploader-file-size",
            fileIconBtn: ".flc-uploader-file-action",
            errorText: ".flc-uploader-file-error",

            rowTemplate: ".flc-uploader-file-tmplt",
            errorInfoRowTemplate: ".flc-uploader-file-error-tmplt",
            rowProgressorTemplate: ".flc-uploader-file-progressor-tmplt"
        },

        styles: {
            hover: "fl-uploader-file-hover",
            selected: "fl-uploader-file-focus",
            ready: "fl-uploader-file-state-ready",
            uploading: "fl-uploader-file-state-uploading",
            uploaded: "fl-uploader-file-state-uploaded",
            error: "fl-uploader-file-state-error",
            remove: "fl-uploader-file-action-remove",
            dim: "fl-uploader-dim",
            hiddenTemplate: "fl-uploader-hidden-templates"
        },

        strings: {
            progress: {
                toUploadLabel: "To upload: %fileCount %fileLabel (%totalBytes)",
                singleFile: "file",
                pluralFiles: "files"
            },
            status: {
                success: "File Uploaded",
                error: "File Upload Error"
            },
            errors: {
                HTTP_ERROR: "File upload error: a network error occured or the file was rejected (reason unknown).",
                IO_ERROR: "File upload error: a network error occured.",
                UPLOAD_LIMIT_EXCEEDED: "File upload error: you have uploaded as many files as you are allowed during this session",
                UPLOAD_FAILED: "File upload error: the upload failed for an unknown reason.",
                QUEUE_LIMIT_EXCEEDED: "You have as many files in the queue as can be added at one time. Removing files from the queue may allow you to add different files.",
                FILE_EXCEEDS_SIZE_LIMIT: "One or more of the files that you attempted to add to the queue exceeded the limit of %fileSizeLimit.",
                ZERO_BYTE_FILE: "One or more of the files that you attempted to add contained no data.",
                INVALID_FILETYPE: "One or more files were not added to the queue because they were of the wrong type."
            }
        }
    });

})(jQuery, fluid_1_1);

/************
 * Uploader *
 ************/

(function ($, fluid) {

    var fileOrFiles = function (that, numFiles) {
        return (numFiles === 1) ? that.options.strings.progress.singleFile :
                                  that.options.strings.progress.pluralFiles;
    };

    var enableElement = function (that, elm) {
        elm.removeAttr("disabled");
        elm.removeClass(that.options.styles.dim);
    };

    var disableElement = function (that, elm) {
        elm.attr("disabled", "disabled");
        elm.addClass(that.options.styles.dim);
    };

    var showElement = function (that, elm) {
        elm.removeClass(that.options.styles.hidden);
    };

    var hideElement = function (that, elm) {
        elm.addClass(that.options.styles.hidden);
    };

    var setTotalProgressStyle = function (that, didError) {
        didError = didError || false;
        var indicator = that.totalProgress.indicator;
        indicator.toggleClass(that.options.styles.totalProgress, !didError);
        indicator.toggleClass(that.options.styles.totalProgressError, didError);
    };

    var setStateEmpty = function (that) {
        disableElement(that, that.locate("uploadButton"));

        // If the queue is totally empty, treat it specially.
        if (that.uploadManager.queue.files.length === 0) {
            that.locate("browseButton").text(that.options.strings.buttons.browse);
            showElement(that, that.locate("instructions"));
        }
    };

    var setStateDone = function (that) {
        disableElement(that, that.locate("uploadButton"));
        enableElement(that, that.locate("browseButton"));
        hideElement(that, that.locate("pauseButton"));
        showElement(that, that.locate("uploadButton"));
    };

    var setStateLoaded = function (that) {
        that.locate("browseButton").text(that.options.strings.buttons.addMore);
        hideElement(that, that.locate("pauseButton"));
        showElement(that, that.locate("uploadButton"));
        enableElement(that, that.locate("uploadButton"));
        enableElement(that, that.locate("browseButton"));
        hideElement(that, that.locate("instructions"));
        that.totalProgress.hide();
    };

    var setStateUploading = function (that) {
        that.totalProgress.hide(false, false);
        setTotalProgressStyle(that);
        hideElement(that, that.locate("uploadButton"));
        disableElement(that, that.locate("browseButton"));
        enableElement(that, that.locate("pauseButton"));
        showElement(that, that.locate("pauseButton"));
        that.locate(that.options.focusWithEvent.afterUploadStart).focus();
    };

    var renderUploadTotalMessage = function (that) {
        // Render template for the total file status message.
        var numReadyFiles = that.uploadManager.queue.getReadyFiles().length;
        var bytesReadyFiles = that.uploadManager.queue.sizeOfReadyFiles();
        var fileLabelStr = fileOrFiles(that, numReadyFiles);

        var totalStateStr = fluid.stringTemplate(that.options.strings.progress.toUploadLabel, {
            fileCount: numReadyFiles,
            fileLabel: fileLabelStr,
            totalBytes: fluid.uploader.formatFileSize(bytesReadyFiles)
        });
        that.locate("totalFileStatusText").html(totalStateStr);
    };

    var updateTotalProgress = function (that) {
        var batch = that.uploadManager.queue.currentBatch;
        var totalPercent = fluid.uploader.derivePercent(batch.totalBytesUploaded, batch.totalBytes);
        var numFilesInBatch = batch.files.length;
        var fileLabelStr = fileOrFiles(that, numFilesInBatch);

        var totalProgressStr = fluid.stringTemplate(that.options.strings.progress.totalProgressLabel, {
            curFileN: batch.fileIdx + 1,
            totalFilesN: numFilesInBatch,
            fileLabel: fileLabelStr,
            currBytes: fluid.uploader.formatFileSize(batch.totalBytesUploaded),
            totalBytes: fluid.uploader.formatFileSize(batch.totalBytes)
        });
        that.totalProgress.update(totalPercent, totalProgressStr);
    };

    var updateTotalAtCompletion = function (that) {
        var numErroredFiles = that.uploadManager.queue.getErroredFiles().length;
        var numTotalFiles = that.uploadManager.queue.files.length;
        var fileLabelStr = fileOrFiles(that, numTotalFiles);

        var errorStr = "";

        // if there are errors then change the total progress bar
        // and set up the errorStr so that we can use it in the totalProgressStr
        if (numErroredFiles > 0) {
            var errorLabelString = (numErroredFiles === 1) ? that.options.strings.progress.singleError :
                                                             that.options.strings.progress.pluralErrors;
            setTotalProgressStyle(that, true);
            errorStr = fluid.stringTemplate(that.options.strings.progress.numberOfErrors, {
                errorsN: numErroredFiles,
                errorLabel: errorLabelString
            });
        }

        var totalProgressStr = fluid.stringTemplate(that.options.strings.progress.completedLabel, {
            curFileN: that.uploadManager.queue.getUploadedFiles().length,
            totalFilesN: numTotalFiles,
            errorString: errorStr,
            fileLabel: fileLabelStr,
            totalCurrBytes: fluid.uploader.formatFileSize(that.uploadManager.queue.sizeOfUploadedFiles())
        });

        that.totalProgress.update(100, totalProgressStr);
    };

    var bindDOMEvents = function (that) {
        that.locate("browseButton").click(function (evnt) {
            that.uploadManager.browseForFiles();
            evnt.preventDefault();
        });

        that.locate("uploadButton").click(function () {
            that.uploadManager.start();
        });

        that.locate("pauseButton").click(function () {
            that.uploadManager.stop();
        });
    };

    var updateStateAfterFileDialog = function (that) {
        if (that.uploadManager.queue.getReadyFiles().length > 0) {
            setStateLoaded(that);
            renderUploadTotalMessage(that);
            that.locate(that.options.focusWithEvent.afterFileDialog).focus();
        }
    };

    var updateStateAfterFileRemoval = function (that) {
        if (that.uploadManager.queue.getReadyFiles().length === 0) {
            setStateEmpty(that);
        }
        renderUploadTotalMessage(that);
    };

    var updateStateAfterPause = function (that) {
        // do nothing, moved to afterUploadComplete
    };

    var updateStateAfterCompletion = function (that) {
        var userPaused = that.uploadManager.queue.shouldStop;
        if (that.uploadManager.queue.getReadyFiles().length === 0) {
            setStateDone(that);
        } else {
            setStateLoaded(that);
        }
        updateTotalAtCompletion(that);
    };

    var bindModelEvents = function (that) {
        that.events.afterFileDialog.addListener(function () {
            updateStateAfterFileDialog(that);
        });

        that.events.afterFileRemoved.addListener(function () {
            updateStateAfterFileRemoval(that);
        });

        that.events.onUploadStart.addListener(function () {
            setStateUploading(that);
        });

        that.events.onUploadStop.addListener(function () {
            that.locate(that.options.focusWithEvent.afterUploadStop).focus();
        });

        that.events.onFileProgress.addListener(function () {
            updateTotalProgress(that);
        });

        that.events.onFileSuccess.addListener(function () {
            updateTotalProgress(that);
        });

        that.events.onFileError.addListener(function (file, error, message) {
            if (error === fluid.uploader.errorConstants.UPLOAD_STOPPED) {
                updateStateAfterPause(that);
            }
        });

        that.events.afterUploadComplete.addListener(function () {
            updateStateAfterCompletion(that);
        });
    };

    var initUploadManager = function (that) {
        var manager = fluid.initSubcomponent(that,
                                             "uploadManager",
                                             [that.events, fluid.COMPONENT_OPTIONS]);
        return that.options.demo ? fluid.demoUploadManager(manager) : manager;
    };

    var setupUploader = function (that) {
        // Instantiate the upload manager, file queue view, and total file progress bar,
        // passing them smaller chunks of the overall options for the uploader.
        that.decorators = fluid.initSubcomponents(that, "decorators", [that, fluid.COMPONENT_OPTIONS]);
        that.uploadManager = initUploadManager(that);
        that.fileQueueView = fluid.initSubcomponent(that,
                                                    "fileQueueView",
                                                    [that.locate("fileQueue"),
                                                    that.container,
                                                    that.uploadManager,
                                                    fluid.COMPONENT_OPTIONS]);
        that.totalProgress = fluid.initSubcomponent(that,
                                                    "totalProgressBar",
                                                    [that.container, fluid.COMPONENT_OPTIONS]);

        // Upload button should not be enabled until there are files to upload
        disableElement(that, that.locate("uploadButton"));
        bindDOMEvents(that);
        bindModelEvents(that);
    };

    /**
     * Instantiates a new Uploader component.
     *
     * @param {Object} container the DOM element in which the Uploader lives
     * @param {Object} options configuration options for the component.
     */
    fluid.uploader = function (container, options) {
        var that = fluid.initView("fluid.uploader", container, options);

        setupUploader(that);
        return that;
    };

    /**
     * Instantiates a new Uploader component in the progressive enhancement style.
     * This mode requires another DOM element to be present, the element that is to be enhanced.
     * This method checks to see if the correct version of Flash is present, and will only
     * create the Uploader component if so.
     *
     * @param {Object} container the DOM element in which the Uploader component lives
     * @param {Object} enhanceable the DOM element to show if the system requirements aren't met
     * @param {Object} options configuration options for the component
     */
    fluid.progressiveEnhanceableUploader = function (container, enhanceable, options) {
        enhanceable = fluid.container(enhanceable);
        container = fluid.container(container);

        if (swfobject.getFlashPlayerVersion().major < 9) {
            // Degrade gracefully.
            enhanceable.show();
        } else {
            // Instantiate the component.
            container.show();
            return fluid.uploader(container, options);
        }
    };

    /**
     * Pretty prints a file's size, converting from bytes to kilobytes or megabytes.
     *
     * @param {Number} bytes the files size, specified as in number bytes.
     */
    fluid.uploader.formatFileSize = function (bytes) {
        if (typeof bytes === "number") {
            if (bytes === 0) {
                return "0.0 KB";
            } else if (bytes > 0) {
                if (bytes < 1048576) {
                    return (Math.ceil(bytes / 1024 * 10) / 10).toFixed(1) + " KB";
                }
                else {
                    return (Math.ceil(bytes / 1048576 * 10) / 10).toFixed(1) + " MB";
                }
            }
        }
        return "";
    };

    fluid.uploader.derivePercent = function (num, total) {
        return Math.round((num * 100) / total);
    };

    fluid.defaults("fluid.uploader", {
        demo: false,

        decorators: [{
            type: "fluid.swfUploadSetupDecorator"
        }, {
            type: "fluid.manuallyDegrade",
            options: {
                selectors: {
                    enhanceable: ".fl-uploader.fl-progEnhance-basic"
                }
            }
        }],

        uploadManager: {
            type: "fluid.swfUploadManager"
        },

        fileQueueView: {
            type: "fluid.fileQueueView"
        },

        totalProgressBar: {
            type: "fluid.progress",
            options: {
                selectors: {
                    progressBar: ".flc-uploader-queue-footer",
                    displayElement: ".flc-uploader-total-progress",
                    label: ".flc-uploader-total-progress-text",
                    indicator: ".flc-uploader-total-progress",
                    ariaElement: ".flc-uploader-total-progress"
                }
            }
        },

        selectors: {
            fileQueue: ".flc-uploader-queue",
            browseButton: ".flc-uploader-button-browse",
            uploadButton: ".flc-uploader-button-upload",
            pauseButton: ".flc-uploader-button-pause",
            totalFileStatusText: ".flc-uploader-total-progress-text",
            instructions: ".flc-uploader-browse-instructions"
        },

        // Event listeners must already be implemented to use these options.
        // At the moment, the following events are supported:
        //   afterFileDialog, afterUploadStart, and afterUploadStop.
        focusWithEvent: {
            afterFileDialog: "uploadButton",
            afterUploadStart: "pauseButton",
            afterUploadStop: "uploadButton"
        },

        styles: {
            disabled: "fl-uploader-disabled",
            hidden: "fl-uploader-hidden",
            dim: "fl-uploader-dim",
            totalProgress: "fl-uploader-total-progress-okay",
            totalProgressError: "fl-uploader-total-progress-errored"
        },

        events: {
            afterReady: null,
            onFileDialog: null,
            afterFileQueued: null,
            afterFileRemoved: null,
            onQueueError: null,
            afterFileDialog: null,
            onUploadStart: null,
            onUploadStop: null,
            onFileStart: null,
            onFileProgress: null,
            onFileError: null,
            onFileSuccess: null,
            afterFileComplete: null,
            afterUploadComplete: null
        },

        strings: {
            progress: {
                toUploadLabel: "To upload: %fileCount %fileLabel (%totalBytes)",
                totalProgressLabel: "Uploading: %curFileN of %totalFilesN %fileLabel (%currBytes of %totalBytes)",
                completedLabel: "Uploaded: %curFileN of %totalFilesN %fileLabel (%totalCurrBytes)%errorString",
                numberOfErrors: ", %errorsN %errorLabel",
                singleFile: "file",
                pluralFiles: "files",
                singleError: "error",
                pluralErrors: "errors"
            },
            buttons: {
                browse: "Browse Files",
                addMore: "Add More",
                stopUpload: "Stop Upload",
                cancelRemaning: "Cancel remaining Uploads",
                resumeUpload: "Resume Upload"
            }
        }
    });

    fluid.uploader.errorConstants = {
        HTTP_ERROR: -200,
        MISSING_UPLOAD_URL: -210,
        IO_ERROR: -220,
        SECURITY_ERROR: -230,
        UPLOAD_LIMIT_EXCEEDED: -240,
        UPLOAD_FAILED: -250,
        SPECIFIED_FILE_ID_NOT_FOUND: -260,
        FILE_VALIDATION_FAILED: -270,
        FILE_CANCELLED: -280,
        UPLOAD_STOPPED: -290
    };

    fluid.uploader.fileStatusConstants = {
        QUEUED: -1,
        IN_PROGRESS: -2,
        ERROR: -3,
        COMPLETE: -4,
        CANCELLED: -5
    };

    /*******************
     * ManuallyDegrade *
     *******************/

    var renderLink = function (renderLocation, text, classes, appendBeside) {
        var link = $("<a href='#'>" + text + "</a>");
        link.addClass(classes);

        if (renderLocation === "before") {
            appendBeside.before(link);
        } else {
            appendBeside.after(link);
        }

        return link;
    };

    var toggleVisibility = function (toShow, toHide) {
        // For FLUID-2789: hide() doesn't work in Opera, so this check
        // uses a style to hide if the browser is Opera
        if (window.opera) {
            toShow.show().removeClass("hideUploaderForOpera");
            toHide.show().addClass("hideUploaderForOpera");
        } else {
            toShow.show();
            toHide.hide();
        }
    };

    var defaultControlRenderer = function (that) {
        var degradeLink = renderLink(that.options.defaultRenderLocation,
                   that.options.strings.degradeLinkText,
                   that.options.styles.degradeLinkClass,
                   that.enhancedContainer);
        degradeLink.addClass("flc-manuallyDegrade-degrade");

        var enhanceLink = renderLink(that.options.defaultRenderLocation,
                   that.options.strings.enhanceLinkText,
                   that.options.styles.enhanceLinkClass,
                   that.degradedContainer);
        enhanceLink.addClass("flc-manuallyDegrade-enhance");
    };

    var fetchControls = function (that) {
        that.degradeControl = that.locate("degradeControl");
        that.enhanceControl = that.locate("enhanceControl");
    };

    var setupManuallyDegrade = function (that) {
        // If we don't have anything to degrade to, stop right here.
        if (!that.degradedContainer.length) {
            return;
        }

        // Render the controls if they're not already there.
        fetchControls(that);
        if (!that.degradeControl.length && !that.enhanceControl.length) {
            that.options.controlRenderer(that);
            fetchControls(that);
        }

        // Bind click handlers to them.
        that.degradeControl.click(that.degrade);
        that.enhanceControl.click(that.enhance);

        // Hide the enhance link to start.
        that.enhanceControl.hide();
    };

    var determineContainer = function (options) {
        var defaults = fluid.defaults("fluid.manuallyDegrade");
        return (options && options.container) ? options.container : defaults.container;
    };

    fluid.manuallyDegrade = function (component, options) {
        var container = determineContainer(options);

        var that = fluid.initView("fluid.manuallyDegrade", container, options);
        var isDegraded = false;
        that.enhancedContainer = component.container;
        that.degradedContainer = that.locate("enhanceable");

        that.degrade = function () {
            toggleVisibility(that.enhanceControl, that.degradeControl);
            toggleVisibility(that.degradedContainer, that.enhancedContainer);
	        isDegraded = true;
        };

	    that.enhance = function () {
            toggleVisibility(that.degradeControl, that.enhanceControl);
            toggleVisibility(that.enhancedContainer, that.degradedContainer);
	        isDegraded = false;
	    };

        that.isDegraded = function () {
	        return isDegraded;
	    };

        setupManuallyDegrade(that);
        return that;
    };

    fluid.defaults("fluid.manuallyDegrade", {
        container: "body",

        controlRenderer: defaultControlRenderer,

        defaultRenderLocation: "before",
        strings: {
            degradeLinkText: "Switch to the standard single-file Uploader",
            enhanceLinkText: "Switch to the Flash-based multi-file Uploader"
	    },
        selectors: {
            enhanceable: ".fl-ProgEnhance-basic",
            degradeControl: ".flc-manuallyDegrade-degrade",
            enhanceControl: ".flc-manuallyDegrade-enhance"
        },

        styles: {
            degradeLinkClass: "fl-uploader-manually-degrade",
            enhanceLinkClass: "fl-uploader-manually-enhance"
        }
	});

})(jQuery, fluid_1_1);


text:
Is Supersweet Kelly Ripa Secretly a Diva? The Live! With Kelly and Michael Drama, Explained.
By Heather Schwedel
Kelly Ripa at the 2016 Vanity Fair Oscar party.
Adrian Sanchez-Gonzalez/AFP/Getty Images
The friendly-bordering-on-flirtatious banter between Kelly Ripa and Michael Strahan is the fuel that fires their daytime TV show, Live! With Kelly and Michael—which is why it's so surprising to see Page Six using words like "meltdown" and "betrayal" to describe what's going on right now between the pair behind the scenes. On Tuesday, TMZ reported that Ripa was furious that her co-host was leaving the show for a spot on Good Morning America. She reportedly called in sick for the rest of the week in protest, leaving Strahan to vamp alongside a succession of fill-in co-hosts, including Ana Gasteyer and Erin Andrews. What exactly is going on here, and whose side should you be on? Read on for our best attempt to explain.
According to TMZ, Disney CEO Bob Iger engineered the plan to bump Strahan up to ABC's more prominent morning show, Good Morning America. Ripa and longtime producer Michael Gelman weren't told until Tuesday morning, leaving them feeling "blindsided." "You work on a show for 15 years and all of a sudden you're not even told about this seismic change?" one Ripa-sympathetic insider told Page Six, which also reported that Ripa was supposed to get more advance warning, but the story got out early and ruined that plan. Though there could theoretically be some other explanation for Ripa's absence, her nonattendance this week seems to have been an attempt to make the network sweat.
The show has a history of host changes. Live! premiered in national syndication in 1988 as Live! With Regis and Kathie Lee, hosted by Regis Philbin and Kathie Lee Gifford. Gifford left the show in 2000 and the next year was replaced by Kelly Ripa, then best known for her acting on All My Children. Philbin himself left the show in 2011, and after a monthslong search, former football player Michael Strahan was named the new co-host in 2012. There he has stayed for the past four years. (If you, like me, have a soft spot for the Reege and didn't follow Strahan during his football days, you've never quite recovered from the former's departure.)
"That Ripa and Strahan would seem to be icing each other out to such an extreme degree, Strahan largely silent about his cohost's discontent and Ripa just silent, is riveting," Time wrote of the drama. Tiny, formidably fit Ripa has long been the definition of peppy, not just on her own show but in game, self-deprecating guest spots on shows like Broad City and Watch What Happens Live, where she joined Andy Cohen to dish about their friendship with Anderson Cooper. Someone who refuses to show up to work because she didn't get enough notice about someone else's job change certainly counters that America's Sweetheart image. Strahan's GMA gig doesn't start until September—how are we going to watch Ripa hold hands, seat-dance, and share personal anecdotes with him until then when we know that she's fuming at him off camera? Maybe we'll have to acknowledge all of the work that goes into creating that cheery persona in the first place. If nothing else, the Live! drama certainly proves that wherever you work, a man in a higher-up position can usually come in and fiddle with the formula.

redpajama_set_name: RedPajamaCommonCrawl


text:
By Marcia Riefer Johnston published December 30, 2015
Content Strategy Musings for Forward-Thinking Marketers
"Quick story." If that phrase makes you think of CMI Chief Strategy Officer Robert Rose, you've probably been following Content Strategy for Marketers, the weekly newsletter that he kicked off a year ago.
Every Saturday, subscribers eavesdrop on his conversations, learn about what he's reading or watching or listening to, and discover, as he weaves one quick story into another, his latest observations on content marketing and content strategy.
You can download an anthology of all of Robert's Content Strategy for Marketers musings, and keep reading for a sampling of Robert's messages that I've found especially thought-provoking, useful, and inspiring.
(Note: I've identified the newsletter's edition title in applicable references so you can find the rest of the content more easily in the e-book.)
Treat content as a strategic asset
"Content is perhaps the most important business asset that we fail to manage as well as we could," Robert says.
What does it mean to treat content as a business asset – a strategic asset – and why should we do it?
"We mostly rationalize the value of content against the priorities of individual functions of the business rather than its entirety. In other words, we look at content as a feature of the business, not as an ultimate strategic value of the business … Content created and managed well, repeatedly, defines a business. That's why it's so important." – Content Is What We Are
Content created and managed well, repeatedly, defines a business. That's why it's so important via @robert_rose Click To Tweet
The volume and complexity of corporate content make treating content as a strategic asset one of the biggest challenges of our day.
"I believe that a crisis is fast approaching for many enterprise marketers who are scaling their content-production efforts … We all know that we need to produce content like a media company. But our existing people, practices, and technology are not there yet." – What Is Big Content?
In that newsletter, Robert also tells us of a dream in which his third-grade teacher appears holding a goat. What does it mean? Tune in next time, he says. (Robert has worked in the movie biz. He will mess with you.)
Ponder this: In what ways does your organization already treat content as a strategic asset – something that people plan, distribute, promote, and manage so that it supports your business goals in measurable ways? What more might you do?
Content Strategy for Marketers: Insights From Kristina Halvorson
Look beyond the content to the content experience
It's not surprising that, as co-author of a book called Experiences: The 7th Era of Marketing, Robert talks about the importance of the ways customers experience our content. Here are some examples:
"Content defines every experience we create for our customers – including our product or service. Thus, it cannot be a neutral part of any one experience. Content either enhances the experience or degrades it." – Content Is What We Are
"Content strategists and marketers need to push interfaces beyond their traditional boundaries. (How quickly yesterday's 'innovative' becomes today's 'traditional.') We need to imagine ways to hack content-driven experiences." – Hacking Content Experiences
"For some reason, customer-facing content – the thing that creates the customer experience our business will be known for – is treated differently. When a company is stuck in this pattern, content … may be hurting the brand." – Who's Afraid of Strategy in Content?
Having once worked for a company that excluded content from its user testing, I want to cheer every time I hear this message. The company I worked for in those days had formed a UX group, a big deal back when the term "user experience" was new. I wrote user documentation for highly regulated products that might affect life-and-death decisions. It seemed only logical to me – mandatory, even – that the UX group would test not only the product usability but also the information usability. Customer-facing content is part of the customer experience, right? Customers, you know, face it.
Didn't happen. I couldn't convince anyone in the testing group to include the documentation in the usability tests. The company defined user experience as product experience. Content wasn't seen (by the suits) as part of the product; it didn't count.
I still get worked up when I think about that mindset. Deep breaths. Robert is here. Content, he says, is part of the customer experience. It may just be the most important part.
#Content is part of the customer experience. It may just be the most important part. Click To Tweet
Ponder this: How does your organization find out about the customer experience of your content? How could it find out more?
Noz Urbina Talks Adaptive Content, Customer Experience
Get techier
Content pros resemble – or need to resemble – IT pros. Robert talks about the "blistering speed" at which enterprise technology is evolving. Even at that speed, technology is not changing fast enough to keep up with what publishers want to accomplish with it. He quotes Zemanta CEO Todd Sawicki: "We're sort of all dancing around, waiting for the tech to get better."
THANKS TO ONE OF OUR SPONSORS:
3 Reasons Why CMOs Can't Survive Without a Content Marketing Hub
Social media and digital content have created a marketing landscape that requires a new set of tools to manage marketing teams, integrated strategies, and growing amounts of content. Find out how you can transform your content marketing with the one tool you can't afford to live without in 2015: The Content Marketing Hub.
In the meantime, content professionals have to embrace technology, despite its imperfections, lest we put our employers and ourselves at a disadvantage. Robert illustrates this point with numbers:
"In just one year, the number of marketing-technology companies has gone from 947 to more than 1,800. It has doubled in a year … I searched through a couple of job sites for 'content strategists' and found on one site almost 5,000 jobs that contained 'well versed in technology' as part of the job description … What does all this mean? … As you move through your career as a content marketer or content-strategy practitioner, how well do you need to know technology? The answer is, as well as possible." – How Well Do You Need to Know Technology?
You might wonder why Robert's research included looking at what it takes to do a content strategist's job. Content marketers are not content strategists. But content marketers do have a lot to learn from content strategists. That's one of CMI's big themes for 2015.
Getting techier is just one way in which we need to learn from the folks in related content professions.
Content marketers are not content strategists. But they do have a lot to learn from content strategists. Click To Tweet
When it comes to IT, we'll never keep up with the changes. Keeping up isn't the goal. The goal is to keep learning.
Robert pursues a similar theme when he evokes Bruce Wayne just after he has climbed a mountain in the movie Batman Begins.
"Bruce Wayne, searching for training to master his fears, gives a symbolic blue flower to Henri Ducard (no spoilers). Bruce has been told that delivering this flower to the top of the mountain will enable him to find what he's been looking for. Henri takes the flower and says, 'To manipulate the fears in others, you must first master your own.' Then he asks, 'Are you ready to begin?' Breathless, Bruce says, 'I can barely stand.' With a powerful kick to the chest that knocks Bruce halfway across the room, Henri yells, 'Death does not wait for you to be ready!'" – Are You Ready for the Next Level of Digital Content?
We are Bruce Wayne, and technology is about to deliver that kick to the chest. How about it? Robert asks. (Is that a blue flower in his hand?) Are we ready to begin?
Ponder this: What do you need to learn next about technology? How will you get that knowledge? When will you do it?
The Technology Behind The Language of Content Strategy
Don't get too techie
As important as it is that we get techier, Robert reminds us not to overvalue the role of technology in our jobs. He says that great content "strikes the right balance between human care and technology – between art and science – resulting in more-resonant audience experiences."
He compares the classic movie Jurassic Park to The Hobbit trilogy and other movies produced today. Whereas Steven Spielberg struck the right balance between human care and technology, blending in computerized effects "only when he needed them," many directors today "overuse computer-generated imagery. And audiences can sense that something is wrong. The suspension of disbelief is broken."
One place where marketers need to avoid overdoing tech is in personalization. Robert tells of a colleague who wondered how personalized email can get before recipients feel "weirded out."
"Yeah, this is the same 'snap' that today's moviegoers experience. Computer and robotics engineers have a name for this phenomenon: the Uncanny Valley. The 'valley' is the dip in people's comfort level when they encounter a nearly human image – a likeness that's a little bit off. People feel repulsed rather than attracted to the almost-but-not-quite real. With our marketing content, this 'snap' into the Uncanny Valley is not good. It's lazy directing, and it's lazy content." – Can You Be the Steven Spielberg of Content?
How do we as marketers avoid the Uncanny Valley? Be like Spielberg. Use technology only when you need it. Strike a balance between technology and humanity.
Use technology only when you need it. Strike a balance between technology and humanity by @MarciaRJohnston Click To Tweet
Ponder this: In what ways might your customers feel weirded out or even repulsed by the experiences they have with your organization's content? If you think no one is ever repulsed, how do you know? How could you test your assumptions?
Face your fear
Robert calls for marketers to change. At the same time, he understands the paralyzing fear of change. He stares down fear in several newsletters.
He channels Seth Godin, noting that when people raise their hands, they often unthinkingly keep them low. Robert urges us to raise our hands all the way up and avoid making "half-hearted attempts to tweak traditional marketing campaigns into 'content campaigns'":
"Expanding the remit of marketing into a group that creates valuable, content-driven experiences (rather than simply describing the product) using product-development methodologies for that content (rather than campaign-minded tactics) is the evolution of marketing … We'd better not be afraid to give it our all to make this evolution happen." – Are We Reaching High Enough?
Robert again urges us to take action in the face of fear. In that newsletter, he recalls the Starbucks #RaceTogether campaign, which encouraged baristas to write the hashtag on cups and to talk about race.
"It was immediately met with a backlash on social media, and it was ridiculed by John Oliver on Last Week Tonight and on marketing blogs all over. It doesn't matter what you think of the Starbucks campaign. It doesn't matter whether its strategy or execution was flawed. They tried something big." – Action Reduces Fear
Image source: Starbucks
All of us should try big things, Robert says, and we shouldn't stop just because we get scared. Trying big things "is the key with becoming strategic with content for creating differentiated customer experiences. Every action we take reduces the risk of the next. It's only through continued inaction that the risk of the first step increases."
While leaders at all levels need to take action in the face of fear, those who control the big budgets often find themselves in Robert's sights: "We have to change. We have to get over the fear of the different. The C suite must see content as one of the most important things to get right." – Who's Afraid of Strategy in Content?
Content is one of the most important things for your organization to get right. Don't let fear stop you. Click To Tweet
Whether or not we have the support of the C suite, though, he challenges each of us to look for opportunities to do what we can as he shares with a characteristic flourish:
"Can we pick one? Take one action? Even if we fail at it, that one action reduces the fear of the next. And one of those actions just might be the one that changes everything." – Action Reduces Fear
Go ahead, apply those words to your life. Robert dares you.
Ponder this: What one action calls to you right now? If you took that action, what's the worst that could happen?
The Content Strategy for Marketers newsletter goes out via email every Saturday. I look forward to reading it every week. I bet you would, too. One of these weeks, we're bound to find out what happened with the third-grade teacher and the goat.
Author: Marcia Riefer Johnston
Marcia Riefer Johnston is the author of Word Up! How to Write Powerful Sentences and Paragraphs (And Everything You Build from Them) and You Can Say That Again: 750 Redundant Phrases to Think Twice About. As a former member of the CMI team, she served as Managing Editor of Content Strategy. She has run a technical-writing business for … a long time. She taught technical writing in the Engineering School at Cornell University and studied literature and creative writing in the Syracuse University Masters program under Raymond Carver and Tobias Wolff. She lives in Portland, Oregon. Follow her on Twitter @MarciaRJohnston. For more, see Writing.Rocks.
Other posts by Marcia Riefer Johnston


text:
diPas healthcare
Monitoring sports parameters
INDUSTRY AND TRADE
control of access
Care4u and FCS working together to ensure the wellbeing of sportspeople
CARE4U is made up of four important companies based in the Alto Adige/Südtirol region − Alperia, Systems, Quickcom and Mastech. It was founded in order to place its technology and experience at the service of the community to enhance and ensure the wellbeing of the citizenry at large. Care4u and FC Südtirol have developed an innovative pilot project to enable monitoring of sportspeople.
Care4u and FC Südtirol have been implementing their already strong and consolidated partnership through an innovative pilot project to enable full monitoring of sportspeople. By pooling their respective experiences and requirements, as well as their know-how and human resources, the two concerns have commenced development of an effective and functional system that may be exported to other contexts. The aim is to implement a system that, by means of objective surveying techniques, seamlessly blends the ambits of sport and of health.
The company's sales managers, who are experts in the medical sector, illustrate the particular nature of this project: "The common goal is to develop a pilot remote data-sensing project. Put more simply, we started out from a high-performance thermal scanner, already in use for months at the FCS Center, and we went on to more sophisticated user-friendly tools able to collect further indications and data, such as the initial indications on levels of a muscular injury, as well as values pertaining to the daily activities of the individual, in all conditions. Full-spectrum monitoring, through a sophisticated functional sensor system, with data sent to a special IT platform (diPAS), where patient "histories" are generated and stored, and the various parameters are checked, providing an objective picture of the real situation of the sportsperson, thus also enabling prevention as part of a project that progresses by activating a circuit that is both virtuous and synergistic"
Care4u's mission and vision
"Care4u is a company that was founded with the aim of placing its technology and experience at the service of the community, to enhance and ensure wellbeing for the citizenry at large. Our IT platform provides various telecare or remote monitoring services through ongoing monitoring of patients, so as to assist them wherever they may be located, for example at inpatient and similar facilities (residences for the elderly, nursing homes, clinics, hospitals) or in their own homes".
How does the system you use work?
"Our product, called diPAS, is a smart digital system that, with the help of special sensors and through specially created software, uses extremely precise algorithms that enable us to monitor and assist patients both bedridden and self-sufficient. It relays their movements and state of health in real time. It is from these experiences and these tools that we are now launching our new pilot project in the field of sports to expand our scope".
What precisely does this system provide?
"Thanks to various telecare or remote monitoring services, the diPAS system can also provide viable support on the social and health fronts to prevent chronic illnesses and other illnesses that can be treated with optimal therapy more promptly and adequately, thus ensuring considerable economic savings. Care4u sees itself as a company capable of guaranteeing suitable full-spectrum solutions, thanks to its experience, sensitivity and technological resources".
Postcode/zipcode
SELECT FROM DROPLISTHealthTourismBusinessSportIndustry
I accept the conditions governing the processing of my personal data and I declare that I examined them via the following link
I permit use of my personal data for marketing purposes (i.e. transmission of e-mail messages and other notices)


While event planners are using technology in some aspects of the event life cycle, they haven't embraced these tools across the board, and 42 percent consider tech in general a pain point, according to a survey conducted by Etouches, a global provider of cloud event-management software and sourcing solutions. Results of the study, which asked 239 planners from around the world about the top pain points they encounter throughout the cycle of an event, were announced at the Global Business Travel Association's Media Day on July 16.
Among other technology-related findings, only 20 percent of respondents reported using a venue-sourcing tool, and just 7 percent used a strategic meetings-management program. And despite declaring on-site communication as a major pain point, just 47 percent of respondents said they use a mobile app to communicate with attendees during events.
When it came to identifying pain points in the pre-event phase, nearly 60 percent of respondents cited targeting the right people with the correct event content as a common struggle. Dealing with attendee registration was a challenge for more than half of the respondents, and 43 percent said managing logistics such as room setup, audiovisual needs and the like was a struggle.
On-site challenges were varied and impact event planners across the board. As referenced above, a big challenge cited by 44 percent of respondents was communication with event attendees. In addition, 42 percent of planners said the registration and check-in process were pain points.
The biggest post-event pain point cited by respondents is event measurement. The good news is that a majority of respondents (65 percent) indicated they are already measuring event return on investment. However, figuring out how to analyze the data and use it in meaningful ways to improve future events is still a challenge. Overall, attendee satisfaction was rated the most important indicator for a gathering's success, per 48 percent of those polled.
"Technology and attendee satisfaction are clearly linked. To drive satisfaction -- and the overall success of events -- planners must evaluate the areas where technology can drive the most impact and improve success rates," said Mike Mason, vice president, sourcing and hospitality solutions, for Etouches. "Event technology isn't just making event planners more effective and efficient. It's redefining the attendee experience, creating new opportunities for engagement and ROI, and driving industry transformation."


Turn the whole world into a keyboard. It's a simple Invention Kit for Beginners or Experts doing art, engineering, and everything in between.
Alligator Clip two objects to the Makey Makey. For example, you and a banana (or an ice cube, or a kitty cat). When you touch the banana, the computer just thinks a keyboard key is being pressed, so you can type a letter, jump in a video game, take a picture, or play some music.
Who is Makey Makey For?
Kids, Artists, Educators, Engineers, Inventors, Makers. Really it is for everyone.
What materials work with Makey Makey?
Ketchup, Pencil Graphite, Finger Paint, Fruits, Plants, Coins, Your Grandma, Silverware, Anything that is Wet, Pets, Aluminum, Rain, and hundreds more. Really any material that can conduct at least a tiny bit of electricity.
Make a banana piano, play Mario on a play dough game pad, take a selfie of your cat every time she drinks water. How? First, load up a computer program or any webpage. Let's say you load up a piano.
Then, instead of using the computer keyboard buttons to play the piano, you can hook the Makey Makey to something fun, like bananas, and the bananas become your piano keys.
#12 Goldiblox Award Winning Construction Kits for Girls!


text:
A rendition of Legoland's Dragon Coaster. The theme park opens on October 15 2011.
Dollars and sense?
by CAMILLE CHIN • August 2011
Last September, we ran a Practical Traveller item called "Mickey plus Minnie = more money." A year later, it's time to run that kind of item again. Disney World in Florida has raised its rates once more. A one-day, one-park admission ticket is now US$85, a one-day, park-hopper ticket is US$120 and a one-day, water-park fun and more ticket is US$140, all plus tax for ages 10 plus. Universal has also raised its one-day, one-park admission ticket to US$85 and one-day, two-park ticket to US$120 for the same age group. Does raising single-day tickets so ridiculously really make discounted, multi-day or week-long tickets more attractive? Not to us; more days at a park means more money on food, souvenirs etc. It does make the tickets at the new, world's-largest Legoland in Florida more attractive, however. Scheduled to open on October 15, the 50-million, Lego-brick park will be the fifth of its kind in the world. One-day tickets will be US$65 for ages 13 and up and US$55 for kids three to 12, and seniors 60 plus. florida.legoland.com.


TV Guide Magazine has been kind to Clay Aiken. He has been featured on numerous covers and has had many mentions in the magazine. But, will TV Guide still be around to help support Clay and other prominent stars?? There are many in the business world that believes the magazine is on its last legs.
On April 3, 1955, TV Guide landed on newsstands, with a cover photograph of Desi Arnaz and Lucille Ball. It soon became a fixture of American culture.
TV Guide has fallen far since its glory days. In 1980, it sold almost 20 million copies a week. Now, it has a circulation of 3.2 million.
TV Guide magazine plans to start a new web site very soon. It will not have TV listings. It will feature blogs, chats and behind-the-scenes material from cover shoots. This is a far cry from what started out as a weekly schedule of TV programs.
It can only be hoped that TV Guide finds its place in the magazine and web world. Clay Aiken and other stars need a place where they can be seen as the stars they are.
Which one of the covers do you like the most?? Let us know your favorite.
I love the "Clay is #1" cover because, well, he is!!!
I had to choose the "Clay is #1" cover because it's true and I love the pic of him and Raleigh!!
I hope the TV Guide magazine survives!
Nice seeing all the covers together. I didn't remember the colored from 7/24/05.
I have all of those and love all those covers but I keep going back to the B&W cover. Just something about it makes if my favorite.
Thanks for putting them all together in one place for us.
I do subscribe to the TV Guide, but have to admit, since the TV Guide changed the format to the larger size, it is not as user friendly. It is easier to use the directories that are on TV now. It is also starting to look more and more like People Magazine.
Love to see Clay on that large cover though.
BTW – It was another hard choice.
I had to pick the B&W photo, because it's one of my all time favorite pictures of Clay. Simply gorgeous!!!
Cute idea for a poll. I had to pick Clay is #1…just HAD to!
Picked the black and white. Remember dashing out to buy both versions of that TV Guide because I had heard they were selling like hotcakes! I think I bought the last one in the store. Those are the only two TV Guides I have ever purchased. Didn't realize he was on 6 covers.
I had to vote for "Clay is # 1". I miss the earlier days when we were rushing out to buy whatever magazine had Clay on the cover.
That was hard. I voted for #5. Black and white, just a man with his microphone. He looks hot too!
I was just going through my "Clay clack" yesterday and came across all those tv guides. My Christmas covers must be in another place…aaak…where the heck ARE they? I loved the first one as well.. he truly IS #1 isn't he? The B&W covers are drool worthy. Gah!
I love them all, but voted for the Clay Opens Up (b/w). I just love that look on him!!
I love all of them however #1 and #6 how singing saved his life are my favored.
I love # 1. And Clay will always be #1!
Hate the tv guide, since they made it a large magazine. They ruined a good thing, and if they went back to that format, I bet their sales would increase.
Error: Error validating access token: Session has expired on Tuesday, 21-Aug-18 16:13:01 PDT. The current time is Monday, 22-Apr-19 23:16:29 PDT.


Faux Fur Wedding Wrap/Shrug. Ivory.
This a bright, fresh ivory soft and snuggly bridal shrug.
Perfect for a bride or bridesmaid that would like to cover their arms. It isn't too thick so could be worn all year.
Our wedding was full of love, happiness and friendship. I have a few decorations to sell such as my Sauce Caddies – perfect if you like condiments like we do! Some wire flowers to be wound round your bouquets or to be used as cake decorations. I also have some colourful Day & Evening invitations available.
My main reason for setting up this account is to sell two gorgeous wedding dresses. I bought two as I couldn't decide which one I liked best however nether have been worn as I fell pregnant before my wedding and therefore had to purchase a new dress to accommodate my pregnancy bump. Both these dress are for a size 10-12 lady who wants something different.


The UNESCO World Heritage Volunteers Initiative was launched in 2008 within the framework of the World Heritage Education programme, in collaboration with the Coordinating Committee for International Voluntary Service (CCIVS) to mobilize and involve young people and youth organizations in World Heritage preservation and promotion.
CCIVS is in official partnership with UNESCO – associate status, liaison status with the FAO and special consultative status with the ECOSOC. CCIVS supports in the implementation of actions developed together with or proposed by these agencies.
CCIVS was created under the aegis of UNESCO in 1948 and its Secretariat is still in UNESCO House today. Working closely together, CCIVS complements UNESCO intellectual activity and goals in the fields of Education, Culture, Sciences and Communication through a hands-on, non-formal education approach transforming societies at the grassroots level. CCIVS has actively contributed to programs and campaigns from diverse UN agencies, and was involved in discussions concerning the creation of the United Nations Volunteers. It received in 1987 the title "Messenger of Peace" by UN Secretary General, Perez de Cuellar.
IVS contributes to the achievement of the Sustainable Development Goals.


text:
XO Group Furthers Mission of Empowering Women by Teaming Up with I AM THAT GIRL and Honoring FoundHERS on International Women's Day
XO Group FoundHERS Movement Celebrates Women of All Ages Who Are Founders of Their Own Purpose & Mission in Life
NEW YORK, NY/March 8, 2018–In honor of International Women's Day, XO Group Inc. (NYSE: XOXO) kicks off a partnership with I AM THAT GIRL, a nonprofit organization that empowers girls to speak their truth, love themselves and be the leaders of the future, with the #FutureIsFoundHERS event at its NYC headquarters tonight. Furthering XO Group's long-standing mission to support and empower women, the #FutureIsFoundHERS event will host top female leaders to honor the achievements of high school and college-aged girls from I AM THAT GIRL who are owning their own mission in life and creating change in their communities. The partnership with I AM THAT GIRL marks XO Group's expansion of its successful FoundHERS event series into digital and social content highlighting the stories of female leaders, plus a reciprocal mentorship program for all ages, and the creation of a female empowerment and leadership curriculum that will be shared with the 300 local chapters of I AM THAT GIRL.
Since XO Group launched in 1996 with a female cofounder, the company has empowered millions of women to stay true to themselves. From giving brides on The Knot the confidence to break the rules brilliantly, to encouraging moms on The Bump to free themselves of mommy-judgments, the family of brands within XO Group has always sought to breed generations of FoundHERS—women who love who they are and who are founders of their own purpose and mission in life, however they choose to define it. FoundHERS can exist at any age, occupation or job title, and XO Group created the FoundHERS movement and partnership with I AM THAT GIRL to show that women can create change and be mentors at any age or any stage of their life or career.
"We're incredibly proud to honor the achievements and support the growth of our future female leaders by partnering with I AM THAT GIRL," said Dhanusha Sivajee, Executive Vice President, Marketing & Editorial, XO Group Inc. "Now more than ever do women need to band together and invest in our future politicians, moms, CEOs, founders and leaders of our world."
"It's a privilege to partner with an organization that shares our values in supporting and inspiring women in all walks of life. We are thrilled to team up with XO Group, collaborating to create programs that continue to build stronger, braver, compassionate female leaders," said Christy Reeves, CEO, I AM THAT GIRL. "Together, we are celebrating girls and bringing out the best of people in our communities."
In 2016, XO Group created the FoundHERS event series featuring female leaders sharing their professional journeys—the highs, lows, challenges and wins—in a candid fireside chat. Tonight, XO Group will bring together 150+ badass females under their roof to celebrate FoundHERS and shine a light on I AM THAT GIRL members Jolie Brownell, Brooke Overturf, Juliette Mogenson, Shana Kheradyar and Trinity Monteiro, who have defined their purpose and mission and are using it to help others.
XO Group will continue to share the stories of #XOFoundHERS through in-person events, on social media and online. To follow the latest news and featured FoundHERS, go to www.theknotworldwide.com/foundhers or follow #XOFoundHERS on social media.
About XO Group Inc.
Our mission is to help people navigate and truly enjoy life's biggest moments together. Our multiplatform brands guide couples through transformative lifestages—from getting married to moving in together and having a baby—and include The Knot (the #1 wedding planning resource), The Bump (a leading pregnancy and parenting brand), The Nest (the hip guide to all things home for new couples), and GigMasters (a leading event marketplace). The company is publicly listed on the New York Stock Exchange (XOXO) and is headquartered in New York City.


text:
← Negotiator Not a Pirate, Hung-jury on Hostage Taking Charges
New Captain(s) of the Ship →
Specialized Chambers to Prosecute Kingpins – Long promised
December 16, 2013 by Roger L. Phillips Leave a comment
The Regional Anti-Piracy Prosecution and Intelligence Coordination Centre (RAPPICC) in Seychelles, the objective of which is to undermine the piracy business model by bringing pirate leaders, financiers and enablers to justice
As we have reported here, here, and here, the UN Security Council has long expressed its interest in the creation of specialized chambers to prosecute pirates in the East African region. On 18 November 2013, the UN Security Council again raised the prospect of creating such chambers (Resolution 2125), following the UN Secretary General's report on piracy off the coast of Somalia of 21 October 2013 (UNSG Report), which Matteo analysed here. This comes on the heels of a donor conference at which substantial funds were pledged to assist Somalia. It also comes as the failure to prosecute pirate kingpins has become increasingly conspicuous.
In October 2011, the UN Security Council decided in Resolution 2015: "to continue its consideration, as a matter of urgency, without prejudice to any further steps to ensure that pirates are held accountable, of the establishment of specialized anti-piracy courts in Somalia and other States in the region with substantial international participation and/or support," and requested the UN Secretary General to report on the modalities for the creation of such specialized chambers. The UNSG provided his report in January 2012 indicating the costs and estimated capacity of creating specialized chambers in several regional states and regions of Somalia, including Kenya, Tanzania, Seychelles, Mauritius, Puntland and Somaliland. Since that time, prosecutions have indeed continued in each of these countries, with some (mainly Kenya and Seychelles) bearing the burden. However, no specialized chambers have been created to date.
Backlog of Cases
The UNSG Report notes that 53 suspects are currently on remand for trial as pirates in Mauritius, Kenya and Seychelles. This is despite the significant contribution of the international community into prosecution and incarceration of pirates in the regular court systems of states such as Kenya, Mauritius and Seychelles, the most prominent being UNODC's counter-piracy programme valued at $60 million. Resolution 2125 laments that "the continuing limited capacity and domestic legislation to facilitate the custody and prosecution of suspected pirates after their capture has hindered more robust international action against the pirates." This translates to a backlog of cases in the judiciaries relied upon by the international community to prosecute such cases. As compared with regular criminal courts in these countries which suffer from significant backlogs, it is hoped that specialized piracy chambers with particularized knowledge of piracy cases would permit more efficient prosecutions.
Reduction but threat of resurgence
Apart from the persistent backlog of cases for past pirate attacks, the UNSG and UNSC indicate that the conditions are ripe for attacks to surge once again. While acknowledging the significant reduction of pirate attacks off the coast of Somalia, Resolution 2125 warns that this situation is reversible. More specifically, the UNSG concludes that "the situation with regard to the rule of law, security, development and governance in Somalia that has allowed piracy to arise has not changed sufficiently so as to deter criminals from attacking ships and holding seafarers hostage for ransom. Pirate attacks may increase if the international naval presence is reduced or if commercial vessels relax their self-protection measures." He further estimates that due to the proceeds already collected from prior ransoms, pirates retain the capacity to attack vessels. Finally, he indicates that "several pirate financiers are engaging in other criminal activities as well and that they have built significant paramilitary capacities on land, and thus have the potential to destabilize the region." In short, the UNSG appears to call for continued action on piracy until pirate criminal enterprises have been dismantled. This would keep the international community busy for the foreseeable future.
Kingpins the focus
Resolution 2125 and the UNSG report discuss all pirate perpetrators, but the clear focus of both is on pirate kingpins, the failure to prosecute such high-level perpetrators, and the dangers this creates for the broader goal of stabilizing Somalia. The UNSG notes that "neither the Government of Somalia nor the Puntland administration nor any other local authority had seriously investigated and prosecuted any senior pirate leaders, financiers, negotiators or facilitators, and that the leadership of the principal piracy networks and their associates continued to enjoy impunity and had not been hindered in their ability to travel or transfer funds." Resolution 2125 emphasizes that if specialized piracy courts are created, they must have jurisdiction over "anyone who incites or intentionally facilitates piracy operations, including key figures of criminal networks involved in piracy who plan, organize, facilitate, or illicitly finance or profit from such attack." The focus is clear.
As we noted here, the identities of pirate kingpins are well-known. The difficulty has been tracing proceeds, obtaining evidence, and bringing that evidence to court (and likely gaining custody of the Accused). There have been efforts to foster international cooperation to prosecute pirates. Notably, the Regional Anti-Piracy Prosecution & Intelligence Coordination Centre (RAPPICC) in Seychelles promises to "bring together experts from around the world to share intelligence and information which will help to tackle the king-pins and financiers of piracy." Yet, despite the significant international resources brought to bear on anti-piracy operations, including the deployment of navies and international assistance for local prosecutions, pirate kingpins have not been brought to justice.
Indeed the creation of such chambers could have little purpose, but for the prosecution of pirate kingpins considering (1) there are few new arrests of pirates as reported attacks are insubstantial and (2) it is completely unfeasible to prosecute low level offenders who have been caught and released since the evidence against them is destroyed as a matter of course (see Matteo's post here). Perhaps the rationale behind supporting the specialized piracy chambers is that a complex prosecution of a pirate financier and pirate leader will be more feasible in a court with particularized knowledge and resources devoted to such trials.
To date, there appears to be a split in the UNSC on the issue of specialized piracy chambers, with some enthusiastically supporting the idea and others permitting its exploration but little else. In Resolution 2125, the UNSC notes with appreciation the substantial pledges of support at a recent donor conference for Somalia and reiterates its decision to continue to consider the establishment of "specialized anti-piracy courts in Somalia and other States in the region with substantial international participation and/or support." Perhaps because donors have been forthcoming, the UNSC has chosen to re-launch the 2011 idea of specialized chambers. The UNSC also requests states including Somalia and other states in the region to report back on "on their efforts to establish jurisdiction and cooperation in the investigation and prosecution of piracy." Since specialized piracy chambers have been discussed for over two years with only a feasibility study to show for it, whether such chambers will come to fruition is uncertain. Particularly as pirate attacks are at a low ebb, donors may be reluctant to shell out cash for such a focused activity especially outside of Somalia (such as in Kenya and Seychelles) when Somalia is in dire need of funds in all sectors of its government.
Filed under Somalia Tagged with Governance, kingpins, Piracy Tribunal, Seychelles


Fern is a trip, but totally approachable. She is a salt-of-the-earth optimist, probably vegetarian, slightly infused with psychedelics and meticulous. She's lovely and generous, but you might not always understand her perspective. Nod and smile because she's onto something beautiful. Fern blue and white fabric is reminiscent of classic ginger jars.
The Fern blue and white fabric options have different colored base fibers, so printed colors may vary due to base fiber colors. Please be certain to order a sample or strike off in the ground that you wish to purchase. Lead time is 3-5 weeks for large strike off samples and all yardage. Stocked samples will ship within 5 business days.


Tags: Bottle Green, Churidar Pajama, Churidar Sleeves, Frock, Light Green, Sea Green.
Triple tone pure banarsi chiffon A-line frock has been adorned with beautiful embroidered bodice. Full sleeves made of palachi fabric. banarsi fabric implemented on hemline. Fully lined. Concealed with back zip clouser.
Green banarsi jamawar churidar pajama.
Tie n dye dupatta in 3 shades, finished with banarsi piping.


text:
Home » Graceland; Asleep on the Wind
Graceland; Asleep on the Wind
by Diana Spinrad February 2, 1989 August 20, 2021
and ASLEEP ON THE WIND
Quando Productions
at Chicago Cooperative Stage
A few weeks ago I happened to watch on TV a little of Elvis Presley's 1968 comeback tour. There he was, surrounded by adoring fans, not yet fat, his eyelids drooping only slightly with the foreshadowing of drug abuse, still looking gorgeous in black leather. He was great. He was funny. He was the King.
But I had to turn it off; it was making me too sad. The audience was filled with middle-aged women with flipped hair, swaying softly and waving handkerchiefs at their hero, each hoping he'd mop his brow with the one she held. These were wistful people whose youth had run out on them, who were trying to bring back their glory days, the days when they could wiggle their pelvises with the best of them.
Quando Productions' Graceland and Asleep on the Wind, two one-acts by Ellen Byron, brought that concert immediately to mind: they capture that same wistful quality even as they pay tribute to Elvis's memory. These one-acts, essentially character studies, embrace the lives of a few people who have taken Elvis as their savior, and show us what effect that choice has had.
Not a whole lot happens in either play. Graceland, which takes place in 1982, tells the story of a young woman, Rootie, and an older woman, Bev, who vie for the honor of being the first outsider ever to enter the Graceland mansion in Memphis once it's opened to the public. Bev is a junk-food-chomping vision in polyester who has driven all the way from Delaware, determined to get inside the mansion before anyone else. At home she's turned her basement into an Elvis memorial room, and she's achieved a certain degree of national celebrity by being the first to enter various Elvis shrines–the Meditation Garden and Gravesite, for example–the first to go to the Elvis museum, to touch his statue, etc. Rootie is a poor Cajun girl from the Louisiana bayou, a near anorexic painfully lacking in self-esteem. She eats nothing but hard-boiled eggs, although she talks about how much she likes other food, and spends every other minute caking her face with makeup. Camped out, waiting for Graceland to open, the two share their life stories and their passion for Elvis over the course of an afternoon. Gradually it becomes clear that Elvis is a kind of catalyst for the two women's deeper loves: Bev's for her husband, and Rootie's for her dead brother, Beau.
Asleep on the Wind takes us back ten years to when Rootie, age 13, lived in Bayou Teche, Louisiana. Written after Graceland, the play reenacts Rootie's memory of her last interaction with her brother. This is a tender, bittersweet depiction of the relationship between an adoring young girl and her doting older brother. Although powerful in its own right, Asleep on the Wind derives much of its strength from the fact that we already know from the first play the tragedies that the brother and sister will encounter.
Director Betsey Cassell and her capable actors have developed a rough but loving production of these two intimate plays. True, there is nothing brilliant about Quando Productions' first venture, nothing stands out as a particularly insightful choice. But everything here–acting, directing, design–fits together to create a simple, straightforward environment in which the plays can speak for themselves.
John Braun as Beau has a Cajun accent that's a bit awkward, but he makes up for it with a beautiful combination of sensitivity and humor. The flame of his love for Rootie is always present, even when he rages at her, and his affectionate, playful teasing will strike a chord in any little sister. Eighth-grader Hannah Crum, as 13-year-old Rootie, is the perfect foil for Braun, partly because her genuine youth is so much in contrast to his experience. And they interact as if they really have been together all their lives. Crum, who has all the gawkiness of a real teenager, uses that to enhance her character instead of trying to cover it up with acting tricks.
Buff Lynde Lee is a feisty, gruff Bev who's as comfortable in her polyester pantsuit as if she'd been born in it. Elaine Behr gets off to a weak start as the grown-up Rootie: she contradicts her character by playing Rootie as stronger-willed and more melodramatic than the lines indicate. But Behr's characterization suits the second half of the play better, and she does a fine job with her big revealing monologue.
Director Betsey Cassell's staging is clumsy for Graceland, but Asleep on the Wind is full of movement that's both active and interesting–when the child and adult Rooties seem to merge, for example. Mostly, though, Cassell creates an intimate, warm milieu for the plays. Someone named A.M. Vetz adds simple but appropriately detailed costumes; Bev's costume is particularly good, right down to the awkwardly padded bra that's the perfect complement to her ensemble.
No park-ing: political skirmishing in the 46th Ward prefigures the aldermanic election of 1991
In "Neighborhood News"
Graceland/Here We Are


(GWT) Songs 1 : 1 The most beautiful song of Solomon.
(GWT) Songs 1 : 3 better than the fragrance of cologne. (Cologne should be named after you.) No wonder the young women love you!
(GWT) Songs 1 : 4 Take me with you. Let's run away. The king has brought me into his private rooms. We will celebrate and rejoice with you. We will praise your expressions of love more than wine. How right it is that the young women love you!
(GWT) Songs 1 : 5 Young women of Jerusalem, I am dark and lovely like Kedar's tents, like Solomon's curtains.
(GWT) Songs 1 : 6 Stop staring at me because I am so dark. The sun has tanned me. My brothers were angry with me. They made me the caretaker of the vineyards. I have not even taken care of my own vineyard.
(GWT) Songs 1 : 7 Please tell me, you whom I love, where do you graze your flock? Where does your flock lie down at noon? [Tell me,] or I will be considered a prostitute [wandering] among the flocks of your companions.
(GWT) Songs 1 : 8 If you do not know, most beautiful of women, follow the tracks of the flocks, and graze your young goats near the shepherds' tents.
(GWT) Songs 1 : 9 My true love, I compare you to a mare among Pharaoh's stallions.
(GWT) Songs 1 : 10 Your cheeks are lovely with ornaments, your neck with strings of pearls.
(GWT) Songs 1 : 11 We will make gold ornaments with silver beads for you.
(GWT) Songs 1 : 12 While the king is at his table, my perfume fills the air with its fragrance.
(GWT) Songs 1 : 13 My beloved is a pouch of myrrh that lies at night between my breasts.
(GWT) Songs 1 : 14 My beloved is a bouquet of henna flowers in the vineyards of En Gedi.
(GWT) Songs 1 : 15 Look at you! You are beautiful, my true love! Look at you! You are so beautiful! Your eyes are like doves!
(GWT) Songs 1 : 16 Look at you! You are handsome, my beloved, so pleasing to me! The leaf-scattered ground will be our couch.
(GWT) Songs 1 : 17 The cedars will be the walls of our house. The cypress trees will be our rafters.


text:
Vassenden Church () is a chapel of the Church of Norway in Sunnfjord Municipality in Vestland county, Norway. It is located in the village of Vassenden. It is an annex chapel for the Ålhus parish which is part of the Sunnfjord prosti (deanery) in the Diocese of Bjørgvin. The white, concrete church building was built in a modern, fan-shaped design in 2002 by the architect Per W. Skarstein. The chapel seats about 400 people.

History
As early as the 1920s, the people of Vassenden were desiring a church of their own in their village. In 1930, a cemetery was built in Vassenden, but no church. Finally, by the year 2000, financing was finally in place and approval for a church was given. Per W. Skarstein was hired as the architect and Karl Russøy was the lead builder. The modern-style church has a floor space of about . The sanctuary has adjoining side rooms with walls that can be moved to make the main room larger. The church was completed and formally consecrated on 22 September 2002 by the Bishop Ole Hagesæther.

See also
List of churches in Bjørgvin

References

Sunnfjord
Churches in Vestland
Fan-shaped churches in Norway
Concrete churches in Norway
21st-century Church of Norway church buildings
Churches completed in 2002
2002 establishments in Norway

redpajama_set_name: RedPajamaWikipedia


After spending a day hiking around Zion National Park, we spent another night in Hurricane and left early Sunday morning and headed towards The Wave, in Arizona.The drive from Hurricane to The Wave is about 2 hours. One thing we forgot to take into account was the time difference between Utah and Arizona, since this was before day lights savings time, we actually gained an hour going from Utah to Arizona and made it to the trail head around 7:30 AM. Once you turn off from Hwy 89 onto Red Rock Canyon Road, the road becomes unpaved and this last 10 mile stretch will take about 30 minutes depending on the road condition and weather. Based on our permit, a high clearance, 4WD vehicle came highly recommended but since there was no rain in the recent forecast, we decided to test out the road with our 2WD. The trail was surprisingly well maintained and luckily, we arrived at the trail head with no problems.
My recommendation for anyone who wants to drive a 2WD to The Wave is to check the weather forecast and make sure there is no rain predicted in the forecast. The soil is fine and clayey on the road, with rain, it would be VERY easy to get stuck.
The start of the trail, note the bright pink permit I had to hang off my backpack. Only 20 people are allowed on this trail per day.
The round trip hike to the Wave is 5 miles but the trail is not well established or marked. We relied on the trail map and a photo map sent to us by the BLM along with our permit. Louis was our navigator and did a great job navigating us to our final destination.
The temperature in the morning was much cooler than in Hurricane. We started out with our jackets and started shedding our layers once the sun came out. The entire trail is fully exposed and It's easy to imagine what a dangerous environmental it must be in the middle of the summer when the temperature exceeds the triple digits.
Group shot before descending down to the canyon. Tip for navigating: make sure you understand how to read a topographic map before trying out this trail. We had to figure out which direction we were going based on the elevation differences on the top versus the actual terrain.
The group coming down into the canyon before finding The Wave.
We were all in aw of how beautiful it was when we first arrived at the entrance of The Wave. It's hard to believe something so perfect and beautiful were formed naturally by mother nature. Having the entire area to ourselves with the dramatic colors of the sand stones made my heart ache a little, it was just so perfect.
We think this is the second wave about 0.25 miles away from the entrance.
This entry was posted in Hiking & Backpacking, Trail Reports, Travels and tagged adventure, Hiking, outdoors, The Wave, trail reports, Travel, traveling by hikenoworklater. Bookmark the permalink.


text:
Stenotarsus striatocollis es una especie de coleóptero de la familia Endomychidae.

Distribución geográfica
Habita en Madagascar.

Referencias

Insectos de Madagascar
Striatocollis


Peanut butter and jelly. Sunsets and rosé. Brangelina. Some things are just better together.
Ahead, we show you fashion's must-own pairs that you probably already own (and if you don't, it's high time you do). Plus, we introduce a new "wild card" to complete each look in a way that's unexpected and fresh.
Breton stripes and a cognac-hued bag put a little New England class into your wardrobe. Add a flared floral skirt to look more like a lady, less like a sailor.
Your casual-Friday uniform just got a whole lot cozier, thanks to the addition of a luxe, oversized scarf. Swap out your neckwear from season to season (think rich plaids for fall, silky florals for spring) all while keeping the backdrop sleek and basic.
Your LBD and party heels have seen you through countless cocktails and endless desk-to-dinner events. Your denim jacket has accompanied you to every baseball game and brunch. Put them all together: It's a sophisticated but cool trio.
God bless optical illusions in fashion: Pointy-toe pumps elongate your legs, while apencil skirt makes you look oh-so-Beyoncé. Add a bold graphic tee (you have permission to break out that Led Zeppelin World Tour 1971 number) and you've bagged yourself the coolest Saturday outfit ever.
Not too fussy, not too stiff, with the right amount of ease plus polish: Boy, do we love a good chambray shirt. It's also the perfect backdrop for a less-than-subtle necklace. Layer like a pro and top it off with a cropped sweater to create pretty proportions.
Menswear is perennially chic (and so, so comfy), especially when it's an oversized shirt topped off with a kicky hat. Keep the vacation vibe going with decidedly feminine breezy pants.
Polka dots and a berry-stained pout always read as timeless (and nod to the Audrey Hepburn era of playful glamour). Make it modern with slim-cut overalls, and then keep the look out of Minnie Mouse territory with grown-up sunglasses and a neutral clutch.