

/* ------------------- LIGHTBOX/SLIDESHOW ------------------------------- */


//var fade_duration = 0; // transition duration in seconds
//var pop_duration = 1; // popup opens, in seconds
var ss_loop = true; // slideshow loops through beginning and end

var imgblank = "http://www.mohonkimages.com/images/blank.gif";

var lb_groupclass = "lightbox_group";
var lb_imgclass = "lightbox_img";

var lb_img_id = "lb_img";
var lb_imgshell_id = "lb_imgshell";
var lb_imgdiv_id = "lb_imgdiv";
var lb_caption_id = "lb_caption";
var ss_nav_id = "ss_imgnav";
var ss_navback_id = "ss_imgback";
var ss_navfwd_id = "ss_imgfwd";
var ss_navtxt_id = "ss_imgnavtext";
var lb_zoombg_id = "lb_zoombg";
var lb_zoomdiv_id = "lb_zoomshell";
var lb_zoom100link_id = "lb_resize100link";
var lb_zoomfitlink_id = "lb_resizefitlink";
var lb_zoomimg_id = "lb_zoomimg";

var lb_noscroll = false;
var zoomed = false;
var ss_counter = 0;

var all_lightbox_sizes = new Array(0);
var lightbox_largest_sizes;

var lightbox_images = new Array(0);
var lightbox_captions = new Array(0);
var lightbox_sizes = new Array(0);


function get_lightbox_target(el) {
	var thisimgclass = lb_imgclass;

	if (!el) {
		return false;
	}
	else {
		var thistarget = el;
		var thistargetp = thistarget.parentNode; // account for clicking tags nested one level inside the link

		if (thistarget.className && thistarget.className.indexOf(thisimgclass) >= 0) {
			el = thistarget;
		}
		else if (thistargetp.className && thistargetp.className.indexOf(thisimgclass) >= 0) {
			el = thistargetp;
		}
		else {
			return false;
		}
	}

	return {el:el};
}


function set_lightbox_slideshow(el) {
	var thisgroupclass = lb_groupclass;
	var thisimgclass = lb_imgclass;

	if (get_lightbox_target(el)) {
		el = get_lightbox_target(el).el;
	}
	else {
		return false;
	}

	/*if (lightbox_images[1]) {
		return true;
	}*/

	var getgroups = document.getElementsByTagName("div");

	for (var g=0; g<getgroups.length; g++) {
		if (getgroups[g].className.indexOf(thisgroupclass) >= 0) {
			var getimgs = getgroups[g].getElementsByTagName("a");
			for (var a=0; a<getimgs.length; a++) {
				if (getimgs[a] == el) {
					var thiscount = 0;
					var thiswidths = new Array(0);
					var thisheights = new Array(0);
					for (var i=0; i<getimgs.length; i++) {
						if (getimgs[i].className.indexOf(thisimgclass) >= 0) {
							thiscount++;
							lightbox_images[thiscount] = getimgs[i].href;
							var thiscaption = (getimgs[i].title ? getimgs[i].title : "");
							lightbox_captions[thiscount] = thiscaption;
							var thissize = getimgsize(getimgs[i].href);
							lightbox_sizes[thiscount] = thissize.w + "x" + thissize.h;

							thiswidths.push(thissize.w);
							thisheights.push(thissize.h);

							if (getimgs[i] == el) {
								ss_counter = thiscount;
							}
						}
					}
					thiswidths.sort(function(a,b){return b - a});
					thisheights.sort(function(a,b){return b - a});
					lightbox_largest_sizes = thiswidths[0] + "x" + thisheights[0];
					return true;
				}
			}
		}
	}

	return false;
}


function open_lightbox(el,zoom) {
	var thisimgsize = getimgsize(el.href);
	/*if (!thisimgsize) { // el is not an image
		return true;
	}
	else {*/
		var thisw = thisimgsize.w;
		var thish = thisimgsize.h;
	//}

	//zoomed = (zoom == 100 ? false : true);
	//ss_counter = 0;

	var ssnav = document.getElementById(ss_nav_id);

	if (set_lightbox_slideshow(el)) {
		if (lightbox_images[2]) {
			ssnav.style.display = "block";
		}
		lightbox_slideshow("view");
		//lightbox_slideshow_preload_imgs(-4,10);
		//var thislargesize = lightbox_largest_sizes.split("x");
		//var thisw = thislargesize[0];
		//var thish = thislargesize[1];
	}
	else {
		ssnav.style.display = "none";
		lightbox_change_img("img",el)
	}

	lightbox_view_img('resize');
	lightbox_view_img('open',zoom,thisw,thish);
	return false;
}


