/*
title: Combine-Separate Morphing
category: custom
titleCN: 聚合分割形变
difficulty: 11
*/


var PIE_COLORS = [
    '#e06343', '#37a354', '#b55dba', '#b5bd48', '#8378EA', '#96BFFF'
];
var CLUSTER_COLORS = [
    '#cc5664', '#9bd6ec', '#ea946e', '#8acaaa', '#f1ec64', '#ee8686', '#a48dc1', '#5da6bc', '#b9dcae'
];
var Z_TAG_COLORS = [
    '#5470c6',
    '#91cc75',
    '#fac858',
    '#ee6666',
    '#73c0de',
    '#3ba272',
    '#fc8452',
    '#9a60b4',
    '#ea7ccc'
];
var Z_TAG_COLORS_2 = [
    '#51689b', '#ce5c5c', '#fbc357', '#8fbf8f', '#659d84', '#fb8e6a', '#c77288', '#786090',
    '#91c4c5', '#6890ba'
];
var SYMBOL_PATHS = [
    'path://m67.25,28.9c27.42,-69.1 134.84,0 0,88.85c-134.84,-88.85 -27.42,-157.96 0,-88.85z',
    'path://M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16 16-7.163 16-16-7.163-16-16-16zM22 8c1.105 0 2 1.343 2 3s-0.895 3-2 3-2-1.343-2-3 0.895-3 2-3zM10 8c1.105 0 2 1.343 2 3s-0.895 3-2 3-2-1.343-2-3 0.895-3 2-3zM16 28c-5.215 0-9.544-4.371-10-9.947 2.93 1.691 6.377 2.658 10 2.658s7.070-0.963 10-2.654c-0.455 5.576-4.785 9.942-10 9.942z',
    'path://M16 0c-8.837 0-16 7.163-16 16s7.163 16 16 16c8.837 0 16-7.163 16-16s-7.163-16-16-16zM22 7.375c1.999 0 3.625 1.626 3.625 3.625 0 0.199-0.017 0.402-0.051 0.604-0.051 0.301-0.311 0.521-0.616 0.521s-0.566-0.22-0.616-0.522c-0.192-1.146-1.177-1.666-2.341-1.666s-2.149 0.52-2.341 1.666c-0.050 0.301-0.311 0.522-0.616 0.522-0 0 0 0-0 0-0.305 0-0.566-0.22-0.616-0.521-0.034-0.201-0.051-0.404-0.051-0.604 0-1.999 1.626-3.625 3.625-3.625zM10 7.375c1.999 0 3.625 1.626 3.625 3.625 0 0.199-0.017 0.402-0.051 0.604-0.051 0.301-0.311 0.521-0.616 0.521s-0.566-0.22-0.616-0.522c-0.193-1.146-1.177-1.666-2.341-1.666s-2.149 0.52-2.341 1.666c-0.051 0.301-0.311 0.522-0.616 0.522 0 0 0 0 0 0-0.305 0-0.566-0.22-0.616-0.521-0.034-0.201-0.051-0.404-0.051-0.604 0-1.999 1.626-3.625 3.625-3.625zM6 18h6v7.745c-3.44-0.894-6-4.035-6-7.745zM14 26v-8h4v8h-4zM20 25.745v-7.745h6c0 3.71-2.559 6.851-6 7.745z',
    'path://M23.6 2c4.637 0 8.4 3.764 8.4 8.401 0 9.132-9.87 11.964-15.999 21.232-6.485-9.326-16.001-11.799-16.001-21.232 0-4.637 3.763-8.401 8.4-8.401 1.886 0 3.625 0.86 5.025 2.12l-2.425 3.88 7 4-4 10 11-12-7-4 1.934-2.901c1.107-0.68 2.35-1.099 3.665-1.099z',
    'path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z  M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z',
    'path://M237.062,81.761L237.062,81.761c-12.144-14.24-25.701-20.1-40.68-19.072 c-10.843,0.747-20.938,5.154-30.257,13.127c-9.51-5.843-19.8-9.227-30.859-10.366c0.521-3.197,1.46-6.306,2.85-9.363 c3.458-7.038,8.907-12.741,16.331-17.296c-5.609-3.384-11.227-6.799-16.854-10.279c-16.257,8.104-25.06,20.601-26.463,38.417 c-7.599,1.705-14.685,4.486-21.247,8.437c-9.164-7.677-18.996-11.917-29.496-12.632c-14.819-0.998-28.467,4.787-40.938,18.827 C6.445,96.182,0,114.867,0,136.242c-0.007,6.371,0.674,12.646,2.053,18.738c4.593,22.785,15.398,41.367,32.558,55.344 c15.43,12.773,29.901,18.023,43.362,16.981c7.074-0.561,13.624-3.977,19.685-10.192c10.534,5.49,20.391,8.217,29.561,8.203 c9.856-0.012,20.236-2.953,31.125-8.898c6.227,6.692,12.966,10.346,20.211,10.933c13.795,1.073,28.614-4.111,44.377-16.84 c17.49-14.104,28.043-32.79,31.796-55.485c0.836-5.624,1.272-11.292,1.272-16.966C255.998,115.814,249.707,96.601,237.062,81.761z  M54.795,97.7l40.661,14.496c-4.402,8.811-10.766,13.219-19.06,13.219c-2.542,0-4.917-0.419-7.122-1.274 C58.103,118.38,53.263,109.572,54.795,97.7z M150.613,185.396l-9.156-8.389l-7.619,12.951c-3.391,0.341-6.615,0.514-9.665,0.514 c-4.401,0-8.635-0.263-12.708-0.777l-8.634-14.973l-9.151,9.909c-4.91-2.717-9.15-5.856-12.708-9.413 c-8.81-8.295-13.384-17.959-13.727-28.97c2.877,1.692,7.427,3.461,13.675,5.308l10.636,13.629l9.44-9.852 c4.734,0.702,9.234,1.12,13.466,1.275l10.689,11.498l9.671-11.949c3.559-0.173,7.285-0.515,11.182-1.01l9.924,10.159l10.933-14.227 c5.931-1.351,11.196-2.798,15.771-4.323C179.747,163.538,169.068,176.414,150.613,185.396z M175.258,124.907 c-2.209,0.849-4.66,1.273-7.369,1.273c-8.134,0-14.489-4.415-19.052-13.224l40.905-14.477 C191.105,110.331,186.273,119.141,175.258,124.907z'
];
var CONTENT_COLOR = '#37A2DA';
var ANIMATION_DURATION_UPDATE = 1500;


