// records[gallery_id][x] = {image: image name, height: height, width: width, caption_id: div id, comments_id: div id}
var ImageGallery = {
	last_gal: null,
	last_img_id: null,
	div_prefix: 'ImageGallery',
	default_comments_width: 200,
	records: {},
	index: {},
	pre_load_image_obj: null,
	temp_image: null,
	intervals: [],
	initialized: false,
	auto_load_sec: 0,
	auto_load_interval: null,
	page_scrolled: function() {
	  var X = 0; var Y = 0;
	  if( typeof( window.pageYOffset ) == "number" ) {
	    Y = window.pageYOffset;
	    X = window.pageXOffset;
	  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
	    Y = document.body.scrollTop;
	    X = document.body.scrollLeft;
	  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
	    Y = document.documentElement.scrollTop;
	    X = document.documentElement.scrollLeft;
	  }
	  return {"x": 0+X ,"y": 0+Y};
	},
	inner_height: function() {
		if (window && (typeof(window.innerWidth)=="number") && window.innerHeight) {
			return window.innerHeight;
		} else if (document.documentElement && document.documentElement.clientHeight) {
			return document.documentElement.clientHeight;
		} else if (document.body && document.body.clientHeight) {
			return document.body.clientHeight;
		}
		return document.getElementById("body").offsetHeight;
	},
	inner_width: function() {
		if (window && (typeof(window.innerWidth)=="number") && window.innerWidth) {
			return window.innerWidth;
		} else if (document.documentElement && document.documentElement.clientWidth) {
			return document.documentElement.clientWidth;
		} else if (document.body && document.body.clientWidth) {
			return document.body.clientWidth;
		}
		return document.getElementById("body").offsetWidth;
	},
	add: function(gallery_id, img_id, record) {
		var gal = ImageGallery.records[gallery_id];
		if (!gal) {
			ImageGallery.records[gallery_id]=[];
			ImageGallery.index[gallery_id]={};
		}
		record['img_id']=img_id;
		var old_len = ImageGallery.records[gallery_id].length;
		ImageGallery.records[gallery_id].push(record);
		ImageGallery.index[gallery_id][img_id] = old_len;
	},
	init: function() {
	  ImageGallery.i = document.getElementById(ImageGallery.div_prefix + "_Image");
	  ImageGallery.d = document.getElementById(ImageGallery.div_prefix + "_Layer");
	  ImageGallery.b = document.getElementById(ImageGallery.div_prefix + "_Background");
  	ImageGallery.bdy = document.getElementById("body");
		ImageGallery.nav = document.getElementById(ImageGallery.div_prefix + "_Nav");
		ImageGallery.cap = document.getElementById(ImageGallery.div_prefix + "_ImageCaption");
		if (ImageGallery.auto_load_sec > 0) {
			ImageGallery.auto_load_interval = window.setInterval("ImageGallery.next()",ImageGallery.auto_load_sec*1000);
		}
	  ImageGallery.initialized=true;
	},
	view: function(gallery_id) {
		if (!ImageGallery.initialized) ImageGallery.init();
		if (ImageGallery.records[gallery_id].length==0) return;
		
		var last_idx = null;
		var last_record = null;
		if (ImageGallery.last_gal && ImageGallery.last_img_id) {
			var last_idx = ImageGallery.index[ImageGallery.last_gal][ImageGallery.last_img_id];
			if (!(last_idx===null)) last_record = ImageGallery.records[ImageGallery.last_gal][last_idx];
		}
		
		var img_id = ImageGallery.records[gallery_id][0]['img_id'];
		if (arguments.length > 1) img_id = arguments[1];
		// vorübergehend "Loading"
	  ImageGallery.i.src = ImageGallery.pre_load_image_obj.src;
	  var gal_changed = (ImageGallery.last_gal != gallery_id);
		var sw = ImageGallery.inner_width();
		var sh = ImageGallery.inner_height();
		var scrolled = ImageGallery.page_scrolled();
		// display background
	  if (ImageGallery.b.style.display == "none") {
	  	if (sw > ImageGallery.bdy.offsetWidth) ImageGallery.b.style.width = sw + "px";
			else ImageGallery.b.style.width = ImageGallery.bdy.offsetWidth + "px";
		  if (sh > ImageGallery.bdy.offsetHeight) ImageGallery.b.style.height = sh + "px";
		  else ImageGallery.b.style.height = ImageGallery.bdy.offsetHeight + "px";
			ImageGallery.b.style.display="";
		}
		ImageGallery.d.style.display="";
		var idx = ImageGallery.index[gallery_id][img_id];
		var record = ImageGallery.records[gallery_id][idx];
		if (record['caption_id']) {
			var caption = document.getElementById(record['caption_id']);
			if (caption) {
				ImageGallery.cap.innerHTML = caption.innerHTML;
				ImageGallery.cap.style.display = "";
				ImageGallery.cap.maxWidth = record['width'] + 'px';
				if (ImageGallery.cap.innerHTML == "")
					ImageGallery.nav.style.marginTop = '32px';
			} else {
				ImageGallery.cap.style.display = "none";
			}
		} else {
			ImageGallery.cap.style.display = "none";
			ImageGallery.nav.style.marginTop = '32px';
		}
		var comments = null;
		// hide last comments
		if (last_record && last_record['comments_id']) {
			var last_comments = document.getElementById(last_record['comments_id']);
			if (last_comments) last_comments.style.display = "none";
		}
		if (record['comments_id']) {
			var comments = document.getElementById(record['comments_id']);
			if (comments) {
				comments.style.width = ImageGallery.default_comments_width + 'px';
				comments.style.height = sh + 'px';
				comments.style.left = (sw - ImageGallery.default_comments_width) + 'px';
				comments.style.display = "";
			}
		}
		ImageGallery.nav.style.width = record['width'] + 'px';
		ImageGallery.i.display = "none";
	  ImageGallery.i.src = 'files/' + record['image'];
	  ImageGallery.i.style.width = record['width'] + 'px';
	  ImageGallery.i.style.height = record['height'] + 'px';
		ImageGallery.i.display = "";
	  ImageGallery.d.style.top = (scrolled.y + Math.round(((sh - ImageGallery.d.offsetHeight)/2))) + "px";
		if (comments)
	  	ImageGallery.d.style.left = (scrolled.x + Math.round(((sw - record['width'] - ImageGallery.default_comments_width)/2))) + "px";
	  else
	  	ImageGallery.d.style.left = (scrolled.x + Math.round(((sw - record['width'])/2))) + "px";
	  ImageGallery.last_gal = gallery_id;
	  ImageGallery.last_img_id = img_id;
	},
	stop_auto_load: function() {
		if (ImageGallery.auto_load_interval) {
			window.clearInterval(ImageGallery.auto_load_interval);
			ImageGallery.auto_load_interval = null;
		}
	},
	close: function() {
		ImageGallery.stop_auto_load();
		var last_idx = null;
		var last_record = null;
		if (ImageGallery.last_gal && ImageGallery.last_img_id) {
			var last_idx = ImageGallery.index[ImageGallery.last_gal][ImageGallery.last_img_id];
			if (!(last_idx===null)) last_record = ImageGallery.records[ImageGallery.last_gal][last_idx];
		}
		if (last_record && last_record['comments_id']) {
			var last_comments = document.getElementById(last_record['comments_id']);
			if (last_comments) last_comments.style.display = "none";
		}
		document.getElementById(ImageGallery.div_prefix + "_ImageCaption").style.display="none";
		document.getElementById(ImageGallery.div_prefix + "_Layer").style.display="none";
		document.getElementById(ImageGallery.div_prefix + "_Background").style.display="none";
		ImageGallery.initialized = false;
	},
	next_img_id: function() {
		if (ImageGallery.last_gal) {
			if (ImageGallery.last_img_id) {
				var idx = 1 + ImageGallery.index[ImageGallery.last_gal][ImageGallery.last_img_id];
				if (idx < ImageGallery.records[ImageGallery.last_gal].length)
					return ImageGallery.records[ImageGallery.last_gal][0 + idx]['img_id'];
			}
			return ImageGallery.records[ImageGallery.last_gal][0]['img_id'];
		}
		return null;
	},
	prev_img_id: function() {
		if (ImageGallery.last_gal)
			if (ImageGallery.last_img_id) {
				var idx = ImageGallery.index[ImageGallery.last_gal][ImageGallery.last_img_id] - 1;
				if (idx >= 0)
					return ImageGallery.records[ImageGallery.last_gal][0 + idx]['img_id'];
			}
			return ImageGallery.records[ImageGallery.last_gal][ImageGallery.records[ImageGallery.last_gal].length-1]['img_id'];
		return null;
	},
	prev: function() {
		ImageGallery.view(ImageGallery.last_gal,ImageGallery.prev_img_id());
		ImageGallery.preload(ImageGallery.last_gal,ImageGallery.prev_img_id());
	},
	next: function() {
		ImageGallery.view(ImageGallery.last_gal,ImageGallery.next_img_id());
		ImageGallery.preload(ImageGallery.last_gal,ImageGallery.next_img_id());
	},
	preload: function(gallery_id,img_id) {
		var idx = ImageGallery.index[ImageGallery.last_gal][ImageGallery.last_img_id];
		var record = ImageGallery.records[gallery_id][idx];
		var i = ImageGallery.intervals.length;
		ImageGallery.intervals.push(window.setInterval("ImageGallery.preload_now('files/"+record['image']+"',"+i+")",150));
	},
	preload_now: function(datei,i) {
		ImageGallery.temp_image = new Image();
		ImageGallery.temp_image.src = datei;
		window.clearInterval(ImageGallery.intervals[i]);
	}
}
// preload
ImageGallery.pre_load_image_obj = new Image();
ImageGallery.pre_load_image_obj.src = "files/image_gallery_loading.gif";
