﻿/**
* Address Matching
*
* @author		Jemin Pathazhapurakkal
* @copyright	(c) 2011, by TM Group (UK) Ltd.
* @version		1.0
* @reference	NewsSidebar.ascx
*/


Ext.ns('NewsManager');

NewsManager.newsStore = new Object();

/* Ajax Handler to fetch news */
NewsManager.GetTemplateDetails = function () {
    Ext.Ajax.request({
        url: baseUrl + 'ajax/Handler.ashx',
        method: 'GET',
        params: {
            action: 'GetInbox'
        },
        callback: function (obj, success, response) {
            NewsManager.newsHomeStore.loadData(response.responseXML);
            document.getElementById('newsContent').innerHTML = newsList();

            NewsManager.newsStoreGeneral.loadData(response.responseXML);
            NewsManager.newsStoreMarketing.loadData(response.responseXML);
            NewsManager.newsStoreSystem.loadData(response.responseXML);            
            NewsManager.newsStoreIndustryNews.loadData(response.responseXML);
            NewsManager.newsStoreCompanyNews.loadData(response.responseXML);
            NewsManager.newsStoreNewFeature.loadData(response.responseXML);
            
        }
    });
};
NewsManager.GetTemplateDetails();


/* News Data Store for HomePage */
NewsManager.newsHomeStore = new Ext.data.Store({
    reader: new Ext.data.XmlReader(
        {
            record: 'Message'
        },
        [
            { name: 'ID', mapping: '@id', type: 'int' },
            { name: 'Type', mapping: '@typeid', type: 'int' },
            { name: 'Subject' },
            { name: 'Strapline', mapping: 'Summary' },
            { name: 'Content' },
            { name: 'Date', mapping: '@created', type: 'date', dateFormat: 'c' },
            { name: 'RequiresAcknowledgement', mapping: '@requiresacknowledgement', type: 'boolean' },
            { name: 'IsAcknowledged', mapping: '@isacknowledged', type: 'boolean' },
            { name: 'Class' }
        ]
    ),
    sortInfo: {
        field: 'Date',
        direction: 'DESC'
    }
    ,
    listeners: {
        load: function (store, records, options) {
            store.filter('Type', '4');
        }
    }  
});

/*Function to truncate the news text to display*/
NewsManager.truncate = function (text, limit, append) {
    if (typeof text !== 'string')
        return '';
    if (typeof append == 'undefined')
        append = '...';
    var parts = text.split(' ');
    if (parts.length > limit) {
        for (var i = parts.length - 1; i > -1; --i) {            
            if (i + 1 > limit) {
                parts.length = i;
            }
        }
        parts.push(append);
    }
    return parts.join(' ');
}

/* Generates news list in html */
function newsList() {
    var newsListBuilder = '';
    var newscount = 3;
    var j = 0;
    if (NewsManager.newsHomeStore.data.length < 3) {
        newscount = NewsManager.newsHomeStore.data.length;
    } 

    for (var i = 0; i < newscount; i++) {
        newsListBuilder += '<li><a onClick="showMoreNewsWindow(\'' + NewsManager.newsHomeStore.data.items[i].data['ID'] + '\')"><span class="newsSubject">' + NewsManager.newsHomeStore.data.items[i].data['Subject'] + '</span><br />' + NewsManager.truncate(NewsManager.newsHomeStore.data.items[i].data['Strapline'], 25, '...') + '</a></li>'
    }
    return '<div id="newsItems"><ul>' + newsListBuilder + '</ul></div>';
}

