/**
 * H2 Support
 */
var H2 = {
	initLinks: function() {
		$("a[rel='external']").click(function(e) {
			window.open(this.href);
			e.preventDefault();
		});
		$("a[rel='internal']").click(function(e) {
			window.open(this.href);
			e.preventDefault();
		});
		$("a[rel='popup']").click(function(e) {
			H2.openPopupWindow(this.href);
			e.preventDefault();
		});
	},

	addFormValidation: function($form) {
		var noFieldValidation = false;
		$form.find("input[name='_noFieldValidation']").each(function() {
			noFieldValidation = true;
		});
		if (!noFieldValidation) {
			$form.find(':input').blur(function() {
				var data = {'_action': $form.attr('action')};
				data[$(this).attr('name')] = $(this).val();

				var $input = $(this);
				$.post($form.attr('action') + "/fieldvalidation", data, function(result) {
					if (!result.errors || !result.errors[$input.attr('name')]) {
						$input.removeClass('error');
						$input.attr('title', "");
						$('#' + $input.attr('id') + "-error").remove();
						$("label[for='" + $input.attr('id') + "']").removeClass('error');
					}

					if (result.errors) {
						$.each(result.errors, function(key, fieldErrors) {
							$.each(fieldErrors, function(idx, error) {
								$form.find("*[name='" + key + "']").each(function(idx, item) {
									if (!$(item).hasClass('error')) {
										$(item).addClass('error');
									}

									$("label[for='" + $(this).attr('id') + "']").each(function() {
										if (!$(this).hasClass('error')) {
											$(this).addClass('error');
										}

										var errorMessage = error.replace("{label." + key + "}", $(this).text().replace(/(.+):([ *]+)?/, "$1")).replace("&nbsp;", " ");
										$(item).attr('title', errorMessage);
										var $errorMsg = $('<div class="input-error-message" id="' + $(item).attr('id') + '-error" />')
															.html($('<img />').attr({
																alt: errorMessage,
																src: "/img/icons/exclamation_mark.gif",
																width: 15,
																height: 15
															}))
															.append(errorMessage);

										if ($("#" + $(item).attr('id') + "-error").length) {
											$("#" + $(item).attr('id') + "-error").replaceWith($errorMsg);
										} else {
											$(item).after($errorMsg);
										}
									});

									// Disable form submiting
									$form.find("input[type='submit']").attr('disabled', 'disabled');
								});
							});
						});
					} else {
						// Enable form submiting if no other errors found
						if ($form.find(".input-error-message").length == 0) {
							$form.find("input[type='submit']").removeAttr('disabled');
						}
					}
				}, "json");
			});
		}
	},

	initFormsValidation: function() {
		$("form").each(function(idx, form) {
			H2.addFormValidation($(form));
		});
	},

	addFormSteps: function($form) {
		var prevLabel = "&lt; Předchozí";
		var nextLabel = "Další &gt;";
		var stepLabel = "krok";

		var $fieldsets = $form.find("fieldset");
		$fieldsets.each(function(i, f) {
			var $legend = $(f).find('legend').first();
			
			var $div = $('<div class="form-steps" />');
			$div.append($('<div class="steps">' + $legend.text() + ' &mdash; ' + stepLabel + ' <span class="current-step">' + (i + 1) + '</span>/<span class="steps-count">' + $fieldsets.length + '</span></div>'));
			$(f).append($div);
			
			$legend.hide();


			if (i > 0) {
				var $prevButton = $('<input type="button" value="' + prevLabel + '" />');
				$prevButton.click(function() {
					$(this).parent().parent().hide();
					$(this).parent().parent().prev().show();
				});
				$div.append($prevButton);

				// Hide for now
				$(f).hide();
			}

			if (i < $fieldsets.length - 1) {
				var $nextButton = $('<input type="button" value="' + nextLabel + '" />');
				$nextButton.click(function() {
					$(this).parent().parent().hide();
					$(this).parent().parent().next().show();
				});
				$div.append(" ");
				$div.append($nextButton);
			} else if (i == $fieldsets.length - 1) {
				$originalButton = $form.find('input[type="submit"]');
				$div.append(" ");
				$div.append($originalButton);
			}
		});
	},

	openPopupWindow: function(url, resizable, width, height, left, top) {
	  if (typeof resizable == 'undefined') resizable = true;
	  if (typeof width == 'undefined') width = 1024;
	  if (typeof height == 'undefined') height = 600;

	  var _width = screen.availWidth, _height = screen.availHeight;
	  if (typeof left == 'undefined') {
		  if (_width > width)
		  	left = (_width-width)/2;
		  else
		  	left = 0;
	  }
	  if (typeof top == 'undefined') {
		  if (_height > height)
		  	top = (_height-height)/2;
		  else
		  	top = 0;
	  }

	  if (typeof left == 'undefined') left = 0;

	  return !open(url, "", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars="+(resizable?"yes":"no")+",resizable="+(resizable?"yes":"no")+",copyhistory=no,top="+top+",left="+left+",width="+width+",height="+height);
	}
};


$(window).load(function () {
	H2.initLinks();
	H2.initFormsValidation();

	$('.date-time-input').each(function() {
		$(this).after('<input type="button" id="' + $(this).attr('id') + '-calendar-button" value="…" />');
		Calendar.setup({
			inputField	: $(this).attr('id'),
			ifFormat	: "%d. %m. %Y %H:%M:00",
			showOthers	: true,
			showsTime	: true,
			singleClick	: false,
			button		: $(this).attr('id') + '-calendar-button',
			cache		: true
		});
	});

	$('.date-input').each(function() {
		$(this).after('<input type="button" id="' + $(this).attr('id') + '-calendar-button" value="…" />');
		Calendar.setup({
			inputField	: $(this).attr('id'),
			ifFormat	: "%d. %m. %Y",
			showOthers	: true,
			showsTime	: false,
			singleClick	: false,
			button		: $(this).attr('id') + '-calendar-button',
			cache		: true
		});
	});


	if ($('#order-files').length) {
		var div = $('<div />', {
			'class': 'a-right'
		});
		$('#order-files').append(div);

		var button = $('<input />', {
			type: 'button',
			value: 'Přidat soubor',
			style: "margin-right: 5px"
		});
		button.click(function() {
			$(this).parent().before('<div><span class="label">Nahrát soubor:</span> <input type="file" name="file_upload[]"/></div>');
		});
		div.append(button);
	}

	if ($('#order-languages').length) {
		var div = $('<div />', {
			'class': 'a-right'
		});
		$('#order-languages').append(div);

		var button = $('<input />', {
			type: 'button',
			value: 'Přidat cílový jazyk',
			style: "margin-right: 5px"
		});
		button.click(function() {
			$select = $('#order-languages select:last').clone();
			$select.val('0');
			$select.attr('id', '');
			var name = $select.attr('name').match(/(.+)\[(.+)\]/);
			$select.attr('name', name[1] + '[' + (parseInt(name[2]) + 1) + ']');
			$select = jQuery('<div />').append($select);

			$(this).parent().before($select);
		});
		div.append(button);
	}

	// Test tasks with common answer options
	$('.task').each(function(idx, task) {
		$(task).find('select.shared-options').each(function() {
			$(this).data('oldVal', $(this).val());
			$(this).change(function() {
				$(task).find('select.shared-options[name!="' + $(this).attr("name") + '"] option[value="' + $(this).val() + '"]').hide();
				$(task).find('div.shared-options[id$="-answer-' + $(this).val() + '-container"]').hide();

				$(task).find('select.shared-options[name!="' + $(this).attr("name") + '"] option[value="' + $(this).data('oldVal') + '"]').show();
				$(task).find('div.shared-options[id$="-answer-' + $(this).data('oldVal') + '-container"]').show();

				$(this).data('oldVal', $(this).val());
			});
		});

		$(task).find('div.shared-options').each(function(idx, div) {
			$(div).parent().data('oldVal', $(div).find("input").val());
			$(div).find("input").change(function() {
				var el = /question\[([0-9]+)\]/;
				var els = el.exec($(this).attr("name"));
				var questionId = els[1];

				$(task).find('div.shared-options[id$="-answer-' + $(this).val() + '-container"]:not([id^="question-' + questionId + '-answer-"])').hide();
				$(task).find('select.shared-options option[value="' + $(this).val() + '"]').hide();

				$(task).find('div.shared-options[id$="-answer-' + $(div).parent().data('oldVal') + '-container"]:not([id^="question-' + questionId + '-answer-"])').show();
				$(task).find('select.shared-options option[value="' + $(div).parent().data('oldVal') + '"]').show();

				$(div).parent().data('oldVal', $(this).val());
			});
		});
	});

	$(".deadline").each(function() {
		var $deadline = $(this);

		$deadline.find("input[type='radio']").change(function() {
			if ($(this).val() == 'standard') {
				$deadline
					.find("input:not([type='radio'])")
					.attr("disabled", "disabled");
			} else {
				$deadline
					.find("input:not([type='radio'])")
					.removeAttr("disabled");
			}
		});

		if ($deadline.find("input[type='radio']:checked").val() == 'standard') {
			$deadline
				.find("input:not([type='radio'])")
				.attr("disabled", "disabled");
		}
	});

	$(".extended-order a, .extended-order legend").click(function(e) {
		e.preventDefault();
		$('.extended-order').animate({
			height: 'toggle'
		}, 500);
	});
	if ($('.extended-order input:checked').length
		|| $(".extended-order option:selected").val()
		|| $(".extended-order input[type='text']").val()) {
		$('.extended-order').toggle();
	}

	$("a[rel='lightbox-gallery']").lightBox();
	$("a[rel='lightbox']").lightBox();

	if (window.location.hash) {
		$('' + window.location.hash).addClass("selected");
	}
});