var RAW_DATA = [[1425139200000,34,0.13,2,"MD","ZD","P0"],[1425225600000,28,0.71,1.5,"MB","ZD","P1"],[1425312000000,23,0.9,2.8,"MA","ZC","P2"],[1425398400000,21,0.58,6,"MB","ZC","P3"],[1425484800000,14,0.1,1.6,"MC","ZA","P4"],[1425571200000,21,0.6,7.7,"MC","ZA","P5"],[1425657600000,23,0.31,2.6,"MC","ZC","P6"],[1425744000000,34,0.74,2.4,"MD","ZE","P7"],[1425830400000,14,0.59,2.3,"MB","ZD","P8"],[1425916800000,18,0.85,5.1,"MB","ZB","P9"],[1426003200000,36,0.96,1.2,"MC","ZC","P10"],[1426089600000,18,0.28,2.5,"MA","ZC","P11"],[1426176000000,20,0.62,6,"MB","ZD","P12"],[1426262400000,32,0.79,1.7,"MB","ZA","P13"],[1426348800000,17,0.58,4.4,"MD","ZB","P14"],[1426435200000,23,0.77,3,"MB","ZA","P15"],[1426521600000,39,0.87,4.6,"MC","ZA","P16"],[1426608000000,15,0.7,6,"MB","ZC","P17"],[1426694400000,21,0.94,2.7,"MB","ZD","P18"],[1426780800000,28,0.48,4.5,"MC","ZC","P19"],[1426867200000,31,0.49,9.8,"MA","ZC","P20"],[1426953600000,27,0.87,7.7,"MB","ZB","P21"],[1427040000000,27,0.82,5.5,"MC","ZB","P22"],[1427126400000,11,0.53,2.7,"MD","ZC","P23"],[1427212800000,13,0.7,7.6,"MB","ZD","P24"],[1427299200000,39,0.99,4.8,"MB","ZD","P25"],[1427385600000,32,0.91,2.1,"MB","ZE","P26"],[1427472000000,20,0.97,5,"MB","ZA","P27"],[1427558400000,36,0.01,8.9,"MB","ZD","P28"],[1427644800000,22,0.08,9.2,"MB","ZE","P29"],[1427731200000,21,0.36,3.1,"MD","ZC","P30"],[1427817600000,11,0.15,5.8,"MD","ZB","P31"],[1427904000000,39,0.02,1.4,"MC","ZD","P32"],[1427990400000,20,0.86,8.7,"MB","ZD","P33"],[1428076800000,23,0.24,7.2,"MD","ZB","P34"],[1428163200000,12,0.06,2,"MD","ZB","P35"],[1428249600000,36,0.42,8.2,"MA","ZB","P36"],[1428336000000,17,0.48,7.5,"MB","ZC","P37"],[1428422400000,19,0.12,6.6,"MB","ZB","P38"],[1428508800000,39,0.58,3.1,"MC","ZE","P39"],[1428595200000,10,0.18,6.6,"MC","ZD","P40"],[1428681600000,22,0.28,2.1,"MB","ZE","P41"],[1428768000000,27,0.33,1.9,"MC","ZB","P42"],[1428854400000,37,0.46,9.4,"MD","ZE","P43"],[1428940800000,18,0.96,5.5,"MB","ZA","P44"],[1429027200000,11,0.61,8.2,"MD","ZC","P45"],[1429113600000,15,0.88,4.6,"MD","ZA","P46"],[1429200000000,38,0.89,7.2,"MD","ZC","P47"],[1429286400000,20,0.39,5.4,"MB","ZB","P48"],[1429372800000,30,0.71,5.5,"MA","ZA","P49"]];