/*News datastores for each news class will show up in Popup*/
NewsManager.newsStoreGeneral = new Ext.data.Store({
    reader: new Ext.data.XmlReader(
            {
                record: 'Message'
            }
             , [
                { name: 'ID', mapping: '@id', type: 'int' }
                , { name: 'Type', mapping: '@typeid', type: 'int' }
                , { name: 'Subject' }
                , { name: 'Strapline', mapping: 'Summary' }
                , { name: 'Content' }
                , { name: 'Date', mapping: '@created', type: 'date', dateFormat: 'c' }
                , { name: 'DisplayDate', mapping: '@created', convert: function (v, r) {
                    v = Date.parseDate(v, "c");
                    return v.format('d/m/Y');
                }
                }
                , { name: 'RequiresAcknowledgement', mapping: '@requiresacknowledgement', type: 'boolean' }
                , { name: 'IsAcknowledged', mapping: '@isacknowledged', type: 'boolean' }
                , { name: 'Class' }
            ]
        )
        , sortInfo: {
            field: 'Date',
            direction: 'DESC'
        }
	  , listeners: {
	      load: function (store, records, options) {
	          store.filter([{ property: 'Type', value: '4' }, { property: 'Class', value: 'General'}]);

	      }
	  }
});NewsManager.newsStore['general'] = NewsManager.newsStoreGeneral;

NewsManager.newsStoreMarketing = new Ext.data.Store({
    reader: new Ext.data.XmlReader(
            {
                record: 'Message'
            }
             , [
                { name: 'ID', mapping: '@id', type: 'int' }
                , { name: 'Type', mapping: '@typeid', type: 'int' }
                , { name: 'Subject' }
                , { name: 'Strapline', mapping: 'Summary' }
                , { name: 'Content' }
                , { name: 'Date', mapping: '@created', type: 'date', dateFormat: 'c' }
                , { name: 'DisplayDate', mapping: '@created', convert: function (v, r) {
                    v = Date.parseDate(v, "c");
                    return v.format('d/m/Y');
                }
                }
                , { name: 'RequiresAcknowledgement', mapping: '@requiresacknowledgement', type: 'boolean' }
                , { name: 'IsAcknowledged', mapping: '@isacknowledged', type: 'boolean' }
                , { name: 'Class' }
            ]
        )
       , sortInfo: {
            field: 'Date',
            direction: 'DESC'
        }
	  , listeners: {
	      load: function (store, records, options) {
	          store.filter([{ property: 'Type', value: '4' }, { property: 'Class', value: 'Marketing'}]);
       
	      }
	  }
});
NewsManager.newsStore['marketing'] = NewsManager.newsStoreMarketing;

NewsManager.newsStoreSystem = new Ext.data.Store({
    reader: new Ext.data.XmlReader(
            {
                record: 'Message'
            }
             , [
                { name: 'ID', mapping: '@id', type: 'int' }
                , { name: 'Type', mapping: '@typeid', type: 'int' }
                , { name: 'Subject' }
                , { name: 'Strapline', mapping: 'Summary' }
                , { name: 'Content' }
                , { name: 'Date', mapping: '@created', type: 'date', dateFormat: 'c' }
                , { name: 'DisplayDate', mapping: '@created', convert: function (v, r) {
                    v = Date.parseDate(v, "c");
                    return v.format('d/m/Y');
                }
                }
                , { name: 'RequiresAcknowledgement', mapping: '@requiresacknowledgement', type: 'boolean' }
                , { name: 'IsAcknowledged', mapping: '@isacknowledged', type: 'boolean' }
                , { name: 'Class' }
            ]
        )
        ,sortInfo: {
                field: 'Date',
                direction: 'DESC'
            }
	  , listeners: {
	      load: function (store, records, options) {
	          store.filter([{ property: 'Type', value: '4' }, { property: 'Class', value: 'System'}]);

	      }
	  }
});

NewsManager.newsStore['system'] = NewsManager.newsStoreSystem;


NewsManager.newsStoreIndustryNews = new Ext.data.Store({
    reader: new Ext.data.XmlReader(
            {
                record: 'Message'
            }
             , [
                { name: 'ID', mapping: '@id', type: 'int' }
                , { name: 'Type', mapping: '@typeid', type: 'int' }
                , { name: 'Subject' }
                , { name: 'Strapline', mapping: 'Summary' }
                , { name: 'Content' }
                , { name: 'Date', mapping: '@created', type: 'date', dateFormat: 'c' }
                , { name: 'DisplayDate', mapping: '@created', convert: function (v, r) {
                    v = Date.parseDate(v, "c");
                    return v.format('d/m/Y');
                }
                }
                , { name: 'RequiresAcknowledgement', mapping: '@requiresacknowledgement', type: 'boolean' }
                , { name: 'IsAcknowledged', mapping: '@isacknowledged', type: 'boolean' }
                , { name: 'Class' }
            ]
        )
        , sortInfo: {
            field: 'Date',
            direction: 'DESC'
        }
	    , listeners: {
	        load: function (store, records, options) {
	            store.filter([{ property: 'Type', value: '4' }, { property: 'Class', value: 'Industry News'}]);
          
	        }
	    }
	});

