﻿var pointer;

$(document).ready(function() {
	enableSelectables();
	enableDatePickers();
	setCorners();
	enableMenuPointer();
	enableUploadAction();
	enableOccupationFilter();
	enableAvatarUpload();
	enableErrorViews();
	enableExtendedInfo();
	enableReportUserForm();
	enableTestInvite();
	enableHelpDialogues();
	enableShowHideOpenTest();
	enableAddTestToSiteInfo();
	enableVideoHomepage();
	enableDeleteNote();
	enableAddNoteComment();
	loadTextResults();
});

/*
Enable selectables
******************/
function enableSelectables() {
	$(".selectable li").selectable({ activeClass: "selected", hoverClass: "hover" }, $("#fieldCounts #countTracker").val());

	if ($("#fieldCounts").length > 0) {
		$("#fieldCounts #count span").show().text($("#fieldCounts #countTracker").val());
		countRemainingQuestions();
	}

	$(".selectable li").mouseenter(function() {
		$(this).find("a").fadeIn(200);
	});

	$(".selectable li").mouseleave(function() {
		$(this).find("a").fadeOut(200);
	});

	$(".selectable li").mousedown(function(e) {
		var $clicked = $(e.target);
		if (($clicked.is("a"))) {
			return false;
		}
		var remain = countRemainingQuestions();
	});

	$(".selectable li .deleteQuestionAction").click(function() {
		var isConfirmed = confirm("Are you sure you want to delete this question? All report data for this question will be deleted");
		if (!isConfirmed)
			return false;
		var target = $(this);
		$.getJSON($(this).attr("href"), function(data) {
			if (data.Success) {
				target.parent().fadeOut(250, function() { target.parent().remove() });
			}
		});

		return false;
	});
}

function countRemainingQuestions() {
	var total = $(".selectable input:checked").length;
	var remain = $("#fieldCounts #countTracker").val() - total;
	$("#fieldCounts #count span").text(remain);
	return remain;
}

function enableDatePickers() {
	$(".datePicker").datepicker({showAnim: 'fadeIn'});
}

function setCorners() {
	$(".corners").cornerz({ borderWidth: 1, borderColor: "#ccc" });
	//	$(".cornersThick").cornerz({ borderWidth: 2, borderColor: "#ccc" });
//	$(".cornersSmall").cornerz({ borderWidth: 1, radius: 4, borderColor: "#ccc" });
//	$("#testNavigation ul li h3").cornerz({ borderWidth: 1, radius: 8, borderColor: "#ccc", corners: "tl tr" });
//	$("#nav li").cornerz({ borderWidth: 1, radius: 5, borderColor: "#ccc", corners: "tl tr" });
//	$(".redCorners").cornerz({ borderWidth: 1, borderColor: "#f00" });
//	$(".noteCorners").cornerz({ borderWidth: 1, radius: 5, borderColor: "#e7e7e7", corners: "bl br" });
}

function enableMenuPointer() {
	pointer = $("<div></div>").addClass("menuPointer").hide().html($("<div></div>").css("margin", "7px 0 0 24px").css("background-position", "0px 48px"));
	pointer.appendTo("#leftMenu");
	pointer.css("left", 17 + "px");
	$("#leftMenu ul li a").each(function() {
		$(this).click(function(e) {
			$("#leftMenu ul li a").not(this).css("background-position", "0px 0");
			pointer.show();
			pointer.find("div").fadeOut(100);
			var sender = $(this);
			var offy = $(this).offset();
			pointer.animate({
				top: (offy.top - 7) + "px"
			}, 200, null, function() {
				pointer.find("div").attr("class", sender.attr("class")).fadeIn(100, function() {
					$("#leftMenu ul li a").not(sender).css("background-position", "0px 0");
					sender.css("background-position", "0px 48px")
					location.href = sender.attr("href");
				});
			});
			return false;
		});
	});
}

/*
Fix for opera being bloody difficult with document.ready
********************************************************/
$(window).load(function() {
	$("#leftMenu ul li .selected:first").each(function() {
		var offy = $(this).offset();
		pointer.find("div").attr("class", $(this).attr("class"));
		pointer.show();
		pointer.css({ top: (offy.top - 7) + "px" });
		$(this).css("background-position", "0px 48px");
	});
});

/*
Enable upload
*************/
function enableUploadAction() {
	$("#uploadAction").click(function() {
		var uploader = $("#createTestPanel").find("input:file");
		if (uploader.is(":visible")) {
			uploader.hide();
		} else {
			uploader.show();
		}
		return false;
	});
}

/*
Enable json occupation filter
*****************************/
function enableOccupationFilter() {
	if ($("#occupationFilter").length > 0) {
		loadOccupations();
	}

	$("#occupationFilter").keyup(function() {
		loadOccupations();
	});
}

