/* Script by: www.jtricks.com
 * Version: 20071210
 * Latest version:
 * www.jtricks.com/javascript/navigation/floating.html
 * Rescripted by FigurArt
 * www.figurart.hu
 */
 window.cmax=0;
var floatingMenuId = 'floatdiv';
var floatingMenu =
{
    targetY: 0,
    tolerance: 50,
    stopPos:0,
    topPad:108,

    hasInner: typeof(window.innerWidth) == 'number',
    hasElement: document.documentElement
        && document.documentElement.clientWidth,

    menu:
        document.getElementById
        ? document.getElementById(floatingMenuId)
        : document.all
          ? document.all[floatingMenuId]
          : document.layers[floatingMenuId]
};

floatingMenu.move = function ()
{
    if (document.layers)
    {
        floatingMenu.menu.top = floatingMenu.nextY;
    }
    else
    {
        floatingMenu.menu.style.top = floatingMenu.nextY + 'px';
    }
}

floatingMenu.computeShifts = function ()
{
    var de = document.documentElement;
    floatingMenu.obH=floatingMenu.menu.offsetHeight;
    document.getElementById("floatPusher").style.height=floatingMenu.obH+"px";
   // floatingMenu.wiH = window.innerHeight;

    floatingMenu.allH = document.getElementById("mainTab").offsetHeight;

    floatingMenu.shiftY = 
        floatingMenu.hasInner
        ? pageYOffset
        : floatingMenu.hasElement
          ? de.scrollTop
          : document.body.scrollTop;
          
          
    if (floatingMenu.targetY < 0)
    {
    
        if (floatingMenu.hasElement && floatingMenu.hasInner)
        {
            // Handle Opera 8 problems
            floatingMenu.shiftY +=
                de.clientHeight > window.innerHeight
                ? window.innerHeight
                : de.clientHeight
        }
        else
        {
            floatingMenu.shiftY +=
                floatingMenu.hasElement
                ? document.documentElement.clientHeight
                : floatingMenu.hasInner
                  ? window.innerHeight
                  : document.body.clientHeight;
        }
    }
    
    if (floatingMenu.hasElement && floatingMenu.hasInner)
        {
            // Handle Opera 8 problems
            floatingMenu.wiH =
                de.clientHeight > window.innerHeight
                ? window.innerHeight
                : de.clientHeight
        }
        else
        {
            floatingMenu.wiH =
                floatingMenu.hasElement
                ? document.documentElement.clientHeight
                : floatingMenu.hasInner
                  ? window.innerHeight
                  : document.body.clientHeight;
        }

    var maxbott=floatingMenu.allH-floatingMenu.obH-floatingMenu.tolerance;
    var scrolla = 
        floatingMenu.hasInner
        ? pageYOffset
        : floatingMenu.hasElement
          ? de.scrollTop
          : document.body.scrollTop;
    

    floatingMenu.lelog= parseInt(floatingMenu.stopPos + floatingMenu.obH - floatingMenu.wiH + floatingMenu.tolerance);
    if(floatingMenu.shiftY > floatingMenu.lelog || floatingMenu.shiftY < floatingMenu.stopPos){
        floatingMenu.shiftY=floatingMenu.shiftY;                               
    }else{
        floatingMenu.shiftY=floatingMenu.stopPos;
    }
    
    if(floatingMenu.shiftY<floatingMenu.topPad){
       floatingMenu.stopPos=floatingMenu.topPad;
       floatingMenu.shiftY=floatingMenu.topPad;
    }

    if(floatingMenu.shiftY>maxbott && scrolla>100){
       
       if(maxbott<floatingMenu.topPad){
           floatingMenu.stopPos=floatingMenu.topPad;
           floatingMenu.shiftY=floatingMenu.topPad;
       }else{
           floatingMenu.stopPos=maxbott;
           floatingMenu.shiftY=maxbott;
       }
        
    }

}

floatingMenu.doFloat = function()
{

/*
    if(floatingMenu.firstrun==0){
        floatingMenu.shiftY=floatingMenu.nextY;
        floatingMenu.move();
    }floatingMenu.firstrun=1;
*/
    var stepY;

    floatingMenu.computeShifts();
    stepY = (floatingMenu.shiftY + floatingMenu.targetY - floatingMenu.nextY) * .2;


    if (Math.abs(stepY) < .5)
    {
        stepY = floatingMenu.shiftY + floatingMenu.targetY - floatingMenu.nextY;
        
        floatingMenu.status="STOP";
        floatingMenu.stopPos=floatingMenu.shiftY;      

    }
    if (Math.abs(stepY) > 0)
    {
        floatingMenu.nextY += stepY;
        floatingMenu.move();
        floatingMenu.status="MOVE";        
        
    }
//window.cmax+=1;
//if(window.cmax<10){
//   document.getElementById("trace").innerHTML += floatingMenu.status + "<br>" +
/*
                                                ":: tolerance:" + floatingMenu.tolerance + "<br>" +
                                                ":: stopPos:" + floatingMenu.stopPos + "<br>" +
                                                ":: lelog:" + floatingMenu.lelog + "<br>" +
                                                ":: obH:" + floatingMenu.obH + "<br>" +
                                                ":: allH:" + floatingMenu.allH + "<br>" +                                                
                                                ":: wiH:" + floatingMenu.wiH + "<br>" +                                                
                                                " , shiftY:" + floatingMenu.shiftY;
//*/
//}

    setTimeout('floatingMenu.doFloat()', 20);
};

// addEvent designed by Aaron Moore
floatingMenu.addEvent = function(element, listener, handler)
{
    if(typeof element[listener] != 'function' || 
       typeof element[listener + '_num'] == 'undefined')
    {
        element[listener + '_num'] = 0;
        if (typeof element[listener] == 'function')
        {
            element[listener + 0] = element[listener];
            element[listener + '_num']++;
        }
        element[listener] = function(e)
        {
            var r = true;
            e = (e) ? e : window.event;
            for(var i = element[listener + '_num'] -1; i >= 0; i--)
            {
                if(element[listener + i](e) == false)
                    r = false;
            }
            return r;
        }
    }

    //if handler is not already stored, assign it
    for(var i = 0; i < element[listener + '_num']; i++)
        if(element[listener + i] == handler)
            return;
    element[listener + element[listener + '_num']] = handler;
    element[listener + '_num']++;
};

floatingMenu.init = function()
{
    floatingMenu.initSecondary();
    floatingMenu.doFloat();
};

// Some browsers init scrollbars only after
// full document load.
floatingMenu.initSecondary = function()
{
    floatingMenu.computeShifts();
    floatingMenu.nextY = floatingMenu.shiftY +
        floatingMenu.targetY;
    floatingMenu.move();
}

if (document.layers)
    floatingMenu.addEvent(window, 'onload', floatingMenu.init);
else
{
    floatingMenu.init();
    floatingMenu.addEvent(window, 'onload',
        floatingMenu.initSecondary);
}
