
/**
 * Formeterar ett sökresultat
 */
var prevData = "";

function formatSearchResult(value, data, currentValue) {
	var reEscape = new RegExp("(\\" + ["/", ".", "*", "+", "?", "|", "(", ")", "[", "]", "{", "}", "\\"].join("|\\") + ")", "g");
	var pattern  = "(" + currentValue.replace(reEscape, "\\$1") + ")";
	var text     = value.replace(new RegExp(pattern, "i"), "<span class=\"match\">$1<\/span>")
	var row      = text + "<span class=\"clear\"></span>";

	if (data != prevData) {
		row = "<span style=\"color: #aaaaaa;float: right;font-size: 11px;font-weight: normal;\">" + data + "</span>" + row;
	}

	prevData = data;

	return row;
}

/** 
 * Visar loginrutan och hanterar inloggningsförsök
 */
function showLoginForm() {
	$.popbox(
		$("#login"),
		{
			"descShow"         : false,
			"titlebarText"     : "Ange inloggningsuppgifter",
			"titlebarIcon"     : "/images/icons/key.png",
			"submitButtonShow" : true,
			"submitButtonText" : "Logga in",
			"cancelButtonShow" : true,
			"cancelButtonText" : "Avbryt",
			"closeButtonShow"  : false,
			"onStart"          : function() {
				$("#login_error span").text("").css("display", "none");
				$("#login").show();
			},
			"onSubmit"         : function(currentArray, currentIndex, currentOpts) {
			    var username = $("#inp_usr").val();
			    var password = $("#inp_pwd").val();

				$("#login_error span").fadeOut();

				$.popbox.showActivity();

				/** Låt Page_Ajax validera och ge ev. felmeddelande på rätt språk */
				$.ajax({
					type     : "POST",
					cache    : false,
					url      : "/ajax/login",
					data     : $("#login form").serializeArray(),
					dataType : "json",
					success  : function(response) {
			    		if (response.success === true) {

			    			/** Ladda om sidan */
			    			document.location.reload(true);
			    		} else {
							$("#login_error span").text("" + response.message + "").fadeIn();
							$.popbox.resize();
			    		}

			    		$.popbox.hideActivity();
			    	}
			    });	    
			},
			"onClosed"         : function() {
				$("#login").hide();
			}
		}
	);
}

/** 
 * Visar kundens bokning och låter kund avboka.
 */
