$('html').addClass('js');

var RecaptchaOptions = {
   theme: 'white'
};

$(function(){
	DM.init();
});

/*
 * Domain Master namespace
 *
 */
var DM = {};

/*
 * First things first
 *
 */
DM.init = function() {
	DM.Forms.init();
	DM.handle_whois_field();
	DM.PopupMenu.init();
}

/*
 * Popup Menu module
 *
 */
DM.PopupMenu = {

	init: function() {
		this.$links = $('#user_controls').find('a.popup_menu');
		this.path = this.$links[0].href.split('#')[0];
		this.attachEvents();
	},

	attachEvents: function() {
		this.$links.click(function() {
			if (DM.PopupMenu.rendered) {
				DM.PopupMenu.handleBehavior(this);
			}
			else {
				DM.PopupMenu.clicked = this;
				DM.PopupMenu.getMenus(DM.PopupMenu.path);
			}
			return false;
		});
	},

	getMenus: function(path) {
		$.getJSON(path + '?format=json', function(data) {
			DM.PopupMenu.insertToDom(data);
		});
	},

	insertToDom: function(data) {
		this.$links.each(function() {
			$(this).after(data[this.id]); /* TODO: po prechodu na 1.4.x pouzit kratsi zapis .after() */
		});
		this.rendered = true;
		this.handleBehavior(this.clicked);
	},

	handleBehavior: function(link) {
		var $link = $(link);
		var $map = $link.next();

		if ($map.is(':visible')) {
			$link.removeClass('active');
			$map.fadeOut();
			$.mask.close();
		}
		else {
			$link.addClass('active');
			DM.PopupMenu.$links.not(link).removeClass('active').next().fadeOut(function() {
				$map.fadeIn().add(DM.PopupMenu.$links).expose({
					opacity: 0,
					onBeforeClose: function() {
						DM.PopupMenu.$links.removeClass('active').next(':visible').fadeOut();
					}
				});
			});
		}
	}
}

/*
 * Dashboard module.
 *
 */
DM.Dashboard = (function() {

	function equal_heights() {
		$('#dashboard > li').each(function(i) {
			i++;
			if (i % 2 == 0) {
				var $box = $(this);
				var $box_prev = $box.prev();
				var box_height = $box.height();
				var box_prev_height = $box_prev.height();

				if (box_height > box_prev_height) {
					$box_prev.height(box_height);
				}
				else {
					$box.height(box_prev_height);
				}
			}
		});
	}

	return {
		init: function() {
			equal_heights();
		}
	};
})();

/*
 * Module for handling keyset registration form
 *
 */
DM.Keyset = (function() {

	return {
		init: function() {
		}
	};
})();

/*
 * Module for handling domains data table.
 *
 */
DM.DomainList = (function() {

	function attach_live_events() {
		var $table = $('#domain_list');
		/*
		$table.find('td.expiration').live('click', function() {
			$(this).ttSwitch();
		});
		*/
		$table.find('a.info').live('click', DM.DomainList.handle_link);
	}

	return {
		init: function() {
			attach_live_events();
		},

		handle_link: function() {
			var $link = $(this);
			var $info = $link.parents('tr').next('.domain_info');

			if ($info.length) {
				if($info.css('display') == 'none'){
					$info.show();
					$link.html("info[-]");
				}else{
					$info.hide();
					$link.html("info[+]");
				}
			} else {
				if (!$link.data('loading')) {
					$link.data('loading', true);
					$.ajax({
						url: $link.attr('href'),
						success: function(source) {
							DM.DomainList.add_domain_info($link, source);
							$link.data('loading', false);
							$link.html("info[-]");
						}
					});
				}
			}
			return false;
		},

		add_domain_info: function($link, row_data) {
			var $row = $('<tr class="domain_info"><td>&nbsp;</td>' + row_data + '</tr>').insertAfter($link.parents('tr'));
		}
	};
})();

DM.confirmChange = function() {
	var tpl_trigger = '&nbsp;&nbsp;&nbsp;&nbsp;<a href="#" title="Zobrazit detaily">[Zobrazit možnosti...]</a>';
	var $wrapper = $('#confirmation_possibilities');
	var $headings = $wrapper.find('h3').append(tpl_trigger);

	$wrapper.accordion({
		active: false
	});

}

