RWS.Bread=
{
	HandleCrumb : function(crumb,skipExecution)
	{
		var bread = RWS.Bread.breadCrumbs;
		
		// If this is the last crumb, ignore it. Eventually you won't be able to click it anyway.
		if (crumb.index>=bread.items.length - 1)
			return;
		
		// Everything after (and including? (NOT)) this crumb need to be removed.
		for (var i=bread.items.length-1; i>crumb.index; i--){
			//Ext.getCmp('crumb_'+i).el.slideOut('l');
			bread.remove(Ext.getCmp('crumb_'+i));
		}


		// If this was the first crumb, delete that too.
		if (crumb.index==0){
			bread.remove(Ext.getCmp('crumb_0'));
			bread.hide();
		}

		if (crumb.fn !== undefined && skipExecution != true)
		{
			if(RWS.Details.active)
				RWS.Details.CloseAll();
			crumb.fn();
		}
		
		this.ResetCSS();
	}
	
	,HandleCrumbByIndex : function(index)
	{
		var me = RWS.Bread;
		var bread = me.breadCrumbs;
		var crumb = bread.getComponent(bread.items[index-1]);
		me.HandleCrumb(crumb,false);
	}
	
	,MatchesLastCrumb : function(o)
	{
		var me = RWS.Bread;
		var bread = me.breadCrumbs;
		if (!bread)
			return false;
			
		var count = bread.items.items.length;
		if (count == 0)
			return false;
			
		var o2 = bread.items.items[count-1].initialConfig.o;
		return o2 && COMP.ObjectsIdentical(o,o2);
	}

	,RemoveLastCrumb : function()
	{
		RWS.Bread.Back(true);
	}
	
	,AddCrumb : function(title,fn,init,refObject, cb)	
	{
		RWS.Bread.breadCrumbs = Ext.getCmp('breadCrumbs');
		
		var me = RWS.Bread;
		var bread = me.breadCrumbs;
		if (bread.items.length==0 && init != true)
			me.InitCrumbs(cb);
		
		
		var index = bread.items.length;
		var classes = 'allCrumbs'
		if(index > 0)
			classes += ' crumb_last'
		var prevCrumb = bread.getComponent(bread.items.length-1);
		if(prevCrumb && RWS.Bread.MatchesLastCrumb(refObject))
			return;
		bread.add(new Ext.BoxComponent({
		   		index: index
				,id:'crumb_' + index
				,cls:classes
				,fn:fn
				,autoEl:{
					tag:'div'
					,style:'float:left;'
					,children:[{
						tag:'span'
					 	,html:title.toString()
					},{
						tag:'div'
					}]
				}
				,listeners:{
					render:function(comp){
						comp.el.on('click', function(){RWS.Bread.HandleCrumb(comp)});
					}
				}
				,o:refObject
		}));
		
		// if(!cb)
		// 	cb = {
		// 		callback:function(){}
		// 		,scope:this
		// 	} 
		if(bread.isVisible())
			bread.findById('crumb_' + index).show();
		else if(!init)
			bread.show();
		if(cb && cb.callback)
			cb.callback.call(cb.scope);
		
		var width = 0;
		for(var i =0; i < bread.items.length; i++){
			 //width += bread.items.items[i].getWidth()
		} 
		bread.doLayout(); 
		  
		Ext.History.add('_');
	}
	,ResetCSS : function()
	{
		var bread = RWS.Bread.breadCrumbs;
		for (var i=0; i<bread.items.length; i++)
		{
			var crumb = bread.getComponent(i);
			if (i < bread.items.length-1)
			{
				crumb.removeClass('crumb_last');
				crumb.addClass('crumb');
			}
			else
			{
				crumb.removeClass('crumb');
				crumb.addClass('crumb_last');
			}
		}
	}
	,Back : function(skipExecution)
	{
		var me = RWS.Bread;
		var bread = me.breadCrumbs;
		if (!bread)
			return;
			
		var count = bread.items.items.length;
		if (count == 0)
			return;
			
		me.HandleCrumb(Ext.getCmp('crumb_' + (count-2).toString()), skipExecution);
	}
	,Clear : function()
	{
		var breadCrumbs = RWS.Bread.breadCrumbs;
		if(breadCrumbs)
			breadCrumbs.items.clear() 
	}
	,InitCrumbs : function(cb)
	{
		RWS.Bread.AddCrumb(L(6229), function() {RWS.Search.StartOver()},true, null, cb); //New Search
	}
	,CrumbCount : function()
	{
		var me = RWS.Bread;
		if (me.breadCrumbs.items===undefined) return 0;
		return me.breadCrumbs.items.length;
	}
	,breadCrumbs: Ext.getCmp('breadCrumbs')
}

COMP.Back = RWS.Bread.Back;
if (window.COMP) COMP.Broadcast('scriptLoaded_rws_bread');