/**
 * File:    SFC.Document.js
 * Author:  RP =)
 */

/**
 * SFC.Document class handles all stuff regarding the documents.
 */
SFC.Document = (function() {

    return {
        loadDocument: function(container, docId, template) {
            this.getDocument(docId, function(doc) {
                $(template).applyTemplate({
                    params: [
                        { name: "documentId", value : doc.ID},
                        { name: "documentTitle", value : doc.Title.toUpperCase()},
                        { name: "documentAuthor", value : doc.Author && doc.Author != "" ? doc.Author : "anonymous"},
                        { name: "documentContent", value : doc.HtmlContent}
                    ]
                }).appendTo(container);
            });
        },

        getDocument: function(docId, callback) {
            if (docId && docId > 0) {
                $.ajax({
                    url: "lib/util.document.php",
                    data: {
                        func: "getDocument",
                        docId: docId
                    },
                    type: "GET",
                    contentType: "application/json",
                    success: function(res) {
                        if (res && $.trim(res) != "") {
                            callback(JSON.parse(res));
                        }
                    }
                });
            }
        },

        loadEvent: function(container, eventId, template, detailTemplate) {
            var that = this;
            this.getEvent(eventId, function(event) {
                $(template).applyTemplate({
                    params: [
                        { name: "eventId", value : event.ID},
                        { name: "eventTitle", value : event.Title.toUpperCase()},
                        { name: "eventDetails", value : that.getEventDetails(detailTemplate, event)},
                        { name: "eventContent", value : event.HtmlContent}
                    ]
                }).appendTo(container);
            });
        },

        getEvent: function(eventId, callback) {
            if (eventId && eventId > 0) {
                $.ajax({
                    url: "lib/util.event.php",
                    data: {
                        func: "getEvent",
                        eventId: eventId
                    },
                    type: "GET",
                    contentType: "application/json",
                    success: function(res) {
                        if (res && $.trim(res) != "") {
                            callback(JSON.parse(res));
                        }
                    }
                });
            }
        },

        getEventDetails: function(detailTemplate, event) {
            var eventDetails = $("<ul class='eventDetails'/>");

            if (event.Place && event.Place != "") {
                this.createEventDetailEntry(detailTemplate, "EventPlace" + event.ID, "Where:", event.Place).appendTo(eventDetails);
            }
            var dateString = "";
            if (event.Date && event.Date != "") {
                dateString = this.formatDate(event.Date);
            }
            if (event.Time && event.Time != "") {
                dateString += " " + event.Time;
            }
            if (dateString != "") {
                this.createEventDetailEntry(detailTemplate, "EventDate" + event.ID, "When:", dateString).appendTo(eventDetails);
            }
            if (event.ContactName && event.ContactName != null) {
                this.createEventDetailEntry(detailTemplate, "EventContactName" + event.ID, "Contact:", event.ContactName).appendTo(eventDetails);
            }
            if (event.ContactPhone && event.ContactPhone != null) {
                this.createEventDetailEntry(detailTemplate, "EventContactPhone" + event.ID, "Contact Phone:", event.ContactPhone).appendTo(eventDetails);
            }
            if (event.ContactEmail && event.ContactEmail != null) {
                this.createEventDetailEntry(detailTemplate, "EventContactEmail" + event.ID, "Contact Email:", event.ContactEmail).appendTo(eventDetails);
            }

            return eventDetails.html();
        },

        createEventDetailEntry: function(detailTemplate, eventDetailId, eventDetailType, eventDetailValue) {
            return detailTemplate.applyTemplate({
                params: [
                    { name: "eventDetailId", value : eventDetailId},
                    { name: "eventDetailType", value : eventDetailType},
                    { name: "eventDetailValue", value : eventDetailValue}
                ]
            });
        },

        loadAnnouncement: function(container, announcementId, template) {
            var that = this;
            this.getAnnouncement(announcementId, function(announcement) {
                $(template).applyTemplate({
                    params: [
                        { name: "announceId", value : announcement.ID},
                        { name: "announceTitle", value : announcement.Title.toUpperCase()},
                        { name: "announceContent", value : announcement.HtmlContent}
                    ]
                }).appendTo(container);
            });
        },

        getAnnouncement: function(announcementId, callback) {
            if (announcementId && announcementId > 0) {
                $.ajax({
                    url: "lib/util.announcement.php",
                    data: {
                        func: "getAnnouncement",
                        announcementId: announcementId
                    },
                    type: "GET",
                    contentType: "application/json",
                    success: function(res) {
                        if (res && $.trim(res) != "") {
                            callback(JSON.parse(res));
                        }
                    }
                });
            }
        },

        getMedia: function(mediaId, callback) {
            if (mediaId && mediaId > 0) {
                $.ajax({
                    url: "lib/util.media.php",
                    data: {
                        func: "getMedia",
                        mediaId: mediaId
                    },
                    type: "GET",
                    contentType: "application/json",
                    success: function(res) {
                        if (res && $.trim(res) != "") {
                            callback(JSON.parse(res));
                        }
                    }
                });
            }
        },

        formatDate: function(mysqldate) {
            var d = new Date(String(mysqldate).replace(/\-/g, '/'));

            return d.getDayName(true) + ', ' + d.asString('mmm d yyyy');
        },

        getLatestDocument: function(docType, count, callback) {
            var retDoc = null;
            $.ajax({
                url: "lib/util.document.php",
                data: {
                    func: "getLatestDocument",
                    docType: docType,
                    featured: true,
                    count: count
                },
                type: "GET",
                contentType: "application/json",
                success: function(res) {
                    retDoc = JSON.parse(res);
                    callback(retDoc);
                }
            });

            return retDoc;
        },

        getLatestBlog: function(count, callback) {
            return this.getLatestDocument(SFC.Document.Types.BLOG, count, callback);
        },

        getLatestNews: function(count, callback) {
            return this.getLatestDocument(SFC.Document.Types.NEWS, count, callback);
        },

        getLatestNewsAndEvents: function(callback) {
            var that = this;
            var jsonText = "[";
            that.getLatestEvents(2, function(events){
                var count = 3 - events.length;
                for (var i=0; i<events.length; i++) {
                    if (i>0) jsonText += ", ";
                    jsonText += '{"Type":"Event", "Link":"event.php?eventId='+events[i].ID+'", "ID":"'+events[i].ID+'", "Title": "'+events[i].Title+'", "HtmlContent": "'+SFC.Container.stripHTML(events[i].HtmlContent.substring(0, 200)).replace(/\n/g, " ").replace(/\r/g, " ")+'"}';
                }
                that.getLatestNews(count, function(news) {
                    for (var i=0; i<news.length; i++) {
                        if (jsonText.length>2) jsonText += ", ";
                        jsonText += '{"Type":"News", "Link":"document.php?page=newsandevents&docId='+news[i].ID+'", "ID":"'+news[i].ID+'", "Title": "'+news[i].Title+'", "HtmlContent": "'+SFC.Container.stripHTML(news[i].HtmlContent.substring(0,200)).replace(/\n/g, " ").replace(/\r/g, " ")+'"}';
                    }
                    jsonText += "]";
                    callback(JSON.parse(jsonText));
                });
            });
        },

        getLatestEvents: function(count, callback) {
            var retDoc = null;
            $.ajax({
                url: "lib/util.event.php",
                data: {
                    func: "getLatestEvents",
                    count: count
                },
                type: "GET",
                contentType: "application/json",
                success: function(res) {
                    retDoc = JSON.parse(res);
                    callback(retDoc);
                }
            });

            return retDoc;
        },

        getOngoingEvents: function(count, callback) {
            var retDoc = null;
            $.ajax({
                url: "lib/util.event.php",
                data: {
                    func: "getOngoingEvents",
                    count: count
                },
                type: "GET",
                contentType: "application/json",
                success: function(res) {
                    retDoc = JSON.parse(res);
                    callback(retDoc);
                }
            });

            return retDoc;
        },

        getLatestAnnouncements: function(count, callback) {
            var retDoc = null;
            $.ajax({
                url: "lib/util.announcement.php",
                data: {
                    func: "getLatestAnnouncements",
                    count: count
                },
                type: "GET",
                contentType: "application/json",
                success: function(res) {
                    retDoc = JSON.parse(res);
                    callback(retDoc);
                }
            });

            return retDoc;
        },

        getLatestMedia: function(count, callback) {
            var retMedia = null;
            $.ajax({
                url: "lib/util.media.php",
                data: {
                    func: "getLatestMedia",
                    featured: true,
                    count: count
                },
                type: "GET",
                contentType: "application/json",
                success: function(res) {
                    retMedia = JSON.parse(res);
                    callback(retMedia);
                }
            });

            return retMedia;
        }

    };
}());

SFC.Document.SOTD_RSS_URL = "http://www.americancatholic.org/rss/feed.aspx?id=3";
SFC.Document.HOTD_RSS_URL = "http://feeds.feedburner.com/catholicex_church-today/homily-of-the-day";

SFC.Document.Types = {
    "BLOG" : 1,
    "NEWS" : 2,
    "SONG" : 3,
    "TALK" : 4,
    "SHARING" : 5,
    "OTHERS" : 6
};

SFC.Event = SFC.Event || {};
SFC.Event.Types = {
    "MAJOR" : 1,
    "MINOR" : 2,
    "HOUSEHOLD" : 3,
    "ONGOING" : 4,
    "OTHERS" : 5
};


