
function Exception(name,message)
{
	if(name)this.name=name;
	if(message)this.message=message;
	}
Exception.prototype.setName=function(name)
{
	this.name=name;
}
Exception.prototype.getName=function()
{
	return this.name;
}
Exception.prototype.setMessage=function(msg)
{
	this.message=msg;
}
Exception.prototype.getMessage=function()
{
	return this.message;
}
function FlashTag(src,width,height,id,bgcolor)
{
	
	this.src=src;
	this.width=width;
	this.height=height;
	this.version='7,0,14,0';
	this.id=id;
	this.allowFullScreen=true;
	this.bgcolor=bgcolor;
	this.flashVars=null;
}
FlashTag.prototype.setVersion=function(v)
{
	this.version=v;
}
FlashTag.prototype.setId=function(id)
{
	this.id=id;
}
FlashTag.prototype.setBgcolor=function(bgc)
{
	this.bgcolor=bgc;
}
FlashTag.prototype.setFlashvars=function(fv)
{
	this.flashVars=fv;
}
FlashTag.prototype.toString=function()
{
	var ie=(navigator.appName.indexOf("Microsoft")!=-1)?1:0;
	var flashTag=new String();
	if(ie){
		flashTag+='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ';
		if(this.id!=null){
			flashTag+='id="'+this.id+'" ';
		}
		flashTag+='codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version='+this.version+'" ';
		flashTag+='width="'+this.width+'" ';
		flashTag+='height="'+this.height+'">';
		flashTag+='<param name="movie" value="'+this.src+'"/>';
		flashTag+='<param name="SeamlessTabbing" value="false"/>';
		flashTag+='<param name="allowFullScreen" value="true"/>';
		flashTag+='<param name="allowScriptAccess" value="sameDomain" />';
		flashTag+='<param name="quality" value="high"/>';
		flashTag+='<param name="wmode" value="transparent"/>';
		if(this.bgcolor!=null){
			flashTag+='<param name="bgcolor" value="#'+this.bgcolor+'"/>';
		}
		if(this.flashVars!=null)
		{
			flashTag+='<param name="flashvars" value="'+this.flashVars+'"/>';
		}
		flashTag+='</object>';
	}
	else
	{
		flashTag+='<embed SeamlessTabbing="false" src="'+this.src+'" ';
		flashTag+='quality="high" ';
		flashTag+='allowFullScreen="true" ';
		flashTag+='wmode="transparent" ';
		flashTag+='allowScriptAccess="sameDomain" ';
		if(this.bgcolor!=null)
		{
			flashTag+='bgcolor="#'+this.bgcolor+'" ';
		}
		flashTag+='width="'+this.width+'" ';
		flashTag+='height="'+this.height+'" ';
		flashTag+='type="application/x-shockwave-flash" ';
		if(this.flashVars!=null)
		{
			flashTag+='flashvars="'+this.flashVars+'" ';
		}
		if(this.id!=null)
		{
			flashTag+='name="'+this.id+'" ';
		}
		flashTag+='pluginspage="http://www.macromedia.com/go/getflashplayer">';
		flashTag+='</embed>';
	}
	return flashTag;
}
FlashTag.prototype.write=function(doc)
{
	doc.write(this.toString());
}
function FlashSerializer(useCdata)
{
	this.useCdata=useCdata;
}
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
				{
					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;
}
FlashSerializer.prototype._serializeXML=function(obj)
{
	var doc=new Object();
	doc.xml='<fp>';
	this._serializeNode(obj,doc,null);
	doc.xml+='</fp>';
	return doc.xml;
}
FlashSerializer.prototype._serializeNode=function(obj,doc,name)
{
	switch(typeof(obj))
	{
		case'undefined':doc.xml+='<undf'+this._addName(name)+'/>';
		break;
		case'string':doc.xml+='<str'+this._addName(name)+'>'+this._escapeXml(obj)+'</str>';
		break;
		case'number':doc.xml+='<num'+this._addName(name)+'>'+obj+'</num>';
		break;
		case'boolean':doc.xml+='<bool'+this._addName(name)+' val="'+obj+'"/>';
		break;
		case'object':if(obj==null)
					{
						doc.xml+='<null'+this._addName(name)+'/>';
					}
					else if(obj instanceof Date)
					{
						doc.xml+='<date'+this._addName(name)+'>'+obj.getTime()+'</date>';
					}
					else if(obj instanceof Array)
					{
						doc.xml+='<array'+this._addName(name)+'>';
						for(var i=0;i<obj.length;++i)
						{
							this._serializeNode(obj[i],doc,null);
						}
						doc.xml+='</array>';
					}
					else
					{
						doc.xml+='<obj'+this._addName(name)+'>';
						for(var n in obj)
						{
							if(typeof(obj[n])=='function') continue;
							this._serializeNode(obj[n],doc,n);
						}
						doc.xml+='</obj>';
					}
		break;
		default:throw new Exception("FlashSerializationException","You can only serialize strings, numbers, booleans, objects, dates, arrays, nulls and undefined");
		break;
	}
}
FlashSerializer.prototype._addName=function(name)
{
	if(name!=null)
	{
		return' name="'+name+'"';
	}
	return'';
}
FlashSerializer.prototype._escapeXml=function(str)
{
	if(this.useCdata) return'<![CDATA['+str+']]>';
	else return str.replace(/&/g,'&amp;').replace(/</g,'&lt;');
}
function FlashProxy(uid,proxySwfName)
{
	//alert("set jsproxy");
	this.uid=uid;
	this.proxySwfName=proxySwfName;
	this.flashSerializer=new FlashSerializer(false);
}
FlashProxy.prototype.call=function()
{
	//alert("jsproxy called");
	if(arguments.length==0)
	{
		throw new Exception("Flash Proxy Exception","The first argument should be the function name followed by any number of additional arguments.");
	}
	var qs='lcId='+escape(this.uid)+'&functionName='+escape(arguments[0]);
	if(arguments.length>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();
}
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);
}