
/*********************************************************/
/*                                                       */
/*   Developed by                                        */
/*                                                       */
/*   ALEKSEY PETRYCHENKO  [alex.petrychenko@gmail.com]   */
/*   BRANDmini js container 2.0.0         [2010/05/29]   */
/*                                                       */
/*********************************************************/

BmContainer2 = function() {

    // Timeout variables

    this._ta;

    // Container elements

    this._frame;
    this._loader;
    this._frameContainer;

    // Attributes settings.

    this._bminiAttribute = "rel";
    this._bminiAttributeMask = "bmini:";

    // Diamonds

    this.IsDiamonds = false;

    // If bmini == null, load only bmini identifier in container

    this._bmini = null;

    // Functions

    this._scrollFunc;
    this._resizeFunc;
};

BmContainer2.prototype = {

    Init: function(bmini) {

        this._bmini = bmini;

        var container = document.createElement('div');

        container.id = 'BmBox';
        container.style.top = '0';
        container.style.left = '0';
        container.style.display = 'none';
        container.style.position = 'absolute';
        container.style.zIndex = '1000000';

        container.style.width = '100%';  //document.body.clientWidth + "px";
        container.style.height = '100%'; //this.GetSize().height + "px";

        container.style.backgroundImage = "url(http://apps.brandmini.com/Images/bg.png)";

        this._loader = container;

        this._scrollFunc = window.onscroll;
        this._resizeFunc = window.onresize;

        window.onscroll = this.Reposition;
        window.onresize = this.Resize;

        // ~ document.body.style.position = 'relative';
        document.body.appendChild(container);

        var frameContainer = document.createElement('div');

        frameContainer.style.zIndex = '1000000';

        if (this.IsDiamonds) {
            frameContainer.style.width = '1030px';
            frameContainer.style.height = '575px';
        }
        else {
            frameContainer.style.width = '519px';
            frameContainer.style.height = '575px';
        }

        frameContainer.style.display = 'none';
        frameContainer.style.position = 'absolute';
        frameContainer.setAttribute('id', 'FrameContainer');

        var frame = document.createElement('iframe');

        frame.style.border = '0';
        frame.style.zIndex = '10';

        if (this.IsDiamonds) {
            frame.style.width = '1030px';
            frame.style.height = '575px';
        }
        else {
            frame.style.width = '519px';
            frame.style.height = '575px';
        }

        frame.style.position = 'absolute';
        frame.style.backgroundColor = "transparent";

        frame.setAttribute('scrolling', '0');
        frame.setAttribute('frameborder', '0');
        frame.setAttribute('allowTransparency', 'true');

        frame.setAttribute('id', 'Frame');

        frame.frameBorder = "0";

        frameContainer.appendChild(frame);
        document.body.appendChild(frameContainer);

        this._frame = frame;
        this._frameContainer = frameContainer;

        this.ProcessHrefs();
    },
    ProcessHrefs: function() {
        var hrefs = document.getElementsByTagName("a");

        for (var i = 0; i < hrefs.length; i++) {
            if (hrefs[i].getAttribute(this._bminiAttribute)) {
                var attribute = hrefs[i].getAttribute(this._bminiAttribute);

                // Check if this element is an BRANDmini href element
                if (attribute.indexOf(this._bminiAttributeMask) == 0) {
                    hrefs[i].onclick = this.CreateBmHref;
                }
            }
        }
    },
    CreateBmHref: function(e) {
        var attribute = this.getAttribute(bm._bminiAttribute);
        var bmini = attribute.substring(bm._bminiAttributeMask.length);

        if (bm.IsDiamonds) return bm.ShowDiamonds(bmini);
        return bm.Show(bmini);
    },
    GetScrollPosition: function() {
        var x = 0, y = 0;
        if (typeof (window.pageYOffset) == 'number') {
            y = window.pageYOffset;
            x = window.pageXOffset;
        } else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
            y = document.body.scrollTop;
            x = document.body.scrollLeft;
        } else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
            y = document.documentElement.scrollTop;
            x = document.documentElement.scrollLeft;
        }
        return { scrollX: x, scrollY: y };
    },
    GetPageSize: function() {
        return {
            width: window.innerWidth || (document.documentElement && document.documentElement.clientWidth) || document.body.clientWidth,
            height: window.innerHeight || (document.documentElement && document.documentElement.clientHeight) || document.body.clientHeight
        };
    },
    GetElementSize: function(elem) {
        return {
            width: elem.offsetWidth || elem.style.pixelWidth,
            height: elem.offsetHeight || elem.style.pixelHeight
        };
    },
    Center: function(elem) {
        var emSize = bm.GetElementSize(elem);
        var pageSize = bm.GetPageSize();
        var scrollPos = bm.GetScrollPosition();

        bm._loader.style.top = scrollPos.scrollY + "px";

        var x = Math.round((pageSize.width - emSize.width) / 2 + scrollPos.scrollX);
        var y = Math.round((pageSize.height - emSize.height) / 2 + scrollPos.scrollY);

        elem.style.top = y + "px";
        elem.style.left = x + "px";
    },
    Resize: function(e) {
        bm.Center(bm._frameContainer);

        if (bm._resizeFunc) eval(bm._resizeFunc);
    },
    Reposition: function(e) {
        bm.Center(bm._frameContainer);
        if (bm._scrollFunc) eval(bm._scrollFunc);

        return false;
    },
    Show: function(bmini) {
        bm._loader.onclick = bm.Hide;

        if (this._bmini == null) bm._frame.src = "http://apps2.brandmini.com/Gadget.aspx?i=" + bmini;
        else bm._frame.src = "http://apps2.brandmini.com/Gadget.aspx?i=" + this._bmini;

        bm._loader.style.display = bm._frame.style.display = "block";
        bm._frameContainer.style.display = bm._frame.style.display = "block";

        bm.Center(bm._frameContainer);

        bm.Resize();

        return false;
    },
    ShowAd: function(imageUrl, adWith, adHeight, bannerUrl, bannerScript) {

        var self = this;

        bm._loader.onclick = function() {
            self._frame.src = "";

            self._frame.style.display = "none";
            self._loader.style.display = "none";

            self._frame.style.display = "none"
            self._frameContainer.style.display = "none";
        }

        bm._frame.style.display = "none";

        bm._frameContainer.style.width = adWith + 'px';
        bm._frameContainer.style.height = adHeight + 'px';

        bm._loader.style.display = bm._frame.style.display = "block";
        bm._frameContainer.style.display = bm._frame.style.display = "block";

        bm._frameContainer.innerHTML = "<a href='" + bannerUrl + "' onclick='" + bannerScript + "' target='_blank'><img src='" + imageUrl + "' width='" + adWith + " height='" + adHeight + "' style='border: 1px solid #CCC' /></a>";

        bm.Center(bm._frameContainer);

        bm.Resize();

        return false;
    },
    ShowWide: function(bmini) {
        bm._loader.onclick = bm.Hide;

        bm._frame.style.width = '1030px';
        bm._frame.style.height = '575px';

        bm._frameContainer.style.width = '1030px';
        bm._frameContainer.style.height = '575px';

        if (this._bmini == null) bm._frame.src = "http://apps2.brandmini.com/GadgetWide.aspx?i=" + bmini;
        else bm._frame.src = "http://apps2.brandmini.com/GadgetWide.aspx?i=" + this._bmini;

        bm._loader.style.display = bm._frame.style.display = "block";
        bm._frameContainer.style.display = bm._frame.style.display = "block";

        bm.Center(bm._frameContainer);

        bm.Resize();

        return false;
    },
    ShowDiamonds: function(bmini) {
        bm._loader.onclick = bm.Hide;

        bm._frame.style.width = '1030px';
        bm._frame.style.height = '575px';

        bm._frameContainer.style.width = '1030px';
        bm._frameContainer.style.height = '575px';

        if (this._bmini == null) bm._frame.src = "http://apps2.brandmini.com/DiamondsGadget.aspx?i=" + bmini;
        else bm._frame.src = "http://apps2.brandmini.com/DiamondsGadget.aspx?i=" + this._bmini;

        bm._loader.style.display = bm._frame.style.display = "block";
        bm._frameContainer.style.display = bm._frame.style.display = "block";

        bm.Center(bm._frameContainer);

        bm.Resize();

        return false;
    },
    ShowColorDiamonds: function(bmini) {
        bm._loader.onclick = bm.Hide;

        bm._frame.style.width = '1030px';
        bm._frame.style.height = '585px';

        bm._frameContainer.style.width = '1030px';
        bm._frameContainer.style.height = '585px';

        if (this._bmini == null) bm._frame.src = "http://apps2.brandmini.com/ColorDiamondsGadget.aspx?i=" + bmini;
        else bm._frame.src = "http://apps2.brandmini.com/ColorDiamondsGadget.aspx?i=" + this._bmini;

        bm._loader.style.display = bm._frame.style.display = "block";
        bm._frameContainer.style.display = bm._frame.style.display = "block";

        bm.Center(bm._frameContainer);

        bm.Resize();

        return false;
    },
    Hide: function(e) {
        bm._frame.src = "";

        bm._loader.style.display = bm._frame.style.display = "none";
        bm._frameContainer.style.display = bm._frame.style.display = "none";

        return false;
    }
}

var bm = new BmContainer2();

