// -- Dr. Stefan Immel JavaScript Library based on Adobe GoLive JavaScript Library
// -- Menu and Slide Show Functions
// -----------------------------------------------------------------------------
function preloadImages() {
	if (document.images) {
		var menu_load = new Array();
		for (var i = 0 ; i < menu_nall; i++) {
			menu_load[i] = new Array();
			for (var j = 0 ; j < menu_ntot[i]; j++) {
				menu_load[i][j] = new Array();
				menu_load[i][j][0] = menu_imgload(menu_data[i][j][1]);
				menu_load[i][j][1] = menu_imgload(menu_data[i][j][2]);
			}
		}
		if (menu_nall > 1) {
			var slide_load = new Array();
			for (var i = 0 ; i < slide_ntot; i++) {
				slide_load[i] = menu_imgload(slide_data[i]);
			}
		}
		menu_imgpreloaded	= true;
	}
}
// -----------------------------------------------------------------------------
// Preload images
function menu_imgload(menu_imgname) {
	if (document.images) {
		menu_imgobj = new Image();
		menu_imgobj.src = menu_imgname;
		return menu_imgobj;
	}
}
// -----------------------------------------------------------------------------
// Call Adobe GoLive JavaScript Library for Browser Compatability
function imgexchange(imgname, imgfile) {
	if (document.images) {
//		document.images[imgname].src = imgfile;
		CSSetImageURL(new Array(CSSetImageURL, imgname, imgfile));
//		alert("imgexchange:\n" + "imgname: " + imgname + "\n" + "imgfile: " + imgfile + "\n");
	}
}

function imgexcblend(menu_imgname, menu_imgfile) {
	if (document.images) {
		if (browser_check() == "Internet Explorer") document.images[menu_imgname].filters.blendTrans.Apply();
		imgexchange(menu_imgname, menu_imgfile);
		if (browser_check() == "Internet Explorer") document.images[menu_imgname].filters.blendTrans.Play();
	}
}
// -----------------------------------------------------------------------------
function menu_activate(menu, item) {
	if (menu_imgpreloaded == true) {
		imgexchange(menu_data[menu][item][0], menu_data[menu][item][2]);
//		alert("menu activate:\n" + "imgname: " + menu_data[menu][item][0] + "\n" + "imgfile: " + menu_data[menu][item][2] + "\n");
	}
}
function menu_deactivate(menu, item) {
	if (menu_imgpreloaded == true && item != slide_active) {
		imgexchange(menu_data[menu][item][0], menu_data[menu][item][1]);
//		alert("menu deactivate:\n" + "imgname: " + menu_data[menu][item][0] + "\n" + "imgfile: " + menu_data[menu][item][1] + "\n");
	}
}
// -----------------------------------------------------------------------------
// Display a status bar (animated gif) until a image is loaded, then reset status bar again
// and replace image
menu_wait_sequence=null;
menu_wait_timer=25;
menu_wait_count=0;

function menu_imgwait(menu_imgname, menu_imgfile, menu_statusimgname, menu_statusimgon, menu_statusimgoff) {
	if (document.images) {
		imgwait = new Image();
		imgwait.src = menu_imgfile;
		if (! imgwait.complete) {
			if (menu_wait_sequence != null) clearInterval(menu_wait_sequence);
			menu_wait_count=0;
			menu_wait_sequence = setInterval("menu_statuswait('" + menu_statusimgname + "', '" + menu_statusimgon + "', '" + menu_statusimgoff + "', imgwait)",menu_wait_timer);
		} else {
			imgexchange(menu_statusimgname, menu_statusimgoff);
		}
		imgexcblend(menu_imgname, menu_imgfile);
	}
}

// Wait until image is loaded, then reset status bar
function menu_statuswait(menu_statusimgname, menu_statusimgon, menu_statusimgoff, menu_waitimg) {
	if (document.images && menu_wait_sequence != null) {
		menu_wait_count++;
		if (menu_waitimg.complete) {
			imgexchange(menu_statusimgname, menu_statusimgoff);
			clearInterval(menu_wait_sequence);
		} else if (menu_wait_count == 4) {
			imgexchange(menu_statusimgname, menu_statusimgon);			
		}
	}
}

// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// Slide show functions
// The slide numbers run from 1 ... slide_ntot with names 'slide_basname??.jpg'

function slide(slide_number) {
	var slide_previous=slide_active;
	if (slide_active > 0 && slide_active <= slide_ntot) menu_deactivate(0,slide_active);
	slide_active=slide_number;
	if (slide_active > slide_ntot)	slide_active = 1;
	if (slide_active <= 0)		slide_active = slide_ntot;
	if (slide_active < 10) {
		slide_file(slide_basname + "0" + slide_active + ".jpg");
	} else {
		slide_file(slide_basname       + slide_active + ".jpg");
	}
	if (slide_previous > 0 && slide_previous <= slide_ntot) menu_deactivate(0,slide_previous);
	if (slide_active > 0   && slide_active   <= slide_ntot) menu_activate(0,slide_active);
}

function slide_forward() {
	slide(slide_active+1);
}

function slide_reverse() {
	slide(slide_active-1);
}

// -----------------------------------------------------------------------------
// Slide show functions with addition menu options
// with images (var slide_imgname and array slide_data[0 ... slide_ntot-1])

function slide_show(slide_number) {
	slide_display(slide_number);
}

function slide_next() {
	slide_display(slide_active + 1);
}

function slide_back() {
	slide_display(slide_active - 1);
}

function slide_first() {
	slide_display(0);
}

function slide_last() {
	slide_display(slide_ntot - 1);
}

function slide_back() {
	slide_display(slide_active - 1);
}

function slide_stop() {
	layer_visibility(slide_layname, 0);
	slide_active = -1;
	slide_menu();
}

function slide_unhide() {
	layer_visibility(slide_layname, 1);
}

function slide_hide() {
	layer_visibility(slide_layname, 0);
}

function slide_file(imgfile) {
	imgexchange(slide_imgname, imgfile);
	layer_visibility(slide_layname, 1);
}

// Display a slide layer (var slide_layname) with images (var slide_imgname and array slide_data[0 ... slide_ntot-1])
function slide_display(slide_number) {
	slide_active = slide_number;
	if (slide_active >= slide_ntot)	slide_active = 0;
	if (slide_active < 0)		slide_active = slide_ntot-1;

	layer_visibility(slide_layname, 1);
	if (menu_nall > 1) {
		menu_imgwait(slide_imgname, slide_data[slide_active], slide_status, slide_status_load.src, slide_status_done.src);
		slide_menu();
	} else {
		imgexchange(slide_imgname, slide_data[slide_active]);
	}
}

function slide_menu() {
	for (var i = 0 ; i < menu_nall; i++) {
		for (var j = 0 ; j < slide_ntot; j++) {
			if (j == slide_active) {
				menu_activate(i,j);
			} else {
				menu_deactivate(i,j);
			}
		}
	}
}
// -----------------------------------------------------------------------------
// Slide show drag and drop - Extended Scripts by Matthias Adler

var drag_tolerance=3;
var drag_current_X,  drag_current_Y;
var drag_started_X, drag_started_Y;
var drag_done = false;
var dragging  = false;

function slide_drag_init(layer_name) {
	this.x = 0;
	this.y = 0;
	this.layerObj=document.getElementById(layer_name);
	if (IsIE()) {
		this.canDrag=true;
		this.layerObj.dragObj = this;
		document.onmousedown = mouse_down_IE;
		document.ondragstart = drag_start_IE;
		document.onmouseup   = drag_stop_IE;
		document.onmouseout  = drag_stop_IE;
	} else {
		this.layerObj=document.getElementById(layer_name);
		this.layerObj.addEventListener("mousedown", drag_start, true);
		this.layerObj.addEventListener("mouseup",   drag_stop,  true);
		this.layerObj.addEventListener("mouseout",  drag_stop,  true);
	}
}

