﻿var floatingMenu =
{
    hasInner: typeof (window.innerWidth) == 'number',
    hasElement: typeof (document.documentElement) == 'object'
        && typeof (document.documentElement.clientWidth) == 'number'
};

var floatingArray =
[
];

floatingMenu.add = function (obj, options) {
    var name;
    var menu;

    if (typeof (obj) === "string")
        name = obj;
    else
        menu = obj;


    if (options == undefined) {
        floatingArray.push(
            {
                id: name,
                menu: menu,

                targetLeft: 0,
                targetTop: 0,

                distance: .07,
                snap: true
            });
    }
    else {
        floatingArray.push(
            {
                id: name,
                menu: menu,

                targetLeft: options.targetLeft,
                targetRight: options.targetRight,
                targetTop: options.targetTop,
                targetBottom: options.targetBottom,

                centerX: options.centerX,
                centerY: options.centerY,

                prohibitXMovement: options.prohibitXMovement,
                prohibitYMovement: options.prohibitYMovement,

                distance: options.distance != undefined ? options.distance : .07,
                snap: options.snap,
                ignoreParentDimensions: options.ignoreParentDimensions,

                scrollContainer: options.scrollContainer,
                scrollContainerId: options.scrollContainerId
            });
    }
};

floatingMenu.findSingle = function (item) {
    if (item.id)
        item.menu = document.getElementById(item.id);

    if (item.scrollContainerId)
        item.scrollContainer = document.getElementById(item.scrollContainerId);
};

floatingMenu.move = function (item) {
    if (!item.prohibitXMovement) {

        //var myWidth = parseInt(document.documentElement.clientWidth);
        //var mydiv = parseInt((myWidth - document.getElementById("header").clientWidth) / 2) + 10;
        item.menu.style.left = ''; //mydiv + document.getElementById("header").clientWidth + 'px';

        item.menu.style.right = 0;
    }

    if (!item.prohibitYMovement) {
        item.menu.style.top = item.nextY + 'px';
        item.menu.style.bottom = '';
    }
    //    alert(item.menu.style.left);
    //    alert(item.menu.style.top);

};

floatingMenu.scrollLeft = function (item) {
    // If floating within scrollable container use it's scrollLeft
    if (item.scrollContainer)
        return item.scrollContainer.scrollLeft;

    var w = window;

    // Find top window scroll parameters if we're IFRAMEd
    while (w != w.parent)
        w = w.parent;

    return this.hasInner
        ? w.pageXOffset
        : this.hasElement
          ? w.document.documentElement.scrollLeft
          : w.document.body.scrollLeft;
};

floatingMenu.scrollTop = function (item) {
    // If floating within scrollable container use it's scrollTop
    if (item.scrollContainer)
        return item.scrollContainer.scrollTop;

    var w = window;

    // Find top window scroll parameters if we're IFRAMEd
    while (w != w.parent)
        w = w.parent;

    return this.hasInner
        ? w.pageYOffset
        : this.hasElement
          ? w.document.documentElement.scrollTop
          : w.document.body.scrollTop;
};

floatingMenu.windowWidth = function () {
    return this.hasElement
        ? document.documentElement.clientWidth
        : document.body.clientWidth;
};

floatingMenu.windowHeight = function () {
    if (floatingMenu.hasElement && floatingMenu.hasInner) {
        // Handle Opera 8 problems
        return document.documentElement.clientHeight > window.innerHeight
            ? window.innerHeight
            : document.documentElement.clientHeight
    }
    else {
        return floatingMenu.hasElement
            ? document.documentElement.clientHeight
            : document.body.clientHeight;
    }
};

floatingMenu.documentHeight = function () {
    var innerHeight = this.hasInner
        ? window.innerHeight
        : 0;

    var body = document.body,
        html = document.documentElement;

    return Math.max(
        body.scrollHeight,
        body.offsetHeight,
        html.clientHeight,
        html.scrollHeight,
        html.offsetHeight,
        innerHeight);
};