DM.Forms = (function() {

	var tpl_icon_help = '<span class="icon_help">?</span>';

	function handle_required() {
		DM.Forms.$forms.find('.required label span').each(function() {
			$(this).attr('title', $(this).text()).text(' *').show();
		});
	}

	function handle_nameservers_expanding() {
		var $fieldset_ns = $('#nameservers');

		if ($fieldset_ns.length) {
			var $wrappers = $fieldset_ns.children('div');
			var i = 0;

			$wrappers.each(function(j) {
				var $wrapper = $(this);
				var $field = $wrapper.find(':input');
				if ($wrapper.is('.error') || $field.val()) {
					i = j;
				}
			});

			i = i<4 ? 4 : (i%2 ? i+1 : i+2);

			var $wrappers_rest = $wrappers.slice(i).hide();

			var $field_adder = $('<a href="#">Zobrazit další NS</a>').appendTo($fieldset_ns).click(function() {
				$wrappers_rest.not(':visible').slice(0, 2).slideDown();
				if (!$wrappers_rest.not(':visible').length) {
					$(this).hide().remove();
				}
				return false;
			});
		}
	}

	function handle_autofocus() {
		DM.Forms.$forms.filter('.focus').each(function() {
			$(this).find('input[type="text"]:first').focus().select();
		});
	}

	function handle_help() {
		DM.Forms.$forms.find('.help').each(function() {
			var $help = $(this);
			var $field = $help.prev();
			var field_pos_left = $field.position().left;
			var icon_help_pos_left = field_pos_left + $field.outerWidth() + 4;
			var $icon_help = $(tpl_icon_help).insertAfter($field).css('left', icon_help_pos_left);

			$help.css('left', icon_help_pos_left + $icon_help.outerWidth() + 12).append('<div class="tooltip-pointer-left"></div>');

			$icon_help.hoverIntent({
				over: function() {
					if ($field.is('.focused')) {
						$help.fadeTo('fast',0.5).fadeTo('fast',1);
					} else {
						$help.fadeIn();
					}
				},
				out: function() {
					if (!$field.is('.focused')) {
						$help.fadeOut();
					}
				},
				timeout: 1000
			});

			$field.focus(function() {
				$help.fadeIn();
				$field.addClass('focused');
				$icon_help.addClass('hover');
			}).blur(function() {
				$help.fadeOut();
				$field.removeClass('focused');
				$icon_help.removeClass('hover');
			});
		}).addClass('processed');
	}

	function handle_homepage_forms() {
		var $form;
		$('#homepage_forms').tabs({
			select: function(ev, ui) {
				$(ui.panel).find(':text').val($form.find(':text').val());
			},
			show: function(ev, ui) {
				$form = $(ui.panel);
				$form.find(':text').focus();
			}
		});
	}

	return {
		init: function() {
			DM.Forms.$forms = $('form');
			handle_help();
			handle_required();
			handle_nameservers_expanding();
			handle_autofocus();
			handle_homepage_forms();
		},
		after_ajax: function() {
			DM.Forms.$forms = $('form').not('.processed');
			handle_help();
			handle_required();
		}
	};
})();

DM.handle_whois_field = function(){
	var field = $("#id_whois_field");
	var value = field.attr("value") || "";
	if(value.length>0){
		field.focus().select();
	}
	field.click(function(){
		$("#form_search .tooltip").show();
	});
	field.blur(function(){
		$("#form_search .tooltip").hide();
	});
}

DM.domainDetail = (function() {

	function handle_progress() {
		var $teplomer = $('#domain_progress');
		if (!$teplomer.is('.active')) {
			$teplomer.hide();
			$('<p><a href="#">Zobrazit podrobný graf stavů</a></p>').insertBefore($teplomer).one('click', function() {
				$teplomer.slideToggle('fast');
				return false;
			});
		}
	}

	return {
		init: function() {
			$('#domain_params').further_details();
			handle_progress();
		}
	};
})();

/*
 * Ultratiny plugin for switching between element's title and text
 *
 */
$.fn.ttSwitch = function() {
	return this.each(function() {
		var $this = $(this).find('span'); // TBD
		var text = $this.text(), title = $this.attr('title');
		$this.text(title).attr('title', text);
	});
}

/*
 * Basic dynamic FAQ plugin
 *
 */
$.fn.faqIt = function() {
	return this.each(function() {
		var $this = $(this);

		var $definitions = $this.find('dd').hide();
		var $terms = $this.find('dt').wrapInner('<a href="#"></a>').click(function(ev) {
			if ($(ev.target).is('a')) {
				$(this).next('dd').slideToggle('fast');
				return false;
			}
		});
	});
}

$.fn.further_details = function(text) {
	var msg = text || 'Zobrazit všechny parametry.';

	return this.each(function() {
		var $wrapper = $(this).addClass('fd_processed');
		var $table = $wrapper.children('table');
		var $further_details = $table.find('.further_details');
		if (!$further_details.length) {
			return;
		}
		var $ref_th = $wrapper.find('th:first');
		$ref_th.css('width', $ref_th.css('width'));

		var orig_display = $further_details.css('display');
		$further_details.hide();

		$('<div style="text-align: right; margin-bottom: 1.5em;"><button class="ui-corner-bl ui-corner-br">' + msg + ' ↓</button></div>').insertAfter($table).one('click', function() {
			$further_details.css('display', orig_display).find('th, td').effect('highlight', {}, 2000);;
			$wrapper.addClass('fd_clicked');
			$(this).hide();
		});
	});
}

jQuery.fn.fadeToggle = function(speed, easing, callback) {
	return this.animate({opacity: 'toggle'}, speed, easing, callback);
};
