// Clase Js para la funcionalidad KeepNodeExtended
CmsMenuKeepNodeExtended = function(aHiddenId, aMenuId, aElementId) {
    this._hiddenId = aHiddenId;
    this._menuId = aMenuId;
    this._elementId = aElementId;
}

CmsMenuKeepNodeExtended.prototype = {

    OnClientLoad: function(sender) {
        //debugger;

        var menu = $find(this._menuId);
        var menuItem = menu.findItemByValue(this._elementId);
        if (menuItem) {
            // Obtener el MenuItem Padre y abrirlo (a no ser que el padre sea el mismo menu)
            if (this.ParentIsNotMenu(menuItem)) {
                menuItem.get_parent().open();
                //debugger;
            }
            var status = $get(this._hiddenId);
            status.value = "expanded";
        }
    },

    ItemClosing: function(menu, args) {
        var item = args.get_item();
        var status = $get(this._hiddenId);
        var menuItem = menu.findItemByValue(this._elementId);
        if (menuItem) {
            // Si soy el nodo de la url
            if (TLK.ContainsChild(item, this._elementId)) {
                // Y el control dice expandido
                if (status.value == "expanded") {
                    args.set_cancel(true);  // NO cerrar
                }
                // Si el control dice collapsed
                else {
                    args.set_cancel(false); // CERRAR
                }
            }
            // Si NO soy el nodo de la Url y me estoy cerrando
            else {
                // Reabrir el nodo de la url
                if (this.ParentIsNotMenu(menuItem)) {
                    menuItem.get_parent().open();
                }
            }
        }
    },

    ItemOpening: function(menu, args) {
        var item = args.get_item();
        var status = $get(this._hiddenId);
        var menuItem = menu.findItemByValue(this._elementId);
        //debugger;
        if (menuItem) {
            // Si NO somos la rama del nodo url,
            // obtener la raiz del nodo url y cerrarla
            if (!TLK.ContainsChild(item, this._elementId)) {
                // Hacer que la variable control sea "collapsed"
                // Para que en closing se cierre el nodo desplegado
                status.value = "collapsed"
                // Buscar el nodo raiz y cerrarlo
                if (this.ParentIsNotMenu(menuItem)) {
                    menuItem.get_parent().close();
                }
            }
            // Si somos la rama de la url
            else {
                // Evitamos "auto-cerrarnos". Solo nos cerramos cuando
                //  hay se expande orta rama de menu
                status.value = "expanded";
            }
        }
    },
    ParentIsNotMenu: function(aItem) {
        var parentItem = aItem.get_parent();
        return parentItem != aItem.get_menu();
    }
}


CmsMenuAutoHorizontalCenterExtender = function() { }

CmsMenuAutoHorizontalCenterExtender.prototype = {
    OnClientItemOpened: function(sender, args) {
        var rExp = /px/gi;
        var item = args.get_item();
        var itemW = item.get_element().offsetWidth;
        var itemL = item.get_element().offsetLeft;
        var slideW = args.get_item()._slide._element.clientWidth;
        var senderContainerW = sender.get_element().parentNode.offsetWidth;
        var slideLeft = args.get_item()._slide._element.style.left.replace(rExp,'');

        if (itemL + slideW > senderContainerW ) 
        {
            i =   senderContainerW - slideW - itemL - 10;
            if (i<0) {
                args.get_item()._slide._element.style.left = i + "px";
            }
            else{
                args.get_item()._slide._element.style.left = "-" + i + "px";
            }
        }   
        else
                args.get_item()._slide._element.style.left = "-20px";
    }
}