lib.widget({
    name: "groupsGallery",
    
    nav: { prev: null, next: null },
    itemsElement: null,
    
    current: 0,
    pages: 0,
    pageWidth: 0,
    step: 3,
    
    events: {},
    
    construct: function construct() {
        var nav = lib.dom.NodeList(lib.dom.byClass("nav", this.element)),
            itemsElement = lib.dom.byClass("groups-gallery-widget-items", this.element)[0],
            items = lib.dom.NodeList(lib.dom.byClass("col", itemsElement)),
            itemWidth = items.items[0].offsetWidth,
            itemMargin = parseInt(lib.dom.getStyle(items.items[0], "marginRight"));
            itemsWidth = itemWidth * items.length + itemMargin * items.length - itemMargin;
        
        this.itemsElement = itemsElement;
        this.itemsElement.style.width = itemsWidth + "px";
        
        this.pageWidth = this.step * (itemWidth + itemMargin);
        this.step = parseInt(itemsElement.dataset ? itemsElement.dataset["step"] : itemsElement.attributes["data-step"].value);
        this.pages = (items.length % this.step == 0)
                     ? items.length / this.step - 1 : (items.length - (items.length % this.step)) / this.step;
        
        items.forEach(function(item, i) {
            lib.dom.removeClass(item, "item-last");
            if (i + 1 == items.length) lib.dom.addClass(item, "item-last");
        });
        
        nav.forEach(lib.bind(function(item) {


            var a = lib.dom.byTag("a", item)[0],
                nav = a.dataset ? a.dataset["nav"] : a.attributes["data-nav"].value;
            lib.dom.removeClass(a, "hidden-display");
            a.innerHTML = "";
            if (nav == "prev") {
                this.nav.prev = a;
                lib.dom.addClass(this.nav.prev, "hidden");
            } else 
			if (nav == "next") {
				this.nav.next = a;
				if (this.current == this.pages) {
					lib.dom.addClass(this.nav.next, "hidden");
				}
			}
        }, this));
        
        this.events.navigate = lib.bind(this.navigate, this);
        lib.event.add(this.element, "click", this.events.navigate);
        
        lib.dom.addClass(this.element, "groups-gallery-widget-initialized");
    },
    
    destroy: function destroy() {
        
    },
    
    animate: function animate(nextValue, time) {
        var currentValue = parseInt(this.itemsElement.style.left) || 0,
            interval = 10,
            steps = time / interval,
            currentStep = 0,
            diffValue = nextValue - currentValue;
            diffStep = diffValue / steps;
        
        var intervalHandle = lib.view.setInterval(lib.bind(function() {
            var tmpValue = currentValue + diffStep;
            
            this.itemsElement.style.left = tmpValue + "px";
            currentValue = tmpValue;
            
            currentStep++;
            if (currentStep == steps) lib.view.clearInterval(intervalHandle);
        }, this), interval);
    },
    
    navigate: function navigate(event) {
        var nav = event.target.dataset
                  ? event.target.dataset["nav"]
                  : (event.target.attributes["data-nav"])
                    ? event.target.attributes["data-nav"].value
                    : null;
        if (!nav || nav != "next" && nav != "prev") return;
        
        if (nav == "next") {
            if (this.current == this.pages) return;
            this.animate(-1 * ++this.current * this.pageWidth, 200);
        } else if (nav == "prev") {
            if (this.current == 0) return;
            this.animate(-1 * --this.current * this.pageWidth, 200);
        }
        
        if (this.current == 0) lib.dom.addClass(this.nav.prev, "hidden");
        else if (this.current == 1) lib.dom.removeClass(this.nav.prev, "hidden");
        
        if (this.current == this.pages) lib.dom.addClass(this.nav.next, "hidden");
        else if (this.current == this.pages - 1) lib.dom.removeClass(this.nav.next, "hidden");
        
        event.preventDefault();
		return false;
    }
});
lib.ready(function() {
    lib.widget.groupsGallery.run(lib.dom.byClass("groups-gallery-widget"));
});


lib.widget({
    name: "gallery",
    
    overlay: null,
    handle: null,
    image: null,
    imagesElement: null,
    previous: null,
    
    visible: true,
    images: [],
    
    events: {},
    
    construct: function construct() {
        lib.dom.addClass(this.element, "hidden");
        this.overlay = lib.dom.byId("overlay");
        this.handle = lib.dom.byClass("gallery-widget-handle")[0];
        this.close = lib.dom.byClass("close", this.element)[0];
        this.image = lib.dom.byClass("gallery-widget-image")[0];
        this.imagesElement = lib.dom.byClass("gallery-widget-images")[0];
        
        this.events.toggle = lib.bind(this.toggle, this);
        this.events.change = lib.bind(this.change, this);
        lib.event.add(this.handle, "click", this.events.toggle);
        lib.event.add(this.close, "click", this.events.toggle);
        lib.event.add(this.imagesElement, "click", this.events.change);
        
        var id = lib.document.location.hash.match(/gallery\:(.+)/i);
        if (id) {
            var image = lib.dom.byId(id[1]);
            if (image) {
                this.toggle();
                lib.event.dispatch(image, "click");
            }
        }
        
        lib.dom.addClass(this.element, "gallery-widget-initialized");
    },
    
    destroy: function destroy() {
        lib.event.remove(this.handle, "click", this.events.toggle);
        lib.event.remove(this.close, "click", this.events.toggle);
        lib.event.remove(this.imagesElement, "click", this.events.change);
    },
    
    toggle: function toggle(event) {
        if (this.visible = !this.visible) {
            lib.dom.addClass(this.overlay, "hidden-display");
            lib.dom.addClass(this.element, "hidden");
            
            lib.document.location.hash = "#-";
        } else {
            var offsetWidth = this.element.offsetWidth,
                offsetHeight = this.element.offsetHeight,
                offsetTop = 0,
                offsetLeft = 0;
            
            if (offsetHeight < lib.dimensions.get().innerHeight) {
                offsetTop = (lib.dimensions.get().innerHeight - offsetHeight) / 2;
            }
            
            if (offsetWidth < lib.dimensions.get().innerWidth) {
                offsetLeft = (lib.dimensions.get().innerWidth - offsetWidth) / 2;
            }
            
            offsetTop = lib.dimensions.get().scrollY + offsetTop;
            offsetLeft = lib.dimensions.get().scrollX + offsetLeft;
            
            this.element.style.top = offsetTop + "px";
            this.element.style.left = offsetLeft + "px";
            
            lib.dom.removeClass(this.overlay, "hidden-display");
            lib.dom.removeClass(this.element, "hidden");
            
            if (event) {
                var children = this.imagesElement.children,
                    id = children.length ? children[0].id : null;
                if (id) lib.event.dispatch(children[0], "click");
                
                event.preventDefault();
            }
        }
    },
    
    change: function change(event) {
        event.preventDefault();
        
        var li = (event.target.tagName == "LI") ? event.target : lib.dom.parent(event.target, null, "li");
        if (!li) return;
        
        var id = li.id,
            href = li.children[0].href;
        
        if (this.previous) lib.dom.removeClass(this.previous, "active");
        lib.dom.addClass(li, "active");
        this.previous = li;
        
        this.image.src = href;

		var maxH = 391;
		var maxW = 587;

		
		
        
        
        lib.document.location.hash = "gallery:" + id;
    }
});
lib.ready(function() {
    lib.widget.gallery.run(lib.dom.byClass("gallery-widget"));
});
























