package com.actiontad.javascript.events
{
import flash.events.EventDispatcher;
import flash.external.ExternalInterface;
import flash.events.TimerEvent;
import flash.events.Event;
import flash.utils.Timer;
public class onHashChangeManager extends EventDispatcher
{
public var functionToCall:Function;
public function onHashChangeManager(func:Function = null, lag:Number = 500)
{
functionToCall = func;
var t:Timer = new Timer(lag, 1);
t.addEventListener(TimerEvent.TIMER_COMPLETE, ini, false, 0, true);
t.start();
}
private function ini(e:TimerEvent):void {
if (ExternalInterface.available) {
ExternalInterface.addCallback("onHashChangeCallback", callFunc);
makeLevelOneMasterTalk("onHashChangeForSWF", "onHashChangeCallback", getIdByIndex());
establishOnHashChangeListener();
}
e.target.removeEventListener(TimerEvent.TIMER_COMPLETE, ini);
}
private function callFunc(currentHash:String = ""):void {
if (functionToCall != null) functionToCall(currentHash);
this.dispatchEvent(new Event(currentHash));
}
private function establishOnHashChangeListener():void {
var javaScript:XML =
<script>
<![CDATA[
function () {
window.onhashchange = function (e) {
var thee = (e != undefined) ? e : event;
var afthash = new RegExp("[\#]{1}[a-z0-9\,\-]{1,}", "i");
var thehashword = (window.location.toString().match(afthash)) ?
window.location.toString().match(afthash).toString().replace("#", "") : "";
onHashChangeForSWF(thehashword);
};
}
]]>
</script>;
if (ExternalInterface.available) ExternalInterface.call(javaScript);
}
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 =
"<script><![CDATA[function(){"+nameToBe+" = function"+
"() { var fcontenter;"+
"try {fcontenter=window.document.getElementById('"+idIs+"');}catch(e) {"+
"try {var theflash='"+idIs+"';fcontenter=window.document.theflash;}catch(e) {var movie='"+idIs+"';"+
"if (navigator.appName.indexOf('Microsoft')!=-1 || navigator.appName.indexOf('MSIE')!=-1) {"+
"if (window.document[movie]){fcontenter=window.document[movie];}else{fcontenter=window[movie];};"+
"}else {if (document.embeds[movie]){fcontenter=document.embeds[movie];}else"+
"{fcontenter=document[movie];};}}}"+
"if (arguments && arguments.length > 0) {fcontenter['"+funcIs+"'].apply(fcontenter, arguments);}"+
"else{fcontenter['"+funcIs+"']();} }; }]]></script>";
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 =
<script>
<![CDATA[
function (indexr) {
function getid(indexer) {
var objects;
var r = "";
try {
(document.getElementsByTagName("object")) ?
objects = document.getElementsByTagName("object")[indexer] :
objects = document.getElementsByTagName("OBJECT")[indexer];
if (objects.hasAttribute("id") && !objects.id) {r=objects.getAttribute("id");}
if (objects.id && !objects.hasAttribute("ID")) {r=objects.id+"";}
if (objects.hasAttribute("ID")) {r=objects.getAttribute("ID");}
}catch (e) {
(document.getElementsByTagName("object")) ?
objects = document.getElementsByTagName("object")[indexer] :
objects = document.getElementsByTagName("OBJECT")[indexer];
if (objects && objects.outerHTML) {
var ohtml=objects.outerHTML.toString();
var idfind = new RegExp("id[ ]{0,}=[ ]{0,}[ a-zA-Z0-9\_\"]{1,}", "i");
var ridid = new RegExp("id", "i");
var rideq = new RegExp("[=\"]{1,}", "ig");
var ridspace = new RegExp("[ ]{1,}", "g");
var nocodeBase = new RegExp("codeBase|classid|height|width", "ig");
if (ohtml.match(idfind)) {
r =
ohtml.match(idfind).toString().replace(ridid, "").replace(rideq,"").replace(ridspace, "").replace(nocodeBase, "");
}else{r = "";}
}else {r = "";}
}
return r;
};
return(getid(indexr));
}
]]>
</script>;
if (ExternalInterface.available) {
outed = ExternalInterface.call(idofswfobject, index);
}
return outed;
}
}
}