function loadOccupations() {
	if ($("#occupationFilter").val().length < 2) {
		$("#occupations ul").html("");
		return;
	}

	$.getJSON("/Account.aspx/GetOccupations/" + $("#occupationFilter").val(), function(data) {
		if (data.lengt == 0)
			return;

		if ($("#occupations ul").length == 0) {
			$("#occupations").append($("<ul></ul>"));
		}

		// Remove all items that are no longer a match
		$("#occupations ul li").each(function() {
			if (containsOccupationId(data, $(this).find("input").val()) == false) {
				$(this).remove();
			}
		});

		// Append all new items
		for (var i = 0; i < data.length; i++) {
			if ($("#occupations ul li input[value='" + data[i].OccupationId + "']").length == 0) {
				var item = $("<li></li>").append($("<input />").change(function() {
					$("#occupationId").html($(this).val());
				}).attr({ type: "radio", id: "occ_" + data[i].OccupationId, name: "user.Occupation.OccupationId" }).val(data[i].OccupationId)).append(data[i].Description);
				$("#occupations ul").append(item);
			}
		}

		if ($("#occupationId").html() != "") {
			$("#occupations ul li input[value='" + $("#occupationId").html() + "']").attr("checked", true);
		}
	});
}

function containsOccupationId(data, id) {
	for (var i = 0; i < data.length; i++) {
		if (data[i].OccupationId == id)
			return true;
	}
	return false;
}

function enableAvatarUpload() {
	if ($("#userAvatar").length == 0)
		return;

	$("#uploadAvatarAction").click(function() {
		if ($("#userAvatar").is(":visible")) {
			$("#userAvatar").fadeOut();
		} else {
			$("#userAvatar").fadeIn();
		}
		return false;
	});
}

function enableErrorViews() {
	if ($(".field-validation-error").length == 0)
		return;

	$(".field-validation-error").parent().show();

	$(".input-validation-error").keydown(function() {
		$(this).removeClass("input-validation-error");
	});
}

function enableExtendedInfo() {
	if ($("#showExtendedInfoAction").length == 0)
		return;

	$("#showExtendedInfoAction").click(function() {
		if ($(".system").is(":visible")) {
			$(this).text("+ Show extended data");
			$(".system").fadeOut();
		} else {
		$(this).text("- Hide extended data");
		$(".system").fadeIn();
		}
		return false;
	});
}

function enableReportUserForm() {
	if ($("#reportUserForm .field-validation-error").length > 0) {
		$("#reportUserForm").show();
	}

	$("#reportUserAction").click(function() {
		if ($("#reportUserForm").is(":hidden")) {
			$("#reportUserForm").show();
		} else {
			$("#reportUserForm").hide();
		}
		return false;
	});
	//$("#reportUserForm").
}

function enableTestInvite() {
	if ($(".testInviteForm").length == 0)
		return;
	$(".inviteToTestAction").click(function() {
		$(".testInviteForm").show();
		$(".testInviteForm #sitename").val($(this).attr("title"));
	});

	$(".cancelInviteToTestAction").click(function() {
		$(".testInviteForm").hide();
		$(".testInviteForm #sitename").val($(this).attr("title"));
		return false;
	});	
	
	$(".testInviteForm").each(function() {
		var form = $(this);
		$(this).find(".greyButton").click(function() {
			form.ajaxSubmit({ dataType: 'json',
				success: function(data) {
					if (data.Success) {
						form.fadeOut();
						form.find(".text").val("");
						$.dialogue("Invite sent", "Your invite has been sent.");
					} else {
						for (var i = 0; i < data.length; i++) {
							$(form).append($("<div></div>").attr("class", "field-validation-error").html(data[i]));
						}
					}
				}
			});
			return false;
		});
	});
}

function enableHelpDialogues() {
	$(".lt-dialogue-container").click(function() {
		$(this).fadeOut();
	});
	$("#framesetHelp").click(function() {
		if ($("#framesafe").is(":visible")) {
			$("#framesafe").fadeOut();
		} else {
			$("#framesafe").fadeIn();
		}
		return false;
	});

	$("#openTestHelp").click(function() {
		$.dialogue("Open tests", "If you want to give feedback on someones website, but they don't have a LiteTest account, this will help. The test will not appear in the test list, and the reports can not be private.");
		return false;
	});
}

function enableShowHideOpenTest() {
	if ($("#openTestPanel").length == 0)
		return;

	$("#showOpenTestAction").click(function() {
		if ($("#openTestPanel").is(":visible")) {
			$("#openTestPanel").hide();
			$(this).text("Show open tests");
		} else {
			$("#openTestPanel").show();
			$(this).text("Hide open tests");
		}
		return false;
	});
}