var RAW_DATA_DIMENSIONS = ['DATE', 'ATA', 'STE', 'CTZ', 'M_TAG', 'Z_TAG', 'ID'];
var M_TAG_SUM_DIMENSIONS = ['ATA', 'STE', 'CTZ', 'M_TAG'];
var RAW_CLUSTER_DIMENSIONS = ['DATE', 'ATA', 'STE', 'CTZ', 'M_TAG', 'Z_TAG', 'ID', 'CLUSTER_IDX', 'CLUSTER_CENTER_ATA', 'CLUSTER_CENTER_STE'];
var RAW_CLUSTER_CENTERS_DIMENSIONS = ['COUNT', 'CLUSTER_IDX', 'CLUSTER_CENTER_ATA', 'CLUSTER_CENTER_STE'];

function getFromPalette(value, palette) {
    if (!palette.__colorMap) {
        palette.__colorMap = {};
    }
    if (palette.__colorIdx == null) {
        palette.__colorIdx = 0;
    }
    if (!palette.__colorMap[value]) {
        palette.__colorMap[value] = palette[palette.__colorIdx];
        palette.__colorIdx++;
        if (palette.__colorIdx >= palette.length) {
            palette.__colorIdx = 0;
        }
    }
    return palette.__colorMap[value];
}





var baseOption = {
    dataset: [{
        id: 'raw',
        dimensions: RAW_DATA_DIMENSIONS,
        source: RAW_DATA
    }, {
        id: 'mTagSum',
        fromDatasetId: 'raw',
        transform: {
            type: 'ecSimpleTransform:aggregate',
            config: {
                resultDimensions: [
                    { from: 'ATA', method: 'sum' },
                    { from: 'STE', method: 'sum' },
                    { from: 'CTZ', method: 'sum' },
                    { from: 'M_TAG' }
                ],
                groupBy: 'M_TAG'
            }
        }
    }, {
        id: 'rawClusters',
        fromDatasetId: 'raw',
        transform: {
            type: 'ecStat:clustering',
            // print: true,
            config: {
                clusterCount: 4,
                dimensions: ['ATA', 'STE'],
                outputClusterIndexDimension: {
                    index: RAW_CLUSTER_DIMENSIONS.indexOf('CLUSTER_IDX'),
                    name: 'CLUSTER_IDX'
                },
                outputCentroidDimensions: [{
                    index: RAW_CLUSTER_DIMENSIONS.indexOf('CLUSTER_CENTER_ATA'),
                    name: 'CLUSTER_CENTER_ATA'
                }, {
                    index: RAW_CLUSTER_DIMENSIONS.indexOf('CLUSTER_CENTER_STE'),
                    name: 'CLUSTER_CENTER_STE'
                }]
            }
        }
    }, {
        id: 'rawClusterCenters',
        fromDatasetId: 'rawClusters',
        transform: {
            type: 'ecSimpleTransform:aggregate',
            // print: true,
            config: {
                resultDimensions: [
                    { name: 'COUNT', from: 'ATA', method: 'count' },
                    { from: 'CLUSTER_CENTER_ATA' },
                    { from: 'CLUSTER_CENTER_STE' },
                    { from: 'CLUSTER_IDX' }
                ],
                groupBy: 'CLUSTER_IDX'
            }
        }
    }],
    tooltip: {}
};


