/**
* Create a new Exception object.
* name: The name of the exception.
* message: The exception message.
*/
function Exception(name, message)
{
if (name)
this.name = name;
if (message)
this.message = message;
}
/**
* Set the name of the exception.
*/
Exception.prototype.setName = function(name)
{
this.name = name;
}
/**
* Get the exception's name.
*/
Exception.prototype.getName = function()
{
return this.name;
}
/**
* Set a message on the exception.
*/
Exception.prototype.setMessage = function(msg)
{
this.message = msg;
}
/**
* Get the exception message.
*/
Exception.prototype.getMessage = function()
{
return this.message;
}
/**
* Generates a browser-specific Flash tag. Create a new instance, set whatever
* properties you need, then call either toString() to get the tag as a string, or
* call write() to write the tag out.
*/
/**
* Creates a new instance of the FlashTag.
* src: The path to the SWF file.
* width: The width of your Flash content.
* height: the height of your Flash content.
*/
function FlashTag(src, width, height)
{
this.src = src;
this.width = width;
this.height = height;
this.version = '7,0,14,0';
this.id = null;
this.bgcolor = 'ffffff';
this.flashVars = null;
}
/**
* Sets the Flash version used in the Flash tag.
*/
FlashTag.prototype.setVersion = function(v)
{
this.version = v;
}
/**
* Sets the ID used in the Flash tag.
*/
FlashTag.prototype.setId = function(id)
{
this.id = id;
}
/**
* Sets the background color used in the Flash tag.
*/
FlashTag.prototype.setBgcolor = function(bgc)
{
this.bgcolor = bgc;
}
/**
* Sets any variables to be passed into the Flash content.
*/
FlashTag.prototype.setFlashvars = function(fv)
{
this.flashVars = fv;
}
/**
* Get the Flash tag as a string.
*/
FlashTag.prototype.toString = function()
{
var ie = (navigator.appName.indexOf ("Microsoft") != -1) ? 1 : 0;
var flashTag = new String();
if (ie)
{
flashTag += '';
}
else
{
flashTag += '';
}
return flashTag;
}
/**
* Write the Flash tag out. Pass in a reference to the document to write to.
*/
FlashTag.prototype.write = function(doc)
{
doc.write(this.toString());
}
/**
* The FlashSerializer serializes JavaScript variables of types object, array, string,
* number, date, boolean, null or undefined into XML.
*/
/**
* Create a new instance of the FlashSerializer.
* useCdata: Whether strings should be treated as character data. If false, strings are simply XML encoded.
*/
function FlashSerializer(useCdata)
{
this.useCdata = useCdata;
}
/**
* Serialize an array into a format that can be deserialized in Flash. Supported data types are object,
* array, string, number, date, boolean, null, and undefined. Returns a string of serialized data.
*/
FlashSerializer.prototype.serialize = function(args)
{
var qs = new String();
for (var i = 0; i < args.length; ++i)
{
switch(typeof(args[i]))
{
case 'undefined':
qs += 't'+(i)+'=undf';
break;
case 'string':
qs += 't'+(i)+'=str&d'+(i)+'='+escape(args[i]);
break;
case 'number':
qs += 't'+(i)+'=num&d'+(i)+'='+escape(args[i]);
break;
case 'boolean':
qs += 't'+(i)+'=bool&d'+(i)+'='+escape(args[i]);
break;
case 'object':
if (args[i] == null)
{
qs += 't'+(i)+'=null';
}
else if (args[i] instanceof Date)
{
qs += 't'+(i)+'=date&d'+(i)+'='+escape(args[i].getTime());
}
else // array or object
{
try
{
qs += 't'+(i)+'=xser&d'+(i)+'='+escape(this._serializeXML(args[i]));
}
catch (exception)
{
throw new Exception("FlashSerializationException",
"The following error occurred during complex object serialization: " + exception.getMessage());
}
}
break;
default:
throw new Exception("FlashSerializationException",
"You can only serialize strings, numbers, booleans, dates, objects, arrays, nulls, and undefined.");
}
if (i != (args.length - 1))
{
qs += '&';
}
}
return qs;
}
/**
* Private
*/
FlashSerializer.prototype._serializeXML = function(obj)
{
var doc = new Object();
doc.xml = '';
this._serializeNode(obj, doc, null);
doc.xml += '';
return doc.xml;
}
/**
* Private
*/
FlashSerializer.prototype._serializeNode = function(obj, doc, name)
{
switch(typeof(obj))
{
case 'undefined':
doc.xml += '';
break;
case 'string':
doc.xml += ''+this._escapeXml(obj)+'';
break;
case 'number':
doc.xml += ''+obj+'';
break;
case 'boolean':
doc.xml += '';
break;
case 'object':
if (obj == null)
{
doc.xml += '';
}
else if (obj instanceof Date)
{
doc.xml += ''+obj.getTime()+'';
}
else if (obj instanceof Array)
{
doc.xml += '';
for (var i = 0; i < obj.length; ++i)
{
this._serializeNode(obj[i], doc, null);
}
doc.xml += '';
}
else
{
doc.xml += '';
for (var n in obj)
{
if (typeof(obj[n]) == 'function')
continue;
this._serializeNode(obj[n], doc, n);
}
doc.xml += '';
}
break;
default:
throw new Exception("FlashSerializationException",
"You can only serialize strings, numbers, booleans, objects, dates, arrays, nulls and undefined");
break;
}
}
/**
* Private
*/
FlashSerializer.prototype._addName= function(name)
{
if (name != null)
{
return ' name="'+name+'"';
}
return '';
}
/**
* Private
*/
FlashSerializer.prototype._escapeXml = function(str)
{
if (this.useCdata)
return '';
else
return str.replace(/&/g,'&').replace(/ 1)
{
var justArgs = new Array();
for (var i = 1; i < arguments.length; ++i)
{
justArgs.push(arguments[i]);
}
qs += ('&' + this.flashSerializer.serialize(justArgs));
}
var divName = '_flash_proxy_' + this.uid;
if(!document.getElementById(divName))
{
var newTarget = document.createElement("div");
newTarget.id = divName;
document.body.appendChild(newTarget);
}
var target = document.getElementById(divName);
var ft = new FlashTag(this.proxySwfName, 1, 1);
ft.setVersion('6,0,65,0');
ft.setFlashvars(qs);
target.innerHTML = ft.toString();
}
/**
* This is the function that proxies function calls from Flash to JavaScript.
* It is called implicitly.
*/
FlashProxy.callJS = function()
{
var functionToCall = eval(arguments[0]);
var argArray = new Array();
for (var i = 1; i < arguments.length; ++i)
{
argArray.push(arguments[i]);
}
functionToCall.apply(functionToCall, argArray);
}