/**
 * @classDescription Manages adding elements to the breadcrumb trail.
 * 
 * @author Adam J. McIntyre
 */

BreadcrumbManager = function(){
    var _bcEl = 'breadcrumbs_content';
    return{
        // Add a breadcrumb to the end of the trail. 
        // Will remove last crumb unless bool. 
        addCrumb : function(cr,keepLastCrumb){
            if(! keepLastCrumb){
               this.popCrumb(); 
            }

            YAHOO.util.Event.onAvailable(_bcEl, function(){
                var el = document.getElementById(_bcEl);
                el.innerHTML += " &gt; " + cr;
            });
        },
        popCrumb : function(){
            YAHOO.util.Event.onAvailable(_bcEl, function(){
                var el = document.getElementById(_bcEl);
                el.innerHTML = el.innerHTML.substr(0,el.innerHTML.lastIndexOf('&gt;'));                
            });
        },
        _maybeEllipsify : function(){
            if(YAHOO.util.Dom.getStyle(_bcEl,'float') != 'left' && YAHOO.util.Dom.getStyle('breadcrumbs_print','float') != 'right' 
                && YAHOO.util.Dom.getStyle('addThis_breadcrumb','float') != 'right'){                    
                    if (!this.counter) this.counter = 0;
                    this.counter++;
                    if (this.counter > 5) return; 
                    
                var o = this;
                setTimeout(function(){ o._maybeEllipsify() }, 200);
            }
            else{
                var crumbRegion = YAHOO.util.Dom.getRegion(_bcEl);  
                var crumbOffset = crumbRegion ? crumbRegion.right : 0;

                // Set the maximum "right" amount at the end of the top nav
                var maxRight = YAHOO.util.Dom.getViewportWidth();
                var topReg = YAHOO.util.Dom.getRegion('topNav');
                if(topReg && topReg.right > 0){
                    maxRight = topReg.right;    
                }

                var printElRegion = YAHOO.util.Dom.getRegion('breadcrumbs_print'); // We'll need to add this ID to the component
                var printElOffset = maxRight;
                if(printElRegion && printElRegion.left > 0){
                    printElOffset = printElRegion.left;
                }

                var addThisRegion = YAHOO.util.Dom.getRegion('addThis_breadcrumb');
                var addThisOffset = maxRight;
                if(addThisRegion && addThisRegion.left > 0){
                    addThisOffset = addThisRegion.left;
                }

                var farthestLeft = Math.min(printElOffset,addThisOffset);

                if(crumbOffset > farthestLeft){
                    var titleEl = document.getElementById('breadcrumb_currentPage');
                    titleEl.title = titleEl.innerHTML;            
                }
                
                var o = this;

                if(crumbOffset > farthestLeft){
                    (function(){
                        o.truncate();
                        crumbOffset = YAHOO.util.Dom.getRegion(_bcEl).right;
                        if(crumbOffset > farthestLeft){
                            setTimeout(arguments.callee,100);
                        }
                        else{
                            return;
                        }
                    })();  
                }
            }
        },
        ellipsify : function(){
            var o = this;
            
            if(YAHOO.env.ua.webkit > 0){    // Safari has a tendency to block if Elements are not styled, thus the delay
                YAHOO.util.Event.addListener(window,'load',function(){
                    setTimeout(function(){o._maybeEllipsify()},100);
                });
            }
            else{
                YAHOO.util.Event.onDOMReady(function(){
                    o._maybeEllipsify();
                });
            }
        },
        truncate: function(){
            var ELLIPSIS = '...';
            var bcEl = document.getElementById(_bcEl);
            
            // Update the breadcrumb component to wrap all links in a span with a class of "full"   
            var replaceEls = YAHOO.util.Dom.getElementsByClassName('full', 'span', bcEl);
            
            // We have elements left to make ellipses
            if (replaceEls.length > 0) {
                var pEl = replaceEls[0];
                var rEl = pEl.getElementsByTagName('a')[0];
                rEl.title = rEl.innerHTML;
                rEl.innerHTML = ELLIPSIS;
                YAHOO.util.Dom.replaceClass(pEl,'full','truncated');
            }
            else { // We need to truncate the text of the last item...uh oh!
                var titleEl = document.getElementById('breadcrumb_currentPage');
                if(titleEl.innerHTML.lastIndexOf(' ') > 0){
                    titleEl.innerHTML = titleEl.innerHTML.substr(0, titleEl.innerHTML.lastIndexOf(' ')) + ELLIPSIS;
                }
                else{
                    titleEl.innerHTML = ELLIPSIS;
                }                
            }
        }
    }
}();
