var base_uri;
var doc_name;
var current_item;
var item_count;
var items_per_page;
var sound_object = new SoundPlayer(1);
var image_object = new ImageDisplayer();
var tracking_agent = new TrackingAgent(); 
var img_preloads = new Array();
var snd_preloads = new Array();
var solutions = "";

function initialize() {
	// stupid ie4
	if(!document.getElementById && document.all) {
		document.getElementById = function(id) { return document.all[id] };
	}
	base_uri = document.forms[0].b.value;
	doc_name = document.forms[0].d.value;
	current_item = parseInt(document.forms[0].i.value);
	item_count = parseInt(document.forms[0].n.value);
	items_per_page = parseInt(document.forms[0].g.value);
	tracking_agent.Load(document.forms[0].r.value, document.forms[0].s.value);
	preloadResources();
}

// stores responses selected by user
function TrackingAgent() {

	var m_responses = new Array();
	var m_solutions = new Array();
	
	function TrackingAgent_Load( responses, solutions ) {
		if (responses.indexOf("=") != -1) {
			var v = 	responses.split(";");
			for(var i = 0; i < v.length; i++) {
				v[i] = v[i].split("=");
			}
			m_responses = v;
		}
		if (solutions.indexOf("=") != -1) {
			var v = 	solutions.split(";");
			for(var i = 0; i < v.length; i++) {
				v[i] = v[i].split("=");
			}
			m_solutions = v;
		}
	}
	
	function TrackingAgent_UpdateResponse( type, question, value, add ) {
		r = new Array();
		for(i = 0; i < m_responses.length; i++) {
			if (m_responses[i][0] == question && m_responses[i][1] == value) { 
				continue;
			}
			if(m_responses[i][0] != question || type == "checkbox") {
				r[r.length] = m_responses[i];
			}
		}
		if (add) r[r.length] = new Array(question, value);
		m_responses = r;
	}
	
	function TrackingAgent_Evaluate() {
		var total = 0;
		for(var i = 0; i < m_solutions.length; i++) {
			var correct = (FindUserResponse(m_solutions[i][0]) == m_solutions[i][1]) ? 1 : 0;
			total += correct;
			var e = document.getElementById(m_solutions[i][0] + "_checkbutton");
			if(e != null) {
				e.src = "../images/checkbtn" + correct + ".gif";
			}
			var r = document.getElementById(m_solutions[i][0] + "_" + m_solutions[i][1] + "_response");
			if(r != null) {
				r.className = "correct";
			}
		}
		alert("You got " + total + " out of " + m_solutions.length + " correct.");
	}
	
	function FindUserResponse(id) {
		for(var i = 0; i < m_responses.length; i++) {
			if(m_responses[i][0] == id) return m_responses[i][1];
		}
		return null;
	}
	
	function TrackingAgent_toString() {
		var s = "";
		for(var i = 0; i < m_responses.length; i++) {
			s += (i == 0 ? "" : ";") + m_responses[i][0] + "=" + m_responses[i][1];
		}
		return s;
	}
	
	TrackingAgent.prototype.Load = TrackingAgent_Load;
	TrackingAgent.prototype.UpdateResponse = TrackingAgent_UpdateResponse;
	TrackingAgent.prototype.Evaluate = TrackingAgent_Evaluate;
	TrackingAgent.prototype.toString = TrackingAgent_toString;
}
		
// form control event handler
function updateResponse(t, q, v, b) {
	tracking_agent.UpdateResponse(t, q, v, b);
}

// evaluate user responses
function evalAnswers() {
	tracking_agent.Evaluate();
}

// sound playback
function SoundPlayer(n) {

	function SoundPlayer_playSound1(u) {
		var p = document.getElementById("soundbox");
		p.style.display = "block";
		p.innerHTML = "<embed bgcolor=\"#dddddd\" src=\"" + u + "\" type=\"audio/x-mpeg\" width=\"300\" height=\"45\" autostart=\"true\"></embed>";
	}

	function SoundPlayer_playSound2(u) {
		var p = document.getElementById("soundbox");
		p.style.display = "block";
		p.innerHTML = "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"" +
								"codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,79,0\"" +
								"width=\"300\" height=\"45\" id=\"sound\" align=\"\">" +
								"<param name=\"movie\" value=\"sound.swf?gsound=" + u + "\">" +
								"<param name=\"bgcolor\" value=\"#FFFFFF\">" +
								"<embed src=\"sound.swf?gsound=" + u + "\"" +
								"quality=\"high\" bgcolor=\"#FFFFFF\" width=\"300\" height=\"45\" name=\"sound\" align=\"\"" +
								"type=\"application/x-shockwave-flash\"" +
								"pluginspage=\"http://www.macromedia.com/go/getflashplayer\">" +
							"</object>";
	}

	function SoundPlayer_preloadSound() {
		var p = document.getElementById("preloads");
		var a = "";
		for(var i = 0; i < snd_preloads.length; i++) {
			a += (i ? "&amp;" : "?") + "s" + i + "=" + snd_preloads[i];
		}
		p.style.display = "block";
		p.innerHTML = "<object classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"" +
								"codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,79,0\"" +
								"width=\"1\" height=\"1\" id=\"sound\" align=\"\">" +
								"<param name=\"movie\" value=\"pl_sound.swf" + a + "\">" +
								"<param name=\"bgcolor\" value=\"#FFFFFF\">" +
								"<embed src=\"pl_sound.swf" + a + "\"" +
								"quality=\"high\" bgcolor=\"#FFFFFF\" width=\"300\" height=\"45\" name=\"sound\" align=\"\"" +
								"type=\"application/x-shockwave-flash\"" +
								"pluginspage=\"http://www.macromedia.com/go/getflashplayer\">" +
							"</object>";
	}
	
	switch (n) {
		case 1 : SoundPlayer.prototype.playSound = SoundPlayer_playSound1; break;
		case 2 : SoundPlayer.prototype.playSound = SoundPlayer_playSound2; break;
	}
	SoundPlayer.prototype.preloadSound = SoundPlayer_preloadSound;
}

