--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/See09/schedule.js Thu Oct 22 15:52:58 2009 +0100
@@ -0,0 +1,173 @@
+// ////////////////////////////////////////////////////////////////////////////
+// Symbian Foundation Example Code
+//
+// This software is in the public domain. No copyright is claimed, and you
+// may use it for any purpose without license from the Symbian Foundation.
+// No warranty for any purpose is expressed or implied by the authors or
+// the Symbian Foundation.
+// ////////////////////////////////////////////////////////////////////////////
+
+// The Schedule class is used to load, keep and filter sessions
+function Schedule() {
+ this.callBackFunction = null;
+ this.sessions = null;
+ this.topics = new Array( "Main Stage", "Application Development", "Open Source Business Models", "Device Creation and Contributing to Symbian", "Hands-on Lab 1", "Hands-on Lab 2", "Birds of a Feather" );
+ this.scheduleFileName = null;
+ this.http = null;
+ this.parseCounter = 0;
+ this.rawData = null;
+}
+
+// Kick off loading
+Schedule.prototype.Init = function(csvfile, cbfunc){
+ this.callBackFunction = cbfunc;
+ this.scheduleFileName = csvfile;
+ var self = this;
+ setTimeout( function() {self.Load();}, 100);
+}
+
+// 'public' functions
+Schedule.prototype.GetTopics = function() {
+ return this.topics;
+}
+
+Schedule.prototype.GetSessions = function(topic, day) {
+ var cnt = this.sessions.length;
+ var ret = new Array();
+ for( var i = 0; i < cnt ; i++ ) {
+ var session = this.sessions[i];
+ if ( session.topic == topic && day == session.date ) {
+ ret.push(session);
+ }
+ }
+ return ret;
+}
+
+Schedule.prototype.GetCurrentSessions = function() {
+ var now = GetUtcTime(new Date());
+ if ( ! this.sessions || this.sessions == null ) {
+ return;
+ }
+ var cnt = this.sessions.length;
+ var ret = new Array();
+ for( var i = 0; i < cnt ; i++ ) {
+ var session = this.sessions[i];
+ var sessionStart = session.GetStartUtc();
+ var sessionEnd = session.GetEndUtc();
+ if( now > sessionStart && now < sessionEnd ) {
+ ret.push(session);
+ }
+ }
+ return ret;
+}
+
+
+// 'private' functions
+
+// Loading and parsing
+Schedule.prototype.Load = function(){
+ // Prepare asynchronous download
+ this.http = new Ajax();
+ var self = this;
+ this.http.onreadystatechange = function() { self.LoadComplete(); };
+ this.http.open("GET", this.scheduleFileName, true); // false means synchronous
+ this.http.send(null);
+}
+
+Schedule.prototype.LoadComplete = function() {
+ // request complete?
+ if (this.http.readyState == 4) {
+ try {
+ this.rawData = this.http.responseText;
+ this.http = null;
+ // parse data
+ this.sessions = new Array();
+ this.Parse(); // Prepare and set the data for the parser.
+ }
+ catch (x) {
+ uiManager.showNotification(5000, "warning", "Error processing feed");
+ }
+ }
+}
+
+Schedule.prototype.Parse = function() {
+ var session = new Session();
+ var fieldCounter = 0;
+ var fieldBuf = "";
+ var quoted = false;
+ for(; this.parseCounter < this.rawData.length; this.parseCounter++ ) {
+ var ch = this.rawData.charAt(this.parseCounter);
+ if ( !quoted && ( ch == ',' || ch == '\n') ) {
+ session.SetFieldByOrdinal(fieldCounter++, fieldBuf);
+ if (fieldCounter == session.GetNumberOfFields()) {
+ this.AddSession(session);
+ this.parseCounter++;
+ var self = this;
+ setTimeout(function(){self.Parse();}, 1);
+ return;
+ }
+ fieldBuf = "";
+ } else if ( ch == '"' ) {
+ if (quoted) {
+ if (this.parseCounter < this.rawData.length - 1 && this.rawData.charAt(this.parseCounter + 1) == '"') {
+ // escaped quote, ignore this and next
+ this.parseCounter++;
+ } else {
+ quoted = false;
+ }
+ } else {
+ quoted = true;
+ }
+ } else if ( ch == '\r' ) {
+ // ignore carriage return
+ } else if ( ch == '\n' ) { // quoted = true
+ // replace newline with <br>
+ fieldBuf += "<br>";
+ } else {
+ fieldBuf += ch;
+ }
+ }
+ this.Sort();
+ if (this.callBackFunction) {
+ this.callBackFunction.call();
+ }
+ uiManager.hideNotification();
+}
+
+Schedule.prototype.Sort = function (){
+ // we get the schedule all messy so here we sort things out
+ var cnt = this.sessions.length;
+ for( var i = 0 ; i < cnt ; i++ ) {
+ for( var j = i+1 ; j < cnt ; j++ ) {
+ var si = this.sessions[i];
+ var sj = this.sessions[j];
+ if ( si.startTime > sj.startTime ) {
+ // swap
+ this.sessions[i] = sj;
+ this.sessions[j] = si;
+ }
+ }
+ }
+}
+
+Schedule.prototype.AddSession = function (session) {
+ if ( ! session.topic || session.topic == null || session.topic.length == 0 ) {
+ return;
+ }
+ // add to list of sessions
+ this.sessions.push(session);
+}
+
+function trim(text) {
+ return text;
+}
+
+
+function GetUtcTime(d){
+ // convert to msec since Jan 1 1970
+ var localTime = d.getTime();
+ // obtain local UTC offset and convert to msec
+ var localOffset = d.getTimezoneOffset() * 60000;
+ // obtain UTC time in msec
+ return localTime + localOffset;
+}
\ No newline at end of file