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 = "<div><span class=\"on\" id=\"homepageContainerNav0\">&nbsp;</span>";
  for (var i = 1; i < g_oHomepage.iFeatureCount; i++) {
    sHTML += "<span id=\"homepageContainerNav" + i +"\">&nbsp;</span>"
  }
  $("#homepageContainer").append(sHTML + "<div><span onclick=\"FeatureShift(false);\" onmouseover=\"FeaturePreview(false, true);\" onmouseout=\"FeaturePreview(false, false);\">&laquo;&nbsp;Previous</span>&nbsp;/&nbsp;<span onclick=\"FeatureShift(true);\" onmouseover=\"FeaturePreview(true, true);\" onmouseout=\"FeaturePreview(true, false);\">Next&nbsp;&raquo;</span></div></div>");
  $("#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) || (iClick == g_oHomepage.iCurrent + 1 - g_oHomepage.iFeatureCount)) {
        if (iClick == g_oHomepage.iCurrent + 1) {
          FeatureShift(true);
          return;
        }
        //if ((iClick == g_oHomepage.iCurrent - 1) || (iClick == g_oHomepage.iCurrent - 1 + g_oHomepage.iFeatureCount)) {
        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;
    }
  });
}

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) {
  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");
  }
}

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) {
            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"
            }
          }
        }
      }
    }
  }
};
