var aImage = [];
var g_oHomepage = {
    iCurrent: 0,
    bAllowScroll: true,
    iPosition: 0,
    iFeatureCount: 1,
    iFeatureWidth: 971,
    iPreviewSpeed: 350,
    iSlideSpeed: 450
};

// google analytics
try {
    var pageTracker = _gat._getTracker("UA-462468-3");
    pageTracker._trackPageview();
} catch(err) {}

// break out of frames
if (top.location!= self.location) {
    top.location = self.location.href
}

function CacheImage(sFilename) {
    aImage.push(new Image());
    aImage[aImage.length - 1].src = sFilename;
}

function FeatureInit() {
    g_oHomepage.iFeatureCount = $("#homepageFeatures li").size();
    g_oHomepage.iPosition = parseInt($("#homepageFeatures").css("left"));

    // draw dots
    var sHTML = "<span class=\"on\" id=\"homepageContainerNav0\">&nbsp;</span>";
    for (var i = 1; i < g_oHomepage.iFeatureCount; i++) {
        sHTML += "<span id=\"homepageContainerNav" + i +"\">&nbsp;</span>"
    }
    $(".homepageFeatureDots").html(sHTML);

    // draw prev / next
    $(".homepageFeatureLinks").html("<span onclick=\"FeatureShift(false);\" onmouseover=\"FeaturePreview(false, true);\" onmouseout=\"FeaturePreview(false, false);\" title=\"Tip: press the left and right cursor keys instead of clicking here.\">&laquo;&nbsp;Previous</span>&nbsp;/&nbsp;<span onclick=\"FeatureShift(true);\" onmouseover=\"FeaturePreview(true, true);\" onmouseout=\"FeaturePreview(true, false);\" title=\"Tip: press the left and right cursor keys instead of clicking here.\">Next&nbsp;&raquo;</span>");

    // click handler
    $("#homepageContainer div span").click(function() {
        if (g_oHomepage.bAllowScroll == true) {
            var iClick = parseInt($(this).attr("id").substr(20));
            if ((!isNaN(iClick)) && (iClick != g_oHomepage.iCurrent)) {
                // adjacent shifts
                if (iClick == g_oHomepage.iCurrent + 1) {
                    FeatureShift(true);
                    return;
                }
                if (iClick == g_oHomepage.iCurrent - 1) {
                    FeatureShift(false);
                    return;
                }

                // non-adjacent shifts
                g_oHomepage.bAllowScroll = false;
                var oFeatures = $("#homepageFeatures");
                if (g_oHomepage.iCurrent > iClick) {
                    // go left
                    for (var i = g_oHomepage.iFeatureCount; i > 2; i--) {
                        oFeatures.find("li:last").clone().prependTo(oFeatures);
                        oFeatures.find("li:last").remove();
                        g_oHomepage.iPosition -= g_oHomepage.iFeatureWidth;
                        oFeatures.css("left", g_oHomepage.iPosition);
                    }
                    g_oHomepage.iPosition += ((g_oHomepage.iCurrent - iClick) * g_oHomepage.iFeatureWidth);
                    oFeatures.animate({ left: g_oHomepage.iPosition + "px" },
                                      (g_oHomepage.iSlideSpeed + (200 * (g_oHomepage.iCurrent - iClick))),
                                      "swing",
                                      function() {
                        if (parseInt(oFeatures.css("left")) == 0) {
                            oFeatures.find("li:last").clone().prependTo(oFeatures);
                            oFeatures.find("li:last").remove();
                            g_oHomepage.iPosition -= g_oHomepage.iFeatureWidth;
                            oFeatures.css("left", g_oHomepage.iPosition);
                        }
                        while (parseInt(oFeatures.css("left")) < -g_oHomepage.iFeatureWidth) {
                            oFeatures.find("li:first").clone().appendTo(oFeatures);
                            oFeatures.find("li:first").remove();
                            g_oHomepage.iPosition += g_oHomepage.iFeatureWidth;
                            oFeatures.css("left", g_oHomepage.iPosition);
                        }
                        g_oHomepage.bAllowScroll = true;
                    });
                } else {
                    // go right
                    oFeatures.find("li:first").clone().appendTo(oFeatures);
                    oFeatures.find("li:first").remove();
                    g_oHomepage.iPosition += g_oHomepage.iFeatureWidth;
                    oFeatures.css("left", g_oHomepage.iPosition);
                    g_oHomepage.iPosition -= ((iClick - g_oHomepage.iCurrent) * g_oHomepage.iFeatureWidth);
                    oFeatures.animate({ left: g_oHomepage.iPosition + "px" },
                                      (g_oHomepage.iSlideSpeed + (200 * (iClick - g_oHomepage.iCurrent))),
                                      "swing",
                                      function() {
                        while (parseInt(oFeatures.css("left")) < -g_oHomepage.iFeatureWidth) {
                            oFeatures.find("li:first").clone().appendTo(oFeatures);
                            oFeatures.find("li:first").remove();
                            g_oHomepage.iPosition += g_oHomepage.iFeatureWidth;
                            oFeatures.css("left", g_oHomepage.iPosition);
                        }
                        g_oHomepage.bAllowScroll = true;
                    });
                }
                g_oHomepage.iCurrent = iClick;
                $("#homepageContainer div span").removeClass("on");
                $("#homepageContainer div span:eq(" + g_oHomepage.iCurrent + ")").addClass("on");
            }
        }
    });

    // arrow keys
    $(document).bind("keydown", function(e) {
        switch (e.charCode || e.keyCode) {
            case 37: // left
                FeatureShift(false);
                break;
            case 39: // right
                FeatureShift(true);
                break;
        }
    });

    // start counter
    iHomepageTimer = setTimeout("FeatureShiftCountdown()", 14000);
}

