/*
===================================
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED.  IN NO EVENT SHALL THE PRODUCER OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
THE PRODUCER:
Andreas Imhof
EDV-Dienstleistungen
CH-Guemligen, Switzerland
www.aiedv.ch

Version: 5.1
Version date: 20080413
===================================
*/
//alert("window:"+ this.name + "\n" + parent.objectswin.document.getElementsByName('page_parms')[0].value);
var paper_border_color = "#DDDDDD";

var flipp_width_screenfactor = 0.33;	// max width of a page from window width - left thumbnails frame - scrollbar width
var flip_max_pagewidth_allowed = 500;	// page should never be larger than this in pixels or zero to allow any size
var flip_min_pagewidth_allowed = 70;	// page should never be smaller than this in pixels or zero to allow any size
var flip_page_quality = 100;				// the JPEG quality: 0-100, the higher the larger page image files with better quality

/************
var page_parms = parent.objectswin.document.getElementsByName('page_parms')[0].value;
if (page_parms != "") {
	var page_parms_arr = page_parms.split(",");
	flip_min_pagewidth_allowed = parseInt(page_parms_arr[0]);
	if (page_parms_arr.length > 1) flip_max_pagewidth_allowed = parseInt(page_parms_arr[1]);
	if (page_parms_arr.length > 2) flip_page_quality = parseInt(page_parms_arr[2]);
}
**************/
var flip_max_pagewidth = flip_max_pagewidth_allowed;
var flip_original_pagewidth = 0;		// the width of the original page jpeg
var flip_original_pageheight = 0;		// the height of the original page jpeg
var scrollbars_width = 30;

var stop_preload_pageimages = false;
var doing_preload_pageimages = false;


var page_flip_show_speed = 1.1;
var page_flip_hide_speed = 0.96;
var epaper_page_width = 0;
var epaper_page_height = 0;
var invalid_page = "-1";

// dimension of edge images
var general_edge_image = 54;
var edge_tr_width = general_edge_image;
var edge_tr_height = general_edge_image;
var edge_br_width = general_edge_image;
var edge_br_height = general_edge_image;
var edge_tl_width = general_edge_image;
var edge_tl_height = general_edge_image;
var edge_bl_width = general_edge_image;
var edge_bl_height = general_edge_image;

var page_left = 0;
var page_top = 0;
var page_bottom = 0;
var page_right = 0;

var page_is_flipping = false;
var	flippboock_load_state = 0;		// 0 = nothing loaded
									// 1 = init_flippbook1 is done
									// 2 = init_flippbook2 is done
									// 3 = preloading images is done



/* the 4-dimensional array containing info about the pages to load
	[x][0] == "URL to Page JPEG"
	[x][1] == PageNumber
	[x][2] == "layoutID"
	[x][3] == num physical page in layout
	[x][4] == page section in layout
*/
var epaper_pages = null;
var num_epaper_pages = 0;
var page_images = null;

var the_page_pdf_to_show = "";

/* *****************************************************
   Return the number of pixels from left of a requested object 
   to the <Body> tag
   ****************************************************/
function getLeftPos(obj,intern) {
// let's get the distance of all elements from outer frame to parent's outer frame
// Firefox gets offsetTop returns pixels from the inner (inside  frame) position of the parent element to the outer frame of requested element: we must ad the frame width
// SAFARI  gets offsetTop returns pixels from the outer (outside frame) position of the parent element to the outer frame of requested element
var show_info = false;
var info = obj.id + " intern: " + intern + "<br>\n";
	var is_safari = (navigator.userAgent.toUpperCase().indexOf("SAFARI") > -1);
	var xPos = 0;
	if ( (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1)
		&& (navigator.userAgent.toUpperCase().indexOf(" MAC") > -1) )  {	// for Explorer Mac
		if (isNaN(obj.clientLeft) == false) xPos = parseInt(obj.clientLeft);
	}
	else xPos = parseInt(obj.offsetLeft);
		if (!is_safari) { var parentEl = obj.offsetParent; if ( (parentEl != null) && (!isNaN(parseInt(parentEl.style.borderLeftWidth))) ) xPos += parseInt(parentEl.style.borderLeftWidth); }
info += obj.id + ".offsetLeft: " + xPos + "<br>\n";

	var tempEl = obj.offsetParent;
	while (tempEl != null) {
		xPos += parseInt(tempEl.offsetLeft);
		if (!is_safari) { var parentEl = tempEl.offsetParent; if ( (parentEl != null) && (!isNaN(parseInt(parentEl.style.borderLeftWidth))) ) xPos += parseInt(parentEl.style.borderLeftWidth); }
info += tempEl.id + ".offsetLeft: " + xPos + "<br>\n";

		tempEl = tempEl.offsetParent;
	}

	if (intern) xPos += parseInt(obj.style.borderLeftWidth);
info += "realLeft: " + xPos;
if (show_info) document.getElementById('info1').innerHTML = info;
	return xPos;
}

function getRightPos(obj,intern) {
	var pos = getLeftPos(obj,intern) + parseInt(obj.offsetWidth);
	if (intern) pos = pos - parseInt(obj.style.borderLeftWidth) - parseInt(obj.style.borderRightWidth);
//document.getElementById('info2').innerHTML = ofs_left + " " + obj_width + " realRight: " + pos;
	return pos;
}

/* *****************************************************
   Return the number of pixels from top of a requested object 
   to the <Body> tag
   ****************************************************/
function getTopPos(obj,intern) {
// let's get the distance of all elements from outer frame to parent's outer frame
// Firefox gets offsetTop returns pixels from the inner (inside  frame) position of the parent element to the outer frame of requested element: we must ad the frame width
// SAFARI  gets offsetTop returns pixels from the outer (outside frame) position of the parent element to the outer frame of requested element
var show_info = false;
var info = obj.id + " intern: " + intern + "<br>\n";
	var is_safari = (navigator.userAgent.toUpperCase().indexOf("SAFARI") > -1);
	var yPos = 0;
	if ( (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1)
		&& (navigator.userAgent.toUpperCase().indexOf(" MAC") > -1) )  {	// for Explorer Mac
		if (isNaN(obj.clientTop) == false) yPos = parseInt(obj.clientTop);
	}
	else yPos = parseInt(obj.offsetTop);
		if (!is_safari) { var parentEl = obj.offsetParent; if ( (parentEl != null) && (!isNaN(parseInt(parentEl.style.borderTopWidth))) ) yPos += parseInt(parentEl.style.borderTopWidth); }
info += obj.id + ".offsetTop: " + yPos + "<br>\n";

	var tempEl = obj.offsetParent;
	while (tempEl != null) {
		yPos += parseInt(tempEl.offsetTop);
		if (!is_safari) { var parentEl = tempEl.offsetParent; if ( (parentEl != null) && (!isNaN(parseInt(parentEl.style.borderTopWidth))) ) yPos += parseInt(parentEl.style.borderTopWidth); }
info += tempEl.id + ".offsetTop: " + yPos + "<br>\n";

		tempEl = tempEl.offsetParent;
	}

	if (intern) yPos += parseInt(obj.style.borderTopWidth);
info += "realTop: " + yPos;
if (show_info) document.getElementById('info1').innerHTML = info;
	return yPos;
}

function getBottomPos(obj,intern) {
	var pos = getTopPos(obj,intern) + parseInt(obj.offsetHeight);
	if (intern) pos = pos - parseInt(obj.style.borderTopWidth) - parseInt(obj.style.borderBottomWidth);
//document.getElementById('info2').innerHTML = "realBottom: " + pos;
	return pos;
}




function size_edge(event,obj){
	var div_x; var div_y; var mozz = true;
	if (event.pageY) { my=event.pageY; mx=event.pageX; }
	else {	// Explorer
		my=event.offsetY; mx=event.offsetX;
		mozz = false;
	}
	if (mozz) {
		div_x = mx - getLeftPos(document.getElementById(obj.id + "_cont"));
		div_y = my - getTopPos(document.getElementById(obj.id + "_cont"));
	}
	else {
		do {
			if (obj.id.indexOf("_tr") > 0) {
				div_x = mx + parseInt(document.getElementById(obj.id + "_cont").offsetWidth) - parseInt(document.getElementById(obj.id).offsetWidth);
				div_y = my;
				break;
			}
			if (obj.id.indexOf("_br") > 0) {
				div_x = mx + parseInt(document.getElementById(obj.id + "_cont").offsetWidth) - parseInt(document.getElementById(obj.id).offsetWidth);
				div_y = my + parseInt(document.getElementById(obj.id + "_cont").offsetHeight) - parseInt(document.getElementById(obj.id).offsetHeight);
				break;
			}
			if (obj.id.indexOf("_tl") > 0) {
				div_x = mx + parseInt(document.getElementById(obj.id).offsetLeft);
				div_y = my;
				break;
			}
			if (obj.id.indexOf("_bl") > 0) {
				div_x = mx + parseInt(document.getElementById(obj.id).offsetLeft);
				div_y = my + parseInt(document.getElementById(obj.id + "_cont").offsetHeight) - parseInt(document.getElementById(obj.id).offsetHeight);
				break;
			}
		} while (false);
	}
/*
	document.getElementById('info1').innerHTML = "in IMG '" + obj.id + "<br>"
		+ "_cont at: " + getLeftPos(document.getElementById(obj.id + "_cont")) + "/" + getTopPos(document.getElementById(obj.id + "_cont")) + "<br>"
		+ "mouse X/Y: " + mx + "/" + my + "<br>"
		+ "in _cont: " + div_x + "/" + div_y + "<br>"
		;
*/
	var which_edge = "edge";	
	var which_page = "";	
	// size the edge image
	var factor = 1.4;
	var new_img_width = 0;
	var new_img_height = 0;
	var max_img_width = 0;
	var max_img_height = 0;

	var img_width = parseInt(document.getElementById(obj.id).offsetWidth);
	var img_height = parseInt(document.getElementById(obj.id).offsetHeight);
	do {
		var mouse_offset = 2;
		if (obj.id.indexOf("_tr") > 0) {
			which_edge += "_tr"; which_page = get_visible_pageID("pageR_1");
			new_img_width = parseInt(factor*(edge_tr_width - div_x)) + mouse_offset;
			new_img_height = parseInt(factor*div_y) + mouse_offset;
			max_img_width = edge_tr_width; max_img_height = edge_tr_height;
			break;
		}
		if (obj.id.indexOf("_tl") > 0) {
			which_edge += "_tl"; which_page = get_visible_pageID("pageL_1");
			new_img_width = parseInt(factor*div_x) + mouse_offset;
			new_img_height = parseInt(factor*div_y) + mouse_offset;
			max_img_width = edge_tl_width; max_img_height = edge_tl_height;
			break;
		}
		if (obj.id.indexOf("_br") > 0) {
			which_edge += "_br"; which_page = get_visible_pageID("pageR_1");
			new_img_width = parseInt(factor*(edge_tr_width - div_x)) + mouse_offset;
			new_img_height = parseInt(factor*(edge_tr_height - div_y)) + mouse_offset;
			max_img_width = edge_br_width; max_img_height = edge_br_height;
			break;
		}
		if (obj.id.indexOf("_bl") > 0) {
			which_edge += "_bl"; which_page = get_visible_pageID("pageL_1");
			new_img_width = parseInt(factor*div_x) + mouse_offset;
			new_img_height = parseInt(factor*(edge_bl_height - div_y)) + mouse_offset;
			max_img_width = edge_bl_width; max_img_height = edge_bl_height;
			break;
		}
	} while(false);

	if ( (new_img_width > max_img_width) || (new_img_height > max_img_height) ) {
		invisible_edge(event,document.getElementById(which_edge + '_img_cont'));
		position_edge(which_edge,which_page);
		return null;
	}


	// size the folding edge
	if (new_img_width < 10) new_img_width = 10;
	if (new_img_height < 10) new_img_height = 10;
	document.getElementById(obj.id).style.width = new_img_width + "px";
	document.getElementById(obj.id).style.height = new_img_height + "px";

	// for debugging purposes only
	/*
	document.getElementById('info3').innerHTML = "in IMG '" + obj.id + "': " + div_x + "/" + div_y;
	document.getElementById('info4').innerHTML = "image size to set: " + new_img_width + " / " + new_img_height;

	document.getElementById('info5').innerHTML = "ePaper top/right: " + page_top + " / " + page_right + "\n    ePaper left/bottom: " + page_left + " / " + page_bottom;

	if (mozz) document.getElementById('info1').innerHTML = "onscreen Mozzilla: " + mx + "/" + my;
	else document.getElementById('info1').innerHTML = "onscreen Explorer: " + mx + "/" + my;
	document.getElementById('info3').innerHTML = "image size: " + img_width + " / " + img_height;
	*/
	return null;
}


