﻿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);
}

function clearField(sFieldId) {
    $("#" + sFieldId).val("");
}

function toggleObject(sDivId) {
    var qObj = $("#" + sDivId);
    if (qObj.is(":hidden")) {
        qObj.show();
    } else {
        qObj.hide();
    }
}

function showObject(sDivId) {
    $("#" + sDivId).show();
}

/* ** gift tree ** */
function initGiftTree(sUrl) {
    $("ul#gifttree").sortable({
        items: 'li.cat',
        update: updateCatOrder,
        url: sUrl
    });

    $("ul#gifttree ul").sortable({
        connectWith: 'ul#gifttree ul',
        update: updateGiftOrder,
        url: sUrl,
        stop: showEmptyCats
    });

    $("ul#gifttree").disableSelection();
    $("ul#gifttree ul").disableSelection();

    addGiftTreeHover();
    showEmptyCats();
}

function showEmptyCats() {
    var sText = $("ul#gifttree").data("empty_notification");

    $("ul#gifttree li.notification").remove();
    $("ul#gifttree ul.empty").removeClass("empty");
    $("ul#gifttree ul:empty").addClass("empty").each(function () {
        var ul = $(this);
        if (ul.parent("li").attr("class") != "nocat")
            ul.html("<li class='notification'>" + sText + "</li>");
    });
}

function addGiftTreeHover() {
    $("ul#gifttree li.gift").hover(
        function () {
            if (!$(this).hasClass("hover"))
                $(this).addClass("hover");
        },
        function () {
            $(this).removeClass("hover");
        }
    );
}

function updateGiftOrder(event, ui) {
    var item = ui.item;
    var parent = item.parents("li");
    var siblings = $("li.gift", parent.children("ul"));
    updateOrder("gift", parent.attr("rel"), siblings);
}

function updateCatOrder(event, ui) {
    var siblings = $("li.cat", $("ul#gifttree"));
    updateOrder("cat", 0, siblings);
}

function updateOrder(type, parentId, siblings) {
    var data = "";
    jQuery.each(siblings, function (index, value) {
        data += (index == 0 ? "" : ";") + $(value).attr("rel");
    });
    var url = $("ul#gifttree").sortable("option", "url");
    $.post(
        url,
        { type: type, parent: parentId, children: data },
        function (json) { },
        "json"
    );
}

/* ** Lijstje reden aanpassen ** */
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 onOccationChange() {
    var value = $("#ddlOccation").val();
    if (value == 0) {
        $("#occationDate").css("visibility", "hidden");
    }
    else {
        $("#occationDate").css("visibility", "visible");
    }
}

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());

    toggleOccationHolder();
}

function toggleOccationHolder() {
    toggleObject('occationholder');
    onOccationChange();
}

/* ** check the checksums ** */
function checkListChecksum(nListId, nChecksum, fAfterCheckFail) {
    $.post("/list/checksum/"
            , { id: nListId }
            , function (data) {
                if ((nChecksum != data.checksum) && fAfterCheckFail)
                    fAfterCheckFail();                
            }
            , "json"
    );
}

/* ** 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
    });
    return false;
}

function afterLoadSuccess(htmlData) {
    if (this.destination) {
        $(this.destination).html(htmlData);
        $("button, .button", $(this.destination)).button();
        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");
        }
    });
}

/* ** mylist ** */
function showAddGift() {
    $("#addgift").show();
    $("#gift").button("option", "disabled", true);
}

function closeAddGift() {
    $("#addgift form")[0].reset();
    timedSearch();
    $("#addgift").hide();
    $("#gift").button("option", "disabled", false);
}

function showSettingsMenu() {
    setTimeout("popupSettingsMenu()", 200);
}

function popupSettingsMenu() {
    var menu = $("ul#settingsmenu").show().position({
        my: "right top", at: "right bottom",
        of: "#settings", offset: "-6 0"
    });

    $(document).one("click", function () {
        menu.hide();
    });
}

/* ** email ** */
var emailTimerId = null;

function initCheckEmail() {
    $("#tbEmailAdres").keyup(function (e) {
        if (emailTimerId != null)
            window.clearTimeout(emailTimerId);

        emailTimerId = window.setTimeout(checkEmail, 1000);
    })
}

