window.addEvent('domready',function(){
    if ( $('FAQSDiv') ){
        var zxFaqOpts = { };
        var FaqPage = new zxFaqPage(zxFaqOpts);
    }
});

var zxFaqPage = new Class({

    options : {
        liId: 'FAQLI',
        liClass: '.FAQLi',
        questionId: 'FQueston',
        answerId: 'FAnswer',
        dateId: 'FDate',
        udateId: 'FUDate',
        show_h_start : 0,
        show_h_end_def: 200,
        show_h_end: [],
        show_h_padding: 15,
        show_duration: 500,
        openClass: 'open',
        closeClass: 'closed',
        answerStyles: {'height':'0px', 'opacity': '0', 'overflow': 'hidden'},
        opacityHover: .7,
        closeopened: true
    },

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

    setOptions:function(options){
        this.options = Object.extend(this.options, options || {} );
    },

    bindAction:function(){
        $$(this.options.liClass).each(function(el){
            var id = $(el).id.replace(this.options.liId,'').toInt();
            if (!isNaN(id)){

                $(this.options.questionId + id).addClass( this.options.closeClass );
                $(this.options.questionId + id).setStyle('cursor','pointer');
                $(this.options.questionId + id).addEvent('mouseover',function(){
                    $(this.options.questionId + id).setOpacity( this.options.opacityHover )
                }.bind(this));
                $(this.options.questionId + id).addEvent('mouseout', function(){
                    $(this.options.questionId + id).setOpacity(1)
                }.bind(this));

                $(this.options.questionId + id).addEvent('click', function(){
                    this.changeStatus(id);
                }.bind(this));

                if ( $(this.options.answerId + id) ) {
                    this.options.show_h_end[id] = $(this.options.answerId + id).getStyle('height').toInt();
                    if (isNaN( this.options.show_h_end[id] )) this.options.show_h_end[id] = this.options.show_h_end_def;
                    this.options.show_h_end[id] += this.options.show_h_padding;

                    $(this.options.answerId + id).setStyles( this.options.answerStyles );
                }

                if ( $(this.options.dateId + id) ){
                    $(this.options.dateId + id).setStyle('display', 'none');
                }
                if ( $(this.options.udateId + id) ){
                    $(this.options.udateId + id).setStyle('display', 'none');
                }
            }
        }.bind(this));
    },

    closeAll:function(skip_id){
        $$(this.options.liClass).each(function(el){
            var id = $(el).id.replace(this.options.liId,'').toInt();
            if (!isNaN(id) && skip_id != id){
                if ( $(this.options.questionId + id).hasClass(this.options.openClass) ){
                    $(this.options.questionId + id).removeClass(this.options.openClass);
                    $(this.options.questionId + id).addClass(this.options.closeClass);

                    if ( $(this.options.answerId + id) ) {
                        //$(this.options.answerId + id).setStyle('overflow', 'hidden');
                        new Fx.Styles(  $(this.options.answerId + id) , {
                            duration: this.options.show_duration,
                            transition: Fx.Transitions.linear,
                            onComplete: function(){
                                if ( $(this.options.dateId + id) ) $(this.options.dateId + id).setStyle(  'display', 'none');
                                if ( $(this.options.udateId + id)) $(this.options.udateId + id).setStyle( 'display', 'none');
                            }.bind(this)
                        }).start({ 'height': [this.options.show_h_end[id], this.options.show_h_start], 'opacity':[1, 0]});
                    }
                }
            }
        },this);
    },

    changeStatus:function(id){
        if ( this.options.closeopened ){
            this.closeAll(id);
        }
        if ( $(this.options.questionId + id).hasClass(this.options.closeClass) ){
            $(this.options.questionId + id).removeClass(this.options.closeClass);
            $(this.options.questionId + id).addClass(this.options.openClass);

            if ( $(this.options.answerId + id) ){
                new Fx.Styles( $(this.options.answerId + id) , {
                    duration: this.options.show_duration,
                    transition: Fx.Transitions.linear,
                    onComplete: function(){
                        //$(this.options.answerId + id).setStyle('overflow', 'auto');
                    }.bind(this)
                }).start({ 'height': [this.options.show_h_start, this.options.show_h_end[id]], 'opacity':[0, 1] });

                if ( $(this.options.dateId + id) ) $(this.options.dateId + id).setStyle(  'display', 'block');
                if ( $(this.options.udateId + id)) $(this.options.udateId + id).setStyle( 'display', 'block');
            }
        }else{
            $(this.options.questionId + id).removeClass(this.options.openClass);
            $(this.options.questionId + id).addClass(this.options.closeClass);

            if ( $(this.options.answerId + id) ) {
                //$(this.options.answerId + id).setStyle('overflow', 'hidden');
                new Fx.Styles(  $(this.options.answerId + id) , {
                    duration: this.options.show_duration,
                    transition: Fx.Transitions.linear,
                    onComplete: function(){
                        if ( $(this.options.dateId + id) ) $(this.options.dateId + id).setStyle(  'display', 'none');
                        if ( $(this.options.udateId + id)) $(this.options.udateId + id).setStyle( 'display', 'none');
                    }.bind(this)
                }).start({ 'height': [this.options.show_h_end[id], this.options.show_h_start], 'opacity':[1, 0]});
            }
        }
    },

    openRequested: function(){
        var reg = /(\?|\&|^)(faq)=([0-9]+)(\&|$)/i;
        var match = window.location.search.match(reg);

        if (match != null){
            var faq_id = match[3];
            if ( $(this.options.questionId+faq_id) ){
                $(this.options.questionId+faq_id).fireEvent('click');
            }
        }
    }
});