function hide_all_edges(){
	invisible_edge(null,document.getElementById('edge_tr'));
	invisible_edge(null,document.getElementById('edge_tr_img_cont'));

	invisible_edge(null,document.getElementById('edge_tl'));
	invisible_edge(null,document.getElementById('edge_tl_img_cont'));

	invisible_edge(null,document.getElementById('edge_br'));
	invisible_edge(null,document.getElementById('edge_br_img_cont'));

	invisible_edge(null,document.getElementById('edge_bl'));
	invisible_edge(null,document.getElementById('edge_bl_img_cont'));
	return;
}
function invisible_edge(e,obj){
	document.getElementById(obj.id).style.visibility = 'hidden';
	document.getElementById(obj.id).style.top = '-1000px';
	document.getElementById(obj.id).style.left = '-1000px';
	return;
}

function position_edge(edgeID,topageID,recall_cntr){
	if (hiding_page) return;
	var where = "";
	var vispageID = "";
	do {
		if (edgeID.indexOf("_tr") > 0) {
			vispageID = get_visible_pageID('pageR_0');
			if ( (document.getElementById(vispageID).getAttribute('title',true) == "" )
				|| (document.getElementById(vispageID).getAttribute('title',true) == invalid_page) ) return null;
			where = 'tr';
			break;
		}
		if (edgeID.indexOf("_br") > 0) {
			vispageID = get_visible_pageID('pageR_0');
			if ( (document.getElementById(vispageID).getAttribute('title',true) == "" )
				|| (document.getElementById(vispageID).getAttribute('title',true) == invalid_page) ) return null;
			where = 'br';
			break;
		}
		if (edgeID.indexOf("_tl") > 0) {
			vispageID = get_visible_pageID('pageL_0');
			if ( (document.getElementById(vispageID).getAttribute('title',true) == "" )
				|| (document.getElementById(vispageID).getAttribute('title',true) == invalid_page) ) return null;
			where = 'tl';
			break;
		}
		if (edgeID.indexOf("_bl") > 0) {
			vispageID = get_visible_pageID('pageL_0');
			if ( (document.getElementById(vispageID).getAttribute('title',true) == "" )
				|| (document.getElementById(vispageID).getAttribute('title',true) == invalid_page) ) return null;
			where = 'bl';
			break;
		}
	} while(false);
	if (where == "") return null;
	// get target position of epaper page
	var the_page_img = document.getElementById(topageID);
	try {
		if ( ((!the_page_img.complete)&&(the_page_img.width > 0)) && (recall_cntr < 1000)) {
			recall_cntr++;
			setTimeout("position_edge(\"" + edgeID + "\",\"" +topageID + "\"," + recall_cntr + ")", 100);
			return;
		}
	}
	catch (e) {
		if (recall_cntr < 1000) recall_cntr++;
		else return;
		setTimeout("position_edge(\"" + edgeID + "\",\"" +topageID + "\"," + recall_cntr + ")", 100);
		return;
	}

	// position to top/right edge on epaper page image
	var edgeobj = document.getElementById(edgeID);
	if (edgeID.indexOf("_cont") >= 0) {	// set minimum size of flipping edge image
		var flip_edge_id = edgeID.substr(0,edgeID.indexOf("_cont"));
		var flip_edge_obj = document.getElementById(flip_edge_id);
//		document.getElementById('info').innerHTML = "edgeobj.id: " + edgeID +"<br>" + "flip_edge_id: " + flip_edge_id;
		flip_edge_obj.style.width = 15 + "px";
		flip_edge_obj.style.height = 15 + "px";
	}
	switch (where) {
		case 'tr':
			edgeobj.style.top = parseInt(document.getElementById(vispageID).style.borderTopWidth) + "px";
			edgeobj.style.left = (document.getElementById(vispageID).offsetWidth - parseInt(document.getElementById(vispageID).style.borderRightWidth) - parseInt(edgeobj.offsetWidth)) + "px";
			edgeobj.style.visibility = 'visible';
			break;
		case 'tl':
			edgeobj.style.top = parseInt(document.getElementById(vispageID).style.borderTopWidth) + "px";
			edgeobj.style.left = parseInt(document.getElementById(vispageID).style.borderLeftWidth) + "px";
			edgeobj.style.visibility = 'visible';
			break;
		case 'br':
			edgeobj.style.top = (document.getElementById(vispageID).offsetHeight - parseInt(document.getElementById(vispageID).style.borderBottomWidth) - parseInt(edgeobj.offsetHeight)) + "px";
			edgeobj.style.left = (document.getElementById(vispageID).offsetWidth - parseInt(document.getElementById(vispageID).style.borderRightWidth) - parseInt(edgeobj.offsetWidth)) + "px";
			edgeobj.style.visibility = 'visible';
			break;
		case 'bl':
			edgeobj.style.top = (document.getElementById(vispageID).offsetHeight - parseInt(document.getElementById(vispageID).style.borderBottomWidth) - parseInt(edgeobj.offsetHeight)) + "px";
			edgeobj.style.left = parseInt(document.getElementById(vispageID).style.borderLeftWidth) + "px";
			edgeobj.style.visibility = 'visible';
			break;
	}
	return;
}


function get_visible_pageID(pageID) {
	var second_pageID = pageID.substr(0,pageID.length-1);
	if (pageID.charAt(pageID.length-1) == "0") second_pageID += "1";
	else second_pageID += "0";

	var zIdx_1 = document.getElementById(pageID).style.zIndex;
	var zIdx_2 = document.getElementById(second_pageID).style.zIndex;
	if (zIdx_1 > zIdx_2) return pageID;
	return second_pageID;
}


function get_invisible_pageID(pageID) {
	var second_pageID = pageID.substr(0,pageID.length-1);
	if (pageID.charAt(pageID.length-1) == "0") second_pageID += "1";
	else second_pageID += "0";

	var zIdx_1 = document.getElementById(pageID).style.zIndex;
	var zIdx_2 = document.getElementById(second_pageID).style.zIndex;
	if (zIdx_1 < zIdx_2) return pageID;
	return second_pageID;
}


function swap_visible_pageID(the_visible_pageID,set_full_width) {

	var new_visible_pageID = the_visible_pageID.substr(0,the_visible_pageID.length-1);
	if (the_visible_pageID.charAt(the_visible_pageID.length-1) == "0") new_visible_pageID += "1";
	else new_visible_pageID += "0";

	// set new z-index'es: swap them, bring back page to front
	var stored_z_index = document.getElementById(the_visible_pageID).style.zIndex;
	document.getElementById(the_visible_pageID).style.zIndex = document.getElementById(new_visible_pageID).style.zIndex;
	document.getElementById(new_visible_pageID).style.zIndex = stored_z_index;

	// we must re-enable the page moved into back
	if (set_full_width) {
		document.getElementById(the_visible_pageID).style.width = document.getElementById(new_visible_pageID).style.width;
		document.getElementById(the_visible_pageID).style.borderWidth = "1px";
	}
	else {
		document.getElementById(the_visible_pageID).style.width = "0px";
		document.getElementById(the_visible_pageID).style.borderWidth = "1px";
	}
/*
document.getElementById('infoU').innerHTML = 
	"the_visible_pageID / z_index: '" + the_visible_pageID + "': " + document.getElementById(the_visible_pageID).style.zIndex + "<br>"
	+ "new_visible_pageID / z_index: '" + new_visible_pageID + "': " + document.getElementById(new_visible_pageID).style.zIndex;
*/
	return new_visible_pageID;
}


function show_page(pageID,speed,step) {	// slide open a page
	if (pageID == null) return;
	var my_speed = speed;
	if (my_speed <= 0) my_speed = page_flip_show_speed;
	if (my_speed <= 1) my_speed = 1.15;
	var the_page = document.getElementById(pageID);
	// are we opening a left or right page?
	var open_side = (pageID.indexOf("R_") > 0) ? 'right' : 'left';

	if (parseInt(the_page.style.width) < 5) the_page.style.width = "5px";	// start with a minimum
	the_page.style.visibility = 'visible';

	var new_width = parseInt(parseInt(the_page.style.width) * my_speed);
	if ( new_width < (epaper_page_width - 5) ) {
		var my_step = 0;
		if (step) my_step = step;
		var opacity = 40+(my_step*10);
		if (opacity > 100) opacity = 100;
		the_page.style.opacity = opacity/100;
		the_page.style.filter = "alpha(opacity=" + opacity + ")";

		the_page.style.height = the_page.style.height;
		the_page.style.width = new_width + "px";
		var new_speed = my_speed*my_speed;
		if (new_speed > 1.7) new_speed = 1.7;
		setTimeout("show_page(\"" + pageID + "\"," + new_speed + "," + (++my_step) + ")", 10);
//		document.getElementById('info2').innerHTML = "show my_step: " + my_step + " speed: " + new_speed;
		return;
	}
	else {	// completely show page image
		the_page.style.height = the_page.style.height;
		the_page.style.width = epaper_page_width + "px";
		the_page.style.borderWidth = "1px";
		the_page.style.opacity = 1.0;
		the_page.style.filter = "alpha(opacity=100)";

		// and now set the flipp edges
		if (open_side == 'right')  {
/*
document.getElementById('info4').innerHTML = "Rigth page / z_index: '" + pageID + "': " + document.getElementById(pageID).style.zIndex
	+ ", visible: '" + get_visible_pageID(pageID)+ "' invisible: '" + get_invisible_pageID(pageID) + "'";
document.getElementById('info5').innerHTML = "Left page / z_index pageL_1: " + document.getElementById('pageL_1').style.zIndex + "<br>"
	+ "Left page / z_index pageL_0: " + document.getElementById('pageL_0').style.zIndex;
*/
			position_edge('edge_tr', pageID);
			position_edge('edge_br', pageID);
		}
		else {
/*
document.getElementById('info4').innerHTML = "Left page / z_index: '" + pageID + "': " + document.getElementById(pageID).style.zIndex
	+ ", visible: '" + get_visible_pageID(pageID)+ "' invisible: '" + get_invisible_pageID(pageID) + "'";
document.getElementById('info5').innerHTML = "Right page / z_index pageR_1: " + document.getElementById('pageR_1').style.zIndex + "<br>"
	+ "Left page / z_index pageR_0: " + document.getElementById('pageR_0').style.zIndex;
*/
			position_edge('edge_tl', pageID);
			position_edge('edge_bl', pageID);
		}
		page_is_flipping = false;
	}
	return;
}