function FeaturePreview(bRight, bStartPreview) {
    if (g_oHomepage.bAllowScroll == true) {
        var oFeatures = $("#homepageFeatures");
        oFeatures.stop();

        if (bStartPreview == true) {
            if (bRight == true) {
                oFeatures.animate({ left: (g_oHomepage.iPosition - 110) + "px" }, g_oHomepage.iPreviewSpeed, "swing" );
            } else {
                oFeatures.animate({ left: (g_oHomepage.iPosition + 110) + "px" }, g_oHomepage.iPreviewSpeed, "swing" );
            }
        } else {
            oFeatures.animate({ left: g_oHomepage.iPosition + "px" }, g_oHomepage.iPreviewSpeed, "swing" );
        }
    }
}

function FeatureShift(bRight) {
    clearTimeout(iHomepageTimer);
    $(".homepageFeatureTimer img").fadeOut(500);

    if (g_oHomepage.bAllowScroll == true) {
        g_oHomepage.bAllowScroll = false;
        var oFeatures = $("#homepageFeatures");

        // do scroll
        if (bRight == true) {
            g_oHomepage.iPosition -= g_oHomepage.iFeatureWidth;
            g_oHomepage.iCurrent++;
            oFeatures.animate({ left: g_oHomepage.iPosition + "px" }, g_oHomepage.iSlideSpeed, "swing", function() {
                oFeatures.find("li:first").clone().appendTo(oFeatures);
                oFeatures.find("li:first").remove();
                g_oHomepage.iPosition += g_oHomepage.iFeatureWidth;
                oFeatures.css("left", g_oHomepage.iPosition);
                g_oHomepage.bAllowScroll = true;
            });
        } else {
            g_oHomepage.iPosition += g_oHomepage.iFeatureWidth;
            g_oHomepage.iCurrent--;
            oFeatures.animate({ left: g_oHomepage.iPosition + "px" }, g_oHomepage.iSlideSpeed, "swing", function() {
                oFeatures.find("li:last").clone().prependTo(oFeatures);
                oFeatures.find("li:last").remove();
                g_oHomepage.iPosition -= g_oHomepage.iFeatureWidth;
                oFeatures.css("left", g_oHomepage.iPosition);
                g_oHomepage.bAllowScroll = true;
            });
        }

        // update guide
        if (g_oHomepage.iCurrent < 0) {
            g_oHomepage.iCurrent += g_oHomepage.iFeatureCount;
        } else if (g_oHomepage.iCurrent >= g_oHomepage.iFeatureCount) {
            g_oHomepage.iCurrent -= g_oHomepage.iFeatureCount;
        }
        $("#homepageContainer div span").removeClass("on");
        $("#homepageContainer div span:eq(" + g_oHomepage.iCurrent + ")").addClass("on");
    }
    iHomepageTimer = setTimeout("FeatureShiftCountdown()", 9000);
}

function FeatureShiftCountdown() {
    clearTimeout(iHomepageTimer);

    // display image
    $(".homepageFeatureTimer img").fadeIn(2500);

    // start countdown again
    iHomepageTimer = setTimeout("FeatureShift(true)", 3000);
}

