﻿function hidegeenstreep()
{
    $("#geenstreep").css({'display': 'none'});    
}

function geenstreep(pa)
{
    var offset = $(pa).offset();       
    $("#geenstreep").css({
        'display' : 'block',
        'left' : offset.left,
        'top' : offset.top
    });
}

function isValidEmailAddress(emailAddress) {
	var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);
	return pattern.test(emailAddress);
}

/* ** gift tree ** */
function initTree(treeId) {
	$("#" + treeId).tree({
		types: {
			// all node types inherit the "default" node type
			"default": {
				deletable: false,
				renameable: false
			},
			"level_0": {
				valid_children: ["level_1"]
			},
			"level_1": {
				// the following three rules basically do the same
				valid_children: "none",
				max_children: 0,
				max_depth: 0,
				icon: { image: "/Content/tree/present-icon-16x16.png" }
			}
		},
		rules: {
			multiple: false
		},
		callback: {
			onselect: onSelect,
			onmove: moveSelected,
			ondblclk: onDoubleClick,
			onhover: onHover,
			check_move: onCheckMove
		},
		ui: {
			dots: false
		},
		plugins: {
			contextmenu: {
				items: {
					// get rid of the remove item
					create: false,
					remove: {
						label: translate('del'),
						icon: "remove",
						visible: function(node, tree) {
							return $(node).attr("rel") == "level_1";
						},
						action: function(node, tree) {
							deleteGift(node);
						}
					},
					rename: {
						label: translate('edit'),
						icon: "rename",
						visible: function(node, tree) {
							return true;
						},
						action: function(node, tree) {
							editGift(node);
						}
					},
					visit: {
						label: translate('viewurl'),
						icon: "",
						visible: function(node, tree) {
							return ($(node).attr("rel") == "level_1") && ($("cite[rel!='']", node).length > 0);
						},
						action: function(node, tree) {
							visitNodeUrl(node);
						}
					}
				}
			} // context menu
		}
	}).focus();
	$.tree.focused().open_all();
}

function onCheckMove(node, ref_node, type, tree) {
	var item = $(node);
	var parent = $(ref_node).parent("li");
	
	if (item.attr('rel') == "level_0") {
		if ( parent.attr('rel') == "level_0")
			return true;

		var count = parent.nextUntil("li[rel='level_1']").filter("li[rel='level_0']").length;
		return (count == 0)

	} else {
		if (parent.attr('rel') == "level_1")
			return true;

		var count = parent.prevUntil("div").filter("li[rel='level_0']").length;
		if (count > 0)
			return type == "inside";

		return type != "after";
	}
}

function moveSelected(node, ref_node, type, tree, rollback) {
	var tree = $.tree.focused();
	var parent = tree.parent(node);

	var parentId = (parent != -1) ? $("a", parent).attr("rel") : "0";
	var data = "";

	jQuery.each(tree.children(parent), function(index, value) {
		var prefix = ($(value).attr("rel") == "level_0") ? "-" : "";
		data += prefix + $("a", value).attr("rel") + ";";
	});

	$.post(
			getUrl('sortlist'),
			{
				parent: parentId,
				children: data
			},
			function(json)
			{ },
			"json"
		);
}

function visitNodeUrl(node) {
	var tag = $("cite[rel!='']", node);
	if (tag.length == 0)
		return;

	window.open(tag.attr('rel'));
}

function onDoubleClick(node, tree) {
	editGift($(node));
}

function editGift(gift) {
	if (gift.attr("rel") == "level_1") {
		var node = $("a", gift);
		document.location.href = getUrl('editgift') + '/' + node.attr("rel");
	} else {
		document.location.href = getUrl('editcategory');
	}
}

function deleteGift(gift) {
	if (gift.attr("rel") == "level_1") {
		var node = $("a", gift);

		var gift = node.children("em").html();
		var text = translate("delwarning1") + ' \'' + gift + '\' ' + translate("delwarning2");
		if (!confirm(text))
			return;

		$.post(getUrl("deletegift"), { id: node.attr("rel") },
				function(json) {
					if (json.Success) {
						removeGift(json.Id);
					} else {
						if (json.Id == 0)
							document.location.href = getUrl("mylist");
						else
							alert(translate("delerror"));
					}
				}, "json");
	}
}

function removeGift(giftId) {
	$("li a[rel=" + giftId + "]").parent("li").remove();
}

