package com.actiontad.javascript.events
{
import flash.utils.*;
import flash.events.*;
import flash.external.ExternalInterface;
import com.actiontad.javascript.events.DOMExEvent;
public class DOMExEventDispatcher extends EventDispatcher
{
private var onWhat:String;
private var uniqueNumber:Number;
private var theLag:Number = 1000;
private var theDOMExEvent:DOMExEvent;
private var eventProperties:Array;
public function DOMExEventDispatcher(onWhater:String, propsToGet:Array, lag:Number = 1000)
{
uniqueNumber = Math.floor(Math.random()*new Date().getTime());
onWhat = onWhater;
theLag = lag;
theDOMExEvent = new DOMExEvent(["",""]);
eventProperties = propsToGet;
var lagTime:Timer = new Timer(theLag, 1);
lagTime.addEventListener(TimerEvent.TIMER_COMPLETE, iniDevd);
lagTime.start();
}
private function iniDevd(e:TimerEvent):void
{
e.target.stop();
var callName:String = "DOMExEventDispatcher"+uniqueNumber+"";
var eventName:String = "domexEvent"+uniqueNumber+"";
var props:Array = [];
for (var i:int = 0; i < eventProperties.length; i++)
{ props.push(eventProperties[i]); }
if (ExternalInterface.available) {
ExternalInterface.addCallback(callName, theEventDispatcher);
makeLevelOneMasterTalk(eventName, callName, getIdByIndex());
//We can not pass events themselves between AS and JS.
//So instead, whatever uses this class will also pass in the event properties it wants to get
//A DOMExEvent will then have an Array of the values of those properties
var theJavaScriptString:String =
"";
var theJavaScript:XML = new XML(theJavaScriptString);
ExternalInterface.call(theJavaScript, props);
}
e.target.removeEventListener(TimerEvent.TIMER_COMPLETE, iniDevd);
}
private function theEventDispatcher(arrayOfEventProperties:Array):void
{
theDOMExEvent.eventPropertiesArray = arrayOfEventProperties;
dispatchEvent(theDOMExEvent);
}
private function makeLevelOneMasterTalk(nameToBe:String, funcIs:String, idIs:String):void
{
/* used to create a javascript function that acts as the callBack function itself. */
var masterTalkBuild:String =
"";
if (ExternalInterface.available) {
var builtFunction:XML = new XML(masterTalkBuild);
ExternalInterface.marshallExceptions = true;
ExternalInterface.call(builtFunction);
}
}
public function getIdByIndex(index:Number = 0):String
{
var outed:String = "";
var idofswfobject:XML =
;
if (ExternalInterface.available) {
outed = ExternalInterface.call(idofswfobject, index)+"";
}
return outed;
}
}
}