
/************************************************************************
 *																		*
 *		flashtalk.js													*
 *																		*
 *			Handles talking to flash files.								*
 *																		*
 *			To send something, call "flashtalk.send(fName, stuff)"		*
 *																		*
 *																		*
 *		Copyright © 2009 by Josef Guenther								*
 *			All rights reserved.										*
 *																		*
 *			Contact me at:												*
 *			josefguenther@gmail.com										*
 *																		*
 *																		*
 ************************************************************************/



//
// Class
//
var flashtalk = ({
	
	//
	// Variables
	//
	
	flIdArr: [],
	flIntArr: [],
	timesMonitored: 0,
	monitorLength: 500,
	
	
	//
	// Functions
	//
	
	
	init: function ()
	{
		setTimeout("flashtalk.initMonitors()", 300);
	},
	
	initMonitors: function ()
	{
		var flArr, i;
		if (this.timesMonitored > 5) {
			return;
		}
		this.timesMonitored++;
		
		
		// Get all flash
		if (isIE) {
			flArr = document.getElementsByTagName("object");
		} else {
			flArr = document.getElementsByTagName("embed");
		}
		
		// Clear previous monitoring stuff
		for (i = 0; i != this.flIntArr.length; i++) {
			clearInterval(this.flIntArr[i]);
		}
		this.flIdArr = [];
		this.flIntArr = [];
		
		// Start monitoring
		for (i = 0; i != flArr.length; i++) {
			if (isIE) {
				this.flIdArr[i] = [flArr[i].id];
				this.flIntArr[i] = setInterval("flashtalk.flashMonitor('" + flArr[i].id + "'," + i + ")", this.monitorLength);
			} else {
				this.flIdArr[i] = [flArr[i].name];
				this.flIntArr[i] = setInterval("flashtalk.flashMonitor('" + flArr[i].name + "'," + i + ")", this.monitorLength);
			}
		}
		
		// make sure there are flash files with multiple monitorings
		setTimeout("flashtalk.initMonitors()", 500);
	},
	
	//
	// send - Sends data to flash movie specified
	//
	send: function (flName, data)
	{
		for (var i = 0; i != this.flIdArr.length; i++) {
			if (this.flIdArr[i][0] == flName) {
				this.flIdArr[i][2] = data;
				break;
			}
		}
	},
	
	//
	// flashMonitor - This monitors sending/receiving between javascript and flash
	//
	flashMonitor: function (flName, id)
	{
		// SPECIAL: jbox
		if (id === 0) {
			if (!jbox.Ready) {
				return;
			}
		}
		
		
		var m = thisMovie(flName), ret;
		
		if (m) {
			
			if (!this.flIdArr[id][2]) {
				
				// Receiving
				
				try {
					ret = m.getJavaReturn("new");
				}
				catch (err1) {
					return;
				}
				
				if (ret && ret != "done") {
					var send = this.callJavascript(ret, this.flIdArr[id][0]);
					ret = m.getJavaReturn(send);
				}
			} else {
				
				// Sending
				
				try {
					m.getJavaReturn(this.flIdArr[id][2]);
				}
				catch (err2) {
				}
				this.flIdArr[id][2] = null;
			}
		}
	},
	
	
	//
	// callJavascript - Handles the action
	//
	callJavascript: function (param, flName)
	{
		// Params
		var paramArr = param.split("|");
		var action = paramArr[0];
		var paramArg1 = paramArr[1];
		var paramArg2 = paramArr[2];
		var paramArg3 = paramArr[3];
		
		switch (action) {
			case "reloadPage":
				window.location.reload();
			break;
			case "displayInfo":
				// just the regular info
				displayJBox ("jbox_info", paramArg1);
			break;
			case "displayJBox":
				// extended jbox
				displayJBox (paramArg1, paramArg2);
			break;
			case "changePage":
				if (paramArg1 && browsernav.flName) {
					browsernav.changePage(paramArg1, paramArg2, flName);
				}
			break;
			case "changeTitle":
				if (paramArg1 && browsernav.flName) {
					browsernav.setTitle(paramArg1);
				}
			break;
			case "getHash":
				return location.hash;
			case "callFunction":
				callFunction(paramArg1, paramArg2, paramArg3, flName);
			break;
			case "getParam":
				return getParam (paramArg1);
			case "getVariable":
				return getVariable(paramArg1, paramArg2);
			case "changeVariable":
				changeVariable(paramArg1, paramArg2);
			break;
			case "getCookie":
				return getCookie(paramArg1);
			case "setCookie":
				setCookie(paramArg1, paramArg2, paramArg3);
			break;
			case "getURL":
				window.location.href = paramArg1;
			break;
			case "getCurrentURL":
				return location.href;
			case "changeSize":
				
				// change size
				paramArg1 = Number(paramArg1);
				paramArg2 = Number(paramArg2);
				if (paramArg1) {
					thisMovie(flName).width = paramArg1;
				}
				if (paramArg2) {
					thisMovie(flName).height = paramArg2 + 1;
				}
			break;
			case "slideSize":
				
				// change size with a sliding motion
				slideSize(flName, thisMovie(flName).width, thisMovie(flName).height, paramArg1, paramArg2, paramArg3, 0, 0);
			break;
			case "gotoAnchor":
				gotoAnchor (paramArg1, false);
			break;
			case "jumptoAnchor":
				gotoAnchor (paramArg1, true);
			break;
			case "reloadMovie":
				
				var mvName, mvs, tmp;
				
				// get the movie name
				if (!paramArg1) {
					mvName = flName;
				} else {
					mvName = paramArg1;
				}
				
				// Reload movie, based on browser
				if (isIE) {
					// [TODO: this doesn't work for IE]
					mvs = document.getElementById("objectid_" + mvName);
					tmp = mvs.value;
					mvs.value = "none.swf";
					mvs.value = tmp;
				} else {
					mvs = document.getElementById("embedid_" + mvName);
					tmp = mvs.src;
					mvs.src = "none.swf";
					mvs.src = tmp;
				}
				
			break;
			default:
			break;
		}
		
		return "done";
	}
});

