/* <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,
    ToolProperties = require("js/components/tools-properties/tool-properties").ToolProperties;

exports.RectProperties = Montage.create(ToolProperties, {
    base:       { value: null },
    lockButton: { value: null, enumerable: false},
    TLRadiusControl: { value: null, enumerable: false },
    TRRadiusControl: { value: null, enumerable: false },
    BLRadiusControl: { value: null, enumerable: false },
    BRRadiusControl: { value: null, enumerable: false },

    _unlocked: { value: false, enumerable: false},

    _subPrepare: {
        value: function() {
            this.lockButton.identifier = "lockButton";
            this.lockButton.addEventListener("action", this, false);

            this._setBindings([this.TRRadiusControl, this.BLRadiusControl, this.BRRadiusControl]);
            this._setCap([this.TLRadiusControl,this.TRRadiusControl, this.BLRadiusControl, this.BRRadiusControl]);

        }
    },

    handleLockButtonAction: {
        value: function(event) {
            this.TRRadiusControl.enabled = this.BLRadiusControl.enabled = this.BRRadiusControl.enabled = !this.lockButton.pressed;

            if(this.lockButton.pressed) {
                this._setBindings([this.TRRadiusControl, this.BLRadiusControl, this.BRRadiusControl]);
            } else {
                this._removeBindings([this.TRRadiusControl, this.BLRadiusControl, this.BRRadiusControl]);
            }

        }
    },

    // Public API
    use3D: {
        get: function() { return this.base._use3D; }
    },
    
    strokeSize: {
        get: function() { return this.base._strokeSize; }
    },

    strokeStyle : {
        get: function() {
//            return this.base._strokeStyle.options[this.base._strokeStyle.value].text;
            return "Solid";
        }
    },

    strokeStyleIndex : {
        get: function() {
//            return this.base._strokeStyle.options[this.base._strokeStyle.value].value;
            return 1;
        }
    },

    strokeMaterial: {
        get: function() { return this.base._strokeMaterial.value; }
    },

    fillMaterial: {
        get: function() { return this.base._fillMaterial.value; }
    },

    _setBindings: {
        value: function(els) {
            var that = this;
            els.forEach(function(el) {
                Object.defineBinding(el, "value", {
                    boundObject: that.TLRadiusControl,
                    boundObjectPropertyPath: "value",
                    boundValueMutator: function(value) {
                        if (typeof value === "string") {
                            return parseFloat(value);
                        }

                        return value;
                    }
                });

                Object.defineBinding(el, "units", {
                    boundObject: that.TLRadiusControl,
                    boundObjectPropertyPath: "units"
                });
            });
        }
    },

    _removeBindings: {
        value: function(els) {
            els.forEach(function(el) {
                Object.deleteBindings(el);
            });
        }
    },

    _setCap: {
        value: function(els) {
            var that = this;
            els.forEach(function(el) {
                el.addEventListener("change", that, false);
            });
        }
    },

    handleChange: {
        value: function(event) {
            var hotTxt = event.currentTarget;
            if(hotTxt.units === "%") {
                if(hotTxt.value > 50) {
                    hotTxt.maxValue = 50;
                }
                return hotTxt.value;
            }
            
        }
    }


});