var hiding_page = false;
function hide_page(pageID,speed,loadpage,step) {	// hide a page
	if (pageID == null) return;
	hiding_page = true;

	if (!step || (step <= 0) ) {
		hide_floater(1);
		hide_all_edges();
	}
	var my_speed = speed;
	if (my_speed >= 1.0) my_speed = 0.96;
	if (my_speed <= 0) my_speed = page_flip_hide_speed;
	var onback_pageID = "";
	var following_page_num = 0;
	var onback_page_num = 0;
	var the_page = document.getElementById(pageID);
	// are we hiding a left or right page?
	var flipping_page_num = 0;
	var flipping_page_num_title = document.getElementById(pageID).getAttribute('title',true);
	for (var i = 0; i < num_epaper_pages; i++) {
		if (epaper_pages[i][4] == flipping_page_num_title) { flipping_page_num = parseInt(epaper_pages[i][3]); break; }
	}
	//alert("pageID: " + pageID + "\npageTitle: " + document.getElementById(pageID).getAttribute('title',true) + "\nflipping_page_num: " + flipping_page_num + "\nloadpage:" + loadpage);
	var flipping_side = (pageID.indexOf("R_") > 0) ? 'right' : 'left';
	if (loadpage < 0) {
		if (flipping_side == 'right') following_page_num = flipping_page_num + 2;
		else following_page_num = flipping_page_num - 2;
	}
	else {
		following_page_num = loadpage;
	}

	if (loadpage >= -1) {	// -2 means: do not load a page, -1 means: auto flip to next/previous pages

		// prepare the page container following the hiding page on the same side (left/right)
		var following_pageID = pageID.substr(0,pageID.length-1);
		if (pageID.charAt(pageID.length-1) == "0") following_pageID += "1";
		else following_pageID += "0";
		// prepare the page before the hiding page on the other side (left/right)
		onback_pageID = pageID.substr(0,pageID.length-3);
		if (pageID.indexOf("R_") > 0) onback_pageID += "L_0";
		else onback_pageID += "R_0";
		onback_pageID = get_invisible_pageID(onback_pageID);	// this is the page image to open

		// prepare the pages to preload
		if (flipping_side == 'right') {	// we are flipping a right page
			// preload the page image on the same side (left or right)
			if (following_page_num < num_epaper_pages) {
				load_page(following_pageID,following_page_num,epaper_pages[following_page_num][0],flip_max_pagewidth);
			}
			else {
				load_page(following_pageID,invalid_page,xslcss_path+epaper_pages[0][0]);
			}

			// preload the page image on the back of the hiding page (right/left)
			if (loadpage == -1) onback_page_num = flipping_page_num + 1;	// and opens on left side: is an odd page
			else onback_page_num = loadpage - 1;
			if (onback_page_num > 0) {
				document.getElementById(onback_pageID).style.visibility = 'hidden';
				document.getElementById(onback_pageID).style.width = "0px";
				setTimeout("load_page(\"" + onback_pageID + "\"," + onback_page_num + ",'" + epaper_pages[onback_page_num][0] + "'," + flip_max_pagewidth + ")", 5);	// delay to let it go 'hidden'
			}
			else {
				load_page(onback_pageID,invalid_page,xslcss_path+epaper_pages[0][0]);
			}
		}
		else {	// we are flipping a left page
			// preload the page image on the same side (left or right)
			if (following_page_num > 0) {
				load_page(following_pageID,following_page_num,epaper_pages[following_page_num][0],flip_max_pagewidth);
			}
			else {
				load_page(following_pageID,invalid_page,xslcss_path+epaper_pages[0][0]);
			}

			// preload the page image on the back of the hiding page on the other side (right/left)
			if (loadpage == -1) onback_page_num = flipping_page_num - 1;			// and opens on right side: is an even page
			else onback_page_num = loadpage + 1;

			if (onback_page_num > 0) {
				document.getElementById(onback_pageID).style.visibility = 'hidden';
				document.getElementById(onback_pageID).style.width = "0px";
				setTimeout("load_page(\"" + onback_pageID + "\"," + onback_page_num + ",'" + epaper_pages[onback_page_num][0] +"'," + flip_max_pagewidth + ")", 5);	// delay to let it go 'hidden'
			}
			else {
				load_page(onback_pageID,invalid_page,xslcss_path+epaper_pages[0][0]);
			}
		}

	}
	page_is_flipping = true;
	//alert("following_page_num: " + following_page_num + "\nonback_page_num: " + onback_page_num );
	show_page_navbar_colors(onback_page_num,following_page_num);
	slide_hide_page(pageID,flipping_side,my_speed,0);
	return;
}


function slide_hide_page(pageID,flipping_side,speed,step) {	// hide a page

//	var all_images_loaded = check_preloaded_pageimages();
	if (/*!all_images_loaded ||*/ (images_loading > 0)) {
		setTimeout("slide_hide_page(\"" + pageID + "\",\"" + flipping_side + "\"," + speed + "," + step + ")", 20);
		return;
	}
	if (step <= 0) play_soundID("snd_flip");
	var my_speed = speed;
	var the_page = document.getElementById(pageID);

	if ( (parseInt(the_page.style.width) * my_speed) > 5 ) {
		var my_step = 0;
		if (step) my_step = step;
		if (my_step <= 0) {
			var opacity = 90-(my_step*2); if (opacity < 50) opacity = 50;
			the_page.style.opacity = opacity/100;
			the_page.style.filter = "alpha(opacity=" + opacity + ")";

		//	if (flipping_side == 'right') { the_page.style.borderRightWidth="15px"; the_page.style.borderRightColor="#EEEEEE"; }
		//	else { the_page.style.borderLeftWidth="15px"; the_page.style.borderLeftColor="#EEEEEE"; }

		}
		the_page.style.height = the_page.style.height;
		the_page.style.width = parseInt(parseInt(the_page.style.width) * my_speed) + "px";

		var new_speed = my_speed*my_speed;
		if (new_speed < 0.7) new_speed = 0.7;
		setTimeout("slide_hide_page(\"" + pageID + "\",\"" + flipping_side + "\"," + new_speed + "," + (++my_step) + ")", 20);
//		document.getElementById('info1').innerHTML = "hide my_step: " + my_step + " speed: " + new_speed;
		return;
	}
	else {	// completely hide page image
		the_page.style.height = the_page.style.height;
		the_page.style.width = "0px";
		the_page.style.borderWidth = "0px";
		the_page.src = xslcss_path+epaper_pages[0][0];
		the_page.style.opacity = 1.0;
		the_page.style.filter = "alpha(opacity=100)";
		the_page.style.borderRightColor=paper_border_color;

		// clear the map	---- otherwise the map bleeds (safari)
		if (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1) {
			document.getElementById(pageID).setAttribute("useMap","",true);
		}
		else document.getElementById(pageID).setAttribute("usemap","",true);

		// prepare the next pages
		var vis_page = swap_visible_pageID(pageID,true);	// the now hidden pageID is currently in front but width = 0

		// and now set the flipp edges
		hiding_page = false;
		var flipping_page_num = 0;
		var flipping_page_num_title = document.getElementById(pageID).getAttribute('title',true);
		for (var i = 0; i < num_epaper_pages; i++) {
			if (epaper_pages[i][4] == flipping_page_num_title) { flipping_page_num = parseInt(epaper_pages[i][3]); break; }
		}
		var following_page_num = 0;
		if (flipping_side == 'right') {	// hide a right page
//			var following_page_num = parseInt(document.getElementById(vis_page).getAttribute('title',true)) + 2;
			var following_page_num_title = document.getElementById(vis_page).getAttribute('title',true);
			for (var i = 0; i < num_epaper_pages; i++) {
				if (epaper_pages[i][4] == following_page_num_title) { following_page_num = parseInt(epaper_pages[i][3]) + 2; break; }
			}
			if (following_page_num < num_epaper_pages+1) {
				position_edge('edge_tr', vis_page);
				position_edge('edge_br', vis_page);
			}
		}
		else {
			following_page_num = flipping_page_num - 2;
			if (following_page_num > 0) {
				position_edge('edge_tl', vis_page);
				position_edge('edge_bl', vis_page);
			}
		}
		/*
		alert("title: " + document.getElementById(pageID).getAttribute('title',true)
			+ "\nvis_page: " + vis_page
			+ "\nflipping_page_num: " + flipping_page_num
			+ "\nfollowing_page_num: " + following_page_num
			);
		*/
		the_page.setAttribute('title',invalid_page);	// leave this here!

		// open the other sided page
		onback_pageID = pageID.substr(0,pageID.length-3);
		if (pageID.indexOf("R_") > 0) onback_pageID += "L_0";
		else onback_pageID += "R_0";

		onback_pageID = get_invisible_pageID(onback_pageID);	// this is the page image to open
		vis_page = swap_visible_pageID(onback_pageID,false);	// pageID is currently in front but width = 0
		show_page(onback_pageID,0);

		set_paper_border_color(paper_border_color);
	}

	set_toolbar_visibility();
	return;
}