function GalleryInit() {
    $("#thumbnails img").load(function() { $(this).css("background-image", "none").fadeTo(500, 0.75) });
    $("#gallery img").load(function() {
        $(this).stop().fadeIn(300, function() {
            $(this).fadeTo(50, 1); // hack alert: prevents only partial fade-in bug somewhere in jQuery or the browsers
            bScrolling = false;
        });
        $("#photoinfo").stop().fadeIn(300, function() {
          $(this).fadeTo(50, 1); // hack, as above
        });
    });
    if (iCurrImage > 0) { $("#thumbnailprev").addClass("on") };
    if (iCurrImage < (aGallery.length - 1)) { $("#thumbnailnext").addClass("on") };

    // mouse handlers
    $("#thumbnails img")
        .click(function() { GalleryShow($(this).parent().children("img").index(this)) })
        .mouseover(function() { $(this).stop().fadeTo(50, 1) })
        .mouseout(function() { $(this).stop().fadeTo(500, 0.75) });
    $("#thumbnailprev")
        .click(function() { GalleryShow(iCurrImage - 1) })
        .mouseover(function() { GalleryPreview(true, true) })
        .mouseout(function() { GalleryPreview(true, false) });
    $("#thumbnailnext")
        .click(function() { GalleryShow(iCurrImage + 1) })
        .mouseover(function() { GalleryPreview(false, true) })
        .mouseout(function() { GalleryPreview(false, false) });

    // load remaining thumbs
    GalleryThumbnails();

    // arrow keys
    $(document).bind("keydown", function(e) {
        switch (e.charCode || e.keyCode) {
            case 37: // left
                GalleryShow(iCurrImage - 1);
                break;
            case 39: // right
                GalleryShow(iCurrImage + 1);
                break;
        }
    });
}

function GalleryPreview(bPrevious, bActive) {
    var iJump = 87;
    var iTargetThumbPosition = (187 - (iCurrImage * 87));
    if (bPrevious == true) {
        if (bActive == true) {
            if ((bScrolling != true) && (iCurrImage > 0)) {
                $("#thumbnails").stop().animate({ left: (iTargetThumbPosition + iJump) + "px" }, 250);
            }
        } else {
            if (bScrolling != true) {
                $("#thumbnails").stop().animate({ left: iTargetThumbPosition + "px" }, 250);
            }
        }
    } else {
        if (bActive == true) {
            if ((bScrolling != true) && (iCurrImage < aGallery.length - 1)) {
                $("#thumbnails").stop().animate({ left: (iTargetThumbPosition - iJump) + "px" }, 250);
            }
        } else {
            if (bScrolling != true) {
                $("#thumbnails").stop().animate({ left: iTargetThumbPosition + "px" }, 250);
            }
        }
    }
}

function GalleryShow(iTargetImage) {
    if ((iTargetImage < 0) || (iTargetImage >= aGallery.length)) {
        return;
    }
    if (iTargetImage != iCurrImage) {
        bScrolling = true;

        // slide thumbnails
        iThumbPosition = (187 - (iTargetImage * 87));
        var iScrollDistance = Math.abs(iCurrImage - iTargetImage);
        if (iScrollDistance > 10) {
            iScrollDistance = 10;
        }
        $("#thumbnails").stop().animate({ left: iThumbPosition + "px" }, (250 + (iScrollDistance * 60)), function() {
            bScrolling = false;
        });
        iCurrImage = iTargetImage;
        $("#thumbnailcurrent span").text(iCurrImage + 1);

        // show picture
        $("#photoinfo").stop().fadeOut(150);
        $("#gallery img").stop().fadeOut(150, function() {
            // image
            $(this).attr("width", aGallery[iCurrImage].iWidth)
                   .attr("height", aGallery[iCurrImage].iHeight)
                   .attr("src", aGallery[iCurrImage].sSRC)
                   .attr("alt", aGallery[iCurrImage].sTitle);

            // title
            $("#photoTitle").html(aGallery[iCurrImage].sTitle);

            // date
            $("#photoDate").html(aGallery[iCurrImage].sDate);

            // description (if applicable)
            if (aGallery[iCurrImage].sDesc.length > 0) {
                $("#photoDesc").html(aGallery[iCurrImage].sDesc).css("display", "block");
            } else {
                $("#photoDesc").css("display", "none");
            }

            // social networking
            var sURL = "http://joncom.be/gallery/" + escape(sSetURL) + "/" + (iCurrImage + 1);
            var sTitle = escape("Jon Combe | Photo Gallery | " + sSetName + " | " + aGallery[iCurrImage].sTitle);
            $(".sn_delicious").parent().find("a").attr("href", ("http://del.icio.us/post?url=" + sURL + "&title=" + sTitle));
            $(".sn_digg").parent().find("a").attr("href", ("http://digg.com/submit?url=" + sURL + "&title=" + sTitle));
            $(".sn_facebook").parent().find("a").attr("href", ("http://www.facebook.com/sharer.php?u=" + sURL));
            $(".sn_reddit").parent().find("a").attr("href", ("http://reddit.com/submit?url=" + sURL + "&title=" + sTitle));
            $(".sn_stumbleupon").parent().find("a").attr("href", ("http://www.stumbleupon.com/submit?url=" + sURL + "&title=" + sTitle));
            $(".sn_twitter").parent().find("a").attr("href", ("http://twitter.com/?status=" + sURL + "%20Interesting%20photo%20from%20%40joncombe"));

            // flickr url
            if (aGallery[iCurrImage].sFlickrURL.length > 0) {
                $("#photoFlickr a").attr("href", aGallery[iCurrImage].sFlickrURL).parent().show();
            } else {
                $("#photoFlickr").hide();
            }
            $("#photoURL span").text("http://joncom.be/gallery/" + sSetURL + "/" + (iCurrImage + 1));
        });

        // show thumbnail navigation
        if (iCurrImage > 0) {
            $("#thumbnailprev").addClass("on");
        } else {
            $("#thumbnailprev").removeClass("on");
        };
        if (iCurrImage < (aGallery.length - 1)) {
            $("#thumbnailnext").addClass("on");
        } else {
            $("#thumbnailnext").removeClass("on");
        };

        // load other thumbs
        GalleryThumbnails();
    }
}

