
Type.registerNamespace('AjaxControlToolkit');
Type.registerNamespace('BlueBridge.SharePointExtensions.Menu.Publishing');

BlueBridge.SharePointExtensions.Menu.Publishing.BreadcrumbBehavior = function(element) 
{
    BlueBridge.SharePointExtensions.Menu.Publishing.BreadcrumbBehavior.initializeBase(this, [element]);

    // Property values
    this._hoverCssClass = null;
    this._popupCssClass = null;
    this._offsetX = 0;
    this._offsetY = 0;

    // Variables
    this._popupBehaviors = null;
    
    // Handler delegates
    this._populateHandler = null;
}

BlueBridge.SharePointExtensions.Menu.Publishing.BreadcrumbBehavior.prototype = {

    initialize : function() 
    {
        jslog.debug ("BreadcrumbBehavior.initialize ...");
        
        BlueBridge.SharePointExtensions.Menu.Publishing.BreadcrumbBehavior.callBaseMethod(this, 'initialize');
        this._populateHandler = Function.createDelegate(this, this._onPopulate);
        this._popupBehaviors = {};
        this.initializeItems();
    },
    initializeItems : function() 
    {       
        jslog.debug ("BreadcrumbBehavior.initializeItems ...");
        
        var element = this.get_element();
        var spans = element.getElementsByTagName('SPAN');
        var index = 0;
        
        for(var s = 0; s < spans.length; s++)
        {
            var span = spans[s];
            
            jslog.debug ("BreadcrumbBehavior span: " + span.id); 
            
            if(span.getElementsByTagName('A').length > 0)
            {               
                var contextKey2 = span.populate ? span.populate : span.getAttribute("populate");  
                if(contextKey2 != null && contextKey2 != '')
                {
                    var link = span.getElementsByTagName('A')[0];
                    var parentElement = link.parentNode;
                    var childElement = document.createElement('SPAN');
                    var childElementId = this.get_id() + "_PopupElement_" + index;

                    parentElement.appendChild(childElement);          
                    childElement.setAttribute('id', childElementId);
                    Sys.UI.DomElement.addCssClass(childElement, this._popupCssClass);

                    var popup = $create(BlueBridge.SharePointExtensions.Menu.Publishing.BreadcrumbHoverMenuBehavior, 
                    { "id":this.get_id() + '_PopupBehavior_' + index, 
                    "popupElement":childElement,
                    "PopupPosition":AjaxControlToolkit.HoverMenuPopupPosition.Bottom,
                    "PopDelay":50,
                    "HoverCssClass":this._hoverCssClass,
                    "OffsetY":this._offsetY,
                    "OffsetX":this._offsetX}, null, null, link);

                    popup.set_contextKey(contextKey2);
                    popup.add_populate(this._populateHandler);
                    popup.itemIndex = index;
                    popup.result = span.childNodesHtml ? span.childNodesHtml : span.getAttribute("childNodesHtml");
                    this._popupBehaviors[index] = popup;
                    index++;
                } 
            }
        }
    },

    dispose : function() 
    {
        this._populateHandler = null;
        BlueBridge.SharePointExtensions.Menu.Publishing.BreadcrumbBehavior.callBaseMethod(this, 'dispose');
    },
    
    get_HoverCssClass : function() 
    {
        return this._hoverCssClass;
    },
    set_HoverCssClass : function(value) 
    {
        if (this._hoverCssClass != value) 
        {
            this._hoverCssClass = value;
            this.raisePropertyChanged('HoverCssClass');
        }
    },
    get_PopupCssClass : function() 
    {
        return this._popupCssClass;
    },
    set_PopupCssClass : function(value) 
    {
        if (this._popupCssClass != value) 
        {
            this._popupCssClass = value;
            this.raisePropertyChanged('PopupCssClass');
        }
    },
    get_OffsetX : function() 
    {

        return this._offsetX;
    },
    set_OffsetX : function(value) 
    {
        if (this._offsetX != value) {
            this._offsetX = value;
            this.raisePropertyChanged('OffsetX');
        }
    },
    
    get_OffsetY : function() 
    {

        return this._offsetY;
    },
    set_OffsetY : function(value) {
        if (this._offsetY != value) {
            this._offsetY = value;
            this.raisePropertyChanged('OffsetY');
        }
    },
    _onPopulate : function(sender, args) 
    {
        
        jslog.debug ("BlueBridge.SharePointExtensions.Menu.Publishing.BreadcrumbBehavior._onPopulate ...");

        var index = sender.itemIndex;
        
        if(this._callInProc == null)
            this._callInProc = {};
            
        if(this._callInProc[index])
            return;

        var context = {};
        context.id = this._id;
        context.itemIndex = index;
        
        if(sender.result != null && sender.result != '')
        {
            this._onMethodComplete (sender.result, context, null);
            return;
        }
        
        BreadcrumbExtender_DoCallback(context, sender._contextKey);
    
        this._callInProc[index] = true;
        
        $common.updateFormToRefreshATDeviceBuffer();  
    },
    _onMethodComplete : function (result, userContext, methodName) 
    {
        jslog.debug ("BlueBridge.SharePointExtensions.Menu.Publishing.BreadcrumbBehavior._onMethodComplete ...");
        
        var index = userContext.itemIndex;
        var popupBehavior = this._popupBehaviors[index];

        if(popupBehavior._populated)
            return;
 
        if(result == '')
        {
            popupBehavior._populated = false;
            return;
        }

        var popupElementId = this.get_id() + '_PopupElement_' + index;
        var popupElement = $get(popupElementId); 
        popupElement.innerHTML = result; 
        
        if(popupBehavior._popupBehavior)
            popupBehavior._popupBehavior.setupPopup();
        
        popupBehavior._populated = true;
        
    },
    _onMethodError : function(webServiceError, userContext, methodName) 
    {
        var e = this.get_element();
        if (e) 
        {
            if (webServiceError.get_timedOut()) 
            {
                e.innerHTML = AjaxControlToolkit.Resources.DynamicPopulate_WebServiceTimeout;
            } 
            else 
            {
                e.innerHTML = String.format(AjaxControlToolkit.Resources.DynamicPopulate_WebServiceError, webServiceError.get_statusCode());
            }
        }
    }    
}

function BreadcrumbExtender_OnCallbackComplete(result, context)
{
    if(context != null)
    {
        var behavior = $find(context.id);
        if(behavior != null)
            behavior._onMethodComplete(result, context, null);
    }
} 

function BreadcrumbExtender_OnCallbackError(result, context)
{
    if(context != null)
    {
        var behavior = $find(context.id);
        if(behavior != null)
            behavior._onMethodError(result, context, null);
    }
} 

BlueBridge.SharePointExtensions.Menu.Publishing.BreadcrumbBehavior.registerClass('BlueBridge.SharePointExtensions.Menu.Publishing.BreadcrumbBehavior', AjaxControlToolkit.BehaviorBase);

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();