function drag_start(ev) {
	ev.currentTarget.addEventListener("mousemove", drag_exec, true);
	drag_current_X=ev.clientX;
	drag_current_Y=ev.clientY;
	drag_started_X=ev.clientX;
	drag_started_Y=ev.clientY;
	dragging=true;
}

function drag_exec(ev) {
	var x, y;
	var style=ev.currentTarget.style;
	x=parseInt(style.left) + (ev.clientX-drag_current_X);
	y=parseInt(style.top)  + (ev.clientY-drag_current_Y);
	if (x < 0) x=0;
	if (y < 0) y=0;
	if (x > window.innerWidth-100  ) x=window.innerWidth-100;
	if (y > window.innerHeight-100 ) y=window.innerHeight-100;
	style.left = x + "px";
	style.top  = y + "px";
	drag_current_X=ev.clientX;
	drag_current_Y=ev.clientY;
}
function drag_stop(ev) {
	if (ev.target!=ev.currentTarget) {	
		ev.target.removeEventListener("mousedown", drag_start, true);
		ev.target.removeEventListener("mouseup",   drag_stop,  true);
	}
	ev.currentTarget.removeEventListener("mousemove",  drag_exec,  true);
	
	if (Math.abs(drag_current_X-drag_started_X) < drag_tolerance &&
	    Math.abs(drag_current_Y-drag_started_Y) < drag_tolerance) {
	  drag_done=false;
	} else {
	  drag_done=true;
	}
	dragging=false;
}

function drag_start_IE() {
	if(gCSIEDragObject != null && (gCSIEDragObject.tagName==event.srcElement.tagName))
		event.returnValue=false;
	dragging=true;
}

function drag_stop_IE() { 
	gCSIEDragObject=null; document.onmousemove=null; 

	if (Math.abs(window.event.clientX-drag_started_X) < drag_tolerance &&
	    Math.abs(window.event.clientY-drag_started_Y) < drag_tolerance) {
	  drag_done=false;
	} else {
	  drag_done=true;
	}
	dragging=false;
}

function mouse_down_IE () {
	if(event.button==1) {
		dragLayer = event.srcElement;
		while (dragLayer!=null)
			{
			if ((dragLayer.dragObj == null) && (dragLayer.tagName == "DIV"))
				break;
			if (dragLayer.dragObj != null)
				break;
			dragLayer=dragLayer.parentElement;
			}
			
		if (dragLayer == null) return;
		if (dragLayer.dragObj!=null && dragLayer.dragObj.canDrag) {
			gCSIEDragObject = dragLayer;
			gCSIEDragObject.dragObj.x=event.clientX;
			gCSIEDragObject.dragObj.y=event.clientY;
			document.onmousemove = CSIEMouseMove;
			
			drag_started_X=event.clientX;
			drag_started_Y=event.clientY;
		}
	}
}

// -----------------------------------------------------------------------------
// Check mouse position (IE and Opera only)
// (this is used to prevent the slide shows to advance
// if the image layer is dragged, NS4 doesn't do this anyway, NS6/7
// get confused on addtional document.onmouse... events ...)

mouse_tolerance=3;
mouse_position_x=0;
mouse_position_y=0;
mouse_moved_x=0;
mouse_moved_y=0;

function mouse_position() {
	if (browser_check() == "Internet Explorer" || browser_check() == "Opera") {
		mouse_position_x = window.event.clientX;
		mouse_position_y = window.event.clientY;
	}
//	window.status="mouse event: " +
//							mouse_position_x + " / " +
//							mouse_position_y;
}

function mouse_moved() {
	mouse_old_x = mouse_position_x;
	mouse_old_y = mouse_position_y;
	mouse_position();
	mouse_moved_x = mouse_position_x - mouse_old_x;
	mouse_moved_y = mouse_position_y - mouse_old_y;
//	window.status=window.status + " mouse moved: " +
//							mouse_moved_x + " / " +
//							mouse_moved_y;
}

function mouse_has_moved() {
	mouse_moved();
	if (Math.abs(mouse_moved_x) > mouse_tolerance ||
	    Math.abs(mouse_moved_y) > mouse_tolerance) {
		return true;
	} else {
		return false;
	}
}

