
ASPxClientNavBar = _aspxCreateClass(ASPxClientControl, {
	constructor: function(name){
		this.constructor.prototype.constructor.call(this, name);
    
        this.animationOffset = 10;
        this.animationDelay = 10;
        this.animationMaxDelay = 400;
        this.autoCollapse = false;
        this.allowExpanding = true;
        this.allowSelectItem = false;
        this.cookieName = "";
        this.groupCount = 0;
        this.enableAnimation = false;
        this.groups = [];
        this.groupsExpanding = new Array();
        this.groupsExpandingRequest = [];    
        this.ItemClick = new ASPxClientEvent();    
        this.ExpandedChanged = new ASPxClientEvent();
        this.ExpandedChanging = new ASPxClientEvent();    
        this.HeaderClick = new ASPxClientEvent();    
    },    
    Initialize: function(){
        if(this.allowSelectItem){
            var inputElement = this.GetSelectedItemInputElement();
            if(inputElement != null){
                var element = this.GetItemTextElementByIndexPath(inputElement.value);
                if(element != null)
                    aspxGetStateController().SelectElementBySrcElement(element);
            }
        }
        this.constructor.prototype.Initialize.call(this);
    },
    InitializeCallBackData: function(){
        for(var i = 0; i < this.GetGroupCountCore(); i ++){
            if(this.groupsExpanding[i]){
                var element = this.GetGroupContentElement(i);
                if(element != null) element.loaded = true;
            }
        }
    },    
    GetClickableGroupHeaderElement: function(index) {
        var isDisplayed = false;
        var element = this.GetGroupHeaderExpandedElement(index);
        if (element != null) isDisplayed = !_aspxGetElementDisplay(element) || !this.allowExpanding ;
        
        if (!isDisplayed)
            element = this.GetGroupHeaderCollapsedElement(index);
        return element;
    },
    GetGroupHeaderExpandedElement: function(index){
        return this.GetChild("_GHE" + index);
    },
    GetGroupHeaderCollapsedElement: function(index){
        return this.GetChild("_GHC" + index);
    },
    GetGroupContentElement: function(index){
        return this.GetChild("_GC" + index);
    },
    GetGroupContentAnimationElement: function(index){
        return this.GetChild("_GCA" + index);
    },
    GetRowElement: function(cellElement){
        return _aspxGetParentNode(cellElement);
    },
    GetItemElement: function(groupIndex, itemIndex){
        return this.GetChild("_I" + this.GetIndexPath(groupIndex, itemIndex) + "_");
    },
    GetItemTextElementByIndexPath: function(indexPath){
        return this.GetChild("_I" + indexPath + "_T");
    },
    GetItemImageElementByIndexPath: function(indexPath){
        return this.GetChild("_I" + indexPath + "_I");
    },

    GetGroupStateInputElement: function(index){
        return _aspxGetElementById(this.name + "GS");
    },
    GetSelectedItemInputElement: function(){
        return _aspxGetElementById(this.name + "SI");
    },
    
    DoItemClick: function(groupIndex, itemIndex, hasItemLink, htmlEvent){
        var processOnServer = this.autoPostBack || this.IsServerEventAssigned("ItemClick");
        if(_aspxIsExists(this.RaiseItemClick))
            processOnServer = this.RaiseItemClick(groupIndex, itemIndex, htmlEvent);
        if(processOnServer && !hasItemLink)
            this.SendPostBack("CLICK:" + this.GetIndexPath(groupIndex, itemIndex));
    },
    SetExpandedInternal: function(groupIndex, expanded){
        if(expanded == this.groupsExpanding[groupIndex]) return;
        
        var processingMode = this.autoPostBack ? "Server" : "Client";
        if(_aspxIsExists(this.RaiseExpandedChanging))
            processingMode = this.RaiseExpandedChanging(groupIndex);
        if(processingMode == "Client"){
            if(expanded || !this.autoCollapse){
                if(this.autoCollapse){
                    for(var i = 0; i < this.GetGroupCountCore(); i ++){
                        if(i != groupIndex && this.groupsExpanding[i])
                            this.ChangeExpanding(i, false);
                    }
                }
                this.ChangeExpanding(groupIndex, expanded);
            }
        }
        else if(processingMode == "Server")
            this.SendPostBack("EXPAND:" + groupIndex);
    },
    ChangeExpanding: function(groupIndex, expanded){
        var element = this.GetGroupContentElement(groupIndex);
        if(expanded && _aspxIsFunction(this.callBack)  && element != null && !element.loaded){
            this.DoChangeExpanding(groupIndex, expanded, false);
            if(!element.loading){
                element.loading = true;
                this.CreateLoadingPanelInsideContainer(this.GetGroupContentElement(groupIndex));
                this.CreateCallback(groupIndex);
                _aspxArrayPush(this.groupsExpandingRequest, groupIndex);
            }
        }
        else{
            this.DoChangeExpanding(groupIndex, expanded, this.enableAnimation);
            
            if(!this.enableAnimation && _aspxIsExists(this.RaiseExpandedChanged))
                this.RaiseExpandedChanged(groupIndex);
        }
    },
    DoChangeExpanding: function(groupIndex, expanded, doAnimation){
        if(doAnimation){
            var element = this.GetGroupContentAnimationElement(groupIndex);
            var contentElement = this.GetGroupContentElement(groupIndex);
            if(element != null && contentElement != null){
                if(expanded){
                    element.style.height = "0px";
                    _aspxSetElementDisplay(this.GetRowElement(contentElement), true);
                    if(__aspxNS && !__aspxFirefox){
                        var innerElement = _aspxGetChildByTagName(element, "TABLE", 0);
                        if(innerElement != null)
                            element.style.width = innerElement.offsetWidth + "px";
                        else{
                            innerElement = _aspxGetChildByTagName(element, "UL", 0);
                            if(innerElement != null)
                                element.style.width = element.clientWidth + "px";
                        }
                    }
                }
                else{
                    element.style.height = element.offsetHeight + "px";
                }
                element.style.overflow = "hidden";
                element.expanding = expanded;
                element.animationCount = 1;
                element.animationStart = new Date();
                element.timerID = window.setTimeout("aspxNBAnimT(\"" + this.name + "\", " + groupIndex + ")", this.animationDelay);
            }
            else
                this.ChangeGroupExpandState(groupIndex, expanded);
        }
        else
            this.ChangeGroupExpandState(groupIndex, expanded);
    },
    ChangeGroupExpandState: function(groupIndex, expanded){
        var element = this.GetGroupContentElement(groupIndex);
        if(element != null) _aspxSetElementDisplay(this.GetRowElement(element), expanded);
        element = this.GetGroupHeaderExpandedElement(groupIndex);
        if(element != null) _aspxSetElementDisplay(this.GetRowElement(element), expanded);
        element = this.GetGroupHeaderCollapsedElement(groupIndex);
        if(element != null) _aspxSetElementDisplay(this.GetRowElement(element), !expanded);
        
        this.groupsExpanding[groupIndex] = expanded;
        this.UpdateGroupStateInputElement();
        this.UpdateGroupStateCookie();
    },
    
    GetGroupCountCore: function(){
        return (this.groups.length > 0) ? this.groups.length : this.groupCount;
    },
    GetIndexPath: function(groupIndex, itemIndex){
        return (groupIndex != -1 && itemIndex != -1) ? groupIndex + __aspxItemIndexSeparator + itemIndex : "";
    },
    GetGroupIndex: function(indexPath){
        var indexes = indexPath.split(__aspxItemIndexSeparator);
        return (indexes.length > 0) ? indexes[0] : -1;
    },
    GetItemIndex: function(indexPath){
        var indexes = indexPath.split(__aspxItemIndexSeparator);
        return (indexes.length > 1) ? indexes[1] : -1;
    },
    
    GetGroupState: function(){
        var state = "";
        for(var i = 0; i < this.GetGroupCountCore(); i ++) {
            state += this.groupsExpanding[i] ? "1" : "0";
            if(i < this.GetGroupCountCore() - 1) state += ";";
        }
        return state;
    },
    UpdateGroupStateCookie: function(){
        if(this.cookieName == "") return;

        _aspxDelCookie(this.cookieName, this.GetGroupState());
        _aspxSetCookie(this.cookieName, this.GetGroupState());
    },
    UpdateGroupStateInputElement: function(){
        var element = this.GetGroupStateInputElement();
        if(element != null) element.value = this.GetGroupState();
    },
    
    UpdateHoverState: function(groupIndex){
        var element = this.groupsExpanding[groupIndex] ? this.GetGroupHeaderExpandedElement(groupIndex) : 
            this.GetGroupHeaderCollapsedElement(groupIndex);
        if(element != null) aspxGetStateController().SetCurrentHoverElementBySrcElement(element);
    },
    SetSelectedItemInternal: function(groupIndex, itemIndex, modifyHotTrackSelection){
        if(modifyHotTrackSelection)
            this.SetHoverElement(null);
        var indexPath = this.GetIndexPath(groupIndex, itemIndex);
        if(this.allowSelectItem){
            var inputElement = this.GetSelectedItemInputElement();
            if(inputElement != null){
                var element = this.GetItemTextElementByIndexPath(inputElement.value);
                if(element != null)
                    aspxGetStateController().DeselectElementBySrcElement(element);
                inputElement.value = indexPath;
                element = this.GetItemTextElementByIndexPath(inputElement.value);
                if(element != null)
                    aspxGetStateController().SelectElementBySrcElement(element);
            }
        }
        if(modifyHotTrackSelection){
            var element = this.GetItemTextElementByIndexPath(indexPath);
            if(element != null) this.SetHoverElement(element);
        }
    },
    SetHoverElement: function(element){
        aspxGetStateController().SetCurrentHoverElementBySrcElement(element);
    },
    
    OnAnimationTimer: function(groupIndex){
        var element = this.GetGroupContentAnimationElement(groupIndex);
        if(element != null){
            window.clearTimeout(element.timerID);
            
            var animationOffset = this.animationOffset * element.animationCount;
            var height = element.offsetHeight + (element.expanding ? animationOffset : -animationOffset);
            var innerElement = _aspxGetChildByTagName(element, "TABLE", 0);
            if(innerElement == null)
                innerElement = _aspxGetChildByTagName(element, "UL", 0);
            var finished = (element.expanding ? (height >= innerElement.offsetHeight) : (height <= 0)) ||
                (new Date() - element.animationStart > this.animationMaxDelay);
            if(finished){
                this.ChangeGroupExpandState(groupIndex, element.expanding);
                    
                element.style.overflow = "";
                element.style.height = "";
                element.style.width = "";
            
                if(_aspxIsExists(this.RaiseExpandedChanged))
                    this.RaiseExpandedChanged(groupIndex);
            }
            else{
                element.style.height = height + "px";
                element.animationCount ++;
                element.timerID = window.setTimeout("aspxNBAnimT(\"" + this.name + "\", " + groupIndex + ")", this.animationDelay);
            }
        }
    },
    OnHeaderClick: function(groupIndex, evt){
        var processingMode = this.autoPostBack || this.IsServerEventAssigned("HeaderClick") ? "Server" : "Client";
        if(_aspxIsExists(this.RaiseHeaderClick))
            processingMode = this.RaiseHeaderClick(groupIndex, evt);
            
        var isLinkClicked = (_aspxGetParentByTagName(_aspxGetEventSource(evt), "A") != null);
        if(!isLinkClicked){
            if(processingMode == "Client" && this.allowExpanding){
                var expanded = this.groupsExpanding[groupIndex];
                this.SetExpandedInternal(groupIndex, !expanded);
                this.UpdateHoverState(groupIndex);
            }
            else if(processingMode == "Server")
                this.SendPostBack("HEADERCLICK:" + groupIndex);
        }
    },
    OnItemClick: function(groupIndex, itemIndex, evt){
        var element = this.GetItemElement(groupIndex, itemIndex);
        var isLinkClicked = (_aspxGetParentByTagName(_aspxGetEventSource(evt), "A") != null);
        var linkElement = (!isLinkClicked && element != null) ? _aspxGetChildByTagName(element, "A", 0) : null;

        this.SetSelectedItemInternal(groupIndex, itemIndex, true);
        this.DoItemClick(groupIndex, itemIndex, isLinkClicked || (linkElement != null), evt);

        if(linkElement != null) 
            _aspxNavigateUrl(linkElement.href, linkElement.target);
    },
    OnCallbackInternal: function(result, isError){
        var pos = result.indexOf(__aspxCallBackSeparator);
        if(pos == -1) {
            if(this.groupsExpandingRequest.length > 0)
                result = this.groupsExpandingRequest[0] + __aspxCallBackSeparator + result;
            pos = result.indexOf(__aspxCallBackSeparator);
        }
        if(pos > -1){
            var callBackGroupIndex = parseInt(result.substr(0, pos));
            var element = this.GetGroupContentElement(callBackGroupIndex);
            if(element != null){
                result = result.substring(pos + __aspxCallBackSeparator.length);
                if(result != ""){
                    element.innerHTML = result;
                    element.loaded = true;
                    element.loading = false;
                    
                    if(!isError && _aspxIsExists(this.RaiseExpandedChanged))
                        this.RaiseExpandedChanged(callBackGroupIndex);
                }
                else
                    this.SendPostBack("");
            }
        }
        _aspxArrayRemoveAt(this.groupsExpandingRequest, 0);
    },
    OnCallback: function(result){
        this.OnCallbackInternal(result, false);
    },
    OnCallbackError: function(result){
        this.OnCallbackInternal(result, true);
    },
    // API
    CreateGroups: function(groupsProperties){
        for(var i = 0; i < groupsProperties.length; i ++){
            var group = new ASPxClientNavBarGroup(this, i, groupsProperties[i][0]);
            _aspxArrayPush(this.groups, group);
            group.CreateItems(groupsProperties[i][1]);
        }
    },
    RaiseItemClick: function(groupIndex, itemIndex, htmlEvent){
        var processOnServer = this.autoPostBack || this.IsServerEventAssigned("ItemClick");
        if(!this.ItemClick.IsEmpty()){
            var htmlElement = this.GetItemElement(groupIndex, itemIndex);            
            var args = new ASPxClientNavBarItemEventArgs(processOnServer, this.GetGroup(groupIndex).GetItem(itemIndex), htmlElement, htmlEvent);
            this.ItemClick.FireEvent(this, args);
            processOnServer = args.processOnServer;
        }
        return processOnServer;
    },
    RaiseExpandedChanged: function(groupIndex){
        if(!this.ExpandedChanged.IsEmpty()){
            var args = new ASPxClientNavBarGroupEventArgs(this.GetGroup(groupIndex));
            this.ExpandedChanged.FireEvent(this, args);
        }
    },
    RaiseExpandedChanging: function(groupIndex){
        var processingMode = this.autoPostBack ? "Server" : "Client";
        if(!this.ExpandedChanging.IsEmpty()){
            var args = new ASPxClientNavBarGroupCancelEventArgs(processingMode == "Server", this.GetGroup(groupIndex));
            this.ExpandedChanging.FireEvent(this, args);
            if(args.cancel)
                processingMode = "Handled";
            else 
                processingMode = args.processOnServer ? "Server" : "Client";
        }
        return processingMode;
    },
    RaiseHeaderClick: function(groupIndex, htmlEvent){
        var processingMode = this.autoPostBack || this.IsServerEventAssigned("HeaderClick") ? "Server" : "Client";
        if(!this.HeaderClick.IsEmpty()){
            var htmlElement = this.GetClickableGroupHeaderElement(groupIndex);
            var args = new ASPxClientNavBarGroupClickEventArgs(processingMode == "Server", this.GetGroup(groupIndex), htmlElement, htmlEvent);
            this.HeaderClick.FireEvent(this, args);
            if(args.cancel)
                processingMode = "Handled";
            else 
                processingMode = args.processOnServer ? "Server" : "Client";
        }
        return processingMode;
    },
	GetGroupCount: function(){
	    return this.groups.length;
	},
	GetGroup: function(index){
        return (0 <= index && index < this.groups.length) ? this.groups[index] : null;
	},
	GetGroupByName: function(name){
        for(var i = 0; i < this.groups.length; i ++)
            if(this.groups[i].name == name) return this.groups[i];
        return null;
	},
	GetActiveGroup: function(){
	    if(this.autoCollapse) {
            for(var i = 0; i < this.groups.length; i ++){
                if(this.groups[i].GetExpanded())
                    return this.groups[i];
            }
        }
        return null;
	},
	SetActiveGroup: function(group){
	    if(this.autoCollapse && group != null) 
	        group.SetExpanded(true);
	},
	GetItemByName: function(name){
        for(var i = 0; i < this.groups.length; i ++){
            var item = this.groups[i].GetItemByName(name);
            if(item != null) return item;
        }
        return null;
	},
	GetSelectedItem: function(){
        var inputElement = this.GetSelectedItemInputElement();
        if(inputElement != null && inputElement.value != ""){
             var groupIndex = this.GetGroupIndex(inputElement.value);
             var itemIndex = this.GetItemIndex(inputElement.value);
             if(groupIndex > -1 && itemIndex > -1)
                return this.GetGroup(groupIndex).GetItem(itemIndex);
        }
        return null;
	},
	SetSelectedItem: function(item){
	    var groupIndex = (item != null) ? item.group.index : -1;
	    var itemIndex = (item != null) ? item.index : -1;
	    this.SetSelectedItemInternal(groupIndex, itemIndex, false);
	},
	CollapseAll: function(){
	    for(var i = 0; i < this.groupsExpanding.length; i++){
	        if(this.groupsExpanding[i])
	            this.SetExpandedInternal(i, false);
        }	            
	},
	ExpandAll: function(){
	    for(var i = 0; i < this.groupsExpanding.length; i++){
	        if(!this.groupsExpanding[i])
	            this.SetExpandedInternal(i, true);
        }	            
	},
	
    CheckSelectedItem: function(groupIndex, itemIndex){
        var selectedItem = this.GetSelectedItem();
        if(selectedItem != null && selectedItem.group.index == groupIndex && selectedItem.index == itemIndex)
            this.SetSelectedItem(null);
    },
	ChangeEnabledAttributes: function(groupIndex, itemIndex, method, styleMethod){
	    var indexPath = this.GetIndexPath(groupIndex, itemIndex);
	    var itemElement = this.GetItemElement(groupIndex, itemIndex);
        if(_aspxIsExists(itemElement))
            method(itemElement, "onclick");
        var imageElement = this.GetItemImageElementByIndexPath(indexPath);
        if(_aspxIsExists(imageElement)){
            method(imageElement, "onclick");
            styleMethod(imageElement, "cursor");
   	        var link = _aspxGetChildByTagName(imageElement, "A", 0);
   	        if(link != null)
   	            method(link, "href");
        }
        var textElement = this.GetItemTextElementByIndexPath(indexPath);
        if(_aspxIsExists(textElement)){
            method(textElement, "onclick");
            styleMethod(textElement, "cursor");
   	        var link = _aspxGetChildByTagName(textElement, "A", 0);
   	        if(link != null)
   	            method(link, "href");
   	        link = _aspxGetChildByTagName(textElement, "A", 1);
   	        if(link != null)
   	            method(link, "href");
        }
	},
	GetItemEnabled: function(groupIndex, itemIndex){
	    var indexPath = this.GetIndexPath(groupIndex, itemIndex);
	    var element = this.GetItemTextElementByIndexPath(indexPath);
	    if(element == null)
	        element = this.GetItemImageElementByIndexPath(indexPath);
	    if(element != null)
	        return !_aspxIsExists(element.enabled) || element.enabled;
	    return true;
	},
	SetItemEnabled: function(groupIndex, itemIndex, enabled){
        if(this.GetItemEnabled(groupIndex, itemIndex) == enabled) return;	
        
	    var indexPath = this.GetIndexPath(groupIndex, itemIndex);
	    var element = this.GetItemTextElementByIndexPath(indexPath);
	    if(element == null)
	        element = this.GetItemImageElementByIndexPath(indexPath);
	    if(element != null){
	        element.enabled = enabled;
	        if(enabled){
	            aspxGetStateController().EnableElement(element);
	            this.ChangeEnabledAttributes(groupIndex, itemIndex, _aspxRestoreAttribute, _aspxRestoreStyleAttribute);
	         }
	        else{
	            this.CheckSelectedItem(groupIndex, itemIndex);

	            aspxGetStateController().DisableElement(element);
	            this.ChangeEnabledAttributes(groupIndex, itemIndex, _aspxResetAttribute, _aspxResetStyleAttribute);
	        }
	    }
	},
	GetItemImageUrl: function(groupIndex, itemIndex){
	    var indexPath = this.GetIndexPath(groupIndex, itemIndex);
        var element = this.GetItemImageElementByIndexPath(indexPath);
        if(element != null){
	        var img = _aspxGetChildByTagName(element, "IMG", 0);
	        if(img != null)
	            return img.src;
        }
        element = this.GetItemTextElementByIndexPath(indexPath);
        if(element != null){
	        var img = _aspxGetChildByTagName(element, "IMG", 0);
	        if(img != null)
	            return img.src;
        }
        return "";
	},
	SetItemImageUrl: function(groupIndex, itemIndex, url){
	    var indexPath = this.GetIndexPath(groupIndex, itemIndex);
        var element = this.GetItemImageElementByIndexPath(indexPath);
        if(element != null){
	        var img = _aspxGetChildByTagName(element, "IMG", 0);
	        if(img != null)
	            img.src = url;
        }
        element = this.GetItemTextElementByIndexPath(indexPath);
        if(element != null){
	        var img = _aspxGetChildByTagName(element, "IMG", 0);
	        if(img != null)
	            img.src = url;
        }
	},
	GetItemNavigateUrl: function(groupIndex, itemIndex){
	    var indexPath = this.GetIndexPath(groupIndex, itemIndex);
	    var element = this.GetItemTextElementByIndexPath(indexPath);
	    if(element != null){
	        var link = _aspxGetChildByTagName(element, "A", 0);
	        if(link != null)
	            return link.href;
	    }
        element = this.GetItemImageElementByIndexPath(indexPath);
	    if(element != null){
	        var link = _aspxGetChildByTagName(element, "A", 0);
	        if(link != null)
	            return link.href;
	    }
	    return "";
	},
	SetItemNavigateUrl: function(groupIndex, itemIndex, url){
	    var indexPath = this.GetIndexPath(groupIndex, itemIndex);
	    var element = this.GetItemTextElementByIndexPath(indexPath);
	    if(element != null){
	        var link = _aspxGetChildByTagName(element, "A", 0);
	        if(link != null)
	            link.href = url;
	        link = _aspxGetChildByTagName(element, "A", 1);
	        if(link != null)
	            link.href = url;
	    }
	    var element = this.GetItemImageElementByIndexPath(indexPath);
	    if(element != null){
	        var link = _aspxGetChildByTagName(element, "A", 0);
	        if(link != null)
	            link.href = url;
	    }
	},
	GetItemText: function(groupIndex, itemIndex){
	    var indexPath = this.GetIndexPath(groupIndex, itemIndex);
	    var element = this.GetItemTextElementByIndexPath(indexPath);
	    if(element != null){
	        var textNode = _aspxGetChildTextNode(element, 0);
	        if(textNode != null)
	            return textNode.nodeValue;
	    }
	    return "";
	},
	SetItemText: function(groupIndex, itemIndex, text){
	    var indexPath = this.GetIndexPath(groupIndex, itemIndex);
	    var element = this.GetItemTextElementByIndexPath(indexPath);
	    if(element != null){
	        var textNode = _aspxGetChildTextNode(element, 0);
	        if(textNode != null)
	            textNode.nodeValue = text;
	    }
	},
	GetItemVisible: function(groupIndex, itemIndex){
        var element = this.GetItemElement(groupIndex, itemIndex);
	    return (element != null) ? _aspxGetElementDisplay(element) : false;
	},
	SetItemVisible: function(groupIndex, itemIndex, visible){
        if(!visible)
            this.CheckSelectedItem(groupIndex, itemIndex);

        var element = this.GetItemElement(groupIndex, itemIndex);
        if(element != null)
            _aspxSetElementDisplay(element, visible);
	}    
});
ASPxClientNavBarGroup = _aspxCreateClass(null, {
	constructor: function(navBar, index, name){
	    this.navBar = navBar;
        this.index = index;
        this.name = name;
        
        this.items = []; 
	},
    CreateItems: function(itemsProperties){
        for(var i = 0; i < itemsProperties.length; i ++){
            var item = new ASPxClientNavBarItem(this.navBar, this, i, itemsProperties[i][0]);
            _aspxArrayPush(this.items, item);
        }
    },
	GetExpanded: function(){
	    return this.navBar.groupsExpanding[this.index];
	},
	SetExpanded: function(value){
        this.navBar.SetExpandedInternal(this.index, value);
	},
	GetItemCount: function(groupIndex){
        return this.items.length;
	},
	GetItem: function(index){
        return (0 <= index && index < this.items.length) ? this.items[index] : null;
	},
	GetItemByName: function(name){
        for(var i = 0; i < this.items.length; i ++)
            if(this.items[i].name == name) return this.items[i];
        return null;
	}
});
ASPxClientNavBarItem = _aspxCreateClass(null, {
	constructor: function(navBar, group, index, name){
	    this.navBar = navBar;
	    this.group = group;
        this.index = index;
        this.name = name;
	},
	GetEnabled: function(){
	    return this.navBar.GetItemEnabled(this.group.index, this.index);
	},
	SetEnabled: function(value){
	    this.navBar.SetItemEnabled(this.group.index, this.index, value);
	},
	GetImageUrl: function(){
	    return this.navBar.GetItemImageUrl(this.group.index, this.index);
	},
	SetImageUrl: function(value){
	    this.navBar.SetItemImageUrl(this.group.index, this.index, value);
	},
	GetNavigateUrl: function(){
	    return this.navBar.GetItemNavigateUrl(this.group.index, this.index);
	},
	SetNavigateUrl: function(value){
	    this.navBar.SetItemNavigateUrl(this.group.index, this.index, value);
	},
	GetText: function(){
	    return this.navBar.GetItemText(this.group.index, this.index);
	},
	SetText: function(value){
	    this.navBar.SetItemText(this.group.index, this.index, value);
	},
	GetVisible: function(){
	    return this.navBar.GetItemVisible(this.group.index, this.index);
	},
	SetVisible: function(value){
	    this.navBar.SetItemVisible(this.group.index, this.index, value);
	}    
});
ASPxClientNavBarItemEventArgs = _aspxCreateClass(ASPxClientProcessingModeEventArgs, {
	constructor: function(processOnServer, item, htmlElement, htmlEvent){
	    this.constructor.prototype.constructor.call(this, processOnServer);
        this.item = item;
        this.htmlElement = htmlElement;
        this.htmlEvent = htmlEvent;
    }
});
ASPxClientNavBarGroupEventArgs = _aspxCreateClass(ASPxClientEventArgs, {
	constructor: function(group){
        this.group = group;
    }
});
ASPxClientNavBarGroupCancelEventArgs = _aspxCreateClass(ASPxClientCancelEventArgs, {
	constructor: function(processOnServer, group){
	    this.constructor.prototype.constructor.call(this, processOnServer);
        this.group = group;
    }
});
ASPxClientNavBarGroupClickEventArgs = _aspxCreateClass(ASPxClientNavBarGroupCancelEventArgs, {
	constructor: function(processOnServer, group, htmlElement, htmlEvent){
	    this.constructor.prototype.constructor.call(this, processOnServer, group);
        this.htmlElement = htmlElement;
        this.htmlEvent = htmlEvent;        
    }
});

function aspxNBAnimT(name, groupIndex){
    var nb = aspxGetControlCollection().Get(name);
    if(nb != null) nb.OnAnimationTimer(groupIndex);
}
function aspxNBHClick(evt, name, groupIndex){
    var nb = aspxGetControlCollection().Get(name);
    if(nb != null) nb.OnHeaderClick(groupIndex, evt);
    evt.cancelBubble = true;
    return true;
}
function aspxNBIClick(evt, name, groupIndex, itemIndex){
    var nb = aspxGetControlCollection().Get(name);
    if(nb != null) nb.OnItemClick(groupIndex, itemIndex, evt);
    evt.cancelBubble = true;
    return true;
}