$(document).ready(function() {
	var news_box = $('.toggle-container');
	news_box.hide();
	
	$(".trigger").toggle(function() { $(this).addClass("active"); }, function () { $(this).removeClass("active"); });
	$(".trigger").click(function(){ $(this).next(".toggle-container").slideToggle("slow"); });

	$(".trigger:eq(0)").click().show();
	
	$('.grid').hover(function() { 
		$('.grid-content',this).stop().animate( {top:'97px'}, {queue:false, duration:140}); 
	}, 
	function() { 
		$('.grid-content',this).stop().animate({top:'142px'},{queue:false, duration:140}); 
	});
	
	$.browser.msie6 = $.browser.msie && parseInt(jQuery.browser.version) == 6 && !window["XMLHttpRequest"];
	if (!$.browser.msie6) {
		$.modalWindows.init();
	}
});

$.baseFunctions = {
	basename : function(path, suffix) {
		var b = path.replace(/^.*[\/\\]/g, '');
		if (typeof(suffix) == 'string' && b.substr(b.length-suffix.length) == suffix) {
			b = b.substr(0, b.length-suffix.length);
		}
		return b;
	},
	validate_email: function (email) {
		var at = email.lastIndexOf("@");
		
		if (at < 1 || (at + 1) === email.length)
			return false;
			
		if (/(\.{2,})/.test(email))
			return false;

		var local = email.substring(0, at);
		var domain = email.substring(at + 1);

		if (local.length < 1 || local.length > 64 || domain.length < 4 || domain.length > 255)
			return false;

		if (/(^\.|\.$)/.test(local) || /(^\.|\.$)/.test(domain))
			return false;

		if (!/^"(.+)"$/.test(local)) {
			if (!/^[-a-zA-Z0-9!#$%*\/?|^{}`~&'+=_\.]*$/.test(local))
				return false;
		}

		if (!/^[-a-zA-Z0-9\.]*$/.test(domain) || domain.indexOf(".") === -1)
			return false;	

		return true;
	}
}

$.modalWindows = {
	init : function() {
		var modals = this.find();
		for (var i = 0; i < modals.length; i++) {
			this.modal(modals[i]);
		}
	},
	find : function() {
		var sizeAnchor = $('a').size();
		var link, links = [];
	
		for (var i = 0; i < sizeAnchor; i++) {
			switch ($.baseFunctions.basename($('a').eq(i).attr('href'))) {
				case 'index.php?site=contact':
				case 'index.php?site=records':
					links.push(i);
				break;
			}
		}
		
		return links;
	},
	new_window : function(window,callback) {
		$.modal('<h1 id="modalTitle">Ładowanie formularza</h1><div id="modalContent"><div id="modalInfo"><img src="images/modalWindow/loading.gif" alt="Ładowanie" /><p></p></div><div id="modalForm"></div></div>', {
			closeHTML:"<a href=\"#\" title=\"Zamknij okno\">&nbsp;</a>",
			closeClass: "modalClose",
			position: ["10%",],
			overlayId: "modalOverlay",
			containerId:"modalWindow",
			dataId: "modalWrapper",
			minWidth: window.width,
			opacity: 80,
			onOpen: function(dialog) {
				dialog.overlay.fadeIn(200,function() {
					dialog.data.show();
					dialog.container.fadeIn(200,function() {
						window.open(dialog);
					});
				});
			},
			onShow: function(dialog) {
				window.show(dialog, callback);
			},
			onClose: function(dialog) {
				dialog.container.fadeOut(200,function() {
					dialog.overlay.fadeOut(200,function() {
						$.modal.close();
					});
				});
			}
		});
	},
	resize_window : function(dialog, offset, callback) {
		var resize; 
		setTimeout(function () { 
			var dialog_left = dialog.data.offset().left;
			var dialog_width = dialog.data.width();
			
			if (offset < 0) {
					offset = offset * (-1);
					resize = Math.round(dialog_left+(offset/2));
					
					$(dialog.container).animate( {left: resize+"px" }, 300);
					$(dialog.data).animate( { width: (dialog_width - offset)+"px" }, 300);
					$(".modalClose").animate( {left: (dialog_width - offset - 30)+"px" }, 300);
					
					setTimeout(function () { 
						if ($.isFunction(callback)) {
							callback.apply();
						}
					}, 400);
			}
			else {
					resize = Math.round(dialog_left-(offset/2));	
					$(dialog.container).animate( {left: resize+"px" }, 300);
					$(dialog.data).animate( { width: (dialog_width + offset)+"px" }, 300);
					$(".modalClose").animate( {right: -offset+"px" }, 300);
					
					setTimeout(function () { 
						if ($.isFunction(callback)) {
							callback.apply();
						}
					}, 400);
			}
		}, 500);
	},
	validate : function(form) {
		var elements = $('.duty', form);
		var error = true;
		
		for (var i = 0; i < elements.length; i++) {
			var obj = elements[i];
			
			switch(obj.type) {
				case "select-one":	
					if (obj.selectedIndex == -1 || obj.options[obj.selectedIndex].text == "") {
						error = false;
					}				
				break;
				case "select-multiple":
					if (obj.selectedIndex == -1) {
						error = false;
					}
				break;
				case "text":
					$(obj).keyup(function(e) {
						if ($(this).hasClass('incorrect')) {
							$(this).removeClass('incorrect')
						}
					});
					
					if (!$(obj).val() || $(obj).val().length < 3) {
						$(obj).addClass('incorrect');
						error = false;
					}
					else {
						switch ($(obj).attr('name')) {
							case 'email':
								if ($.baseFunctions.validate_email($(obj).val()) == false) {
									$(obj).addClass('incorrect');
									error = false;
								}
							break;
							case 'pesel':
								if ($(obj).val().length > 11) {
									$(obj).addClass('incorrect');
									error = false;
								}
							break;
							case 'postcode':
								if ($(obj).val().length != 6) {
									$(obj).addClass('incorrect');
									error = false;
								}
							break;
						}
					}
				break;
				case "textarea":
					$(obj).keyup(function(e) {
						if ($(this).hasClass('incorrect')) {
							$(this).removeClass('incorrect')
						}
					});
					
					if (!$(obj).val() || $(obj).val().length > 500) {
						$(obj).addClass('incorrect');
						error = false;
					}
				break;
				case 'checkbox':
					if ($(obj).attr('name') == 'policy' && !$(obj).is(':checked')) {
						var parent = $(obj).parent().parent().get(0);
						$(parent).fadeOut(100);
						$(parent).fadeIn(100);
						error = false;
					}
				break;
			}
		}
		
		return error;
	},
	correction : function(form) {

	},
	modal : function(index) {
		var self = this;
		
		$.mWindow = {};
		$('a').eq(index).click(function(event) {
			event.preventDefault();
			var address = $.baseFunctions.basename($(this).attr('href'));
			
			$.mWindow.width = 260;
			$.mWindow.open = function(dialog) {};
			$.mWindow.show = function(dialog) {
				
				$.mObjects = {
					box 	: $("#modalInfo", dialog.data),
					title 	: $("#modalTitle", dialog.data),
					loader 	: $("#modalInfo img", dialog.data),
					info 	: $("#modalInfo p", dialog.data),
					form 	: $("#modalForm", dialog.data)
				};
			
				$.ajax({
					type: "GET",
					url: address+'&format=json',
					success: function(response, status) {
						if (status = 'success') {
							switch (address) {
								case 'index.php?site=contact':
									$.mWindow.title = "Formularz kontaktowy";
									$.mWindow.offset = 400;
								break;
								case 'index.php?site=records':
									$.mWindow.title = "Formularz zgłoszeniowy";
									$.mWindow.offset = 120;
								break;
							}

							self.resize_window(dialog, $.mWindow.offset, function() {
								$.mObjects.box.hide();
								
								$.mObjects.title.html($.mWindow.title);
								$.mObjects.form.append(response);
								$.mObjects.form.fadeIn(500);
								
								self.correction($("form", $.mObjects.form));
								
								$("form", $.mObjects.form).submit(function() {
									$.mObjects.box.show();
									$.mObjects.info.hide();
									
									if (self.validate(this) == false) {
										$.mObjects.info.text("Popraw zaznaczone pola");
										$.mObjects.info.fadeIn(200);
										$.mObjects.loader.hide(); 
									}
									else {
										$.mObjects.info.text("");	
										$.mObjects.info.hide();
										$.mWindow.offset = $.mWindow.offset - 60;
										
										$.ajax({
											type: "POST",
											url: address+'&format=json',
											data: $("form", $.mObjects.form).serialize(),
											dataType: "json",
											beforeSend: function() {
												$.mObjects.loader.show(); 
											},
											success: function(response, status) {
												if (status == 'success') {
													if (response.error == 0) {
														$.mObjects.form.hide();
														self.resize_window(dialog, -($.mWindow.offset), function() {
															$.mObjects.loader.hide(); 
															$.mObjects.title.html("Formularz został wysłany");
															$.mObjects.info.html(response.msg);				
															$.mObjects.info.fadeIn(200);															
														});
													}
													else {
														$.mObjects.loader.hide(); 
														$.mObjects.info.html(response.msg);
														$.mObjects.info.fadeIn(200);
													}
												}
											},
											error: function(response, status, e) {
												$.mObjects.form.hide();
												self.resize_window(dialog, -($.mWindow.offset), function() {
													$.mObjects.loader.hide();
													$.mObjects.title.html("Wystąpił błąd");	
													$.mObjects.info.text("Wystąpił błąd podczas wysyłania danych");
												});
											}
										});
									}
									
									return false;
								});

								$(":button[name=cancel]", dialog.data).click(function(e) {
									$.modal.close();
								});
							});
						}
					},
					error: function(response, status, e) {
						
					}
				});
			};
			
			self.new_window($.mWindow);
		});
	}
};