NewsManager.newsStore['industry news'] = NewsManager.newsStoreIndustryNews;



NewsManager.newsStoreCompanyNews = new Ext.data.Store({
    reader: new Ext.data.XmlReader(
            {
                record: 'Message'
            }
             , [
                { name: 'ID', mapping: '@id', type: 'int' }
                , { name: 'Type', mapping: '@typeid', type: 'int' }
                , { name: 'Subject' }
                , { name: 'Strapline', mapping: 'Summary' }
                , { name: 'Content' }
                , { name: 'Date', mapping: '@created', type: 'date', dateFormat: 'c' }
                , { name: 'DisplayDate', mapping: '@created', convert: function (v, r) {
                    v = Date.parseDate(v, "c");
                    return v.format('d/m/Y');
                }
                }
                , { name: 'RequiresAcknowledgement', mapping: '@requiresacknowledgement', type: 'boolean' }
                , { name: 'IsAcknowledged', mapping: '@isacknowledged', type: 'boolean' }
                , { name: 'Class' }
            ]
        )
       , sortInfo: {
            field: 'Date',
            direction: 'DESC'
        }
	  , listeners: {
	      load: function (store, records, options) {
	          store.filter([{ property: 'Type', value: '4' }, { property: 'Class', value: 'Company News'}]);

	      }
	  }
});
NewsManager.newsStore['company news'] = NewsManager.newsStoreCompanyNews;

NewsManager.newsStoreNewFeature = new Ext.data.Store({
    reader: new Ext.data.XmlReader(
            {
                record: 'Message'
            }
             , [
                { name: 'ID', mapping: '@id', type: 'int' }
                , { name: 'Type', mapping: '@typeid', type: 'int' }
                , { name: 'Subject' }
                , { name: 'Strapline', mapping: 'Summary' }
                , { name: 'Content' }
                , { name: 'Date', mapping: '@created', type: 'date', dateFormat: 'c' }
                , { name: 'DisplayDate', mapping: '@created', convert: function (v, r) {
                    v = Date.parseDate(v, "c");
                    return v.format('d/m/Y');
                }
                }
                , { name: 'RequiresAcknowledgement', mapping: '@requiresacknowledgement', type: 'boolean' }
                , { name: 'IsAcknowledged', mapping: '@isacknowledged', type: 'boolean' }
                , { name: 'Class' }
            ]
        )
        , sortInfo: {
            field: 'Date',
            direction: 'DESC'
       }
	  , listeners: {
	      load: function (store, records, options) {
	          store.filter([{ property: 'Type', value: '4' }, { property: 'Class', value: 'New Feature'}]);

	      }
	  }
});
NewsManager.newsStore['new feature'] = NewsManager.newsStoreNewFeature;



/*ListView for each news class in popup*/
NewsManager.listGeneral = new Ext.list.ListView({
    id: 'news-list-popup-general',
    store: NewsManager.newsStoreGeneral,
    hideHeaders: true,
    emptyText: 'No news to display',
    singleSelect: true,
    setAutoScroll: true,
    columns: [
        {
            width: '74px',
            dataIndex: 'DisplayDate'
        },
        {
            width: .68,
            dataIndex: 'Subject'
        }
    ],
    listeners: {
        click: function (dv, index, node, e) {
            var rec = dv.getRecord(node);
            NewsManager.setNewsItem(rec.data.ID);
        }
    }
});

