<html>
<head>
<title>OOPHM test page</title>
<script>
var $wnd = window,$doc = document;
var $moduleBase = 'file:///home/jat/s/gwt-oophm/plugins/firefox/';

// fake property provider
function __gwt_getProperty(prop) {
  return "gecko1_8";
}

// wrapper to call JS methods, which we need both to be able to supply a
// different this for method lookup and to get the exception back
function __gwt_jsWrapper(method, methodlookup, thisref) {
  try {
    var args = Array.prototype.slice.call(arguments, 3);
//    console.log("calling " + method + " on " + methodlookup + " (this=" + thisref + "), args are ",
//        args);
    var ret = methodlookup[method].apply(thisref, args);
//    console.log("successful; returned ", ret);
    return [0, ret];
  } catch (e) {
    try {
//      console.log("methodlookup[method]=", methodlookup[method] ?
//          methodlookup[method].toString() : methodlookup[method]);
//      console.log("failed; exception ", e);
    } catch (e2) {
//      console.log("exception " + e2 + " logging original exception");
    }
    return [1, e];
  }
}

function __gwt_initHandlers(resize, beforeunload, unload) {
  console.log("initHandlers called", resize, beforeunload, unload);
  var $wnd = window
  , oldOnResize = $wnd.onresize
  , oldOnBeforeUnload = $wnd.onbeforeunload
  , oldOnUnload = $wnd.onunload
  ;

  $wnd.onresize = function(evt) {
    try {
      resize();
    } finally {
      oldOnResize && oldOnResize(evt);
    }
  };

  $wnd.onbeforeunload = function(evt) {
    var ret, oldRet;
    try {
      ret = beforeunload();
    } finally {
      oldRet = oldOnBeforeUnload && oldOnBeforeUnload(evt);
    }
    // Avoid returning null as IE6 will coerce it into a string.
    // Ensure that "" gets returned properly.
    if (ret != null) {
      return ret;
    }
    if (oldRet != null) {
      return oldRet;
    }
    // returns undefined.
  };

  $wnd.onunload = function(evt) {
    try {
      unload();
    } finally {
      oldOnUnload && oldOnUnload(evt);
    }
  };
};

// fire up plugin
window.onload = function() {
  var plugin = document.getElementById('plugin');
  var connectTo = "localhost:9997";
  var module = "com.google.gwt.sample.kitchensink.KitchenSink";
  var idx = location.search.indexOf("gwt.hosted=");
  if (idx >= 0) {
    var amp = location.search.indexOf("&", idx);
    if (amp >= 0) {
      connectTo = location.search.substring(idx + 11, amp);
    } else {
      connectTo = location.search.substring(idx + 11);
    }
  }
  var idx = location.search.indexOf("gwt.module=");
  if (idx >= 0) {
    var amp = location.search.indexOf("&", idx);
    if (amp >= 0) {
      module = location.search.substring(idx + 11, amp);
    } else {
      module = location.search.substring(idx + 11);
    }
  }
  plugin.connect(connectTo, module)
      || alert("failed to connect");
};
</script>
</head>
<body>
<embed id="plugin" type="application/x-gwt-hosted-mode" width="10"
        height="10"/>
</body>
</html>
