var PerformanceSelector = new Class ({

    Implements: Options,

    options: {},

    initialize: function (element, options)
    {
        this.setOptions(options);

        this.calendar_element = $(element);
        this.order_element = $(this.options.order_container);
    },

    generate: function (element, multi, perf)
    {
        // set date_picked class for active element
        this.disableHover();
        this.hideMore();

        // create new select box for time
        if(multi === true)
        {
          this.enableHover(element);

          var params = {
              'perf_ids': perf,
              'production_id': this.options.production_id,
              'only_day': true,
              'div_id_order': this.options.order_container
            }

            var req = new Request.HTML({
              'url': this.options.url,
                'method': 'get',
                'data': params,
                'update': $(this.options.more_container)
            }).send();

            $(this.options.more_container).set('class', '');
        }
        // change links
        else
        {
          if(perf[0])
          {
              this.enableHover(element);

              // change performance id in ticket-link
              this.changeTicketLink(perf[0].ticket, perf[0].abo);

              // change donate link
              this.changeDonateLink(perf[0].ticket);

              // change remind link
              this.changeRemindLink(perf[0].id);

              // change my cal link
              this.changeMyCalLink(perf[0].id);
          }
          else
          {
              // change performance id in ticket-link
                this.changeTicketLink(0);

                // change donate link
                this.changeDonateLink(0);

                // change remind link
                this.changeRemindLink(0);

                // change my cal link
                this.changeMyCalLink(0);
          }
        }
    },

  // disable the hover for all selected dates
    disableHover: function()
    {
        // remove all date_picked classes
        if(this.calendar_element != false)
        {
            $each(this.calendar_element.getElements('.date_picked'), function (item, idx)
            {
                var list_element = item.getParent('li');
                if(list_element)
                {
                    var radio = list_element.getElement('input');
                    if(radio)
                    {
                        radio.set('checked', '');
                    }
                }
                else
                {
                     item.removeClass('date_picked');
                }


            });
        }
    },

  // enable the hover for the selected date
    enableHover: function (element)
    {
        var list_element = $(element).getParent('li');
        if(list_element)
        {
            var radio = list_element.getElement('input');
            if(radio)
            {
                radio.set('checked', 'checked');
            }
        }
        else
        {
            $(element).addClass('date_picked');
        }
    },

  // change the ticket link, check that all information are set or generate default error link
    changeTicketLink: function(id, abo)
    {
        var link_element = this.order_element.getElement('.buy');
        if(link_element != false)
        {
            var index_php_text = this.checkHref(link_element);

            if(id == 0)
            {
                  link_element.addClass('smoothbox');
                  link_element.set('href', index_php_text+this.options.lang+'/order/error?keepThis=true&TB_iframe=true&height=200&width=430');
                  link_element.onclick = TB_bind;
            }
            else
            {
                if(abo != null && abo != '')
                {
                    link_element.addClass('smoothbox');
                    var href = index_php_text+this.options.lang+'/buy/'+this.options.production_ticket_id+'/'+id+'/'+abo+'/?keepThis=true&TB_iframe=true&height=200&width=430'
                    link_element.set('href', href);
                }
                else
                {
                    link_element.removeClass('smoothbox');
                    if (1 == this.options.use_iframe)
                    {
                        var href = index_php_text+this.options.lang+'/service/ticketshop/id/'+this.options.shop_id+'/lang/'+this.options.ticket_lang+'/production/'+id;

                        if(this.options.production_ticket_id)
                        {
                            href = href+'/event/'+this.options.production_ticket_id;
                        }
                    }
                    else
                    {
                        var href = this.options.order_url + '?shopid='+this.options.shop_id+'&language='+this.options.ticket_lang+'&gotoperformance='+id;

                        /*
                        if(this.options.production_ticket_id)
                        {
                            href = href+'&gotoevent='+this.options.production_ticket_id;
                        }
                        */
                    }

                    link_element.set('href', href);
                    link_element.onclick = function(){
                        window.location = href;
                    };
                }
            }
        }
    },

  // change the donate link, check that all information are set or generate default error link
    changeDonateLink: function(id)
    {
        var link_element = this.order_element.getElement('.give');
        if(link_element != false)
        {
            var index_php_text = this.checkHref(link_element);
            if(id == 0 || this.options.production_id == 0)
            {
              link_element.set('href', index_php_text+this.options.lang+'/donate?keepThis=true&TB_iframe=true&height=300&width=430');
            }
            else
            {
                link_element.set('href', index_php_text+this.options.lang+'/donate/'+this.options.production_id+'/'+id+'?keepThis=true&TB_iframe=true&height=300&width=430');
            }
        }
    },

  // change the remind link, check that all information are set or generate default error link
    changeRemindLink: function(id)
    {
        var link_element = this.order_element.getElement('.remind');
        if(link_element != false)
        {
            var index_php_text = this.checkHref(link_element);
            if(id == 0)
            {
              link_element.set('href', index_php_text+this.options.lang+'/reminder?keepThis=true&TB_iframe=true&height=500&width=430');
            }
            else
            {
                link_element.set('href', index_php_text+this.options.lang+'/reminder/'+id+'?keepThis=true&TB_iframe=true&height=500&width=430');
            }
        }
    },

  // change the my cal link, check that all information are set or generate default error link
    changeMyCalLink: function(id)
    {
        var link_element = this.order_element.getElement('.my_cal');
        if(link_element != false)
        {
            var index_php_text = this.checkHref(link_element);
            if(id == 0 || this.options.production_id == 0)
            {
                  link_element.set('href', index_php_text+this.options.lang+'/ical?keepThis=true&TB_iframe=true&height=600&width=430');
            }
            else
            {
                link_element.set('href', index_php_text+this.options.lang+'/ical/'+this.options.production_id+'/'+id+'?keepThis=true&TB_iframe=true&height=600&width=430');
            }
        }
    },

    checkHref: function(element)
    {
        var index_php_text = "";

        var link_href = element.get('href');
        if(link_href.contains("index.php"))
        {
            index_php_text = "index.php/";
        }

        index_php_text = $('base_href').getAttribute('href')+index_php_text;

        return index_php_text;

    },

    hideMore: function()
    {
        if($(this.options.more_container))
        {
            $(this.options.more_container).set('class', 'hideme');
        }
    }


});

PerformanceSelector.contentFields = new Hash();

PerformanceSelector.get = function(id)
{
    return this.contentFields.get(id);
}

PerformanceSelector.setContentField = function(id, field)
{
    this.contentFields.set(id, field);
}