floatingMenu.documentWidth = function () {
    var innerWidth = this.hasInner
        ? window.innerWidth
        : 0;

    var body = document.body,
        html = document.documentElement;

    return Math.max(
        body.scrollWidth,
        body.offsetWidth,
        html.clientWidth,
        html.scrollWidth,
        html.offsetWidth,
        innerWidth);
};

floatingMenu.calculateCornerX = function (item) {
    var offsetWidth = item.menu.offsetWidth;

    if (item.centerX)
        return this.scrollLeft(item) + (this.windowWidth() - offsetWidth) / 2;

    var result = this.scrollLeft(item) - item.parentLeft;
    if (item.targetLeft == undefined) {
        result += this.windowWidth() - item.targetRight - offsetWidth;
    }
    else {
        result += item.targetLeft;
    }

    if (document.body != item.menu.parentNode
        && result + offsetWidth >= item.confinedWidthReserve) {
        result = item.confinedWidthReserve - offsetWidth;
    }

    if (result < 0)
        result = 0;

    return result;
};

floatingMenu.calculateCornerY = function (item) {
    var offsetHeight = item.menu.offsetHeight;

    if (item.centerY)
        return this.scrollTop(item) + (this.windowHeight() - offsetHeight) / 2;

    var result = this.scrollTop(item) - item.parentTop;
    if (item.targetTop === undefined) {
        result += this.windowHeight() - item.targetBottom - offsetHeight;
    }
    else {
        result += item.targetTop;
    }

    if (document.body != item.menu.parentNode
        && result + offsetHeight >= item.confinedHeightReserve) {
        result = item.confinedHeightReserve - offsetHeight;
    }

    if (result < 0)
        result = 0;

    return result;
};

floatingMenu.computeParent = function (item) {
    if (item.ignoreParentDimensions) {
        item.confinedHeightReserve = this.documentHeight();
        item.confinedWidthReserver = this.documentWidth();
        item.parentLeft = 0;
        item.parentTop = 0;
        return;
    }

    var parentNode = item.menu.parentNode;
    var parentOffsets = this.offsets(parentNode, item);
    item.parentLeft = parentOffsets.left;
    item.parentTop = parentOffsets.top;

    item.confinedWidthReserve = parentNode.clientWidth;

    // We could have absolutely-positioned DIV wrapped
    // inside relatively-positioned. Then parent might not
    // have any height. Try to find parent that has
    // and try to find whats left of its height for us.
    var obj = parentNode;
    var objOffsets = this.offsets(obj, item);
    while (obj.clientHeight + objOffsets.top
           < item.menu.offsetHeight + parentOffsets.top) {
        obj = obj.parentNode;
        objOffsets = this.offsets(obj, item);
    }

    item.confinedHeightReserve = obj.clientHeight
        - (parentOffsets.top - objOffsets.top);
};

floatingMenu.offsets = function (obj, item) {
    var result =
    {
        left: 0,
        top: 0
    };

    if (obj === item.scrollContainer)
        return;

    while (obj.offsetParent && obj.offsetParent != item.scrollContainer) {
        result.left += obj.offsetLeft;
        result.top += obj.offsetTop;
        obj = obj.offsetParent;
    }

    if (window == window.parent)
        return result;

    // we're IFRAMEd
    var iframes = window.parent.document.body.getElementsByTagName("IFRAME");
    for (var i = 0; i < iframes.length; i++) {
        if (iframes[i].contentWindow != window)
            continue;

        obj = iframes[i];
        while (obj.offsetParent) {
            result.left += obj.offsetLeft;
            result.top += obj.offsetTop;
            obj = obj.offsetParent;
        }
    }

    return result;
};

