// TvModule.js
//


Type.createNamespace('TvModule.BO');

////////////////////////////////////////////////////////////////////////////////
// TvModule.BO.ChannelContent

TvModule.BO.ChannelContent = function TvModule_BO_ChannelContent() {
    /// <field name="Id" type="Number" integer="true">
    /// </field>
    /// <field name="Name" type="String">
    /// </field>
    /// <field name="Icon" type="String">
    /// </field>
    /// <field name="Program" type="Array" elementType="Program">
    /// </field>
}
TvModule.BO.ChannelContent.prototype = {
    Id: 0,
    Name: null,
    Icon: null,
    Program: null
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.BO.ChannelsGroups

TvModule.BO.ChannelsGroups = function TvModule_BO_ChannelsGroups() {
    /// <field name="Channels" type="Array" elementType="ElementsEntry">
    /// </field>
    /// <field name="Groups" type="Array" elementType="ElementsEntry">
    /// </field>
}
TvModule.BO.ChannelsGroups.prototype = {
    Channels: null,
    Groups: null
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.BO.ElementsEntry

TvModule.BO.ElementsEntry = function TvModule_BO_ElementsEntry() {
    /// <field name="Id" type="Number" integer="true">
    /// </field>
    /// <field name="Name" type="String">
    /// </field>
}
TvModule.BO.ElementsEntry.prototype = {
    Id: 0,
    Name: null
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.BO.Genre

TvModule.BO.Genre = function TvModule_BO_Genre() {
    /// <field name="Id" type="Number" integer="true">
    /// </field>
    /// <field name="Name" type="String">
    /// </field>
    /// <field name="Subgenres" type="Array" elementType="Subgenre">
    /// </field>
}
TvModule.BO.Genre.prototype = {
    Id: 0,
    Name: null,
    Subgenres: null
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.BO.Program

TvModule.BO.Program = function TvModule_BO_Program() {
    /// <field name="Id" type="Number" integer="true">
    /// </field>
    /// <field name="GenreId" type="Number" integer="true">
    /// </field>
    /// <field name="AnnonsId" type="Number" integer="true">
    /// </field>
    /// <field name="Time" type="String">
    /// </field>
    /// <field name="Content" type="String">
    /// </field>
}
TvModule.BO.Program.prototype = {
    Id: 0,
    GenreId: 0,
    AnnonsId: 0,
    Time: null,
    Content: null
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.BO.Subgenre

TvModule.BO.Subgenre = function TvModule_BO_Subgenre() {
    /// <field name="Id" type="Number" integer="true">
    /// </field>
    /// <field name="Name" type="String">
    /// </field>
}
TvModule.BO.Subgenre.prototype = {
    Id: 0,
    Name: null
}


Type.createNamespace('TvModule');

////////////////////////////////////////////////////////////////////////////////
// TvModule.FloatingWindow

TvModule.FloatingWindow = function TvModule_FloatingWindow(container) {
    /// <param name="container" type="Object" domElement="true">
    /// </param>
    /// <field name="_container" type="Object" domElement="true">
    /// </field>
    if (container != null) {
        this.set_container(container);
    }
    else {
        this.set_container(document.createElement('div'));
        this.get_container().className = 'FloatingDiv';
        document.body.appendChild(this.get_container());
    }
    this.get_container().attachEvent('onclick', Delegate.create(this, this.hide));
}
TvModule.FloatingWindow.prototype = {
    _container: null,
    
    get_container: function TvModule_FloatingWindow$get_container() {
        /// <value type="Object" domElement="true"></value>
        return this._container;
    },
    set_container: function TvModule_FloatingWindow$set_container(value) {
        /// <value type="Object" domElement="true"></value>
        this._container = value;
        return value;
    },
    
    show: function TvModule_FloatingWindow$show(el, message) {
        /// <param name="el" type="Object" domElement="true">
        /// </param>
        /// <param name="message" type="String">
        /// </param>
        this.get_container().innerHTML = message;
        this.get_container().style.visibility = 'visible';
        this.get_container().style.left = el.runtimeStyle.left;
        this.get_container().style.top = el.runtimeStyle.top;
    },
    
    hide: function TvModule_FloatingWindow$hide() {
        this.get_container().style.visibility = 'hidden';
    }
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.Core

TvModule.Core = function TvModule_Core() {
    /// <field name="_imagesUrl" type="String" static="true">
    /// </field>
    /// <field name="_column" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_days" type="Array" elementType="String">
    /// </field>
    /// <field name="_months" type="Array" elementType="String">
    /// </field>
    /// <field name="_timeFilterParams" type="Array" elementType="String">
    /// </field>
    /// <field name="genreId" type="Number" integer="true">
    /// </field>
    /// <field name="timeStart" type="Number" integer="true">
    /// </field>
    /// <field name="timeEnd" type="Number" integer="true">
    /// </field>
    /// <field name="_channels" type="Array" elementType="ChannelContent">
    /// </field>
    /// <field name="_genreCollection" type="Object">
    /// </field>
    /// <field name="_selectedDate" type="Date">
    /// </field>
    /// <field name="_siteContent" type="Object" domElement="true">
    /// </field>
    /// <field name="_moduleContent" type="Object" domElement="true">
    /// </field>
    /// <field name="_navigateMenu" type="Object" domElement="true">
    /// </field>
    /// <field name="_programsHead" type="Object" domElement="true">
    /// </field>
    /// <field name="_filter" type="Object" domElement="true">
    /// </field>
    /// <field name="_programsContent" type="Object" domElement="true">
    /// </field>
    /// <field name="_floatingWindow" type="TvModule.FloatingWindow">
    /// </field>
    /// <field name="_viewModeSelect" type="Object" domElement="true">
    /// </field>
    /// <field name="_dateSelect" type="Object" domElement="true">
    /// </field>
    /// <field name="_channelSelect" type="Object" domElement="true">
    /// </field>
    this._days = [ '\u0412\u043e\u0441\u043a\u0440\u0435\u0441\u0435\u043d\u044c\u0435', '\u041f\u043e\u043d\u0435\u0434\u0435\u043b\u044c\u043d\u0438\u043a', '\u0412\u0442\u043e\u0440\u043d\u0438\u043a', '\u0421\u0440\u0435\u0434\u0430', '\u0427\u0435\u0442\u0432\u0435\u0440\u0433', '\u041f\u044f\u0442\u043d\u0438\u0446\u0430', '\u0421\u0443\u0431\u0431\u043e\u0442\u0430' ];
    this._months = [ '\u044f\u043d\u0432\u0430\u0440\u044f', '\u0444\u0435\u0432\u0440\u0430\u043b\u044f', '\u043c\u0430\u0440\u0442\u0430', '\u0430\u043f\u0440\u0435\u043b\u044f', '\u043c\u0430\u044f', '\u0438\u044e\u043d\u044f', '\u0438\u044e\u043b\u044f', '\u0430\u0432\u0433\u0443\u0441\u0442\u0430', '\u0441\u0435\u043d\u0442\u044f\u0431\u0440\u044f', '\u043e\u043a\u0442\u044f\u0431\u0440\u044f', '\u043d\u043e\u044f\u0431\u0440\u044f', '\u0434\u0435\u043a\u0430\u0431\u0440\u044f' ];
    this._timeFilterParams = [ '\u0412\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430:All', '\u0423\u0442\u0440\u043e\u043c:5-12', '\u0414\u043d\u0435\u043c:12-18', '\u0412\u0435\u0447\u0435\u0440\u043e\u043c:18-23', '\u041d\u043e\u0447\u044c\u044e:23-5', '\u0421\u0435\u0439\u0447\u0430\u0441:Now' ];
    this.genreId = -1;
    this.timeStart = -1;
    this.timeEnd = -1;
    this.set_genreCollection({});
    this.buildNavigate();
    this._buildFilter();
}
TvModule.Core._getDate = function TvModule_Core$_getDate(dateString) {
    /// <param name="dateString" type="String">
    /// </param>
    /// <returns type="Date"></returns>
    var dateArr = dateString.split('-');
    var year = TvModule.Framework.Functions.parseInt(dateArr[0]);
    var month = TvModule.Framework.Functions.parseInt(dateArr[1]) - 1;
    var date = TvModule.Framework.Functions.parseInt(dateArr[2]);
    return new Date(year, month, date);
}
TvModule.Core._getChannelHead = function TvModule_Core$_getChannelHead(channel) {
    /// <param name="channel" type="TvModule.BO.ChannelContent">
    /// </param>
    /// <returns type="Object" domElement="true"></returns>
    var channelHead = document.createElement('table');
    var channelHeadRow = channelHead.insertRow(-1);
    if (!String.isNullOrEmpty(channel.Icon)) {
        var channelHeadIcon = channelHeadRow.insertCell(-1);
        var channelIcon = document.createElement('img');
        channelIcon.src = TvModule.Core._imagesUrl + channel.Icon;
        channelIcon.alt = channel.Icon;
        channelHeadIcon.appendChild(channelIcon);
    }
    var channelHeadName = channelHeadRow.insertCell(-1);
    var nameDiv = document.createElement('div');
    nameDiv.className = 'channelName';
    nameDiv.innerHTML = channel.Name;
    channelHeadName.appendChild(nameDiv);
    return channelHead;
}
TvModule.Core._getIntTime = function TvModule_Core$_getIntTime(hours, minutes) {
    /// <param name="hours" type="Number" integer="true">
    /// </param>
    /// <param name="minutes" type="Number" integer="true">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (!(minutes > 0)) {
        minutes = 0;
    }
    return hours * 100 + minutes;
}
TvModule.Core._getTestTime = function TvModule_Core$_getTestTime(time) {
    /// <param name="time" type="String">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    var timeStr = time.replace(':', '');
    if (timeStr.indexOf('0', 0) === 0) {
        timeStr = timeStr.remove(0, 1);
    }
    return parseInt(timeStr);
}
TvModule.Core.prototype = {
    genreId: 0,
    timeStart: 0,
    timeEnd: 0,
    _channels: null,
    
    get_channels: function TvModule_Core$get_channels() {
        /// <value type="Array" elementType="ChannelContent"></value>
        return this._channels;
    },
    set_channels: function TvModule_Core$set_channels(value) {
        /// <value type="Array" elementType="ChannelContent"></value>
        this._channels = value;
        return value;
    },
    
    _genreCollection: null,
    
    get_genreCollection: function TvModule_Core$get_genreCollection() {
        /// <value type="Object"></value>
        return this._genreCollection;
    },
    set_genreCollection: function TvModule_Core$set_genreCollection(value) {
        /// <value type="Object"></value>
        this._genreCollection = value;
        return value;
    },
    
    get_curentTime: function TvModule_Core$get_curentTime() {
        /// <value type="Date"></value>
        return Date.get_now();
    },
    
    get_currentIntTime: function TvModule_Core$get_currentIntTime() {
        /// <value type="Number" integer="true"></value>
        return TvModule.Core._getIntTime(this.get_curentTime().getHours(), this.get_curentTime().getMinutes());
    },
    
    _selectedDate: null,
    
    get_selectedDate: function TvModule_Core$get_selectedDate() {
        /// <value type="Date"></value>
        return this._selectedDate;
    },
    set_selectedDate: function TvModule_Core$set_selectedDate(value) {
        /// <value type="Date"></value>
        this._selectedDate = value;
        return value;
    },
    
    _siteContent: null,
    
    get_siteContent: function TvModule_Core$get_siteContent() {
        /// <value type="Object" domElement="true"></value>
        return this._siteContent || (this._siteContent = document.getElementById('_TV_siteContent'));
    },
    
    _moduleContent: null,
    
    get_moduleContent: function TvModule_Core$get_moduleContent() {
        /// <value type="Object" domElement="true"></value>
        return this._moduleContent || (this._moduleContent = document.getElementById('_TV_moduleContent'));
    },
    
    _navigateMenu: null,
    
    get_navigateMenu: function TvModule_Core$get_navigateMenu() {
        /// <value type="Object" domElement="true"></value>
        return this._navigateMenu || (this._navigateMenu = document.getElementById('_TV_navigate'));
    },
    
    _programsHead: null,
    
    get_programsHead: function TvModule_Core$get_programsHead() {
        /// <value type="Object" domElement="true"></value>
        return this._programsHead || (this._programsHead = document.getElementById('_TV_head'));
    },
    
    _filter: null,
    
    get_filter: function TvModule_Core$get_filter() {
        /// <value type="Object" domElement="true"></value>
        return this._filter || (this._filter = document.getElementById('_TV_filter'));
    },
    
    _programsContent: null,
    
    get_programsContent: function TvModule_Core$get_programsContent() {
        /// <value type="Object" domElement="true"></value>
        return this._programsContent || (this._programsContent = document.getElementById('_TV_content'));
    },
    
    _floatingWindow: null,
    
    get_floatingWindow: function TvModule_Core$get_floatingWindow() {
        /// <value type="TvModule.FloatingWindow"></value>
        return this._floatingWindow;
    },
    set_floatingWindow: function TvModule_Core$set_floatingWindow(value) {
        /// <value type="TvModule.FloatingWindow"></value>
        this._floatingWindow = value;
        return value;
    },
    
    get_isCurrentDaySelected: function TvModule_Core$get_isCurrentDaySelected() {
        /// <value type="Boolean"></value>
        return Date.get_today().toString() === this.get_selectedDate().toString();
    },
    
    _viewModeSelect: null,
    _dateSelect: null,
    _channelSelect: null,
    
    buildNavigate: function TvModule_Core$buildNavigate() {
        var table = document.createElement('table');
        var tr1 = table.insertRow(-1);
        var td1_1 = tr1.insertCell(-1);
        td1_1.innerHTML = '\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c:';
        var td1_2 = tr1.insertCell(-1);
        td1_2.innerHTML = '\u0414\u0430\u0442\u0430:';
        var td1_3 = tr1.insertCell(-1);
        td1_3.innerHTML = '\u041a\u0430\u043d\u0430\u043b \u0438\u043b\u0438 \u043d\u0430\u0431\u043e\u0440 \u043a\u0430\u043d\u0430\u043b\u043e\u0432:';
        var td1_4 = tr1.insertCell(-1);
        td1_4.rowSpan = 2;
        var buttonView = document.createElement('input');
        buttonView.className = 'button';
        buttonView.type = 'button';
        buttonView.value = '\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c';
        buttonView.attachEvent('onclick', Delegate.create(this, this.onButtonViewClick));
        td1_4.appendChild(buttonView);
        var tr2 = table.insertRow(-1);
        var td2_1 = tr2.insertCell(-1);
        this._viewModeSelect = document.createElement('select');
        this._createViewModeOptions();
        td2_1.appendChild(this._viewModeSelect);
        var td2_2 = tr2.insertCell(-1);
        this._dateSelect = document.createElement('select');
        this._createDateOptions();
        td2_2.appendChild(this._dateSelect);
        var td2_3 = tr2.insertCell(-1);
        this._channelSelect = document.createElement('select');
        TvModule.Framework.RequestHelpers.sendDataRequest('GetGroupsChannels', Delegate.create(this, this._createGroupChannelOptions));
        td2_3.appendChild(this._channelSelect);
        this.get_navigateMenu().appendChild(table);
        this.set_floatingWindow(new TvModule.FloatingWindow());
    },
    
    _createViewModeOptions: function TvModule_Core$_createViewModeOptions() {
        var viewModeOp1 = document.createElement('option');
        viewModeOp1.value = '0';
        viewModeOp1.innerHTML = '\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430';
        this._viewModeSelect.appendChild(viewModeOp1);
        var viewModeOp2 = document.createElement('option');
        viewModeOp2.value = '1';
        viewModeOp2.innerHTML = '\u0410\u043d\u043e\u043d\u0441';
        this._viewModeSelect.appendChild(viewModeOp2);
    },
    
    _createDateOptions: function TvModule_Core$_createDateOptions() {
        var dayNum = this.get_curentTime().getDay();
        var maxDays = 7;
        if (dayNum === 6) {
            maxDays = 14;
        }
        for (var i = 0; i <= maxDays; i++) {
            var date = new Date(this.get_curentTime().getFullYear(), this.get_curentTime().getMonth(), this.get_curentTime().getDate() + i - dayNum);
            var date_op = document.createElement('option');
            date_op.value = date.format('yyyy-MM-dd');
            var day = (i < 7) ? this._days[i] : this._days[i - 7];
            if (i === 7 || i === 14) {
                day = this._days[0];
            }
            date_op.innerHTML = day + ', ' + date.format('dd.MM');
            this._dateSelect.appendChild(date_op);
            if (dayNum === i) {
                date_op.selected = true;
            }
        }
    },
    
    _createGroupChannelOptions: function TvModule_Core$_createGroupChannelOptions(dmResult) {
        /// <param name="dmResult" type="TvModule.Framework.DmResult">
        /// </param>
        if (dmResult.get_state() === TvModule.Framework.DmStatus.Ok) {
            var channel_op_all = document.createElement('option');
            channel_op_all.value = '*';
            channel_op_all.innerHTML = '\u0412\u0441\u0435 \u043a\u0430\u043d\u0430\u043b\u044b';
            this._channelSelect.appendChild(channel_op_all);
            var channelsGroups = dmResult.get_result();
            var groupsOptGroup = document.createElement('optgroup');
            groupsOptGroup.setAttribute('label', '\u0413\u0440\u0443\u043f\u043f\u044b \u043a\u0430\u043d\u0430\u043b\u043e\u0432');
            var $enum1 = channelsGroups.Groups.getEnumerator();
            while ($enum1.moveNext()) {
                var group = $enum1.get_current();
                var group_op = document.createElement('option');
                group_op.value = group.Id.toString();
                group_op.innerHTML = group.Name;
                groupsOptGroup.appendChild(group_op);
            }
            this._channelSelect.appendChild(groupsOptGroup);
            var channelsOptGroup = document.createElement('optgroup');
            channelsOptGroup.setAttribute('label', '\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u0430\u043d\u0430\u043b\u044b');
            var $enum2 = channelsGroups.Channels.getEnumerator();
            while ($enum2.moveNext()) {
                var channel = $enum2.get_current();
                var channel_op = document.createElement('option');
                channel_op.value = channel.Id.toString();
                channel_op.innerHTML = channel.Name;
                channelsOptGroup.appendChild(channel_op);
            }
            this._channelSelect.appendChild(channelsOptGroup);
        }
    },
    
    onButtonViewClick: function TvModule_Core$onButtonViewClick() {
        this.set_selectedDate(TvModule.Core._getDate(this._dateSelect.value));
        var param = {};
        param['Date'] = this._dateSelect.value;
        param['chId'] = (this._channelSelect.options[this._channelSelect.selectedIndex]).value;
        this.getChannels(param);
    },
    
    buildContent: function TvModule_Core$buildContent(channels) {
        /// <param name="channels" type="Array" elementType="ChannelContent">
        /// </param>
        this._buildHead();
        this._buildProgramContent(channels);
    },
    
    _buildFilter: function TvModule_Core$_buildFilter() {
        this._createGenres();
        this._createTimeFilter();
    },
    
    _createGenres: function TvModule_Core$_createGenres() {
        TvModule.Framework.RequestHelpers.sendDataRequest('GetGenres', Delegate.create(this, this._getGenresComplete));
    },
    
    _getGenresComplete: function TvModule_Core$_getGenresComplete(dmResult) {
        /// <param name="dmResult" type="TvModule.Framework.DmResult">
        /// </param>
        if (dmResult.get_state() === TvModule.Framework.DmStatus.Ok) {
            var genres = dmResult.get_result();
            var genreUl = document.createElement('ul');
            genreUl.className = 'genre';
            var allLi = document.createElement('li');
            var allA = document.createElement('a');
            allA.innerHTML = '\u0412\u0441\u0435';
            allLi.appendChild(allA);
            genreUl.appendChild(allLi);
            var gfBtnAll = new ScriptFX.UI.Button(allA);
            gfBtnAll.set_actionArgument('-1');
            gfBtnAll.add_click(Delegate.create(this, this._gfBtnClick));
            var $enum1 = genres.getEnumerator();
            while ($enum1.moveNext()) {
                var genre = $enum1.get_current();
                this.get_genreCollection()[genre.Id.toString()] = genre;
                var genreLi = document.createElement('li');
                var genreA = document.createElement('a');
                genreA.innerHTML = genre.Name;
                genreLi.appendChild(genreA);
                var gfBtn = new ScriptFX.UI.Button(genreA);
                gfBtn.set_actionArgument(genre.Id.toString());
                gfBtn.add_click(Delegate.create(this, this._gfBtnClick));
                if (genre.Subgenres.length > 0) {
                    var subgenreUl = document.createElement('ul');
                    subgenreUl.style.display = 'none';
                    var $enum2 = genre.Subgenres.getEnumerator();
                    while ($enum2.moveNext()) {
                        var subgenre = $enum2.get_current();
                        var subgenreLi = document.createElement('li');
                        var subgenreA = document.createElement('a');
                        subgenreA.innerHTML = subgenre.Name;
                        subgenreLi.appendChild(subgenreA);
                        var sgfBtn = new ScriptFX.UI.Button(subgenreA);
                        sgfBtn.set_actionArgument(subgenre.Id.toString());
                        sgfBtn.add_click(Delegate.create(this, this._gfBtnClick));
                        subgenreUl.appendChild(subgenreLi);
                    }
                    genreLi.appendChild(subgenreUl);
                }
                genreUl.appendChild(genreLi);
            }
            var overLi = document.createElement('li');
            var overA = document.createElement('a');
            overA.innerHTML = '\u0414\u0440\u0443\u0433\u0438\u0435';
            overLi.appendChild(overA);
            genreUl.appendChild(overLi);
            var gfBtnOver = new ScriptFX.UI.Button(overA);
            gfBtnOver.set_actionArgument('0');
            gfBtnOver.add_click(Delegate.create(this, this._gfBtnClick));
            this.get_filter().appendChild(genreUl);
        }
    },
    
    _gfBtnClick: function TvModule_Core$_gfBtnClick(sender, e) {
        /// <param name="sender" type="Object">
        /// </param>
        /// <param name="e" type="EventArgs">
        /// </param>
        var button = sender;
        this.genreId = parseInt(button.get_actionArgument());
        this.rebuildContent();
    },
    
    _createTimeFilter: function TvModule_Core$_createTimeFilter() {
        var timeUl = document.createElement('ul');
        var $enum1 = this._timeFilterParams.getEnumerator();
        while ($enum1.moveNext()) {
            var timeParam = $enum1.get_current();
            var arrParam = timeParam.split(':');
            var name = arrParam[0];
            var times = arrParam[1];
            var li = document.createElement('li');
            var a = document.createElement('a');
            a.innerHTML = name;
            li.appendChild(a);
            var tBtn = new ScriptFX.UI.Button(a);
            tBtn.set_actionArgument(times);
            tBtn.add_click(Delegate.create(this, this._tBtnClick));
            timeUl.appendChild(li);
        }
        this.get_filter().appendChild(timeUl);
    },
    
    _tBtnClick: function TvModule_Core$_tBtnClick(sender, e) {
        /// <param name="sender" type="Object">
        /// </param>
        /// <param name="e" type="EventArgs">
        /// </param>
        var aTime = sender;
        var timesValue = aTime.get_actionArgument();
        if (timesValue === 'All') {
            this.timeStart = -1;
            this.timeEnd = -1;
        }
        else if (timesValue === 'Now') {
            this.timeEnd = this.timeStart = this.get_currentIntTime();
        }
        else {
            var timesArr = timesValue.split('-');
            this.timeStart = TvModule.Core._getIntTime(parseInt(timesArr[0]));
            this.timeEnd = TvModule.Core._getIntTime(parseInt(timesArr[1]));
        }
        this.rebuildContent();
    },
    
    _buildHead: function TvModule_Core$_buildHead() {
        this.get_programsHead().innerHTML = this._days[this.get_selectedDate().getDay()] + ', ' + this.get_selectedDate().getDate() + ' ' + this._months[this.get_selectedDate().getMonth()];
    },
    
    _buildProgramContent: function TvModule_Core$_buildProgramContent(channels) {
        /// <param name="channels" type="Array" elementType="ChannelContent">
        /// </param>
        var table = document.createElement('table');
        table.className = 'channelItems';
        var $enum1 = channels.getEnumerator();
        while ($enum1.moveNext()) {
            var channel = $enum1.get_current();
            var programs = this._filterPrograms(channel);
            if (programs.length === 0) {
                continue;
            }
            var trName = table.insertRow(-1);
            var tdName = trName.insertCell(-1);
            tdName.colSpan = TvModule.Core._column;
            var channelHead = TvModule.Core._getChannelHead(channel);
            tdName.appendChild(channelHead);
            var itemNum = Math.ceil(programs.length / TvModule.Core._column);
            var trItems = table.insertRow(-1);
            for (var col = 1; col <= TvModule.Core._column; col++) {
                var tdItems = trItems.insertCell(-1);
                tdItems.className = 'programItems';
                var startEl = itemNum * (col - 1);
                if (programs[startEl] != null) {
                    var endEl;
                    if (col === TvModule.Core._column) {
                        endEl = programs.length;
                    }
                    else {
                        endEl = itemNum * col;
                    }
                    for (var i = startEl; i < endEl; i++) {
                        var programDiv = this._getProgramDiv(programs, i);
                        tdItems.appendChild(programDiv);
                    }
                }
            }
        }
        this.get_programsContent().appendChild(table);
    },
    
    _filterPrograms: function TvModule_Core$_filterPrograms(channel) {
        /// <param name="channel" type="TvModule.BO.ChannelContent">
        /// </param>
        /// <returns type="Array" elementType="Program"></returns>
        var programs = [];
        if (this.genreId === -1 && (this.timeStart === -1 || this.timeEnd === -1)) {
            programs = channel.Program;
        }
        else {
            var i = 0;
            var $enum1 = channel.Program.getEnumerator();
            while ($enum1.moveNext()) {
                var program = $enum1.get_current();
                var testTime = TvModule.Core._getTestTime(program.Time);
                if (this.timeStart < this.timeEnd && !(this.timeStart < testTime && testTime <= this.timeEnd)) {
                    continue;
                }
                if (!(this.timeStart < testTime && testTime <= 2400 || 0 <= testTime && testTime <= this.timeEnd)) {
                    continue;
                }
                if (program.GenreId !== this.genreId && this.genreId !== -1) {
                    var genre = this.get_genreCollection()[this.genreId.toString()];
                    if (!(genre != null && genre.Subgenres.length > 0)) {
                        continue;
                    }
                    var isContinue = true;
                    var $enum2 = genre.Subgenres.getEnumerator();
                    while ($enum2.moveNext()) {
                        var subgenre = $enum2.get_current();
                        if (program.GenreId.toString() === subgenre.Id.toString()) {
                            isContinue = false;
                            break;
                        }
                    }
                    if (isContinue) {
                        continue;
                    }
                }
                programs[i] = program;
                i++;
            }
        }
        return programs;
    },
    
    _getProgramDiv: function TvModule_Core$_getProgramDiv(programs, i) {
        /// <param name="programs" type="Array" elementType="Program">
        /// </param>
        /// <param name="i" type="Number" integer="true">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        var programDiv = document.createElement('div');
        var programTime = document.createElement('span');
        programTime.className = 'time';
        programTime.innerHTML = programs[i].Time;
        programDiv.appendChild(programTime);
        var programContent = document.createElement('span');
        programContent.className = 'content';
        programContent.className += this._getProgramClass(programs, i);
        programContent.innerHTML = programs[i].Content;
        if (programs[i].AnnonsId > 0) {
            programContent.style.textDecoration = 'underline';
            var pcBtn = new ScriptFX.UI.Button(programContent);
            pcBtn.set_actionArgument(programs[i].AnnonsId.toString());
            pcBtn.add_click(Delegate.create(this, this._pcBtnClick));
        }
        programDiv.appendChild(programContent);
        return programDiv;
    },
    
    _getProgramClass: function TvModule_Core$_getProgramClass(programs, i) {
        /// <param name="programs" type="Array" elementType="Program">
        /// </param>
        /// <param name="i" type="Number" integer="true">
        /// </param>
        /// <returns type="String"></returns>
        var testTime = TvModule.Core._getTestTime(programs[i].Time);
        var oldTestTime = (i > 0) ? TvModule.Core._getTestTime(programs[i - 1].Time) : testTime;
        var newTestTime = (i + 1 < programs.length) ? TvModule.Core._getTestTime(programs[i + 1].Time) : testTime;
        var isPrescending = (this.get_isCurrentDaySelected()) ? this._isPrescending(testTime) : false;
        var result = (isPrescending) ? 'preceding' : 'following';
        if (this.get_isCurrentDaySelected() && (testTime === this.get_currentIntTime() || (oldTestTime !== this.get_currentIntTime() && isPrescending !== this._isPrescending(newTestTime)))) {
            result = 'current';
        }
        return ' ' + result;
    },
    
    _isPrescending: function TvModule_Core$_isPrescending(testTime) {
        /// <param name="testTime" type="Number" integer="true">
        /// </param>
        /// <returns type="Boolean"></returns>
        return (500 < this.get_currentIntTime() && 500 < testTime && testTime < this.get_currentIntTime()) || (this.get_currentIntTime() <= 500 && (500 < testTime || (this.get_currentIntTime() > testTime && testTime <= 500)));
    },
    
    _pcBtnClick: function TvModule_Core$_pcBtnClick(sender, e) {
        /// <param name="sender" type="Object">
        /// </param>
        /// <param name="e" type="EventArgs">
        /// </param>
        var button = sender;
        var annonsId = parseInt(button.get_actionArgument());
        this.get_floatingWindow().show(button.get_domElement(), annonsId.toString());
    },
    
    getChannels: function TvModule_Core$getChannels(param) {
        /// <param name="param" type="Object">
        /// </param>
        param['Gmt'] = this.get_curentTime().getTimezoneOffset();
        var method = (this._viewModeSelect.value === '0') ? 'GetPrograms' : 'GetAnnonses';
        TvModule.Framework.RequestHelpers.sendDataRequest(method, Delegate.create(this, this._getChannelsComplete), param);
    },
    
    _getChannelsComplete: function TvModule_Core$_getChannelsComplete(dmResult) {
        /// <param name="dmResult" type="TvModule.Framework.DmResult">
        /// </param>
        if (dmResult.get_state() === TvModule.Framework.DmStatus.Ok) {
            this.set_channels(dmResult.get_result());
            this.rebuildContent();
            if (this.get_siteContent() != null && this.get_moduleContent() != null) {
                this.get_siteContent().style.display = 'none';
                this.get_moduleContent().style.display = 'block';
            }
        }
    },
    
    rebuildContent: function TvModule_Core$rebuildContent() {
        this.get_programsContent().innerHTML = '';
        this.buildContent(this.get_channels());
    }
}


Type.createNamespace('TvModule.Framework');

////////////////////////////////////////////////////////////////////////////////
// TvModule.Framework.DmStatus

TvModule.Framework.DmStatus = function() { 
    /// <field name="Ok" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="Canceled" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="Error" type="Number" integer="true" static="true">
    /// </field>
};
TvModule.Framework.DmStatus.prototype = {
    Ok: 0, 
    Canceled: 1, 
    Error: 2
}
TvModule.Framework.DmStatus.createEnum('TvModule.Framework.DmStatus', false);


////////////////////////////////////////////////////////////////////////////////
// TvModule.Framework.CallBackContext

TvModule.Framework.CallBackContext = function TvModule_Framework_CallBackContext() {
    /// <field name="userCallback" type="TvModule.Framework.ObjectModificationDelegate">
    /// </field>
    /// <field name="context" type="Object">
    /// </field>
}
TvModule.Framework.CallBackContext.prototype = {
    userCallback: null,
    context: null
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.Framework.DmResult

TvModule.Framework.DmResult = function TvModule_Framework_DmResult() {
    /// <field name="_state" type="TvModule.Framework.DmStatus">
    /// </field>
    /// <field name="_result" type="Object">
    /// </field>
    /// <field name="_context" type="Object">
    /// </field>
    this.set_state(TvModule.Framework.DmStatus.Ok);
}
TvModule.Framework.DmResult.prototype = {
    _state: 0,
    
    get_state: function TvModule_Framework_DmResult$get_state() {
        /// <value type="TvModule.Framework.DmStatus"></value>
        return this._state;
    },
    set_state: function TvModule_Framework_DmResult$set_state(value) {
        /// <value type="TvModule.Framework.DmStatus"></value>
        this._state = value;
        return value;
    },
    
    _result: null,
    
    get_result: function TvModule_Framework_DmResult$get_result() {
        /// <value type="Object"></value>
        return this._result;
    },
    set_result: function TvModule_Framework_DmResult$set_result(value) {
        /// <value type="Object"></value>
        this._result = value;
        return value;
    },
    
    _context: null,
    
    get_context: function TvModule_Framework_DmResult$get_context() {
        /// <value type="Object"></value>
        return this._context;
    },
    set_context: function TvModule_Framework_DmResult$set_context(value) {
        /// <value type="Object"></value>
        this._context = value;
        return value;
    }
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.Framework.FileUpload

TvModule.Framework.FileUpload = function TvModule_Framework_FileUpload(url, login, pass, iconH, iconW, mediumH, mediumW) {
    /// <param name="url" type="String">
    /// </param>
    /// <param name="login" type="String">
    /// </param>
    /// <param name="pass" type="String">
    /// </param>
    /// <param name="iconH" type="String">
    /// </param>
    /// <param name="iconW" type="String">
    /// </param>
    /// <param name="mediumH" type="String">
    /// </param>
    /// <param name="mediumW" type="String">
    /// </param>
    /// <field name="_url" type="String">
    /// </field>
    /// <field name="_login" type="String">
    /// </field>
    /// <field name="_pass" type="String">
    /// </field>
    /// <field name="_iconH" type="String">
    /// </field>
    /// <field name="_iconW" type="String">
    /// </field>
    /// <field name="_mediumH" type="String">
    /// </field>
    /// <field name="_mediumW" type="String">
    /// </field>
    this._url = url;
    this._login = login;
    this._pass = pass;
    this._iconH = iconH;
    this._iconW = iconW;
    this._mediumH = mediumH;
    this._mediumW = mediumW;
}
TvModule.Framework.FileUpload._getIfarameName = function TvModule_Framework_FileUpload$_getIfarameName(fileNumber, annoncId) {
    /// <param name="fileNumber" type="Number" integer="true">
    /// </param>
    /// <param name="annoncId" type="Number" integer="true">
    /// </param>
    /// <returns type="String"></returns>
    var fameName = 'frame_' + fileNumber + '_' + annoncId;
    return fameName;
}
TvModule.Framework.FileUpload.prototype = {
    _url: null,
    _login: null,
    _pass: null,
    _iconH: null,
    _iconW: null,
    _mediumH: null,
    _mediumW: null,
    
    _createIframe: function TvModule_Framework_FileUpload$_createIframe(iframeName) {
        /// <param name="iframeName" type="String">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        var iframe = document.createElement('iframe');
        iframe.setAttribute('name', iframeName);
        iframe.frameBorder = '0';
        iframe.style.height = '1px';
        iframe.style.width = '1px';
        iframe.style.visibility = 'hidden';
        iframe.style.position = 'absolute';
        iframe.style.top = '-1000px';
        iframe.style.left = '-1000px';
        return iframe;
    },
    
    _createForm: function TvModule_Framework_FileUpload$_createForm(iframeName) {
        /// <param name="iframeName" type="String">
        /// </param>
        /// <returns type="Object" domElement="true"></returns>
        var form = document.createElement('form');
        form.action = this._url;
        form.encoding = 'multipart/form-data';
        form.method = 'Post';
        form.style.height = '1px';
        form.style.width = '1px';
        form.style.visibility = 'hidden';
        form.style.position = 'absolute';
        form.style.top = '-1000px';
        form.style.left = '-1000px';
        form.target = iframeName;
        return form;
    },
    
    sendFile: function TvModule_Framework_FileUpload$sendFile(fileInputId, fileNumber, annoncId) {
        /// <param name="fileInputId" type="String">
        /// </param>
        /// <param name="fileNumber" type="Number" integer="true">
        /// </param>
        /// <param name="annoncId" type="Number" integer="true">
        /// </param>
        var fileInput = document.getElementById(fileInputId);
        if (!String.isNullOrEmpty(fileInput.value)) {
            var iframeName = TvModule.Framework.FileUpload._getIfarameName(fileNumber, annoncId);
            var iframe = this._createIframe(iframeName);
            var form = this._createForm(iframeName);
            this._createFormContent(form, fileInput, fileNumber, annoncId);
            document.body.appendChild(iframe);
            document.body.appendChild(form);
            form.submit();
        }
    },
    
    _createFormContent: function TvModule_Framework_FileUpload$_createFormContent(form, fileInput, fileNumber, annoncId) {
        /// <param name="form" type="Object" domElement="true">
        /// </param>
        /// <param name="fileInput" type="Object" domElement="true">
        /// </param>
        /// <param name="fileNumber" type="Number" integer="true">
        /// </param>
        /// <param name="annoncId" type="Number" integer="true">
        /// </param>
        var el0 = document.createElement('input');
        el0.type = 'file';
        fileInput.parentNode.insertBefore(el0, fileInput);
        fileInput.name = 'File' + fileNumber;
        form.appendChild(fileInput);
        var el1 = document.createElement('input');
        el1.name = 'Reg';
        el1.value = annoncId.toString();
        form.appendChild(el1);
        var el2 = document.createElement('input');
        el2.name = 'NumImg';
        el2.value = fileNumber.toString();
        form.appendChild(el2);
        var el3 = document.createElement('input');
        el3.name = 'Login';
        el3.value = this._login;
        form.appendChild(el3);
        var el4 = document.createElement('input');
        el4.name = 'Pass';
        el4.value = this._pass;
        form.appendChild(el4);
        var el5 = document.createElement('input');
        el5.name = 'ImgIconH';
        el5.value = this._iconH;
        form.appendChild(el5);
        var el6 = document.createElement('input');
        el6.name = 'ImgIconW';
        el6.value = this._iconW;
        form.appendChild(el6);
        var el7 = document.createElement('input');
        el7.name = 'ImgMediumH';
        el7.value = this._mediumH;
        form.appendChild(el7);
        var el8 = document.createElement('input');
        el8.name = 'ImgMediumW';
        el8.value = this._mediumW;
        form.appendChild(el8);
    }
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.Framework.Functions

TvModule.Framework.Functions = function TvModule_Framework_Functions() {
}
TvModule.Framework.Functions.parseInt = function TvModule_Framework_Functions$parseInt(value) {
    /// <param name="value" type="String">
    /// </param>
    /// <returns type="Number" integer="true"></returns>
    if (value === '08') {
        value = '8';
    }
    if (value === '09') {
        value = '9';
    }
    return parseInt(value);
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.Framework.Loading

TvModule.Framework.Loading = function TvModule_Framework_Loading(controlId) {
    /// <param name="controlId" type="String">
    /// </param>
    /// <field name="indicator" type="Object" domElement="true">
    /// </field>
    /// <field name="_loadingTimeout" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="loaded" type="Boolean">
    /// </field>
    this.indicator = document.getElementById(controlId);
    this.indicator.style.display = 'none';
    this.indicator.style.zIndex = 1001;
    var img = document.createElement('img');
    img.src = '/images/ajax-loader.gif';
    this.indicator.appendChild(img);
}
TvModule.Framework.Loading.prototype = {
    indicator: null,
    loaded: false,
    
    showLoading: function TvModule_Framework_Loading$showLoading() {
        window.setTimeout(Delegate.create(this, this._startShowLoading), TvModule.Framework.Loading._loadingTimeout);
    },
    
    _startShowLoading: function TvModule_Framework_Loading$_startShowLoading() {
        if (!this.loaded) {
            this.loaded = true;
            this.indicator.style.display = 'block';
        }
    },
    
    hideLoading: function TvModule_Framework_Loading$hideLoading() {
        if (this.indicator != null) {
            this.indicator.style.display = 'none';
        }
        this.loaded = false;
    }
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.Framework.RequestHelpers

TvModule.Framework.RequestHelpers = function TvModule_Framework_RequestHelpers() {
    /// <field name="loading" type="TvModule.Framework.Loading" static="true">
    /// </field>
    /// <field name="_requestNumber" type="Number" integer="true" static="true">
    /// </field>
    /// <field name="_serviceUrl" type="String" static="true">
    /// </field>
}
TvModule.Framework.RequestHelpers.sendDataRequest = function TvModule_Framework_RequestHelpers$sendDataRequest(methodName, userCallBack, data, context, notShowLoading) {
    /// <param name="methodName" type="String">
    /// </param>
    /// <param name="userCallBack" type="TvModule.Framework.ObjectModificationDelegate">
    /// </param>
    /// <param name="data" type="Object">
    /// </param>
    /// <param name="context" type="Object">
    /// </param>
    /// <param name="notShowLoading" type="Boolean">
    /// </param>
    var callBack = Delegate.create(null, TvModule.Framework.RequestHelpers._callBack);
    if (TvModule.Framework.RequestHelpers.loading == null) {
        TvModule.Framework.RequestHelpers.loading = new TvModule.Framework.Loading('_TV_ajaxLoader');
    }
    if (!notShowLoading) {
        TvModule.Framework.RequestHelpers.loading.showLoading();
    }
    if (data == null) {
        data = {};
    }
    var result = new TvModule.Framework.DmResult();
    result.set_context(context);
    data['N'] = ++TvModule.Framework.RequestHelpers._requestNumber;
    data['Method'] = methodName;
    var param = String.Empty;
    var $dict1 = data;
    for (var $key2 in $dict1) {
        var par = { key: $key2, value: $dict1[$key2] };
        param += '&' + par.key + '=' + par.value;
    }
    var callBackContext = new TvModule.Framework.CallBackContext();
    callBackContext.userCallback = userCallBack;
    callBackContext.context = result;
    var cbId;
    cbId = CreateCallBack(callBack, callBackContext);
    var script = document.createElement('script');
    script.src = TvModule.Framework.RequestHelpers._serviceUrl + ((TvModule.Framework.RequestHelpers._serviceUrl.indexOf('?') >= 0) ? '&' : '?') + 'callback=callbacks.' + cbId + param;
    script.type = 'text/javascript';
    script.id = cbId;
    document.body.appendChild(script);
}
TvModule.Framework.RequestHelpers._callBack = function TvModule_Framework_RequestHelpers$_callBack(context, resultObject) {
    /// <param name="context" type="TvModule.Framework.CallBackContext">
    /// </param>
    /// <param name="resultObject" type="Object">
    /// </param>
    TvModule.Framework.RequestHelpers.loading.hideLoading();
    if (context.userCallback != null) {
        var result = new TvModule.Framework.DmResult();
        if (result.get_state() === TvModule.Framework.DmStatus.Ok) {
            try {
                result.set_result(resultObject);
            }
            catch ($e1) {
                result.set_state(TvModule.Framework.DmStatus.Error);
                result.set_result('\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f json \u0432 \u043e\u0431\u044a\u0435\u043a\u0442.');
            }
        }
        else {
            result.set_result(resultObject);
        }
        context.userCallback.invoke(result);
    }
}


////////////////////////////////////////////////////////////////////////////////
// TvModule.Framework.Tooltip

TvModule.Framework.Tooltip = function TvModule_Framework_Tooltip(tooltipMessage, tooltipElement, tooltipContainer, tooltipClass) {
    /// <param name="tooltipMessage" type="String">
    /// </param>
    /// <param name="tooltipElement" type="Object" domElement="true">
    /// </param>
    /// <param name="tooltipContainer" type="Object" domElement="true">
    /// </param>
    /// <param name="tooltipClass" type="String">
    /// </param>
    /// <field name="_showTooltip" type="DOMEventHandler">
    /// </field>
    /// <field name="_hideTooltip" type="DOMEventHandler">
    /// </field>
    /// <field name="_tooltipContainer" type="Object" domElement="true">
    /// </field>
    /// <field name="_tooltipElement" type="Object" domElement="true">
    /// </field>
    /// <field name="_tooltipMessage" type="String">
    /// </field>
    this._tooltipElement = tooltipElement;
    this.set_tooltipMessage(tooltipMessage);
    this._showTooltip = Delegate.create(this, this._onShowTooltip);
    this._hideTooltip = Delegate.create(this, this.onHideTooltip);
    if (tooltipClass == null) {
        tooltipClass = 'tooltip';
    }
    if (tooltipContainer == null) {
        this._tooltipContainer = TvModule.Framework.Tooltip.createContainer();
    }
    else {
        this._tooltipContainer = tooltipContainer;
    }
    this._tooltipContainer.className = tooltipClass;
}
TvModule.Framework.Tooltip.createContainer = function TvModule_Framework_Tooltip$createContainer() {
    /// <returns type="Object" domElement="true"></returns>
    var tooltipContainer = document.createElement('div');
    tooltipContainer.style.position = 'absolute';
    tooltipContainer.style.display = 'none';
    document.body.appendChild(tooltipContainer);
    return tooltipContainer;
}
TvModule.Framework.Tooltip.prototype = {
    _showTooltip: null,
    _hideTooltip: null,
    _tooltipContainer: null,
    _tooltipElement: null,
    _tooltipMessage: null,
    
    get_tooltipMessage: function TvModule_Framework_Tooltip$get_tooltipMessage() {
        /// <value type="String"></value>
        return this._tooltipMessage;
    },
    set_tooltipMessage: function TvModule_Framework_Tooltip$set_tooltipMessage(value) {
        /// <value type="String"></value>
        this._tooltipMessage = value;
        return value;
    },
    
    show: function TvModule_Framework_Tooltip$show() {
        this._tooltipElement.attachEvent('onmouseover', this._showTooltip);
        this._tooltipElement.attachEvent('onmouseout', this._hideTooltip);
    },
    
    hide: function TvModule_Framework_Tooltip$hide() {
        this._tooltipElement.detachEvent('onmouseover', this._showTooltip);
        this._tooltipElement.detachEvent('onmouseout', this._hideTooltip);
        this._hideTooltip.invoke();
    },
    
    destroy: function TvModule_Framework_Tooltip$destroy() {
        this.hide();
        if (this._tooltipContainer != null) {
            document.body.removeChild(this._tooltipContainer);
        }
    },
    
    _onShowTooltip: function TvModule_Framework_Tooltip$_onShowTooltip() {
        tooltip(this._tooltipContainer,this._tooltipElement,this.get_tooltipMessage());
    },
    
    onHideTooltip: function TvModule_Framework_Tooltip$onHideTooltip() {
        hide_info(this._tooltipContainer,this._tooltipElement);
    }
}


TvModule.BO.ChannelContent.createClass('TvModule.BO.ChannelContent');
TvModule.BO.ChannelsGroups.createClass('TvModule.BO.ChannelsGroups');
TvModule.BO.ElementsEntry.createClass('TvModule.BO.ElementsEntry');
TvModule.BO.Genre.createClass('TvModule.BO.Genre');
TvModule.BO.Program.createClass('TvModule.BO.Program');
TvModule.BO.Subgenre.createClass('TvModule.BO.Subgenre');
TvModule.FloatingWindow.createClass('TvModule.FloatingWindow');
TvModule.Core.createClass('TvModule.Core');
TvModule.Framework.CallBackContext.createClass('TvModule.Framework.CallBackContext');
TvModule.Framework.DmResult.createClass('TvModule.Framework.DmResult');
TvModule.Framework.FileUpload.createClass('TvModule.Framework.FileUpload');
TvModule.Framework.Functions.createClass('TvModule.Framework.Functions');
TvModule.Framework.Loading.createClass('TvModule.Framework.Loading');
TvModule.Framework.RequestHelpers.createClass('TvModule.Framework.RequestHelpers');
TvModule.Framework.Tooltip.createClass('TvModule.Framework.Tooltip');
TvModule.Core._imagesUrl = 'http://telegid.tv/images/channels/';
TvModule.Core._column = 3;
TvModule.Framework.Loading._loadingTimeout = 100;
TvModule.Framework.RequestHelpers.loading = null;
TvModule.Framework.RequestHelpers._requestNumber = 0;
TvModule.Framework.RequestHelpers._serviceUrl = 'http://telegid.tv/service/';

// ---- Do not remove this footer ----
// This script was generated using Script# v0.5.5.0 (http://projects.nikhilk.net/ScriptSharp)
// -----------------------------------

