var TV = new Class(
{
    initialize:function() {
        $$( '#days input, #channelblock input').each( function( el, idx) {
            el.addEvent( 'change', function(){Tv.changed()});
        });
        $$( '#time input').each( function( el, idx) {
            el.addEvent( 'change', function(){Tv.show()});
        });
        this.setSavedValues();
    },
    setSavedValues:function()
    {
        var hash = window.location.hash;
        if( !hash)
            return;
        var params = hash.substring(1).parseQueryString();
        var genre = params['genre'];
        if( genre)
        {
            $$('#genre input').each( function( el, idx)
            {
                el.set( 'checked','');
                el.getParent().removeClass( 'selected');
            });
            $(genre).set( 'checked','checked');
            $(genre).getParent().addClass( 'selected');
            this.toggleGenre( genre);            
        }
        var time = params['time'];
        if( time)
        {
            $$('#time input').each( function( el, idx)
            {
                el.set( 'checked','');
                el.getParent().removeClass( 'selected');
            });
            $(time).set( 'checked','checked');
            $(time).getParent().addClass( 'selected');
        }
        var date = params['date'];
        if( date)
        {
            $$('#days input').each( function( el, idx)
            {
                if( date.contains( el.value))
                {
                    el.set( 'checked','checked');
                }
                else
                    el.set( 'checked','');            
            });
        }
        var channels = params['channel'];
        if( channels)
        {
	        channels.each( function( el, idx)
	        {
	            if( $(el))
	            {
	                $(el).set( 'checked', 'checked');
	            }
	        });
        }
        this.show();
    },
    toggleGenre:function( id) {
        $('channelblock').set( 'class','');
        $('channelblock').set( 'class','clearfix g'+id);
    },
    show:function() {
        var days = new Array();
        var channels = new Array();
        var time = $$('#time .selected input')[0].value;
        if( time == 'now')
        {
            $$( "#days input").each( function( el, idx) {
                if( idx == 0 && !el.checked)
                {
                    el.checked = true;
                }
                else if( idx!=0 && el.checked)
                {
                    el.checked = false;
                }
            });
        }
        $$( "#channelblock input").each( function( el, idx) {
            if( el.checked && el.getParent().getStyle( 'display')=='none')
            {
                el.set( 'checked', '');
            }
        });
        queryString = $('tvselector').toQueryString();
        window.location.hash = queryString;
        $$('#tvguide').set( 'text', '');
        $( 'openbutton').disabled = 'disabled';        
        $$('#tvguide').setStyle( 'visibility', 'visible');
        $$('#tvguide').set( 'text', '');
        query = "schedule.xl?"+queryString;
        var req= new Request.HTML({url:query, update: $('tvguide')}).send();        
    },
    selectAll:function() {
        $$( "#channelblock input").each( function( el, idx) {
            if( el.getParent().getStyle( 'display')!='none')
            {
                el.checked = true;
            }
        });
        this.changed();
    },
    clear:function() 
    {
        var i = true;
        $$( "#channelblock label input").each( function( el, idx) {
            if( el.getParent().getStyle( 'display')!='none')
            {
                if( i)
                {
                    el.checked = true;
                    i = false;
                }
                else
                {
                    el.checked = false;
                }
            }
        });
        this.changed();
    },
    changed:function() {
        $$('#tvguide').setStyle( 'visibility', 'hidden');
        var channels=false, days=false;
        $$( "#days input").each( function( el, idx) {
            if( el.checked)
            {
                days=true;
            }
        });
        $$( "#channelblock input").each( function( el, idx) {
            if( el.checked && el.getParent().getStyle( 'display')!='none')
            {
                channels=true;
            }
        });
        if( channels && days)
            $( 'openbutton').disabled = null;        
        else
            $( 'openbutton').disabled = 'disabled';
    },
    print:function()
    {
        queryString = $('tvselector').toQueryString();
        document.location.href='print.xl?'+queryString;        
    }
});
var Tv;
window.addEvent( 'domready',function() { Tv = new TV();});