var images_loading = 0;
function set_paper_border_color(color) {
	var hidden_color = 'transparent';
	if (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1) hidden_color = "#FFFFFF";

	if ( (document.getElementById('pageR_0').getAttribute('title',true) == "" )
		|| (document.getElementById('pageR_0').getAttribute('title',true) == invalid_page) ) document.getElementById('pageR_0').style.borderColor = hidden_color;
	else document.getElementById('pageR_0').style.borderColor = color;
	if ( (document.getElementById('pageR_1').getAttribute('title',true) == "" )
		|| (document.getElementById('pageR_1').getAttribute('title',true) == invalid_page) ) document.getElementById('pageR_1').style.borderColor = hidden_color;
	else document.getElementById('pageR_1').style.borderColor = color;
	if ( (document.getElementById('pageL_0').getAttribute('title',true) == "" )
		|| (document.getElementById('pageL_0').getAttribute('title',true) == invalid_page) ) document.getElementById('pageL_0').style.borderColor = hidden_color;
	else document.getElementById('pageL_0').style.borderColor = color;
	if ( (document.getElementById('pageL_1').getAttribute('title',true) == "" )
		|| (document.getElementById('pageL_1').getAttribute('title',true) == invalid_page) ) document.getElementById('pageL_1').style.borderColor = hidden_color;
	else document.getElementById('pageL_1').style.borderColor = color;
	return null;
}

function flippbook_ready(func) {	// check if whole flippbook is loaded
	try {
		if (document.getElementById('soundspan') == null) return false;
	} catch (e) {
		return false;
	}
	if (func <= 1) return(true);

	try {
		if (flippboock_load_state < func) return false;
	} catch (e) {
		return false;
	}

	return true;
}


var xslcss_path = "";
var init_flipbook1_recalls = 0;
function init_flipbook1(topageID,pageTitle) {	// load the first epaper page
	try {
		var doc_loaded = document.getElementById('soundspan');
		document.getElementById('progress').innerHTML = "";

		if (!flippbook_ready(1) || (!epaper_pages[1][0])) {
			init_flipbook1_recalls++;
			setTimeout("init_flipbook1(\"" + topageID + "\"," + pageTitle +")", 300);
			return;
		}
	} catch (e) {
		init_flipbook1_recalls++;
		setTimeout("init_flipbook1(\"" + topageID + "\"," + pageTitle +")", 300);
		return false;
	}

	// check if sound plugin available
	init_sound();
	xslcss_path = document.getElementById('xslcss_path').innerHTML;

	// get maximum flip paper page width
	flip_max_pagewidth = get_flippaper_maxwidth();

	// preload the page images
	page_images = new Array();
	preload_pageimages(1,flip_max_pagewidth);	// preload all page images starting from page 1

	// load the 'no page' image
	load_page("pageL_1",invalid_page,xslcss_path+"page_0.gif");
	load_page("pageL_0",invalid_page,xslcss_path+epaper_pages[0][0]);	// my be non existant or an even numbered page
	load_page("pageR_0",invalid_page,xslcss_path+"page_0.gif");

	// load the first real page image
/*
alert("initflippbook1, topageID:"+ topageID
+ "\nepaper_pages[1][3]:"+ epaper_pages[1][3]
+ "\nepaper_pages[1][4]:"+ epaper_pages[1][4]
+ "\nepaper_pages[1][0]:"+ epaper_pages[1][0]);
*/
	load_page(topageID,parseInt(epaper_pages[1][3]),epaper_pages[1][0],flip_max_pagewidth);
	epaper_page_width = parseInt(document.getElementById('pageR_1').width);
	epaper_page_height = parseInt(document.getElementById('pageR_1').height);

	flippboock_load_state = 1;
	init_flipbook2(topageID,0);
	return;
}

function init_flipbook2(objID,recall_cnt) {
//document.getElementById('info1').innerHTML = "**init_flipbook2 " + objID +": " +document.getElementById(objID).complete + " /images_loading=" + images_loading + " / " + recall_cnt;
	if (num_epaper_pages <= 1) return;

	if ((images_loading > 0) || (parseInt(document.getElementById('pageR_1').width) < 15)) {
		if (recall_cnt < 600) {
			document.getElementById('progress').innerHTML += ".";
			setTimeout("init_flipbook2(\"" + objID + "\"," + ++recall_cnt +")", 200);
			return;
		}
		alert("Timeout Error loading the ePaper pages");
		return;
	}
	document.getElementById('progress').innerHTML = "";

	// adjust paper size to screen width
//	var paper_width = adjust_flippaper_size();


	// save the epaper pages format from the first loaded image on the right side
	// including the img border
	epaper_page_width = parseInt(document.getElementById('pageR_1').width);
	epaper_page_height = parseInt(document.getElementById('pageR_1').height);

	// set page image container sizes
	document.getElementById('pageL_0').style.width  = document.getElementById('pageL_1').style.width  = epaper_page_width  + "px";
	document.getElementById('pageL_0').style.height = document.getElementById('pageL_1').style.height = epaper_page_height + "px";
	document.getElementById('pageR_0').style.width  = document.getElementById('pageR_1').style.width  = epaper_page_width  + "px";
	document.getElementById('pageR_0').style.height = document.getElementById('pageR_1').style.height = epaper_page_height + "px";
	var outer_style_width_L  = epaper_page_width + parseInt(document.getElementById('pageL_1').style.borderLeftWidth) + parseInt(document.getElementById('pageL_1').style.borderRightWidth);
	var outer_style_height_L = epaper_page_height + parseInt(document.getElementById('pageL_1').style.borderTopWidth)  + parseInt(document.getElementById('pageL_1').style.borderBottomWidth);
	var outer_style_width_R  = epaper_page_width + parseInt(document.getElementById('pageR_1').style.borderLeftWidth) + parseInt(document.getElementById('pageR_1').style.borderRightWidth);
	var outer_style_height_R = epaper_page_height + parseInt(document.getElementById('pageR_1').style.borderTopWidth)  + parseInt(document.getElementById('pageR_1').style.borderBottomWidth);

	if ( (userAgent.toUpperCase().indexOf("WINDOWS")>-1) && (navigator.appName.toUpperCase().indexOf("EXPLORER")>-1) ) {
		outer_style_width_L+=1;
	}
	document.getElementById('pagesetL_0').style.width  = outer_style_width_L  + "px";
	document.getElementById('pagesetL_0').style.height = outer_style_height_L + "px";
	document.getElementById('pagesetR_0').style.width  = outer_style_width_R  + "px";
	document.getElementById('pagesetR_0').style.height = outer_style_height_R + "px";
	outer_style_width_L  = outer_style_width_L  + parseInt(document.getElementById('pagesetL_0').style.borderLeftWidth) + parseInt(document.getElementById('pagesetL_0').style.borderRightWidth);
	outer_style_height_L = outer_style_height_L + parseInt(document.getElementById('pagesetL_0').style.borderTopWidth)  + parseInt(document.getElementById('pagesetL_0').style.borderBottomWidth);
	outer_style_width_R  = outer_style_width_R  + parseInt(document.getElementById('pagesetR_0').style.borderLeftWidth) + parseInt(document.getElementById('pagesetR_0').style.borderRightWidth);
	outer_style_height_R = outer_style_height_R + parseInt(document.getElementById('pagesetR_0').style.borderTopWidth)  + parseInt(document.getElementById('pagesetR_0').style.borderBottomWidth);

	document.getElementById('pageset_0').style.width  = outer_style_width_L  + "px";
	document.getElementById('pageset_0').style.height = outer_style_height_L + "px";
	document.getElementById('pageset_1').style.width  = outer_style_width_R  + "px";
	document.getElementById('pageset_1').style.height = outer_style_height_R + "px";
	outer_style_width_L  = outer_style_width_L  + parseInt(document.getElementById('pageset_0').style.borderLeftWidth) + parseInt(document.getElementById('pageset_0').style.borderRightWidth);
	outer_style_height_L = outer_style_height_L + parseInt(document.getElementById('pageset_0').style.borderTopWidth)  + parseInt(document.getElementById('pageset_0').style.borderBottomWidth);
	outer_style_width_R  = outer_style_width_R  + parseInt(document.getElementById('pageset_1').style.borderLeftWidth) + parseInt(document.getElementById('pageset_1').style.borderRightWidth);
	outer_style_height_R = outer_style_height_R + parseInt(document.getElementById('pageset_1').style.borderTopWidth)  + parseInt(document.getElementById('pageset_1').style.borderBottomWidth);

	document.getElementById('pagesetTD_0').style.width  = document.getElementById('pagesetTD_0width').style.width  = outer_style_width_L  + "px";
	document.getElementById('pagesetTD_0').style.height = outer_style_height_L + "px";
	document.getElementById('pagesetTD_1').style.width  = document.getElementById('pagesetTD_1width').style.width  = outer_style_width_R  + "px";
	document.getElementById('pagesetTD_1').style.height = outer_style_height_R + "px";
	document.getElementById('pagesetTD_0').width  = outer_style_width_L;
	document.getElementById('pagesetTD_0').height = outer_style_height_L;
	document.getElementById('pagesetTD_1').width  = outer_style_width_R;
	document.getElementById('pagesetTD_1').height = outer_style_height_R;
/*
alert('init_flipbook2 - flip_original_pagewidth: ' + flip_original_pagewidth 
	+ "\nflip_max_pagewidth: " + flip_max_pagewidth
	+ "\nouter_style_width_L: " + outer_style_width_L
	+ "\nouter_style_height_L: " + outer_style_height_L
	+ "\nepaper_page_width: " + epaper_page_width
	+ "\nepaper_page_height: " + epaper_page_height
	);
*/
	// set page flip container sizes
	document.getElementById('edge_tl_img_cont').style.width = edge_tl_width+"px";
	document.getElementById('edge_tl_img_cont').style.height = edge_tl_height+"px";

	document.getElementById('edge_tr_img_cont').style.width = edge_tr_width+"px";
	document.getElementById('edge_tr_img_cont').style.height = edge_tr_height+"px";

	document.getElementById('edge_bl_img_cont').style.width = edge_bl_width+"px";
	document.getElementById('edge_bl_img_cont').style.height = edge_bl_height+"px";

	document.getElementById('edge_br_img_cont').style.width = edge_br_width+"px";
	document.getElementById('edge_br_img_cont').style.height = edge_br_height+"px";

	set_paper_border_color(paper_border_color);

	// set frame width for flippboock
/**********************
	var current_frame_widths = parent.document.getElementById("pagesparentframes").cols.split(',');
	var new_frame_widths = parent.document.getElementById("pagesparentframes").cols.split(',');
***********************/
	var flippaper_width = parseInt(document.getElementById('pages_cont_table').offsetWidth);
	var flippaper_left = getLeftPos(document.getElementById('pages_cont_table'),false);
/**********************
	new_frame_widths[1] = flippaper_left + flippaper_width + 20;
	parent.document.getElementById("pagesparentframes").cols = new_frame_widths.join(',');
***********************/

	// set page flip edges
	position_edge('edge_tr',get_visible_pageID('pageR_1'));
	position_edge('edge_tl',get_visible_pageID('pageL_1'));
	position_edge('edge_br',get_visible_pageID('pageR_1'));
	position_edge('edge_bl',get_visible_pageID('pageL_1'));

	// show the whole flipping construction
	document.getElementById('pages_cont').style.visibility  = "visible";
	set_toolbar_visibility();
	flippboock_load_state = 2;

	show_page_navbar();
	show_pageimages_load_status();
	var all_images_loaded = wait_preloaded_pageimages();

	return;
}


