// http://extjs.com/forum/showthread.php?t=25381
Ext.override(Ext.layout.BorderLayout,{
	northTitleAdded:false
	,southTitleAdded:false
	,eastTitleAdded:false
	,westTitleAdded:false

	,doCollapsedTitle:function(ct){
		//TDGi custom title for any region
		//new config options for north/south regions:
		//  collapsedTitle     : 'string'
		//  collapsedTitleCls :  'string'

		//new config options for east/westregions:
		//  collapsedTitleImg   : 'string'
		//  collapsedTitleCls   :  'string'

		var cDiv = ct.collapsedEl;

		if(ct.collapsedTitle){
            var tpl = new Ext.Template('<div style="float: left;">{txt}</div>');
            var insertedHtml = tpl.insertFirst(cDiv,{txt:ct.collapsedTitle });
            if(ct.collapsedTitleStyle){
				insertedHtml.applyStyles(ct.collapsedTitleStyle);
            }
            if(ct.collapsedTitleCls){
				Ext.get(insertedHtml).addClass(ct.collapsedTitleCls);
            }
			return(true)
		}else if(ct.collapsedTitleImg){
			var tpl = new Ext.Template('<img style="padding: 0px;" src="{src}"></img>');
			var insertedHtml = tpl.append(cDiv,{src:ct.collapsedTitleImg });
			if(ct.collapsedTitleStyle){
                insertedHtml.applyStyles(ct.collapsedTitleStyle);
            }
			if(ct.collapsedTitleCls){
				Ext.get(insertedHtml).addClass(ct.collapsedTitleCls);
			}
			return(true)
        }else{
			console.info('wtf');
			return(false);
        }
    }
    // private
    ,onLayout:function(ct,target){
        var collapsed;
        if(!this.rendered){
            target.position();
            target.addClass('x-border-layout-ct');
            var items = ct.items.items;
            collapsed = [];
            for(var i = 0, len = items.length; i < len; i++) {
                var c = items[i];
                var pos = c.region;
                if(c.collapsed){
                    collapsed.push(c);
                }
                c.collapsed = false;
                if(!c.rendered){
                    c.cls = c.cls ? c.cls +' x-border-panel' : 'x-border-panel';
                    c.render(target, i);
                }
                this[pos] = pos != 'center' && c.split ?
                    new Ext.layout.BorderLayout.SplitRegion(this, c.initialConfig, pos) :
                    new Ext.layout.BorderLayout.Region(this, c.initialConfig, pos);
                this[pos].render(target, c);
            }
            this.rendered = true;
        }
        var size = target.getViewSize();
        if(size.width < 20 || size.height < 20){ // display none?
            if(collapsed){
                this.restoreCollapsed = collapsed;
            }
            return;
        }else if(this.restoreCollapsed){
            collapsed = this.restoreCollapsed;
            delete this.restoreCollapsed;
        }
        var w = size.width, h = size.height;
        var centerW = w, centerH = h, centerY = 0, centerX = 0;

        var n = this.north, s = this.south, west = this.west, e = this.east, c = this.center;
        if(!c){
            throw 'No center region defined in BorderLayout ' + ct.id;
        }

        if(n && n.isVisible()){
            var b = n.getSize();
            var m = n.getMargins();
            b.width = w - (m.left+m.right);
            b.x = m.left;
            b.y = m.top;
            centerY = b.height + b.y + m.bottom;
            centerH -= centerY;
            n.applyLayout(b);
        
            //TDGi custom title for north
            //new config options for north region:
            //  collapsedTitle    : 'string'
            //  collapsedTitleCls :  'string'
            
            if (typeof n.collapsedEl != 'undefined' && n.collapsedTitle && this.northTitleAdded == false) {
                if (this.doCollapsedTitle(n)) {
                    this.northTitleAdded = true;
                }
            }                    
        }
        if(s && s.isVisible()){
            var b = s.getSize();
            var m = s.getMargins();
            b.width = w - (m.left+m.right);
            b.x = m.left;
            var totalHeight = (b.height + m.top + m.bottom);
            b.y = h - totalHeight + m.top;
            centerH -= totalHeight;
            s.applyLayout(b);

            //TDGi custom title for south
            //new config options for south region:
            //  collapsedTitle    : 'string'
            //  collapsedTitleCls :  'string'
            if (typeof s.collapsedEl != 'undefined' && s.collapsedTitle && this.southTitleAdded == false) {
                if (this.doCollapsedTitle(s)) {
                    this.southTitleAdded = true;
                }
            }                
        }
        if(west && west.isVisible()){
            var b = west.getSize();
            var m = west.getMargins();
            b.height = centerH - (m.top+m.bottom);
            b.x = m.left;
            b.y = centerY + m.top;
            var totalWidth = (b.width + m.left + m.right);
            centerX += totalWidth;
            centerW -= totalWidth;
            west.applyLayout(b);

            //TDGi custom title for west
            //new config options for wset region:
            //  collapsedTitleImg : 'string'
            //  collapsedTitleCls :  'string'
            if (typeof west.collapsedEl != 'undefined' && west.collapsedTitleImg && this.westTitleAdded == false) {
                if (this.doCollapsedTitle(west)) {
                    this.westTitleAdded = true;
                }
            
            }                
            
        }
        if(e && e.isVisible()){
            var b = e.getSize();
            var m = e.getMargins();
            b.height = centerH - (m.top+m.bottom);
            var totalWidth = (b.width + m.left + m.right);
            b.x = w - totalWidth + m.left;
            b.y = centerY + m.top;
            centerW -= totalWidth;
            e.applyLayout(b);
            //TDGi custom title for east
            //new config options for east region:
            //  collapsedTitleImg : 'string'
            //  collapsedTitleCls :  'string'
            if (typeof e.collapsedEl != 'undefined' && e.collapsedTitleImg && this.eastTitleAdded == false) {
                if (this.doCollapsedTitle(e)) {
                    this.eastTitleAdded = true;
                }
            }                
            
        }

		var m = c.getMargins();
		var centerBox = {
			x:centerX + m.left
			,y:centerY + m.top
			,width:centerW - (m.left+m.right)
			,height:centerH - (m.top+m.bottom)
		};
		c.applyLayout(centerBox);

		if(collapsed){
			for(var i = 0, len = collapsed.length; i < len; i++){
				collapsed[i].collapse(false);
			}
		}

		if(Ext.isIE && Ext.isStrict){ // workaround IE strict repainting issue
			target.repaint();
		}
	}
}); 