floatingMenu.doFloatSingle = function (item) {
    this.findSingle(item);

    var stepX, stepY;

    this.computeParent(item);

    var cornerX = this.calculateCornerX(item);

    var stepX = (cornerX - item.nextX) * item.distance;
    if (Math.abs(stepX) < .5 && item.snap
        || Math.abs(cornerX - item.nextX) == 1) {
        stepX = cornerX - item.nextX;
    }

    var cornerY = this.calculateCornerY(item);

    var stepY = (cornerY - item.nextY) * item.distance;
    if (Math.abs(stepY) < .5 && item.snap
        || Math.abs(cornerY - item.nextY) == 1) {
        stepY = cornerY - item.nextY;
    }

    if (Math.abs(stepX) > 0 ||
        Math.abs(stepY) > 0) {
        item.nextX += stepX;
        item.nextY += stepY;
        this.move(item);
    }
};

floatingMenu.fixTargets = function () {
};

floatingMenu.fixTarget = function (item) {
};

floatingMenu.doFloat = function () {
    this.fixTargets();
    for (var i = 0; i < floatingArray.length; i++) {
        this.fixTarget(floatingArray[i]);
        this.doFloatSingle(floatingArray[i]);
    }
    setTimeout('floatingMenu.doFloat()', 20);
};

floatingMenu.insertEvent = function (element, event, handler) {
    // W3C
    if (element.addEventListener != undefined) {
        element.addEventListener(event, handler, false);
        return;
    }

    var listener = 'on' + event;

    // MS
    if (element.attachEvent != undefined) {
        element.attachEvent(listener, handler);
        return;
    }

    // Fallback
    var oldHandler = element[listener];
    element[listener] = function (e) {
        e = (e) ? e : window.event;
        var result = handler(e);
        return (oldHandler != undefined)
                && (oldHandler(e) == true)
                && (result == true);
    };
};

floatingMenu.init = function () {
    floatingMenu.fixTargets();

    for (var i = 0; i < floatingArray.length; i++) {
        floatingMenu.initSingleMenu(floatingArray[i]);
    }

    setTimeout('floatingMenu.doFloat()', 100);
};

// Some browsers init scrollbars only after
// full document load.
floatingMenu.initSingleMenu = function (item) {
    this.findSingle(item);
    this.computeParent(item);
    this.fixTarget(item);
    item.nextX = this.calculateCornerX(item);
    item.nextY = this.calculateCornerY(item);
    this.move(item);
};