function open_lightbox_slideshow(id,zoom) {
	var thisel = document.getElementById(id);
	open_lightbox(thisel,zoom);
	return false;
}


function reset_lightbox() {
	ss_counter = 0;
	zoomed = false;
	lightbox_largest_sizes = null;
}


function reset_lightbox_slideshow() {
	lightbox_images = new Array(0);
	lightbox_captions = new Array(0);
	lightbox_sizes = new Array(0);
	document.getElementById(ss_nav_id).style.display = "none";
}


function lightbox_slideshow_preload_imgs(start,total) {
	for (var ii=start; ii<(start+total); ii++) {
		if (ii > (lightbox_images.length -1)) {
			pl = ii - (lightbox_images.length -1);
		}
		else if (ii < 1) {
			pl = ii + (lightbox_images.length -1);
		}
		else {
			pl = ii;
		}

		if (lightbox_images[pl] && !window["pl_ssimg_" + pl]) {
			window['pl_ssimg_' + pl] = new Image(), eval('pl_ssimg_' + pl).src = lightbox_images[pl];
		}
	}
}


function lightbox_slideshow(change){
	if (change == "view") {
		var ss_nextimg = ss_counter;
	}
	else if (change == "fwd") {
		var ss_nextimg = ss_counter + 1;
	}
	else if (change == "back") {
		var ss_nextimg = ss_counter - 1;
	}

	if ((ss_nextimg/3) == Math.ceil(ss_nextimg/3)) { // ss_nextimg is a multiple of 3
		lightbox_slideshow_preload_imgs((ss_nextimg-6),3);
		lightbox_slideshow_preload_imgs((ss_nextimg+1),3);
	}

	if (ss_loop == true) {
		if (ss_nextimg == 0) {
			ss_nextimg = (lightbox_images.length -1);
		}
		else if (ss_nextimg == lightbox_images.length) {
			ss_nextimg = 1;
		}

		document.getElementById(ss_navtxt_id).innerHTML = (ss_nextimg < 10 ? "&nbsp;" : "") + ss_nextimg + " of " + (lightbox_images.length -1);
	}
	else {
		if (!lightbox_images[ss_nextimg]) {
			return;
		}
		else {
			document.getElementById(ss_navtxt_id).innerHTML = ss_nextimg + " of " + (lightbox_images.length -1);

			if (!lightbox_images[ss_nextimg+1]) {
				document.getElementById(ss_navfwd_id).className = "arrow disabled";
			}
			else {
				document.getElementById(ss_navfwd_id).className = "arrow";
			}

			if (!lightbox_images[ss_nextimg-1]) {
				document.getElementById(ss_navback_id).className = "arrow disabled";
			}
			else {
				document.getElementById(ss_navback_id).className = "arrow";
			}
		}
	}

	lightbox_change_img("ss",ss_nextimg);
	zoomed = false;
	lightbox_view_img('resize');
	ss_counter = ss_nextimg;
}



function lightbox_change_img(type,img) {
	var thisimg = document.getElementById(lb_img_id);

	if (type == "ss") {
		thisimg.src = lightbox_images[img];
		var thisimgsize = lightbox_sizes[img].split("x");
		//thisimg.width = thisimgsize[0];
		//thisimg.height = thisimgsize[1];
		thisimg.style.width = thisimgsize[0] + "px";
		thisimg.style.height = thisimgsize[1] + "px";
		var thislargesize = lightbox_largest_sizes.split("x");
		var thisleftmargin = ((thislargesize[0] - thisimgsize[0]) / 2);
		var thistopmargin = (thislargesize[1] - thisimgsize[1]);
		var thiscaption = (lightbox_captions[img] ? lightbox_captions[img] : "");
	}
	else if (type == "img") {
		img = get_lightbox_target(img).el;
		thisimg.src = img.href;
		var thisimgsize = getimgsize(img.href);
		thisimg.width = thisimgsize.w;
		thisimg.height = thisimgsize.h;
		//var thisleftmargin = (thisimgsize.w / 2);
		//var thistopmargin = thisimgsize.h;
		var thiscaption = (img.title ? img.title : "");
	}

	//thisimg.style.marginLeft = thisleftmargin + "px";
	//thisimg.style.marginTop = thistopmargin + "px";

	if (document.getElementById(lb_caption_id)) {
		document.getElementById(lb_caption_id).innerHTML = thiscaption;
	}
}


