00001 import flash.external.ExternalInterface;
00002
00003 import gugga.events.EventDispatcher;
00004
00005 [Event("changed")]
00006 class gugga.browser.BrowserHistory extends EventDispatcher
00007 {
00008 private static var mInstance : BrowserHistory = null;
00009 public static function get Instance() : BrowserHistory
00010 {
00011 if(mInstance == null)
00012 {
00013 mInstance = new BrowserHistory();
00014 }
00015 return mInstance;
00016 }
00017
00018 private function BrowserHistory()
00019 {
00020 super();
00021
00022 ExternalInterface.addCallback("changeHistory", this, this.changeHistory);
00023 }
00024
00025 public static function get available() : Boolean
00026 {
00027 return ExternalInterface.available;
00028 }
00029
00030 public function addHistory(aRecord : Object) : Void
00031 {
00032 ExternalInterface.call("addHistory", formatHisoryRecord(aRecord));
00033 }
00034
00035 private function changeHistory(aRecord : String) : Void
00036 {
00037 dispatchEvent({type : "changed", target : this, record : parseHistoryRecord(aRecord)});
00038 }
00039
00040 private function formatHisoryRecord(aRecordObject : Object) : String
00041 {
00042 var result : String = "";
00043 for (var key : String in aRecordObject)
00044 {
00045 if(result != "")
00046 {
00047 result += "&";
00048 }
00049 result += (key + "=" + aRecordObject[key]);
00050 }
00051 return result;
00052 }
00053
00054 private function parseHistoryRecord(aRecord : String) : Object
00055 {
00056 var result : Object = new Object();
00057 var pairs : Array = aRecord.split("&");
00058 for (var i : Number = 0; i < pairs.length; i++)
00059 {
00060 var pair : Array = pairs[i].split("=");
00061 result[unescape(pair[0])] = unescape(pair[1]);
00062 }
00063 return result;
00064 }
00065 }