var MochaSearch = new Class({
	
	getOptions: function(){
        return {};
    },
			
  initialize: function(opts){
		this.setOptions(this.getOptions(), opts);
	},
	
	ini:function(){
    this.trs = $A([]);
		this.counter = 0;
    this.onDeleteClick = this.deleteFilterOption.bindAsEventListener(this);
    this.onAdd = this.addRow.bindAsEventListener(this);
    this.onClear = this.resetForm.bindAsEventListener(this);
    this.onRemoveRow = this.removeRow.bindAsEventListener(this);
    this.onApply = this.applyFilters.bindAsEventListener(this);
		
    if ($('advanced-search-add')) {
      $('advanced-search-add').addEvent("click", this.onAdd);
      $('advancedFilterTable-clearall').addEvent("click", this.onClear);
      this.trs.each(function(tr){
        tr.injectAfter($('advanced-search-table').getElements('tr').getLast());
      });
    }
    if ($('advanced-search-apply')) {
      $('advanced-search-apply').addEvent("click", this.onApply);
    }
    this.watchDelete();
  },
  
  applyFilters: function(){
		this.getSQL();
    oPackage.submitfabrikTable(this.options.tableid, 'filter');
  },
  
  watchDelete: function(){
    $$('.advanced-search-remove-row').removeEvents();
    $$('.advanced-search-remove-row').addEvent('click', this.onRemoveRow);
  },
  
  addRow: function(e){
  	new Event(e).stop();
    var tr = $('advanced-search-table').getElements('tr').getLast();
    var clone = tr.clone();
    clone.injectAfter(tr);
		clone.getElement('td').empty().setHTML(this.options.conditionList);
    this.watchDelete();
  },
  
  removeRow: function(event){
    var e = new Event(event);
    e.stop();
    if ($$('.advanced-search-remove-row').length > 1) {
      var tr = e.target.findUp('tr');
      var fx = new Fx.Styles(tr, {
        duration: 800,
        transition: Fx.Transitions.Quart.easeOut,
        onComplete: function(){
          tr.remove();
        }
      });
      fx.start({
        'height': 0,
        'opacity': 0
      });
    }
  },
  
  resetForm: function(){
    var table = $('advanced-search-table');
    if(!table){
    	return;
    }
    $('advanced-search-table').getElements('tr').each(function(tr, i){
	    if(i > 1){
	    	tr.remove();
	    }
	    if(i == 1){
	    	tr.getElements('.inputbox').each(function(dd){dd.selectedIndex = 0;});
	    	tr.getElement('input').value = '';
	    }
    });
    this.watchDelete();
  },

  deleteFilterOption: function(e){
    var event = new Event(e);
    element = event.target;
    $(element.id).removeEvent("click", this.onDeleteClick);
    var tr = element.parentNode.parentNode;
    var table = tr.parentNode;
    table.removeChild(tr);
    event.stop();
  },
  
  getSQL: function(){
    if (!$('advanced-search-table')) {
      return;
    }
    var tBody = $('advanced-search-table').getElement('tbody');
    var trs = $('advanced-search-table').getElements('tr').slice(1);
    var str = '';
    ok = true;
    trs.each(function(tr){
			var key = tr.getElement('select[name=search_key]').getValue();
			var search_condition = tr.getElement('select[name=search_condition]').getValue();
			var value = tr.getElement('input[name=value]').getValue();
				
			str += key;
				
			if(search_condition == 'BEGINS WITH' || search_condition == 'CONTAINS' || search_condition == 'ENDS WITH'){
					str += ' LIKE';
			} else {
				str += ' ' + search_condition;
			}
				
			switch (search_condition) {
         case 'BEGINS WITH':
           value = value + "%";
           break;
         case 'CONTAINS':
           value = "%" + value + "%";
           break;
         case 'ENDS WITH':
           value = "%" + value;
           break;
         default:
           break;
       }
				
			str +=  ' "' + value + '" ';
				
/*        dds.each(function(dd){
          var thisstr = $(dd).getValue();
					if (dd.name == "search_condition") {
						
            fType = dd.options[dd.options.selectedIndex].innerHTML;
						if(thisstr == 'BEGINS WITH' || thisstr == 'CONTAINS' || thisstr == 'ENDS WITH'){
							thisstr = 'LIKE';
						}
          }
          
          if (thisstr === '') {
            ok = false;
          }
          else {
            tmpstr = tmpstr + thisstr + ' ';
          }
        });
        if (ok) {
          var field = tr.getElement('input[name=value]');
          if (field.value !== '') {
            var fVal = field.value;
            switch (thisstr) {
              case 'BEGINS WITH':
                fVal = fVal + "%";
                break;
              case 'CONTAINS':
                fVal = "%" + fVal + "%";
                break;
              case 'ENDS WITH':
                fVal = "%" + fVal;
                break;
              default:
                break;
            }
            str = str + tmpstr + '"' + fVal + '" ';
          }
        }*/
    });
    $('advancedFilterContainer').value = str;
    return ok;
  }
});

MochaSearch.implement(new Events);
MochaSearch.implement(new Options);