function lightbox_resize_img() {
	//window.scrollTo(0,0);

	if (zoomed == true) {
		lightbox_view_img('resize');
		zoomed = false;
		document.getElementById(lb_imgshell_id).className = "unzoomed";
	}
	else {
		lightbox_view_img('resize',100);
		zoomed = true;
		lb_noscroll = false;
		document.getElementById(lb_imgshell_id).className = "zoomed";
	}
}


function lightbox_view_img(action,zoom,iw,ih) {
	var thezoombg = document.getElementById(lb_zoombg_id);
	var thezoomdiv = document.getElementById(lb_zoomdiv_id);
	var thezoomimg = document.getElementById(lb_img_id);
	var thezoom100link = document.getElementById(lb_zoom100link_id);
	var thezoomfitlink = document.getElementById(lb_zoomfitlink_id);
	var thisimg = ss_counter;

	var marginx = 146;
	var marginy = 100;

	if (action == "open" || action == "resize") {
		var thezoomw = (iw ? iw : getimgsize(thezoomimg.src).w);
		var thezoomh = (ih ? ih : getimgsize(thezoomimg.src).h);
		var thisperc;

		var thiswinsize = window.winsize();

		var thiswinscroll = window.winscroll();
		lb_noscroll = thiswinscroll.x + "," + thiswinscroll.y;

		if (zoom != null) {
			var displaysize = zoom;
			thezoomw = thezoomw * (eval(displaysize)/100);
			thezoomh = thezoomh * (eval(displaysize)/100);
		}
		else {
			if ((eval(thezoomw) + marginx) > thiswinsize.w) {
				thisperc = thezoomh/thezoomw;
				thezoomw = thiswinsize.w - marginx;
				thezoomh = thezoomw * thisperc;
			}
			if ((eval(thezoomh) + marginy) > thiswinsize.h) {
				thisperc = thezoomw/thezoomh;
				thezoomh = thiswinsize.h - marginy;
				thezoomw = thezoomh * thisperc;
			}

			if (eval(thezoomw) < iw) {
				var displaysize = Math.round((eval(thezoomw)/iw) * 100);
			}
			else {
				var displaysize = 100;
			}
		}

		thezoomimg.style.width = thezoomw + "px";
		thezoomimg.style.height = thezoomh + "px";

		var thezoompos = window.wincenter({w:thezoomw,h:thezoomh});

		thezoomdiv.style.width = thezoomw + "px";
		thezoomdiv.style.height = thezoomh + "px";
		thezoomdiv.style.left = thezoompos.x + "px";
		thezoomdiv.style.top = thezoompos.y + "px";
		if (zoom != null) {
			var thiszoompos = window.wincenter({w:0,h:0});

			if ((eval(thezoomw) + marginx) > thiswinsize.w) {
				//thezoomdiv.style.left = "30px";
				thezoomdiv.style.left = (eval(thiszoompos.x) - (thiswinsize.w / 2) + 30) + "px";
			}

			if ((eval(thezoomh) + marginy) > thiswinsize.h) {
				//thezoomdiv.style.top = "30px";
				thezoomdiv.style.top = (eval(thiszoompos.y) - (thiswinsize.h / 2) + 30) + "px";
			}
		}

		if (eval(thiswinsize.w) > document.body.offsetWidth) {
			var thebgw = thiswinsize.w;
		}
		else {
			var thebgw = document.body.offsetWidth;
		}

		if (eval(thiswinsize.h) > document.body.offsetHeight) {
			var thebgh = thiswinsize.h;
		}
		else {
			var thebgh = document.body.offsetHeight;
		}

		if ((eval(thezoomw) + eval(thezoompos.x) + marginx) > eval(thebgw)) {
			thebgw = (eval(thezoomw) + eval(thezoompos.x) + marginx);
		}
		else if ((eval(thezoomw) + marginx) > eval(thebgw)) {
			thebgw = (eval(thezoomw) + marginx);
		}

		if ((eval(thezoomh) + eval(thezoompos.y) + marginy) > eval(thebgh)) {
			thebgh = (eval(thezoomh) + eval(thezoompos.y) + marginy);
		}
		else if ((eval(thezoomh) + marginy) > eval(thebgh)) {
			thebgh = (eval(thezoomh) + marginy);
		}

		thebgw = eval(thebgw) * 1.01;
		thebgh = eval(thebgh) * 1.01;

		thezoombg.style.width = thebgw + "px";
		thezoombg.style.height = thebgh + "px";

		thezoombg.style.display = "block";
		thezoomdiv.style.display = "block";

		if (thezoom100link && thezoomfitlink) {
			if (zoom == 100) {
				//thezoom100link.style.textDecoration = "underline";
				//thezoomfitlink.style.textDecoration = "none";
				thezoom100link.innerHTML = "<span class=\"selected\">100%</span>";
				thezoomfitlink.innerHTML = "<a href=\"javascript:lightbox_view_img('resize');\">fit to screen</a>";
			}
			else {
				//thezoom100link.style.textDecoration = "none";
				//thezoomfitlink.style.textDecoration = "underline";
				thezoom100link.innerHTML = "<a href=\"javascript:lightbox_view_img('resize',100);\">100%</a>";
				thezoomfitlink.innerHTML = "<span class=\"selected\">" + displaysize + "%</span>";
			}
		}

		if (action == "open") {
			zoomin1 = setTimeout("lightbox_view_img('in')", 0);
		}
		return;
	}
	else if (action == "close") {
		zoomout1 = setTimeout("lightbox_view_img('out')", 0);
		lb_noscroll = false;
		return;
	}
	else if (action == "in") {
		fade(thezoombg.id,0,90,.3,30);
		zoomin2 = setTimeout("fade('"+thezoomdiv.id+"',0,100,.3)", (300 * 1.1));
		return;
	}
	else if (action == "out") {
		fade(thezoomdiv.id,100,0,.2,30);
		zoomout2 = setTimeout("fade('"+thezoombg.id+"',90,0,.2)", 0);
		zoomout3 = setTimeout("lightbox_view_img()", (500 * 1.2));
		return;
	}
	else {
		thezoombg.style.display = "none";
		thezoomdiv.style.display = "none";
		setopacity(thezoombg,0);
		setopacity(thezoomdiv,0);
		thezoomimg.src = imgblank;
		reset_lightbox();
		reset_lightbox_slideshow();
		return;
	}
}