function get_flippaper_maxwidth() {
	var max_paper_width = 0;
	var scrollbars_width = 30;
	do {
		var current_frame_widths = null;
		try {
			current_frame_widths = parent.document.getElementById("pagesparentframes").cols.split(',');
		}
		catch (e) {
			current_frame_widths = new Array("150","*");
		}
		var thumbsframewidth = parseInt(current_frame_widths[0]);
	//	if (!isNaN(window.outerWidth)) { max_paper_width = parseInt((parseInt(window.outerWidth) - thumbsframewidth - scrollbars_width) * flipp_width_screenfactor); break; }
		if (!isNaN(top.document.body.offsetWidth)) { max_paper_width = parseInt((parseInt(top.document.body.offsetWidth) - thumbsframewidth - scrollbars_width) * flipp_width_screenfactor); break; }
		if (!isNaN(top.document.body.clientWidth)) { max_paper_width = parseInt((parseInt(top.document.body.clientWidth) - thumbsframewidth - scrollbars_width) * flipp_width_screenfactor); break; }
		// sh.....
		max_paper_width = (parseInt(parseInt(document.body.offsetWidth) + 150) * flipp_width_screenfactor);
	} while (false);


	do {
		// first, check min and max width
		if ( (flip_max_pagewidth_allowed > 0) 
			&& (max_paper_width > flip_max_pagewidth_allowed) ) { max_paper_width = flip_max_pagewidth_allowed; break; }
		if ( (flip_min_pagewidth_allowed > 0) 
			&& (max_paper_width < flip_min_pagewidth_allowed) ) { max_paper_width = flip_min_pagewidth_allowed; break; }
		// round to full 10th in 20-steps (280, 260, 240.....)
		var step = 20;
		var i = 1;
		while ( ((flip_max_pagewidth_allowed - (i*step)) >= 120)
				&& ((flip_max_pagewidth_allowed - (i*step)) > flip_min_pagewidth_allowed) ) {
			if ( max_paper_width > (flip_max_pagewidth_allowed - (i*step)) )  { max_paper_width = flip_max_pagewidth_allowed - (i*step); break; }
			i++;
		}

	} while (false);

	return max_paper_width;
}


// adjust paper size to screen width
function adjust_flippaper_size() {
	// size the paper to a maximum percentage of screen width
	var original_paper_width = 0;
	if (flip_original_pagewidth != 0) original_paper_width = flip_original_pagewidth;
	else original_paper_width = parseInt(document.getElementById('pageR_1').width);

	var original_paper_height = 0;
	if (flip_original_pageheight != 0) original_paper_height = flip_original_pageheight;
	else original_paper_height = parseInt(document.getElementById('pageR_1').height);

	var new_paperwidth = original_paper_width;
	var new_paperheight = original_paper_height;

	var max_paper_width = flip_max_pagewidth;

//	if (original_paper_width <= max_paper_width) return original_paper_width;

	var resize_factor = 1.0;
	new_paperwidth = max_paper_width;
	resize_factor = original_paper_width / max_paper_width;
	if (isNaN(resize_factor)) return 0;

	document.getElementById('pageR_1').width = new_paperwidth;
	document.getElementById('pageR_1').height = parseInt(new_paperheight / resize_factor);
/*
alert('original_paper_width: ' + original_paper_width
	+ '\noriginal_paper_height: ' + original_paper_height
	+ '\nadjust_flippaper_size - flip_original_pagewidth: ' + flip_original_pagewidth 
	+ "\nflip_original_pageheight: " + flip_original_pageheight
	+ "\nmax_paper_width: " + max_paper_width
	+ "\nresize_factor: " + resize_factor
	);
*/
//	if (resize_factor <= 1.0) return 0;	// allow negative resize == enlarge
	// and now we have to modify all areas
	var num_area = document.getElementsByTagName("area").length;
	var area_coords;
	for (var a = 0; a < num_area; a++) {
		area_coords = document.getElementsByTagName("area")[a].coords.split(',');
		for (var i = 0; i < area_coords.length; i++) {
			area_coords[i] = parseInt(area_coords[i] / resize_factor);
		}
		document.getElementsByTagName("area")[a].coords = area_coords.join(',');
	}
/*
	document.getElementById('info1').innerHTML = 
		"Screen W/H: " + window.outerWidth + " / " + window.outerHeight + "<br>" +
		"Inner Window W/H: " + window.innerWidth + " / " + window.innerHeight + "<br>" +
		"original_paper_width: " + original_paper_width + "<br>" +
		"max_paper_width: " + max_paper_width + "<br>" +
		"resize_factor: " + resize_factor + "<br>" +
		"num_area: " + num_area + "<br>" +
		"area_coords: " + area_coords + "<br>" +
		""	;
*/
	return new_paperwidth;
}

function wait_for_image_loaded(objID,call_cnt) {
	if (call_cnt == 0) images_loading++;
	call_cnt++;

	var the_page = -2;
	var status_row = null;
	if (document.getElementById('loadstatus_table_row')) {	// if we want load status display (for debug)
		the_page = parseInt(document.getElementById(objID).title);
		status_row = document.getElementById('loadstatus_table_row');
	}

/*
	document.getElementById('info4').innerHTML = "<div style=\"white-space:nowrap\">---------" + objID + ": images_loading0: " + images_loading 
		+ " / " + (document.getElementById(objID).isLoaded==true ? "IL ":"NL ")
		+ (document.getElementById(objID).complete==true ? "IC ":"NC ")
		+ " / width: " + document.getElementById(objID).width
		+ " / " + document.getElementById(objID).src + "</div>";
*/
	do {
		if ( document.getElementById(objID).complete ) break;
		try { if ( document.getElementById(objID).isLoaded == true ) break; } catch(e){}
		if ( navigator.userAgent.toUpperCase().indexOf("SAFARI") > -1 ) {	//for Safari
			if (document.getElementById(objID).width > 0) break;
		}

		if ( call_cnt < 1200 ) {	// allow 4 minutes before roaring
			setTimeout("wait_for_image_loaded(\"" + objID + "\"," + call_cnt + ")", 200);
			if ((status_row != null) && (the_page > 0)) status_row.childNodes[--the_page].style.backgroundColor = "#FF0000";
			return;
		}
		else {
			images_loading--;	// image is loaded
			alert("Timeout Error for an image");
			return;
		}
	} while (false);

//	if ((status_row != null) && (the_page > 0)) status_row.childNodes[--the_page].style.backgroundColor = "#99FF99";

	if (images_loading == 1) {	// for Explorer to have enough time to draw page in back
		var timeout = 100;
		if ( navigator.userAgent.toUpperCase().indexOf("MSIE") > -1) timeout = 450;
		setTimeout("images_loading--;", timeout);
		return;
	}
	images_loading--;	// image is loaded

//	document.getElementById('info5').innerHTML = "+++++++++++++++++++++ " + objID+": images_loading1: " + images_loading + " / " + document.getElementById(objID).isLoaded;
	return;
}


function load_page(objID,pg_num,src,width) {

	var obj = document.getElementById(objID);
	var page_image_isPreLoaded = false;
	var the_src = "";
	if ( (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1) && (navigator.userAgent.toUpperCase().indexOf(" MAC") > -1) )  {	// for Explorer Mac
		the_src = src;
	}
	else try { the_src = encodeURI(src); } catch(e){}	// explorer 5 (old) does not know this

//document.getElementById('info').innerHTML = "<div style=\"white-space:nowrap\">####### loading page#"+ pg_num + ", " + objID + ", " + src + "</div>";
	do {
		if (pg_num <= 0) {
			try { if (!page_images[0].isLoaded && !page_images[0].complete) break; } catch(e) { break; }
			page_image_isPreLoaded = true;
			obj.src = page_images[0].src;
//document.getElementById('info').innerHTML = "####### 0 loading cached page#"+ pg_num +", " + obj.src;
		}
		else {
			try {
				if (page_images[pg_num].src.indexOf(the_src) > -1) {
					if (!page_images[pg_num].isLoaded && !page_images[pg_num].complete) break;
					page_image_isPreLoaded = true;
					obj.src = page_images[pg_num].src;
//document.getElementById('info1').innerHTML = "####### 1 loading cached page#"+ pg_num +", " + obj.src;
				}
				else {
					//if ( !width || (src.indexOf('missingpage.jpg') >= 0) ) obj.src = src;
					//else obj.src = "thumb_j.aspx?i=" + src + "&h=0&w=" + width + "&q=" + flip_page_quality;
					obj.src = src;
					page_image_isPreLoaded = true;
//document.getElementById('info2').innerHTML = "####### 3 loading NEW page#"+ pg_num +", " + the_src;
				}
			} catch(e) { break; }
		}
	} while (false);
	if (!page_image_isPreLoaded) {
		if ( (src.indexOf('missingpage.jpg') >= 0) || (src.indexOf('page_0.gif') >= 0) ) obj.src = src;
		//else obj.src = "thumb_j.aspx?i=" + src + "&h=0&w=" + width + "&q=" + flip_page_quality;
		else obj.src = src;
//document.getElementById('info').innerHTML = "####### 4 loading NEW1 page#"+ pg_num +", " + obj.src;
	}

//#########	obj.setAttribute('title',pg_num);
	var target_page_title = "";
	if (pg_num >= 0) {
		for (var i = 0; i < num_epaper_pages; i++) {
			if (parseInt(epaper_pages[i][3]) == pg_num) { target_page_title = epaper_pages[i][4]; break; }
		}
	}
/*
alert("load_page, pg_num:"+ pg_num
+ "\ntarget_page_title:"+ target_page_title
);
*/
	try { obj.setAttribute('title',target_page_title); } catch(e) {}
	obj.isLoaded = false;
	if ( (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1) || (navigator.userAgent.toUpperCase().indexOf("SAFARI") > -1) ) {
		obj.onload=function(){ this.isLoaded=true; }
	}
	else obj.setAttribute("onLoad","this.isLoaded=true");
	if (pg_num > 0) {
		if (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1) obj.setAttribute("useMap","#Mmap_P" + pg_num,true);
		else obj.setAttribute("usemap","#Mmap_P" + pg_num,true);
	}
	else {
 		if (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1) obj.setAttribute("useMap","",true);
		else obj.setAttribute("usemap","",true);
	}
	wait_for_image_loaded(objID,0);
	return;
}