function fixIE6Browser() {
    var Browser = {
        Version: function () {

            var version = 999; // we assume a sane browser
            if (navigator.appVersion.indexOf("MSIE") != -1) {
                // bah, IE again, lets downgrade version number
                version = parseFloat(navigator.appVersion.split("MSIE")[1]);
                document.getElementById('TextSearch').style.paddingTop = '0px';

                return version;
            } else {
                document.getElementById('floatdiv').style.position = 'Fixed';
              

            }
        }
    }


    if (Browser.Version() < 7) {      
        document.getElementById('floatdiv').style.position = 'absolute';
        document.getElementById('PriceSmall').style.paddingRight = '0px';
        document.getElementById('buyNowSmall').style.paddingRight = '0px';
        document.getElementById('Catalogblock').style.paddingLeft = '0px';
        document.getElementById('CatalogCategories').style.paddingRight = '0px';
		
		document.getElementById('RapidX').style.width = '1000px';


        // Setting for DivPrice
        document.getElementById('dlproduct_ctl00_dpInnerProduct_ctl00_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl00_dpInnerProduct_ctl01_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl00_dpInnerProduct_ctl02_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl00_dpInnerProduct_ctl03_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl00_dpInnerProduct_ctl04_DivPrice').style.left = '0px';

        document.getElementById('dlproduct_ctl01_dpInnerProduct_ctl00_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl01_dpInnerProduct_ctl01_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl01_dpInnerProduct_ctl02_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl01_dpInnerProduct_ctl03_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl01_dpInnerProduct_ctl04_DivPrice').style.left = '0px';

        document.getElementById('dlproduct_ctl02_dpInnerProduct_ctl00_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl02_dpInnerProduct_ctl01_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl02_dpInnerProduct_ctl02_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl02_dpInnerProduct_ctl03_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl02_dpInnerProduct_ctl04_DivPrice').style.left = '0px';

        document.getElementById('dlproduct_ctl03_dpInnerProduct_ctl00_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl03_dpInnerProduct_ctl01_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl03_dpInnerProduct_ctl02_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl03_dpInnerProduct_ctl03_DivPrice').style.left = '0px';
        document.getElementById('dlproduct_ctl03_dpInnerProduct_ctl04_DivPrice').style.left = '0px';

        document.getElementById('prod_detailin1').className = 'prod_detailinheight80';
        document.getElementById('prod_detailin2').className = 'prod_detailinheight80';
        document.getElementById('prod_detailin3').className = 'prod_detailinheight80';
        document.getElementById('prod_detailin4').className = 'prod_detailinheight80';
        document.getElementById('prod_detailin5').className = 'prod_detailinheight80';
        document.getElementById('prod_detailin6').className = 'prod_detailinheight80';
        document.getElementById('prod_detailin7').className = 'prod_detailinheight80';
        document.getElementById('prod_detailin8').className = 'prod_detailinheight80';
        document.getElementById('prod_detailin9').className = 'prod_detailinheight80';
        document.getElementById('prod_detailin10').className = 'prod_detailinheight80';
        document.getElementById('prod_detailin11').className = 'prod_detailinheight80';
        document.getElementById('prod_detailin12').className = 'prod_detailinheight80';

        document.getElementById('productin1').className = 'productinheight50';
        document.getElementById('productin2').className = 'productinheight50';
        document.getElementById('productin3').className = 'productinheight50';
        document.getElementById('productin4').className = 'productinheight50';
        document.getElementById('productin5').className = 'productinheight50';
        document.getElementById('productin6').className = 'productinheight50';
        document.getElementById('productin7').className = 'productinheight50';
        document.getElementById('productin8').className = 'productinheight50';
        document.getElementById('productin9').className = 'productinheight50';
        document.getElementById('productin10').className = 'productinheight50';
        document.getElementById('productin11').className = 'productinheight50';
        document.getElementById('productin12').className = 'productinheight50';
        


        floatingMenu.insertEvent(window, 'load', floatingMenu.init);
    }
    if (Browser.Version() == 7) {
        document.getElementById('productin1').className = 'productinHeight95';
        document.getElementById('productin2').className = 'productinHeight95';
        document.getElementById('productin3').className = 'productinHeight95';
        document.getElementById('productin4').className = 'productinHeight95';
        document.getElementById('productin5').className = 'productinHeight95';
        document.getElementById('productin6').className = 'productinHeight95';
        document.getElementById('productin7').className = 'productinHeight95';
        document.getElementById('productin8').className = 'productinHeight95';
        document.getElementById('productin9').className = 'productinHeight95';
        document.getElementById('productin10').className = 'productinHeight95';
        document.getElementById('productin11').className = 'productinHeight95';
        document.getElementById('productin12').className = 'productinHeight95';
        document.getElementById('floatdiv').style.position = 'Fixed';
		
    }
    if (Browser.Version() > 7) {
        document.getElementById('TextSearch').style.paddingTop = '25px';       
        document.getElementById('floatdiv').style.position = 'Fixed';
    }

}

// Register ourselves as jQuery plugin if jQuery is present
if (typeof (jQuery) !== 'undefined') {
    (function ($) {
        $.fn.addFloating = function (options) {
            return this.each(function () {
                floatingMenu.add(this, options);
            });
        };
    })(jQuery);
}

floatingMenu.add('floatdiv',
    {

        targetRight: 0,
        targetBottom: 0,
        snap: true
    });
    