function lightbox_close_img() {
	lightbox_view_img('close');
}


function lightbox_scroll() {
	if (!lightbox_images[1]) {
		return;
	}

	if (lb_noscroll == false) {
		return;
	}
	else {
		var thisscroll = "window.scrollTo("+lb_noscroll+")";
		eval(thisscroll);
	}
}


function get_lightbox_sizes() {
	var thisimgclass = lb_imgclass;

	var getimgs = document.getElementsByTagName("a");
	for (var a=0; a<getimgs.length; a++) {
		if (getimgs[a].className.indexOf(thisimgclass) >= 0) {
			calc_lightbox_sizes(getimgs[a].href);
		}
	}
}


function calc_lightbox_sizes(imgsrc) {
	var thisimg = new Image();
	thisimg.onload = function(){
		all_lightbox_sizes[imgsrc] = thisimg.width + "x" + thisimg.height;
	};
	//thisimg.onerror = somefunction;
	thisimg.src = imgsrc;
}


function set_lightbox_events() {
	var initzoombg = document.getElementById(lb_zoombg_id);
	if (initzoombg) {
		if (initzoombg.addEventListener) {
			initzoombg.addEventListener("click", lightbox_close_img, true);
		}
		else if (initzoombg.attachEvent) {
			initzoombg.attachEvent("onclick", lightbox_close_img);
		}
	}

	var thisimgclass = lb_imgclass;

	var getimgs = document.getElementsByTagName("a");
	for (var a=0; a<getimgs.length; a++) {
		if (getimgs[a].className.indexOf(thisimgclass) >= 0) {
			if (getimgs[a].addEventListener) {
				getimgs[a].addEventListener("click", click_open_lightbox, true);
			}
			else if (getimgs[a].attachEvent) {
				getimgs[a].attachEvent("onclick", click_open_lightbox);
			}
		}
	}

	window.onresize = lightbox_close_img;
	window.onscroll = lightbox_scroll;
}


function click_open_lightbox(e) {
		var thistarget;
		if (!e) {
			var e = window.event;
		}
		if (e.target) {
			thistarget = e.target;
		}
		else if (e.srcElement) {
			thistarget = e.srcElement;
		}

		if (thistarget.nodeType == 3) { // defeat Safari bug when clicking text
			thistarget = thistarget.parentNode;
		}

	open_lightbox(thistarget);

	if (e) {
		try {
			e.stopPropagation();
			e.preventDefault();
		} catch (ex) {}
	}
	return false; // for IE
}


function getimgsize(imgsrc){
	if (!imgsrc) {
		return false;
	}

	var hassize = false;
	var thiscount = 0;
	while (hassize == false) {
		thiscount++;
		if (all_lightbox_sizes[imgsrc]) {
			var imgsize = all_lightbox_sizes[imgsrc].split("x");
			hassize = true;
			return {w: imgsize[0], h: imgsize[1]};
		}
		if (thiscount == 1000) { // timeout
			return false;
		}
	}
}


