dojo.require("dojox.cometd");

window.onload = function() {
    dojo.byId("connect").onclick=connect;
    dojo.byId("reload").onclick=reload;
    

    var params = hashToObj(document.location.hash);
    dojo.byId("cometd-url").value = params.u ? params.u : 
      "http://localhost:8080/cometd/cometd";

    dojo.byId("cometd-channel").value = params.c ? params.c :
      "/screenpush/demo";
}

function status (msg) {
  dojo.byId("status-area").innerHTML = msg;
}


function connect() {

  dojo.byId("connect-button-area").style.visibility = "hidden";

  status("Connecting...");
  var cometd = { u: dojo.byId("cometd-url").value,
                 c: dojo.byId("cometd-channel").value 
               }

  document.location.hash=objToHash(cometd);

  dojox.cometd.init(cometd.u);

  var meta = dojo.subscribe("/cometd/meta", this, function(e) {
    if (e.action == "handshake" && !e.successful) {
      fail("Failed to handshake with Cometd server '"+cometd.u+"'"+
        (e.error ? ": "+e.error : "."));
    }
    if (e.action == "connect") {
      if (e.successful) {
        status("Connected...");
      } else {
        fail("Failed to establish connection to Cometd server '"+cometd.u+"'"+
          (e.error ? ": "+e.error : "."));
      }
    }
  });

  var receive = function(comet) {
    var img = dojo.byId("screenpush-image");
    if (!img) {

      dojo.byId("connect-button-area").style.display = "none";
      var contentDiv = dojo.byId("content-area")
      contentDiv.innerHTML="";

      img = new Image();
      img.id = "screenpush-image";
      contentDiv.appendChild(img);
    }

    img.src = comet.data.dataUrl;
  }

  dojox.cometd.subscribe(cometd.c,receive);

  var fail = function(msg) {
    status(msg);
    dojo.byId("connect-button-area").style.display = "none";
    dojo.byId("reload-button-area").style.display = "block";
    dojo.unsubscribe(meta);
    dojox.cometd.unsubscribe(cometd.c,this,receive);
    dojox.comet.disconnect();
  }
}

function reload() {    
  if(dojo.byId("cometd-url")) {
    var cometd = { u: dojo.byId("cometd-url").value,
                   c: dojo.byId("cometd-channel").value 
                 }
    document.location.hash=objToHash(cometd);
  }
  document.location.reload() 
}

function hashToObj(hash) {

  var json = {};
  var pairs = hash.slice(1).split(/&/);
  for(var p in pairs) {
    var kv=pairs[p].split(/=/);
    if (kv.length==2) {
      json[kv[0]]=kv[1];
    }
  }

  return json;
}

function objToHash(obj) {
  var hash="#";
  for (var p in obj) {
    hash=hash+p+"="+obj[p]+"&";
  }
  return hash.slice(0,hash.length-1);
}

