﻿
var EventDetail = Class.create({
    initialize: function(dt) {
        this.dt = $(dt);
        this.dd = this.dt.nextSiblings()[0];
        this.id = this.dt.select('a')[0].id.substr(3);


        Event.observe(this.dt.select('a')[0], 'click', this.EventClick.bindAsEventListener(this));
        if (this.dd.select('a.morelink')[0]) {
            Event.observe(this.dd.select('a.morelink')[0], 'click', this.EventClick.bindAsEventListener(this));
        }

        this.detailLoaded = false;
    },
    loadDetail: function() {
        var idx = 0;
        for (idx = 0; idx < this.dt.parentNode.select('dt').length; idx++) {
            if (this.dt == this.dt.parentNode.select('dt')[idx]) {
                break;
            }
        }
        this.idx = idx;


        this.details = '';

        this.containerEl = new Element('div', { 'class': 'cal_listview', 'style': 'display:block; left: 675px' });

        //header (h2)
        this.navHeader = new Element('h2');

        this.backBtn = new Element('a', { 'href': '#', 'class': 'page_previous' });
        Event.observe(this.backBtn, 'click', function(ev) {
            bogusCal.btnSelectDay_Click(ev);
        });

        this.backBtn.update('&laquo;');
        this.navHeaderSpan = new Element('span', { 'style': 'padding-left: 10px; text-align: left;' });

        this.navHeaderSpan.update(DateHelper.formatForOutput(bogusCal.startDate));

        this.navHeader.appendChild(this.backBtn);
        this.navHeader.appendChild(this.navHeaderSpan);
        this.containerEl.appendChild(this.navHeader);

        //next/prev
        this.eventNav = new Element('div', { 'class': 'event-nav' });
        if (idx > 0) //previous btn
        {
            this.prevBtn = new Element('a', { 'href': '#', 'class': 'event-prev' });
            this.prevBtn.update('previous');
            this.eventNav.appendChild(this.prevBtn);
            Event.observe(this.prevBtn, 'click', this.prev_Click.bindAsEventListener(this));

            //this.eventNav.innerHTML += ' | ';
        }
        if (idx > 0 && idx < this.dt.parentNode.select('dt').length - 1) {
            this.npSep = new Element('span');
            this.npSep.update(' | ');
            this.eventNav.appendChild(this.npSep);
        }
        if (idx < this.dt.parentNode.select('dt').length - 1) //next button
        {
            this.nextBtn = new Element('a', { 'href': '#', 'class': 'event-next' });
            this.nextBtn.update('next');
            this.eventNav.appendChild(this.nextBtn);
            Event.observe(this.nextBtn, 'click', this.next_Click.bindAsEventListener(this));
        }

        this.containerEl.appendChild(this.eventNav);

        this.detailsEl = new Element('div', { 'class': 'event-details' });
        this.containerEl.appendChild(this.detailsEl);

        $('cal_wrapper').appendChild(this.containerEl);
        this.detailLoaded = true;
    },
    EventClick: function(ev) {
        Event.stop(ev);
        new Effect.Appear('calloading', { duration: .4 });

        if (!this.detailLoaded) {
            this.loadDetail();
        }

        var base = this;
        new Ajax.Updater(this.detailsEl, '/assets/ajax/handlers/event-detail.aspx',
		{
		    method: 'get',
		    parameters: { 'e': this.id },
		    onComplete: function(transport) {

		        new Effect.Fade('calloading', { duration: .2 });
		        new Effect.Appear($(base.containerEl), { duration: .4 });
		        bogusCal.showView(base.containerEl);
		        bogusCal.setupButtonState('');
		        bogusCal.eventID = base.id;
		        base.manageTags(base.detailsEl);

		    }
		});
    },
    backBtnClick: function(ev) {
        bogusCal.btnSelectDay_Click(ev);
    },
    next_Click: function(ev) {
        var ne = new EventDetail(this.dt.parentNode.select('dt')[this.idx + 1]);
        ne.EventClick(ev);
    },
    prev_Click: function(ev) {
        var pe = new EventDetail(this.dt.parentNode.select('dt')[this.idx - 1]);
        pe.EventClick(ev);
    },
    manageTags: function(container) {
        var currentTag = bogusCal.tag;
        var base = this;
        $(container).select('ul.tag-chain li').each(function(tag) {
            if (currentTag == tag.select('a span')[0].innerHTML) {
                tag.addClassName('highlight');
            }
            Event.observe(tag.select('a')[0], 'click', function(ev) {
                Event.stop(ev);
                var prevView = base.dt.parentNode.parentNode.id.substr(0, base.dt.parentNode.parentNode.id.length - 4);
                bogusCal.currentView = prevView;
                bogusCal.setNewTag(this.firstChild.innerHTML);
                bogusCal.setupButtonState(prevView);
                bogusCal.showView(prevView + 'view');
            });

        });
    }
});