function showCancelForm() {
	$("#cancel_form")
		.children().hide()
		.filter("#cancel_form_find").show();
	
	$.popbox(
		$("#cancel_form"),
		{
			"descShow"         : false,
			"titlebarText"     : "Ange bokningsuppgifter",
			"titlebarIcon"     : "/images/icons/key.png",
			"submitButtonShow" : true,
			"submitButtonText" : "Visa bokning",
			"cancelButtonShow" : true,
			"cancelButtonText" : "Avbryt",
			"closeButtonShow"  : false,
			"onStart"          : function() {
				$("#cancel_error span").text("").parent().hide();
				$("#cancel_form").show();
			},
			"onSubmit"         : function(currentArray, currentIndex, currentOpts) {
				$("#cancel_error").fadeTo(400, 0);

				$.popbox.showActivity();

				/** Låt Page_Ajax validera och ge ev. felmeddelande på rätt språk */
				$.ajax({
					type     : "POST",
					cache    : false,
					url      : "/ajax/cancel_booking",
					data     : $("#cancel_form_find").serializeArray(),
					dataType : "json",
					success  : function(response) {
			    		if (response.success === true) {

		    				/** Visa bokning */
							$("#popbox-titlebar-text").text("Bekräfta avbokning");
		    			
			    			$("#inp_bno2").val($("#inp_bno").val());
		    				$("#inp_eml2").val($("#inp_eml").val());
		    				$("#cancel_form_cancel .date_activated .value").text(response.data.date_activated);
		    				$("#cancel_form_cancel .payment_method .value").text(response.data.method_of_payment_translated);

		    				$("#cancel_form_cancel .your_reservation .public_id .value").text(response.data.public_id);

							var i, j, k, l, plan, plan_outline, route, last_time, entry_time, exit_time, entry_display, exit_display, traveller, item_name, checkbox, addons, addon;
							var plans_tbody = $("#cancel_form_cancel .route > tbody");

							var getWeekDay = function(date) {
								var days = ["sön", "mån", "tis", "ons", "tors", "fre", "lör"];
								return days[date.getDay()];
							};
							var getTime = function(date) {
								var hours   = (date.getHours()   < 10 ? "0" : "") + date.getHours();
								var minutes = (date.getMinutes() < 10 ? "0" : "") + date.getMinutes();
								return "kl. " + hours + ":" + minutes;
							};

			    			for (i in response.plans) {
			    				plan = response.plans[i];
			    				plans_tbody.append(
				    				$("<tr></tr>").addClass("plan_outline").append(
				    					$("<td></td>").attr("colspan", 4).append( plan_outline = $("<span></span>"))
				    				)
				    			);

				    			for (j=0; j<plan.routes.length; j++) {
				    				route = plan.routes[j];

				    				if (!last_time) {
				    					$("#cancel_form_cancel .date_departure").text(route.formatted_date_departure);
				    					last_time = new Date(parseInt(route.date_departure)*1000);
				    				}

				    				entry_time = new Date((parseInt(route.date_departure) + route.entry_time * 60) * 1000);
				    				entry_display = ((last_time.getDate() < entry_time.getDate()) ? getWeekDay(entry_time) + " " : "") + getTime(entry_time);
				    				last_time = entry_time;

				    				exit_time = new Date((parseInt(route.date_departure) + route.exit_time * 60) * 1000);
				    				exit_display = ((last_time.getDate() < exit_time.getDate()) ? getWeekDay(exit_time) + " " : "") + getTime(exit_time);
				    				last_time = exit_time;

				    				if (j > 0) {
				    					plan_outline.append("<br />");
				    				}
				    				plan_outline.append(
				    					$('<span></span>').addClass('entry_stop').text(route.entry_stop_name+' ').append(
					    					$('<span></span>').addClass('time').text('('+entry_display+')')
					    				),
					    				' &rarr; ',
				    					$('<span></span>').addClass('exit_stop').text(route.exit_stop_name+' ').append(
					    					$('<span></span>').addClass('time').text('('+exit_display+')')
					    				),
					    				' via ',
				    					$('<span></span>').addClass('route_name').text(route.public_id)
				    				);
				    			}

				    			for (j in plan.travellers) {
				    				traveller = plan.travellers[j];

				    				traveller.name = traveller.fname + " " + traveller.sname;
				    				item_name = traveller.type_name + ((traveller.name == " ") ? "" : " (" + traveller.name + ")");
				    				checkbox = $("<span></span>")
				    					.append(
					    					$('<input type="checkbox" name="travellers_to_cancel[]" />').attr("id", "ttc" + j).val(j).css("width", "auto")
				    					);
				    				if (traveller.status.substr(0, 9) == "cancelled") {
				    					item_name = $("<del></del>").text(item_name);
				    					checkbox.html("&nbsp;");
				    				} else {
				    					item_name = $("<label></label>").attr("for", "ttc" + j).css({"display":"block", "width":"100%"}).text(item_name);
				    				}

				    				plans_tbody.append(
					    				$('<tr></tr>').addClass('traveller').append(
					    					$('<td></td>').append( checkbox ),
					    					$('<td></td>').append( $('<span></span>').append(item_name) ).attr('colspan', 2),
					    					$('<td></td>').append( $('<span></span>').text(traveller.price.toFixed(2)) ) /* @todo formatera priser efter locale */
					    				)
					    			);

					    			for (k in traveller.addons) {
					    				for (l in traveller.addons[k]) {
					    					addon = traveller.addons[k][l];
						    				plans_tbody.append(
							    				$("<tr></tr>").addClass("addon").append(
							    					$("<td></td>"),
							    					$("<td></td>").append( $("<span></span>").text("1") ),
							    					$("<td></td>").append( $("<span></span>").text(addon.name) ),
							    					$("<td></td>").append( $("<span></span>").text(addon.price.toFixed(2)) )
							    				)
							    			);
					    				}
					    			}
				    			}

				    			last_time = false;
			    			}

		    				$("tr.traveller", plans_tbody).filter(":odd").addClass("odd");

		    				plans_tbody.append(
			    				$("tr.sum", plans_tbody).each(function(){
			    					$(this).children().last().append($("<span></span>").text(response.data.price.toFixed(2)));
			    				})
			    			);

			    			$("#cancel_form_find").fadeOut(400, function() {
								$("#cancel_form_cancel").fadeIn(200, function(){
									$.popbox.resize();
								});
							});

							currentOpts.onSubmit = function(currentArray, currentIndex, currentOpts) {
								$("#cancel_error").fadeTo(400, 0);

								$.popbox.showActivity();

								/** Låt Page_Ajax validera och ge ev. felmeddelande på rätt språk */
								$.ajax({
									type     : "POST",
									cache    : false,
									url      : "/ajax/do_cancel_booking",
									data     : $("#cancel_form_cancel").serializeArray(),
									dataType : "json",
									success  : function(response) {
						    		if (response.success === true) {
						    			$("#cancel_form_cancel").fadeOut(400, function(){
												$("#cancel_success").text("" + response.message + "").fadeIn(200, function(){
													$.popbox.resize();
													setTimeout(function(){ $.popbox.close(); }, 2500);
												});
											});
										} else {
											$("#cancel_error span").text("" + response.message + "").parent().stop().show().fadeTo(400, 1, function(){ $.popbox.resize(); });
						    			if (response.show_address_fields) {
						    				$('#cancel_form .address_fields').fadeIn(200, function(){ $.popbox.resize(); });
						    			}
						    		}

		    						$.popbox.hideActivity();
									}
								});
							};

							if ($("#cancel_form table.route input:checkbox").length) {
								$("#popbox-button-submit span span").text("Avboka valda resenärer");
							} else {
								$("#popbox-button-submit").fadeOut(200);
							}
		    		} else {
						$("#find_error span").text("" + response.message + "").fadeIn();
						$.popbox.resize();
		    		}

		    		$.popbox.hideActivity();
		    	}
		    });	    
			},
			"onClosed" : function() {
				$("#cancel_form").hide();
			}
		}
	);
}

