/**
 * TV24 TVProgram JavaScript library v1.3
 *
 * @author SamY <gyorgy.kovesdi@dream.hu>
 * @since 2008.09.23 02:54:03
 *
 **/

/*if ( !console ) {
  console = { log: function(){}, dir: function(){} };
}*/
      Array.prototype.removeItems = function( itemsToRemove ) {
        if (!/Array/.test(itemsToRemove.constructor)) {
          itemsToRemove = [ itemsToRemove ];
        }
        var j;
        for (var i = 0; i < itemsToRemove.length; i++) {
          j = 0;
          while (j < this.length) {
            if (this[j] == itemsToRemove[i]) {
              this.splice(j, 1);
            } else {
              j++;
            }
          }
        }
      }

      var Customize = {};
      var TVProgram = {
        mode:             'timeline',
        loadedChannels:   { timeline:[], grid:[], category:[] },
        selectedChannels: [],
        templates:        {},
        selectedChCategory: 30, // alapértelmezés legnézettebb csatornák (21)
        usedDate:         '',
        nowPlayings:      [],
        timeLineView:     false,
        gridView:         false,
        marks:            {},
        refreshTimer:     false,
        updateTimer:      false,
        loadTimer:        false,
        loadQueue:        [],
        loads:            0
      };

      _date = new Date();
      TVProgram.usedDate = _date.getFullYear().toString() + '-' + ( _date.getMonth() + 1 ).toString() + '-' + _date.getDate();

      var timeline_scrollbar = false;
      var timeline_vscrollbar = false;

      TVProgram.render = function( template, data ) {
        if ( !TVProgram.templates[ template ] ) {
          if ( !$('tpl_' + template ) ) {
            if ( console ) console.log( 'Template not found: ' + template );
            return '';
          } else {
            TVProgram.templates[ template ] = $( 'tpl_' + template ).innerHTML;
          }
        }

        var rendered = TVProgram.templates[ template ];

        $H( data ).each( function( _var ) {
          re = new RegExp( '\{' + _var.key + '\}', 'igm' );
          if ( !_var.value) {
            _var.value = '';
          }
          rendered = rendered.replace( re, _var.value );
        });

        rendered = rendered.replace( /\{.*[^\}]\}/gi, '' );

        return rendered;
      }

      TVProgram.changeView = function( mode, forceReload, noload ) {

        //TVProgram.nowPlayings = [];
        if ( !mode ) {
          mode = ( TVProgram.mode == 'timeline' ) ? 'grid' : 'timeline';
        }

        Cookie.set( 'defaultView', mode );
        /*** TVPROGRAM TAB BAR ***/
        $( 'tvprogram_tabbar_grid'     ).className = '';
        $( 'tvprogram_tabbar_timeline' ).className = '';
        $( 'tvprogram_tabbar_category' ).className = '';
        $( 'tvprogram_tabbar_' + mode  ).className = 'active';

        /*** CHANGE VIEW TO GRID ***/
        if ( mode == 'grid' ) {

          $('timeline-nav').hide();
          $('timeline-container').hide();
          $('category-nav').hide();
          $('category-container').hide();
          $('grid-nav').show();
          $('grid-container').show();
          //if ( TVProgram.mode == 'timeline' ) {
            activeTab += 1;
          //}
          TVProgram.mode = 'grid';

          if ( !grid_scrollbar ) {
            grid_scrollbar = new scroller({
              scrollbar:    'scrollbar-tvprogram-grid',
              content:      'content-tvprogram-grid',
              contentSize:  function() { return TVProgram.selectedChannels.length * 159; }, //$$('#content-tvprogram-grid div.channel').length * 159 },
              effect:       'sin',
              fps:          25,
              step:         159
            });
          }
          if ( noload ) {
            return;
          }
          var _hideChannels = [];
          for( var i = 0; i < TVProgram.loadedChannels[TVProgram.mode].length; i++ ) {
            var val = TVProgram.loadedChannels[TVProgram.mode][i];
            if ( !TVProgram.isSelected( val ) ) _hideChannels.push( val );
          }

          if ( _hideChannels.length > 0 ) TVProgram.hideChannel( _hideChannels );

          if ( TVProgram.selectedChannels.length > 0 ) {
            TVProgram.load( 'grid', 0, TVProgram.selectedChannels, forceReload );
          }
          //console.log( activeTab );
          setTimeout( "$$('#grid-nav li a')[" + activeTab + "].onclick()", 1000 );

          TVProgram.nowPlayings = [];

        /*** CHANGE VIEW FROM GRID TO TIMELINE ***/
        } else if ( mode == 'timeline' ) {

          $('grid-nav').hide();
          $('grid-container').hide();
          $('category-nav').hide();
          $('category-container').hide();
          $('timeline-nav').show();
          $('timeline-container').show();
          if ( activeTab > 0 && TVProgram.mode == 'grid' ) {
            activeTab = activeTab - 1;
          }
          TVProgram.mode = 'timeline';
          if ( noload ) {
            return;
          }
          if ( TVProgram.selectedChannels.length > 0 ) {
            TVProgram.load( 'timeline', 0, TVProgram.selectedChannels, true );
          }
          if ( !TVProgram.timeLineView ) {
            //TVProgram.timeLineView = $$('#timeline-nav li a')[activeTab];
          }
          //TVProgram.timeLineView.onclick();
          //setTimeout( 'refreshNowPlayings( true )', 1000 );

          var _hideChannels = [];
          for( var i = 0; i < TVProgram.loadedChannels[TVProgram.mode].length; i++ ) {
            var val = TVProgram.loadedChannels[TVProgram.mode][i];
            if ( !TVProgram.isSelected( val ) ) _hideChannels.push( val );
          }

          if ( _hideChannels.length > 0 ) TVProgram.hideChannel( _hideChannels );

          setTimeout( function() {
            if ( !timeline_scrollbar ) {
              //initTimeLine();
            }
            //timeline_vscrollbar.updateContentSize( 0, true );
          }, 500 );

          setTimeout( "$$('#timeline-nav li a')[" + activeTab + "].onclick()", 1000 );

        /***** CHANGE TO CATEGORY VIEW ******/
        } else if ( mode == 'category' ) {

          $('grid-nav').hide();
          $('grid-container').hide();
          $('category-nav').show();
          $('category-container').show();
          $('timeline-nav').hide();
          $('timeline-container').hide();
          setTimeout( "$$('#category-nav li a')[" + activeTab + "].onclick()", 1000 );
          if ( TVProgram.mode == 'grid' && activeTab > 0 ) {
            activeTab = activeTab - 1;
          }
          TVProgram.mode = 'category';
          if ( TVProgram.getSelectedGenres().length == 0 ) {
            //$$('#genre-selector li[mark=movie]')[0].fire('click');
            TVProgram.toggleGenre('movie');
          } else if( noload ) {
            TVProgram.loadCategoryView();
          }
        }
      }

      TVProgram.categoryView = {
        order:      'genre_mark',
        page:       1,
        timerange:  'egesznap'
      };

      TVProgram.loadCategoryView = function( options ) {
        var genres = TVProgram.getSelectedGenres();
        if ( genres.length == 0 ) {
          genres.push('all');
        }
        if ( !options ) {
          options = TVProgram.categoryView;
        }
        var channels = TVProgram.selectedChannels.join(',');

        $('category-container').update('&nbsp;');
        if ( !options.page  )     options.page      = TVProgram.categoryView.page;
        if ( !options.order )     options.order     = TVProgram.categoryView.order;
        if ( !options.timerange ) options.timerange = TVProgram.categoryView.timerange;
        if ( !options.date )      options.date      = TVProgram.usedDate; else TVProgram.usedDate = options.date;

        TVProgram.categoryView = options;
        if ( TVProgram.loadTimer ) {
          clearTimeout( TVProgram.loadTimer );
        }
        TVProgram.loadTimer = setTimeout( function() {
          new Ajax.Request( URI_ROOT + 'action/programs/loadGenres/' + options.date + '/' + genres.join(',') + '/' + channels + '/' + options.timerange + '/' + options.order + '/' + options.page, {
            onComplete: function( trans ) {
              $('category-container').innerHTML = trans.responseText;
            }
          }); // end request
        }, 500 );

        //setTimeout( "$$('#category-nav li.active a')["+activeTab+"].onclick()", 1000 );
      }

      TVProgram.getSelectedGenres = function() {
        var selectedGenres = [];
        $$('.genre-selector li.checked').each( function( liItem ) {
          selectedGenres.push( liItem.readAttribute('mark') );
        }); // end each
        return selectedGenres.uniq();
      }

      TVProgram.selectChannels = function( channels ) {
        $$('#content-channels li[chid]' ).invoke( 'removeClassName', 'checked' );
        for( var i = 0; i < channels.length; i++ ) {
          //TVProgram.toggleChannel( channels[i] );
          $$('#content-channels li[chid=' + channels[i] + ']' ).invoke( 'addClassName', 'checked' );
        }
        TVProgram.selectedChannels = channels;
      }

      TVProgram.toggleChannel = function( channelID, first ) {
        
        //channelID = Object.isNumber( channel ) ? channel : $( channel ).readAttribute('chid');
        if ( !channelID ) {
          return;
        }
        isChecked = $$( '#content-channels li[chid=' + channelID + ']' )[0].hasClassName( 'checked' );
        //console.log( $$( '#content-channels li[chid=' + channelID + ']' )[0] );
        func = isChecked ? 'removeClassName' : 'addClassName';
        $$('#content-channels li[chid=' + channelID + ']' ).invoke( func, 'checked' );

        /*if ( TVProgram.mode == 'timeline' ) {
          setTimeout( 'timeline_vscrollbar.updateContentSize( 0, true )', 1000 );
        }*/

        if ( !isChecked ) {
          TVProgram.showChannel( channelID, first )
        } else {
          TVProgram.hideChannel( channelID )
        }

        if( TVProgram.mode == 'category' ) {
          TVProgram.loadCategoryView();
        }
        
        Cookie.set( 'defaultChannels', $A( TVProgram.selectedChannels ).join(',') );
        TVProgram.nowPlayings = [];
      }

      TVProgram.showChannel = function( channelID, first ) {
        TVProgram.load( 0, 0, channelID );
        if ( !Object.isArray( channelID ) && TVProgram.selectedChannels.indexOf( channelID ) == -1 ) {
          if (first) {
            TVProgram.selectedChannels.push( channelID );
          }else {
            TVProgram.selectedChannels.unshift( channelID );
          }
        }
        if ( TVProgram.mode == 'timeline' ) {
          //refreshNowPlayings( true );
          //timeline_vscrollbar.updateContentSize( 0, true );
        } else {
          if ( TVProgram.refreshTimer ) {
            clearTimeout( TVProgram.refreshTimer );
          }
          //TVProgram.refreshTimer = setTimeout( 'refreshNowPlayings( true )', 1000 );
          if ( TVProgram.updateTimer ) {
            clearTimeout( TVProgram.updateTimer );
          }
          //TVProgram.updateTimer = setTimeout("grid_scrollbar.updateContentSize( TVProgram.selectedChannels.length * 159, true )", 1000 );
        }
      }

      TVProgram.hideChannel = function( channelID ) {
        //if ( !Object.isArray( channelID ) && TVProgram.selectedChannels.indexOf( channelID ) > -1 ) {
          TVProgram.selectedChannels.removeItems( channelID );
          //console.log( 'remove...', channelID );
        //}

        TVProgram[ 'hideChannel' + ( TVProgram.mode == 'timeline' ? 'Row' : 'Col' ) ]( channelID );
        if ( TVProgram.mode == 'timeline' ) {
          //refreshNowPlayings( true );
          //timeline_vscrollbar.updateContentSize( 0, true );
        } else if( TVProgram.mode == 'grid' ) {
          //TVProgram.updateTimer = setTimeout("grid_scrollbar.updateContentSize( TVProgram.selectedChannels.length * 159, true )", 1000 );
        }
      }

      TVProgram.showChannelCol = function( channelID ) {
        if ( Object.isArray( channelID ) ) {
          $A( channelID ).each( TVProgram.showChannelCol );
          return ;
        }
        $( 'grid_' + channelID ).show();
      }

      TVProgram.hideChannelCol = function( channelID ) {
        if ( Object.isArray( channelID ) ) {
          $A( channelID ).each( TVProgram.hideChannelCol );
          return ;
        }
        //if ( $( 'grid_' + channelID ) ) {
          $( 'grid_' + channelID ).hide();
        //}
      }

      TVProgram.showChannelRow = function( channelID ) {
        if ( Object.isArray( channelID ) ) {
          $A( channelID ).each( TVProgram.showChannelRow );
          return ;
        }
        //if ( $( 'ch_' + channelID ) ) {
          $( 'ch_' + channelID ).show();
          $( 'chlogo_' + channelID ).show();
          //timeline_vscrollbar.updateContentSize( 0, true );
        //}
      };

      TVProgram.hideChannelRow = function( channelID ) {
        if ( Object.isArray( channelID ) ) {
          $A( channelID ).each( TVProgram.hideChannelRow );
          return ;
        }
        $( 'ch_' + channelID ).hide();
        $( 'chlogo_' + channelID ).hide();
        //timeline_vscrollbar.updateContentSize( 0, true );
      };

      TVProgram.inQueue = function( chID ) {
        var result = false;
        for( var _i=0; _i < TVProgram.loadQueue.length; _i++ ) {
          var val = TVProgram.loadQueue[_i];
          if ( parseInt( chID ) == parseInt( val ) ) {
            result = true;
          }
        }
        return result;
      }

      TVProgram.isLoaded = function( chID ) {
        var result = false;
        for( var _i=0; _i < TVProgram.loadedChannels[TVProgram.mode].length; _i++ ) {
          var val = TVProgram.loadedChannels[TVProgram.mode][_i];
          if ( parseInt( chID ) == parseInt( val ) ) {
            result = true;
          }
        }
        return result;
      }

      TVProgram.isSelected = function( chID ) {
        var result = false;
        for( var _i=0; _i < TVProgram.selectedChannels.length; _i++ ) {
          var val = TVProgram.selectedChannels[_i];
          if ( parseInt( chID ) == parseInt( val ) ) {
            result = true;
          }
        }
        return result;
      }

      TVProgram.load = function( mode, date, channelID, force ) {

        if ( !mode ) mode = TVProgram.mode;
        if ( mode == 'category' ) {
          return;
        }
        TVProgram.loadedChannels = {'grid':[],'timeline':[]};
        $$( '#content-tvprogram-grid div' )[0].innerHTML = '';
        $$( '#content-programs div' )[0].innerHTML = '';
        $$( '#content-programs-channels div.channel_images' )[0].innerHTML = '';

        if ( !channelID ) channelID = '0';
        if ( !date ) {
          date = TVProgram.usedDate;
        }
        /*if ( TVProgram.usedDate != date && TVProgram.selectedChannels.length > 0 ) {
          TVProgram['hideChannel' + ( mode == 'timeline' ? 'Row' : 'Col' )]( TVProgram.selectedChannels );
          TVProgram.loadedChannels = {timeline:[], grid:[]};
        }*/
        //TVProgram.usedDate = date;

        /*if ( Object.isArray( channelID ) ) {
          var _newChannelID = [];
          $A( channelID ).each( function( chID ) {
            // csak akkor adjuk hozzá a letöltési listához, ha még nincs betöltve és a listában sincs
            if ( ( force || !TVProgram.isLoaded( chID ) ) && !TVProgram.inQueue( chID ) ) {
              TVProgram.loadQueue.push( chID );
            } else if( !TVProgram.inQueue( chID ) ) {
              TVProgram['showChannel' + ( mode == 'timeline' ? 'Row' : 'Col' )]( chID );
            }
          });
          //channelID = _newChannelID.join(',');
        } else if( !force && TVProgram.loadedChannels[TVProgram.mode].indexOf( channelID ) > -1 ) {
          TVProgram['showChannel' + ( mode == 'timeline' ? 'Row' : 'Col' )]( channelID );
          return;
        } else if ( TVProgram.loadQueue.indexOf( channelID ) == -1 ) {
          TVProgram.loadQueue.push( channelID );
        }*/
        TVProgram.loadQueue = TVProgram.selectedChannels;

        if ( TVProgram.loadTimer ) {
          clearTimeout( TVProgram.loadTimer );
        }

        TVProgram.loadTimer = setTimeout( function(){
          if ( TVProgram.loadQueue.length == 0 ) return false;

          channelID = TVProgram.loadQueue.join(',');
          TVProgram.loadQueue = [];

          if ( TVProgram.mode == 'grid' ) {
            $A( TVProgram.selectedChannels ).each( function( _chID ) {
              el = $$( '#grid_' + _chID + ' ul');
              if ( el && el[0] && !TVProgram.isLoaded( _chID ) ) {
                el[0].update('betöltés...');
              }
            });
          }

          new Ajax.Request( URI_ROOT + 'action/programs/loadChannels/' + mode + '/' + date + '/' + channelID/* + '/nocache' */, {
            onComplete: function( trans ) {
              programs = trans.responseText.evalJSON();
              if ( mode == 'timeline' ) {
                $A( programs ).each( function( row ) {
                  TVProgram.updateChannelRow( row.channelData, row.programs )
                });
                //$$('#timeline-nav li.active a')[0].onclick();
              } else {
                $A( programs ).each( function( row ) {
                  TVProgram.updateChannelCol( row.channelData, row.programs )
                });
                $$('#grid-nav li.active a')[0].onclick();
              } // end else
              TVProgram.applyMarks();
              refreshNowPlayings( true );
              if ( TVProgram.mode == 'grid' ) {
                setTimeout( "$$('#grid-nav li.active a')[0].onclick()", 1000 );
              }

              $$('.bk_site_footer')[0].setStyle({'display': 'block'}); //down('li').innerHTML += ' ';
            } // end onComplete
          }); // end request
        }, 400 ); // end timered function

      } // end function


      // Set channel to selected
      TVProgram.goChannelToSelecteds = function( channelID ) {
        $( 'allowed_channel_' + channelID ).style.display = 'none';
        $( 'selected_channel_' + channelID ).style.display = '';
      }

      // Set channel to allowed
      TVProgram.removeSelectedItem = true;
      TVProgram.goChannelToAlloweds = function( channelID ) {
        if( TVProgram.removeSelectedItem ) {
          $( 'selected_channel_' + channelID ).style.display = 'none';
          $( 'allowed_channel_' + channelID ).style.display = '';
        } else
          TVProgram.removeSelectedItem = true;
      }

      TVProgram.updateChannelCol = function( channelData, programsHtml ) {
        if ( TVProgram.loadedChannels[TVProgram.mode].indexOf( channelData.id ) == -1 ) {
            TVProgram.loadedChannels[TVProgram.mode].push( channelData.id );
        }

        if ( !$( 'grid_' + channelData.id ) ) {

          $$( '#content-tvprogram-grid div' )[0].insert({
            top: '<div class="channel" id="grid_' + channelData.id + '"><div class="channel_image fir"><span style="background: #fff url(images/channels/' + channelData.logo_img + '.gif) no-repeat center center;"></span></div><ul></ul></div>'
          });

        } else {
          TVProgram.showChannelCol( channelData.id );
        }

        //var logoEl      = $( 'chlogo_' + channelData.id ).update('');
        var programsEl  = $$( '#grid_' + channelData.id + ' ul')[0].update('');

        var i = 0;

        /*$A( programs ).each( function( program ) {

          program.even = ( i % 2 ) ? 'even' : '';
          if ( !program.genre ) {
            program.nationality = '';
          } else {
            if ( program.nationality ) {
              program.nationality = '(' + program.nationality;
            } else {
              program.genre = '(' + program.genre;
            }
            program.genre += ')';
          }

          program.checked = ( TVProgram.favorites.indexOf( program.id ) == -1 ? '' : ' checked' );

          if ( program.id ) {
            programEl = TVProgram.render( 'grid-program', program );
            programsEl.insert( programEl ) ;
          }
          i++;
        }); // end each
        */
        programsEl.insert( programsHtml );

      } // end function

      var norender = false;

      TVProgram.updateChannelRow = function( channelData, programsHtml ) {
      //console.log( programsHtml.length );
        if ( TVProgram.loadedChannels[TVProgram.mode].indexOf( channelData.id ) == -1 ) {
            TVProgram.loadedChannels[TVProgram.mode].push( channelData.id );
        }
        if ( !$( 'chlogo_' + channelData.id ) ) {

          $$( '#content-programs-channels .channel_images' )[0].insert({
            top: '<div class="channel_image fir" id="chlogo_' + channelData.id + '"><span style="background: #fff url(images/channels/' + channelData.logo_img + '.gif) no-repeat center center;"></span></div>'
          });

          $$('#content-programs div')[0].insert({
            top: '<div class="channel" id="ch_' + channelData.id + '" style="width: 20000px">'
          });

        } else {
          TVProgram.showChannelRow( channelData.id );
        }

        //var logoEl      = $( 'chlogo_' + channelData.id ).update('');
        var programsEl  = $( 'ch_' + channelData.id ).update('');

        var i = 0;
/*
        $A( programs ).each( function( program ) {

          program.even = ( i % 2 ) ? 'even' : '';
          if ( !program.genre ) {
            program.nationality = '';
          } else {
            if ( program.nationality ) {
              program.nationality = '(' + program.nationality;
            } else {
              program.genre = '(' + program.genre;
            }
            program.genre += ')';
          }

          //program.nowPlaying = ( program.nowplaying ) ? 'now' : '';
          programEl = TVProgram.render( 'timeline-program', program );

          programOnClick = ( program.id ) ? 'rel="' + $H({ title: program.title, from_to: program.from_to, genre: program.genre, nationality: program.nationality }).toJSON().replace( /"/g, "'" ) + '" onclick="TVProgram.showProgramDetails( ' + program.id + ' );"' : '';
          programEl = programEl.replace( 'mark=', 'style="width: ' + program['size'] + 'px" ' + programOnClick + ' mark=' );

          programsEl.insert( programEl ) ;

          i++;

        }); // end programs.each
        */
        programsEl.insert( programsHtml );
        if ( autoScroller ) {
          autoScroller( 1 );
        }
      }

      TVProgram.lastTab = false;
      TVProgram.lastTabGrid = false;
      TVProgram.changeDate = function( date, _title ) {
        
        //$('timeline_title').update( _title + ' tévéműsor' );
        TVProgram.loadedChannels = {timeline:[], grid:[]};
        TVProgram.usedDate = date;
        if ( !CURRENT_DATE ) {
          var _date = new Date();
          var _month, _day;
          _month = _date.getMonth() + 1;
          _day   = _date.getDate();
          CURRENT_DATE = [ _date.getFullYear(), ( ( _month < 10 ) ? '0' : '' ) + _month, ( ( _day < 10 ) ? '0' : '' ) + _day ].join('-');
        }

        if ( date != CURRENT_DATE ) {
          $('timeline_title').update('tévéműsor');
          tl_now_tab_grid = $$('#grid-nav li')[0];
          tl_now_tab_grid.hide();
          if ( tl_now_tab_grid.hasClassName('active') ) {
            TVProgram.lastTabGrid = tl_now_tab_grid;
            tl_now_tab_grid.removeClassName('active');
            $$('#grid-nav li')[1].addClassName('active');
            $$('#grid-nav li a')[1].onclick(); 
          } else {
            TVProgram.lastTabGrid = false;
          }
          
          
          tl_now_tab = $$('#timeline-nav li')[0];
          tl_now_tab.hide();
          if ( tl_now_tab.hasClassName('active') ) {
            TVProgram.lastTab = tl_now_tab;
            tl_now_tab.removeClassName('active');
            $$('#timeline-nav li')[1].addClassName('active');
            $$('#timeline-nav li a')[1].onclick(); 
          } else {
            TVProgram.lastTab = false;
          }
        } else {
          $('timeline_title').update('mai tévéműsor');
          $$('#grid-nav li')[0].show();
          $$('#timeline-nav li')[0].show();
          if ( TVProgram.lastTab ) {
            TVProgram.lastTab.down('a').onclick();
          }
           if ( TVProgram.lastTabGrid ) {
            TVProgram.lastTabGrid.down('a').onclick();
          }
        }
        if ( TVProgram.mode != 'category' ) {
          TVProgram.load( 0, 0, TVProgram.selectedChannels, true );
        } else {
          TVProgram.loadCategoryView({'date': date});
        }
        TVProgram.nowPlayings = [];
      }

      TVProgram.applyMarks = function(){
        $H( TVProgram.marks ).each( function( _mark ) {
          if ( !_mark.value ) {
            $$('#content-tvprogram-grid li[mark=' + _mark.key + ']').invoke( 'setStyle', { background:'transparent', color: ''} ).invoke( 'removeClassName', 'marked' );
            $$('#content-programs div[mark=' + _mark.key + ']').each( function( divItem ) {
              divItem.setStyle( {'background': divItem.hasClassName('even') ? 'transparent url(images/bg.tvprogram-todays_tvprogram-timeline-program.png) repeat-x scroll left bottom' : 'transparent' });
              divItem.removeClassName('marked');
            });
          } else {
            $$('#content-tvprogram-grid li[mark=' + _mark.key + ']').invoke( 'setStyle', { background: _mark.value, 'color': 'white'} ).invoke('addClassName', 'marked');
            $$('#content-programs div[mark=' + _mark.key + ']').invoke( 'setStyle', { background: _mark.value } ).invoke('addClassName', 'marked');
          }
        });
      }

      TVProgram.favorites = [];

      TVProgram.showFavourites = function() {
        new Ajax.Request( URI_ROOT + 'action/programs/getPanels/favourites/nocache', {
          onComplete: function( trans ) {
            $$('body .bk_banner_custom', 'body .bk_banner_custom_vertical', 'body .bk_banner_custom_top').invoke('setStyle', {visibility:'hidden'});
            Shadowbox.open({
              player: 'html',
              content: trans.responseText,
              height:  490,
              width:   686
            });
            ShadowBox.applyOptions({
              onClose: function(){
                 $$('body .bk_banner_custom', 'body .bk_banner_custom_vertical', 'body .bk_banner_custom_top').invoke('setStyle', {visibility:''});
              }
            });
          }
        });
      }

      TVProgram.toggleFavorite = function( obj, programid ) {
        _ch = $(obj);
        if( _ch.hasClassName( 'checked' ) )
          TVProgram.favorites = TVProgram.favorites.without( programid );
        else
          TVProgram.favorites[ TVProgram.favorites.length ] = programid;
        _ch.toggleClassName( 'checked' );
        _parameters = 'ok=1';

        $A( TVProgram.favorites ).each( function( id, index ) {
          _parameters += '&favorites['+index+']='+id;
        } );
        new Ajax.Request( URI_ROOT + 'action/programs/saveFavorites/nocache', {
          parameters : _parameters,
          method     : 'post'
        } );
      }

      TVProgram.deleteFavorite = function( id ) {

        new Ajax.Request(
          URI_ROOT + 'action/programs/deleteFavorite', {
            parameters : {
              'id' : id
            }
          }
        );

        $( 'favorite_row_' + id ).style.display = 'none';

        var classState = false;
        $$( '#favorites_list tr' ).each( function( tr, index ) {
          if( index && tr.getStyle( 'display' ) !== 'none' ) {
            tr.className = ( classState ? 'even' : '' );
            classState = !classState;
          }
        } );

      }

      TVProgram.favorites = [];

      TVProgram.showFavourites = function() {
        new Ajax.Request( URI_ROOT + 'action/programs/getPanels/favourites/nocache', {
          onComplete: function( trans ) {
            $$('body .bk_banner_custom', 'body .bk_banner_custom_vertical', 'body .bk_banner_custom_top').invoke('setStyle', {visibility:'hidden'});
            Shadowbox.open({
              player: 'html',
              content: trans.responseText,
              height:  490,
              width:   686
            });
            Shadowbox.applyOptions({
              onClose: function(){
                 $$('body .bk_banner_custom', 'body .bk_banner_custom_vertical', 'body .bk_banner_custom_top').invoke('setStyle', {visibility:''});
              }
            });
          }
        });
      }

      TVProgram.toggleFavorite = function( obj, programid ) {
        _ch = $(obj);
        if( _ch.hasClassName( 'checked' ) )
          TVProgram.favorites = TVProgram.favorites.without( programid );
        else
          TVProgram.favorites[ TVProgram.favorites.length ] = programid;
        _ch.toggleClassName( 'checked' );
        _parameters = 'ok=1';

        $A( TVProgram.favorites ).each( function( id, index ) {
          _parameters += '&favorites['+index+']='+id;
        } );
        new Ajax.Request( URI_ROOT + 'action/programs/saveFavorites/nocache', {
          parameters : _parameters,
          method     : 'post'
        } );
      }

      TVProgram.toggleGenre = function( genre, _state ){
        el = Object.isString( genre ) ? $$('ul.genre-selector li[mark=' + genre + ']')[0] : genre.element();
        if ( !el.readAttribute('mark') ) {
          el = el.up('li');
        }
        if ( !el || !el.readAttribute('mark') ) {
          return false;
        }

        mark  = el.readAttribute('mark');
        state = el.hasClassName('checked');

        // ha nem változott az állapot akkor alapból nem kell csinálni sámlit;)
        if ( ( _state == true || _state == false ) && state == _state ) return;
        els = $$( 'ul.genre-selector li[mark=' + mark + ']' );
        if ( state ) {
          //el.removeClassName('checked');
          els.invoke('removeClassName', 'checked');
          color = '';
        } else {
          els.invoke('addClassName', 'checked');
          color = el.down('a').getStyle('background-color');
        }

        TVProgram.marks[ mark ] = color;
        TVProgram.applyMarks();

        if ( TVProgram.mode == 'category' ) {
          TVProgram.changeView( 'category' );
        } // end if mode category
        //else console.log( TVProgram.mode );
      }

      TVProgram.settings = {
        'toRemove': false,
        'toAdd':    false
      }

      TVProgram.showPersonalSettings = function() {
        new Ajax.Request( URI_ROOT + 'action/programs/getPanels/personalSettings/nocache', {
          onComplete: function( trans ) {
             $$('body .bk_banner_custom', 'body .bk_banner_custom_vertical', 'body .bk_banner_custom_top').invoke('setStyle', {visibility:'hidden'});
            Shadowbox.open({
              player: 'html',
              content: trans.responseText,
              height:  520,
              width:   686
            }); // end shadowbox open
            Shadowbox.applyOptions({
              onClose: function() {
                $$('body .bk_banner_custom', 'body .bk_banner_custom_vertical', 'body .bk_banner_custom_top').invoke('setStyle', {visibility:''});
              },
              onFinish: function() {
                /*achannels_scrollbar = new scroller({
                  scrollbar:    'scrollbar-allowedChannels',
                  content:      'content-allowedChannels',
                  step:         48,
                  fps:          20,
                  effect:       'sin'
                });
                schannels_scrollbar = new scroller({
                  scrollbar:    'scrollbar-selectedChannels',
                  content:      'content-selectedChannels',
                  step:         48,
                  fps:          20,
                  effect:       'sin'
                });
*/
                /*Sortable.create( 'channels-selected', {
                  scroll : 'content-selectedChannels',
                  onUpdate : function() {
                    TVProgram.removeSelectedItem = false;
                  }
                } );*/

                //DragDrop.makeListContainer( $('channels-allowed') );
                //DragDrop.makeListContainer( $('channels-selected') );

                _viewMode = $('settings-view-mode').value;
                if ( _viewMode == 'grid' ) {
                  $('settings-actions').getElementsBySelector('img')[0].onclick();
                } else {
                  $('settings-actions').getElementsBySelector('img')[1].onclick();
                }

                var _saveFn = function( realSave ) {
                  var _settings = {
                    'channels[]': [],
                    viewMode: $('settings-view-mode').value
                  };
                  var _channels = [];

                  $$('#channels-selected .channel').each( function( chItem ) {
                    //console.log('checkink... chid: ' + chItem.readAttribute('chid') + ' display: ' + chItem.getStyle( 'display' ) );
                    if( chItem.getStyle( 'display' ) !== 'none' ) {
                      chId = chItem.readAttribute('chid');
                      //console.log('adding: ' + chId );
                      _settings['channels[]'].unshift( chId );
                      _channels.unshift( chId );
                    }
                  });

                  Cookie.set( 'defaultChannels', _channels.join(',') );

                  new Ajax.Request( URI_ROOT + 'action/programs/saveSettings/nocache' + ( realSave === true ? '?store=1' : '' ), {
                    parameters: $H( _settings ).toQueryString(),
                    method:     'post',
                    onComplete:  function() { 
                	  	Shadowbox.close();
                	  	TV24.UI.C(2).action(0);
                	    TV24.UI.C(2).controller.channelControl.selectedChannels = eval( '[' + _channels.join(',') + ']' );
                	 	TV24.UI.C(2).controller.channelControl.render();
                	}
                    
                  });
                }
                
                /*
                 * IE7 miatt !!!!!!!!!
                 *//*
                var _saveFn2 = function( realSave ) {
                	_saveFn( true );
                	TV24.UI.C(2).action(0);
                };
                */

                $( 'settings-save' ).observe('click', function() { _saveFn() } );
                $( 'settings-preview' ).observe('click', function() { _saveFn(); TV24.UI.C(2).action(0) } );

                /*Sortable.create( 'content-selectedChannels', {
                  tag: 'div'
                });
                Droppables.add( 'content-selectedChannels', {
                  accept: 'channel',
                  onDrop: function( el ) {
                    $('content-selectedChannels').insert({ top: el });
                    //$( el ).remove();
                  }
                });
                Droppables.add( 'content-allowedChannels', {
                  accept: 'channel',
                  onDrop: function( el ) {
                    $('content-allowedChannels').insert({ top: el });
                    //$( el ).remove();
                  }
                });
                $$('#content-allowedChannels .channel').each( function( chItem ) {
                  new Draggable( chItem, { revert: true, ghosting: true } );
                });*/

              }
            });
          } // end onComplete
        }); // end ajax.request
      } // end function

      TVProgram.personalSettings = { viewMode: 'grid', channels: [1,2,3,8,41,10,25,11] };
      TVProgram.showPersonalTVProgram = function( unsaved ) {
        if ( unsaved ) {
            var chList = [];
            $$('#channels-selected .channel').each( function( chItem ) {
              if( chItem.getStyle( 'display' ) !== 'none' ) {
                chId = chItem.readAttribute('chid');
                chList.push( chId );
              }
            });

            if ( chList.length == 0 ) {
              chList = ["3","1","8","2","10","41","25","19"];
            }
            TVProgram.personalSettings.channels = chList;
            TVProgram.personalSettings.viewMode = $('settings-view-mode').value;
						
						// ++ V.2.0
						if( window.ControllerTV ) window.ControllerTV.Compatibility_changeChannels( TVProgram.personalSettings.channels );
						// -- V.2.0
						
						// ++ V.2.0
						if( window.ControllerTV ) window.ControllerTV.Compatibility_changeView( $('settings-view-mode').value );
						// -- V.2.0
						
            //console.log( TVProgram.personalSettings.channels  );
            //return;
            Cookie.set( 'defaultChannels', chList.join(',') );
            TVProgram.selectChannels( TVProgram.personalSettings.channels );
            TVProgram.changeView( TVProgram.personalSettings.viewMode, true );
        } else {
          new Ajax.Request( URI_ROOT + 'action/programs/loadSettings/nocache', {
            onComplete: function( trans ) {
              var _settings = trans.responseText.evalJSON();
              if ( _settings.channels.length == 0 ) {
                _settings.channels = ["3","1","8","2","10","41","25","19"];
              }
              TVProgram.personalSettings = _settings;
              TVProgram.selectChannels( TVProgram.personalSettings.channels );
							
							// ++ V.2.0
							if( window.ControllerTV ) window.ControllerTV.Compatibility_changeChannels( TVProgram.personalSettings.channels );
							// -- V.2.0
							
              //console.log( 'COOOKIE BAZDMEG SETTTTTT!!!!', TVProgram.personalSettings.channels.join(',') );
              Cookie.set( 'defaultChannels', TVProgram.personalSettings.channels.join(',') );
              TVProgram.changeView( TVProgram.personalSettings.viewMode, true );
							
							// ++ V.2.0
							if( window.ControllerTV ) window.ControllerTV.Compatibility_changeView( TVProgram.personalSettings.viewMode );
							// -- V.2.0
							
            }
          }); // end request
        } // end else
      } // end function

      TVProgram.showProgramDetails = function( gridId, _by, programName ) {
        _by = _by || 'grid';
        by = _by == 'grid' ? 'byGridId' : 'byProgramId';

        if( _by == 'episode' ) {
            programType = 'epizod';
        }else {
            programType = 'program'
        }
                
        
        //TVProgram.popupWindow = window.open( URI_ROOT + 'action/programs/getDetails/' + by + '/' + gridId, 'datasheet', 'menubar=location=0,status=0,scrollbars=0,width=685,height=600,menubar=0');
        
        newWindow = window.open( URI_ROOT + 'musorinfo/'+programType+'/' + programName + '/' + gridId, '_blank');
        newWindow.focus();
        
        return;

        new Ajax.Request( URI_ROOT + 'action/programs/getDetails/' + by + '/' + gridId, {
          onComplete: function( trans ) {
            $$('body .bk_banner_custom').invoke('setStyle', {visibility:'hidden'});
            Shadowbox.open({
              player: 'html',
              handleOversize: 'none',
              content: trans.responseText,
              height:  800, // 400
              width:   686
            }); // end shadowbox open
            var resizeTimer;
            Shadowbox.applyOptions({
              onClose: function() {
                $$('body .bk_banner_custom').invoke('setStyle', {visibility:''});
                clearInterval( resizeTimer );
              },
              onFinish: function() {
                if ( $('bigthumb') ) {
                  $('bigthumb').onerror = function() {
                    $('bigthumb').src = $('bigthumb').src + '?rand=345345';
                  }
                }
                /*
                if ( $('details_body').scrollHeight > $('details_body').offsetHeight + 10 ) {
                  $('scrollbar-details').show();
                    details_sb = new scroller({
                    scrollbar:    'scrollbar-details',
                    content:      'details_body',
                    step:         48,
                    fps:          20,
                    effect:       'sin'
                  });
                } else {
                  $('scrollbar-details').hide();
                }*/
                $('details_body').setStyle({'height': ( $('shadowbox_content').clientHeight - 70 ) + 'px' });
                resizeTimer = setInterval( "$('details_body').setStyle({'height': ( $('shadowbox_content').clientHeight - 70 ) + 'px' });", 400 );
              }
            })
          } // end onComplete
        }); // end request
      } // end function

    TVProgram.showPersonDetails = function( personId ) {

      TVProgram.popupWindow = window.open( URI_ROOT + 'action/programs/getPersonDetails/' + personId, 'datasheet', 'menubar=location=0,status=0,scrollbars=0,width=685,height=600,menubar=0,resizable=0');
      return;

      new Ajax.Request( URI_ROOT + 'action/programs/getPersonDetails/' + personId , {
        onComplete: function( trans ) {
          $$('body .bk_banner_custom').invoke('setStyle', {visibility:'hidden'});
          Shadowbox.open({
            player: 'html',
            content: trans.responseText,
            height:  800,
            width:   686
          }); // end shadowbox open
          var resizeTimer;
          Shadowbox.applyOptions({
            onClose: function() {
              $$('body .bk_banner_custom').invoke('setStyle', {visibility:''});
              clearTimeout( resizeTimer );
            },
            onFinish: function() {
            /*
              if ( $('details_body').scrollHeight > $('details_body').offsetHeight + 10 ) {
                $('scrollbar-details').show();
                  details_sb = new scroller({
                  scrollbar:    'scrollbar-details',
                  content:      'details_body',
                  step:         48,
                  fps:          20,
                  effect:       'sin'
                });
              } else {
                $('scrollbar-details').hide();
              }
            */
              $('details_body').setStyle({'height': ( $('shadowbox_content').clientHeight - 70 ) + 'px' });
              resizeTimer = setInterval( "$('details_body').setStyle({'height': ( $('shadowbox_content').clientHeight - 70 ) + 'px' });", 400 );
            }
          }) // end applyOptions

        } // end onComplete
      }); // end request
    } // end function

      TVProgram.showTooltip = function( rel ) {
        if ( !rel ) {
          return;
        }
        tooltip = rel.evalJSON();
        TVProgram.tooltipElement.style.display = 'block';
        tooltip.genre = tooltip.genre == null ? '': tooltip.genre;
        tooltip.nationality = tooltip.nationality == null ? '': tooltip.nationality;
        TVProgram.tooltipElement.innerHTML = '<span><b>' + tooltip.from_to + ' - ' + tooltip.title + '</b><br/>' + tooltip.nationality + ' ' + tooltip.genre + '</span>';
      }

      TVProgram.hideTooltip = function() {
        TVProgram.tooltipElement.style.display = 'none';
        TVProgram.tooltipElement.innerHTML = '';
      }

    Event.observe( document, 'dom:loaded', function(){
      Shadowbox.init({
          displayNav:       false,
          viewportPadding:  2,
          enableKeys:       false
      });

      $( document.body ).observe( 'mousemove', function( event ) {
        TVProgram.pointerX = Event.pointerX( event );
        TVProgram.pointerY = Event.pointerY( event );
        if ( TVProgram.tooltipElement.style.display == 'block' ) {
          TVProgram.tooltipElement.style.top = ( TVProgram.pointerY + 20 ) + 'px';
          TVProgram.tooltipElement.style.left = ( TVProgram.pointerX - 50 ) + 'px';
        }
      });

      $( document.body ).insert( '<div id="tvprogram-tooltip"><span>&nbsp</span></div>' );
      TVProgram.tooltipElement = $('tvprogram-tooltip');
    });