/*
 * jQuery Table rows search
 */
 
(function(jQuery) {

 jQuery.fn.tableSearch = function(tableSelector, settings) {
    
    if( !tableSelector ) return this;
    
    var config = jQuery.extend({}, jQuery.fn.tableSearch.config, settings);


    this.each(function() {

        if( jQuery(this).is("input:text, textarea") ) jQuery(this).bind( "keyup", filterTableRows );
        else if( jQuery(this).is("input:radio, input: checkbox, select") ) jQuery(this).bind( "change", filterTableRows );
        else jQuery(this).bind( "click", filterTableRows );

    });


    function filterTableRows(){

            if( jQuery(this).is("input:checkbox") ) {

              var keyWord = [];
              var i = 0;
              jQuery("input[name=" + jQuery(this).attr("name") + "]:checked").each(function(){ keyWord[i++] = jQuery(this).val().toLowerCase(); });

            } else if( jQuery(this).is("select[multiple]") ) {

              var keyWord = [];
              var i = 0;
              jQuery(this).find("option:selected").each(function(){ keyWord[i++] = jQuery(this).val().toLowerCase(); });

            } else if( jQuery(this).is("input, select, textarea") ) var keyWord = jQuery(this).val().toLowerCase();
            else var keyWord = jQuery(this).text().toLowerCase();


            if(  jQuery.isArray(keyWord) || keyWord.length > 1 ) {
            
                jQuery(tableSelector + " tr").each(function(){
                
                    var tempMesh = jQuery(this).text().toLowerCase();
                    var myChildren = jQuery(this).children("td");


                    var doFilter = false;

                    if( jQuery.isArray(keyWord) ) {

                      var matches = 0;
                      jQuery(keyWord).each(function(i){ if( tempMesh.indexOf(keyWord[i]) != -1 ) matches++; });
                      
                      if( matches == 0 ) doFilter = true;
                    
                    }else if( tempMesh.indexOf(keyWord) == -1 ) doFilter = true;
                    
                    if( doFilter ){
                        
                        switch(config.effect)
                        {
                        case 'fade':
                          myChildren.fadeOut(config.speed);
                          break;
                        case 'slide':
                          myChildren.slideUp(config.speed);
                          break;
                        case 'highlight':
                          myChildren.fadeTo(config.speed, config.fadeto);
                          break;
                        default:
                          myChildren.hide();
                        }
                    
                    }else{
                        
                        switch(config.effect)
                        {
                        case 'fade':
                          myChildren.fadeIn(config.speed);
                          break;
                        case 'slide':
                          myChildren.slideDown(config.speed);
                          break;
                        case 'highlight':
                          myChildren.fadeTo(config.speed, 1);
                          break;
                        default:
                          myChildren.show();
                        }
                    
                    }
                    
                });
            
            }else{
                
                var tds = jQuery(tableSelector + " td");
                        
                switch(config.effect)
                {
                case 'fade':
                  tds.fadeIn(config.speed);
                  break;
                case 'slide':
                  tds.slideDown(config.speed);
                  break;
                case 'highlight':
                  tds.fadeTo(config.speed, 1);
                  break;
                default:
                  tds.show();
                }
            
            }
        
        }

   return this;

 };
 
 jQuery.fn.tableSearch.config = {
        'effect': '',
        'speed' : 200,
        'fadeto' : 0.2
        };

})(jQuery);