﻿///<reference path="global.js" />
///<reference path="uielements.js" />
Gallery =
{
    Init: function () {
        $FX.Page.GetPageDimensions = function () {
            var w = $G.GET("form:0,.wrap:0,.content_wrap:0");
            var f = $G.GET("form:0,.wrap:0,.footer:0");
            return { x: document.body.offsetWidth, y: ((w ? w.offsetHeight : 0) + (f ? f.offsetHeight : 0)) };
        }
        Gallery.ImageHolder = $G.GET("#image-holder") || $G.Append(document.body, $G.Tag("div", { style: { width: "0px", height: "0px", overflow: "hidden"} }, "image-holder"));
        Gallery.Div = $G.Append(document.body, $G.Tag("div", "image-popup"));
        Gallery.Div.Prev = $G.Append(Gallery.Div, $G.Tag("div", "prev"));
        Gallery.Div.Next = $G.Append(Gallery.Div, $G.Tag("div", "next"));
        Gallery.Div.Pic = $G.Append(Gallery.Div, $G.Tag("div", "pic"));
        Gallery.Div.Info = $G.Append(Gallery.Div, $G.Tag("div", "info"));
        Gallery.Div.Close = $G.Append(Gallery.Div, $G.Tag("div", "close"));

        $G.Event.Add(Gallery.Div.Prev, "click", Gallery.Prev);
        $G.Event.Add(Gallery.Div.Next, "click", Gallery.Next);
        $G.Event.Add(Gallery.Div.Close, "click", Gallery.Close);
        setInterval(Gallery.FixYPosition, 600);
        $G.Event.Add(window, "keyup", function (e) {
            if (Gallery.Opened) {
                var k = $G.Event.KeyCode(e);
                if (k == 27)
                    Gallery.Close();
                else if (k == 39)
                    Gallery.Next();
                else if (k == 37)
                    Gallery.Prev();
            }
        });
    },
    Opened: false,
    FY: 0,
    LastC: 0,
    LastD: 0,
    FixYPosition: function () {
        if (Gallery.Opened && Gallery.Div) {
            var d = ($G.Window.Scroll.Top() + Gallery.FY);
            if (d < 0)
                d = 0;
            var c = $G.GetStyle(Gallery.Div, "top", true);
            if (d != c) {
                Gallery.LastC = c;
                setTimeout(function () {
                    var d = ($G.Window.Scroll.Top() + Gallery.FY);
                    if (d < 0)
                        d = 0;
                    var c = $G.GetStyle(Gallery.Div, "top", true);
                    if (Gallery.LastC == c) {
                        $FX.Time(400).Interval(10).AnimateStyle(Gallery.Div, "top", (d - c), d, function () { });
                    }
                }, 100);
            }
        }
    },
    Div: null,
    Show: function (obj, getImages) {
        if (getImages)
            Gallery.CurrentGetImages = getImages;
        else
            Gallery.CurrentGetImages = null;
        if (obj && obj.getAttribute("bigsrc")) {
            var img = $G.GET(Gallery.ImageHolder, [["@src", obj.getAttribute("bigsrc"), "0"]]);
            if (!img)
                img = $G.Append(Gallery.ImageHolder, $G.Tag("img", { src: obj.getAttribute("bigsrc") }));
            var _gTop = Math.round($G.Window.Height() / 2 + $G.Window.Scroll.Top()) - 34;
            var _gLeft = Math.round($G.Window.Width() / 2 + $G.Window.Scroll.Left()) - 34;
            Gallery.Div.style.width = "68px";
            Gallery.Div.style.height = "68px";
            Gallery.Div.Pic.style.width = "48px";
            Gallery.Div.Pic.style.height = "48px";
            Gallery.Div.style.top = _gTop + "px";
            Gallery.Div.style.left = _gLeft + "px";
            Gallery.Div.style.display = "block";
            Gallery.Div.style.backgroundImage = "url(res/img/preloader.gif)";
            Gallery.Div.Next.style.display = Gallery.Div.Prev.style.display = Gallery.Div.Info.style.display = Gallery.Div.Close.style.display = "none";
            $FX.Time(500).Page.FadeIn("#000000", 60, Gallery.LoadCheck.bind({ img: img, obj: obj }));
        }
    },
    Prev: function () {
        var imgs = Gallery.GetImages(Gallery.Current.obj);
        if (imgs.length > 0) {
            var info = Gallery.GetInfo(Gallery.Current.obj);
            var obj;
            if (info.index > 1)
                obj = imgs[info.index - 2];
            else
                obj = imgs[imgs.length - 1];
            if (obj) {
                if (obj && obj.getAttribute("bigsrc")) {
                    var img = $G.GET(Gallery.ImageHolder, [["@src", obj.getAttribute("bigsrc"), "0"]]);
                    if (!img)
                        img = $G.Append(Gallery.ImageHolder, $G.Tag("img", { src: obj.getAttribute("bigsrc") }));
                    Gallery.LoadCheck.bind({ img: img, obj: obj })();
                }
            }
        }
    },
    Next: function () {
        var imgs = Gallery.GetImages(Gallery.Current.obj);
        if (imgs.length > 0) {
            var info = Gallery.GetInfo(Gallery.Current.obj);
            var obj;
            if (info.index < imgs.length)
                obj = imgs[info.index];
            else
                obj = imgs[0];
            if (obj) {
                if (obj && obj.getAttribute("bigsrc")) {
                    var img = $G.GET(Gallery.ImageHolder, [["@src", obj.getAttribute("bigsrc"), "0"]]);
                    if (!img)
                        img = $G.Append(Gallery.ImageHolder, $G.Tag("img", { src: obj.getAttribute("bigsrc") }));
                    Gallery.LoadCheck.bind({ img: img, obj: obj })();
                }
            }
        }
    },
    GetImages: function (obj) {
        if (Gallery.CurrentGetImages)
            return Gallery.CurrentGetImages(obj);
        else
            return Gallery.DefaultGetImages(obj);
    },
    DefaultGetImages: function (obj) {
        return $G.GET(obj, "up").getElementsByTagName("img");
    },
    GetInfo: function (obj) {
        var imgs = Gallery.GetImages(obj);
        var result = { amount: 0, index: 0 };
        if (imgs) {
            result.amount = imgs.length;
            for (var i = 0; i < result.amount; i++) {
                if (imgs[i].getAttribute("bigsrc") == obj.getAttribute("bigsrc")) {
                    result.index = i + 1;
                    return result;
                }
            }
        }
        return { index: 0, amount: 0 };
    },
    LoadCheck: function () {
        if (this.img.complete) {
            Gallery.Current = this;
            var _gTop = Math.round($G.Window.Height() / 2 + $G.Window.Scroll.Top());
            var _gLeft = Math.round($G.Window.Width() / 2 + $G.Window.Scroll.Left());
            Gallery.Div.Pic.style.background = "url(" + this.img.src + ") no-repeat center top";
            Gallery.Div.Pic.style.display = "block";
            Gallery.Div.style.backgroundImage = "url(res/img/px.gif)";
            var disp = this.img.offsetHeight - Gallery.Div.Pic.offsetHeight;
            disp = (disp + Gallery.Div.Pic.offsetHeight > 100 ? disp : 100 - Gallery.Div.Pic.offsetHeight);
            //var h = this.img.offsetHeight > 100 ? this.img.offsetHeight < $G.Window.Height() * 0.85 ? this.img.offsetHeight : Math.round($G.Window.Height() * 0.85) : 100;
            var h = this.img.offsetHeight;
            $FX.Interval(10).Time(500).AnimateStyle(Gallery.Div.Pic, "height", disp, h, function () {
                //var h = this.img.offsetHeight > 100 ? this.img.offsetHeight < $G.Window.Height() * 0.85 ? this.img.offsetHeight : Math.round($G.Window.Height() * 0.85) : 100;
                var h = this.img.offsetHeight;
                Gallery.Div.style.height = (h + 60) + "px";
                var width = this.img.offsetWidth - Gallery.Div.Pic.offsetWidth;
                width = (width + Gallery.Div.Pic.offsetWidth > 400 ? width : 400 - Gallery.Div.Pic.offsetWidth);
                $FX.Interval(10).Time(500).AnimateStyle(Gallery.Div.Pic, "width", width, (this.img.offsetWidth > 400 ? this.img.offsetWidth : 400), function () {
                    Gallery.Div.style.width = ($G.GetStyle(Gallery.Div.Pic, "width", true) + 20) + "px";
                    Gallery.Div.Next.style.display = Gallery.Div.Prev.style.display = Gallery.Div.Info.style.display = Gallery.Div.Close.style.display = "block";
                    var info = Gallery.GetInfo(this.obj);
                    Gallery.Div.Info.innerHTML = this.obj.getAttribute("metatitle") + "<br />изображение " + info.index.toString() + " из " + info.amount.toString();
                } .bind(this), function (f) {
                    Gallery.Div.style.width = (f + 20) + "px";
                    Gallery.Div.style.left = Math.round(_gLeft - (f + 20) / 2) + "px";
                }, "AnimateWidth");
                Gallery.Opened = true;
                Gallery.FY = Math.round($G.GetStyle(Gallery.Div, "top", true) - $G.Window.Scroll.Top());
            } .bind(this), function (f) {
                if (f != null) {
                    Gallery.Div.style.height = (f + 60) + "px";
                    Gallery.Div.style.top = Math.round(_gTop - (f + 60) / 2) + "px";
                }
            }, "AnimateHeight");
        }
        else {
            setTimeout(Gallery.LoadCheck.bind(this), 100);
        }
    },
    Close: function () {
        $G.SetStyle("display", "none", Gallery.Div.Prev, Gallery.Div.Next, Gallery.Div.Close, Gallery.Div.Info, Gallery.Div.Pic);
        Gallery.Div.style.backgroundImage = "url(res/img/px.gif)";
        var cTop = Math.round($G.Window.Height() / 2) + $G.Window.Scroll.Top();
        var cLeft = Math.round($G.Window.Width() / 2) + $G.Window.Scroll.Left();
        var dLeft = cLeft - $G.GetStyle(Gallery.Div, "left", true);
        var dTop = cTop - $G.GetStyle(Gallery.Div, "top", true);
        $FX.Interval(10).Time(500).Page.FadeOut("#000000");
        $FX.Interval(10).Time(500).AnimateStyle(Gallery.Div, "width", -$G.GetStyle(Gallery.Div, "width", true), 0, function () { Gallery.Div.style.display = "none"; }, null, "GalleryWidth");
        $FX.Interval(10).Time(500).AnimateStyle(Gallery.Div, "height", -$G.GetStyle(Gallery.Div, "height", true), 0, null, null, "GalleryHeight");
        $FX.Interval(10).Time(500).AnimateStyle(Gallery.Div, "top", dTop, cTop, null, null, "GalleryTop");
        $FX.Interval(10).Time(500).AnimateStyle(Gallery.Div, "left", dLeft, cLeft, null, null, "GalleryLeft");
        Gallery.Current = null;
        Gallery.Opened = false;
    }
}

