$(document).ready(function () {

    //#region COMMON FUNCTIONS
    jQuery.preLoadImages(
         "http://static.sailreport.nl/images/btn_sluiten_mo.gif",
         "http://static.sailreport.nl/images/btn_inklappen_mo.gif",
         "http://static.sailreport.nl/images/btn_uitklappen_mo.gif",
         "http://static.sailreport.nl/images/btn_bewerken_mo.gif",
         "http://static.sailreport.nl/images/blt_plus.gif",
         "http://static.sailreport.nl/images/blt_plus_mo.gif",
         "http://static.sailreport.nl/images/bg_shadow.png",
         "http://static.sailreport.nl/images/bg_placeholder.gif",
         "http://static.sailreport.nl/images/bg_placeholderTop.gif",
         "http://static.sailreport.nl/images/btn_sliderLeft.png",
         "http://static.sailreport.nl/images/btn_sliderLeft_mo.png",
         "http://static.sailreport.nl/images/btn_sliderRight.png",
         "http://static.sailreport.nl/images/btn_sliderRight_mo.png",
         "http://static.sailreport.nl/images/btn_photoSliderLeft.png",
         "http://static.sailreport.nl/images/btn_photoSliderRight.png",
         "http://static.sailreport.nl/images/btn_photoSliderRight_mo.png",
         "http://static.sailreport.nl/images/btn_photoSliderLeft_mo.png",
         "http://static.sailreport.nl/images/btn_photoSluiten.png",
         "http://static.sailreport.nl/images/btn_photoSluiten_mo.png"
    );

    //Default pagetracker for pdf files
    $('a[href$=".pdf"]').each(function () {
        var filenameparts = $(this).attr("href").replace(".pdf", "").split("/");
        var length = filenameparts.length;
        var filename = filenameparts[filenameparts.length - 1];
        var txt = $(this).text();
        $(this).attr("onclick", "trackEvent('Downloads', 'PDF', '" + txt + "', '" + filename + "');");
    });

    //Default pagetracker for _blank links
    $('a[target="_blank"]').each(function () {
        var url = $(this).attr("href").replace("http://", "").replace("https://", "");
        var txt = $(this).text().replace("http://", "").replace("https://", "");
        $(this).attr("onclick", "trackEvent('Clickout', 'ExterneLink', '" + txt + "', '" + url + "');");
    });

    $(".mo, .close").hover(
	    function () {
	        if (($(this).find("img").length < 1) && ($(this)[0].tagName != "INPUT")) {
	            $(this).css("background-image", $(this).css("background-image").replace(".gif", "_mo.gif").replace(".png", "_mo.png"));
	        }
	        else {
	            if ($(this)[0].tagName == "INPUT") {
	                $(this).attr("src", $(this).attr("src").replace(".gif", "_mo.gif").replace(".png", "_mo.png"));
	            }
	            else {
	                $(this).find("img").attr("src", $(this).find("img").attr("src").replace(".gif", "_mo.gif").replace(".png", "_mo.png"));
	            }
	        }
	    },
	    function () {
	        if (($(this).find("img").length < 1) && ($(this)[0].tagName != "INPUT")) {
	            $(this).css("background-image", $(this).css("background-image").replace("_mo.gif", ".gif").replace("_mo.png", ".png"));
	        }
	        else {
	            if ($(this)[0].tagName == "INPUT") {
	                $(this).attr("src", $(this).attr("src").replace("_mo.gif", ".gif").replace("_mo.png", ".png"));
	            }
	            else {
	                $(this).find("img").attr("src", $(this).find("img").attr("src").replace("_mo.gif", ".gif").replace("_mo.png", ".png"));
	            }
	        }

	    }
        );

    $(".closeModal").live("click", function () {
        closeParentWin();
    });

    $(".scrollable").scrollable({
        size: 1,
        circular: true,
        next: '.nextPage',
        prev: '.prevPage'
    });

    $(".nextPage, .prevPage").click(function () {
        return false;
    });

    $("#alph").toggle(
		    function () {
		        $(".modTagcloud ul li").tsort({ order: "asc" });
		    },
		    function () {
		        $(".modTagcloud ul li").tsort({ order: "desc" });
		    }
	    );

    $("#strength").toggle(
		    function () {
		        $(".modTagcloud ul li").tsort({ order: "asc", attr: "class" });
		    },
		    function () {
		        $(".modTagcloud ul li").tsort({ order: "desc", attr: "class" });
		    }
	    );

    $("#aantalTagcloud").change(function () {
        var nItems = $(this).val() - 1;
        $(".modTagcloud ul li").show();
        $(".modTagcloud ul li:gt(" + nItems + ")").hide();
    });

    $("#selNewsCategory").change(function () {
        var category = $(this).val();
        if (category != "") {
            document.location = $("#currenturl").val() + "?type=" + category;
        }
        else {
            document.location = $("#currenturl").val();
        }
    });

    $("#selBlogger").change(function () {
        var blogger = $(this).val();
        if (blogger != "") {
            document.location = "/blogs/" + blogger;
        }
        else {
            document.location = "/blogs";
        }
    });

    //#endregion

    //#region DIALOG (needs to be loaded before widgets!)

    //Open
    if ($("#dialogRegister").length > 0) {
        //$('#dialogRegister').jqm({ modal: true, trigger: 'a.linkRegister' });
        $('#dialogRegister').jqm({ modal: true });
    }

    $("a.linkRegister").live("click", function () {
        $("iframe#iframeRegister").attr("src", "/ajax/Register.aspx");
        $('#dialogRegister').jqmShow();
    });

    //Validate
    $.validator.addMethod("alphanumeric", function (value, element) {
        return this.optional(element) || /^[a-zA-Z0-9]+$/i.test(value);
    }, "Invalid character.");

    $("#frmRegister").validate({
        rules: {
            Username: {
                required: true,
                minlength: 3,
                alphanumeric: "^[a-zA-Z0-9'.\s]{1,40}$",
                remote: {
                    url: "/ajax/checkRegisterUsername.aspx",
                    type: "get",
                    data: {
                        Username: function () {
                            return $("#Username").val();
                        }
                    }
                }
            },
            Password: {
                required: true,
                minlength: 8
            },
            Password2: {
                equalTo: "#Password"
            },
            Sex: "required",
            Name: "required",
            Email: {
                required: true,
                email: true
            },
            DateOfBirth_Day: "required",
            DateOfBirth_Month: "required",
            DateOfBirth_Year: "required"
        },
        messages: {
            Username: {
                required: "",
                minlength: "",
                remote: ""
            },
            Password: {
                required: "",
                minlength: "Het wachtwoord moet uit minimaal 8 tekens bestaan."
            },
            Password2: {
                equalTo: "De wachtwoorden komen niet overeen."
            },
            Sex: "",
            Name: "",
            Email: {
                required: "",
                email: ""
            },
            DateOfBirth_Day: "",
            DateOfBirth_Month: "",
            DateOfBirth_Year: "",
            SailorType: "",
            Experience: ""
        }
    });

    function checkUsername() {
        $("#customErrorUsername").text("Bezig met controleren...").attr("class", "customPending").fadeIn();
        $(this).oneTime(1000, function () {
            if ($("#Username").valid()) {
                $("#customErrorUsername").text("Dit is een geldige gebruikersnaam.").attr("class", "customValid").show();
            }
            else {
                if ($("#Username").val().length < 3) {
                    $("#customErrorUsername").text("De gebruikersnaam moet uit minimaal 3 tekens bestaan.").attr("class", "customError").show();
                }
                else if ($("label[for=Username]").text() == "Invalid character.") {
                    $("#customErrorUsername").text("Alleen letters en cijfers zijn toegestaan.").attr("class", "customError").show();
                }
                else {
                    $("#customErrorUsername").text("Deze gebruikersnaam bestaat al.").attr("class", "customError").show();
                }
            }
        });
    }

    $("#Username").keyup(function () {
        checkUsername();
    });

    $("#Username").keypress(function (e) {
        // 0-9 // A-Z // a-z // enter, tab, enz.
        if (!((e.which > 47 && e.which < 58) || (e.which > 64 && e.which < 91) || (e.which > 96 && e.which < 123) || e.which < 16)) {
            return false;
        }
    });

    //Send
    $("#frmRegister").find("#Submit").live("click", function () {
        checkUsername();
        if ($("#frmRegister").valid()) {
            $("#frmRegister").find("#rowButtons").fadeOut("fast");
            $("#frmRegister").find("#rowBusy").fadeIn("fast");
            var randomnumber = Math.floor(Math.random() * 100001);
            var send = $.post("/Ajax/saveRegister.aspx?randomnumber=" + randomnumber,
                            {
                                Username: $("#Username").val(),
                                Password: $("#Password").val(),
                                Sex: $("input[name=Sex]").val(),
                                Name: $("#Name").val(),
                                Email: $("#Email").val(),
                                DateOfBirth: $("#DateOfBirth_Year").val() + "-" + $("#DateOfBirth_Month").val() + "-" + $("#DateOfBirth_Day").val(),
                                Newsletter: $("#NewsLetter").val(),
                                Picture: $("#Picture").val(),
                                SailorType: $("#SailorType").val(),
                                Experience: $("#Experience").val(),
                                BoatBrand: $("#BoatBrand").val(),
                                BoatModel: $("#BoatModel").val(),
                                BoatType: $("#BoatType").val(),
                                Berth: $("#Berth").val(),
                                SailingArea: $("#SailingArea").val(),
                                TwitterAllowed: $("#TwitterAllowed").val(),
                                TwitterUsername: $("#TwitterUsername").val(),
                                TwitterPassword: $("#TwitterPassword").val()
                            },
                            function (data) {
                                if (data == "true") {
                                    $("#cntRegisterForm").fadeOut(500);
                                    $(this).oneTime(500, function () {
                                        $("#cntRegisterForm").remove();
                                        $(this).oneTime(1000, function () {
                                            $("#cntRegisterConfirmation").fadeIn(1000);
                                        });
                                    });
                                }
                                else {
                                    $("#frmRegister").find("#rowBusy").html("<p>De registratie kan niet verzonden worden.</p>");
                                }
                            }
                        );
            return false;
        }
        else {
            if (!$("input[name=Sex]").is(":checked")) {
                $(".spanSex").css("color", "#e3003b");
                $("input[name=Sex]").change(function () {
                    $(".spanSex").css("color", "#000");
                });
            }
            //error
        }
    });

    //Open
    $('#dialogLogin').jqm({ modal: true });

    $("a.linkLogin").live("click", function () {
        $("iframe#iframeLogin").attr("src", "/ajax/Login.aspx");
        $('#dialogLogin').jqmShow();
    });

    //Handle register link
    $("#linkRegisterViaLogin").live("click", function () {
        top.$('#dialogLogin').jqmHide();
        top.$('#dialogRegister').jqmShow();
    });

    //Validate
    $("#frmLogin").validate({
        rules: {
            Username: "required",
            Password: "required"
        }
    });


    //Send
    $("#frmLogin").find("#Submit").live("click", function () {
        if ($("#frmLogin").valid()) {
            $("#frmLogin").find("#rowButtons").fadeOut(500);
            $(this).oneTime(500, function () {
                $("#frmLogin").find("#rowBusy").html("<p style=\"background: url(http://static.sailreport.nl/images/img_loading_16x16.gif) 0% 50% no-repeat; padding: 0 0 0 20px; color: #aaa;\">Bezig met controleren...</p>").fadeIn("fast");
            });
            $(this).oneTime(500, function () {
                var randomnumber = Math.floor(Math.random() * 100001);
                var send = $.post("/Ajax/checkLogin.aspx?randomnumber=" + randomnumber,
                            {
                                Username: $("#Username").val(),
                                Password: $("#Password").val(),
                                Remember: $("#Remember").val()
                            },
                            function (data) {
                                if (data == "true") {
                                    var currenturl = $(top.document).find("#currenturl").val();
                                    $("#cntLoginForm").fadeOut(500);
                                    $("#closeLogin").fadeOut(500);
                                    $(this).oneTime(500, function () {
                                        $("#cntLoginForm").remove();

                                        $("#cntLoginConfirmation").fadeIn(500);
                                        top.$('#dialogLogin iframe').animate({ height: 100 }, 900);
                                        $(this).oneTime(1000, function () {
                                            if (currenturl != undefined) {
                                                if (currenturl == "/account/registreren") {
                                                    top.document.location = "/account/mijn-profiel";
                                                }
                                                else {
                                                    top.document.location = currenturl;
                                                }
                                            }
                                            else {
                                                top.document.location = "/";
                                            }
                                        });
                                    });
                                }
                                else {
                                    $("#frmLogin").find("#rowBusy").html("<p style=\"background: url(http://static.sailreport.nl/images/img_ico_error.png) 0% 50% no-repeat; padding: 0 0 0 20px; color: #e3003b;\">De opgegeven gebruikersnaam of wachtwoord is onjuist.<br />Probeer het opnieuw.</p>");
                                    $(this).oneTime(1000, function () {
                                        $("#frmLogin").find("#rowBusy").fadeOut(500);
                                        $(this).oneTime(500, function () {
                                            $("#frmLogin").find("#rowButtons").fadeIn(500);
                                        });
                                    });
                                }
                            }
                        );
            });
            return false;
        }
    });

    //Password forgotten
    $("#linkPasswordForgotten").live("click", function () {
        if ($("#cntPasswordForgotten").is(":visible")) {
            top.$('#dialogLogin iframe').animate({ height: 200 }, 1000);
            $("#cntPasswordForgotten").fadeOut(1000);
        }
        else {
            top.$('#dialogLogin iframe').animate({ height: 278 }, 1000);
            $("#cntPasswordForgotten").fadeIn(1000);
        }
        return false;
    });

    $("#frmPasswordForgotten").validate({
        rules: {
            Email: {
                required: true,
                email: true
            }
        }
    });

    $("#frmPasswordForgotten").find("#SendPassword").live("click", function () {
        if ($("#frmPasswordForgotten").valid()) {
            $("#frmPasswordForgotten").find("#rowButtons").fadeOut(500);
            $(this).oneTime(500, function () {
                $("#frmPasswordForgotten").find("#rowBusy").html("<p style=\"background: url(http://static.sailreport.nl/images/img_loading_16x16.gif) 0% 50% no-repeat; padding: 0 0 0 20px; color: #aaa;\">Bezig met controleren...</p>").fadeIn("fast");
            });
            $(this).oneTime(4000, function () {
                var randomnumber = Math.floor(Math.random() * 100001);
                var send = $.post("/Ajax/sendPassword.aspx?randomnumber=" + randomnumber,
                            {
                                Email: $("#Email").val()
                            },
                            function (data) {
                                if (data == "true") {
                                    $("#frmPasswordForgotten").fadeOut(500);
                                    $(this).oneTime(2000, function () {
                                        $("#frmPasswordForgotten").remove();
                                        $("#cntPasswordForgottenConfirmation").fadeIn(1000);
                                        //top.$('#dialogLogin iframe').animate({ height: 200 }, 1000);
                                        $(this).oneTime(5000, function () {
                                            $("#cntPasswordForgottenConfirmation").fadeOut();
                                        });
                                    });
                                }
                                else {
                                    $("#frmPasswordForgotten").find("#rowBusy").html("<p style=\"background: url(http://static.sailreport.nl/images/img_ico_error.png) 0% 50% no-repeat; padding: 0 0 0 20px; color: #e3003b;\">Dit e-mailadres staat niet geregistreerd.</p>");
                                    $(this).oneTime(4000, function () {
                                        $("#frmPasswordForgotten").find("#rowBusy").fadeOut(500);
                                        $(this).oneTime(500, function () {
                                            $("#frmPasswordForgotten").find("#rowButtons").fadeIn(500);
                                        });
                                    });
                                }
                            }
                        );
            });
            return false;
        }
    });

    $("a.linkLogout").live("click", function () {
        document.location = "/ajax/logout.aspx";
    });

    //Validate
    $("#frmChangePassword").validate({
        rules: {
            Password: {
                required: true,
                minlength: 8
            },
            Password2: {
                equalTo: "#Password"
            }
        },
        messages: {
            Password: {
                required: "",
                minlength: "Het wachtwoord moet uit minimaal 8 tekens bestaan."
            },
            Password2: {
                equalTo: "De wachtwoorden komen niet overeen."
            }
        }
    });

    //Send
    $("#frmChangePassword").find("#Submit").live("click", function () {
        if ($("#frmChangePassword").valid()) {
            $("#frmChangePassword").find("#rowButtons").fadeOut("fast");
            $("#frmChangePassword").find("#rowBusy").fadeIn("fast");
            $(this).oneTime(4000, function () {
                var randomnumber = Math.floor(Math.random() * 100001);
                var send = $.post("/Ajax/changePassword.aspx?randomnumber=" + randomnumber,
                            {
                                Email: $("#Email").val(),
                                Guid: $("#Guid").val(),
                                Password: $("#Password").val()
                            },
                            function (data) {
                                if (data == "true") {
                                    $("#cntChangePasswordForm").fadeOut(500);
                                    $(this).oneTime(500, function () {
                                        $("#cntChangePasswordForm").remove();
                                        $("#cntChangePasswordConfirmation").fadeIn(1000);
                                        $(this).oneTime(5000, function () {
                                            document.location = "/";
                                        });
                                    });
                                }
                                else {
                                    $("#frmChangePassword").find("#rowBusy").html("<p style=\"background: url(http://static.sailreport.nl/images/img_ico_error.png) 0% 50% no-repeat; padding: 0 0 0 20px; color: #e3003b;\">Het wachtwoord kan niet opgeslagen worden. Probeer het opnieuw.</p>");
                                    $(this).oneTime(4000, function () {
                                        $("#frmChangePassword").find("#rowBusy").fadeOut(500);
                                        $(this).oneTime(500, function () {
                                            $("#frmChangePassword").find("#rowButtons").fadeIn(500);
                                        });
                                    });
                                }
                            }
                        );
            });
            return false;
        }
    });

    //#endregion

    //#region EVENTS (needs to be loaded before widgets!)

    $.datepicker.regional['nl'] = { clearText: 'Wissen', clearStatus: '',
        closeText: 'Sluiten', closeStatus: 'Sluiten zonder op te slaan',
        prevText: 'Vorige', prevStatus: 'Laat de vorige maand zien',
        nextText: 'Volgende', nextStatus: 'Laat de volgende maand zien',
        currentText: 'Vandaag', currentStatus: 'Laat de huidige maand zien',
        monthNames: ['Januari', 'Februari', 'Maart', 'April', 'Mei', 'Juni',
		        'Juli', 'Augustus', 'September', 'Oktober', 'November', 'December'],
        monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'Mei', 'Jun',
		        'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec'],
        monthStatus: 'Laat een andere maand zien', yearStatus: 'Laat een ander jaar zien',
        weekHeader: 'Wk', weekStatus: '',
        dayNames: ['Zondag', 'Maandag', 'Dinsdag', 'Woensdag', 'Donderdag', 'Vrijdag', 'Zaterdag'],
        dayNamesShort: ['Zon', 'Maa', 'Din', 'Woe', 'Don', 'Vri', 'Zat'],
        dayNamesMin: ['Z', 'M', 'D', 'W', 'D', 'V', 'Z'],
        dayStatus: '', dateStatus: '',
        dateFormat: 'dd/mm/yyyy',
        firstDay: 1,
        initStatus: 'Kies een datum', isRTL: false
    };

    $.datepicker.setDefaults($.datepicker.regional['nl']);

    if ($("#eventNewsTypes").size() > 0) {
        updateEvents();
    }

    //#endregion


    //#region WIDGETS COMMON

    ///start INIT SORTABLE WIDGETS -----------------------------------------------------------------------------

    var widgetHeight;
    $(".column").sortable({
        connectWith: '.column',
        handle: '.portlet-header',
        items: '.portlet-allowmove',
        opacity: 0.6,
        helper: 'clone',
        revert: true,
        placeholder: 'ui-state-highlight-placeholder',
        start: function (e, ui) {
            $(".ui-state-highlight-placeholder").append("<div class='ui-state-highlight-placeholder-top'></div>")
            widgetHeight = $(ui.helper).height();
            $(".ui-state-highlight-placeholder").height(widgetHeight);
        },
        stop: function (e, ui) {
            var targetLocation = $(ui.item).prevAll().length;
            var order = $(ui.item).prevAll().length + 1;
            var randomnumber = Math.floor(Math.random() * 100001);
            var id = $(ui.item).find(".profileBlockId").val();
            var column = $(".column").index($(ui.item).parent()) + 1;

            var widgetname = $(ui.item).find(".portlet-content").attr("rel");
            trackPage('event.widget.' + widgetname + '.verplaatsen');

            //Save positions of widgets
            //updateWidgetPositions(0, "");
            updateWidgetPositions();
        }
    });

    ///end INIT SORTABLE WIDGETS -----------------------------------------------------------------------------

    ///start LAYER SETTINGS -----------------------------------------------------------------------------

    $('#confirm').jqm({ modal: true, trigger: false });

    $('.btn_herstel').live("click", function () {
        trackPage('event.homeherstellen');
        confirm('Weet je zeker dat je de homepage wilt herstellen?', "/ajax/resetWidgetPositions.aspx");
        return false;
    });

    ///end LAYER SETTINGS -----------------------------------------------------------------------------

    ///start WIDGET BUTTONS -----------------------------------------------------------------------------
    $(".portlet-header .ui-icon-plusthick, .portlet-header .ui-icon-minusthick").live("click", function () {
        $(this).toggleClass("ui-icon-minusthick");
        $(this).toggleClass("ui-icon-plusthick");
        if ($(this).hasClass("ui-icon-minusthick")) {
            trackPage('event.widget.' + $(this).attr("rel") + '.uitklappen');
            var id = $(this).parent().parent().attr("rel");
            updateWidgetSettings(id, "open");
            $(this).text(" - ");
            $(this).parents(".widget:first").find(".portlet-content").slideDown();
        }
        else {
            var id = $(this).parent().parent().attr("rel");
            if ($(".widget[rel=" + id + "] .portlet-edit").css("display") == "block") {

                $(".widget[rel=" + id + "]").parents("column").sortable("enable");
                $.mask.close();
                $(".widget[rel=" + id + "] .portlet-edit").slideUp().animate({
                    marginBottom: "7px"
                }, { duration: 500, queue: false });
            }
            trackPage('event.widget.' + $(this).attr("rel") + '.inklappen');
            var id = $(this).parent().parent().attr("rel");
            updateWidgetSettings(id, "collapse");
            $(this).text(" + ");
            $(this).parents(".widget:first").find(".portlet-content").slideUp();
        }
        return false;
    });

    $(".portlet-header .ui-icon-close").live("click", function () {
        var id = $(this).parents(".widget").attr("rel");
        updateWidgetSettings(id, "hide");
        $("#checkWidget" + id).attr('checked', false);
        $(this).parents(".widget").slideUp("slow").hide();
        trackPage('event.widget.' + $(this).attr("rel") + '.sluiten');
        return false;
    });

    ///end WIDGET BUTTONS -----------------------------------------------------------------------------

    ///start UPDATE PAGE SETTINGS -----------------------------------------------------------------------------

    $(".btn_reset_page").live("click", function () {
        if ($(".pagePropertiesLayer").css("display") == "block") {
            //$(".pagePropertiesLayer").slideUp().expose({ api: true }).close();
            $(".pagePropertiesLayer").slideUp();
            $(this).oneTime(100, function () {
                $("#cntUpdateWidgetsHomepage").html("");
            });
        }
    });

    $(".btn_homepage").live("click", function () {
        if ($(".pagePropertiesLayer").css("display") == "none") {
            trackPage('event.homeaanpassen');

            var randomnumber = Math.floor(Math.random() * 100001);
            $.get("/ajax/updateWidgetsHomepage.aspx?randomnumber=" + randomnumber, function (data) {
                $("#cntUpdateWidgetsHomepage").html(data);
                $(".pagePropertiesLayer").slideDown();
                var height = $("#cntUpdateWidgetsHomepage").height();
                $("#updateWidgetsHomepageBusy").css("height", height + "px");

                $(".widget:visible").each(function () {
                    $("#cntUpdateWidgetsHomepage input[value=" + $(this).attr("rel") + "]").attr("checked", "checked");
                });

                //Handle click
                $("#cntUpdateWidgetsHomepage input[type=checkbox]").change(function () {
                    var id = $(this).val();
                    if ($(this).is(":checked")) {
                        $(".widget[rel=" + id + "]").css("display", "block");
                        updateWidgetSettings(id, "show");
                        updateWidgetContent(id, true);
                    }
                    else {
                        $(".widget[rel=" + id + "]").css("display", "none");
                        updateWidgetSettings(id, "hide");
                    }
                });

            });
        }
        return false;
    });

    ///end UPDATE PAGE SETTINGS -----------------------------------------------------------------------------

    ///start UPDATE WIDGET SETTINGS -----------------------------------------------------------------------------

    $(".ui-icon-edit").live("click", function () {
        if ($(this).parent().next(".portlet-edit").css("display") == "block") {
            $(this).parents("column").sortable("enable");
            $.mask.close();
            $(this).parent().next(".portlet-edit").slideUp().animate({
                marginBottom: "7px"
            }, { duration: 500, queue: false });
        }
        else {
            trackPage('event.widget.' + $(this).attr("rel") + '.bewerken');
            if (!jQuery.browser.msie || jQuery.browser.version > 7) {
                $(this).parent().parent().parent().sortable('disable');
                $(this).parent().parent().expose({
                    api: true,
                    color: '#000',
                    opacity: 0.5,
                    closeOnClick: false,
                    closeOnEsc: false
                }).load();
            }
            var id = $(this).parents(".widget").attr("rel");
            var type = getWidgetType(id);
            $("div.widget[rel=" + id + "] .ui-icon").fadeOut(500);
            var randomnumber = Math.floor(Math.random() * 100001);
            $.get("/ajax/getJSONWidgetProperties.aspx?randomnumber=" + randomnumber, { id: id, type: type, user: false }, function (dataDefault) {
                if (dataDefault != "false") {
                    $.get("/ajax/getJSONWidgetProperties.aspx?randomnumber=" + randomnumber, { id: id, type: type, user: true }, function (dataUser) {
                        if (dataUser != "false") {
                            var html = "";
                            var JSONWidgetPropertiesDefault = JSON.parse(dataDefault); //parse json string to objects
                            var JSONWidgetPropertiesUser = JSON.parse(dataUser); //parse json string to objects

                            for (i = 0; i < JSONWidgetPropertiesDefault.Settings.length; i++) {
                                var JSONWidgetSettingDefault = JSONWidgetPropertiesDefault.Settings[i];
                                var JSONWidgetSettingUser = JSONWidgetPropertiesUser.Settings[i];

                                if (JSONWidgetSettingDefault.Type == "checkbox") {
                                    var checkboxval = "";
                                    for (j = 0; j < JSONWidgetPropertiesUser.Settings.length; j++) {
                                        if (JSONWidgetSettingDefault.Label == JSONWidgetPropertiesUser.Settings[j].Label) {
                                            checkboxval = JSONWidgetPropertiesUser.Settings[j].Value;
                                        }
                                    }
                                    if (checkboxval == "") {
                                        checkboxval = "false";
                                    }
                                    //var checkboxval = JSONWidgetPropertiesUser.Settings[i] != undefined ? ((JSONWidgetSettingDefault.Value != null || JSONWidgetSettingUser.Value != null) ? (JSONWidgetSettingUser.Value != JSONWidgetSettingDefault.Value ? JSONWidgetSettingUser.Value : JSONWidgetSettingDefault.Value) : "false") : false;
                                    var checked = "";
                                    if (checkboxval == "true") {
                                        checked = "checked='checked'";
                                    }
                                    var label = JSONWidgetSettingDefault.Label;
                                    if (label.length > 22) {
                                        label = label.substr(0, 22) + "...";
                                    }
                                    html += "<label>" + label + "</label><input type='checkbox' name='" + JSONWidgetSettingDefault.Id + "' id='" + JSONWidgetSettingDefault.Id + "' " + checked + " ><br />";
                                }
                                else if (JSONWidgetSettingDefault.Type == "select") {
                                    var selectval = JSONWidgetPropertiesUser.Settings[i] != undefined ? (JSONWidgetSettingUser.Value != JSONWidgetSettingDefault.Value ? JSONWidgetSettingUser.Value : JSONWidgetSettingDefault.Value) : JSONWidgetSettingDefault.Value;
                                    html += "<label>" + JSONWidgetSettingDefault.Label + "</label><select name='" + JSONWidgetSettingDefault.Id + "' id='" + JSONWidgetSettingDefault.Id + "' >";
                                    var options = JSONWidgetSettingDefault.Values.split(",");
                                    for (j = 0; j < options.length; j++) {
                                        var optionvals = options[j].split("][");
                                        var optionval = optionvals[0];
                                        var optiontxt = optionvals[1];
                                        var selected = "";
                                        if (selectval == options[j]) {
                                            selected = "selected='selected'";
                                        }
                                        html += "<option value='" + optionval + "' " + selected + ">" + optiontxt + "</option>";
                                    }
                                    html += "</select><br />";
                                }
                            }
                            var form = $("#dummyEdit").html();
                            form = form.replace("#title#", $("div.widget[rel=" + id + "] h2").text());
                            form = form.replace("#edit#", html);
                            form = form.replace('style="display: none;"', '');
                            $("div.widget[rel=" + id + "] .portlet-edit").html(form);
                            $("div.widget[rel=" + id + "] .portlet-edit").slideDown().animate({
                                marginBottom: "-16px"
                            }, { duration: 500, queue: false });
                        }
                        else {
                            $("div.widget[rel=" + id + "] .ui-icon-edit").fadeIn(500);
                        }
                    });
                }
                else {
                    $("div.widget[rel=" + id + "] .ui-icon-edit").animate({ opacity: 1.0 }, 500);
                }
            });
        }
        return false;
    });

    $(".btn_submit").live("click", function () {
        trackPage('event.widget.' + $(this).attr("rel") + '.bewerkenopslaan');
        $(this).parents(".column").sortable('enable');
        $.mask.close();
        var id = $(this).parents(".widget").attr("rel");
        updateWidgetSettings(id, "");
        $("div.widget[rel=" + id + "] .ui-icon").fadeIn(500)
        return false;
    });

    $(".btn_reset").live("click", function () {
        trackPage('event.widget.' + $(this).attr("rel") + '.bewerkenannuleren');
        $(this).parents(".column").sortable('enable');
        $.mask.close();
        $(this).parents(".portlet-edit").slideUp().animate({
            marginBottom: "7px"
        }, { duration: 500, queue: false });
        var id = $(this).parents(".widget").attr("rel");
        if (id != 0) {
            $.get("/ajax/getWidgetEditContentHtml.aspx", { id: id }, function (data) {
                if (data != "false") {
                    $(".widget[rel=" + id + "]").find(".editContentHtml").html(data);
                }
            });
        }
        $("div.widget[rel=" + id + "] .ui-icon").fadeIn(500)
        $("div.widget[rel=" + id + "] div.portlet-edit").html("");
        return false;
    });

    ///end UPDATE WIDGET SETTINGS -----------------------------------------------------------------------------

    ///start FUNCTIONS -----------------------------------------------------------------------------

    function updateWidgetPositions() {
        var randomnumber = Math.floor(Math.random() * 100001);
        $.get("/ajax/getJSONPositions.aspx?randomnumber=" + randomnumber, {}, function (data) {
            if (data != "false") {
                var JSONPositions = JSON.parse(data); //parse json string to objects
                var jsonString = "";

                for (i = 0; i < JSONPositions.Column.length; i++) {
                    JSONPositions.Column[i].Widgets.length = 0;
                    var j = 0;
                    $("#cntCol" + (i + 1) + " .widget").each(function () {
                        var JSONWidget = new Object();
                        JSONWidget.Id = parseInt($(this).attr("rel"));
                        JSONPositions.Column[i].Widgets[j] = JSONWidget;
                        j += 1;
                    });
                }
                jsonString = JSON.stringify(JSONPositions); //stringify objects to json string
                $.post("/Ajax/saveJSONPositions.aspx?randomnumber=" + randomnumber,
                    {
                        json: jsonString
                    },
                    function (data) {
                        trackPage('event.widget.' + $(this).attr("rel") + '.verplaatst');
                    });
            }
        });
    }

    function updateWidgetSettings(id, action) {
        var type = getWidgetType(id);
        var randomnumber = Math.floor(Math.random() * 100001);
        $.get("/ajax/getJSONWidgetProperties.aspx?randomnumber=" + randomnumber, { id: id, type: type, user: false }, function (data) {
            if (data != "false") {
                var JSONWidgetProperties = JSON.parse(data); //parse json string to objects
                var collapsed = "";
                var closed = "";
                var jsonString = "";
                if (action == "") {
                    for (i = 0; i < JSONWidgetProperties.Settings.length; i++) {
                        var JSONWidgetSetting = JSONWidgetProperties.Settings[i];
                        if (JSONWidgetSetting.Type == "checkbox") {
                            var checkboxval = $(".widget[rel=" + id + "] input#" + JSONWidgetSetting.Id).is(":checked");
                            if (checkboxval == undefined || checkboxval == null) {
                                checkboxval = JSONWidgetSetting.DefaultValue;
                            }
                            JSONWidgetSetting.Value = checkboxval.toString();
                        }
                        else if (JSONWidgetSetting.Type == "select") {
                            var selectval = $(".widget[rel=" + id + "] select#" + JSONWidgetSetting.Id).val();
                            $(".widget[rel=" + id + "] select#" + JSONWidgetSetting.Id).fadeOut(5000);
                            var selecttext = $(".widget[rel=" + id + "] select#" + JSONWidgetSetting.Id + " option[value=" + selectval + "]").text();
                            var selectstr = "";
                            if (selectval == undefined || selectval == null || selecttext == undefined || selecttext == null) {
                                selectstr = JSONWidgetSetting.DefaultValue.toString();
                            }
                            else {
                                selectstr = selectval + "][" + selecttext;
                            }
                            JSONWidgetSetting.Value = selectstr;
                        }
                    }
                    jsonString = JSON.stringify(JSONWidgetProperties); //stringify objects to json string
                }
                else {
                    if (action == "collapse") {
                        collapsed = "true";
                    }
                    else if (action == "open") {
                        collapsed = "false";
                    }
                    if (action == "hide") {
                        closed = "true";
                    }
                    else if (action == "show") {
                        closed = "false";
                    }
                }
                //alert("collapsed = " + collapsed + ", closed = " + closed + ", json = " + jsonString);
                $.post("/Ajax/saveJSONWidgetProperties.aspx?randomnumber=" + randomnumber,
                    {
                        id: id,
                        json: jsonString,
                        collapsed: collapsed,
                        closed: closed
                    },
                    function (data) {
                        if (data == "true") {
                            $("div.widget[rel=" + id + "] div.portlet-edit").slideUp("slow").animate({
                                marginBottom: "7px"
                            }, { duration: 500, queue: false });
                            if (action != "hide") {
                                updateWidgetContent(id, true);
                            }
                            else {
                                $(".widget[rel=" + id + "] .portlet-content").html('<div class="widget-content"><div style="background:url(/images/img_loading_horizontal.gif) no-repeat scroll 50% 50% transparent; height: 50px; width: 320px;"></div></div>');
                            }
                            trackPage('event.widget.' + $(this).attr("rel") + '.gewijzigd');
                            $("div.widget[rel=" + id + "] div.portlet-edit").html("");
                        }
                        else {
                            $("div.widget[rel=" + id + "] div.portlet-edit").html("");
                        }
                    });
            }
        });
    }

    function updateWidgetContent(id, update) {
        var type = getWidgetType(id);
        var randomnumber = 0;
        if (update) {
            randomnumber = Math.floor(Math.random() * 100001); //only send randomnumber on update, not on initial load (cache = faster)
        }
        $.get("/ajax/updateWidgetContent.aspx?randomnumber=" + randomnumber, { id: id, type: type }, function (data) {
            if (data != "false") {
                $("div.widget[rel=" + id + "] div.widget-content").hide();
                $("div.widget[rel=" + id + "] div.portlet-edit:visible").slideUp("slow").animate({
                    marginBottom: "7px"
                }, { duration: 500, queue: false });
                $(this).oneTime(1, function () {

                    $("div.widget[rel=" + id + "] div.widget-content").html(data).show()

                    $("div.widget[rel=" + id + "] div.portlet-header span.ui-icon").fadeIn();

                    if (id == "3") {
                        updateEvents(); //exception for Event-widget
                    }
                    else if (id == "4") {
                        var twitterwidget = $("#twitterwidget-list").html();
                        var i = twitterwidget.indexOf("</script>");
                        if (i == -1)
                            i = 940;
                        twitterwidget = twitterwidget.substr(i + 9, twitterwidget.length);
                        $("#twitterList").append(twitterwidget);
                    }
                    else if (id == "12") {
                        var twitterwidget = $("#twitterwidget-sailreport").html();
                        var i = twitterwidget.indexOf("</script>");
                        if (i == -1)
                            i = 900;
                        twitterwidget = twitterwidget.substr(i + 9, twitterwidget.length);
                        $("#twitterSailreport").append(twitterwidget);
                    }
                });
            }
        });
    }

    function getWidgetType(id) {
        var type = "";
        switch (id) {
            case "1": type = "news";
                break;
            case "2": type = "blog";
                break;
            case "3": type = "news";
                break;
            case "4": type = "twitter";
                break;
            case "5": type = "search";
                break;
            case "6": type = "photoalbum";
                break;
            case "7": type = "tv";
                break;
            case "8": type = "news";
                break;
            case "9": type = "newsletter";
                break;
            case "10": type = "news";
                break;
            case "11": type = "news";
                break;
            case "12": type = "nrofitems";
                break;
            case "13": type = "news";
                break;
            case "14": type = "editorial";
                break;
            case "15": type = "news";
                break;
            case "16": type = "news";
                break;
            case "17": type = "news";
                break;
            default:
                break;
        }
        return type;
    }


    ///end FUNCTIONS -----------------------------------------------------------------------------

    ///start INIT -----------------------------------------------------------------------------

    $(".widget:visible").each(function () {
        var widgetid = $(this).attr("rel");
        updateWidgetContent(widgetid, true);
    });

    ///end INIT -----------------------------------------------------------------------------

    //#endregion

    //#region WIDGETS CONTENT

    $("#frmFlickrUploadPhoto").validate({
        rules: {
            Picture: "required",
            Title: "required"
        }
    });

    $("form#frmFlickrUploadPhoto").submit(function () {
        if ($("form#frmFlickrUploadPhoto").valid()) {
            true;
        };
    });

    //Send newsletter form
    $("#frmNewsletter #Submit").live("click", function () {
        if ($("#frmNewsletter #Name").val() == "Je naam")
            $("#frmNewsletter #Name").val("");
        if ($("#frmNewsletter #Email").val() == "Je e-mailadres")
            $("#frmNewsletter #Email").val("");

        $("#frmNewsletter").validate({
            rules: {
                Name: "required",
                Email: {
                    required: true,
                    email: true
                },
                Newsletter: "required"
            }
        });

        $("#frmNewsletter .checkboxLabel").css("color", "#000");
        if ($("#frmNewsletter").valid()) {
            $("#frmNewsletter #fsSubmit").fadeOut();
            var randomnumber = Math.floor(Math.random() * 100001);
            var send = $.post("/Ajax/saveNewsletter.aspx?randomnumber=" + randomnumber,
                        {
                            Name: $("#Name").val(),
                            Email: $("#Email").val()
                        },
                        function (data) {
                            if (data == "true") {
                                trackPage('event.nieuwsbrief.aanmelden');

                                $("#frmNewsletter fieldset").each(function () {
                                    if ($(this).attr("id") != "fsThanks") {
                                        $(this).remove();
                                    }
                                    else {
                                        $(this).fadeIn();
                                    }
                                });
                            }
                            else {
                                $("#frmNewsletter #fsSubmit").fadeIn();
                                $("#frmNewsletter #fsError").fadeIn();
                            }
                        }
                    );
            return false;
        }
        else {
            if (!$("#frmNewsletter #Newsletter").valid()) {
                $("#frmNewsletter .checkboxLabel").css("color", "#E3003B");
            }
        }
    });

    //Switch tv tabs
    $(".modTV a#tvSailreport").live("click", function () {
        $("#cntTVTopzeilen").hide();
        $("#cntTVSailreport").fadeIn();
        $(this).removeClass("current");
        $("a#tvTopzeilen").addClass("current");
        trackPage('event.widget.7.tab-sailreport');
        return false;
    });

    $(".modTV a#tvTopzeilen").live("click", function () {
        $("#cntTVSailreport").hide();
        $("#cntTVTopzeilen").show();
        $(this).removeClass("current");
        $("a#tvSailreport").addClass("current");
        $("#zeilMovieIframe").attr("src", "http://www.watersportverbond.tv/mini/MiniPlayer.aspx?categorieplayer=251");
        trackPage('event.widget.7.tab-topzeilen');
        return false;
    });

    //#endregion

    //#region CONTACT

    $("#frmContact").validate({
        rules: {
            Naam: "required",
            Emailadres: {
                required: true,
                email: true
            },
            Onderwerp: "required",
            Uw_vraag_of_opmerking: "required"
        }
    });

    $("#vraag").inputlimitor({
        limit: 1000,
        remText: "Aantal tekens: %n",
        boxId: "tekens",
        boxAttach: false,
        limitText: "",
        remTextHideOnBlur: false
    });

    //#endregion


    //#region REACTION

    $("#frmReaction").validate({
        rules: {
            User: "required",
            Type: "required",
            Id: "required",
            Reaction: "required",
            Captcha: "required"
        }
    });

    $("#Reaction").inputlimitor({
        limit: 300,
        remText: "Aantal tekens: %n (max. 300)",
        boxId: "tekens",
        boxAttach: false,
        limitText: "",
        remTextHideOnBlur: false
    });

    //Send reaction
    $("#frmReaction").find("#Submit").click(function () {
        var c = $("#Captcha").val();
        var nr1 = parseInt($("#nr1").text());
        var nr2 = parseInt($("#nr2").text());
        if ($("#frmReaction").valid() && (nr1 + nr2).toString() == c) {
            $("#frmReaction #Submit").fadeOut();
            var randomnumber = Math.floor(Math.random() * 100001);
            var send = $.post("/Ajax/saveReaction.aspx?randomnumber=" + randomnumber,
                        {
                            User: $("#User").val(),
                            Type: $("#Type").val(),
                            Id: $("#Id").val(),
                            Reaction: $("#Reaction").val(),
                            Anonymous: $("#Anonymous").val(),
                            Captcha: $("#Captcha").val()
                        },
                        function (data) {
                            if (data == "true") {

                                var pagetrackertype = $("#Type").val();
                                if (pagetrackertype == "news") {
                                    pagetrackertype = "nieuws";
                                }
                                else if (pagetrackertype == "event") {
                                    pagetrackertype = "events";
                                }
                                else if (pagetrackertype == "blog") {
                                    pagetrackertype = "blogs";
                                }

                                trackPage('event.' + pagetrackertype + '.reactie');

                                $("#frmReaction").fadeOut();
                                $("#cntReactionThanks").fadeIn();
                                $(this).oneTime(3000, function () {
                                    var currenturl = $("#currenturl").val();
                                    if (currenturl != "" && currenturl != undefined)
                                        top.document.location = currenturl;
                                    else
                                        top.document.location = "/";
                                });
                            }
                            else {
                                $("#frmReaction #Submit").fadeIn();
                                $("#cntReactionError").fadeIn();
                            }
                        }
                    );
        }
        else {
            if ((nr1 + nr2).toString() != c) {
                $("#Captcha").addClass("error");
            }
        }
        return false;
    });

    //#endregion


    //#region ACCOUNT

    $("#frmMyAccount").validate({
        rules: {
            Password: {
                required: true,
                minlength: 8
            },
            Password2: {
                equalTo: "#Password"
            },
            Sex: "required",
            Name: "required",
            Email: {
                required: true,
                email: true
            },
            DateOfBirth_Day: "required",
            DateOfBirth_Month: "required",
            DateOfBirth_Year: "required",
            SailorType: "required",
            Experience: "required"
        }
    });

    $("#frmMyAccount").find("#Submit").live("click", function () {
        var checkedSailortype = $("input.SailorType:checked").length;
        if ($("input.SailorType:checked").length == 0) {
            $("span#SailorTypeError").show();
        }
        else {
            $("span#SailorTypeError").hide();
        }

        if ($("#frmRegister").valid()) {
            return true;
        }
        else {
            return false;
        }
    });

    //#endregion

    $('iframe[src*="spreadsheets.google.com"]').each(function () {
        var src = $(this).attr("src");
        $(this).attr("src", src + "&hl=nl");
        $(this).attr("style", "width: 614px !important;");
    });

});