/** 
 * Visar kontaktrutan och hanterar formuläret
 */
function showContactForm() {
	$.popbox(
		$("#contact"),
		{
			"titlebarText"     : "Kontakta oss",
			"submitButtonShow" : true,
			"submitButtonText" : "Skicka",
			"cancelButtonShow" : true,
			"cancelButtonText" : "Avbryt",
			"closeButtonShow"  : false,
			"scrolling"        : "no",
			"onStart"          : function() {
				$("#contact_error span").text("").css("display", "none");
				$("#contact").show();
			},
			"onSubmit"         : function(currentArray, currentIndex, currentOpts) {
			    var name    = $("#inp_name").val();
			    var email   = $("#inp_email").val();
				var message = $("#inp_message").val();

				$("#contact_error span").fadeOut();

				$.popbox.showActivity();

				/** Låt Page_Ajax validera och ge ev. felmeddelande på rätt språk */
				$.ajax({
					type     : "POST",
					cache    : false,
					url      : "/ajax/contact",
					data     : $("#contact form").serializeArray(),
					dataType : "json",
					success  : function(response) {
			    		if (response.success === true) {
							$.popbox(
								response.message,
								{
									"titlebarText" : "Kontakta oss"
								}
							);

							/** Töm formuläret */
							$("#contact input, #contact textarea").val("");
			    		} else {
							$("#contact_error span").text("" + response.message + "").fadeIn();
							$.popbox.resize();
			    		}

			    		$.popbox.hideActivity();
			    	}
			    });
			},
			"onClosed"         : function() {
				$("#contact").hide();
			}
		}
	);
}