function GalleryThumbnails() {
    var aThumbnails = $("#thumbnails img");
    for (var i = Math.max(iCurrImage - 4,0); i < Math.min(iCurrImage + 5, aThumbnails.size()); i++) {
        aThumbnails[i].src = aGallery[i].sThumbSRC;
    }
    for (var i = Math.max(iCurrImage - 1,0); i < Math.min(iCurrImage + 2, aThumbnails.size()); i++) {
        if (i != iCurrImage) {
            // only cache new images
            var bFound = false;
            for (var ii = (aImage.length - 1); ii > -1; ii--) {
                if (aImage[ii].src == aGallery[i].sSRC) {
                    bFound = true;
                    break;
                }
            }
            if (bFound != true) {
                CacheImage(aGallery[i].sSRC);
            }
        }
    }


}

function Twitter(aTwitter) {
    var aHTML = [];
    $.each(aTwitter.results, function(i) {
        aHTML.push("<li class=\"twitter" + i + "\">" +
                       "<p>" + TwitterFormat(this.text) + "</p>" +
                       "<div>" + TwitterTime(this.created_at) + "</div>" +
                   "</li>");
    });
    $("#twitter").html(aHTML.join(""));
}

function TwitterFormat(sTweet) {
    var aURL = sTweet.match(/(ftp|http|https|file):\/\/[\S]+(\b|$)/gi);
    if (aURL) {
        for (var i = 0; i < aURL.length; i++) {
            if (aURL[i].substr(0,16) == "http://joncom.be") {
                sTweet = sTweet.replace(aURL[i], '<a href="' + aURL[i] + '">' + aURL[i] + '</a>');
            } else {
                sTweet = sTweet.replace(aURL[i], '<a href="' + aURL[i] + '" target="_blank">' + aURL[i] + '</a>');
            }
        }
    }
    var aRT = sTweet.match(/@[\S]+(\b|$)/gi);
    if (aRT) {
        for (var i = 0; i < aRT.length; i++) {
            sTweet = sTweet.replace(aRT[i], '<a href="http://twitter.com/' + aRT[i].substr(1) + '" target="_blank">' + aRT[i] + '</a>');
        }
    }
    return sTweet;
}

function TwitterWide(aTwitter) {
    $("#twitterwide td.middle").html(TwitterFormat(aTwitter.results[0].text));
    $("#twitterwide").fadeIn();
}

function TwitterTime(C) {
    var A=Date.parse(C);
    var D=(arguments.length>1)?arguments[1]:new Date();
    var E=parseInt((D.getTime()-A)/1000);
    E=E+(D.getTimezoneOffset()*60);
    if (E<60) {
        return "less than a minute ago"
    } else {
        if (E<120) {
            return "about a minute ago"
        } else {
            if (E<(60*60)) {
                return(parseInt(E/60)).toString()+" minutes ago"
            } else {
                if (E<(120*60)) {
                    return "about an hour ago"
                } else {
                    if (E<(24*60*60)) {
                        return "about " + (parseInt(E/3600)).toString()+" hours ago"
                    } else {
                        if (E<(48*60*60)) {
                            return "1 day ago"
                        } else {
                            return (parseInt(E/86400)).toString()+" days ago"
                        }
                    }
                }
            }
        }
    }
};
