// Gallery v2.2
// requires functions 1.6, dom 3.7

var gallery = {
	frame: {
		id:    "galleryFrame",
		block: null
	},
	
	detail: {
		id:          "galleryDetailFrame",
		block:       null,
		linkCls:     "galleryDetailLink",
		linkNodes:   null,
		visibleCls:  "js_galleryDetail"
	},
	
	nav: {
		id:    "galleryNavigationFrame",
		block: null,
		prevBtn: {
			id:     "galleryNavigation_prev",
			button: null,
			text:   "previous image"
		},
		nextBtn: {
			id:     "galleryNavigation_next",
			button: null,
			text:   "next image"
		},
		listBtn: {
			id:     "galleryNavigation_list",
			button: null,
			text:   "gallery"
		}
	},
	
	init: function() {
		try {
			gallery.frame.block = elm.get(gallery.frame.id);
			gallery.detail.block = elm.get(gallery.detail.id);
			gallery.detail.block.style.display = "none";
			gallery.initNavigation();
			gallery.initDetailView();
		} catch(ex) { xcp.warn(ex, "gallery.init"); }
		return true;
	},
	
	initNavigation: function() {
		var space              = document.createTextNode(" ");
		var frameContent       = document.createElement("div");
		var prevBtnTextNode    = document.createTextNode(gallery.nav.prevBtn.text);
		var nextBtnTextNode    = document.createTextNode(gallery.nav.nextBtn.text);
		var listBtnTextNode = document.createTextNode(gallery.nav.listBtn.text);
		
		gallery.nav.block = elm.get(gallery.nav.id);
		gallery.nav.block.style.display = "none";
		
		frameContent.className = "frameContent";
		gallery.nav.block.appendChild(frameContent);
		gallery.nav.prevBtn.block         = document.createElement("a");
		gallery.nav.prevBtn.block.id      = gallery.nav.prevBtn.id;
		gallery.nav.prevBtn.block.href    = "?";
		gallery.nav.prevBtn.block.appendChild(prevBtnTextNode);
		
		frameContent.appendChild(gallery.nav.prevBtn.block);
		frameContent.appendChild(space.cloneNode(true));
		
		gallery.nav.nextBtn.block         = document.createElement("a");
		gallery.nav.nextBtn.block.id      = gallery.nav.nextBtn.id;
		gallery.nav.nextBtn.block.href    = "?";
		gallery.nav.nextBtn.block.appendChild(nextBtnTextNode);
		
		frameContent.appendChild(gallery.nav.nextBtn.block);
		frameContent.appendChild(space.cloneNode(true));
		
		gallery.nav.listBtn.block         = document.createElement("a");
		gallery.nav.listBtn.block.id      = gallery.nav.listBtn.id;
		gallery.nav.listBtn.block.href    = "?";
		gallery.nav.listBtn.block.appendChild(listBtnTextNode);
		
		frameContent.appendChild(gallery.nav.listBtn.block);
		
		// next image action
		evt.add(gallery.nav.nextBtn.block, "click", function(e) {
			gallery.showNext();
			evt.cancel(e);
			return true;
		} );
		
		// previous image action
		evt.add(gallery.nav.prevBtn.block, "click", function(e) {
			gallery.showPrevious();
			evt.cancel(e);
			return true;
		} );
		
		// hide detail
		evt.add(gallery.nav.listBtn.block, "click", function(e) {
			gallery.hideDetail();
			cls.remove(document.body, gallery.detail.visibleCls);
			evt.cancel(e);
			return true;
		} );
		
		return true;
	},
	
	initDetailView: function() {
		var i; // Int iterator
		if (gallery.detail.block) {
			gallery.detail.linkNodes = new Array();
			var anchors = elm.getByTag("a");
			for (i = 0; i < anchors.length; i++)
				if (cls.has(anchors[i], gallery.detail.linkCls)) {
					// show detail
					gallery.detail.linkNodes[gallery.detail.linkNodes.length] = anchors[i];
					evt.add(anchors[i], "click", function(e) {
						gallery.viewDetail(e);
						cls.add(document.body, gallery.detail.visibleCls);
						evt.cancel(e);
						return true;
					} );
				}
		}
	},
	
	createDetail: function(imageLink,imageThumbnail) {
		// create image
		var detailImage = document.createElement("img");
		var detailImages = gallery.detail.block.getElementsByTagName("img");
		if(detailImages.length > 0)
			gallery.detail.block.replaceChild(detailImage,detailImages[0]);
		detailImage.setAttribute("src", imageLink.href);
		// set alt
		if (imageThumbnail.alt) detailImage.setAttribute("alt", imageThumbnail.alt);
		else if(detailImage.title) detailImage.setAttribute("alt", imageThumbnail.title);
		else if(imageLink.title) detailImage.setAttribute("alt", imageLink.title);
		// set title
		if (imageThumbnail.title) detailImage.setAttribute("title", imageThumbnail.title);
		else detailImage.setAttribute("title", detailImage.alt);
		// view image
		if (detailImages.length == 0)
			gallery.detail.block.appendChild(detailImage);
		gallery.frame.block.style.display = "none";
		gallery.detail.block.style.display = "block";
		cls.add(document.body, gallery.detail.visibleCls);
		evt.add(detailImage, "click", function(e) {
			gallery.clickDetail(e);
			evt.cancel(e); 
		});
		gallery.nav.block.style.display = "block";
	},

	clickDetail: function(e) {
		gallery.hideDetail();
		return true;
	},

	viewDetail: function(e) {
		window.location.replace("#");
		// find anchor
		var imageLink = evt.getTrigger(e);
		while (imageLink.tagName.toLowerCase() != "a") {
			imageLink = imageLink.parentNode;
		}
		gallery.createDetail(imageLink, evt.getTrigger(e));
		return true;
	},

	hideDetail: function() {
		gallery.detail.block.style.display = "none";
		gallery.nav.block.style.display = "none";
		gallery.frame.block.style.display = "block";
		cls.remove(document.body, gallery.detail.visibleCls);
		return true;
	},

	showNext: function() {
		var i; // Int iterator
		var thumbnails;
		
		// find current image source
		var detailImages = gallery.detail.block.getElementsByTagName("img");
		var imageSrc = detailImages[0].src;
		
		// find thumbnail
		var imagePosition = 0;
		var imageLink = null;
		for (i = 0; i < gallery.detail.linkNodes.length; i++) {
			imageLink = gallery.detail.linkNodes[i];
			if(imageSrc == imageLink.href) {
				imagePosition = i+1;
				break;
			}
		}
		if (imagePosition >= gallery.detail.linkNodes.length) imagePosition = 0;
		imageLink = gallery.detail.linkNodes[imagePosition];
		thumbnails = imageLink.getElementsByTagName("img");
		if (thumbnails != null)
			gallery.createDetail(imageLink, thumbnails[0]);
		if (document.recalc) document.recalc();	// IE recover after document manipulations
		return true;
	},

	showPrevious: function() {
		var i; // Int iterator
		var thumbnails;
		
		// find current image source
		var detailImages = gallery.detail.block.getElementsByTagName("img");
		var imageSrc = detailImages[0].src;
		
		// find thumbnail
		var imagePosition = 0;
		var imageLink = null;
		for (i = 0; i < gallery.detail.linkNodes.length; i++) {
			imageLink = gallery.detail.linkNodes[i];
			if(imageSrc == imageLink.href) {
				imagePosition = i-1;
				break;
			}
		}
		if (imagePosition < 0) imagePosition = gallery.detail.linkNodes.length - 1;
		imageLink = gallery.detail.linkNodes[imagePosition];
		thumbnails = imageLink.getElementsByTagName("img");
		if (thumbnails != null)
			gallery.createDetail(imageLink, thumbnails[0]);
		if (document.recalc) document.recalc();	// IE recover after document manipulations
		return true;
	}
}


