/*
 * @(#)jquery.xlt.searchWidget-1.0.js		1.00 11/09/01
 *
 * Copyright (c) 2010-2011 SG Büromedien GmbH
 * Märkischer Ring 120, 58097 Hagen, Deutschland
 * All rights reserved.
 * 
 * @author		Marcus Holtgräwe
 * @version		1.1 16 Nov 2011
 */

(function($) {
	$.fn.searchWidget = function(tagsURL, submitURL, options) {
		$.fn.searchWidget.defaults = {
				label : "Suche",
				buttonText : "GO",				
				defaultText : "Suchtext",
				defaultClass : "default",
				buttonClass : "button button-orange",
				extraParams : {}
		};
		options = $.extend({}, $.fn.searchWidget.defaults, options || {});
				
		var form$ = $("<form/>", {
			"method" : "get",
			"action" : submitURL
		});
		
		form$.submit(function() {
			var text = $("input", form$).val();
			if (text == options.defaultText) {
				button$.attr("disabled", true);
				return false;
			}
		});
		
		var label$ = $("<label/>", { "text" : options.label });
		form$.append(label$);
		
		var input$ = $("<input/>", { "name" : "keywords" });
		
		input$.blur(function() {
			var this$ = $(this);		
			var searchString = $.trim(this$.val());
			if (!searchString) {
				searchString = options.defaultText;
				this$.addClass(options.defaultClass);
			}
			this$.val(searchString);
			
		}).focus(function() {
			var this$ = $(this);
			this$.removeClass(options.defaultClass);
			
			var searchString = $.trim(this$.val()); 
			if (searchString == options.defaultText) {
				this$.val(null);
			}
			
		}).keydown(function() {
			setTimeout(function() {
				var isEmpty = $.trim(input$.val()).length > 0;
				var waitForInput = input$.hasClass(options.defaultClass);
				button$.attr("disabled", !isEmpty || waitForInput);
			}, 50);
			
		}).bind('paste', function() {
			input$.trigger('keydown');
		
		}).blur();
		
		input$.autocomplete({
			source : tagsURL,
			minLength : 1,
			select :
				function(event, ui) {
					if (event.which == 13) {
						form$.submit();
						return false;
					} else {
						input$.val(ui.item.value);
						form$.submit();
					}
				}
		});
		form$.append(input$);
		
		// workaround for IE, can't use .attr("type", "submit") on button
		var button$ = $("<button type='submit' disabled='disabled'></button>");
		button$.text(options.buttonText);
		button$.attr("class", options.buttonClass);
		form$.append(button$);
		
		$.each(options.extraParams, function(name, value) {
			var input$ = $("<input/>", {
				'type' : 'hidden',
				'name' : name,
				'value' : value
			});
			form$.append(input$);
		});
		
		var container$ = $("<div/>", { "class" : "search-widget" });
		container$.append(form$);
		this.append(container$);
		
		return this;
	};
})(jQuery);
