// Fade-in de volgende afbeelding
function headerImageNext()
{
    var current = $('#photos-wrapper img.current');
    var next = current.next();

    // Loop terug naar de eerste als we aan het einde zijn.
    if (next.length == 0)
    {
        next = $('#photos-wrapper img:first');
    }

    // Zet next boven aan, en current direct eronder
    next.css({opacity: 0.0});
    next.addClass('current');
    current.removeClass('current');
    current.addClass('prevcurrent');

    // Doe de fade-in
    next.animate({opacity: 1.0}, 1500, function ()
    {
        current.removeClass('prevcurrent');
    });
}


if (!photos)
{
    var photos = [
        /*"02.jpg",*/
        "04.jpg",
        "05.jpg",
        /*"06.jpg",*/
        /*"07.jpg",*/
        "10.jpg",
        /*"11.jpg",*/
        "12.jpg",
        "13.jpg",
        "14.jpg",
        /*"15.jpg",*/
        "16.jpg",
        /*"17.jpg"*/
        "18.jpg",
        "01.jpg"
    ];
}

// Voeg alle afbeeldingen toe aan photos-wrapper en begin met het faden, de plaatjes worden in
// verschillende fasen ingeladen om te zorgen dat ze niet nog bezig zijn met laden tijdens
// het faden..
function startHeaderFade()
{
    var wrapper = $("#photos-wrapper");

    if (!photos || !(photos.length > 0) || !wrapper.length  ) return;

    if (photos.length == 1)
    {
        wrapper.append('<img class="current" src="images/photos/'+photos[0]+'" alt="">');
    }
    else
    {
        // Get random start index that falls in [0, photos.length-1]
        var startIndex = Math.floor(Math.random() * photos.length);

        // Voeg alvast 1 plaatje toe dat meteen ingeladen en weergegeven kan worden..
        wrapper.append('<img class="current" src="images/photos/'+photos[startIndex%photos.length]+'" alt="">');

        // .. en de rest 3 seconden later...
        setTimeout(function () {
            for (var i = 1; i < photos.length; i++)
            {
                wrapper.append('<img src="images/photos/'+photos[(startIndex+i)%photos.length]+'" alt="">');
            }
        }, 3000);

        // ...en pas na 7 seconden beginnen we met faden
        setInterval("headerImageNext()", 7000);
    }
}

var maanden = [
    "januari",
    "februari",
    "maart",
    "april",
    "mei",
    "juni",
    "juli",
    "augustis",
    "september",
    "oktober",
    "november",
    "december",
];

// Parse twitter's created_at datestring, see
// http://stackoverflow.com/questions/3243546/problem-with-javascript-date-function-in-ie-7-returns-nan
function parseTwitterDate(str)
{
    var v = str.split(' ');
    return new Date(Date.parse(v[1]+" "+v[2]+", "+v[5]+" "+v[3]+" UTC"));
}

// Replace plain URLs in twitter text with <a> tags.
function replaceURLs(str)
{
    // Returns a link using given url, url may have some punctuation at the end
    function makeLink(url)
    {
        // TODO: filter out punctuation at the end..
        return "<a href=\""+url+"\">"+url+"</a>";
    }

    str = str.replace(/http:\/\/[^ ]+/i, makeLink);

    return str;
}

// Handige cookie-manipulatie functies, afkomstig van quirksmode.org. Er is ook een jquery cookie
// plugin, maar dit werkt net zo goed en is wat compacter..
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) { createCookie(name,"",-1); }



