/*
PhotoPopup 
by Radek N.
 
Description:
- Inspired by Dhakar's Lightbox
- getWindowHeight, getBodyHeight, getBodyScroll w oparciu o rozwia?zania z quirksmode.org 
*/

addLoadEvent(initPhotoPopup);

function getWindowHeight() {
	if (self.innerHeight) 
		return self.innerHeight; // browsers
	else if (document.documentElement && document.documentElement.clientHeight) 
		return document.documentElement.clientHeight; 	
	else if (document.body) 
		return document.body.clientHeight; // other IE
	return false;
}

function getBodyHeight() {
	if (window.innerHeight && window.scrollMaxY)
		return window.innerHeight + window.scrollMaxY;
	else if (document.body.scrollHeight > document.body.offsetHeight)
		return document.body.scrollHeight;
	else  
		return document.body.offsetHeight;
	return false;
}

function getBodyScroll() {
	if (self.pageYOffset) 
		return self.pageYOffset; // browsers
	else if (document.documentElement && document.documentElement.scrollTop)
		return document.documentElement.scrollTop; // strict mode IE6 
	else if (document.body) 
		return document.body.scrollTop; // other IE
	return false;
}

function hidePhotoPopup(invoker) {
	// remove layer & layer childs
	var layer = document.getElementById('photopopup');
	while (layer.firstChild) {
		layer.removeChild(layer.firstChild);
	}
	var layer = document.getElementById('photopopup');
	layer.parentNode.removeChild(layer);
	// remove mask
	var mask = document.getElementById('photopopupMask');
	mask.parentNode.removeChild(mask);
	// show selects
	var selects = document.getElementsByTagName("select");
	if (selects) {
		for (var i = 0; i < selects.length; i++) 
			selects[i].style.visibility = 'visible';
	}
	
	// focus on invoker link
	if (invoker) invoker.focus();
	return false;
}

function calculateHeight(windowHeight, bodyHeight) {
	if (bodyHeight > windowHeight) 
			return bodyHeight + 'px';
	else 
			return windowHeight + 'px';
	return false;
}

function showPhotoPopup(invoker) {
	if(!document.getElementById || !document.createTextNode){ return false; }

	// returns current invoker from gallery array
	function getCurrentFromGallery(invoker) {
		var current = 0;
		for (var i = 0; i < gallery[rel].length; i++) {
			if (gallery[rel][i] == invoker) 
				current = i;
		}
		return current;
	}
	
	// checking if any photopopup is allready opened
	if (document.getElementById('photopopup')) {
		hidePhotoPopup();
	}
	
	// invoker properties
	var imageHref = invoker.getAttribute('href');
	var rel = invoker.getAttribute('rel');
	
	// calculate height
	var windowHeight = getWindowHeight();	var bodyHeight = getBodyHeight();	var bodyScroll = getBodyScroll();
	var heightCalculated = calculateHeight(windowHeight, bodyHeight);
		
	// hide f***ing selects (IE6 bug)
	var selects = document.getElementsByTagName("select");
	for (var i = 0; i < selects.length; i++) 
		selects[i].style.visibility = 'hidden';
				
	// create mask & layer 
	var mask = document.createElement('div');
	mask.setAttribute('id','photopopupMask');
	mask.style.height = heightCalculated;
	document.body.appendChild(mask);
	var layer = document.createElement('div'); // redundant layer (stupid solution for IE6 DXImageTransform+links bug)
	layer.setAttribute('id','photopopup');
	layer.style.height = heightCalculated;
	var loaderImageOffset = 60; // offset for loader background image (layer background)
	var offsetTop = Math.ceil(windowHeight / 2) - loaderImageOffset + bodyScroll; 
	layer.style.backgroundPosition = '50% ' + offsetTop + 'px';
	document.body.appendChild(layer);

	// main image preloader
	var imagePreload = new Image();	
	imagePreload.onload = function() {
	
		// vertical centering - calculate offset
		var offsetTop;
		offsetTop = Math.ceil((windowHeight - imagePreload.height) / 2);
		if (offsetTop < 0) 
			offsetTop = 0;
		
		// create container
		var container = document.createElement('div');
		container.setAttribute('id', 'photopopupContainer');
		container.style.width = imagePreload.width + 'px';
		container.style.marginTop = bodyScroll + offsetTop + 'px';
		layer.appendChild(container);
		
		// create main photo
		var image = document.createElement('img');
		image.setAttribute('id', 'photopopupImage');
		image.setAttribute('src', imageHref);
		image.setAttribute('alt', ''); 
		image.onclick = function() {
			return hidePhotoPopup(invoker);
		}
		container.appendChild(image);
		
		// create close button
		var close = document.createElement('a');
		close.setAttribute('id', 'photopopupClose');
		close.setAttribute('href', '#');
		close.onclick = function() {
			return hidePhotoPopup(invoker);
		}
		var txt = document.createTextNode('Zamknij');
		close.appendChild(txt);
		container.appendChild(close);
		close.focus();
		/*
		if (rel) {
			// create next/prev buttons for gallery
			var current = getCurrentFromGallery(invoker);
			if (current > 0) {
				var prev = document.createElement('a');
				prev.setAttribute('id', 'photopopupPrev');
				prev.setAttribute('href', '#');
				prev.onclick = function() {
					return showPhotoPopup(gallery[rel][current-1]);
				}
				var txt = document.createTextNode('< Prev');
				prev.appendChild(txt);
				container.appendChild(prev);
			}
			if (current < (gallery[rel].length - 1)) {
				var next = document.createElement('a');
				next.setAttribute('id', 'photopopupNext');
				next.setAttribute('href', '#');
				next.onclick = function() {
					return showPhotoPopup(gallery[rel][current+1]);
				}
				var txt = document.createTextNode('Next >');
				next.appendChild(txt);
				container.appendChild(next);
			}
		}*/
		// calculate mask height - again!
		windowHeight = getWindowHeight();	bodyHeight = getBodyHeight();	bodyScroll = getBodyScroll();
		heightCalculated = calculateHeight(windowHeight, bodyHeight);
  	mask.style.height = heightCalculated;

	}
	imagePreload.src = imageHref;
	
	return false;	
}

var gallery = new Array;
/* 
gallery["landscapes"][0] = ...
gallery["landscapes"][1] = ...
gallery["landscapes"][2] = ...
gallery["cars"][0] = ...
gallery["cars"][1] = ...
*/

function initPhotoPopup() {
	var invokers = document.getElementsByTagName("a");
	var count = 0, countRels = 0;
	var rels = new Array;

	/* checikng rel attributes for gallery array */
	function checkRels(rel, rels) {
		var exists = false;
		for (var i = 0; i < rels.length; i++) {
			if (rel == rels[i]) exists = true;
		}
		return exists;
	}

	/* get all anchors with speciefied class name */
	for (var i = 0; i < invokers.length; i++) {
		if (invokers[i].className.indexOf("photopopup") != -1) {
			var rel = invokers[i].getAttribute('rel');
			if (rel) {
				// creating two-dimensional gallery array
				if (!checkRels(rel, rels)) {
					gallery[rel] = new Array;
					rels[countRels] = rel;	
					countRels++;
					count = 0;							
				}
				gallery[rel][count] = invokers[i];
				count++;
			}
			invokers[i].onclick = function() {
				return showPhotoPopup(this);
			}
		}
	}
				
}








/* end */