function show_pageimages_load_status() {
	if (stop_preload_pageimages == true) return;
	var not_loaded = 0;
	var loaded = 0;
	if ( (!document.getElementById('loadstatus_table_row'))
		|| (document.getElementById('loadstatus_table_row').childNodes.length != (epaper_pages.length-1))
		) {	// write the pages load status table
		var status_table = "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" style=\"font-size:7pt; font-family:sans-serif; color:#445566;\"><tr id=\"loadstatus_table_row\">";
		for (var i=1; i<epaper_pages.length; i++) status_table += "<td style=\"border-left: solid 1px #C1D7ED;\">" + ((i%10==0) ? i : (i%10) ) + "<\/td>";
		status_table += "<\/tr><\/table>";
		document.getElementById('loadstatus_div').innerHTML = status_table;
	}

	var status_row = document.getElementById('loadstatus_table_row');
	if (!status_row) return;

	for (var i=1; i<epaper_pages.length; i++) {
		if (!page_images[i]) { not_loaded++; status_row.childNodes[i-1].style.color = "#FF9999"; continue; }
		if ( (page_images[i].isLoaded)		// works for Firefox, IE Mac&Win (NOT in Safari)
			|| (page_images[i].complete) ) {	// works for Firefox, IE Mac&Win, Safari
			status_row.childNodes[i-1].style.backgroundColor = "#e8f0ff";
			status_row.childNodes[i-1].style.color = "#556677";
			loaded++;
			continue;
		}
		not_loaded++;	// is currently loading
		status_row.childNodes[i-1].style.backgroundColor = "#BBBBFF";
	}
//	document.getElementById('info').innerHTML = "Loaded: " + loaded + " of " + status_row.childNodes.length + "<br>to load: " + not_loaded;

	if (not_loaded > 0) setTimeout("show_pageimages_load_status()", 50);
	else {
		document.getElementById('loadstatus_div').innerHTML = "";	// clear load bar
	}
	return;
}


function show_page_navbar() {
	var num_pages_on_navrow = 36;	// default
	var pagenav_table = "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" class=\"pagenav_table\"><tr>";
	for (var i=1; i<epaper_pages.length; i++) {
		pagenav_table += "<td id=\"pgnav" + i + "\" class=\"pagenav_td" + (i==epaper_pages.length-1 ? ("_last") : "") + "\" onMouseOver=\"this.style.cursor='pointer'\" onClick=\"javascript:goto_page(" + i + ",true)\" title=\"" + epaper_pages[i][4] + "\">" + epaper_pages[i][4] + "<\/td>";
		if (i%num_pages_on_navrow == 0) pagenav_table += "<\/tr><tr>";
	}
	pagenav_table += "<\/tr><\/table>";
	document.getElementById('pagenav_container_td').innerHTML = pagenav_table;
	show_page_navbar_colors(0,1);

	return;
}

function show_page_navbar_colors(onback_page_num,following_page_num) {
	for (var i=1; i<epaper_pages.length; i++) {
		if (document.getElementById("pgnav"+i).className == "pagenav_current") document.getElementById("pgnav"+i).className = "pagenav_visited";
	}
	if ((onback_page_num > 0) && (onback_page_num < epaper_pages.length)) document.getElementById("pgnav"+onback_page_num).className = "pagenav_current";
	if ((following_page_num > 0) && (following_page_num < epaper_pages.length)) document.getElementById("pgnav"+following_page_num).className = "pagenav_current";
}


function wait_preloaded_pageimages() {
	var all_images_loaded = check_preloaded_pageimages(null);
	if (all_images_loaded != true) setTimeout("wait_preloaded_pageimages()", 50);
	else window.status = 'Flipping Book Ready';
//	document.getElementById('infoU').innerHTML = "***************** all_images_loaded: " + all_images_loaded + "<br>";

	return all_images_loaded;
}

function check_preloaded_pageimages(which_page) {
	var all_images_loaded = true;
	var start_page = 0;
	var end_page = page_images.length - 1;
	if (which_page) {
		end_page = start_page = which_page;
	}
	if (epaper_pages.length > page_images.length) all_images_loaded = false;

//	var info = "***************** page_images to load #" + epaper_pages.length + "<br>";
	for (var i = start_page; i <= end_page; i++) {	// IE problem: ignore page_0.gifisLoaded is never set to true
/*
		info += "<div style=\"white-space:nowrap\">#" + i + "&nbsp;loaded:&nbsp;" 
				+ (page_images[i].isLoaded==true ? "IL ":"NL ")
				+ (page_images[i].complete==true ? "IC ":"NC ")
				+ (page_images[i].width)
				+ "&nbsp;&nbsp;&nbsp;" + page_images[i].src + "</div>";
*/
		if ( (!page_images[i].isLoaded)		// works for Firefox, IE Mac&Win (NOT in Safari)
			&& (!page_images[i].complete)	// works for Firefox, IE Mac&Win, Safari
			) {
			all_images_loaded = false;
			break;
		}
	}
//	document.getElementById('info5').innerHTML = info;


	if (!which_page && all_images_loaded) flippboock_load_state = 3;
	return all_images_loaded;
}


function preload_pageimages(pagenum,width) {
	try {
		if (stop_preload_pageimages == true) {
			stop_preload_pageimages = false;
			doing_preload_pageimages = false;
			return;
		}
	}
	catch(e){}
	if ( (pagenum < 0) || (pagenum >= epaper_pages.length) ) {
		return;
	}

	doing_preload_pageimages = true;
	var idx = page_images.length;
	page_images[idx] = new Image();

	if (idx == 0) {
		page_images[idx].src = xslcss_path + "page_0.gif";
		page_images[idx].isLoaded = false;
		if ( (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1) || (navigator.userAgent.toUpperCase().indexOf("SAFARI") > -1) ) {
			page_images[idx].onload=function(){ this.isLoaded=true; }	// is not fired on IE Win!!
		}
		else page_images[idx].setAttribute("onload","this.isLoaded=true;");
//document.getElementById('info1').innerHTML = "0 preloading #" + pagenum + ", w=" + width + ": " + page_images[idx].src;
		idx = page_images.length;
		page_images[idx] = new Image();
	}

	if (!width || (width <= 0) || (epaper_pages[pagenum][0].indexOf('missingpage.jpg') >= 0) ) {
		page_images[idx].src = epaper_pages[pagenum][0];
		page_images[idx].isLoaded = false;
		if ( (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1) || (navigator.userAgent.toUpperCase().indexOf("SAFARI") > -1) ) {
			page_images[idx].onload=function(){ this.isLoaded=true; }
		}
		else page_images[idx].setAttribute("onload","this.isLoaded=true;");
//document.getElementById('info1').innerHTML = "1 preloading #" + pagenum + ", w=" + width + ": " + page_images[idx].src;
	}
	else {
		//*************page_images[idx].src= "thumb_j.aspx?i=" + epaper_pages[pagenum][0] + "&h=0&w=" + width + "&q=" + flip_page_quality;
		page_images[idx].src= epaper_pages[pagenum][0];
		page_images[idx].isLoaded = false;
		if ( (navigator.userAgent.toUpperCase().indexOf("MSIE") > -1) || (navigator.userAgent.toUpperCase().indexOf("SAFARI") > -1) ) {
			page_images[idx].onload=function(){ this.isLoaded=true; }
		}
		else page_images[idx].setAttribute("onload","this.isLoaded=true;");
//document.getElementById('info1').innerHTML = "2 preloading #" + pagenum + ", w=" + width + ": " + page_images[idx].src;
	}

	pagenum++;	// prepare next page to preload
	if (pagenum >= epaper_pages.length) {
/*
		document.getElementById('info1').innerHTML = "preloading DONE";

		var info = "***************** document.images #" + document.images.length + "<br>";
		for (var i = 0; i < document.images.length; i++) {
			info += "#" + i + ":&nbsp;" + document.images[i].src + "<br>";
		}
		document.getElementById('info3').innerHTML = info;
		var info = "***************** Preloaded #" + page_images.length + "<br>";
		for (var i = 0; i < page_images.length; i++) {
			info += "#" + i + ":&nbsp;" + page_images[i].src + "<br>";
		}
		document.getElementById('info4').innerHTML = info;
		var info = "***************** epaper_pages #" + epaper_pages.length + "<br>";
		for (var i = 0; i < epaper_pages.length; i++) {
			info += "#" + i + ":&nbsp;" + epaper_pages[i][0] + "<br>";
		}
		document.getElementById('info5').innerHTML = info;
*/
		doing_preload_pageimages = false;
		return;
	}

	try {
		if (stop_preload_pageimages == true) {
			stop_preload_pageimages = false;
			doing_preload_pageimages = false;
			return;
		}
	}
	catch(e){}
	// get next image
	setTimeout("preload_pageimages(" + pagenum + "," + width + ")", 5);
	return;
}


function goto_continued_article(target_article_id,target_article_page) {
	//alert("target_article_id: " + target_article_id + "\ntarget_article_page: " + target_article_page);
	show_article_xml(null,target_article_id,1.0,null,"",false,false,target_article_page)
	goto_page(target_article_page,true);
	return;
}

var nothing_todo_count = 0;
function goto_page(the_page,is_real_page) {
	var right_visible_pageID = get_visible_pageID('pageR_1');
	var left_visible_pageID = get_visible_pageID('pageL_1');
	//var right_visible_page = parseInt(document.getElementById(right_visible_pageID).getAttribute('title',true));
	var right_visible_page = 0;
	var right_visible_page_title = document.getElementById(right_visible_pageID).getAttribute('title',true);
	for (var i = 0; i < num_epaper_pages; i++) {
		if (epaper_pages[i][4] == right_visible_page_title) { right_visible_page = parseInt(epaper_pages[i][3]); break; }
	}
	var left_visible_page = -1;
	var title = document.getElementById(left_visible_pageID).getAttribute('title',true);
	if (title != "") {
		for (var i = 0; i < num_epaper_pages; i++) {
			if (epaper_pages[i][4] == title) { left_visible_page = parseInt(epaper_pages[i][3]); break; }
		}
	}
	// the page to go misses the inserted missing pages in the flippbook
	// we have to map the_page to the physical page in flip
	var target_page_sequence = the_page;
	if (!is_real_page) {
		for (var i = 0; i < num_epaper_pages; i++) {
			if (epaper_pages[i][4] == the_page) { target_page_sequence = parseInt(epaper_pages[i][3]); break; }
		}
	}
/*
	document.getElementById('info').innerHTML = "the_page to go: " + the_page + " <br> " 
			+ "is_real_page: " + is_real_page + " <br> " 
			+ "num_epaper_pages: " + num_epaper_pages + " <br> " 
			+ "target_page_sequence: " + target_page_sequence + " <br> " 
			+ "target_page_title: " + epaper_pages[the_page][4] + " <br> " 
			+ "right_visible_page: " + right_visible_page + " <br> " 
			+ "left_visible_page: " + left_visible_page;
*/
	if (target_page_sequence >= num_epaper_pages) return;

	if ( (target_page_sequence <= right_visible_page) && (target_page_sequence >= left_visible_page) ) {
		// we are already on this page(s)
		nothing_todo_count++;
		if (nothing_todo_count > 5) {
			play_soundID("snd_nothingtodo");
			nothing_todo_count = 0;
		}
		return;
	}


	var my_page = target_page_sequence;
	if ( (target_page_sequence > right_visible_page) && (right_visible_page > 0) ) {	// turn pages from right to left
		if (isEven(my_page)) my_page++;
		hide_page(right_visible_pageID,page_flip_hide_speed,my_page,0);
		return;
	}
	if ( (target_page_sequence < left_visible_page) || (left_visible_page < 0) )   {	// turn pages from left to right
		if (isOdd(my_page)) my_page--;
		hide_page(left_visible_pageID,page_flip_hide_speed,my_page,0);
		return;
	}

	return;
}


