/* Javascript

	flip_book makes a flip book of images that will rotate
	by themselves or can be directed by buttons 
	
	Needs to have moose_over.js loaded to work */

	
var flip_time = 4000;
var talk_time = flip_time / 4;
var image_prefix = "./images/slide_images/"
var image_suffix = ".jpg"
var image_sub = ""
var rolling = false;
var glob_list = new Array();
var glob_talk = new Array()
var glob_target;
var nothing_image;
var nothing_str = "nothing"
var flip_bookJS;
var not_loaded = true;

// flag to turn talking on or off
var glob_talk_on = true;

var info_image;
var on_info = false;

/* what image number are we on? */
var count = 0;
var proj_count = 0;

var save_list;
var global_status_window;


/* Images */
var graphic_list = new Array (
	"slide_remote_stop",
	"slide_remote_play"
)

var proj_list = new Array (
	"slide_projector1",
	"slide_projector2",
	"slide_projector3"
)

var proj_ref = new Array()


function set_flip(pref, sub, suff, time) {
	if (pref) image_prefix = pref;
	if (sub) image_sub = sub;
	if (suff) image_suffix = suff;
	if (time) {
		flip_time = time;
		talk_time = flip_time / 4;
	}	
}

function init_book(image_list, target_spot, time) {
	count = -1
	if (time) flip_time = time
	glob_target = target_spot
	
	/* Load talk bubbles */
	glob_talk = preload_list2(image_list, image_prefix, "_talk", ".GIF")
	
	/* Load remote graphics */
	preload_list2(graphic_list, "./images/flip_book_images/", 0, ".GIF")
	
	/* Load projector graphics */
	proj_ref = get_list(proj_list, "./images/flip_book_images/", 0, ".GIF")
	
	/* Load the nothing image */
	nothing_image = load_image(nothing_str, "./images/flip_book_images/", 0, ".GIF")
	
	/* Load information image */
	info_image = load_image("information", "./images/flip_book_images/", 0, ".GIF")
	
	/* Load slide images */
	glob_list = preload_list2(image_list, image_prefix, image_sub, image_suffix);
	
	// Layer detection
	if (document.layers) global_status_window = document.status_layer
	else global_status_window = make_status_window()

	is_ready(glob_list)
}

function is_ready(list) {
	save_list = list
	
	ready = true;
	not_done = 0
	are_done = 0
	
	// Check how many images have been completely loaded
	for (var i = 0; i < list.length; i++) {
		if (!list[i].complete) {
			not_done++;
			ready = false;
		}
		else are_done++;
	}
	
	// Update the status bar
	update_status(are_done, (not_done + are_done))

	if (!ready) setTimeout("is_ready(save_list)", 1)
	
	else {
		not_loaded = false;
		close_status()
		self.focus()
		rolling = true;
		advance();
	}
}


function roll_book() {
	if (not_loaded) return;
	
	if (rolling) {
	on_info = false;
	advance();
	setTimeout("roll_book()", flip_time);
	}	
}

function toggle_book() {
	if (rolling) stop_book();
	else go_book();
}

function next_page() {
	if (rolling) stop_book();
	advance()
}

function prev_page() {
	if (rolling) stop_book();
	reverse();
}

function book_info() {
	on_info = true;
	if (rolling) stop_book();
	document [target].src = info_image.src;	
	nothing_target("talk")
}

function show_options(hide) {
	if (hide) document.option_layer.visibility = "HIDE"
	else document.option_layer.visibility = "SHOW"
}

function toggle_talk() {
	if (glob_talk_on) glob_talk_on = false
	else glob_talk_on = true
	show_options(1)
}

function book_speed(form) {
	speed = form.speed.selectedIndex
	switch (speed) {	
	  case 0:
		flip_time = 8000
		break;
	  case 1:
		flip_time = 4000
		break;
	  case 2:
		flip_time = 2000
		break;
	  default:
		flip_time = 1000
		break;	
  } 
  talk_time = flip_time / 4
  show_options(1)
}


function advance() {
	if (not_loaded) return;
	
	on_info = false;
	nothing_target("talk");
	
	++count;
	if (!glob_list[count]) {
		count = 0
	}
//	for help reporting errors leave the status window open above and use the following:
//	global_status_window.document.status_form.percentage.value = glob_target
	
	image_target2(glob_list[count], glob_target);
	if (glob_talk_on) setTimeout("get_talk()", talk_time);
	flip_proj(1)
}

function reverse() {
	if (not_loaded) return;
	
	on_info = false;
	nothing_target("talk");
	
	--count;
	if (count < 0) {
		count = (glob_list.length - 1)
	}
	image_target2(glob_list[count], glob_target)
	if (glob_talk_on) setTimeout("get_talk()", talk_time);
	flip_proj(0)
}

function stop_book() {
	rolling = false;
	slide_target(1)
}


function go_book() {
	if (not_loaded) return;
	
	rolling = true;
	slide_target(0);
	roll_book();
}