function enableAddTestToSiteInfo() {
	if ($(".linkToTest").length == 0)
		return;

	$(".linkToTest").click(function() {
		$("#addTestToSiteInfo input").val($(this).attr("title"));
		if ($("#addTestToSiteInfo").is(":hidden")) {
			$("#addTestToSiteInfo").show();
		}
	});

	$("#addTestToSiteInfo .greyButtonLinkRight").click(function() {
		$("#addTestToSiteInfo").slideUp();
		return false;
	});
}

function enableVideoHomepage() {
	if ($("#viewVideo1").length == 0)
		return;

	$("#viewVideo1").click(function() {
		$("#videoContainer > div").hide();
		$("#video1").show();
		return false;
	});

	$("#viewVideo2").click(function() {
		$("#videoContainer > div").hide();
		$("#video2").show();
		return false;
	});

	$("#viewVideo3").click(function() {
		$("#videoContainer > div").hide();
		$("#video3").show();
		return false;
	});
	
}

function enableDeleteNote() {
	if ($("#viewNotesHome").length == 0)
		return;

	$(".deleteNoteAction").click(function() {
		var isConfirmed = confirm("Are you sure you want to delete this note?");
		if (!isConfirmed)
			return false;
			
		$.getJSON($(this).attr("href"), function(data) {
			if (data.Success) {
				var noteToRemove = $(".note" + data.NoteId);
				noteToRemove.fadeOut(200, function() { noteToRemove.remove(); });
			}
		});
		return false;
	});
}

function enableAddNoteComment() {
	// Show / hide comment form
	$(".addNoteCommentAction").click(function() {
		var noteId = $(this).attr("NoteId");
		var note = $(".note" + noteId + " .noteCommentForm");
		if (note.is(":visible")) {
			note.hide();
		} else {
			note.show();
		}
		return false;
	});

	// Save comment
	$(".noteCommentForm").each(function() {
		var form = $(this);
		form.find(".greyButton").click(function() {
			form.ajaxSubmit({ dataType: 'json',
				success: function(data) {
					if (data.Success) {
						form.fadeOut();
						form.find(".noteCommentText").val("");
						var note = $(".note" + data.Comment.NoteId + " .comments");
						if (note.is(":hidden"))
							note.show();

						var newComment = $("<dl></dl>").addClass("comment" + data.Comment.CommentId).append($("<dt></dt>").addClass("comment").text(data.Comment.Comment));
						note.append(newComment);
						var delCommentLink = $("<dd></dd>").addClass("comment" + data.Comment.CommentId).append($("<a> </a>").addClass("deleteCommentAction").attr("href", "/ReportNote.aspx/DeleteComment?commentId=" + data.Comment.CommentId));
						setupDeleteComment(delCommentLink.find("a"));
						newComment.find("dt").after(delCommentLink);
					} else {
						for (var i = 0; i < data.length; i++) {
							$(form).append($("<div></div>").attr("class", "field-validation-error").html(data[i].Message));
						}
					}
				}
			});
			return false;
		});

	});

	// Delete comment
	$(".deleteCommentAction").each(function() {
		setupDeleteComment($(this));
	});
}

function setupDeleteComment(link) {
	link.click(function() {
		$.getJSON($(this).attr("href"), function(data) {
			if (data.Success) {
				var commentToRemove = $(".comment" + data.CommentId);
				commentToRemove.slideUp(200, function() { commentToRemove.remove(); });
			}
		});
		return false;
	});
}

function loadTextResults() {
	if ($(".loadTextResultAction").length == 0)
		return;

	$(".loadTextResultAction").click(function() {
		var url = $(this).attr("href");
		var link = $(this);
		var parent = link.closest("li");

		if (parent.find("ul:visible").length > 0) {
			parent.find("ul").hide();
			return false;
		} else if (parent.find("ul:hidden").length > 0) {
			parent.find("ul").show();
			return false;
		}

		parent.find("img").show();

		$.getJSON(url, function(data) {
			if (data.result == null)
				return false;

			if (parent.find("ul").length == 0) {
				parent.append($("<ul></ul>"));
			} else {
				parent.find("ul").html("");
			}

			for (var i = 0; i < data.result.length; i++) {
				var li = $("<li></li>");
				var template = $("#textResultTemplate").clone(true);
				template.removeAttr("id").removeClass("hidden").show();

				var authorEl = template.find("#author");
				authorEl.removeAttr("id");
				authorEl.html(data.result[i].AuthorName);

				var resultEl = template.find("#resultContent");
				resultEl.removeAttr("id");
				resultEl.html(data.result[i].HtmlResult);

				li.append(template);
				parent.find("ul").append(li);
				//li.slideDown();
				parent.find("img").hide();
			}
		});
		return false;
	});
}