__MultiRSS = DefineClass({
    init: function(id) {
        this.lang = Locale.Gadgets.MultiRSS;
        this.RSSChannels = {};
        var oThis = this;
        this.Core = new __StdModuleCore(this, id, 'telek', this.lang.title, this.lang.desc);
        this.Content.className += ' MultiRSS';
        
        this.reDrawFeedIsUndefine();
        
        this.NewsInRSS = 5;
        var Item = this.Core.AddOption(this.lang['TitleSet']);
        this.CustomGroupName = ce('input', Item, { type: 'text', value: this.Core.GetHeader() } );
        ce('br', Item );
        ce('input', Item, { type: 'button', value: Locale['ToChange'], className: 'button', onclick: function() { this.SetCustomGroupName() }.bind(this) });
        var Item = this.Core.AddOption(this.lang['OwnFeed']);
        this.AddUserRSS= ce('input', Item, { type: 'text' } );
        ce('br', Item );
        ce('input', Item, { type: 'button', value: this.lang['ToAddRss'], className: 'button', onclick: function() { oThis.AddSingleChannel() }});
        var Item = this.Core.AddOption(this.lang['AddGroupOfFeeds']);
        this.RSSGroupsList = ce('select', Item, { innerHTML: '', onchange: function() { oThis.AddRSSChannelFromGroup(this) }});
        var Item = this.Core.AddOption(this.lang['NumOfNews']);
        this.ItemCount = ce('select', Item, { innerHTML: '', onchange: function() {
            oThis.NewsInRSS = parseInt(oThis.ItemCount.value);
            oThis.DrawItems();
            Update.request('MultiRSS', 'module', 'SetItemsCount', { id: oThis.id }, { count: oThis.NewsInRSS });
        }});
        ce('option', this.ItemCount, { value: '1', innerHTML: '1' });
        ce('option', this.ItemCount, { value: '3', innerHTML: '3' });
        ce('option', this.ItemCount, { value: '5', innerHTML: '5',selected: true});
        ce('option', this.ItemCount, { value: '10', innerHTML: '10' });
        ce('option', this.ItemCount, { value: '15', innerHTML: '15' });
        ce('option', this.ItemCount, { value: '20', innerHTML: '20' });
        var Item = this.Core.AddOption(this.lang['View']);
        
        this.ShowTypeOption = ce('select', Item, { innerHTML: '',
        							onchange: function() {
            							oThis.ShowType = parseInt(oThis.ShowTypeOption.value);
            							oThis.DrawItems();
            							Update.request('MultiRSS', 'module', 'SetShowType', { id: oThis.id }, { ShowType: oThis.ShowType });
        							}
        						});
        
        ce('option', this.ShowTypeOption, { innerHTML: this.lang['ViewTree'], value: '0' });
        ce('option', this.ShowTypeOption, { innerHTML: this.lang['ViewLinear'], value: '1' });
        this.ActiveRSS = this.Core.AddOption(this.lang['ActiveFeeds']);
        this.ActiveRSS.className = 'SmallOptions';
        var Item = this.Core.AddOption();
        
        ce('input', Item, { type: 'button', className: 'button', value: Locale['ToRefresh'],
        		onclick: function() {
            					Update.request('MultiRSS', 'module', 'UpdateContent', { id: oThis.id }, {}, true );
        					}})
        
        
        if(this.FromProfile) this.Content.update('<div class="Error">'+this.lang['Loading']+'</div>');
        
        this.Core.AddUpdater('UpdateRSS'+this.id, function() {
            Update.request('MultiRSS', 'module', 'UpdateContent', { id: oThis.id }, {} );
        }, 180);
        this.LoadRSSGroups();
    },
    
    reDrawFeedIsUndefine: function() {
    	var oThis = this;
    	
    	this.Content.update('<div class="message">'+ this.lang.msg['FeedIsUndefine'] +'<br> <a href="javascript:void(0)">'+ this.lang.msg['AddGroupOrFeed'] +'</a></div>');        
        var OpenSettingsLink = this.Content.getElementsByTagName('a')[0];
        OpenSettingsLink.onclick = this.OpenSettings.bind(this);
        OpenSettingsLink.onmouseover = function() { Tooltip.Show(oThis.lang['ShowOptions'], this, 150, null, $('Module.'+this.id)) };
        OpenSettingsLink.onmouseout = function() { Tooltip.Hide() };
    	
    },

    SetCustomGroupName: function() {
        var name = $F(this.CustomGroupName) || this.lang['NewsSet'];
        this.Core.SetHeader($F(this.CustomGroupName));
        Update.request('MultiRSS', 'module', 'SetCustomGroupName', { id: this.id }, { name: $F(this.CustomGroupName) } );
		if(this.workspace)
			Desktop.RenameTab('cMain', this.workspaceId, name);
    },

    OpenSettings: function() {
        this.Core.ToggleOptions();
        this.Options.getElementsBySelector('[type="text"]')[0].focus();
    },

    onOptionsVisible: function() {
        this.UpdateGroupSelector();
    },

    UpdateGroupSelector: function() {
        this.RSSGroupsList.innerHTML = '';
        ce('option', this.RSSGroupsList, { value: '', innerHTML: '-- '+ this.lang['ChooseGroup'] +' --'});
        for (var i in Shared.RSSGroups) {
         ce('option', this.RSSGroupsList, { value: i, innerHTML: Shared.RSSGroups[i].name});
        }
    },

    LoadRSSGroups: function() {
        if (Shared.RSSGroups) return;
        Shared.RSSGroups = {};
        Update.request('MultiRSS', 'module', 'LoadRSSGroups', { id: this.id });        
        
    },

    cb_LoadRSSGroups: function(RSSGroups) {
        Shared.RSSGroups = RSSGroups;
    },

    onCreateFromProfile: function() {
        Update.request('MultiRSS', 'module', 'RequestEnvironment', { id: this.id });
        Update.request('MultiRSS', 'module', 'GetRSS', { id: this.id });
    },

    OpenURL: function(event) {
        var url = Event.element(event).href;
        var TabID = Desktop.NewTab('cMain', url.substr(0,15)+'...', null, null, url);
        Desktop.SetActiveByID('cMain', TabID);
        return(false);
    },

    ShowTooltip: function(event) {
        var id = Event.findElement(event,'a').id.split('.');
        var item = this.RSSChannels[id[2]].content.channel.item[id[3]];
        if (!item.description) return;
        var time = getFullDate(item.pubDate*1000);
        var text = '<h1>'+item.title+'</h1><small>'+time+'</small><p>'+item.description+'</p>';
        Tooltip.Show(text, Event.findElement(event,'a'), 300, null, $('Module.'+id));
    },

    DrawItems: function() {
        var oThis = this;
        this.Content.innerHTML = '';
		ce('IMG', ce('DIV', this.Content, null, {textAlign: 'right'}), {src: '/img/ticons/news_1.gif', className: 'href', title: this.lang['ShowInTab'], onclick: initShowInTab});
        switch(this.ShowType) {
            case 0:
                for (var i in this.RSSChannels) {
                    if (this.RSSChannels[i].content && !this.RSSChannels[i].disable) {
                        var item = this.RSSChannels[i].content;
                        
                        if(!item.channel.item) continue;
                        
                        var ItemsCount = item.channel.item.length;
                        var Current = this.NewsInRSS == 0 ? ItemsCount : this.NewsInRSS;
                        var current = ce('span', this.Content, { innerHTML:'<img src="/img/actions/action-roll-hide.gif"><a href="'+item.channel.link+'" class="header" target="_blank">'+item.channel.title+' ('+Current+'/'+ItemsCount+')</a><br>' });


                        var img = current.getElementsByTagName('img')[0];
                        img.style.cursor = 'pointer';
                        img.title = Locale['ToRoll'];

                        img.onclick = function() {
                            var ul = this.parentNode.nextSibling;
                            $(ul).toggle();
                            if (ul.visible()) {
                                this.src = "/img/actions/action-roll-hide.gif";
                                this.title = 'Свернуть';
                            } else {
                                this.src = "/img/actions/action-roll-show.gif";
                                this.title = Locale['ToRollOn'];
                            }
                        };



                        var href = current.getElementsByTagName('a')[0];
                        href.onclick = function() {
                            var url = this.href;
                            var TabID = Desktop.NewTab('cMain', url.substr(0,15)+'...', null, null, url);
                            Desktop.SetActiveByID('cMain', TabID);
                            return(false);
                        };
                        var ItemsBlock = ce('ul', this.Content, { className: 'ItemsBlock' });
                        var count = 0;
                        for (var j=0;j!=item.channel.item.length;j++) {
                            if (count<this.NewsInRSS) {
                                var OneItem = item.channel.item[j];
                                var time = getFullDate(OneItem.pubDate * 1000)
                                var title = OneItem.title + ', <small>'+time+'</small>';
                                var li = ce('li', ItemsBlock);
                                ce('a', li, { id: 'Module.'+this.id+'.'+i+'.'+j,href: OneItem.link, innerHTML: title,
                                onclick: this.OpenURL.bindAsEventListener(this),
                                onmouseover: this.ShowTooltip.bindAsEventListener(this),
                                onmouseout: function() { Tooltip.Hide() }
                            });
                            count++;
                            }
                        }
                    }
                }
            break;
            case 1:
                var tmp = {};
                var TmpSort = []
                for (var i in this.RSSChannels) {
                    if (this.RSSChannels[i].content && !this.RSSChannels[i].disable) {
                        var item = this.RSSChannels[i].content;
                        
                         if(!item.channel.item) continue;
                        
                         for (var j=0;j!=item.channel.item.length;j++) {
                            var SubItem = item.channel.item[j];
                            var date = new Date(SubItem.pubDate);
                            var timestamp = parseInt(date.getTime());
                            while (tmp[timestamp]) timestamp++;
                            tmp[timestamp] = SubItem;
                            tmp[timestamp].hash = i;
                            tmp[timestamp].id = j;
                        TmpSort.push(timestamp);
                    }
                    }
                }


                TmpSort = TmpSort.sort().reverse();

                var ItemsBlock = ce('ul', this.Content, { className: 'ItemsBlock' });
                var count = 0;
                for (var i=0;i!=TmpSort.length;i++) {
                    if (count<this.NewsInRSS) {
                        var j = 1;
                        var OneItem = tmp[TmpSort[i]];
                        var time = getFullDate(OneItem.pubDate * 1000)
                        var title = OneItem.title + ', <small>'+time+'</small>';
                    var aaa = ce('li', ItemsBlock, {});
                    ce('a', aaa, { id: 'Module.'+this.id+'.'+OneItem.hash+'.'+OneItem.id,href: OneItem.link, innerHTML: title,
                        onclick: this.OpenURL.bindAsEventListener(this),
                        onmouseover: this.ShowTooltip.bindAsEventListener(this),
                        onmouseout: function() { Tooltip.Hide() }
                    });
                    count++;
                }
                }

            break;
        }
		var self = this;
		ce('IMG', ce('DIV', this.Content, null, {textAlign: 'right'}), {src: '/img/ticons/news_1.gif', className: 'href', title: this.lang['ShowInTab'], onclick: initShowInTab});
		if(this.workspace && this.workspace.sflag)
			this.showInTab();	//перерисовываем центральную область после обновления
		
		function initShowInTab()
		{
			self.showInTab();
			Desktop.SetActiveByID('cMain', self.workspaceId);
			mActionsInspector.addAction(self.id, self.workspaceId, 'showInTab', {});
		}
    },

	onDelete: function()
	{
		if(this.workspaceId && Desktop.State.cMain.content[this.workspaceId])
			Desktop.DeleteTabByID('cMain', this.workspaceId);
	},

	onTabDelete: function()
	{
		if(this.workspace && this.workspace.sflag)
		{
			//this.Content.style.display = 'block';
			this.workspace = null;
			this.workspaceId = null;
		}
	},

	showInTab: function()
	{
		Desktop.initTabFromModule(this.id, this.CustomGroupName.value);
		this.workspace.style.padding = '15px';
		this.workspace.sflag = true;
//		this.Content.style.display = 'none';
		switch(this.ShowType)
		{
			case 0:
				for(var i in this.RSSChannels)
				{
					if(this.RSSChannels[i].content && !this.RSSChannels[i].disable)
					{
						var item = this.RSSChannels[i].content;
						if(!item.channel.item)
							continue;
						var ItemsCount = item.channel.item.length;
						var Current = this.NewsInRSS == 0 ? ItemsCount : this.NewsInRSS;
						var current = ce('SPAN', this.workspace, null, {fontWeight: 'bold', textTransform: 'uppercase'});
						var href = ce('A', current, {href: item.channel.link, className: 'header', target: '_blank', innerHTML: item.channel.title +' ('+Current+'/'+ItemsCount+')', onclick: 
							function() {
								var url = this.href;
								var TabID = Desktop.NewTab('cMain', url.substr(0,15)+'...', null, null, url);
								Desktop.SetActiveByID('cMain', TabID);
								return(false);
							}});
						ce('BR', current);
						var ItemsBlock = ce('UL', this.workspace, {className: 'Boxes'});
						var count = 0;
						for(var j=0; j!=item.channel.item.length; j++)
						{
							if(count < this.NewsInRSS)
							{
								var OneItem = item.channel.item[j];
								var time = getFullDate(OneItem.pubDate * 1000);
								var li = ce('LI', ItemsBlock);
								ce('A', li, {id: 'Module.'+this.id+'.'+i+'.'+j, href: OneItem.link, innerHTML: OneItem.title, onclick: this.OpenURL.bindAsEventListener(this)});
								ce('IMG', li, {src: '/img/dialog/open_newtab.gif', title: Locale['ToOpenInNewWindow'], className: 'href', url: OneItem.link, onclick: openInNewWindow, align: 'absMiddle'}, {marginLeft: '10px'})
								ce('SMALL', ce('P', li), {innerHTML: time});
								ce('P', li, {innerHTML: OneItem.description});
								count++;
							}
						}
					}
				}
				break;
			case 1:
				var tmp = {};
				var TmpSort = [];
				for(var i in this.RSSChannels)
				{
					if(this.RSSChannels[i].content && !this.RSSChannels[i].disable)
					{
						var item = this.RSSChannels[i].content;
						if(!item.channel.item)
							continue;
						for(var j=0; j!=item.channel.item.length; j++)
						{
							var SubItem = item.channel.item[j];
							var date = new Date(SubItem.pubDate);
							var timestamp = parseInt(date.getTime());
							while (tmp[timestamp]) timestamp++;
							tmp[timestamp] = SubItem;
							tmp[timestamp].hash = i;
							tmp[timestamp].id = j;
							tmp[timestamp].site = item.channel.link;
							TmpSort.push(timestamp);
						}
					}
				}
				TmpSort = TmpSort.sort().reverse();
				var ItemsBlock = ce('ul', this.workspace, {className: 'Boxes'});
				var count = 0;
				for(var i=0; i!=TmpSort.length; i++)
				{
					if(count < this.NewsInRSS)
					{
						var j = 1;
						var OneItem = tmp[TmpSort[i]];
						var time = getFullDate(OneItem.pubDate * 1000)
						var li = ce('LI', ItemsBlock);
						ce('A', li, {id: 'Module.'+this.id+'.'+i+'.'+j, href: OneItem.link, innerHTML: OneItem.title, onclick: this.OpenURL.bindAsEventListener(this)});
						ce('IMG', li, {src: '/img/dialog/open_newtab.gif', title: Locale['ToOpenInNewWindow'], className: 'href', url: OneItem.link, onclick: openInNewWindow, align: 'absMiddle'}, {marginLeft: '10px'});
						ce('SMALL', ce('P', li), {innerHTML: time});
						ce('P', li, {innerHTML: OneItem.description});
						ce('SMALL', ce('P', li, null, {textAlign: 'right'}), {innerHTML: OneItem.site});
						count++;
					}
				}
				break;
		}
	},

    RedrawRSSList: function() {
        this.ActiveRSS.update('');
        for (var i in this.RSSChannels) {
            var RSS = this.RSSChannels[i];
            var item = ce('div', this.ActiveRSS );
            ce('img', item, { src: '/img/actions/close-red.gif', id: i, className: 'RedCross', title: Locale['ToDelete'], onclick: this.DeleteChannel.bindAsEventListener(this) });
            var img = !RSS.disable ? '/img/actions/checkbox-checked-red.gif' : '/img/actions/checkbox-red.gif';
            ce('img', item, { src: img, id: i, className: 'RedCheckbox', title: Locale['ToSwitchOff'], onclick: this.DisableRSS.bindAsEventListener(this) });
            var title = (RSS.title) ? RSS.title : RSS.url;
            var FullTitle = title;
            if(title.length>20) title = title.substr(0,20)+'...';
            var t = ce('a', item, { id: 'Module.'+this.id+'.'+i, href: RSS.url, target: '_blank', title: FullTitle, alt: FullTitle});
            $(t).update(title);
            ce('br', item);
        }
    },

    DeleteChannel: function(event) {
        var RSS = Event.element(event).id;
        delete this.RSSChannels[RSS];
        this.RedrawRSSList();
        this.DrawItems();
        Update.request('MultiRSS', 'module', 'DeleteRSS', { id: this.id }, { items: [RSS] });
    },

    DisableRSS: function(event) {
        var obj = Event.element(event)
        var RSS = obj.id;
        this.RSSChannels[RSS].disable = true;
        obj.src = '/img/actions/checkbox-red.gif';
        obj.onclick = this.EnableRSS.bindAsEventListener(this);
        obj.title = 'Включить канал';
        this.DrawItems();
    },

    EnableRSS: function(event) {
        var obj = Event.element(event)
        var RSS = obj.id;
        this.RSSChannels[RSS].disable = false;
        obj.src = '/img/actions/checkbox-checked-red.gif';
        obj.onclick = this.DisableRSS.bindAsEventListener(this)
        obj.title = Locale['ToSwitchOffFeed'];
        this.DrawItems();
    }, 

    AddRSSChannelFromGroup: function(item) {
        if (item.value == '') return;
        var NewRSS = [];
        for (var i=0;i!=Shared.RSSGroups[item.value].content.length;i++) {
            var md5 = hex_md5(Shared.RSSGroups[item.value].content[i]);
            if (!this.RSSChannels[md5]) {
                NewRSS.push(escape(Shared.RSSGroups[item.value].content[i]));
            }
        }
        if (NewRSS.length) Update.request('MultiRSS', 'module', 'AddRSS', { id: this.id }, { items: NewRSS }, true );
    },

    Update: function(channels) {
        if (!channels) return;
        for (var i in channels) {        	
        	if(!this.RSSChannels[i]) continue;        	
            var RSS = channels[i];
            
            if(!RSS.channel) continue;
            
            this.RSSChannels[i].title = RSS.channel.title;
            this.RSSChannels[i].content = RSS;
        }
        this.RedrawRSSList();
        this.DrawItems();
    },

    AddSingleChannel: function() {
        var url = $F(this.AddUserRSS);
        if (!url) return;
        var hash = hex_md5(url);
        if (this.RSSChannels[hash]) {
            alert(this.lang.msg['FeedExist']);
            return;
        }

        if (!(/http:\/\//).test(url)) url = 'http://'+url;
        this.AddUserRSS.value = '';
        this.AddUserRSS.focus();
        Update.request('MultiRSS', 'module', 'AddRSS', { id: this.id }, { items: [escape(url)] }, true );
    },

    Relay: function(data, part) {
    	
    	//alert(data.event.action);
    	
        var oThis = this;
        switch (data.event.action) {
            case 'LoadRSSGroups':
                this.cb_LoadRSSGroups(data.variables.RSSGroups);
            break;
            case 'GetRSS':
            	if(!isEmpty(this.RSSChannels) && !isEmpty(data.variables.content)) {	
					this.Update(data.variables.content);               	
              	}
                //this.RedrawRSSList();
                //this.DrawItems();
            break;
            case 'RequestEnvironment':
                with(data.variables) {
                	
                	if(!RSSList) this.reDrawFeedIsUndefine();
                	
                  this.ShowType  = parseInt(ShowType);
                  this.NewsInRSS = parseInt(count);
                                    
                  this.RSSChannels = RSSList ? RSSList : {};
                }
                if (data.variables.CustomName) {
                    this.Core.SetHeader(data.variables.CustomName);
                    this.CustomGroupName.value = data.variables.CustomName;
                }
                for (var i=0;i!=this.ShowTypeOption.childNodes.length;i++) {
                    var current = this.ShowTypeOption.childNodes[i];
                    if (current.value == this.ShowType) current.selected = 'selected';
                }
                for (var i=0;i!=this.ItemCount.childNodes.length;i++) {
                    var current = this.ItemCount.childNodes[i];
                    if (current.value == this.NewsInRSS) current.selected = 'selected';
                }
                this.RedrawRSSList();
				mActionsInspector.execute(this.id);
				break;
            case 'AddRSS':
                if (!this.NewsInRSS) this.NewsInRSS = 15;
                if (!this.ShowType) this.ShowType  = 0;


                if (data.variables.RSSList) {
                    for ( var i in data.variables.RSSList) this.RSSChannels[i] = data.variables.RSSList[i];
                    this.RedrawRSSList();
                } else {
                    this.Update(data.variables.content);
                    this.DrawItems();
                }
            break;
            case 'UpdateContent':
                this.Update(data.variables.content);
                                
                if(!isEmpty(this.RSSChannels) && !isEmpty(data.variables.content)) {
                	this.DrawItems();                 	     
                }else{
                	this.reDrawFeedIsUndefine();                
                }
                
            break;
        }

    }

});