addDOMLoadEvent(Gallery.Init);


GalleryNoNav =
{
    Init: function () {
        $FX.Page.GetPageDimensions = function () {
            var w = $G.GET("form:0,.wrap:0,.content_wrap:0");
            var f = $G.GET("form:0,.wrap:0,.footer:0");
            return { x: document.body.offsetWidth, y: ((w ? w.offsetHeight : 0) + (f ? f.offsetHeight : 0)) };
        }
        GalleryNoNav.ImageHolder = $G.GET("#image-holder") || $G.Append(document.body, $G.Tag("div", { style: { width: "0px", height: "0px", overflow: "hidden"} }, "image-holder"));
        GalleryNoNav.Div = $G.Append(document.body, $G.Tag("div", "image-popupNoNav"));
        GalleryNoNav.Div.Prev = $G.Append(GalleryNoNav.Div, $G.Tag("div", "prev"));
        GalleryNoNav.Div.Next = $G.Append(GalleryNoNav.Div, $G.Tag("div", "next"));
        GalleryNoNav.Div.Pic = $G.Append(GalleryNoNav.Div, $G.Tag("div", "pic"));
        GalleryNoNav.Div.Info = $G.Append(GalleryNoNav.Div, $G.Tag("div", "info"));
        GalleryNoNav.Div.Close = $G.Append(GalleryNoNav.Div, $G.Tag("div", "close"));

        $G.Event.Add(GalleryNoNav.Div.Prev, "click", GalleryNoNav.Prev);
        $G.Event.Add(GalleryNoNav.Div.Next, "click", GalleryNoNav.Next);
        $G.Event.Add(GalleryNoNav.Div.Close, "click", GalleryNoNav.Close);
        setInterval(GalleryNoNav.FixYPosition, 600);
        $G.Event.Add(window, "keyup", function (e) {
            if (GalleryNoNav.Opened) {
                var k = $G.Event.KeyCode(e);
                if (k == 27)
                    GalleryNoNav.Close();
                else if (k == 39)
                    GalleryNoNav.Next();
                else if (k == 37)
                    GalleryNoNav.Prev();
            }
        });
    },
    Opened: false,
    FY: 0,
    LastC: 0,
    LastD: 0,
    FixYPosition: function () {
        if (GalleryNoNav.Opened && GalleryNoNav.Div) {
            var d = ($G.Window.Scroll.Top() + GalleryNoNav.FY);
            if (d < 0)
                d = 0;
            var c = $G.GetStyle(GalleryNoNav.Div, "top", true);
            if (d != c) {
                GalleryNoNav.LastC = c;
                setTimeout(function () {
                    var d = ($G.Window.Scroll.Top() + GalleryNoNav.FY);
                    if (d < 0)
                        d = 0;
                    var c = $G.GetStyle(GalleryNoNav.Div, "top", true);
                    if (GalleryNoNav.LastC == c) {
                        $FX.Time(400).Interval(10).AnimateStyle(GalleryNoNav.Div, "top", (d - c), d, function () { });
                    }
                }, 100);
            }
        }
    },
    Div: null,
    Show: function (obj, getImages) {
        if (getImages)
            GalleryNoNav.CurrentGetImages = getImages;
        else
            GalleryNoNav.CurrentGetImages = null;
        if (obj && obj.getAttribute("bigsrc")) {
            var img = $G.GET(GalleryNoNav.ImageHolder, [["@src", obj.getAttribute("bigsrc"), "0"]]);
            if (!img)
                img = $G.Append(GalleryNoNav.ImageHolder, $G.Tag("img", { src: obj.getAttribute("bigsrc") }));
            var _gTop = Math.round($G.Window.Height() / 2 + $G.Window.Scroll.Top()) - 34;
            var _gLeft = Math.round($G.Window.Width() / 2 + $G.Window.Scroll.Left()) - 34;
            GalleryNoNav.Div.style.width = "68px";
            GalleryNoNav.Div.style.height = "68px";
            GalleryNoNav.Div.Pic.style.width = "48px";
            GalleryNoNav.Div.Pic.style.height = "48px";
            GalleryNoNav.Div.style.top = _gTop + "px";
            GalleryNoNav.Div.style.left = _gLeft + "px";
            GalleryNoNav.Div.style.display = "block";
            GalleryNoNav.Div.style.backgroundImage = "url(res/img/preloader.gif)";
            GalleryNoNav.Div.Next.style.display = GalleryNoNav.Div.Prev.style.display = GalleryNoNav.Div.Info.style.display = GalleryNoNav.Div.Close.style.display = "none";
            $FX.Time(500).Page.FadeIn("#000000", 60, GalleryNoNav.LoadCheck.bind({ img: img, obj: obj }));
        }
    },
    Prev: function () {
        var imgs = GalleryNoNav.GetImages(GalleryNoNav.Current.obj);
        if (imgs.length > 0) {
            var info = GalleryNoNav.GetInfo(GalleryNoNav.Current.obj);
            var obj;
            if (info.index > 1)
                obj = imgs[info.index - 2];
            else
                obj = imgs[imgs.length - 1];
            if (obj) {
                if (obj && obj.getAttribute("bigsrc")) {
                    var img = $G.GET(GalleryNoNav.ImageHolder, [["@src", obj.getAttribute("bigsrc"), "0"]]);
                    if (!img)
                        img = $G.Append(GalleryNoNav.ImageHolder, $G.Tag("img", { src: obj.getAttribute("bigsrc") }));
                    GalleryNoNav.LoadCheck.bind({ img: img, obj: obj })();
                }
            }
        }
    },
    Next: function () {
        var imgs = GalleryNoNav.GetImages(GalleryNoNav.Current.obj);
        if (imgs.length > 0) {
            var info = GalleryNoNav.GetInfo(GalleryNoNav.Current.obj);
            var obj;
            if (info.index < imgs.length)
                obj = imgs[info.index];
            else
                obj = imgs[0];
            if (obj) {
                if (obj && obj.getAttribute("bigsrc")) {
                    var img = $G.GET(GalleryNoNav.ImageHolder, [["@src", obj.getAttribute("bigsrc"), "0"]]);
                    if (!img)
                        img = $G.Append(GalleryNoNav.ImageHolder, $G.Tag("img", { src: obj.getAttribute("bigsrc") }));
                    GalleryNoNav.LoadCheck.bind({ img: img, obj: obj })();
                }
            }
        }
    },
    GetImages: function (obj) {
        if (GalleryNoNav.CurrentGetImages)
            return GalleryNoNav.CurrentGetImages(obj);
        else
            return GalleryNoNav.DefaultGetImages(obj);
    },
    DefaultGetImages: function (obj) {
        return $G.GET(obj, "up").getElementsByTagName("img");
    },
    GetInfo: function (obj) {
        var imgs = GalleryNoNav.GetImages(obj);
        var result = { amount: 0, index: 0 };
        if (imgs) {
            result.amount = imgs.length;
            for (var i = 0; i < result.amount; i++) {
                if (imgs[i].getAttribute("bigsrc") == obj.getAttribute("bigsrc")) {
                    result.index = i + 1;
                    return result;
                }
            }
        }
        return { index: 0, amount: 0 };
    },
    LoadCheck: function () {
        if (this.img.complete) {
            GalleryNoNav.Current = this;
            var _gTop = Math.round($G.Window.Height() / 2 + $G.Window.Scroll.Top());
            var _gLeft = Math.round($G.Window.Width() / 2 + $G.Window.Scroll.Left());
            GalleryNoNav.Div.Pic.style.background = "url(" + this.img.src + ") no-repeat center top";
            GalleryNoNav.Div.Pic.style.display = "block";
            GalleryNoNav.Div.style.backgroundImage = "url(res/img/px.gif)";
            var disp = this.img.offsetHeight - GalleryNoNav.Div.Pic.offsetHeight;
            disp = (disp + GalleryNoNav.Div.Pic.offsetHeight > 100 ? disp : 100 - GalleryNoNav.Div.Pic.offsetHeight);
            //var h = this.img.offsetHeight > 100 ? this.img.offsetHeight < $G.Window.Height() * 0.85 ? this.img.offsetHeight : Math.round($G.Window.Height() * 0.85) : 100;
            var h = this.img.offsetHeight;
            $FX.Interval(10).Time(500).AnimateStyle(GalleryNoNav.Div.Pic, "height", disp, h, function () {
                //var h = this.img.offsetHeight > 100 ? this.img.offsetHeight < $G.Window.Height() * 0.85 ? this.img.offsetHeight : Math.round($G.Window.Height() * 0.85) : 100;
                var h = this.img.offsetHeight;
                GalleryNoNav.Div.style.height = (h + 60) + "px";
                var width = this.img.offsetWidth - GalleryNoNav.Div.Pic.offsetWidth;
                width = (width + GalleryNoNav.Div.Pic.offsetWidth > 400 ? width : 400 - GalleryNoNav.Div.Pic.offsetWidth);
                $FX.Interval(10).Time(500).AnimateStyle(GalleryNoNav.Div.Pic, "width", width, (this.img.offsetWidth > 400 ? this.img.offsetWidth : 400), function () {
                    GalleryNoNav.Div.style.width = ($G.GetStyle(GalleryNoNav.Div.Pic, "width", true) + 20) + "px";
                    GalleryNoNav.Div.Next.style.display = GalleryNoNav.Div.Prev.style.display = GalleryNoNav.Div.Info.style.display = GalleryNoNav.Div.Close.style.display = "block";
                    var info = GalleryNoNav.GetInfo(this.obj);
                    GalleryNoNav.Div.Info.innerHTML = this.obj.getAttribute("metatitle") + "<br />изображение " + info.index.toString() + " из " + info.amount.toString();
                } .bind(this), function (f) {
                    GalleryNoNav.Div.style.width = (f + 20) + "px";
                    GalleryNoNav.Div.style.left = Math.round(_gLeft - (f + 20) / 2) + "px";
                }, "AnimateWidth");
                GalleryNoNav.Opened = true;
                GalleryNoNav.FY = Math.round($G.GetStyle(GalleryNoNav.Div, "top", true) - $G.Window.Scroll.Top());
            } .bind(this), function (f) {
                if (f != null) {
                    GalleryNoNav.Div.style.height = (f + 60) + "px";
                    GalleryNoNav.Div.style.top = Math.round(_gTop - (f + 60) / 2) + "px";
                }
            }, "AnimateHeight");
        }
        else {
            setTimeout(GalleryNoNav.LoadCheck.bind(this), 100);
        }
    },
    Close: function () {
        $G.SetStyle("display", "none", GalleryNoNav.Div.Prev, GalleryNoNav.Div.Next, GalleryNoNav.Div.Close, GalleryNoNav.Div.Info, GalleryNoNav.Div.Pic);
        GalleryNoNav.Div.style.backgroundImage = "url(res/img/px.gif)";
        var cTop = Math.round($G.Window.Height() / 2) + $G.Window.Scroll.Top();
        var cLeft = Math.round($G.Window.Width() / 2) + $G.Window.Scroll.Left();
        var dLeft = cLeft - $G.GetStyle(GalleryNoNav.Div, "left", true);
        var dTop = cTop - $G.GetStyle(GalleryNoNav.Div, "top", true);
        $FX.Interval(10).Time(500).Page.FadeOut("#000000");
        $FX.Interval(10).Time(500).AnimateStyle(GalleryNoNav.Div, "width", -$G.GetStyle(GalleryNoNav.Div, "width", true), 0, function () { GalleryNoNav.Div.style.display = "none"; }, null, "GalleryNoNavWidth");
        $FX.Interval(10).Time(500).AnimateStyle(GalleryNoNav.Div, "height", -$G.GetStyle(GalleryNoNav.Div, "height", true), 0, null, null, "GalleryNoNavHeight");
        $FX.Interval(10).Time(500).AnimateStyle(GalleryNoNav.Div, "top", dTop, cTop, null, null, "GalleryNoNavTop");
        $FX.Interval(10).Time(500).AnimateStyle(GalleryNoNav.Div, "left", dLeft, cLeft, null, null, "GalleryNoNavLeft");
        GalleryNoNav.Current = null;
        GalleryNoNav.Opened = false;
    }
}

addDOMLoadEvent(GalleryNoNav.Init);


