﻿var Class = {
    create: function() {
        return function() {
          this.initialize.apply(this, arguments);
        }
    }
}

var EventEntry = Class.create();
EventEntry.prototype = {
    title: null,
    content: null,
    startDate: null,
    endDate: null,
    location: null,
    initialize: function(entry){
        this.title = entry.title.$t;
        this.content = entry.content.$t;
        this.startDate = DateConverter.rfc3339toDate(entry.gd$when[0].startTime);
        this.endDate = DateConverter.rfc3339toDate(entry.gd$when[0].endTime);
        this.location = entry.gd$where[0].valueString;
    }
};function logObject(x){    for (o in x)    {        console.log(o + ": " + x[o]);        try        {            var count = 0;            for (i in x[0])                count++;                            if (count > 0)                logObject(x[o]);         }        catch(e){}    }}var Calendar = Class.create();
Calendar.prototype = {
    //uri: “7cghno42lleqpbihmoi5qiikm8%40group.calendar.google.com”,
    uri: "missionnaz%40gmail.com/private-0eed8eb528a9dd44d4b7bff098f5c630/full",
    orderby: "starttime",
    singleEvents: true,
    futureEvents: false,        //if true, it overrides the start-min and start-max
    startmin: "",
    startmax: "",
    sortOrder: "ascending",
    entries: {},
    maxresults: -1,
    initialize: function(u,start,end,max){
        if(u && start && end && max)
        {
            this.uri = u;
            this.startmin = start;
            this.startmax = end;
            this.maxresults = max;
        }
    },
	
    buildURL: function(){
        var str = "http://www.google.com/calendar/feeds/";
        str += this.uri;
        //str += "/public/full-noattendees?orderby=" + this.orderby;
        str += "-noattendees?orderby=" + this.orderby;
        str += "&alt=json-in-script&callback=window.activeCalendar.parseFeed&";
        str += "singleevents=" + this.singleEvents;
        str += "&sortorder=" + this.sortOrder;
        str += "&futureevents=" + this.futureEvents;
        str += "&start-min=" + this.startmin;
        str += "&start-max=" + this.startmax;
        if(this.maxresults > 0)
            str += "&max-results=" + this.maxresults;
        return str;
    },
	
    loadFeed: function(){
        window.activeCalendar = this;
        var headTag = document.getElementsByTagName('head')[0]; 
        var script = document.createElement("script");
        script.src = this.buildURL();
        script.language = "JavaScript";
        headTag.appendChild(script);
    },
 
    parseFeed: function(json){
        e = json.feed.entry;
        for(var i=0;i < e.length;i++){
            this.entries[i] = new EventEntry(e[i])
        }
        try {
            this.onsuccess(this);
      } catch (e) {}
    },
	
    onsuccess: function(c){}
};/**
 * Singleton object used to convert Dates from one format to another.
 */
var DateConverter = {
    rfc3339toDate: function(t){
        t = t.substr(0,19).replace(/-/g,"/").replace("T"," ");
        var dt = new Date();
        dt.setTime(Date.parse(t));
        return dt;
    }
};function convertToRFC3339Date(dte){    var month = (dte.getMonth() + 1);    month = (month < 10) ? "0" + month : month;    var date = ((dte.getDate() < 10) ? "0" + dte.getDate() : dte.getDate());    return dte.getFullYear() + "-" + month + "-" + date + "T00:00:00";}function formatDate(dt, abbr){
    var res = getMonth(dt, abbr) + ((abbr) ? "" : " ") + dt.getDate();
    if (!abbr)
    {
        res = getDay(dt) + ", " + res;
        res += ", " + dt.getFullYear();
    }
    return res;
}function formatDateRange(entry){    var ds = entry.startDate;    var de = (entry.endDate) ? entry.endDate : null;        var res = getMonth(ds, false) + " " + ds.getDate() + ", " + ds.getFullYear();    res += " " + getTime(ds);        if (de != null && de > ds)    {        res += " to";        if (de.getMonth() != ds.getMonth() ||            de.getDate() != ds.getDate() ||            de.getFullYear() != ds.getFullYear())        {            res += " " + getMonth(de, false) + " " + de.getDate() + " " + de.getFullYear();        }        res += " " + getTime(de);    }        return res;}function displayEvents(c){
    for(k in c.entries){
        addEvent(c.entries[k]);
    }
    updateTotal();
}function getMonth(dt, abbr){    var months = {0: 'January',1:'February',2:'March',3:'April',4:'May',5:'June',6:'July',7:'August',8:'September',9: 'October',10:'November',11:'December'};
    var monthsAbbr = {0: 'Jan',1:'Feb',2:'Mar',3:'Apr',4:'May',5:'Jun',6:'Jul',7:'Aug',8:'Sep',9: 'Oct',10:'Nov',11:'Dec'};
    return (abbr) ? monthsAbbr[dt.getMonth()] + "<br/>" : months[dt.getMonth()];}function getDay(dt){    var days = {0:'Sunday',1:'Monday',2:'Tuesday',3:'Wednesday',4:'Thursday',5:'Friday',6:'Saturday'};    return days[dt.getDay()];}function getTime(dt){    if (dt.getHours() == 0)        return "(All Day)";    var str = (dt.getHours() > 12) ? dt.getHours() - 12 : dt.getHours();    if (dt.getMinutes() > 0)    {        str += ":";        str += (dt.getMinutes() < 10) ? "0" + dt.getMinutes(): dt.getMinutes();    }    str += (dt.getHours() >= 12) ? "PM" : "AM";    return str;}