$(function ()
{
    
    // Dit werkt om een of andere reden niet in IE6 voor bepaalde pagina's...
    //$("body").pngFix();

    startHeaderFade();

    // Don't allow ugly focus decorations in FF and IE on menu headers
    // FIXME: hier is ook een CSS rule voor
    $("#menukaart h2").focus(function () { this.blur() });

    if ($("#tweetlist").length > 0 && tweets != null)
    {
        var count = 0;

        for (var p in tweets)
        {
            if (count > 4) break;

            var text = tweets[p].text;
            var source = tweets[p].source;
            var d = parseTwitterDate(tweets[p].created_at);
            var datum = d.getDate() + " " + maanden[d.getMonth()];

            // Can possibly use tweet entities instead of doing this myself, see
            // https://dev.twitter.com/docs/tweet-entities
            text = replaceURLs(text);

            $("#tweetlist").append(
                "<div class=\"tweet\"><div class=\"tweet-top\">"+
                    "<h3>"+datum+" via "+source+"</h3>"+
                    "<p>"+text+"</p></div>"+
                "<div class=\"tweet-bottom\"></div></div>"
            );

            count++;
        }
    }
    
    
    $("#menukaart").accordion({
        header: "h2",
        collapsible: true,
        animated: true,
        autoHeight: false
    });

    // Admin stuff

    $(".datepicker").datepicker();

    // Check of de geselecteerde datum een zaterdag is, en zo ja, verberg 12:00 - 17:00 in
    // #reservation-time.
    function updateReservationTimeOptions()
    {
        var d = new Date($("#reservation-date").val());
        //alert("date selected: "+d.getDay());
        
        if (d.getDay() == 6)
        {
            // Als de huidige geselecteerde tijd in de middag valt moet deze gedeselecteerd worden..
            if ($("#reservation-time option:selected").attr("class") == "reservation-time-afternoon")
            {
                $("#reservation-time").val("none");
            }

            $("#reservation-time .reservation-time-afternoon").hide();
        }
        else
            $("#reservation-time .reservation-time-afternoon").show();
    }

    // Ook bij het laden van de pagina checken (niet alleen bij onSelect datepicker event),
    // aangezien de page ook ge-refresht kan worden waarbij de waarde in het input veld blijft staan
    updateReservationTimeOptions();

    $("#reservation-date").datepicker({ minDate: "+1d", onSelect: updateReservationTimeOptions });

    if (window.mySettings !== undefined)
        $("textarea.markdown").markItUp(mySettings);


    // Disable datum textbox als 'gebruik huidige datum' box aangevinkt wordt
    $("input[name='useCurrentTime']").change(function ()
    {
        // FIXME: dit mag wel wat logischer gedaan worden..
        if ($(this).attr('checked') == true)
        {
            $("input.newsdate").attr("disabled", "disabled");
        }
        else
        {
            $("input.newsdate").removeAttr("disabled");
        }
    });


    var $menukaarttabs = $("#menukaarttabs").tabs();
    $("#menukaarttabs ul").show(); // Voorkomt een FUOC-achtig gebeuren

    // Bepaalde links moeten in de achtergrond verstuurd worden, en zorgen dat de pagina ververst
    // wordt:
    $("a.backgroundupdate").live("click",
        function (event)
        {
            $.ajax({
                url: $(this).attr("href"),
                success:
                    function (data)
                    {
                        if (data == "success")
                            //window.location.reload();
                            window.location = window.location.href; // Herladen zonder POSTDATA waarschuwing
                        else
                            alert("Er heeft zich een fout voorgedaan: " + data);
                    },
                cache: false
            });
            event.preventDefault();
        }
    );



    // Swap rows op de menukaart aan de kant van de client
    function handleMoveUp(data, link)
    {
        var thisRow = link.closest("tr.menuitem");
        var prevRow = thisRow.prev("tr.menuitem");
        if (thisRow.length == 1 && prevRow.length == 1) prevRow.insertAfter(thisRow);
    }

    function handleMoveDown(data, link)
    {
        var thisRow = link.closest("tr.menuitem");
        var nextRow = thisRow.next("tr.menuitem");
        if (thisRow.length == 1 && nextRow.length == 1) thisRow.insertAfter(nextRow);
    }

    $(".recordlist a.moveup").live("click",
        function (event)
        {
            var link = $(this);
            $.ajax({
                url: link.attr("href"),
                success: function (data) { if (data=="success") handleMoveUp(data, link); },
                cache: false
            });
            event.preventDefault();
        }
    );

    $(".recordlist a.movedown").live("click",
        function (event)
        {
            var link = $(this);
            $.ajax({
                url: link.attr("href"),
                success: function (data) { if (data=="success") handleMoveDown(data, link); },
                cache: false
            });
            event.preventDefault();
        }
    );

    // Animeer de impressie foto DIVs op mouse-over/out
    /*
    $("#impression-photos .photo").hover(
        function () { $(this).animate( {height: "300px" }, 200) },
        function () { $(this).animate( {height: "100px" }, 200) }
    );
    */
    $("#impression-photos .photo").mouseenter(
        function ()
        {
            $("#impression-photos .photo").stop(true);
            $("#impression-photos .photo").animate({height: "80px"}, 200);
            $(this).stop(true);
            $(this).animate({height:"300px"}, 200);
        }
    );


});

