(function($) {
	$(document).ready(function() {
		var generateButton = function(obj) {
			// the generated button gets the classes of the original button.
			var classes = $(obj).attr('class');
			classes = classes.replace('button-generate', '');

			// generate overall button.
			var button = $('<div/>');
			button.addClass('button')
				.addClass(classes)
				.attr('style', $(obj).attr('style'));

			// center part
			var center = $('<div/>')
				.addClass('center');

			// left part
			var leftSide = $('<div/>')
				.addClass('left');

			// right part
			var rightSide = $('<div/>')
				.addClass('right');

			// label for button
			var label = $('<div/>')
				.addClass('label');

			// append label to center part.
			center.append(label);

			// append all buttonparts to the button.
			button
				.append(leftSide)
				.append(center)
				.append(rightSide)
				.css('cursor', 'pointer')
				.insertAfter(obj);
			// hide the original.
			$(obj).hide();

			return button;
		}

		$('a.button-generate').livequery(function() {
			$(this).each(function() {
				var self = this;
				var button = generateButton(self);
				button.find('div.label').text($(self).text());

				button.click(function() {
					// there is no way to mimic trigger the native click event of an anchor, for more info: http://www.mail-archive.com/discuss@jquery.com/msg11409.html
					if ($(self).attr('href').length > 1) {
						if ($(this).attr('target') && $(this).attr('target') == '_blank' || $(this).attr('target') == '_top') {
							window.open($(self).attr('href'));
						}
						else {
							window.location.href = $(self).attr('href');
						}
					}
					else {
						$(self).trigger('click');
					}
				});
			});
		});

		$('form :submit.button-generate').livequery(function() {
			$(this).each(function() {
				var self = $(this);
				var button = generateButton(self);
				var form = self.parents('form').eq(0);
				button.find('div.label').text(self.val());

				button.click(function() {
					self.trigger('click');
				});

				// IE does not support triggering the click event
				// of the button because it's hidden.
				var autoCompleteActive = false;
				self.parents('form').eq(0).keyup(function(e) {
					if ($(e.target).is('textarea')) {
						return;
					}

					if (e.keyCode == 40 || e.keyCode == 38) {
						autoCompleteActive = true;
					}

					if (e.keyCode == 13) {
						if (!autoCompleteActive) {
							self.trigger('click');
						}
						autoCompleteActive = false;
						return false;
					}
				});
			});
		});
	});
})(jQuery);