window.winsize = function() {
	var winw = 0;
	var winh = 0;

	if (!window.innerWidth) { // IE

		if (!(document.documentElement.clientWidth == 0)) { // strict mode
			winw = document.documentElement.clientWidth;
			winh = document.documentElement.clientHeight;
		}
		
		else {// quirks mode
			winw = document.body.clientWidth;
			winh = document.body.clientHeight;
		}
	}
	else { // W3C
		winw = window.innerWidth;
		winh = window.innerHeight;
	}

	var bodyw = document.body.offsetWidth;
	var bodyh = document.body.offsetHeight;
	var scrollbar = 15; // scrollbar w/h in pixels

	if (bodyh > winh) { // account for vertical scrollbar
		winw = (winw - scrollbar);
	}

	if (bodyw > winw) { // account for horizontal scrollbar
		winh = (winh - scrollbar);
	}

	return {w:winw,h:winh};
}

window.wincenter = function() {
	var whdiff = (arguments[0] != null) ? arguments[0] : {w:0,h:0};
	var winx = 0;
	var winy = 0;
	var offsetx = 0;
	var offsety = 0;

	var thisw = this.winsize().w - whdiff.w;
	if (thisw == 0) thisw = eval(thisw) + .001;
	var thish = this.winsize().h - whdiff.h;
	if (thish == 0) thish = eval(thish) + .001;

	if(!window.pageYOffset && !window.pageXOffset) {// IE, or both = 0
		if (!(document.documentElement.scrollTop == 0)) { // strict mode
			offsetx = document.documentElement.scrollLeft;
			offsety = document.documentElement.scrollTop;
		}
		else { // quirks mode
			offsetx = document.body.scrollLeft;
			offsety = document.body.scrollTop;
		}
	}
	else { // W3C
		offsetx = window.pageXOffset;
		offsety = window.pageYOffset;
	}

	winx = (thisw / 2) + offsetx;
	winy = (thish / 2) + offsety;
	return {x:winx,y:winy};
}


window.winscroll = function() {
	var offsetx = 0;
	var offsety = 0;

	if(!window.pageYOffset && !window.pageXOffset) {// IE, or both = 0
		if (!(document.documentElement.scrollTop == 0)) { // strict mode
			offsetx = document.documentElement.scrollLeft;
			offsety = document.documentElement.scrollTop;
		}
		else { // quirks mode
			offsetx = document.body.scrollLeft;
			offsety = document.body.scrollTop;
		}
	}
	else { // W3C
		offsetx = window.pageXOffset;
		offsety = window.pageYOffset;
	}

	return {x:offsetx,y:offsety};
}


function setopacity(thisdiv,percent,ignore) {
	thefadediv = document.getElementById(thisdiv);
	if (thefadediv) {
		thefadediv.style.opacity = (percent/101);
		thefadediv.style.MozOpacity = (percent/101);
		thefadediv.style.KhtmlOpacity = (percent/100);
		if (ignore != 'ignore_ie') thefadediv.style.filter = "alpha(opacity=" + percent + ")";
	}
}


function fade(thisdiv,start,end,dur,fps,ignore) {
	if (!fps) {
		fps = 15;
	}

	if (!ignore) {
		ignore = null;
	}

	if (!dur && fade_duration != null) {
		dur = fade_duration;
	}
	var fadesteps = Math.round(dur * fps);
	var fadestepdur = Math.round((dur * 1000) / fadesteps);

	if (fadesteps == 0 || fadestepdur == 0) { // gives minimal count for fade loop
		fadesteps = 1;
		fadestepdur = 1;
	}

	fadeopac = start;
	if (start < end) {
		var opacstep = ((end - start) / fadesteps);
		for(i=0; i<=fadesteps; i++) {
			setTimeout("setopacity('" + thisdiv + "'," + fadeopac + ",'" + ignore + "')",(i * fadestepdur));
			fadeopac = (i==(fadesteps-1)) ? end : (fadeopac + opacstep);
		}
	}
	else if (start > end) {
		var opacstep = ((start - end) / fadesteps);
		for(i=0; i<=fadesteps; i++) {
			setTimeout("setopacity('" + thisdiv + "'," + fadeopac + ",'" + ignore + "')",(i * fadestepdur));
			fadeopac = (i==(fadesteps-1)) ? end : (fadeopac - opacstep);
		}
	}
}


/* ------------------------------------------------------------- */

/*window.onload=function() {
	get_lightbox_sizes();
	set_lightbox_events();
}*/