// -----------------------------------------------------------------------------
// Layer Visibility
function layer_visibility(layer_name, layer_show) {
	CSShowHide(new Array("", layer_name, layer_show));
}

// -----------------------------------------------------------------------------
// Page Preview in Script Files

data_chapters = new Array("00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12", "13", "14", "15", "15-zusatz", "16", "17", "18", "20", "-A", "-B");
data_maxpages = new Array(  6,   37,   46,   43,   24,   48,   28,   41,   18,   14,   14,   80,   60,   36,   36,   54,   30,          20,   72,   44,  100,    3,   12);

function slide_nextpage (imgname, mode) {

	page_file = document.images[imgname].src;
	page_curr = -1;
	page_numb = 0;
	page_chap = "";

	if (page_file.indexOf("-page") > 0)    page_numb = page_file.substring(page_file.indexOf("-page")+5,page_file.indexOf("-page")+8).replace(/^00*/, "");
	if (page_file.indexOf("_kapitel") > 0 && 
	    page_file.indexOf("_kapitel") < page_file.indexOf("-page")) page_chap = page_file.substring(page_file.indexOf("_kapitel")+8,page_file.indexOf("-page"));

        page_nmax = 0;
	for (var i = 0 ; i < data_chapters.length; i++) {
		if (page_chap == data_chapters[i]) {
			page_nmax = data_maxpages[i];
			page_curr = i;
		}
	}
	if (page_numb == 0 || page_nmax == 0 || page_chap == "") {
		alert('Seitenvorschau und blättern nicht möglich!');
		return;
	}
// start of chapter or previous chapter
	if (mode == 0) {
		if (page_numb > 1) {
			page_numb = 1;
		} else if (page_curr == 0) {
			alert('Anfang des Skripts erreicht!');
			return;
		} else {
			page_chap=data_chapters[page_curr-1];
			page_numb = 1;
		}
	}
// previous page
	if (mode == 1) {
		if (page_numb > 1) {
			page_numb--;
		} else {
			alert('Anfang des Kapitels erreicht (S. 1)!');
			return;
		}
	}
// next page
	if (mode == 2) {
		if (page_numb < page_nmax) {
			page_numb++;
		} else {
			alert('Ende des Kapitels erreicht (S. ' + page_nmax + ')!');
			return;
		}
	}
// next chapter
	if (mode == 3) {
		if (page_curr < data_chapters.length-1) {
			page_numb = 1;
			page_chap=data_chapters[page_curr+1];
		} else {
			alert('Ende des Skripts erreicht!');
			return;
		}
	}

	if        (page_numb<10)  {
		page_next = page_file.substring(0,page_file.indexOf("_kapitel")+8) + page_chap + "-page00" + page_numb + ".jpg";
	} else if (page_numb<100) {
		page_next = page_file.substring(0,page_file.indexOf("_kapitel")+8) + page_chap + "-page0"  + page_numb + ".jpg";
	} else {
		page_next = page_file.substring(0,page_file.indexOf("_kapitel")+8) + page_chap + "-page"   + page_numb + ".jpg";
	}
	slide_file(page_next);
//	alert('File: ' + page_file + '\nPage: ' + page_numb + '\nChapter: ' + page_chap + '\nPageMax: ' + page_nmax + '\nPageNext: ' + page_next + '\n');

}
// -----------------------------------------------------------------------------
// -----------------------------------------------------------------------------
// Test browser
function browser_check() {
	if	  (navigator.appName == "Microsoft Internet Explorer" && navigator.userAgent.indexOf("Opera") <= 0) {
		return "Internet Explorer";
	} else if (navigator.appName == "Microsoft Internet Explorer" && navigator.userAgent.indexOf("Opera")  > 0) {
		return "Opera";
	} else if (navigator.appName == "Netscape") {
		return "Netscape";
	} else {
		return "Unknown";
	}
}

function browser_check_IE() { return window.navigator.userAgent.indexOf("MSIE") > 0;}

// -----------------------------------------------------------------------------
// EOF