function onSelect(node, tree, event) {
	var selection = $(node);
	if (selection.attr("rel") == "level_1") {
		switch( event.target.tagName )
		{
			case "I":
				var link = $(event.target);
				if (link.hasClass("delete"))
					deleteGift(selection);
				else if (link.hasClass("edit"))
					editGift(selection);
				break;

			case "CITE":
				visitNodeUrl(node);
				break;
		}
	}
}

function onHover(node, tree, event) {
	var link = $("var i, cite", node);
	link.removeClass("hover");

	if ((event.target.tagName == "I") || (event.target.tagName == "CITE"))
		$(event.target).addClass("hover");
}

/* ** url en tekst dingen ** */
var translations = false;
function translate(key) {
	var text = translations[key];
	return text;
}

var urllist = false;
function getUrl(key) {
	var url = urllist[key];
	return url;
}

/* ** Lijstje reden aanpassen ** */
function onOccationChange() {
	submitOccation()
}

var trDate = false;
function onDateChange() {
	if (trDate != false)
		clearTimeout(trDate);

	trDate = setTimeout("submitOccation()", 1800);
}

function submitOccation() {
	return onSubmitOccation();
}

function onSubmitAddGift() {
	var oField = $("#tbBeschrijving");
	if (oField.length > 0) {
		if (oField.val() == "") {
			var oError = $('#invulerror');
			if (oError.length > 0)
				oError.css("display", "block");
			return false;
		}
		return true;
	}
	return false;
}

/* ** edit oproepen ** */
function showEditTitle(sUrl) {
	return ajaxCallUrl(sUrl, "#titleholder");
}
function showEditTheme(sUrl) {
	return ajaxCallUrl(sUrl, "#themeholder");
}

/* ** edit opslaan ** */
function onSubmitTitle() {
	ajaxPostForm($("#formTitle"), "#titleholder", false);
	return false;
}
function onSubmitTheme() {
	ajaxPostForm($("#formTheme"), "#themeholder", false);
	return false;
}

function onSubmitOccation() {
	ajaxPostForm($("#formOccation"), "#occationholder", updateOccationText);
	return false;
}

function updateOccationText() {
	var oInput = $("#tbOccationText");
	var oP = $("#occationtext");
	if ((oP.length > 0) && (oInput.length > 0))
		oP.html(oInput.val());
}
	
/* ** algemene ajax calls ** */
function ajaxCallUrl(sUrl, sDestionation) {
    var oDiv = $(sDestionation);
    if (oDiv.length != 1)
        return true;

    // 2 stukjes html aan table toevoegen
    oDiv.append("<div class=\"shader\"><!-- --></div><div class=\"loading\"><!-- --></div>");

    // AJAX call doen
    $.ajax({
        url: sUrl,
        cache: false,
        dataType: "html",
        success: afterLoadSuccess,
        error: afterLoadError,
        destination: sDestionation
    }); // $.ajax()
    return false;
}

/* ** algemene ajax calls ** */
function ajaxPostForm(oForm, sDestionation, sFunc) {
    var oDiv = $(sDestionation);
    if (oDiv.length != 1)
        return true;

    // 2 stukjes html aan table toevoegen
    oDiv.append("<div class=\"shader\"><!-- --></div><div class=\"loading\"><!-- --></div>");

    // AJAX call doen
    $.ajax({
        type: "POST",
        url: oForm.attr('action'),
        data: oForm.serialize(),
        cache: false,
        dataType: "html",
        success: afterLoadSuccess,
        error: afterLoadError,
        destination: sDestionation,
        afterFunc : sFunc
    }); // $.ajax()
    return false;
}

function afterLoadSuccess(htmlData) {
    if (this.destination) {
        $(this.destination).html(htmlData);
        if (this.afterFunc)
            this.afterFunc();
    } else {
        afterLoadError(false, false, false);
    }
}

function afterLoadError(xhr, err, e) {
    document.location.href = this.url;
}

/* ** home - vrienden weggooien ** */
function ajaxDeleteFriend(sUrl) {
    return ajaxCallUrl(sUrl, "#FriendList");
}

/* ** list search - paging & sorting ** */
function ajaxSearchResult(sUrl) {
    return ajaxCallUrl(sUrl, "#PartialResult");
}

/* ** voor joep ** */
if ((typeof jQuery) == 'function') {
    var kkeys = [], konami = "38,38,40,40,37,39,37,39,66,65";
    $(document).keydown(function(e) {
        kkeys.push(e.keyCode);
        if (kkeys.toString().indexOf(konami) >= 0) {
            $(document).unbind('keydown', arguments.callee);
            $("body").addClass("konami");
        }
    });
}