/*
 * dwb.faq class
 *
 * Copyright (c) 2009 DWBooster
 * http://www.dwbooster.com
 *
 * Date: 2009-02-24
 */

var dwb = dwb || {};

dwb.faq = (function (){
  
  // PRIVATE VARIABLE
  var handle = '/dwb_faq/faq.handle.php',
      retObj = {
        create : function(id, conf){
          var that    = this;
          this.conf   = (typeof conf == 'object') ? conf : {};
          this.id     = id;
          
          // Assign the submit event to the search form
          $('#'+this.id+' form').submit(function(){return that.search()});
          
          // Assign "show all" click event
          $('#'+this.id+' .faq-show-all').click(function(){that.getList(); return false;});
          
          // Show the faq list
          if(this.conf.questions){
            this.getList();
          }
        },
    
        getList : function(){
          var that = this;
          $.get(handle, {'action' : 'list', 'show_answer' : (that.conf.answers || false )}, function(data){that.insertList(data);});
        },
    
        getFaq : function(faqId){
          var that = this;
          $.get(handle, {'action' : 'get', 'id' : faqId}, function(data){that.insertAnswer(faqId, data);});
        },
    
        search : function(){
          var that = this;
          $.get(handle, {'action' : 'search', 'to_search' : $('#'+this.id+' .faq-search-box:first-child').val()}, function(data){that.insertList(data, true);});
          return false;
        },
    
        insertList : function(data, searchResult){
          var that      = this,
              top       = that.id + 'top',
              container = '#' + that.id + ' .faq-container',
              questions = container + ' .faq-question',
              answers   = container + ' .faq-answer';
        
          $(container).html('<a name="'+top+'" id="'+top+'"></a>'+data);
          if(!this.conf.answers && !searchResult){
            $(questions).one('click', function(){
              that.getFaq(this.id.substr(3));
            });
          }else{
            $(questions).click( function(){$(this).next('.faq-answer').slideToggle('slow')});
            $(answers).append('<div><a href="#'+top+'" class="faq-up">[go up]</a></div>');
          }
        },
    
        insertAnswer : function(faqId, data){
          var top = this.id + 'top';
          
          $('#faq'+faqId).after(data).next('.faq-answer').append('<div><a href="#'+top+'" class="faq-up">[go up]</a></div>').slideDown('slow');
          $('#faq'+faqId).click(function(){$(this).next('.faq-answer').slideToggle('slow')});
        }
    
      };
  
  function clone(object) {
    function F() {}
    F.prototype = object;
    return new F;
  }
  
  
  return {
    create : function(id, conf){
      var faqInst = clone(retObj);
      faqInst.create(id, conf);
    }
  }; 
})();
