/* <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").Montage,
    TreeNode = require("js/components/treeview/tree-node").TreeNode;

var Branch = exports.Branch = Montage.create(TreeNode, {
    hasTemplate:{
        value:true
    },
    repetition:{
        value: null
    },
    prepareForDraw : {
        value: function() {
            this.collapser.removeAttribute('id');
            this.label._element.addEventListener('click', this, false);
            
            if(this.hideLabel) {
                this.label.element.style.display = "none";
            }

            this.treeView.contentController.addBranchController(this.arrayController);
        }
    },
    handleWebkitTransitionEnd : {
        value: function(e) {
            e.stopPropagation(); 
            
            ///// Remove Transition
            this._removeTransition = true;
            this.collapser.removeEventListener('webkitTransitionEnd', this, false);
            
            //// If it's an expand transition, restore height to auto
            if(this.isExpanded) {
                this._switchToAuto = true;
            }
            
            this.needsDraw = true;

        }
    },
    templateDidLoad: {
        value: function() {
            this.arrayController.delegate = this.treeView.contentController;
        }
    },
    willDraw : {
        value: function() {
            if(this._doCollapse && this._step === 0) {
                this.branchHeight = window.getComputedStyle(this.collapser).height;
            }
        }
    },
    draw:{
        value: function () {

            if (this.sourceObject[this.labelKey]) {
                this._labelText = this.sourceObject[this.labelKey];
            }
            
            if(this._doCollapse) {
                if (this._step === 0) {                    
                    this.collapser.style.height = this.branchHeight;
                    this.collapser.style.position = "relative";
                    this.collapser.style.overflow = 'hidden';
                    this.collapser.childNodes[1].style.bottom = '0px';
                    this.collapser.childNodes[1].style.position = 'absolute';
                    this._step = 1;
                    this.needsDraw = true;
                } else if (this._step === 1) {
                    this.collapser.classList.add(this.collapseClass);
                    this._step = 2;
                    this.needsDraw = true;
                } else {
                    this.collapser.style.height = '0px';
                    this._doCollapse = false;
                    this._step = 0;
                }
            } else if(this._doExpand) {
                this.collapser.style.height = this.branchHeight;
                
                this._doExpand = false;
            }
            if(this._switchToAuto) {
                this.collapser.childNodes[1].style.position = 'static';
                this.collapser.style.height = 'auto';                    
                this._switchToAuto = false;
            }
            
            if(this._removeTransition) {
                this.collapser.classList.remove(this.collapseClass);
                this._removeTransition = false;
            }

        }
    },
    _step : {
        value : 0
    },
    handleClick : {
        value: function(e) {
            this.toggleExpand();
        }
    },
    expand : {
        value: function() {
            this.collapser.addEventListener('webkitTransitionEnd', this, false);
            this.needsDraw = this._doExpand = true;
        }
    },
    collapse : {
        value: function() {
            this.needsDraw = this._doCollapse = true;            
        }
    },
    branchHeight: {
        value: null,
        enumberable: false
    },
    collapseClass : {
        value: 'nj-collapser',
        enumberable: false
    }


});