var myPDFwin = null;
function get_page_pdfID(id) {
	var the_obj = null;
	try {
		the_obj = document.getElementById(id);
	} catch(e) { return; }
	get_page_pdf(the_obj);
	return;
}
function get_page_pdf(obj) {
	the_page_pdf_to_show = "";
	var the_page_title = obj.getAttribute('title',true);
	//alert(the_page_title);
	if ( (the_page_title == "") || (the_page_title == "-1") ) return;
	var the_page_layout_id = "";
	var the_page = -1;
	for (var i = 0; i < epaper_pages.length; i++) {
		if (epaper_pages[i][4] == the_page_title) {
			the_page_layout_id = epaper_pages[i][2];
			the_page = epaper_pages[i][5]; found = true;
			break;
		}
	}

	if ( (the_page < 0) || (the_page_layout_id == "")) return;
	//alert("the_page_layout_id:" + the_page_layout_id + "\nthe_page:" + the_page);

	var loc = the_page_layout_id + (the_page > 1 ? the_page : "") + ".pdf";
	//if (myPDFwin && !myPDFwin.closed) myPDFwin.close();
	myPDFwin=window.open("","myPDFwin","screenX=" + view_X + ", screenY=" + view_Y + ", left=" + view_X + ", top=" + view_Y + ",location=no,menubar=No,resizable=Yes,scrollbars=Yes,status=No,titlebar=No,toolbar=No,dependent=Yes");
	myPDFwin.document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">');
	myPDFwin.document.write('<html><head><\/head>');
	myPDFwin.document.write('<body bgcolor="#FFFFFF" style="color: #333333; font-family: \'Verdana\',\'Arial\',sans-serif; font-size: 9pt; font-weight: normal;">');
	myPDFwin.document.write('PDF ....');
	myPDFwin.document.write("<\/body><\/html>");
	myPDFwin.document.close(); 
	myPDFwin.location.href = loc;

//	wait_page_pdf_to_show(0);
	return;
}

function wait_page_pdf_to_show(call) {	// problem with popup blocker!
//document.getElementById('info1').innerHTML = "wait_page_pdf_to_show: " + call + " <br>'" + the_page_pdf_to_show + "'";
	if (the_page_pdf_to_show == "") { 
		if (call > 100) return;
		setTimeout("wait_page_pdf_to_show(" + (++call) + ")", 200);
		return;
	}
	var view_X = 10; var view_Y = 10;
	try {	// prevent error messages when popups blocked
		myPDFwin=window.open("","myPDFwin","screenX=" + view_X + ", screenY=" + view_Y + ", left=" + view_X + ", top=" + view_Y + ",location=no,menubar=No,resizable=No,scrollbars=No,status=No,titlebar=No,toolbar=No,dependent=Yes");
		myPDFwin.location.href = the_page_pdf_to_show;
	} catch(e) {}
	the_page_pdf_to_show = "";
	return;
}


var toolbar_height = 25;
var on_toolbar_icon = new Array();
on_toolbar_icon[0] = false;
on_toolbar_icon[1] = false;
on_toolbar_icon[2] = false;
var showing_toolbar = new Array();
showing_toolbar[0] = false;	// left side
showing_toolbar[1] = false;	// right side
showing_toolbar[2] = false;	// mid
var hiding_toolbar = new Array();
hiding_toolbar[0] = false;	// left side
hiding_toolbar[1] = false;	// right side
hiding_toolbar[2] = false;	// mid

function show_toolbar(id,recall) {
//var now = new Date();
//document.getElementById('info5').innerHTML = "showing: " + now.getTime() + "<br> " ;
	var toolbar_side = 1;	// assume right side
	do {
		if (id.indexOf("_L") >= 0) { toolbar_side = 0; break; }
		if (id.indexOf("_M") >= 0) { toolbar_side = 2; break; }
	} while (false);

	var cur_size = parseInt(document.getElementById(id).style.height);
	if (cur_size >= toolbar_height) {
		showing_toolbar[toolbar_side] = false;
		return false;
	}
	document.getElementById(id).style.height = ++cur_size + "px";
	showing_toolbar[toolbar_side] = true;
	setTimeout("show_toolbar(\"" + id + "\",true)", 12);
	return false;
}


function hide_toolbar(id) {
//var now = new Date();
//document.getElementById('info1').innerHTML = "hide_toolbar: " + now.getTime() + "<br> " ;
	setTimeout("hide_toolbar_do(\"" + id + "\"," + false + ")", 50);
	return false;
}
function hide_toolbar_do(id,recall) {
//var now = new Date();
//document.getElementById('info1').innerHTML = "hide_toolbar_do: " +id+", "+ now.getTime() + "<br> " ;
	var toolbar_side = 1;	// assume right side
	do {
		if (id.indexOf("_L") >= 0) { toolbar_side = 0; break; }
		if (id.indexOf("_M") >= 0) { toolbar_side = 2; break; }
	} while (false);

	if (on_toolbar_icon[toolbar_side] == true) return true;
	if (showing_toolbar[toolbar_side] == true) {
		hiding_toolbar[toolbar_side] = false;
		return false;
	}

//document.getElementById('info3').innerHTML = "hiding: " + id + " <br> " ;
	var cur_size = parseInt(document.getElementById(id).style.height);
	if (cur_size <= 0) {
		hiding_toolbar[toolbar_side] = false;
//document.getElementById('info3').innerHTML = "hidden: " + id + " <br> " ;
		return false;
	}
	document.getElementById(id).style.height = --cur_size + "px";
	hiding_toolbar[toolbar_side] = true;
	setTimeout("hide_toolbar_do(\"" + id + "\",true)", 12);
	return false;
}



function set_toolbar_visibility() {
	var left_page_visible = document.getElementById(get_visible_pageID('pageL_1')).title;
	var right_page_visible = document.getElementById(get_visible_pageID('pageR_1')).title;
//alert("left: " + left_page_visible + "\nright: " + right_page_visible);
	if ((left_page_visible != invalid_page) && (left_page_visible != "")) document.getElementById('toolbar_td_L').style.visibility = "visible";
	else  document.getElementById('toolbar_td_L').style.visibility = "hidden";
	if ((right_page_visible != invalid_page) && (right_page_visible != "")) document.getElementById('toolbar_td_R').style.visibility = "visible";
	else  document.getElementById('toolbar_td_R').style.visibility = "hidden";

	document.getElementById('toolbar_td_M').style.visibility = "visible";
	if (sound_enabled == true) {
		document.getElementById('toolbar_M_snd').src = xslcss_path + "speaker_on.gif";
		document.getElementById('toolbar_M_snd').title = "Sound ON, click = Sound OFF";
		if (sound_plugin != "") document.getElementById('toolbar_M_snd').title += " [" + sound_plugin + "]";
		else document.getElementById('toolbar_M_snd').title += " [No Plugin]";
	}
	else {
		document.getElementById('toolbar_M_snd').src = xslcss_path + "speaker_off.gif";
		document.getElementById('toolbar_M_snd').title = "Sound OFF, click = Sound ON";
		if (sound_plugin != "") document.getElementById('toolbar_M_snd').title += " [" + sound_plugin + "]";
		else document.getElementById('toolbar_M_snd').title += " [No Plugin]";
	}
	return;
}

function isEven(x) { return (x%2)?false:true; }
function isOdd(x) { return !isEven(x); }



// **************** check if sound plugin available
var sound_enabled = false;
var sound_plugin = ""; // set to NO sound available
function init_sound() {
	sound_plugin = "";
	if (navigator.userAgent.toLowerCase().indexOf('msie') >= 0)  {	// try for IE Win
		/* disable sound on all MSIE! to prevent a lot of alerts
		var p_list = detect_players();
		if (p_list.indexOf("QuickTime") != -1) sound_plugin = "QuickTime";
		*/
	}
	else {	// all other browsers
		if (navigator.mimeTypes["audio/x-wav"] && navigator.mimeTypes["audio/x-wav"].enabledPlugin != null) {
			sound_plugin = navigator.mimeTypes['audio/x-wav'].enabledPlugin.name;
			sound_plugin = get_plugin_fullname(sound_plugin);
		}
	}

	if (sound_plugin == "") {
		document.getElementById('toolbar_M_snd_info').style.visibility = "visible";
	}
	else {
		document.getElementById('toolbar_M_snd_info').style.visibility = "visible";
	}
}

function my_sound(surl) {
	if (!sound_enabled) return;
	try {
		document.getElementById("soundspan").innerHTML= "<embed id='snd' src='"+surl+"' type='audio/x-wav' hidden='false' autostart='true' width='200' height='100' loop='false'>";
	} catch(e) {}
}

function play_soundID(id) {
	if (!sound_enabled) return;
	try { document.getElementById(id).Play(); }
	catch(e) {
		try {
			document.getElementById(id).DoPlay();
		}
		catch(e) {}
	}
}

function my_sound_onoff(id) {
	if (sound_plugin == "") return; // no sound!!!
	if (sound_enabled == true) {
		document.getElementById(id).src = xslcss_path+"speaker_off.gif";
		document.getElementById('toolbar_M_snd').title = "Sound OFF, click = Sound ON";
		if (sound_plugin != "") document.getElementById('toolbar_M_snd').title += " [" + sound_plugin + "]";
		else document.getElementById('toolbar_M_snd').title += " [No Plugin]";

		document.getElementById('soundspan').style.visibility = "hidden";
		sound_enabled = false;
	}
	else {
		document.getElementById(id).src = xslcss_path+"speaker_on.gif";
		document.getElementById('toolbar_M_snd').title = "Sound ON, click = Sound OFF";
		if (sound_plugin != "") document.getElementById('toolbar_M_snd').title += " [" + sound_plugin + "]";
		else document.getElementById('toolbar_M_snd').title += " [No Plugin]";

		// to hide the QuickTime control panel:
		// do not move embed tag off screen in any way 
		// do not set hidden='true' or Firefox will not call the Play() method
		// controller='false' works on windows QuickTime only (not on mac)
		document.getElementById("soundspan").innerHTML= "<embed id='snd_flip' src='" + xslcss_path + "paperturnquick.wav' type='audio/x-wav' controller='false' autostart='false' width='1' height='1' loop='false'>"
													  + "<embed id='snd_nothingtodo' src='" + xslcss_path + "Yawn.wav' type='audio/x-wav' controller='false' autostart='false' width='1' height='1' loop='false'>";

		document.getElementById('soundspan').style.visibility = "visible";
		sound_enabled = true;
	}
}


