/* <copyright>
This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
(c) Copyright 2011 Motorola Mobility, Inc.  All Rights Reserved.
</copyright> */

var Montage = require("montage/core/core").Montage,
    ElementsMediator = require("js/mediators/element-mediator").ElementMediator,

    toolBase = require("js/tools/ToolBase").toolBase;

exports.EyedropperTool = Montage.create(toolBase, {

    _isMouseDown: { value: false },
    _previousColor: { value: null},
    _color: { value: null},

    Configure: {
        value: function ( doActivate )
		{
			if (doActivate)
			{
                NJevent("enableStageMove");
			}
			else
			{
                NJevent("disableStageMove");
			}
        }
    },

    HandleLeftButtonDown: {
        value : function ( event ) {
            this._isMouseDown = true;
            this._previousColor =
                this.application.ninja.colorController[this.application.ninja.colorController.colorModel.input].css;

            this._updateColorFromPoint(event);
       }
    },

    HandleMouseMove: {
        value : function (event)
		{
            if(this._escape)
            {
                this._isMouseDown = false;
                this._escape = false;
            }
            if(this._isMouseDown)
            {
                this._updateColorFromPoint(event);
            }
		}
	},

    HandleLeftButtonUp: {
        value : function (event) {
			{
                this._isMouseDown = false;

                if(this._escape)
                {
                    this._escape = false;
                }

                this._updateColor(this._color);

                this._color = null;
            }
        }
    },

    HandleEscape: {
        value: function(event) {
            if(this._color && this._color.value)
            {
                var color = this.application.ninja.colorController.getColorObjFromCss(this._previousColor);

                if (color && color.value) {
                    color.value.wasSetByCode = true;
                    color.value.type = 'change';
                    if (color.value.a) {
                        this.application.ninja.colorController.colorModel.alpha = {value: color.value.a,
                                                                                    wasSetByCode: true,
                                                                                    type: 'change'};
                    }
                    this.application.ninja.colorController.colorModel[color.mode] = color.value;
                    this._color = null;
                }
            }
            this._escape = true;
        }
    },

    _updateColorFromPoint: {
        value : function (event) {
            var obj = this.application.ninja.stage.GetElement(event);
            if (obj)
            {
                // TODO - figure out if user clicked on a border - for now, just get fill
                var c = ElementsMediator.getColor(obj, true);
                if(c)
                {
                    var color = this.application.ninja.colorController.getColorObjFromCss(c);
                    if (color && color.value) {
                        color.value.wasSetByCode = true;
                        color.value.type = 'changing';
                        if (color.value.a) {
                            this.application.ninja.colorController.colorModel.alpha = {value: color.value.a,
                                                                                        wasSetByCode: true,
                                                                                        type: 'changing'};
                        }
                        this.application.ninja.colorController.colorModel[color.mode] = color.value;
                        this._color = color;
                    }
                }
            }
        }
    },

    _updateColor: {
        value: function(color) {
            if (color && color.value) {
                var input = this.application.ninja.colorController.colorModel.input;

                if(input === "fill")
                {
                    this.application.ninja.colorController.colorToolbar.fill_btn.color(color.mode, color.value);
                }
                else
                {
                    this.application.ninja.colorController.colorToolbar.stroke_btn.color(color.mode, color.value);
                }

                // Updating color chips will set the input type to "chip", so set it back here.
                this.application.ninja.colorController.colorModel.input = input;

                color.value.wasSetByCode = true;
                color.value.type = 'change';
                if (color.value.a) {
                    this.application.ninja.colorController.colorModel.alpha = {value: color.value.a,
                                                                                wasSetByCode: true,
                                                                                type: 'change'};
                }
                this.application.ninja.colorController.colorModel[color.mode] = color.value;
                this._previousColor = color.value.css;
            }
        }
    }

});