	var nc      =  !!(document.captureEvents    &&  !document.getElementById);
	var nc6     =  !!(document.captureEvents    &&  document.documentElement);
	var opera   =  !!(document.getElementById   &&  !document.documentElement);
	var ie      =  !!document.all;
	var ie4     =  !!(document.all              &&  !document.documentElement);
	var ie5     =  !!(document.all              &&  document.documentElement);
	var dom     =  !!document.getElementById;
	var mac     =  !!(navigator.userAgent.indexOf("Mac")!=-1);

	var oCatElem = document.getElementById('catlist');
	var oPseudoElem = document.getElementById('pseudoElement');
    var blElementFixed = false;
    var iBaseElementPosition = findPos(oCatElem).yPos;
    var sBaseElementClass = oCatElem.className;

    var iYPos = 0;
    var iTopPos = 0;
    var iInnerHeight = 0;
    var iCatElemHeight = 0;

    if (document.addEventListener) {
        document.addEventListener("scroll", setScrollElem, true);
    } else {
		if (document.layers)
            document.captureEvents(Event.SCROLL);
        window.onscroll = setScrollElem;
    }

    function setScrollElem(e)
    {
	    if (!e) e = window.event;

        iYPos = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : window.pageYOffset;
	    iTopPos = iYPos - findPos(oCatElem).yPos;
        iInnerHeight = document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight ? document.body.clientHeight : window.innerHeight;
        iCatElemHeight = oCatElem.offsetHeight;

        if (!window.blElementFixed && (iTopPos > 0) && (iInnerHeight > iCatElemHeight)) {
            oCatElem.className = sBaseElementClass + " pinned";
            oPseudoElem.className = sBaseElementClass;
            oPseudoElem.innerHTML = oCatElem.innerHTML;
            window.blElementFixed = true;
        } else if (window.blElementFixed && iYPos < iBaseElementPosition) {
            oCatElem.className = sBaseElementClass;
            oPseudoElem.className = '';
            oPseudoElem.innerHTML = '';
            window.blElementFixed = false;
        }
        return;
    }

    function findPos() {

		var el      = arguments[0];
		var xPos    = 0;
		var yPos    = 0;

		if(nc) {
			for(i = 0; i < arguments.length; i++) {
				xPos += arguments[i].x;
				yPos += arguments[i].y;
			}
		}
		else {
			while(el){
			xPos += el.offsetLeft;
				yPos += el.offsetTop;
				if(!(ie4 && mac))   el  = el.offsetParent;
				else el = el.parentElement;
			}
		}
		return {xPos: xPos, yPos: yPos};
	}
