﻿var TARGET_EXT_VERSION = "2.2";

/*
 * inicializacia singletonov na stranke
 */
Ext.QuickTips.init();
Ext.state.Manager.setProvider(new Ext.state.CookieProvider());

/*
 * custom extensions extjs jadra
 */
if (Ext.version != TARGET_EXT_VERSION)
    alert("[DEBUG] Upozornenie: Verzia ExtJs bola zmenena.\nSkontrolujte aktualnost Cora.WebControls/ext-override.js oproti novej verzii a upravte tamojsiu konstantu TARGET_EXT_VERSION pre odstranenie tohto upozornenia.");
if (Ext.isIE6)
{
	if (navigator.userAgent.toLowerCase().indexOf("msie 8") > 0)
		alert("Upozornenie: Na prehliadači Internet Explorer 8 je aplikácia podporovaná len v móde kompatibility. Prosím zapnite si ho.");
	else
		alert("Upozornenie: Aplikácia nie je podporovaná na prehliadači Internet Explorer 6.");
}

// umoznuje BorderLayoutu akceptovat rozmer ako percento nadradeneho kontajnera (N,S:height; E,W:width)
// oproti ext-2.2 boli pridane miesta oznacene "added"
// vid http://extjs.com/forum/showthread.php?t=48859; upravene
Ext.override(Ext.layout.BorderLayout, {
    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;
/*added*/       this.convertPctSizes(c, target);
                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) {
            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);
        }
        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);
        }
        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);
        }
        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);
        }

        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) {
            target.repaint();
        }
    },

    /*added*/
    convertPctSizes: function(c, target) {
        if ((c.region == 'east' || c.region == 'west') && typeof c.width == 'string') {
            var pct = c.width.match(/(\d+)%/);
            if (pct[1]) {
                c.width = Ext.fly(target).getWidth(true) / 100 * parseInt(pct[1], 10);
            }
        } else if ((c.region == 'north' || c.region == 'south') && typeof c.height == 'string') {
            var pct = c.height.match(/(\d+)%/);
            if (pct[1]) {
                c.height = Ext.fly(target).getHeight(true) / 100 * parseInt(pct[1], 10);
            }
        }
    }
});

/* Nasledujuce 2 overridy doplnaju parameter Ext.Window.constrainToCustomElem, ktorym mozme vynutit restrikciu umiestnenia
 * okna na lubovolny prvok (napr. document.body), nielen na nadradeny kontajner ako default (typicky WindowManager umiestnuje 
 * do prazdnych DIV-ov, default spravanie constrain[Header] je tedachaoticke).
 */
Ext.override(Ext.Window, {
    constrainToCustomElem: null,           /*added*/
    
    doConstrain: function() {
        if(this.constrain || this.constrainHeader){
            var offsets;
            if(this.constrain){
                offsets = {
                    right:this.el.shadowOffset,
                    left:this.el.shadowOffset,
                    bottom:this.el.shadowOffset
                };
            }else {
                var s = this.getSize();
                offsets = {
                    right:-(s.width - 100),
                    bottom:-(s.height - 25)
                };
            }

/*modif*/   var xy = this.el.getConstrainToXY(this.constrainToCustomElem == null ? this.container : this.constrainToCustomElem, true, offsets);
            if(xy){
                this.setPosition(xy[0], xy[1]);
            }
        }      
    }
});

Ext.override(Ext.Window.DD, {
    startDrag: function() {
        var w = this.win;
        this.proxy = w.ghost();
        if (w.constrain !== false) {
            var so = w.el.shadowOffset;
/*modif*/   this.constrainTo(w.constrainToCustomElem == null ? w.container : w.constrainToCustomElem, { right: so, left: so, bottom: so });
        } else if (w.constrainHeader !== false) {
            var s = this.proxy.getSize();
/*modif*/   this.constrainTo(w.constrainToCustomElem == null ? w.container : w.constrainToCustomElem, { right: -(s.width - this.headerOffsets[0]), bottom: -(s.height - this.headerOffsets[1]) });
        }
    }
});

Ext.override(Ext.TabPanel, {
	idDelimiter: '_____'	/* __ nam nestaci, objavuje sa aj v spajanych hodnotach */
});

Ext.extend(Ext.menu.MenuNav, Ext.KeyNav, {
	doRelay: function(e, h) {
		var k = e.getKey();
		if (!this.menu.activeItem && e.isNavKeyPress() && k != e.SPACE && k != e.RETURN) {
			this.menu.tryActivate(0, 1);
			return false;
		}

		if (!e.isSpecialKey())	// pridane - naviguje sa len ne-pismenovymi klavesami
			return true;

		return h.call(this.scope || this, e, this.menu);
	}
});

Ext.override(Ext.form.TextField, {
	filterKeys: function(e) {
		if (e.ctrlKey) {
			return;
		}
		var k = e.getKey();
		if ((Ext.isGecko || Ext.isOpera /* added */) && (e.isNavKeyPress() || k == e.BACKSPACE || (k == e.DELETE && e.button == -1))) {
			return;
		}
		var c = e.getCharCode(), cc = String.fromCharCode(c);
		if (!Ext.isGecko && e.isSpecialKey() && !cc) {
			return;
		}
		if (!this.maskRe.test(cc)) {
			e.stopEvent();
		}
	}
});

if(typeof(Sys)!=="undefined")Sys.Application.notifyScriptLoaded();