/** 
 * Visar kontaktrutan och hanterar formuläret
 */
function showRestockMailForm() {
	$.popbox(
		$("#restock_mail"),
		{
			"titlebarText"     : "Bevaka produkt",
			"submitButtonShow" : true,
			"submitButtonText" : "Skicka",
			"cancelButtonShow" : true,
			"cancelButtonText" : "Avbryt",
			"closeButtonShow"  : false,
			"scrolling"        : "no",
			"onStart"          : function() {
				$("#restock_mail_error span").text("").css("display", "none");
				$("#restock_mail").show();
			},
			"onSubmit"         : function(currentArray, currentIndex, currentOpts) {
				$("#restock_mail_error span").fadeOut();

				$.popbox.showActivity();

				var data = {
					product_id     : $("input[name='product_id']").val(),
					email          : $("#inp_email").val(),
					variation_data : $(".product_image_and_abstract select").serializeArray()
				};

				/** Låt Page_Ajax validera och ge ev. felmeddelande på rätt språk */
				$.ajax({
					type     : "GET",
					cache    : false,
					url      : "/ajax/restock_mail",
					data     : data,
					dataType : "json",
					success  : function(response) {
			    		if (response.success === true) {
							$.popbox(
								response.message,
								{
									"titlebarText" : "Bevaka produkt"
								}
							);

							/** Töm formuläret */
							$("#restock_mail input").val("");
			    		} else {
							$("#restock_mail_error span").text("" + response.message + "").fadeIn();
							$.popbox.resize();
			    		}
			    	}
				});

				$.popbox.hideActivity();
			},
			"onClosed"         : function() {
				$("#restock_mail").hide();
			}
		}
	);
}

/**
 * Skickar inskrivet person-/organisationsnummer för en adressuppslagning hos Svea via ett AJAX-anrop
 */
function getAddressesOnSubmit(currentArray, currentIndex, currentOpts) {

	/** Visar en laddningsikon */
	$.fancybox.showActivity();

	ajaxLoader = $.ajax({
		url		 : "/ajax/get_addresses/",
		data	 : { "pno" : $("input[name='pno']").val() },
		dataType : "json",
		type     : "POST",
		error	 : getAddressesError,
		success  : getAddressesSuccess
	});
}

/**
 * Adressuppslagningen gick fel. Tala om felet för kunden.
 */
function getAddressesError(XMLHttpRequest, textStatus, errorThrown) {
	//alert("Fel fel fel...");

	/** Tar bort laddningsikon */
	$.fancybox.hideActivity();
}

/**
 * Adressuppslagningen lyckades. Parsa adressdatan och fyll i formuläret.
 */
function getAddressesSuccess(data, textStatus, XMLHttpRequest) {

	/** Tar bort laddningsikon */
	$.fancybox.hideActivity();

	if (ajaxLoader.status == 200) {
		//$("#response").html(JSON.stringify(data));

		if (data.length == 0) {
			//$.fancybox("Kunde inte hitta adress...");
			$("#test").html("Kunde inte hitta adress...");
			$.fancybox.resize();
		} else if (data.length == 1) {
			$("#inp_first_name").val(data[0].FirstName);
			$("#inp_last_name").val(data[0].LastName);
			$("#inp_street_address_1").val(data[0].AddressLine1);
			$("#inp_street_address_2").val(data[0].AddressLine2);
			$("#inp_post_code").val(data[0].Postcode);
			$("#inp_city").val(data[0].Postarea);

			$.fancybox.close();
		}
	}
}