NewsManager.listMarketing = new Ext.list.ListView({
    id: 'news-list-popup-marketing',
    store: NewsManager.newsStoreMarketing,
    hideHeaders: true,
    emptyText: 'No news to display',
    singleSelect: true,
    setAutoScroll: true,
    columns: [
        {
            width: '74px',
            dataIndex: 'DisplayDate'
        },
        {
            width: .68,
            dataIndex: 'Subject'
        }
    ],
    listeners: {
        click: function (dv, index, node, e) {
            var rec = dv.getRecord(node);
            NewsManager.setNewsItem(rec.data.ID);
        }
    }
});
NewsManager.listSystem = new Ext.list.ListView({
    id: 'news-list-popup-system',
    store: NewsManager.newsStoreSystem,
    hideHeaders: true,
    emptyText: 'No news to display',
    singleSelect: true,
    setAutoScroll: true,
    columns: [
        {
            width: '74px',
            dataIndex: 'DisplayDate'
        },
        {
            width: .68,
            dataIndex: 'Subject'
        }
    ],
    listeners: {
        click: function (dv, index, node, e) {
            var rec = dv.getRecord(node);
            NewsManager.setNewsItem(rec.data.ID);
        }
    }
});
NewsManager.listIndustry = new Ext.list.ListView({
    id: 'news-list-popup-industry-news',
    store: NewsManager.newsStoreIndustryNews,
    hideHeaders: true,
    emptyText: 'No news to display',
    singleSelect: true,
    setAutoScroll: true,
    columns: [
        {
            width: '74px',
            dataIndex: 'DisplayDate'
        },
        {
            width: .68,
            dataIndex: 'Subject'
        }
    ],
    listeners: {
        click: function (dv, index, node, e) {
            var rec = dv.getRecord(node);
            NewsManager.setNewsItem(rec.data.ID);
        }
    }
});

NewsManager.listCompany = new Ext.list.ListView({
    id: 'news-list-popup-company-news',
    store: NewsManager.newsStoreCompanyNews,
    hideHeaders: true,
    emptyText: 'No news to display',
    singleSelect: true,
    setAutoScroll: true,
    columns: [
        {
            width: '74px',
            dataIndex: 'DisplayDate'
        },
        {
            width: .68,
            dataIndex: 'Subject'
        }
    ],
    listeners: {
        click: function(dv, index, node, e){
            var rec = dv.getRecord(node);
            NewsManager.setNewsItem(rec.data.ID);
            Ext.each(NewsManager.listIndustry.getSelectedNodes(), function (k, v) {
                NewsManager.listIndustry.deselect(k);
            });
        }
    }
});

NewsManager.listNewFeature = new Ext.list.ListView({
    id: 'news-list-popup-new-feature',
    store: NewsManager.newsStoreNewFeature,
    hideHeaders: true,
    emptyText: 'No news to display',
    singleSelect: true,
    setAutoScroll: true,
    columns: [
        {
            width: '74px',
            dataIndex: 'DisplayDate'
        },
        {
            width: .68,
            dataIndex: 'Subject'
        }
    ],
    listeners: {
        click: function (dv, index, node, e) {
            var rec = dv.getRecord(node);
            NewsManager.setNewsItem(rec.data.ID);
        }
    }
});

NewsManager.setNewsItem = function(id) {
    if(id){
        var mid = id;
        var store = NewsManager.newsHomeStore;
        var i = store.findBy(function(r, i) {
            return (r.data['ID'] == mid );
        });
        var r = store.getAt(i);
        var dateString = '';

        var contentString = r.data['Content'];
        var urlUpdatedString = contentString.replace('<a href', '<a target="_blank" href');

        if (r.data['Date']) dateString = ' [' + r.data['Date'].format('d/m/Y') + ']';
        Ext.getCmp('center-region-container').update('<div id="message-window-content"><h1 class="subject">' + r.data['Subject'] + '</h1>' + urlUpdatedString + '</div>');
    }
};