function ImageDisplayer() {
	function ImageDisplayer_showImage(u) {
		var p = document.getElementById("mediabox");
		p.style.display = "block";
		p.innerHTML = "<img src=\"" + u + "\" alt=\"\" border=\"0\" \\>";
	}
	ImageDisplayer.prototype.showImage = ImageDisplayer_showImage;
}

// go to page
function gotoPage(item, name, evaluate) {
	document.forms[0]["i"].value = item < 1 ? 1 : item;
	document.forms[0]["e"].value = evaluate ? 1 : 0;
	document.forms[0]["f"].value = item > item_count ? 1 : 0;
	document.forms[0]["r"].value = tracking_agent.toString();
	document.forms[0].submit();
}

// next/previous page
function turnPage(n) {
	var item = Math.min(current_item + (n * items_per_page), item_count + 1);
	gotoPage(item, false, 0);
}

// events ---------------------------------------------------------

// global preload
function pl(u, p) {
	switch(p) {
		case "bitmap" :
			img_preloads[img_preloads.length] = newImage(base_uri + u);
			break;
		case "sound" :
			snd_preloads[snd_preloads.length] = base_uri + u;
			break;
	}
}

// global mouseover
function mo(u, p) {
	switch(p) {
		case "feedback" :
			var p = document.getElementById(u);
			var t = document.body.scrollTop;
			// set t = 0 for safari(?)...
			p.style.display = "block";
			p.style.position = "absolute";
			p.style.pixelLeft = event.clientX - 300;
			p.style.pixelTop = event.clientY + t;
			break;
	}
}

// global mousedown
function md(u, p) {
}

// global onclick
function oc(u, p) {
	switch(p) {
		case "bitmap"   : image_object.showImage(base_uri + u); break;
		case "file"     : window.open(base_uri + u, "resource"); break;
		case "http"     : window.open("http://" + u, "resource"); break;
		case "page"     : gotoPage(0, u, 0); break;
		case "sound"    : sound_object.playSound(base_uri + u); break;
		default         : window.open(u, "resource"); break;
	}
	return false;
}

function ochs(clicked) {
	var e = window.event ? event : clicked;
	selectArea(this.name, this.coords, null, e);
	updateResponse("map", this.name, this.coords, true);
	return false;
}

// show selected hotspot
function selectArea(name, area, correct, clicked) {
	var img = document.getElementById("image_" + name);
	var r = area.split(",");
	var x, y;
	if(clicked) {
		x = clicked.clientX + document.documentElement.scrollLeft - 10;
		y = clicked.clientY + document.documentElement.scrollTop - 10;
	}
	else {
		x = parseInt(r[0]) + img.offsetLeft + img.offsetParent.offsetLeft + document.documentElement.scrollLeft + (r[2]-r[0])/2 - 10;
		y = parseInt(r[1]) + img.offsetTop + img.offsetParent.offsetTop + img.offsetParent.offsetParent.offsetTop + document.documentElement.scrollTop + (r[3]-r[1])/2 - 10;
	}
	var f = (correct == null) ? "cross" : (correct ? "crossc" : "crossw");
	var h = document.getElementById("hotspot_" + name);
	h.style.left = x + "px";
	h.style.top = y + "px";
	h.style.display = "block";
	h.innerHTML = "<img src=\"images/" + f + ".gif\" alt=\"\" border=\"0\">";
}

// global mouseout
function mt(u, p) {
	switch(p) {
		case "feedback" :
			var p = document.getElementById(u);
			if (p) p.style.display = "none";
			break;
	}
}

// try to load sounds into cache for faster playback
function preloadResources() {
	if(snd_preloads.length > 0) {		  
		sound_object.preloadSound();
	}
}

// generic image loader
function newImage(arg) {
	var g = new Image();
	g.src = arg;
	return g;
}


