/*
* jQuery table search Plugin 1.0.4
* widget that adds search functionality in a table element
* Copyright (c) 2008 Leonardo Rossetti (motw.leo@gmail.com)
* Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php)
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/

(function($){$.fn.tableSearch=function(options){var settings=$.extend(true,{ignore:[],selector:true,container:"table-search-container",errorElementClass:"table-search-error-message",elements:{selectField:{className:"table-search-criteria-field",name:"table-search-input-field",label:"Select a column: ",css:{}},inputField:{className:"table-search-input-field",name:"table-search-input-field",label:"Insert a text to search: ",css:{marginLeft:"5px"}},searchButton:{className:"table-search-button",name:"table-search-button",value:"Search",css:{marginLeft:"5px"}},resetButton:{className:"table-search-clean-button",name:"table-search-clean-button",value:"Reset",css:{marginLeft:"5px"}}},warnings:{empty:"Please fill the search field.",notFound:"Data not found."}},options);var search=function(obj){var found=false;var criteria=$("."+settings.elements.selectField.className).val();var field=$("."+settings.elements.inputField.className).val().toLowerCase();var counter=0;if($.trim(field)===""){$("#"+settings.container).find("span."+settings.errorElementClass).html(settings.warnings.empty).show();return;}$(obj).find("thead tr th").each(function(){if($(this).text()===criteria){return false;}counter++;}).end().find("tbody tr").each(function(){var columnText=$(this).find("td").eq(counter).text().toLowerCase();var result=columnText.indexOf(field)!=-1;if(result){found=true;$(this).show();$("#"+settings.container).find("span."+settings.errorElementClass).empty().hide();}else if(!result){$(this).hide();}});if(!found){$(obj).find("tbody tr").show();$("#"+settings.container).find("span."+settings.errorElementClass).html(settings.warnings.notFound).show().end();}};var reset=function(obj){$(obj).find("tbody tr").show();};var isIgnored=function(text){var ignore=false;if($(settings.ignore).size()===0){return false;}$(settings.ignore).each(function(){if(($(this).get()+"").toLowerCase()===text.toLowerCase()){ignore=true;return false;}});return ignore;};return this.each(function(){var $this=this;$("<div></div>").attr("id",settings.container).insertBefore($this);if(settings.selector){$("<select></select>").attr(settings.elements.selectField).removeAttr("label").css(settings.elements.selectField.css).each(function(){var select=this;$($this).find("thead tr th").each(function(){if(!isIgnored($(this).text())){$(select).append("<option value='"+$(this).text()+"'>"+$(this).text()+"</option>");}});}).appendTo("#"+settings.container);$("<label></label>").attr("for",settings.elements.selectField.name).html(settings.elements.selectField.label).insertBefore("."+settings.elements.selectField.className);}$("<input type='text'/>").attr(settings.elements.inputField).removeAttr("label").bind("keydown",function(e){if(e.which===13){search($this);}else if(e.which===($.browser.mozilla?0:27)){reset($this);}}).bind("keypress",function(e){if(e.which===13){search($this);}else if(e.which===($.browser.mozilla?0:27)){reset($this);}}).appendTo("#"+settings.container);$("<label></label>").attr("for",settings.elements.inputField.name).css(settings.elements.inputField.css).html(settings.elements.inputField.label).insertBefore("."+settings.elements.inputField.className);$("<input type='button' />").css(settings.elements.searchButton.css).attr(settings.elements.searchButton).bind("click",function(){search($this);}).appendTo("#"+settings.container);$("<input type='button'  />").css(settings.elements.resetButton.css).attr(settings.elements.resetButton).bind("click",function(){reset($this);}).appendTo("#"+settings.container);$("<br />").appendTo("#"+settings.container);$("<span></span>").addClass(settings.errorElementClass).css("display","none").appendTo("#"+settings.container);});};})(jQuery);