/*Show News popup window*/
function showMoreNewsWindow(newsID) {
    var defaultNewsHTML = '';
    var newsClass;
    var contentString = '';
    var urlUpdatedString = '';
    if (newsID) {
        var i = NewsManager.newsHomeStore.findBy(function (r, i) {
            return (r.data['ID'] == newsID);
        });
        newsClass = NewsManager.newsHomeStore.getAt(i).data['Class'].toLowerCase();
        contentString = NewsManager.newsHomeStore.getAt(i).get("Content");
        urlUpdatedString = contentString.replace('<a href', '<a target="_blank" href');
        defaultNewsHTML = '<div id="message-window-content"><h1 class="subject">' + NewsManager.newsHomeStore.getAt(i).get("Subject") + '</h1>' + urlUpdatedString + '</div>';
    } else {
        newsID = NewsManager.newsHomeStore.getAt(0).get("ID");
        newsClass = NewsManager.newsHomeStore.getAt(0).data['Class'].toLowerCase();
        contentString = NewsManager.newsHomeStore.getAt(0).get("Content");
        urlUpdatedString = contentString.replace('<a href', '<a target="_blank" href');
        defaultNewsHTML = '<div id="message-window-content"><h1 class="subject">' + NewsManager.newsHomeStore.getAt(0).get("Subject") + '</h1>' + urlUpdatedString + '</div>';
    }

        if (!NewsManager.newsWindow) {
        NewsManager.newsWindow = new Ext.Window({
            id: 'news-reader',
            title: 'News Reader',
            modal: true,
            layout: 'border',
            maximizable: true,
            width: 760,
            height: 540,
            stateful: false,
            items: [{
                region: 'west',
                width: '240px',
                minWidth: 240,
                split: true,
                id: 'news-accordion',
                layout: 'accordion',
                layoutConfig: {
                    animate: true
                },
                autoScroll: true,
                items: [{
                    title: 'General News',
                    id: 'general-list-item',
                    hidden: (NewsManager.newsStore['general'].data.length == 0),
                    autoHeight: true,
                    items: [
                            NewsManager.listGeneral
                        ]
                }
                ,{
                    title: 'Marketing News',
                    id: 'marketing-list-item',
                    hidden: (NewsManager.newsStore['marketing'].data.length == 0),
                    autoHeight: true,
                    items: [
                            NewsManager.listMarketing
                        ]
                }
                , {
                    title: 'System News',
                    id: 'system-list-item',
                    hidden: (NewsManager.newsStore['system'].data.length == 0),
                    autoHeight: true,
                    items: [
                            NewsManager.listSystem
                        ]
                }
                , {
                    title: 'Industry News',
                    id: 'industry-news-list-item',
                    hidden: (NewsManager.newsStore['industry news'].data.length == 0),
                    autoHeight: true,
                    items: [
                            NewsManager.listIndustry
                        ]
                }
                , {
                    title: 'Company News',
                    id: 'company-news-list-item',
                    hidden: (NewsManager.newsStore['company news'].data.length == 0),
                    autoHeight: true,
                    items: [
                            NewsManager.listCompany
                        ]
                }
                ,{
                title: 'New Feature',
                id: 'new-feature-list-item',
                hidden: (NewsManager.newsStore['new feature'].data.length == 0),
                autoHeight: true,
                items: [
                NewsManager.listNewFeature
                ]
                }]
            }, {
                id: 'center-region-container',
                title: 'News Item',
                region: 'center',
                xtype: 'container',
                minWidth: 240,
                layout: 'fit',
                margin: '1',
                autoScroll: true,
                html: defaultNewsHTML
            }],
            constrainHeader: true,
            closeAction: 'hide'
        });
    }
        NewsManager.newsWindow.on('show', function(){ NewsManager.newsWindow.center(); });
        NewsManager.newsWindow.show();
        Ext.getCmp(newsClass.replace(' ', '-') + '-list-item').expand();
        Ext.getCmp('center-region-container').update(defaultNewsHTML);

        var i = NewsManager.newsStore[newsClass].findBy(function (r, i) {
            return (r.data['ID'] == newsID);
        });
        Ext.getCmp('news-list-popup-' + newsClass.replace(' ', '-')).select(i);        
};
