var fleXenv = {
    fleXcrollInit: function() {
        this.addTrggr(window, 'load', this.globalInit)    },
    fleXcrollMain: function(f) {
        var g = document,
        wD = window,
        nV = navigator;
        if (!g.getElementById || !g.createElement) return;
        if (typeof(f) == 'string') f = document.getElementById(f);
        if (f == null || nV.userAgent.indexOf('OmniWeb') != -1 || ((nV.userAgent.indexOf('AppleWebKit') != -1 || nV.userAgent.indexOf('Safari') != -1) && !(typeof(HTMLElement) != "undefined" && HTMLElement.prototype)) || nV.vendor == 'KDE' || (nV.platform.indexOf('Mac') != -1 && nV.userAgent.indexOf('MSIE') != -1)) return;
        if (f.scrollUpdate) {
            f.scrollUpdate();
            return
        };
        if (!f.id || f.id == '') {
            var h = "wp__",
            c = 1;
            while (document.getElementById(h + c) != null) {
                c++
            };
            f.id = h + c
        }
        var k = f.id;
        f.fleXdata = new Object();
        var l = f.fleXdata;
        l.keyAct = {
            _37: ['-1s', 0],
            _38: [0, '-1s'],
            _39: ['1s', 0],
            _40: [0, '1s'],
            _33: [0, '-1p'],
            _34: [0, '1p'],
            _36: [0, '-100p'],
            _35: [0, '+100p']
        };
        var offsetLR = 15 // offset content from left or right when vert scroll is off 
        l.wheelAct = ["-2s", "2s"];
        l.baseAct = ["-2s", "2s"];
        var m = createDiv('contentwrapper', true),
        mDv = createDiv('mcontentwrapper', true),
        tDv = createDiv('scrollwrapper', true),
        pDv = createDiv('copyholder', true);
        var o = createDiv('domfixdiv', true),
        fDv = createDiv('zoomdetectdiv', true),
        stdMode = false;
        pDv.sY.border = '1px solid blue';
        pDv.fHide();
        f.style.overflow = 'hidden';
        fDv.sY.fontSize = "12px";
        fDv.sY.height = "1em";
        fDv.sY.width = "1em";
        fDv.sY.position = "absolute";
        fDv.sY.zIndex = "-999";
        fDv.fHide();
        var p = f.offsetHeight,
        brdWidth = f.offsetWidth;
        copyStyles(f, pDv, '0px', ['border-left-width', 'border-right-width', 'border-top-width', 'border-bottom-width']);
        var q = f.offsetHeight,
        intlWidth = f.offsetWidth,
        brdWidthLoss = brdWidth - intlWidth,
        brdHeightLoss = p - q;
        var s = (f.scrollTop) ? f.scrollTop: 0,
        oScrollX = (f.scrollLeft) ? f.scrollLeft: 0;
        var t = document.location.href,
        uReg = /#([^#.]*)$/;
        var u = ['textarea', 'input', 'select'];
        l.scroller = [];
        l.forcedBar = [];
        l.containerSize = l.cntRSize = [];
        l.contentSize = l.cntSize = [];
        l.edge = [false, false];
        l.reqS = [];
        l.barSpace = [0, 0];
        l.forcedHide = [];
        l.forcedPos = [];
        l.paddings = [];
        while (f.firstChild) {
            m.appendChild(f.firstChild)
        };
        m.appendChild(o);
        f.appendChild(mDv);
        f.appendChild(pDv);
        if (getStyle(f, 'position') != 'absolute') f.style.position = "relative";
        var w = getStyle(f, 'text-align');
        f.style.textAlign = 'left';
        mDv.sY.width = "100px";
        mDv.sY.height = "100px";
        mDv.sY.top = "0px";
        mDv.sY.left = "0px";
        copyStyles(f, pDv, "0px", ['padding-left', 'padding-top', 'padding-right', 'padding-bottom']);
        var x = f.offsetWidth,
        postHeight = f.offsetHeight,
        mHeight;
        mHeight = mDv.offsetHeight;
        mDv.sY.borderBottom = "2px solid black";
        if (mDv.offsetHeight > mHeight) stdMode = true;
        mDv.sY.borderBottomWidth = "0px";
        copyStyles(pDv, f, false, ['padding-left', 'padding-top', 'padding-right', 'padding-bottom']);
        findPos(mDv);
        findPos(f);
        l.paddings[0] = mDv.yPos - f.yPos;
        l.paddings[2] = mDv.xPos - f.xPos;
        f.style.paddingTop = getStyle(f, "padding-bottom");
        f.style.paddingLeft = getStyle(f, "padding-right");
        findPos(mDv);
        findPos(f);
        l.paddings[1] = mDv.yPos - f.yPos;
        l.paddings[3] = mDv.xPos - f.xPos;
        f.style.paddingTop = getStyle(pDv, "padding-top");
        f.style.paddingLeft = getStyle(pDv, "padding-left");
        var y = l.paddings[2] + l.paddings[3],
        padHeightComp = l.paddings[0] + l.paddings[1];
        mDv.style.textAlign = w;
        copyStyles(f, mDv, false, ['padding-left', 'padding-right', 'padding-top', 'padding-bottom']);
        tDv.sY.width = f.offsetWidth + 'px';
        tDv.sY.height = f.offsetHeight + 'px';
        mDv.sY.width = x + 'px';
        mDv.sY.height = postHeight + 'px';
        tDv.sY.position = 'absolute';
        tDv.sY.top = '0px';
        tDv.sY.left = '0px';
        mDv.appendChild(m);
        f.appendChild(tDv);
        tDv.appendChild(fDv);
        m.sY.position = 'relative';
        mDv.sY.position = 'relative';
        m.sY.top = "0";
        m.sY.width = "100%";
        mDv.sY.overflow = 'hidden';
        mDv.sY.left = "-" + l.paddings[2] + "px";
        mDv.sY.top = "-" + l.paddings[0] + "px";
        l.zTHeight = fDv.offsetHeight;
        l.getContentWidth = function() {
            var a = m.childNodes,
            maxCWidth = compPad = 0;
            for (var i = 0; i < a.length; i++) {
                if (a[i].offsetWidth) {
                    maxCWidth = Math.max(a[i].offsetWidth, maxCWidth)
                }
            };
            l.cntRSize[0] = ((l.reqS[1] && !l.forcedHide[1]) || l.forcedBar[1]) ? f.offsetWidth - l.barSpace[0] : f.offsetWidth;
            l.cntSize[0] = maxCWidth + y;
            return l.cntSize[0]
        };
        l.getContentHeight = function() {
        	l.cntRSize[1] = ((l.reqS[0] && !l.forcedHide[0]) || l.forcedBar[0]) ? f.offsetHeight - l.barSpace[1] : f.offsetHeight;
            l.cntSize[1] = m.offsetHeight + padHeightComp - 2;
            return l.cntSize[1]
        };
        l.fixIEDispBug = function() {
            m.sY.display = 'none';
            m.sY.display = 'block'
        };
        l.setWidth = function() {
            mDv.sY.width = (stdMode) ? (l.cntRSize[0] - y - brdWidthLoss) + 'px': l.cntRSize[0] + 'px'
        };
        l.setHeight = function() {
            mDv.sY.height = (stdMode) ? (l.cntRSize[1] - padHeightComp - brdHeightLoss) + 'px': l.cntRSize[1] + 'px'
        };
        l.createScrollBars = function() {
            l.getContentWidth();
            l.getContentHeight();
            tDv.vrt = new Array();
            var a = tDv.vrt;
            createScrollBars(a, 'vscroller');
            a.barPadding = [parseInt(getStyle(a.sBr, 'padding-top')), parseInt(getStyle(a.sBr, 'padding-bottom'))];
            a.sBr.sY.padding = '0px';
            a.sBr.curPos = 0;
            a.sBr.vertical = true;
            a.sBr.indx = 1;
            m.vBar = a.sBr;
            prepareScroll(a, 0);
            l.barSpace[0] = a.sDv.offsetWidth;
            l.setWidth();
            tDv.hrz = new Array();
            var b = tDv.hrz;
            createScrollBars(b, 'hscroller');
            b.barPadding = [parseInt(getStyle(b.sBr, 'padding-left')), parseInt(getStyle(b.sBr, 'padding-right'))];
            b.sBr.sY.padding = '0px';
            b.sBr.curPos = 0;
            b.sBr.vertical = false;
            b.sBr.indx = 0;
            m.hBar = b.sBr;
            if (wD.opera) b.sBr.sY.position = 'relative';
            prepareScroll(b, 0);
            l.barSpace[1] = b.sDv.offsetHeight;
            l.setHeight();
            tDv.sY.height = f.offsetHeight + 'px';
            b.jBox = createDiv('scrollerjogbox');
            tDv.appendChild(b.jBox);
            b.jBox.onmousedown = function() {
                b.sBr.scrollBoth = true;
                l.goScroll = b.sBr;
                b.sBr.clicked = true;
                b.sBr.moved = false;
                tDv.vrt.sBr.moved = false;
                fleXenv.addTrggr(g, 'selectstart', retFalse);
                fleXenv.addTrggr(g, 'mousemove', mMoveBar);
                fleXenv.addTrggr(g, 'mouseup', mMouseUp);
                return false
            }
        };
        l.goScroll = null;
        l.createScrollBars();
        m.removeChild(o);
        if (!this.addChckTrggr(f, 'mousewheel', mWheelProc) || !this.addChckTrggr(f, 'DOMMouseScroll', mWheelProc)) {
            f.onmousewheel = mWheelProc
        };
        this.addChckTrggr(f, 'mousewheel', mWheelProc);
        this.addChckTrggr(f, 'DOMMouseScroll', mWheelProc);
        f.setAttribute('tabIndex', '0');
        this.addTrggr(f, 'keydown',
        function(e) {
            if (f.focusProtect) return;
            if (!e) {
                var e = wD.event
            };
            var a = e.keyCode;
            l.pkeY = a;
            l.mDPosFix();
            if (l.keyAct['_' + a] && !window.opera) {
                f.contentScroll(l.keyAct['_' + a][0], l.keyAct['_' + a][1], true);
                if (e.preventDefault) e.preventDefault();
                return false
            }
        });
        this.addTrggr(f, 'keypress',
        function(e) {
            if (f.focusProtect) return;
            if (!e) {
                var e = wD.event
            };
            var a = e.keyCode;
            if (l.keyAct['_' + a]) {
                f.contentScroll(l.keyAct['_' + a][0], l.keyAct['_' + a][1], true);
                if (e.preventDefault) e.preventDefault();
                return false
            }
        });
        this.addTrggr(f, 'keyup',
        function() {
            l.pkeY = false
        });
        this.addTrggr(g, 'mouseup', intClear);
        this.addTrggr(f, 'mousedown',
        function(e) {
            if (!e) e = wD.event;
            var a = (e.target) ? e.target: (e.srcElement) ? e.srcElement: false;
            if (!a || (a.className && a.className.match(RegExp("\\bscrollgeneric\\b")))) return;
            l.inMposX = e.clientX;
            l.inMposY = e.clientY;
            pageScrolled();
            findPos(f);
            intClear();
            fleXenv.addTrggr(g, 'mousemove', tSelectMouse);
            l.mTBox = [f.xPos + 10, f.xPos + l.cntRSize[0] - 10, f.yPos + 10, f.yPos + l.cntRSize[1] - 10]
        });
        function tSelectMouse(e) {
            if (!e) e = wD.event;
            var a = e.clientX,
            mY = e.clientY,
            mdX = a + l.xScrld,
            mdY = mY + l.yScrld;
            l.mOnXEdge = (mdX < l.mTBox[0] || mdX > l.mTBox[1]) ? 1 : 0;
            l.mOnYEdge = (mdY < l.mTBox[2] || mdY > l.mTBox[3]) ? 1 : 0;
            l.xAw = a - l.inMposX;
            l.yAw = mY - l.inMposY;
            l.sXdir = (l.xAw > 40) ? 1 : (l.xAw < -40) ? -1 : 0;
            l.sYdir = (l.yAw > 40) ? 1 : (l.yAw < -40) ? -1 : 0;
            if ((l.sXdir != 0 || l.sYdir != 0) && !l.tSelectFunc) l.tSelectFunc = wD.setInterval(function() {
                if (l.sXdir == 0 && l.sYdir == 0) {
                    wD.clearInterval(l.tSelectFunc);
                    l.tSelectFunc = false;
                    return
                };
                pageScrolled();
                if (l.mOnXEdge == 1 || l.mOnYEdge == 1) f.contentScroll((l.sXdir * l.mOnXEdge) + "s", (l.sYdir * l.mOnYEdge) + "s", true)
            },
            45)
        };
        function intClear() {
            fleXenv.remTrggr(g, 'mousemove', tSelectMouse);
            if (l.tSelectFunc) wD.clearInterval(l.tSelectFunc);
            l.tSelectFunc = false;
            if (l.barClickRetard) wD.clearTimeout(l.barClickRetard);
            if (l.barClickScroll) wD.clearInterval(l.barClickScroll)
        };
        function pageScrolled() {
            l.xScrld = (wD.pageXOffset) ? wD.pageXOffset: (g.documentElement && g.documentElement.scrollLeft) ? g.documentElement.scrollLeft: 0;
            l.yScrld = (wD.pageYOffset) ? wD.pageYOffset: (g.documentElement && g.documentElement.scrollTop) ? g.documentElement.scrollTop: 0
        };
        f.scrollUpdate = function(a) {
        	tDv.fShow();
            if (tDv.getSize[1]() === 0 || tDv.getSize[0]() === 0) return;
            m.sY.padding = '1px';
            var b = l.reqS[0],
            reqV = l.reqS[1],
            vBr = tDv.vrt,
            hBr = tDv.hrz,
            vUpReq,
            hUpReq,
            cPSize = [];
            tDv.sY.width = f.parentNode.offsetWidth - brdWidthLoss + 'px';
            pad = parseInt(f.style.paddingLeft) + parseInt(f.style.paddingRight) + parseInt(getStyle(f.parentNode, 'padding-left')) + parseInt(getStyle(f.parentNode, 'padding-right'))
            mDv.sY.width = f.parentNode.offsetWidth - document.getElementById(h + '1_vscrollerbase').offsetWidth - pad + brdWidthLoss + 'px';
            tDv.sY.height = f.parentNode.offsetHeight - brdHeightLoss - 0 + 'px';
            //mDv.sY.height = f.parentNode.offsetHeight - brdHeightLoss + 'px';
            cPSize[0] = l.cntRSize[0];
            cPSize[1] = l.cntRSize[1];
            l.reqS[0] = l.getContentWidth() > l.cntRSize[0];
            l.reqS[1] = l.getContentHeight() > l.cntRSize[1];
            var c = (b != l.reqS[0] || reqV != l.reqS[1] || cPSize[0] != l.cntRSize[0] || cPSize[1] != l.cntRSize[1]) ? true: false;
            vBr.sDv.setVisibility(l.reqS[1]);
            hBr.sDv.setVisibility(l.reqS[0]);
            vUpReq = (l.reqS[1] || l.forcedBar[1]);
            hUpReq = (l.reqS[0] || l.forcedBar[0]);
            l.getContentWidth();
            l.getContentHeight();
            l.setHeight();
            l.setWidth();
            if (!l.reqS[0] || !l.reqS[1] || l.forcedHide[0] || l.forcedHide[1]) hBr.jBox.fHide();
            else hBr.jBox.fShow();
            padB = parseInt(getStyle(f.parentNode, 'padding-bottom')) + parseInt(getStyle(f.parentNode, 'padding-top'))
            if (vUpReq) updateScroll(vBr, (hUpReq && !l.forcedHide[0]) ? l.barSpace[1] + padB : padB );
            else m.sY.top = "0";
            padL = parseInt(getStyle(f.parentNode, 'padding-left')) + parseInt(getStyle(f.parentNode, 'padding-right'))
            if (hUpReq) updateScroll(hBr, (vUpReq && !l.forcedHide[1]) ? l.barSpace[0] : 0);
            else m.sY.left = "0";
            if (c && !a) f.scrollUpdate(true);
            m.sY.padding = '0px';
            l.edge[0] = l.edge[1] = false
            if (hUpReq && !l.reqS[0]){
            	hBr.sDv.className = hBr.sDv.className + ' hflexinactive' 
            } else if (hUpReq && l.reqS[0]){
            	hBr.sDv.className = hBr.sDv.className.replace(/ hflexinactive/g, '')
            }
            if (vUpReq && !l.reqS[1]){
            	vBr.sDv.className = vBr.sDv.className + ' vflexinactive' 
            } else if (vUpReq && l.reqS[1]){
            	vBr.sDv.className = vBr.sDv.className.replace(/ vflexinactive/g, '')
            }            	
            if (!vUpReq){
            	mDv.style.width = mDv.offsetWidth - offsetLR + 'px'
            	updateScroll(hBr, l.barSpace[0] -offsetLR)
            }
            
            /* TODO */
            
        };
        f.commitScroll = f.contentScroll = function(a, b, c) {
            var d = [[false, false], [false, false]],
            Bar;
            if ((a || a === 0) && l.scroller[0]) {
                a = calcCScrollVal(a, 0);
                Bar = tDv.hrz.sBr;
                Bar.trgtScrll = (c) ? Math.min(Math.max(Bar.mxScroll, Bar.trgtScrll - a), 0) : -a;
                Bar.contentScrollPos();
                d[0] = [ - Bar.trgtScrll - Bar.targetSkew, -Bar.mxScroll]
            }
            if ((b || b === 0) && l.scroller[1]) {
                b = calcCScrollVal(b, 1);
                Bar = tDv.vrt.sBr;
                Bar.trgtScrll = (c) ? Math.min(Math.max(Bar.mxScroll, Bar.trgtScrll - b), 0) : -b;
                Bar.contentScrollPos();
                d[1] = [ - Bar.trgtScrll - Bar.targetSkew, -Bar.mxScroll]
            }
            if (!c) l.edge[0] = l.edge[1] = false;
            return d
        };
        f.scrollToElement = function(a) {
            if (a == null || !isddvChild(a)) return;
            var b = findRCpos(a);
            f.contentScroll(b[0] + l.paddings[2], b[1] + l.paddings[0], false);
            f.contentScroll(0, 0, true)
        };
        copyStyles(pDv, f, '0px', ['border-left-width', 'border-right-width', 'border-top-width', 'border-bottom-width']);
        f.removeChild(pDv);
        f.scrollTop = 0;
        f.scrollLeft = 0;
        f.fleXcroll = true;
        classChange(f, 'flexcrollactive', false);
        f.scrollUpdate();
        f.contentScroll(oScrollX, s, true);
        if (t.match(uReg)) {
            f.scrollToElement(g.getElementById(t.match(uReg)[1]))
        };
        l.sizeChangeDetect = wD.setInterval(function() {
            var n = fDv.offsetHeight;
            if (n != l.zTHeight) {
                f.scrollUpdate();
                l.zTHeight = n
            }
        },
        2500);
        function calcCScrollVal(v, i) {
            var a = v.toString();
            v = parseFloat(a);
            return parseInt((a.match(/p$/)) ? v * l.cntRSize[i] * 0.9 : (a.match(/s$/)) ? v * l.cntRSize[i] * 0.1 : v)
        }
        function camelConv(a) {
            var a = a.split('-'),
            reT = a[0],
            i;
            for (i = 1; parT = a[i]; i++) {
                reT += parT.charAt(0).toUpperCase() + parT.substr(1)
            }
            return reT
        }
        function getStyle(a, b) {
            if (wD.getComputedStyle) return wD.getComputedStyle(a, null).getPropertyValue(b);
            if (a.currentStyle) return a.currentStyle[camelConv(b)];
            return false
        };
        function copyStyles(a, b, c, d) {
            var e = new Array();
            for (var i = 0; i < d.length; i++) {
                e[i] = camelConv(d[i]);
                b.style[e[i]] = getStyle(a, d[i], e[i]);
                if (c) a.style[e[i]] = c
            }
        };
        function createDiv(b, c) {
            var d = g.createElement('div');
            d.id = k + '_' + b;
            d.className = (c) ? b: b + ' scrollgeneric';
            d.getSize = [function() {
                return d.offsetWidth
            },
            function() {
                return d.offsetHeight
            }];
            d.setSize = [function(a) {
                d.sY.width = a
            },
            function(a) {
                d.sY.height = a
            }];
            d.getPos = [function() {
                return getStyle(d, "left")
            },
            function() {
                return getStyle(d, "top")
            }];
            d.setPos = [function(a) {
                d.sY.left = a
            },
            function(a) {
                d.sY.top = a
            }];
            d.fHide = function() {
                d.sY.visibility = "hidden"
            };
            d.fShow = function(a) {
                d.sY.visibility = (a) ? getStyle(a, 'visibility') : "visible"
            };
            d.sY = d.style;
            return d
        };
        function createScrollBars(a, b) {
            a.sDv = createDiv(b + 'base');
            a.sFDv = createDiv(b + 'basebeg');
            a.sSDv = createDiv(b + 'baseend');
            a.sBr = createDiv(b + 'bar');
            a.sBrbg = createDiv(b + 'barBg');
            a.sFBr = createDiv(b + 'barbeg');
            a.sSBr = createDiv(b + 'barend');
            a.sBg = createDiv(b + 'trackBg')
            a.sBarD = createDiv(b + 'barD')
            tDv.appendChild(a.sDv);
            a.sDv.appendChild(a.sBr);
            a.sDv.appendChild(a.sFDv);
            a.sDv.appendChild(a.sSDv);
            a.sDv.appendChild(a.sBg)
            a.sDv.appendChild(a.sBarD)
            a.sBr.appendChild(a.sFBr);
            a.sBr.appendChild(a.sSBr)
            a.sBr.appendChild(a.sBrbg)
        };
        function prepareScroll(b, c) {
            var d = b.sDv,
            sBr = b.sBr,
            i = sBr.indx;
            sBr.minPos = b.barPadding[0];
            sBr.ofstParent = d;
            sBr.mDv = mDv;
            sBr.scrlTrgt = m;
            sBr.targetSkew = 0;
            updateScroll(b, c, true);
            sBr.doScrollPos = function() {
                sBr.curPos = (Math.min(Math.max(sBr.curPos, 0), sBr.maxPos));
                sBr.trgtScrll = parseInt((sBr.curPos / sBr.sRange) * sBr.mxScroll);
                sBr.targetSkew = (sBr.curPos == 0) ? 0 : (sBr.curPos == sBr.maxPos) ? 0 : sBr.targetSkew;
                sBr.setPos[i](sBr.curPos + sBr.minPos + "px");
                m.setPos[i](sBr.trgtScrll + sBr.targetSkew + "px")
            };
            sBr.contentScrollPos = function() {
                sBr.curPos = parseInt((sBr.trgtScrll * sBr.sRange) / sBr.mxScroll);
                sBr.targetSkew = sBr.trgtScrll - parseInt((sBr.curPos / sBr.sRange) * sBr.mxScroll);
                sBr.curPos = (Math.min(Math.max(sBr.curPos, 0), sBr.maxPos));
                sBr.setPos[i](sBr.curPos + sBr.minPos + "px");
                sBr.setPos[i](sBr.curPos + sBr.minPos + "px");
                m.setPos[i](sBr.trgtScrll + "px")
            };
            l.barZ = getStyle(sBr, 'z-index');
            sBr.sY.zIndex = (l.barZ == "auto" || l.barZ == "0" || l.barZ == 'normal') ? 2 : l.barZ;
            mDv.sY.zIndex = getStyle(sBr, 'z-index');
            sBr.onmouseover = intClear;
            d.onmousedown = function(e) {
                if (!e) {
                    var e = wD.event
                }
                if (e.target && (e.target == b.sFBr || e.target == b.sSBr || e.target == b.sBr)) return;
                if (e.srcElement && (e.srcElement == b.sFBr || e.srcElement == b.sSBr || e.srcElement == b.sBr)) return;
                var a, mV = [];
                pageScrolled();
                l.mDPosFix();
                findPos(sBr);
                a = (sBr.vertical) ? e.clientY + l.yScrld - sBr.yPos: e.clientX + l.xScrld - sBr.xPos;
                mV[sBr.indx] = (a < 0) ? l.baseAct[0] : l.baseAct[1];
                mV[1 - sBr.indx] = 0;
                f.contentScroll(mV[0], mV[1], true);
                if (e.type != "dblclick") {
                    intClear();
                    l.barClickRetard = wD.setTimeout(function() {
                        l.barClickScroll = wD.setInterval(function() {
                            f.contentScroll(mV[0], mV[1], true)
                        },
                        80)
                    },
                    425)
                }
                return false
            };
            sBr.onmousedown = function(e) {
            	e = e || window.event
                sBr.clicked = true;
                l.goScroll = sBr;
                sBr.scrollBoth = false;
                sBr.moved = false;
                fleXenv.addTrggr(g, 'selectstart', retFalse);
                fleXenv.addTrggr(g, 'mousemove', mMoveBar);
                fleXenv.addTrggr(g, 'mouseup', mMouseUp);
                if(e.stopPropagation){
                	e.stopPropagation()
                } else {
                	e.cancelBubble = true
                }
                return false
            };
            
            d.setVisibility = function(r) {
                if (r) {
                    d.fShow(f);
                    l.forcedHide[i] = (getStyle(d, "visibility") == "hidden") ? true: false;
                    if (!l.forcedHide[i]) sBr.fShow(f);
                    else sBr.fHide();
                    l.scroller[i] = true;
                    classChange(d, "", "flexinactive")
                } else {
                    d.fHide();
                    sBr.fHide();
                    l.forcedBar[i] = (getStyle(d, "visibility") != "hidden") ? true: false;
                    l.scroller[i] = false;
                    sBr.curPos = 0;
                    m.setPos[i]('0px');
                    classChange(d, "flexinactive", "")
                }
                mDv.setPos[1 - i]((l.forcedPos[i] && (r || l.forcedBar[i]) && !l.forcedHide[i]) ? l.barSpace[1 - i] - l.paddings[i * 2] + "px": "-" + l.paddings[i * 2] + "px")
            };
            d.onmouseclick = retFalse
        };
        function updateScroll(a, b, c) {
            var d = a.sDv,
            sBr = a.sBr,
            sFDv = a.sFDv,
            sFBr = a.sFBr,
            sSDv = a.sSDv,
            sSBr = a.sSBr,
            i = sBr.indx;
            d.setSize[i](tDv.getSize[i]() - b + 'px');
            d.setPos[1 - i](tDv.getSize[1 - i]() - d.getSize[1 - i]() + 'px');
            l.forcedPos[i] = (parseInt(d.getPos[1 - i]()) === 0) ? true: false;
            a.padLoss = a.barPadding[0] + a.barPadding[1];
            a.baseProp = parseInt((d.getSize[i]() - a.padLoss) * 0.75);
            sBr.aSize = Math.min(Math.max(Math.min(parseInt(l.cntRSize[i] / l.cntSize[i] * d.getSize[i]()), a.baseProp), 45), a.baseProp);
            sBr.setSize[i](sBr.aSize + 'px');
            sBr.maxPos = d.getSize[i]() - sBr.getSize[i]() - a.padLoss;
            sBr.curPos = Math.min(Math.max(0, sBr.curPos), sBr.maxPos);
            sBr.setPos[i](sBr.curPos + sBr.minPos + 'px');
            sBr.mxScroll = mDv.getSize[i]() - l.cntSize[i];
            sBr.sRange = sBr.maxPos;
            sFDv.setSize[i](d.getSize[i]() - sSDv.getSize[i]() + 'px');
            sFBr.setSize[i](sBr.getSize[i]() - sSBr.getSize[i]() + 'px');
            sSBr.setPos[i](sBr.getSize[i]() - sSBr.getSize[i]() + 'px');
            sSDv.setPos[i](d.getSize[i]() - sSDv.getSize[i]() + 'px');
            if( i == 1 ){
            	a.sBrbg.style.height = a.sBr.offsetHeight - a.sFBr.offsetHeight - a.sSBr.offsetHeight + 'px'
            	a.sBg.style.height = a.sDv.offsetHeight - a.sFDv.offsetHeight - a.sSDv.offsetHeight + 'px'
            } else {
            	a.sBrbg.style.width = a.sBr.offsetWidth - a.sFBr.offsetWidth - a.sSBr.offsetWidth + 'px'
            	a.sBg.style.width = a.sDv.offsetWidth - a.sFDv.offsetWidth - a.sSDv.offsetWidth + 'px'
            }            	
            if (!c) sBr.doScrollPos();
            l.fixIEDispBug()
        };
        l.mDPosFix = function() {
            mDv.scrollTop = 0;
            mDv.scrollLeft = 0;
            f.scrollTop = 0;
            f.scrollLeft = 0
        };
        this.addTrggr(wD, 'load',
        function() {
            if (f.fleXcroll) f.scrollUpdate()
        });
        this.addTrggr(wD, 'resize',
        function() {
            /*if (f.refreshTimeout) wD.clearTimeout(f.refreshTimeout);
            f.refreshTimeout = wD.setTimeout(function() {
            	if (f.fleXcroll) f.scrollUpdate()
            },
            80)*/
            if (f.fleXcroll) f.scrollUpdate()
        });
        for (var j = 0,
        inputName; inputName = u[j]; j++) {
            var z = f.getElementsByTagName(inputName);
            for (var i = 0,
            formItem; formItem = z[i]; i++) {
                fleXenv.addTrggr(formItem, 'focus',
                function() {
                    f.focusProtect = true
                });
                fleXenv.addTrggr(formItem, 'blur', onblur = function() {
                    f.focusProtect = false
                })
            }
        };
        function retFalse() {
            return false
        };
        function mMoveBar(e) {
            if (!e) {
                var e = wD.event
            };
            var a = l.goScroll,
            movBr, maxx, xScroll, yScroll;
            if (a == null) return;
            if (!fleXenv.w3events && !e.button) mMouseUp();
            maxx = (a.scrollBoth) ? 2 : 1;
            for (var i = 0; i < maxx; i++) {
                movBr = (i == 1) ? a.scrlTrgt.vBar: a;
                if (a.clicked) {
                    if (!movBr.moved) {
                        l.mDPosFix();
                        findPos(movBr);
                        findPos(movBr.ofstParent);
                        movBr.pointerOffsetY = e.clientY - movBr.yPos;
                        movBr.pointerOffsetX = e.clientX - movBr.xPos;
                        movBr.inCurPos = movBr.curPos;
                        movBr.moved = true
                    };
                    movBr.curPos = (movBr.vertical) ? e.clientY - movBr.pointerOffsetY - movBr.ofstParent.yPos - movBr.minPos: e.clientX - movBr.pointerOffsetX - movBr.ofstParent.xPos - movBr.minPos;
                    if (a.scrollBoth) movBr.curPos = movBr.curPos + (movBr.curPos - movBr.inCurPos);
                    movBr.doScrollPos()
                } else movBr.moved = false
            }
        };
        function mMouseUp() {
            if (l.goScroll != null) {
                l.goScroll.clicked = false
            }
            l.goScroll = null;
            fleXenv.remTrggr(g, 'selectstart', retFalse);
            fleXenv.remTrggr(g, 'mousemove', mMoveBar);
            fleXenv.remTrggr(g, 'mouseup', mMouseUp)
        };
        function mWheelProc(e) {
            if (!e) e = wD.event;
            if (!this.fleXcroll) return;
            var a = this,
            vEdge, hEdge, hoverH = false,
            delta = 0,
            iNDx;
            l.mDPosFix();
            hElem = (e.target) ? e.target: (e.srcElement) ? e.srcElement: this;
            if (hElem.id && hElem.id.match(/_hscroller/)) hoverH = true;
            if (e.wheelDelta) delta = -e.wheelDelta;
            if (e.detail) delta = e.detail;
            delta = (delta < 0) ? -1 : +1;
            iNDx = (delta < 0) ? 0 : 1;
            l.edge[1 - iNDx] = false;
            if ((l.edge[iNDx] && !hoverH) || (!l.scroller[0] && !l.scroller[1])) return;
            if (l.scroller[1] && !hoverH) scrollState = f.contentScroll(false, l.wheelAct[iNDx], true);
            vEdge = !l.scroller[1] || hoverH || (l.scroller[1] && ((scrollState[1][0] == scrollState[1][1] && delta > 0) || (scrollState[1][0] == 0 && delta < 0)));
            if (l.scroller[0] && (!l.scroller[1] || hoverH)) scrollState = f.contentScroll(l.wheelAct[iNDx], false, true);
            hEdge = !l.scroller[0] || (l.scroller[0] && l.scroller[1] && vEdge && !hoverH) || (l.scroller[0] && ((scrollState[0][0] == scrollState[0][1] && delta > 0) || (scrollState[0][0] == 0 && delta < 0)));
            if (vEdge && hEdge && !hoverH) l.edge[iNDx] = true;
            else l.edge[iNDx] = false;
            if (e.preventDefault) e.preventDefault();
            return false
        };
        function isddvChild(a) {
            while (a.parentNode) {
                a = a.parentNode;
                if (a == f) return true
            }
            return false
        };
        function findPos(a) {
            var b = a,
            curleft = curtop = 0;
            var c = "";
            if (b.offsetParent) {
                while (b) {
                    curleft += b.offsetLeft;
                    curtop += b.offsetTop;
                    b = b.offsetParent;
                    c += curtop + " "
                }
            } else if (b.x) {
                curleft += b.x;
                curtop += b.y
            }
            a.xPos = curleft;
            a.yPos = curtop
        };
        function findRCpos(a) {
            var b = a;
            curleft = curtop = 0;
            while (!b.offsetHeight && b.parentNode && b != m && getStyle(b, 'display') == "inline") {
                b = b.parentNode
            }
            if (b.offsetParent) {
                while (b != m) {
                    curleft += b.offsetLeft;
                    curtop += b.offsetTop;
                    b = b.offsetParent
                }
            }
            return [curleft, curtop]
        };
        function classChange(a, b, c) {
            if (!a.className) a.className = '';
            var d = a.className;
            if (b && !d.match(RegExp("(^|\\s)" + b + "($|\\s)"))) d = d.replace(/(\S$)/, '$1 ') + b;
            if (c) d = d.replace(RegExp("((^|\\s)+" + c + ")+($|\\s)", "g"), '$2').replace(/\s$/, '');
            a.className = d
        }
    },
    globalInit: function() {
        if (fleXenv.catchFastInit) window.clearInterval(fleXenv.catchFastInit);
        var d = /#([^#.]*)$/,
        urlExt = /(.*)#.*$/,
        matcH, i, anchoR, anchorList = document.getElementsByTagName("a"),
        urlBase = document.location.href;
        if (urlBase.match(urlExt)) urlBase = urlBase.match(urlExt)[1];
        for (i = 0; anchoR = anchorList[i]; i++) {
            if (anchoR.href && anchoR.href.match(d) && anchoR.href.match(urlExt) && urlBase === anchoR.href.match(urlExt)[1]) {
                anchoR.fleXanchor = true;
                fleXenv.addTrggr(anchoR, 'click',
                function(e) {
                    if (!e) e = window.event;
                    var a = (e.srcElement) ? e.srcElement: this;
                    while (!a.fleXanchor && a.parentNode) {
                        a = a.parentNode
                    };
                    if (!a.fleXanchor) return;
                    var b = document.getElementById(a.href.match(d)[1]),
                    eScroll = false;
                    if (b == null) b = (b = document.getElementsByName(a.href.match(d)[1])[0]) ? b: null;
                    if (b != null) {
                        var c = b;
                        while (c.parentNode) {
                            c = c.parentNode;
                            if (c.scrollToElement) {
                                c.scrollToElement(b);
                                eScroll = c
                            }
                        };
                        if (eScroll) {
                            if (e.preventDefault) e.preventDefault();
                            document.location.href = "#" + a.href.match(d)[1];
                            eScroll.fleXdata.mDPosFix();
                            return false
                        }
                    }
                })
            }
        };
        fleXenv.initByClass();
        if (window.onfleXcrollRun) window.onfleXcrollRun()
    },
    initByClass: function() {
        if (fleXenv.initialized) return;
        fleXenv.initialized = true;
        var a = fleXenv.getByClassName(document.getElementsByTagName("body")[0], "div", 'b-custom-scroll');
        for (var i = 0,
        tgDiv; tgDiv = a[i]; i++) fleXenv.fleXcrollMain(tgDiv)
    },
    getByClassName: function(a, b, c) {
        if (typeof(a) == 'string') a = document.getElementById(a);
        if (a == null) return false;
        var d = new RegExp("(^|\\s)" + c + "($|\\s)"),
        clsnm,
        retArray = [],
        key = 0;
        var e = a.getElementsByTagName(b);
        for (var i = 0,
        pusher; pusher = e[i]; i++) {
            if (pusher.className && pusher.className.match(d)) {
                retArray[key] = pusher;
                key++
            }
        };
        return retArray
    },
    catchFastInit: window.setInterval(function() {
        var a = document.getElementById('flexcroll-init');
        if (a != null) {
            fleXenv.initByClass();
            window.clearInterval(fleXenv.catchFastInit)
        }
    },
    100),
    addTrggr: function(a, b, c) {
        if (!fleXenv.addChckTrggr(a, b, c) && a.attachEvent) {
            a.attachEvent('on' + b, c)
        }
    },
    addChckTrggr: function(a, b, c) {
        if (a.addEventListener) {
            a.addEventListener(b, c, false);
            fleXenv.w3events = true;
            window.addEventListener("unload",
            function() {
                fleXenv.remTrggr(a, b, c)
            },
            false);
            return true
        } else return false
    },
    remTrggr: function(a, b, c) {
        if (!fleXenv.remChckTrggr(a, b, c) && a.detachEvent) a.detachEvent('on' + b, c)
    },
    remChckTrggr: function(a, b, c) {
        if (a.removeEventListener) {
            a.removeEventListener(b, c, false);
            return true
        } else return false
    }
};
function CSBfleXcroll(a) {
    fleXenv.fleXcrollMain(a)
};
//fleXenv.fleXcrollInit();