function makeScatterOptionCreator(renderItem) {
    return function () {
        var datasetId = 'rawClusters';
        return {
            datasetId: datasetId,
            option: {
                grid: {
                    containLabel: true
                },
                xAxis: {
                    name: 'STE'
                },
                yAxis: {
                    name: 'ATA'
                },
                series: {
                    type: 'custom',
                    coordinateSystem: 'cartesian2d',
                    animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                    datasetId: datasetId,
                    encode: {
                        itemName: 'ID',
                        x: 'STE',
                        y: 'ATA',
                        tooltip: ['STE', 'ATA']
                    },
                    renderItem: renderItem
                }
            }
        }
    };
}




var optionCreators = {

    'Scatter': makeScatterOptionCreator(
        function (params, api) {
            var pos = api.coord([
                api.value('STE'),
                api.value('ATA')
            ]);
            var zTagVal = api.value('Z_TAG');
            var color = getFromPalette(zTagVal, Z_TAG_COLORS);
            return {
                type: 'circle',
                morph: true,
                shape: {
                    cx: pos[0],
                    cy: pos[1],
                    r: 10
                },
                style: {
                    fill: color
                },
                transition: ['shape', 'style']
            };
        }
    ),

    'Glyph': makeScatterOptionCreator(
        function (params, api) {
            var pos = api.coord([
                api.value('STE'),
                api.value('ATA')
            ]);
            var zTagVal = api.value('Z_TAG');
            var color = getFromPalette(zTagVal, Z_TAG_COLORS);
            var symbolPath = getFromPalette(zTagVal, SYMBOL_PATHS);
            return {
                type: 'path',
                morph: true,
                x: pos[0],
                y: pos[1],
                shape: {
                    pathData: symbolPath,
                    width: 40,
                    height: 40
                },
                style: {
                    fill: color
                },
                transition: ['style']
            };
        }
    ),

    'House': makeScatterOptionCreator(
        function (params, api) {
            var pos = api.coord([
                api.value('STE'),
                api.value('ATA')
            ]);
            var zTagVal = api.value('Z_TAG');
            var color1 = getFromPalette(zTagVal, Z_TAG_COLORS);
            var color2 = '#aaa';
            return {
                type: 'group',
                x: pos[0],
                y: pos[1],
                children: [{
                    type: 'polygon',
                    morph: true,
                    shape: {
                        points: [
                            [-25, -1],
                            [25, -1],
                            [0, -20]
                        ]
                    },
                    style: {
                        fill: color1
                    },
                    transition: ['shape', 'style']
                }, {
                    type: 'rect',
                    morph: true,
                    shape: {
                        x: -15,
                        y: 0,
                        width: 30,
                        height: 20
                    },
                    style: {
                        fill: color2,
                        stroke: '#fff',
                        lineWidth: 1
                    },
                    transition: ['shape', 'style']
                }]
            };
        }
    ),

    'Bar_Sum': function () {
        var datasetId = 'mTagSum'
        return {
            datasetId: datasetId,
            option: {
                grid: {
                    containLabel: true
                },
                xAxis: {
                    type: 'category'
                },
                yAxis: {
                },
                series: {
                    type: 'custom',
                    coordinateSystem: 'cartesian2d',
                    animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                    datasetId: datasetId,
                    encode: {
                        x: 'M_TAG',
                        y: 'ATA',
                        tooltip: ['M_TAG', 'ATA']
                    },
                    renderItem: function (params, api) {
                        var mTagVal = api.value('M_TAG');
                        var ataVal = api.value('ATA');
                        var tarPos = api.coord([mTagVal, ataVal]);
                        var zeroPos = api.coord([mTagVal, 0]);
                        var size = api.size([mTagVal, ataVal]);
                        var width = size[0] * 0.4;
                        return {
                            type: 'rect',
                            morph: true,
                            shape: {
                                x: tarPos[0] - width / 2,
                                y: tarPos[1],
                                height: zeroPos[1] - tarPos[1],
                                width: width,
                            },
                            style: {
                                fill: CONTENT_COLOR
                            },
                            transition: ['shape', 'style']
                        };
                    }
                }
            }
        };
    },

    'Pie_Sum': function () {
        var datasetId = 'mTagSum';
        return {
            datasetId: datasetId,
            option: {
                series: {
                    type: 'custom',
                    coordinateSystem: 'none',
                    animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                    datasetId: datasetId,
                    encode: {
                        itemName: 'M_TAG',
                        value: 'ATA',
                        tooltip: 'ATA'
                    },
                    renderItem: function (params, api) {
                        var context = params.context;
                        if (!context.layout) {
                            context.layout = true;
                            var totalValue = 0;
                            for (var i = 0; i < params.dataInsideLength; i++) {
                                totalValue += api.value('ATA', i);
                            }
                            var angles = [];
                            var colors = [];
                            var currentAngle = -Math.PI / 2;
                            for (var i = 0; i < params.dataInsideLength; i++) {
                                colors.push(PIE_COLORS[i]);
                                var angle = api.value('ATA', i) / totalValue * Math.PI * 2;
                                angles.push([currentAngle, angle + currentAngle - 0.01]);
                                currentAngle += angle;
                            }
                            context.angles = angles;
                            context.colors = colors;
                        }

                        var width = myChart.getWidth();
                        var height = myChart.getHeight();
                        return {
                            type: 'sector',
                            morph: true,
                            shape: {
                                cx: width / 2,
                                cy: height / 2,
                                r: Math.min(width, height) / 3,
                                r0: Math.min(width, height) / 5,
                                startAngle: context.angles[params.dataIndex][0],
                                endAngle: context.angles[params.dataIndex][1],
                                clockwise: true
                            },
                            style: {
                                // fill: CONTENT_COLOR,
                                fill: context.colors[params.dataIndex]
                            },
                            transition: ['shape', 'style']
                        };
                    }
                }
            }
        };
    },

    'Clustered': function () {
        var datasetId = 'rawClusterCenters';
        return {
            datasetId: datasetId,
            option: {
                grid: {
                    containLabel: true
                },
                xAxis: {
                    name: 'STE'
                },
                yAxis: {
                    name: 'ATA'
                },
                series: {
                    type: 'custom',
                    coordinateSystem: 'cartesian2d',
                    animationDurationUpdate: ANIMATION_DURATION_UPDATE,
                    datasetId: datasetId,
                    encode: {
                        x: 'CLUSTER_CENTER_STE',
                        y: 'CLUSTER_CENTER_ATA',
                        tooltip: ['CLUSTER_CENTER_STE', 'CLUSTER_CENTER_ATA']
                    },
                    renderItem: function (params, api) {
                        var context = params.context;
                        if (!context.layout) {
                            context.layout = true;
                            context.totalCount = 0;
                            for (var i = 0; i < params.dataInsideLength; i++) {
                                context.totalCount += api.value('COUNT', i);
                            }
                        }

                        var pos = api.coord([
                            api.value('CLUSTER_CENTER_STE'),
                            api.value('CLUSTER_CENTER_ATA')
                        ]);
                        var count = api.value('COUNT');
                        var radius = count / context.totalCount * 100 + 10;
                        return {
                            type: 'circle',
                            morph: true,
                            shape: {
                                cx: pos[0],
                                cy: pos[1],
                                r: radius,
                            },
                            style: {
                                // fill: CONTENT_COLOR,
                                fill: CLUSTER_COLORS[params.dataIndex]
                            },
                            transition: ['shape', 'style']
                        };
                    }
                }
            }
        };
    }
};