//#region NON-DOCUMENT READY FUNCTIONS

function confirm(msg, callback) {
    $('#confirm').jqmShow().find('p.jqmConfirmMsg').html(msg).end().find('#confirmNo').click(function() {
        $('#confirm').jqmHide();
    }).focus().parent().find('#confirmYes').click(function() {
        if ($(this).hasClass('yes')) {
            (typeof callback == 'string') ? window.location.href = callback : callback();
        }
        $('#confirm').jqmHide();
    });
}

function updateEvents() {
  var randomnumber = Math.floor(Math.random() * 100001);
  var eventnewstypes = $("#eventNewsTypes").val() != undefined ? $("#eventNewsTypes").val() : "";
  $.ajax({
      url: "/Ajax/GetEvents.aspx?randomnumber=" + randomnumber,
      data: "newstypes=" + eventnewstypes,
      dataType: "json",
      success: function(calendarEvents) {
          if (calendarEvents.length > 0) {
              $("#datepicker").datepicker({
                  // [rows, columns] if you want to display multiple calendars.
                  //numberOfMonths: [1, 1],
                  showCurrentAtPos: 0,
                  beforeShowDay: function(date) {
                      for (i = 0; i < calendarEvents.length; i++) {
                          if (date.getMonth() == calendarEvents[i][0] - 1
                      && date.getDate() == calendarEvents[i][1]
                      && date.getFullYear() == calendarEvents[i][2]) {
                              //[disable/enable, class for styling appearance, tool tip]
                              return [true, "yellow", "" + calendarEvents[i][3] + ""];
                          }
                      }
                      return [false, ""]; //enable all other days
                  },
                  onSelect: function(dateText, inst) {
                      var selectedDay = parseInt(dateText.split('/')[0]);
                      var name = $("#datepicker").find("a:contains('" + selectedDay + "')").parent().attr("title");
                      if (name != "") {
                          $("#nextEvent").fadeOut();
                          $("#selectedEvent").fadeOut();
                          var randomnumber = Math.floor(Math.random() * 100001);
                          $.ajax({
                              url: "/Ajax/GetEvent.aspx?randomnumber=" + randomnumber,
                              data: "name=" + name,
                              dataType: "json",
                              success: function(calendarEvent) {
                                  $("#selectedEvent .eventNext").text("Geselecteerd event: " + calendarEvent[0][0]);
                                  $("#selectedEvent h3").text(calendarEvent[0][1]);
                                  $("#selectedEvent .contentshorthtml").text(calendarEvent[0][2] + "...");
                                  $("#selectedEvent a").attr("href", "/events/" + name);
                                  $("#selectedEvent").fadeIn("slow");
                              }
                          });
                      }
                  }

              });
          }
          else {
              $("#datepicker").datepicker();
          }
      }
  });
}


//image preloader
(function($) {
    var cache = [];
    // Arguments are image paths relative to the current page.
    $.preLoadImages = function() {
        var args_len = arguments.length;
        for (var i = args_len; i--; ) {
            var cacheImage = document.createElement('img');
            cacheImage.src = arguments[i];
            cache.push(cacheImage);
        }
    }
})(jQuery)

//#endregion