function show_plugins() {
	var view_X = 10; var view_Y = 10;
	var pluginswin=window.open("","pluginswin","screenX=" + view_X + ", screenY=" + view_Y + ", left=" + view_X + ", top=" + view_Y + ",location=no,menubar=No,resizable=Yes,scrollbars=Yes,status=No,titlebar=No,toolbar=No,dependent=Yes");

	pluginswin.focus();
	pluginswin.document.write('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">');
	pluginswin.document.writeln('<html><head><title>Installed Plugins</title></head><body style="font-family:sans-serif;font-size:9pt">');

	if (sound_plugin == "") pluginswin.document.write("NO Plugin for \"audio/x-wav\" available! Install 'QuickTime 7' or newer!<br>"); // no sound!!!
	else pluginswin.document.write("Enabled Plugin for \"audio/x-wav\" available: <b>" + sound_plugin + "</b><br>");
	var pdf_plugin = "";
	if (navigator.userAgent.toLowerCase().indexOf('msie') >= 0)  {	// try for IE Win
		do {
			var Acro7; var Acro6; var Acro5; var Acro4; var Acro3; 
			try { Acro7 = new ActiveXObject('acroPDF.PDF.1'); pdf_plugin = "Acrobat Reader 7"; break; } catch(e){}
			try { Acro6 = new ActiveXObject('PDF.PdfCtrl.6'); pdf_plugin = "Acrobat Reader 6"; break; } catch(e){}
			try { Acro5 = new ActiveXObject('PDF.PdfCtrl.5'); pdf_plugin = "Acrobat Reader 5"; break; } catch(e){}
			try { Acro4 = new ActiveXObject('PDF.PdfCtrl.4'); pdf_plugin = "Acrobat Reader 4"; break; } catch(e){}
			try { Acro3 = new ActiveXObject('PDF.PdfCtrl.3'); pdf_plugin = "Acrobat Reader 3"; break; } catch(e){}
		} while(false);
	}
	else {
		if (navigator.mimeTypes["application/pdf"] && navigator.mimeTypes["audio/x-wav"].enabledPlugin != null) {
			pdf_plugin = navigator.mimeTypes['application/pdf'].enabledPlugin.name;
		}
	}
	if (pdf_plugin == "") pluginswin.document.write("NO Plugin for PDF available! Install 'Acrobat Reader 7' or newer!<br>");
	else pluginswin.document.write("Enabled Plugin for PDF available: <b>" + pdf_plugin + "</b><br>");

	pluginswin.document.writeln("<br>");
	pluginswin.document.writeln('<table border="1" cellspacing="0" cellpadding="2" style="font-family:sans-serif;font-size:9pt">');
	for (var i = 0; i < navigator.plugins.length; i++) {
	  pluginswin.document.writeln("<tr>");
	  pluginswin.document.writeln("<td>" + navigator.plugins[i].name + "<\/td>");
	  pluginswin.document.writeln("<td>" + navigator.plugins[i].description + "<\/td>");
	  pluginswin.document.writeln("<td>" + navigator.plugins[i].filename + "<\/td>");
	  pluginswin.document.writeln("<\/tr>");
	}
	pluginswin.document.writeln("<\/table>");

	pluginswin.document.writeln("</body></html>");
	pluginswin.document.close();
}


function get_plugin_fullname(the_name) {
	if (!the_name || (the_name == "")) return ("");
	for (var i = 0; i < navigator.plugins.length; i++) {
	  if (navigator.plugins[i].name.toLowerCase().indexOf(the_name.toLowerCase()) >= 0) {
	  	return(navigator.plugins[i].name);
	  }
	}
	return (the_name);
}



/**************************************************************
 detect players
 */

var agt=navigator.userAgent.toLowerCase();
var ie = (agt.indexOf("msie") != -1);
var ns = (navigator.appName.indexOf("Netscape") != -1);
var win = ((agt.indexOf("win")!=-1) || (agt.indexOf("32bit")!=-1));
var mac = (agt.indexOf("mac")!=-1);

var pluginlist = "";
function detect_a_player(ClassID,name) {
	var plugin = "";
	if (ie && win) {
		plugin = detectIE(ClassID,name);
	}
	
	if (ns || !win) {
		nse = "";
		for (var i=0;i<navigator.mimeTypes.length;i++) nse += navigator.mimeTypes[i].type.toLowerCase();
		plugin = detectNS(ClassID,name);
	}
	if (plugin.length > 0) plugin = plugin.substring(0,plugin.length-1);
	
	return plugin;
}

/*This script detects the following:
	Flash
	Windows Media Player
	Java
	Shockwave
	RealPlayer
	QuickTime
	Acrobat Reader
	SVG Viewer
//SAMPLE USAGE- detect "Flash"
//if (pluginlist.indexOf("Flash")!=-1)
//document.write("You have flash installed")
*/
function detect_players() {
	if (ie && win) {
		pluginlist = detectIE("Adobe.SVGCtl","SVG Viewer") 
					+ detectIE("SWCtl.SWCtl.1","Shockwave Director") 
					+ detectIE("ShockwaveFlash.ShockwaveFlash.1","Shockwave Flash") 
					+ detectIE("rmocx.RealPlayer G2 Control.1","RealPlayer") 
					+ detectIE("QuickTimeCheckObject.QuickTimeCheck.1","QuickTime") 
					+ detectIE("MediaPlayer.MediaPlayer.1","Windows Media Player") 
					+ detectIE("PDF.PdfCtrl.5","Acrobat Reader");
	}
	
	if (ns || !win) {
		nse = "";
		for (var i=0;i<navigator.mimeTypes.length;i++) nse += navigator.mimeTypes[i].type.toLowerCase();
		pluginlist = detectNS("image/svg-xml","SVG Viewer") 
					+ detectNS("application/x-director","Shockwave Director") 
					+ detectNS("application/x-shockwave-flash","Shockwave Flash") 
					+ detectNS("audio/x-pn-realaudio-plugin","RealPlayer") 
					+ detectNS("video/quicktime","QuickTime Video") 
					+ detectNS("audio/x-wav","QuickTime Audio") 
					+ detectNS("application/x-mplayer2","Windows Media Player") 
					+ detectNS("application/pdf","Acrobat Reader");
	}
	
	pluginlist += navigator.javaEnabled() ? "Java," : "";
	if (pluginlist.length > 0) pluginlist = pluginlist.substring(0,pluginlist.length-1);
	return pluginlist;
}

function detectNS(ClassID,name) {
	n = "";
	if (nse.indexOf(ClassID) != -1) if (navigator.mimeTypes[ClassID].enabledPlugin != null) n = name+",";
	return n;
}


function detectIE(ClassID,name) {
	result = false;

	if (ClassID.toLowerCase().indexOf("quicktime") != -1) result = detectQuickTimeActiveXControl();
	else result = detectActiveXControl(ClassID);
//	document.write('<SCRIPT LANGUAGE=VBScript>\n on error resume next \n result = IsObject(CreateObject("' + ClassID + '"))</SCRIPT>\n');
	if (result) return name+',';
	else return '';
}

// Here we write out the VBScript block for MSIE Windows
if ((navigator.userAgent.indexOf('MSIE') != -1) && (navigator.userAgent.indexOf('Win') != -1)) {
    document.writeln('<script language="VBscript">');

    document.writeln('\'do a one-time test for a version of VBScript that can handle this code');
    document.writeln('detectableWithVB = False');
    document.writeln('If ScriptEngineMajorVersion >= 2 then');
    document.writeln('  detectableWithVB = True');
    document.writeln('End If');

    document.writeln('\'this next function will detect most plugins');
    document.writeln('Function detectActiveXControl(activeXControlName)');
    document.writeln('  on error resume next');
    document.writeln('  detectActiveXControl = False');
    document.writeln('  If detectableWithVB Then');
    document.writeln('     detectActiveXControl = IsObject(CreateObject(activeXControlName))');
    document.writeln('  End If');
    document.writeln('End Function');

    document.writeln('\'and the following function handles QuickTime');
    document.writeln('Function detectQuickTimeActiveXControl()');
    document.writeln('  on error resume next');
    document.writeln('  detectQuickTimeActiveXControl = False');
    document.writeln('  If detectableWithVB Then');
    document.writeln('    detectQuickTimeActiveXControl = False');
    document.writeln('    hasQuickTimeChecker = false');
    document.writeln('    Set hasQuickTimeChecker = CreateObject("QuickTimeCheckObject.QuickTimeCheck.1")');
    document.writeln('    If IsObject(hasQuickTimeChecker) Then');
    document.writeln('      If hasQuickTimeChecker.IsQuickTimeAvailable(0) Then ');
    document.writeln('        detectQuickTimeActiveXControl = True');
    document.writeln('      End If');
    document.writeln('    End If');
    document.writeln('  End If');
    document.writeln('End Function');

    document.writeln('</scr' + 'ipt>');
}



function we_are_loaded() { return true; }

////########################### REST TO DELETE #########################
/*
var my=0, mx=0;		// current mouse position
// ****** detect browser
var browser_name;
var Pos = mx + "/" + my;
var browser_version=navigator.appVersion;
var userAgent=navigator.userAgent;
do { // detect browser
	if (navigator.appName.toUpperCase().indexOf("EXPLORER") > -1) { browser_name='EXPLORER'; break; }
	if (userAgent.toUpperCase().indexOf("SAFARI") > -1) { browser_name='NETSCAPE'; break; }
	if (userAgent.toUpperCase().indexOf("FIREFOX") > -1) { browser_name='FIREFOX'; break; }
	browser_name='NETSCAPE'; break; // assume Mozilla Gecko
} while(false);
do { // detect operating system
	if (userAgent.toUpperCase().indexOf("WINDOWS") > -1) { operating_system="WIN"; break; }
	if (userAgent.toUpperCase().indexOf(" OS X") > -1) { operating_system="OSX"; break; }
	else operating_system="MAC";
} while(false);

function nMouse(event){
	my=event.pageY; mx=event.pageX;
	//pos = 'Screen: ' +  mx + "/" + my;
	//document.getElementById('info').innerHTML = pos;
	return true;
}
function iMouse() {
	my=event.y; mx=event.x;
	//pos = 'Screen: ' +  mx + "/" + my;
	//document.getElementById('info').innerHTML = pos;
	return true;
}

do {
	if (browser_name=='NETSCAPE' || browser_name=='FIREFOX') {
		document.onmousemove=nMouse;
		break;
	}
	// all others
	document.onmousemove=iMouse;
} while(false);
*/



