/*
This license text has to stay intact at all times:
fleXcroll Public License Version
Cross Browser Custom Scroll Bar Script by Hesido.
Public version - Free for non-commercial uses.

This script cannot be used in any commercially built
web sites, or in sites that relates to commercial
activities. This script is not for re-distribution.
For licensing options:
Contact Emrah BASKAYA @ www.hesido.com

Derivative works are only allowed for personal uses,
and they cannot be redistributed.

FleXcroll Public Key Code: 20050907122003339
MD5 hash for this license: 9ada3be4d7496200ab2665160807745d

End of license text---
*/
/***************************************************************************
/*
/* flexcroll.js
/*  Portions (c) fluidr.com 2009-2010 All Rights Reserved
/*
/***************************************************************************/
//fleXcroll v1.9.5f
var fleXenv = {
   fleXcrollInit : function() {
      this.addTrggr(window, 'load', this.globalInit);
      }
   , fleXcrollMain : function(dDv) {
      //Main code beg
      var dC = document, wD = window, nV = navigator;
      if(!dC.getElementById ||!dC.createElement)return;
      if (typeof(dDv) == 'string')dDv = document.getElementById(dDv);
      if(dDv == 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(dDv.scrollUpdate) {
         dDv.scrollUpdate();
         return;
         };
      if(!dDv.id || dDv.id == '') {
         var sTid = "flex__", c = 1;
         while(document.getElementById(sTid + c) != null) {
            c++};
         dDv.id = sTid + c;
         }
      var targetId = dDv.id;
      dDv.fleXdata = new Object();
      var sC = dDv.fleXdata;
      sC.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']};
      sC.wheelAct = ["-2s", "2s"];
      sC.baseAct = ["-2s", "2s"];
      var cDv = createDiv('contentwrapper', true), mDv = createDiv('mcontentwrapper', true), tDv = createDiv('scrollwrapper', true), pDv = createDiv('copyholder', true);
      var iDv = createDiv('domfixdiv', true), fDv = createDiv('zoomdetectdiv', true), stdMode = false;
      pDv.sY.border = '1px solid blue';
      pDv.fHide();
      dDv.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 brdHeight = dDv.offsetHeight, brdWidth = dDv.offsetWidth;
      copyStyles(dDv, pDv, '0px', ['border-left-width', 'border-right-width', 'border-top-width', 'border-bottom-width']);
      var intlHeight = dDv.offsetHeight, intlWidth = dDv.offsetWidth, brdWidthLoss = brdWidth - intlWidth, brdHeightLoss = brdHeight - intlHeight;
      var oScrollY = (dDv.scrollTop) ? dDv.scrollTop : 0, oScrollX = (dDv.scrollLeft) ? dDv.scrollLeft : 0;
      var urlBase = document.location.href, uReg = /#([^#.]*)$/;
      var focusProtectList = ['textarea', 'input', 'select'];
      sC.scroller = [];
      sC.forcedBar = [];
      sC.containerSize = sC.cntRSize = [];
      sC.contentSize = sC.cntSize = [];
      sC.edge = [false, false];
      sC.reqS = [];
      sC.barSpace = [0, 0];
      sC.forcedHide = [];
      sC.forcedPos = [];
      sC.paddings = [];
      while (dDv.firstChild) {
         cDv.appendChild(dDv.firstChild)};
      cDv.appendChild(iDv);
      dDv.appendChild(mDv);
      dDv.appendChild(pDv);
      if(getStyle(dDv, 'position') != 'absolute') dDv.style.position = "relative";
      var dAlign = getStyle(dDv, 'text-align');
      dDv.style.textAlign = 'left';
      mDv.sY.width = "100px";
      mDv.sY.height = "200px";
      mDv.sY.top = "0px";
      mDv.sY.left = "0px";
      copyStyles(dDv, pDv, "0px", ['padding-left', 'padding-top', 'padding-right', 'padding-bottom']);
      var postWidth = dDv.offsetWidth, postHeight = dDv.offsetHeight, mHeight;
      mHeight = mDv.offsetHeight;
      mDv.sY.borderBottom = "2px solid black";
      if(mDv.offsetHeight > mHeight)stdMode = true;
      mDv.sY.borderBottomWidth = "0px";
      copyStyles(pDv, dDv, false, ['padding-left', 'padding-top', 'padding-right', 'padding-bottom']);
      findPos(mDv);
      findPos(dDv);
      sC.paddings[0] = mDv.yPos - dDv.yPos;
      sC.paddings[2] = mDv.xPos - dDv.xPos;
      dDv.style.paddingTop = getStyle(dDv, "padding-bottom");
      dDv.style.paddingLeft = getStyle(dDv, "padding-right");
      findPos(mDv);
      findPos(dDv);
      sC.paddings[1] = mDv.yPos - dDv.yPos;
      sC.paddings[3] = mDv.xPos - dDv.xPos;
      dDv.style.paddingTop = getStyle(pDv, "padding-top");
      dDv.style.paddingLeft = getStyle(pDv, "padding-left");
      var padWidthComp = sC.paddings[2] + sC.paddings[3], padHeightComp = sC.paddings[0] + sC.paddings[1];
      mDv.style.textAlign = dAlign;
      copyStyles(dDv, mDv, false, ['padding-left', 'padding-right', 'padding-top', 'padding-bottom']);
      tDv.sY.width = dDv.offsetWidth + 'px';
      tDv.sY.height = dDv.offsetHeight + 'px';
      mDv.sY.width = postWidth + 'px';
      mDv.sY.height = postHeight + 'px';
      tDv.sY.position = 'absolute';
      tDv.sY.top = '0px';
      tDv.sY.left = '0px';
      //tDv.fHide();
      mDv.appendChild(cDv);
      dDv.appendChild(tDv);
      tDv.appendChild(fDv);
      cDv.sY.position = 'relative';
      mDv.sY.position = 'relative';
      cDv.sY.top = "0";
      cDv.sY.width = "100%";
      //fix IE7
      mDv.sY.overflow = 'hidden';
      mDv.sY.left = "-" + sC.paddings[2] + "px";
      mDv.sY.top = "-" + sC.paddings[0] + "px";
      sC.zTHeight = fDv.offsetHeight;
      sC.getContentWidth = function() {
         var cChilds = cDv.childNodes, maxCWidth = compPad = 0;
         for(var i = 0; i < cChilds.length; i++) {
            if(cChilds[i].offsetWidth) {
               maxCWidth = Math.max(cChilds[i].offsetWidth, maxCWidth)}
            };
         sC.cntRSize[0] = ((sC.reqS[1] &&!sC.forcedHide[1]) || sC.forcedBar[1]) ? dDv.offsetWidth - sC.barSpace[0] : dDv.offsetWidth;
         sC.cntSize[0] = maxCWidth + padWidthComp;
         return sC.cntSize[0];
         };
      sC.getContentHeight = function() {
         sC.cntRSize[1] = ((sC.reqS[0] &&!sC.forcedHide[0]) || sC.forcedBar[0]) ? dDv.offsetHeight - sC.barSpace[1] : dDv.offsetHeight;
         sC.cntSize[1] = cDv.offsetHeight + padHeightComp - 2;
         return sC.cntSize[1];
         };
      sC.fixIEDispBug = function() {
         cDv.sY.display = 'none';
         cDv.sY.display = 'block';
         };
      sC.setWidth = function() {
         mDv.sY.width = (stdMode) ? (sC.cntRSize[0] - padWidthComp - brdWidthLoss) + 'px':sC.cntRSize[0] + 'px';
         };
      sC.setHeight = function() {
         mDv.sY.height = (stdMode) ? (sC.cntRSize[1] - padHeightComp - brdHeightLoss) + 'px':sC.cntRSize[1] + 'px';
         };
      sC.createScrollBars = function() {
         sC.getContentWidth();
         sC.getContentHeight();
         //vert
         tDv.vrt = new Array();
         var vrT = tDv.vrt;
         createScrollBars(vrT, 'vscroller');
         vrT.barPadding = [parseInt(getStyle(vrT.sBr, 'padding-top')), parseInt(getStyle(vrT.sBr, 'padding-bottom'))];
         vrT.sBr.sY.padding = '0px';
         vrT.sBr.curPos = 0;
         vrT.sBr.vertical = true;
         vrT.sBr.indx = 1;
         cDv.vBar = vrT.sBr;
         prepareScroll(vrT, 0);
         sC.barSpace[0] = vrT.sDv.offsetWidth;
         sC.setWidth();
         //horiz
         tDv.hrz = new Array();
         var hrZ = tDv.hrz;
         createScrollBars(hrZ, 'hscroller');
         hrZ.barPadding = [parseInt(getStyle(hrZ.sBr, 'padding-left')), parseInt(getStyle(hrZ.sBr, 'padding-right'))];
         hrZ.sBr.sY.padding = '0px';
         hrZ.sBr.curPos = 0;
         hrZ.sBr.vertical = false;
         hrZ.sBr.indx = 0;
         cDv.hBar = hrZ.sBr;
         if(wD.opera) hrZ.sBr.sY.position = 'relative';
         prepareScroll(hrZ, 0);
         sC.barSpace[1] = hrZ.sDv.offsetHeight;
         sC.setHeight();
         tDv.sY.height = dDv.offsetHeight + 'px';
         // jog
         hrZ.jBox = createDiv('scrollerjogbox');
         tDv.appendChild(hrZ.jBox);
         hrZ.jBox.onmousedown = function() {
            hrZ.sBr.scrollBoth = true;
            sC.goScroll = hrZ.sBr;
            hrZ.sBr.clicked = true;
            hrZ.sBr.moved = false;
            tDv.vrt.sBr.moved = false;
            fleXenv.addTrggr(dC, 'selectstart', retFalse);
            fleXenv.addTrggr(dC, 'mousemove', mMoveBar);
            fleXenv.addTrggr(dC, 'mouseup', mMouseUp);
            return false;
            };
         };
      sC.goScroll = null;
      sC.createScrollBars();
      cDv.removeChild(iDv);
      if(!this.addChckTrggr(dDv, 'mousewheel', mWheelProc) ||!this.addChckTrggr(dDv, 'DOMMouseScroll', mWheelProc)) {
         dDv.onmousewheel = mWheelProc;
         };
      this.addChckTrggr(dDv, 'mousewheel', mWheelProc);
      this.addChckTrggr(dDv, 'DOMMouseScroll', mWheelProc);
      dDv.setAttribute('tabIndex', '0');
      this.addTrggr(dDv, 'keydown', function(e) {
         if(dDv.focusProtect) return; if(!e) {
            var e = wD.event; }; var pK = e.keyCode; sC.pkeY = pK; sC.mDPosFix(); if(sC.keyAct['_' + pK] &&!window.opera) {
            dDv.contentScroll(sC.keyAct['_' + pK][0], sC.keyAct['_' + pK][1], true); if(e.preventDefault) e.preventDefault(); return false; }; }
      );
      this.addTrggr(dDv, 'keypress', function(e) {
         //make Opera Happy
         if(dDv.focusProtect) return; if(!e) {
            var e = wD.event; }; var pK = e.keyCode; if(sC.keyAct['_' + pK]) {
            dDv.contentScroll(sC.keyAct['_' + pK][0], sC.keyAct['_' + pK][1], true); if(e.preventDefault) e.preventDefault(); return false; }; }
      );
      this.addTrggr(dDv, 'keyup', function() {
         sC.pkeY = false}
      );
      this.addTrggr(dC, 'mouseup', intClear);
      this.addTrggr(dDv, 'mousedown', function(e) {
         if(!e) e = wD.event; var cTrgt = (e.target) ? e.target : (e.srcElement) ? e.srcElement : false; if(!cTrgt || (cTrgt.className && cTrgt.className.match(RegExp("\\bscrollgeneric\\b")))) return; sC.inMposX = e.clientX; sC.inMposY = e.clientY; pageScrolled(); findPos(dDv); intClear(); fleXenv.addTrggr(dC, 'mousemove', tSelectMouse); sC.mTBox = [dDv.xPos + 10, dDv.xPos + sC.cntRSize[0] - 10, dDv.yPos + 10, dDv.yPos + sC.cntRSize[1] - 10]; }
      );
      function tSelectMouse(e) {
         if(!e) e = wD.event;
         var mX = e.clientX, mY = e.clientY, mdX = mX + sC.xScrld, mdY = mY + sC.yScrld;
         sC.mOnXEdge = (mdX < sC.mTBox[0] || mdX > sC.mTBox[1]) ? 1 : 0;
         sC.mOnYEdge = (mdY < sC.mTBox[2] || mdY > sC.mTBox[3]) ? 1 : 0;
         sC.xAw = mX - sC.inMposX;
         sC.yAw = mY - sC.inMposY;
         sC.sXdir = (sC.xAw > 40) ? 1 : (sC.xAw <- 40) ?- 1 : 0;
         sC.sYdir = (sC.yAw > 40) ? 1 : (sC.yAw <- 40) ?- 1 : 0;
         if((sC.sXdir != 0 || sC.sYdir != 0) &&!sC.tSelectFunc) sC.tSelectFunc = wD.setInterval(function() {
            if(sC.sXdir == 0 && sC.sYdir == 0) {
               wD.clearInterval(sC.tSelectFunc); sC.tSelectFunc = false; return; }; pageScrolled(); if(sC.mOnXEdge == 1 || sC.mOnYEdge == 1) dDv.contentScroll((sC.sXdir * sC.mOnXEdge) + "s", (sC.sYdir * sC.mOnYEdge) + "s", true); }
         , 45)};
      function intClear() {
         fleXenv.remTrggr(dC, 'mousemove', tSelectMouse);
         if(sC.tSelectFunc) wD.clearInterval(sC.tSelectFunc);
         sC.tSelectFunc = false;
         if(sC.barClickRetard) wD.clearTimeout(sC.barClickRetard);
         if(sC.barClickScroll) wD.clearInterval(sC.barClickScroll);
         };
      function pageScrolled() {
         sC.xScrld = (wD.pageXOffset) ? wD.pageXOffset : (dC.documentElement && dC.documentElement.scrollLeft) ? dC.documentElement.scrollLeft : 0;
         sC.yScrld = (wD.pageYOffset) ? wD.pageYOffset : (dC.documentElement && dC.documentElement.scrollTop) ? dC.documentElement.scrollTop : 0;
         };
      dDv.scrollUpdate = function(recurse) {
         tDv.fShow();
         if(tDv.getSize[1]() === 0 || tDv.getSize[0]() === 0) return;
         cDv.sY.padding = '1px';
         var reqH = sC.reqS[0], reqV = sC.reqS[1], vBr = tDv.vrt, hBr = tDv.hrz, vUpReq, hUpReq, cPSize = [];
         tDv.sY.width = dDv.offsetWidth - brdWidthLoss + 'px';
         tDv.sY.height = dDv.offsetHeight - brdHeightLoss + 'px';
         cPSize[0] = sC.cntRSize[0];
         cPSize[1] = sC.cntRSize[1];
         sC.reqS[0] = sC.getContentWidth() > sC.cntRSize[0];
         sC.reqS[1] = sC.getContentHeight() > sC.cntRSize[1];
         var stateChange = (reqH != sC.reqS[0] || reqV != sC.reqS[1] || cPSize[0] != sC.cntRSize[0] || cPSize[1] != sC.cntRSize[1]) ? true : false;
         vBr.sDv.setVisibility(sC.reqS[1]);
         hBr.sDv.setVisibility(sC.reqS[0]);
         vUpReq = (sC.reqS[1] || sC.forcedBar[1]);
         hUpReq = (sC.reqS[0] || sC.forcedBar[0]);
         sC.getContentWidth();
         sC.getContentHeight();
         sC.setHeight();
         sC.setWidth();
         if(!sC.reqS[0] ||!sC.reqS[1] || sC.forcedHide[0] || sC.forcedHide[1]) hBr.jBox.fHide();
         else hBr.jBox.fShow();
         if(vUpReq) updateScroll(vBr, (hUpReq &&!sC.forcedHide[0]) ? sC.barSpace[1] : 0);
         else cDv.sY.top = "0";
         if(hUpReq) updateScroll(hBr, (vUpReq &&!sC.forcedHide[1]) ? sC.barSpace[0] : 0);
         else cDv.sY.left = "0";
         if(stateChange &&!recurse) dDv.scrollUpdate(true);
         cDv.sY.padding = '0px';
         sC.edge[0] = sC.edge[1] = false;
         };
      dDv.commitScroll = dDv.contentScroll = function(xPos, yPos, relative) {
         var reT = [[false, false], [false, false]], Bar;
         if((xPos || xPos === 0) && sC.scroller[0]) {
            xPos = calcCScrollVal(xPos, 0);
            Bar = tDv.hrz.sBr;
            Bar.trgtScrll = (relative) ? Math.min(Math.max(Bar.mxScroll, Bar.trgtScrll - xPos), 0) :- xPos;
            Bar.contentScrollPos();
            reT[0] = [ - Bar.trgtScrll - Bar.targetSkew, - Bar.mxScroll]}
         if((yPos || yPos === 0) && sC.scroller[1]) {
            yPos = calcCScrollVal(yPos, 1);
            Bar = tDv.vrt.sBr;
            Bar.trgtScrll = (relative) ? Math.min(Math.max(Bar.mxScroll, Bar.trgtScrll - yPos), 0) :- yPos;
            Bar.contentScrollPos();
            reT[1] = [ - Bar.trgtScrll - Bar.targetSkew, - Bar.mxScroll]}
         if(!relative) sC.edge[0] = sC.edge[1] = false;
         return reT;
         };
      dDv.scrollToElement = function(tEM) {
         if(tEM == null ||!isddvChild(tEM)) return;
         var sPos = findRCpos(tEM);
         dDv.contentScroll(sPos[0] + sC.paddings[2], sPos[1] + sC.paddings[0], false);
         dDv.contentScroll(0, 0, true);
         };
      copyStyles(pDv, dDv, '0px', ['border-left-width', 'border-right-width', 'border-top-width', 'border-bottom-width']);
      dDv.removeChild(pDv);
      dDv.scrollTop = 0;
      dDv.scrollLeft = 0;
      dDv.fleXcroll = true;
      classChange(dDv, 'flexcrollactive', false);
      dDv.scrollUpdate();
      dDv.contentScroll(oScrollX, oScrollY, true);
      if(urlBase.match(uReg)) {
         dDv.scrollToElement(dC.getElementById(urlBase.match(uReg)[1]));
         };
      //tDv.fShow();
      sC.sizeChangeDetect = wD.setInterval(function() {
         var n = fDv.offsetHeight; if(n != sC.zTHeight) {
            dDv.scrollUpdate(); sC.zTHeight = n}; }
      , 2500);
      function calcCScrollVal(v, i) {
         var stR = v.toString();
         v = parseFloat(stR);
         return parseInt((stR.match(/p$/))?v*sC.cntRSize[i]*0.9:(stR.match(/s$/))?v*sC.cntRSize[i]*0.1:v);
         }
      function camelConv(spL) {
         var spL = spL.split('-'), reT = spL[0], i;
         for(i = 1; parT = spL[i]; i++) {
            reT += parT.charAt(0).toUpperCase() + parT.substr(1);
            }
         return reT;
         }
      function getStyle(elem, style) {
         if(wD.getComputedStyle) return wD.getComputedStyle(elem, null).getPropertyValue(style);
         if(elem.currentStyle) return elem.currentStyle[camelConv(style)];
         return false;
         };
      function copyStyles(src, dest, replaceStr, sList) {
         var camelList = new Array();
         for (var i = 0; i < sList.length; i++) {
            camelList[i] = camelConv(sList[i]);
            dest.style[camelList[i]] = getStyle(src, sList[i], camelList[i]);
            if(replaceStr) src.style[camelList[i]] = replaceStr;
            }
         };
      function createDiv(typeName, noGenericClass) {
         var nDiv = dC.createElement('div');
         //,pTx=dC.createTextNode('\u00a0');
         nDiv.id = targetId + '_' + typeName;
         nDiv.className = (noGenericClass) ? typeName : typeName + ' scrollgeneric';
         nDiv.getSize = [function() {
            return nDiv.offsetWidth;
            }
         , function() {
            return nDiv.offsetHeight;
            }
         ];
         nDiv.setSize = [function(sVal) {
            nDiv.sY.width = sVal;
            }
         , function(sVal) {
            nDiv.sY.height = sVal;
            }
         ];
         nDiv.getPos = [function() {
            return getStyle(nDiv, "left");
            }
         , function() {
            return getStyle(nDiv, "top");
            }
         ];
         nDiv.setPos = [function(sVal) {
            nDiv.sY.left = sVal;
            }
         , function(sVal) {
            nDiv.sY.top = sVal;
            }
         ];
         nDiv.fHide = function() {
            nDiv.sY.visibility = "hidden"};
         nDiv.fShow = function(coPy) {
            nDiv.sY.visibility = (coPy) ? getStyle(coPy, 'visibility') : "visible"};
         nDiv.sY = nDiv.style;
         // if(!noGenericClass) nDiv.appendChild(pTx);
         return nDiv;
         };
      function createScrollBars(ary, bse) {
         ary.sDv = createDiv(bse + 'base');
         ary.sFDv = createDiv(bse + 'basebeg');
         ary.sSDv = createDiv(bse + 'baseend');
         ary.sBr = createDiv(bse + 'bar');
         ary.sFBr = createDiv(bse + 'barbeg');
         ary.sSBr = createDiv(bse + 'barend');
         tDv.appendChild(ary.sDv);
         ary.sDv.appendChild(ary.sBr);
         ary.sDv.appendChild(ary.sFDv);
         ary.sDv.appendChild(ary.sSDv);
         ary.sBr.appendChild(ary.sFBr);
         ary.sBr.appendChild(ary.sSBr);
         };
      function prepareScroll(bAr, reqSpace) {
         var sDv = bAr.sDv, sBr = bAr.sBr, i = sBr.indx;
         sBr.minPos = bAr.barPadding[0];
         sBr.ofstParent = sDv;
         sBr.mDv = mDv;
         sBr.scrlTrgt = cDv;
         sBr.targetSkew = 0;
         updateScroll(bAr, reqSpace, 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");
            cDv.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");
            cDv.setPos[i](sBr.trgtScrll + "px");
            };
         sC.barZ = getStyle(sBr, 'z-index');
         sBr.sY.zIndex = (sC.barZ == "auto" || sC.barZ == "0" || sC.barZ == 'normal') ? 2 : sC.barZ;
         mDv.sY.zIndex = getStyle(sBr, 'z-index');
         sBr.onmousedown = function() {
            sBr.clicked = true;
            sC.goScroll = sBr;
            sBr.scrollBoth = false;
            sBr.moved = false;
            fleXenv.addTrggr(dC, 'selectstart', retFalse);
            fleXenv.addTrggr(dC, 'mousemove', mMoveBar);
            fleXenv.addTrggr(dC, 'mouseup', mMouseUp);
            return false;
            };
         sBr.onmouseover = intClear;
         sDv.onmousedown = sDv.ondblclick = function(e) {
            if(!e) {
               var e = wD.event;
               }
            if(e.target && (e.target == bAr.sFBr || e.target == bAr.sSBr || e.target == bAr.sBr)) return;
            if(e.srcElement && (e.srcElement == bAr.sFBr || e.srcElement == bAr.sSBr || e.srcElement == bAr.sBr)) return;
            var relPos, mV = [];
            pageScrolled();
            sC.mDPosFix();
            findPos(sBr);
            relPos = (sBr.vertical) ? e.clientY + sC.yScrld - sBr.yPos : e.clientX + sC.xScrld - sBr.xPos;
            mV[sBr.indx] = (relPos < 0) ? sC.baseAct[0] : sC.baseAct[1];
            mV[1 - sBr.indx] = 0;
            dDv.contentScroll(mV[0], mV[1], true);
            if(e.type != "dblclick") {
               intClear();
               sC.barClickRetard = wD.setTimeout(function() {
                  sC.barClickScroll = wD.setInterval(function() {
                     dDv.contentScroll(mV[0], mV[1], true); }
                  , 80)}
               , 425);
               }
            return false;
            };
         sDv.setVisibility = function(r) {
            if(r) {
               sDv.fShow(dDv);
               sC.forcedHide[i] = (getStyle(sDv, "visibility") == "hidden") ? true : false;
               if(!sC.forcedHide[i]) sBr.fShow(dDv);
               else sBr.fHide();
               sC.scroller[i] = true;
               classChange(sDv, "", "flexinactive");
               }
            else {
               sDv.fHide();
               sBr.fHide();
               sC.forcedBar[i] = (getStyle(sDv, "visibility") != "hidden") ? true : false;
               sC.scroller[i] = false;
               sBr.curPos = 0;
               cDv.setPos[i]('0px');
               classChange(sDv, "flexinactive", "");
               }
            mDv.setPos[1 - i]((sC.forcedPos[i] && (r || sC.forcedBar[i]) &&!sC.forcedHide[i]) ? sC.barSpace[1 - i] - sC.paddings[i * 2] + "px" : "-" + sC.paddings[i * 2] + "px");
            };
         sDv.onmouseclick = retFalse;
         };
      function updateScroll(bAr, reqSpace, firstRun) {
         var sDv = bAr.sDv, sBr = bAr.sBr, sFDv = bAr.sFDv, sFBr = bAr.sFBr, sSDv = bAr.sSDv, sSBr = bAr.sSBr, i = sBr.indx;
         sDv.setSize[i](tDv.getSize[i]() - reqSpace + 'px');
         sDv.setPos[1 - i](tDv.getSize[1 - i]() - sDv.getSize[1 - i]() + 'px');
         sC.forcedPos[i] = (parseInt(sDv.getPos[1 - i]()) === 0) ? true : false;
         bAr.padLoss = bAr.barPadding[0] + bAr.barPadding[1];
         bAr.baseProp = parseInt((sDv.getSize[i]() - bAr.padLoss) * 0.75);
         sBr.aSize = Math.min(Math.max(Math.min(parseInt(sC.cntRSize[i]/sC.cntSize[i]*sDv.getSize[i]()),bAr.baseProp),45),bAr.baseProp);
         sBr.setSize[i](sBr.aSize + 'px');
         sBr.maxPos = sDv.getSize[i]() - sBr.getSize[i]() - bAr.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]() - sC.cntSize[i];
         sBr.sRange = sBr.maxPos;
         sFDv.setSize[i](sDv.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](sDv.getSize[i]() - sSDv.getSize[i]() + 'px');
         if(!firstRun) sBr.doScrollPos();
         sC.fixIEDispBug();
         };
      sC.mDPosFix = function() {
         mDv.scrollTop = 0;
         mDv.scrollLeft = 0;
         dDv.scrollTop = 0;
         dDv.scrollLeft = 0;
         };
      this.addTrggr(wD, 'load', function() {
         if(dDv.fleXcroll) dDv.scrollUpdate(); }
      );
      this.addTrggr(wD, 'resize', function() {
         if(dDv.refreshTimeout) wD.clearTimeout(dDv.refreshTimeout); dDv.refreshTimeout = wD.setTimeout(function() {
            if(dDv.fleXcroll) dDv.scrollUpdate(); }
         , 80); }
      );
      for(var j = 0, inputName; inputName = focusProtectList[j]; j++) {
         var inputList = dDv.getElementsByTagName(inputName);
         for(var i = 0, formItem; formItem = inputList[i]; i++) {
            fleXenv.addTrggr(formItem, 'focus', function() {
               dDv.focusProtect = true; }
            );
            fleXenv.addTrggr(formItem, 'blur', onblur = function() {
               dDv.focusProtect = false; }
            );
            }
         };
      function retFalse() {
         return false;
         };
      function mMoveBar(e) {
         if(!e) {
            var e = wD.event;
            };
         var FCBar = sC.goScroll, movBr, maxx, xScroll, yScroll;
         if(FCBar == null) return;
         if(!fleXenv.w3events &&!e.button) mMouseUp();
         maxx = (FCBar.scrollBoth) ? 2 : 1;
         for (var i = 0; i < maxx; i++) {
            movBr = (i == 1) ? FCBar.scrlTrgt.vBar : FCBar;
            if(FCBar.clicked) {
               if(!movBr.moved) {
                  sC.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(FCBar.scrollBoth) movBr.curPos = movBr.curPos + (movBr.curPos - movBr.inCurPos);
               movBr.doScrollPos();
               }
            else movBr.moved = false;
            };
         };
      function mMouseUp() {
         if(sC.goScroll != null) {
            sC.goScroll.clicked = false;
            }
         sC.goScroll = null;
         fleXenv.remTrggr(dC, 'selectstart', retFalse);
         fleXenv.remTrggr(dC, 'mousemove', mMoveBar);
         fleXenv.remTrggr(dC, 'mouseup', mMouseUp);
         };
      function mWheelProc(e) {
         if(!e) e = wD.event;
         if(!this.fleXcroll) return;
         var scrDv = this, vEdge, hEdge, hoverH = false, delta = 0, iNDx;
         sC.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;
         sC.edge[1 - iNDx] = false;
         if((sC.edge[iNDx] &&!hoverH) || (!sC.scroller[0] &&!sC.scroller[1])) return;
         if(sC.scroller[1] &&!hoverH) scrollState = dDv.contentScroll(false, sC.wheelAct[iNDx], true);
         vEdge =!sC.scroller[1] || hoverH || (sC.scroller[1] && ((scrollState[1][0] == scrollState[1][1] && delta > 0) || (scrollState[1][0] == 0 && delta < 0)));
         if(sC.scroller[0] && (!sC.scroller[1] || hoverH)) scrollState = dDv.contentScroll(sC.wheelAct[iNDx], false, true);
         hEdge =!sC.scroller[0] || (sC.scroller[0] && sC.scroller[1] && vEdge &&!hoverH) || (sC.scroller[0] && ((scrollState[0][0] == scrollState[0][1] && delta > 0) || (scrollState[0][0] == 0 && delta < 0)));
         if(vEdge && hEdge &&!hoverH) sC.edge[iNDx] = true;
         else sC.edge[iNDx] = false;
         if(e.preventDefault) e.preventDefault();
         return false;
         };
      function isddvChild(elem) {
         while(elem.parentNode) {
            elem = elem.parentNode;
            if(elem == dDv) return true;
            }
         return false;
         };
      function findPos(elem) {
         //modified from firetree.net
         var obj = elem, curleft = curtop = 0;
         var monc = "";
         if(obj.offsetParent) {
            while(obj) {
               curleft += obj.offsetLeft;
               curtop += obj.offsetTop;
               obj = obj.offsetParent;
               monc += curtop + " ";
               }
            }
         else if(obj.x) {
            curleft += obj.x;
            curtop += obj.y;
            }
         elem.xPos = curleft;
         elem.yPos = curtop;
         };
      function findRCpos(elem) {
         var obj = elem;
         curleft = curtop = 0;
         while(!obj.offsetHeight && obj.parentNode && obj != cDv && getStyle(obj, 'display') == "inline") {
            obj = obj.parentNode;
            }
         if(obj.offsetParent) {
            while(obj != cDv) {
               curleft += obj.offsetLeft;
               curtop += obj.offsetTop;
               obj = obj.offsetParent;
               }
            }
         return [curleft, curtop];
         };
      function classChange(elem, addClass, remClass) {
         if (!elem.className) elem.className = '';
         var clsnm = elem.className;
         if (addClass && !clsnm.match(RegExp("(^|\\s)" + addClass + "($|\\s)"))) clsnm = clsnm.replace(/(\S$)/,'$1 ')+addClass;
         if (remClass) clsnm = clsnm.replace(RegExp("((^|\\s)+" + remClass + ")+($|\\s)", "g"), '$2').replace(/\s$/,'');
         elem.className = clsnm;
         };
      }
   , //main code end
   globalInit : function() {
      if(fleXenv.catchFastInit) window.clearInterval(fleXenv.catchFastInit);
      var regg = /#([^#.]*)$/, 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(regg) && 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 clickeD = (e.srcElement) ? e.srcElement : this; while(!clickeD.fleXanchor && clickeD.parentNode) {
                  clickeD = clickeD.parentNode}; if(!clickeD.fleXanchor) return; var tEL = document.getElementById(clickeD.href.match(regg)[1]), eScroll = false; if(tEL == null) tEL = (tEL = document.getElementsByName(clickeD.href.match(regg)[1])[0]) ? tEL : null; if(tEL != null) {
                  var elem = tEL; while(elem.parentNode) {
                     elem = elem.parentNode; if(elem.scrollToElement) {
                        elem.scrollToElement(tEL); eScroll = elem; }; }; if(eScroll) {
                     if(e.preventDefault) e.preventDefault(); document.location.href = "#" + clickeD.href.match(regg)[1]; eScroll.fleXdata.mDPosFix(); return false; }
                  }; }
            );
            };
         };
      fleXenv.initByClass();
      if(window.onfleXcrollRun) window.onfleXcrollRun();
      }
   , initByClass : function() {
      if(fleXenv.initialized) return;
      fleXenv.initialized = true;
      var fleXlist = fleXenv.getByClassName(document.getElementsByTagName("body")[0], "div", 'flexcroll');
      for (var i = 0, tgDiv; tgDiv = fleXlist[i]; i++) fleXenv.fleXcrollMain(tgDiv);
      }
   , getByClassName : function(elem, elType, classString) {
      //v1.1fleX
      if(typeof(elem) == 'string') elem = document.getElementById(elem);
      if(elem == null)return false;
      var regExer = new RegExp("(^|\\s)" + classString + "($|\\s)"), clsnm, retArray = [], key = 0;
      var elems = elem.getElementsByTagName(elType);
      for(var i = 0, pusher; pusher = elems[i]; i++) {
         if(pusher.className && pusher.className.match(regExer)) {
            retArray[key] = pusher;
            key++;
            }
         };
      return retArray;
      }
   , catchFastInit : window.setInterval(function() {
      var dElem = document.getElementById('flexcroll-init'); if(dElem != null) {
         fleXenv.initByClass(); window.clearInterval(fleXenv.catchFastInit); }
      }
   , 100), addTrggr : function(elm, eventname, func) {
      if(!fleXenv.addChckTrggr(elm, eventname, func) && elm.attachEvent) {
         elm.attachEvent('on' + eventname, func);
         }
      }
   , addChckTrggr : function(elm, eventname, func) {
      if(elm.addEventListener) {
         elm.addEventListener(eventname, func, false);
         fleXenv.w3events = true;
         window.addEventListener("unload", function() {
            fleXenv.remTrggr(elm, eventname, func)}
         , false);
         return true;
         }
      else return false;
      }
   , remTrggr : function(elm, eventname, func) {
      if(!fleXenv.remChckTrggr(elm, eventname, func) && elm.detachEvent) elm.detachEvent('on' + eventname, func);
      }
   , remChckTrggr : function(elm, eventname, func) {
      if(elm.removeEventListener) {
         elm.removeEventListener(eventname, func, false);
         return true;
         }
      else return false;
      }
   };
function CSBfleXcroll(targetId) {
   fleXenv.fleXcrollMain(targetId)};
//fleXenv.fleXcrollInit();

