/**
 * Pigioskeliones.lt filtro juosta.
 * @author Povilas Balzaravičius
 * @copyright 2009 M2 Technologijos
 */


var TripsFilter = Class.create({
    formId: null,

    /**
     * Ar submitinti formą, kai reikšmės yra pakeičiamos.
     */
    submitOnChange: true,

    /**
     * Formos nuresetinimo elementas.
     */
    resetId: 'filterReset',

    /**
     * Titulinio puslapio nuoroda nukreipimui po formos atnaujinimo.
     */
    baseUrl: null,

    initialize: function(base_url) {
        this.baseUrl = base_url;
    },


    initDropbox: function(trigger_id, dropbox_id, target_id, markChanged) {
        var trigger = $(trigger_id);
        var dropbox = $(dropbox_id);
        var target  = $(target_id);
        this.markChanged = markChanged ? true : false;

        document.observe('click', function(event) {
            var state = dropbox.getStyle('display');
            if (state == 'block' && event.target != dropbox) {
                this.hideDropbox(dropbox);
            }
        }.bind(this));

        trigger.observe('click', function(event) {
            var state = dropbox.getStyle('display');
            if (state == 'none') {

                this.showDropbox(dropbox);
                
            }
            else {
                this.hideDropbox(dropbox);
            }

            return false;
        }.bind(this));


        dropbox.childElements().each(function(item) {
            item.observe('click', function(event) {
                var value = item.id.substr(trigger_id.length + 1);
                target.value = value;
                trigger.update("<span>" + item.innerHTML + "</span>");
                this.hideDropbox(dropbox);
                if (this.markChanged) {
                	setChanged();
                }
                if (this.submitOnChange == true) {
                    this.updateForm();
                }
                return false;
            }.bind(this));
        }.bind(this));
    },

    showDropbox: function(item) {
        var queue = Effect.Queues.get(item.id);
        item.blindDown({
            duration: 0.3,
            queue: {
                position: 'end',
                scope: item.id
            }
        });

        return false;
    },


    hideDropbox: function(item) {
        var queue = Effect.Queues.get(item.id);
        item.blindUp({
            duration: 0.3,
            queue: {
                position: 'end',
                scope: item.id
            }
        });
        return false;
    },


    initForm: function(form_id) {
        this.formId = form_id;
        var form = $(form_id);

        //Jei nustatyta, kad submitinsim formą pasikeitus reikšmėms, uždedam
        //handlerį.
        if (this.submitOnChange == true) {
            $$("#" + form_id + " input").each(function(item) {
                item.observe('change', function(event) {
                    this.updateForm();
                }.bind(this));
            }.bind(this));
        }

        $$("#" + form_id + " .submit").each(function(item) {
            item.observe('click', function(event) {
                this.updateForm();
            }.bind(this));
        }.bind(this));

        $(this.resetId).observe('click', function(event) {
            this.resetFilter();
        }.bind(this));
    },


    resetFilter: function() {
        var form = $(this.formId);
        if (form) {
            var url = form.action + ',action.reset';
            new Ajax.Request(url, {
              method: 'post',
              onSuccess: function(t) {
                this.updateContent();
              }.bind(this)
            });
        }
    },


    updateForm: function() {
        var form = $(this.formId);
        if (form) {
            var url = form.action + ',action.update';
            new Ajax.Request(url, {
              method: 'post',
              postBody: form.serialize(),
              onSuccess: function(t) {
                this.updateContent();
              }.bind(this)
            });
        }
    },
    
    updateContent: function() {
        if (this.baseUrl !== null) {
            window.location = this.baseUrl;
        }
    }
});