function get_talk() {
	if (!on_info) image_target2(glob_talk[count], "talk");
}

function slide_target(value) {
	if (value) {
		document.remote.src = slide_remote_play.src;
	} 
	else {
		document.remote.src = slide_remote_stop.src;
	}	
}

/* From a text-specified array */
function image_target(image, target, sub) {
	if (!sub) sub = image_sub
	img_spot = eval(image + sub + ".src");
	document [target].src = img_spot;
}

/* From an Array of Images */
function image_target2(image, target) {
	document [target].src = image.src
}


function nothing_target(target) {
	document [target].src = nothing_image.src	
}

function flip_proj(dir) {
	document.projector.src = proj_ref[proj_count].src
	if (dir) ++proj_count;
	else --proj_count;
	if (proj_count > 2) proj_count = 0
	if (proj_count < 0) proj_count = 2
}

// Open A Flip Book Window
// window features constants
var DIRECTORIES = "directories";  // show directory buttons
var LOCATION    = "location";     // show location bar
var MENUBAR     = "menubar";      // show menu bar
var RESIZABLE   = "resizable";    // make window resizable
var SCROLLBARS  = "scrollbars";   // show scrollbars (if needed)
var STATUS      = "status";       // show status bar
var TOOLBAR     = "toolbar";      // show toolbar
var CENTER      = "center";       // center window
var UPPERLEFT   = "upperleft";    // display window in upper-left corner
var UPPERRIGHT  = "upperright";   // display window in upper-right corner
var jsName = "flip_bookJS"
var htmlName = "flip_bookHTML"

// open a new window with specified properties
function open_book(layer_url, nolayer_url, width, height, pass_var)
  {
  var is4up = true;   // for CENTER, UPPERLEFT, UPPERRIGHT features
  var features = "";  // string to hold features argument

  if (parseInt(navigator.appVersion) < 4)  // set is4up to true/false
    is4up = false;
	
   // Layer detection
	if (document.layers) url = layer_url
	else url = nolayer_url

  // build features string
  features += "width=" + width + ",";     // width
  features += "height=" + height + ",";   // height
  for (var i=4; i<arguments.length; i++)  // additional (optional) features
    {
    if (arguments[i] == CENTER && is4up)  // center window
      {
      features += "screenx=" + (screen.width-width) / 2 + ",";
      features += "left=" + (screen.width-width) / 2 + ",";
      features += "screeny=" + (screen.height-height) / 2 + ",";
      features += "top=" + (screen.height-height) / 2 + ",";
      }
    if (arguments[i] == UPPERLEFT && is4up)  // upper-left window
      {
      features += "screenx=0,left=0,screeny=0,top=0";
      }
    if (arguments[i] == UPPERRIGHT && is4up)  // upper-right window
      {
      features += "screenx=" + (screen.width-width-(screen.width/100)) + ",";
      features += "left=" + (screen.width-width-(screen.width/100)) + ",";
      features += "screeny=0,top=0,";
      }
    else  // all additional features besides CENTER, UPPERLEFT, UPPERRIGHT
      {
      features += arguments[i] + "=1,";
      }
    }
  flip_bookJS = window.open(url, 'flip_window', features);
  flip_bookJS.document.passed_var = pass_var
  }
  
function make_status_window() {
	gsw = util_window("", "status_html", 200, 120)
	gsw.win_parent = window
	gsw.document.write("<HTML><HEADER><TITLE>Loading Status</TITLE><BODY BGCOLOR=\"#000000\">")
	gsw.document.write("<CENTER><FORM NAME=\"status_form\"><FONT COLOR=\"#FFFFFF\">")
	gsw.document.write("<H3>Loading<BR><INPUT TYPE=TEXT NAME=\"percentage\" VALUE=0 WIDTH=18><BR>")
	gsw.document.write("% Finished</H3></FONT><INPUT TYPE=\"BUTTON\" VALUE=\"Cancel\"")
	gsw.document.write(" onClick=\"window.win_parent.close();window.close()\">")
	gsw.document.write("</FORM></CENTER></BODY></HTML>")
	return gsw
}

function update_status(count, total) {
	load_per = Math.round(count / total * 100)
	iter = Math.round(count / total * 20)
	per_text = String(load_per)
	for (i=0; i < iter;i++) {
		per_text += "|";
	}
	
	// Layer detection
	if (document.layers) global_status_window.document.status_form.percentage.value = per_text
	else global_status_window.status_form.percentage.value = per_text	
}

function close_status() {
	// Layer detection
	if (document.layers) global_status_window.visibility = "HIDE"
	else global_status_window.close()
}


function util_window(url, title, width, height) {
	features = "width=" + width + ",";
	features += "height=" + height + ",";
	/* Center the window */
	features += "screenx=" + (screen.width-width) / 2 + ",";
    features += "left=" + (screen.width-width) / 2 + ",";
    features += "screeny=" + (screen.height-height) / 2 + ",";
    features += "top=" + (screen.height-height) / 2 + ",";
	return window.open(url, title, features)	
}