var _player;
var _optionList = [];
app.config = {};
echarts.util.each(optionCreators, function (creator, key) {
    var optionWrap = creator();
    _optionList.push({
        key: key,
        dataMetaKey: optionWrap.datasetId,
        option: optionWrap.option
    });
    app.config[key] = function () {
        _player.go(key);
    }
});
console.log(app.config);



$.when(
    $.getScript('https://cdn.jsdelivr.net/npm/echarts-simple-transform/dist/ecSimpleTransform.min.js'),
    $.getScript('https://cdn.jsdelivr.net/npm/echarts-simple-option-player/dist/ecSimpleOptionPlayer.min.js'),
).done(function () {
    run();
});


function run() {

    echarts.registerTransform(ecSimpleTransform.aggregate);
    echarts.registerTransform(ecStat.transform.clustering);

    _player = ecSimpleOptionPlayer.create({
        chart: function () {
            return myChart;
        },
        seriesIndex: 0,
        replaceMerge: ['xAxis', 'yAxis'],
        dataMeta: {
            raw: {
                dimensions: RAW_DATA_DIMENSIONS,
                uniqueDimension: 'ID'
            },
            mTagSum: {
                dimensions: M_TAG_SUM_DIMENSIONS,
                uniqueDimension: 'M_TAG'
            },
            rawClusters: {
                dimensions: RAW_CLUSTER_DIMENSIONS,
                uniqueDimension: 'ID',
                dividingMethod: 'duplicate'
            },
            rawClusterCenters: {
                dimensions: RAW_CLUSTER_CENTERS_DIMENSIONS,
                uniqueDimension: 'CLUSTER_IDX'
            }
        },
        optionList: _optionList
    });

    myChart.setOption(baseOption, { lazyUpdate: true });

    _player.go('Glyph');

}