function checkEmail() {
    var emailVal = $.trim($('#tbEmailAdres').val());
    if (isValidEmailAddress(emailVal)) {
        $.ajax({
            url: "/en/account/CheckEmail/" + emailVal,
            cache: false,
            success: function (html) {
                if (html == 'false') {
                    var $href = $("#emailhref");
                    var stuurMijnGegevensTekst = $href.data('template').replace('{0}', emailVal);
                    $href.attr('href', "/Account/Password/" + emailVal);
                    $href.text(stuurMijnGegevensTekst);
                    $("#mailwarning").slideDown('fast');
                } else $("#mailwarning").slideUp('fast');
            }
        });
    }
    emailTimerId = null;
}

/* username */
var usernameTimerId = null;
function initCheckUsername() {
	$("#tbUsername").keyup(function (e) {
		if (usernameTimerId != null)
			window.clearTimeout(usernameTimerId);

		usernameTimerId = window.setTimeout(checkUsername, 500);
	})
}

function checkUsername() {
	var usernameVal = $.trim($('#tbUsername').val());
	$.ajax({
		type: "post",
		url: "/en/account/CheckUsername/" + usernameVal,
		cache: false,
		success: function (json) {
			usernameWarn(json.Msg, json.Valid);
		}
	});

	usernameTimerId = null;
}

function usernameWarn(warning, isvalid) {
	var usernameVal = $.trim($('#tbUsername').val());
	var $warning = $("#usernamewarning");
	$warning.html(isvalid ? $("#RsListAddress").data('template').replace('{0}', usernameVal) : warning);
	if (usernameVal == '') $warning.html("");
	$warning.removeClass("usernameok usernameerror").addClass(isvalid ? "usernameok" : "usernameerror");
	$warning.show();
}

/* ** opstart functie ** */
function startUp( datePattern, langCode ) {

    $("button, input[type='submit'], a.button").button().each(function (index) {
        var qButton = $(this);
        if (qButton.hasClass("next")) {
            qButton.button("option", "icons", { secondary: "ui-icon-triangle-1-e" });
        } else if (qButton.hasClass("previous")) {
            qButton.button("option", "icons", { primary: "ui-icon-triangle-1-w" });
        } else if (qButton.hasClass("delete")) {
            qButton.button("option", "icons", { primary: "ui-icon-trash" });
        } else if (qButton.hasClass("plus")) {
            qButton.button("option", "icons", { primary: "ui-icon-plus" });
        }

    });

    if (langCode == "nl") {
        /* Dutch (UTF-8) initialisation for the jQuery UI date picker plugin. */
        /* Written by Mathias Bynens <http://mathiasbynens.be/> */
        $.datepicker.regional['nl'] = {
            closeText: 'Sluiten',
            prevText: '←',
            nextText: '→',
            currentText: 'Vandaag',
            monthNames: ['januari', 'februari', 'maart', 'april', 'mei', 'juni',
                         'juli', 'augustus', 'september', 'oktober', 'november', 'december'],
            monthNamesShort: ['jan', 'feb', 'maa', 'apr', 'mei', 'jun',
                              'jul', 'aug', 'sep', 'okt', 'nov', 'dec'],
            dayNames: ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'],
            dayNamesShort: ['zon', 'maa', 'din', 'woe', 'don', 'vri', 'zat'],
            dayNamesMin: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
            weekHeader: 'Wk',
            firstDay: 1,
            isRTL: false,
            showMonthAfterYear: false,
            yearSuffix: ''
        };
        $.datepicker.setDefaults($.datepicker.regional['nl']);
    }

    $('input.date-text-box').datepicker({ dateFormat: datePattern, changeYear: true, defaultData: "01-01-1970", yearRange: '1900:2012' });

    $(".results tbody tr").mouseover(function () { $(this).addClass("over"); }).mouseout(function () { $(this).removeClass("over"); });
    $(".results tbody tr:odd").addClass("alt");
    $(".clickable tbody tr").click(function () {
        window.location = $(this).attr("rel"); 
    });

    $("div#emptyList button").click(function () {
        toggleObject('addgift');
        $(this).parent().html('');
        $('#tbBeschrijving').focus();
        return false;
    });
}
