/* 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 flip_book_prefix = "./images/flip_book_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;

// Places where we need to do stuff- modified for CSS layers
var glScreenLayer = "screenLayer";
var glScreenTarget
var	glRemoteLayer = "remoteLayer";
var glRemoteTarget
var glTalkLayer = "talkLayer";
var glTalkTarget
var glProjectorLayer = "projectorLayer";
var glProjectorTarget
var glOptionsLayer = "options";
var glOptionsTarget
var glStatusLayer = "status";
var glStatusTarget

// detect browser for layer reference
var layerRef;
var styleRef;
if (navigator.appName == 'Netscape') // really need to check version also
{
	if (document.layers) {
		layerRef = "document.layers";
		styleRef = "";
		docRef = ".document."
	}
	else alert('Requires Netscape Version 4.0\n or later to function.')
}
else
{
	if (document.all) {
	layerRef = "document.all"; 
	styleRef = ".style";
	docRef = ""
	}
	else alert('Requires Internet Explorer 4.5\n or later to function.')
}

/* 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) {
	// If this hasn't been defined then we aren't working
	// with a CSS aware browser and we should get out now!
	if (!layerRef) window.close()
	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);
	
	// Differences between NS and IE CSS force this next nonsense :)
	glStatusTarget = get_target(glStatusLayer, 'status_form')
	glOptionsTarget = get_target(glOptionsLayer, 'options_form')
	glScreenTarget = get_target(glScreenLayer,'screen')
	glRemoteTarget = get_target(glRemoteLayer, 'remote')
	glTalkTarget = get_target(glTalkLayer, 'talk')
	glProjectorTarget = get_target(glProjectorLayer, 'projector')
	
	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();
	show_layer('infoLayer')
}

function hide_info() {
	hide_layer('infoLayer')
}

function show_options(hide) {
	if (hide) hide_layer('options')
	else show_layer('options')
}

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(glTalkTarget);
	
	++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], glScreenTarget);
	if (glob_talk_on) setTimeout("get_talk()", talk_time);
	flip_proj(1)
}

function reverse() {
	if (not_loaded) return;
	
	on_info = false;
	nothing_target(glTalkTarget);
	
	--count;
	if (count < 0) {
		count = (glob_list.length - 1)
	}
	image_target2(glob_list[count], glScreenTarget)
	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], glTalkTarget);
}

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

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

function nothing_target(target) {
	target.src = nothing_image.src	
}


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 += "|";
	}
	glStatusTarget.percentage.value = per_text
}

function close_status() {
	hide_layer('status')
}

function get_target(layer, target) {
	return eval(layerRef+'["'+layer+'"]'+'.document.'+target)
}

function show_layer(which)
{
  eval(layerRef+'["'+which+'"]'+styleRef+'.visibility="visible"');
  return false; // don't follow HREF
}

function hide_layer(which)
{
  eval(layerRef+'["'+which+'"]'+styleRef+'.visibility="hidden"');
  return false; // don't follow HREF
}

function flip_proj(dir) {
	glProjectorTarget.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(url, width, height, pass_var)
  {
  var is4up = true;   // for CENTER, UPPERLEFT, UPPERRIGHT features
  var features = "";  // string to hold features argument
  var css_url;

  version = parseInt(navigator.appVersion)
  if (version < 4) {
  	  // set is4up to true/false
    is4up = false;
	css_url = url + ".html"
	
  }
  else css_url = url + "_css.html"
  
	
  // 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(css_url, 'flip_window', features);
  flip_bookJS.document.passed_var = pass_var
  }





