--- googlecode.com/svn/trunk/public_html/meteor.js 2007/05/05 15:04:41 20 +++ googlecode.com/svn/trunk/public_html/meteor.js 2007/05/14 13:42:45 21 @@ -35,6 +35,9 @@ this.debugmode = false; this.subsurl = false; this.channels = {}; + this.channelcount = 0; + this.streamreq = false; + this.byteoffset = 0; // Documented public properties this.subdomain = "data"; @@ -93,19 +96,21 @@ if (this.debugmode) console.log("Joined channel "+channelname+", channel list follows"); if (this.debugmode) console.log(this.channels); if (this.status != 0) this.start(); + this.channelcount++; } Meteor.prototype.leaveChannel = function(channelname) { if (typeof(this.channels[channelname]) == "undefined") throw "Cannot leave channel "+channelname+": not subscribed"; delete this.channels[channelname]; if (this.status != 0) this.start(); + this.channelcount--; } Meteor.prototype.start = function() { this.persist = (this.maxmessages)?1:0; this.smartpoll = (this.smartpoll)?1:0; this.mode = (this.mode=="stream")?"stream":"poll"; - if (!this.subdomain || this.channels.length) throw "Channel or Meteor subdomain host not specified"; + if (!this.subdomain || !this.channelcount) throw "Channel or Meteor subdomain host not specified"; this.stop(); var now = new Date(); var t = now.getTime(); @@ -114,7 +119,7 @@ if (this.maxmessages && !this.persist) surl += "&maxmessages=" + this.maxmessages; for (var c in this.channels) { surl += "&channel="+c; - if (this.channels[c].lastmsgreceived >= 0) { + if (this.channels[c].lastmsgreceived > 0) { surl += "&restartfrom="+this.channels[c].lastmsgreceived; } else if (this.channels[c].backtrack > 0) { surl += "&backtrack="+this.channels[c].backtrack; @@ -124,7 +129,11 @@ } this.subsurl = surl; if (this.mode=="stream") { - this.createIframe(this.subsurl); + if (document.all) { + this.createIframe(this.subsurl); + } else { + this.createIframe("http://"+this.subdomain+"."+location.hostname+"/stream.html"); + } var f = this.pollmode.bind(this); clearTimeout(this.pingtimer); this.pingtimer = setTimeout(f, this.pingtimeout); @@ -161,11 +170,16 @@ ifr.style.zIndex = "-20"; ifr.setAttribute("id", "meteorframe_"+this.instID); ifr.Meteor = Meteor; - var innerifr = document.createElement("IFRAME"); - innerifr.setAttribute("src", url); - innerifr.setAttribute("id", "meteorinnerframe_"+this.instID); - ifr.appendChild(innerifr); - document.body.appendChild(ifr); + if (document.compatMode=='CSS1Compat') { + var innerifr = document.createElement("IFRAME"); + innerifr.setAttribute("src", url); + innerifr.setAttribute("id", "meteorinnerframe_"+this.instID); + ifr.appendChild(innerifr); + document.body.appendChild(ifr); + } else { + ifr.setAttribute("src", url); + document.body.appendChild(ifr); + } } if (this.debugmode) console.log("Loading URL '"+url+"' into frame..."); var f = this.frameloadtimeout.bind(this); @@ -292,6 +306,7 @@ } } + Meteor.createCookie = function(name,value,days) { if (days) { var date = new Date(); @@ -315,4 +330,4 @@ Meteor.eraseCookie = function(name) { createCookie(name,"",-1); -} \ No newline at end of file +}