preloadRemoteCounter = 0;
preloadLocalCounter = 0;
currentLargePhoto = 0;
cachedRemoteImage = [];
cachedLocalImage = [];
var slideshowTimer;
var lastThumbnailImage;
var fadeTimer;
var currentlyFading = false;
var maxThumbs = 9;

function centerVertical()
{
  var docHeight = 0;
  var pageHeight = 808 - 66;

  if (typeof(window.innerWidth) == 'number')
  {
    //Non-IE
    docHeight = window.innerHeight;
  }
  else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
  {
    //IE 6+ in 'standards compliant mode'
    docHeight = document.documentElement.clientHeight;
  }
  else if (document.body && (document.body.clientWidth || document.body.clientHeight))
  {
    //IE 4 compatible
    docHeight = document.body.clientHeight;
  }
  if (docHeight == 0) return;

  var pageTop = (docHeight - pageHeight) / 2;
  if (pageTop > 0)
  {
    document.body.style.marginTop = "" + pageTop + "px";
  }
  else
  {
    document.body.style.marginTop = "0px";
  }
}

function initPage()
{
  window.onresize = function() { centerVertical(); };
  if (document.addEventListener)
  {
    document.addEventListener("DOMContentLoaded", centerVertical, false);
  }
  else if (document.all && !window.opera)
  {
    document.write('<script type="text/javascript" id="contentloadtag" defer="defer" src="javascript:void(0)"><\/script>');
    var contentloadtag = document.getElementById("contentloadtag");
    contentloadtag.onreadystatechange = function() {
      if (this.readyState == "complete")
      {
        centerVertical();
      }
    }
  }
}

initPage();

function rightProtect(e)
{
  if (window.event)
  {
    var srcEl = event.srcElement ? event.srcElement : event.target;
  }
  else
  {
    var srcEl = e.srcElement ? e.srcElement : e.target;
  }

  var className = srcEl.className;

  if (className.indexOf('protected') != -1)
  {
    window.alert("These photos are copyrighted by J. Pollack Photography, LLC. All rights reserved. Unauthorized use prohibited.");
    return false;
  }
  else
  {
    return true;
  }
}

function initSlideshow()
{
  document.getElementById('slideshowtype').style.backgroundImage = "url(" + slideshowType + ".gif)";
  populateThumbs();
  togglePlay();
}

function nextPhoto()
{
  var firstPhotoOnPage = (currentPage - 1) * maxThumbs;
  ++currentLargePhoto;

  if (currentLargePhoto == numImages)
  {
    currentLargePhoto = 0;
    currentPage = 1;
    populateThumbs();  
  }
  else if (currentLargePhoto >= firstPhotoOnPage + maxThumbs)
  {
    nextPage();
  }
  else
  {
    var toReplace = document.getElementById('thumb' + (currentLargePhoto - firstPhotoOnPage + 1));
    toReplace.onclick();
  }
}

function setOpacity(obj, level)
{
  obj.style.opacity = level / 100;
  obj.style.filter = "alpha(opacity = " + level + ");";
}

function togglePlay()
{
  var button = document.getElementById('pauseplay');

  if (slideshowTimer == null)
  {
    button.style.backgroundImage = 'url(pause.gif)';
    slideshowTimer = setTimeout("nextPhoto()", 5000);
  }
  else
  {
    button.style.backgroundImage = 'url(play.gif)';
    clearTimeout(slideshowTimer);
    slideshowTimer = null;
  }
}

function preloadAll(fini)
{
  preloadRemote(function() { preloadLocal(fini) });
}

function preloadRemote(fini)
{
  if ((preloadRemoteCounter % 2 == 0) && (preloadRemoteCounter < numImages * 2))
  {
    var prc = preloadRemoteCounter;

    cachedRemoteImage[prc] = new Image();
    cachedRemoteImage[prc].onload = function() { remoteImageLoaded(fini); }
    cachedRemoteImage[prc + 1] = new Image();
    cachedRemoteImage[prc + 1].onload = function() { remoteImageLoaded(fini); }

    cachedRemoteImage[prc].src = "slideshowimages/" + slideshowType + "/" + images[prc / 2] + "-100x100.jpg";
    suffix = formats[prc / 2];
    cachedRemoteImage[prc + 1].src = "slideshowimages/" + slideshowType + "/" + images[prc / 2] + "-" + suffix + ".jpg";
  }
  else if ((preloadRemoteCounter >= numImages * 2) && (fini != null))
  {
    fini();
  }
}

function remoteImageLoaded(fini)
{
  ++preloadRemoteCounter;
  preloadRemote(fini);
}

function preloadLocal(fini)
{
  if (preloadLocalCounter < numLocalImages)
  {
    cachedLocalImage[preloadLocalCounter] = new Image();
    cachedLocalImage[preloadLocalCounter].onload = function() { localImageLoaded(fini); }
    cachedLocalImage[preloadLocalCounter].src = localimages[preloadLocalCounter];
  }
  else if (fini != null)
  {
    fini();
  }
}

function localImageLoaded(fini)
{
  ++preloadLocalCounter;
  preloadLocal(fini);
}

function imageChange(index, url)
{
  return function() {
    if (currentlyFading || (document.getElementById("mainImage").style.backgroundImage == 'url(' + url + ')'))
    {
      return false;
    }
    if (lastThumbnailImage != null)
    {
      setOpacity(lastThumbnailImage, 50);
    }
    lastThumbnailImage = this;
    setOpacity(this, 100);
    currentLargePhoto = index;
    currentlyFading = true;
    fadeIn(
      url,
      0,
      function ()
      {
        if (slideshowTimer != null)
        {
          clearTimeout(slideshowTimer);
          slideshowTimer = setTimeout("nextPhoto()", 5000);
        }
      }
      );
    return true;
  };
}

function setCorners(element, url)
{
  var ul = document.getElementById(element + "_ul");
  var ur = document.getElementById(element + "_ur");
  var ll = document.getElementById(element + "_ll");
  var lr = document.getElementById(element + "_lr");

  if (ul == null)
  {
    return;
  }
  var img = new Image();
  img.src = url;
  var width = img.width
  var height = img.height;
  
  ul.style.left = Math.round((600 - width) / 2) + "px";
  ul.style.top = Math.round((600 - height) / 2) + "px";
  ur.style.right = Math.floor(600 - (600 + width) / 2) + "px";
  ur.style.top = Math.round((600 - height) / 2) + "px";
  ll.style.left = Math.round((600 - width) / 2) + "px";
  ll.style.bottom = Math.floor(600 - (600 + height) / 2) + "px";
  lr.style.right = Math.floor(600 - (600 + width) / 2) + "px";
  lr.style.bottom = Math.floor(600 - (600 + height) / 2) + "px";
}

function fadeIn(url, percentage, doneFunction)
{
  var newMainPhotoObj = document.getElementById("mainImage");
  var oldMainPhotoObj = document.getElementById("backgroundImage");

  clearTimeout(fadeTimer);
  newMainPhotoObj.style.backgroundImage = 'url(' + url + ')';
  setCorners("mainImage", url);
  setOpacity(newMainPhotoObj, (percentage > 100) ? 100 : percentage);
  if (percentage >= 100)
  {
    setOpacity(newMainPhotoObj, 0);
    setOpacity(oldMainPhotoObj, 100);
    oldMainPhotoObj.style.backgroundImage = 'url(' + url + ')';
    setCorners("backgroundImage", url);
    clearTimeout(fadeTimer);
    doneFunction();
    currentlyFading = false;
  }
  else
  {
    fadeTimer = setTimeout("fadeIn('" + url + "', " + (percentage + 5) + ", " + doneFunction + ")", 10);
  }
}

function previousPage()
{
  if (currentPage > 1)
  {
    --currentPage;
    populateThumbs();
  }
}

function nextPage()
{
  if (numImages > (currentPage * maxThumbs))
  {
    ++currentPage;
    populateThumbs();
  }
}

function populateThumbs()
{
  var firstPhotoOnPage = (currentPage - 1) * maxThumbs;
  var max = ((numImages - firstPhotoOnPage) > maxThumbs) ? maxThumbs : (numImages - firstPhotoOnPage);
  var i = 0;

  for (var idx = 0; idx < maxThumbs; ++idx)
  {
    var toReplace = document.getElementById('thumb' + (idx + 1));
    toReplace.style.backgroundImage = 'none';
    toReplace.style.backgroundColor = 'white';
    setOpacity(toReplace, 50);
    toReplace.onclick = null;
  }
  for (var idx = firstPhotoOnPage; idx < (firstPhotoOnPage + max); ++idx)
  {
    var toReplace = document.getElementById('thumb' + (i + 1));
    toReplace.style.backgroundImage = "url('slideshowimages/" + slideshowType + "/" + images[idx] + "-100x100.jpg')";
    toReplace.style.backgroundPosition = "center center";
    toReplace.style.backgroundRepeat = "no-repeat";
    var suffix = formats[idx];
    var largeImageURL = "slideshowimages/" + slideshowType + "/" + images[idx] + "-" + suffix + ".jpg";
    toReplace.onclick = imageChange(idx, largeImageURL);
    if (i === 0) {
      setOpacity(toReplace, 100);
      toReplace.onclick();
    }
    ++i;
  }

  document.getElementById('pauseplay').style.visibility = "";

  if (currentPage == 1)
  {
    document.getElementById('leftarrow').style.visibility = "hidden";
  }
  else
  {
    document.getElementById('leftarrow').style.visibility = "";
  }

  if ((numImages - firstPhotoOnPage) > maxThumbs)
  {
    document.getElementById('rightarrow').style.visibility = "";
  }
  else
  {
    document.getElementById('rightarrow').style.visibility = "hidden";
  }
}

function makeLight(elementName)
{
  var element = document.getElementById(elementName);
  var src = element.src;
  var bwpos = src.lastIndexOf("_light.jpg");
  var jpgpos = src.lastIndexOf(".jpg");

  if (bwpos == -1)
  {
    src = src.substr(src, jpgpos) + "_light.jpg";
    element.src = src;
  }
}

function makeFull(elementName)
{
  var element = document.getElementById(elementName);
  var src = element.src;
  var bwpos = src.lastIndexOf("_light.jpg");

  if (bwpos != -1)
  {
    src = src.substr(src, bwpos) + ".jpg";
    element.src = src;
  }
}

var verticalScrollTimer;
var scrollVelocity = 0;
var scrollAcceleration = .01;

function scrollVertical(elementName, upElement, downElement, direction, stopScroll)
{
  var element = document.getElementById(elementName);
  var cury = element.style.backgroundPosition;

  cury = cury.substr(cury.indexOf(' ') + 1);
  cury = cury.substr(0, cury.length - 1);
  var curyNum = (+cury);

  clearTimeout(verticalScrollTimer);

  scrollVelocity += direction * scrollAcceleration;
  curyNum += scrollVelocity;

  if (curyNum <= 0)
  {
    curyNum = 0;
    document.getElementById(upElement).style.visibility = "hidden";
  }
  else
  {
    document.getElementById(upElement).style.visibility = "";
  }
  if (curyNum >= 100)
  {
    curyNum = 100;
    document.getElementById(downElement).style.visibility = "hidden";
  }
  else
  {
    document.getElementById(downElement).style.visibility = "";
  }
  element.style.backgroundPosition = "0% " + curyNum + "%";

  if (
    ((curyNum < 100) && (curyNum > 0)) &&
    ((Math.abs(scrollVelocity) >= .01) || (stopScroll == 0))
    )
  {
    verticalScrollTimer = setTimeout("scrollVertical('" + elementName + "', '" + upElement + "', '" + downElement + "', " + direction + ", " + stopScroll + ")", 10);
  }
  else
  {
    scrollVelocity = 0;
  }
}

function stopScrolling(elementName, upElement, downElement, direction)
{
  clearTimeout(verticalScrollTimer);
  if (scrollVelocity != 0)
  {
    verticalScrollTimer = setTimeout("scrollVertical('" + elementName + "', '" + upElement + "', '" + downElement + "', " + (-direction) + ", 1)", 10);
  }
}

function submitForm()
{
  var form = document.myForm;

  var properName = document.getElementById("name").value;
  if (properName.length == 0)
  {
    alert("Please tell us your name.");
    return;
  }

  var emailAtPos = document.getElementById("email").value.indexOf("@");
  var emailDotPos = -1;
  if (emailAtPos > -1)
  {
    emailDotPos = document.getElementById("email").value.indexOf(".", emailAtPos + 1);
  }
  var emailSpacePos = document.getElementById("email").value.indexOf(" ");
  var emailLength = document.getElementById("email").value.length;

  if (
    (emailAtPos == -1) ||
    (emailAtPos == 0) ||
    (emailDotPos == -1) ||
    (emailDotPos == emailLength - 1) ||
    (emailDotPos < 2 + emailAtPos) ||
    (emailSpacePos != -1)
    )
  {
    alert("Please enter a valid email address.");
    return;
  }

  var properPhone = "";
  for (var idx = 0; idx < document.getElementById("phone").value.length; ++idx)
  {
    var ch = document.getElementById("phone").value.substring(idx, idx + 1);
    if (
      (ch != "+") &&
      (ch != "-") &&
      (ch != "(") &&
      (ch != ")") &&
      (ch != " ") &&
      ((ch < "0") || (ch > "9"))
      )
    {
      alert("Please enter a valid phone number.");
      return;
    }
    else if ((ch >= "0") && (ch <= "9"))
    {
      properPhone = properPhone + ch;
    }
  }
  if (properPhone.length < 10)
  {
    alert("Please enter a ten digit phone number.");
    return;
  }
  document.getElementById("phone").value = properPhone;

  var source = document.getElementById("source").value;
  if (source == "select")
  {
    alert("Please let us know how you found our site.");
    return;
  }

  var type = document.getElementById("type").value;
  if (type == "select")
  {
    alert("Please let us know what kind of photography you'd like.");
    return;
  }

  var xmlHttp;
  try
  {
    // Firefox, Opera 8.0+, Safari
    xmlHttp=new XMLHttpRequest();
  }
  catch (e)
  {
    // Internet Explorer
    try
    {
      xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
    }
    catch (e)
    {
      try
      {
        xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
      }
      catch (e)
      {
        alert("Your browser does not support AJAX! Please mail info@jpollackphoto.com with your contact information.");
        return false;
      }
    }
  }
  xmlHttp.onreadystatechange=function()
  {
    if(xmlHttp.readyState==4)
    {
      if(xmlHttp.responseText == "OK")
      {
        form.style.visibility = "hidden";
        document.getElementById("success").style.visibility = "";
      }
    }
  }

  var query = "";
  for (var idx = 0; idx < form.length; ++idx)
  {
    query = query + "&" + form.elements[idx].name + "=" + escape(encodeURI(form.elements[idx].value));
  }

  _gat._getTrackerByName()._trackPageview("/contact.php");
  xmlHttp.open("POST", "contact.php", true);
  xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
  xmlHttp.setRequestHeader("Content-length", query.length);
  xmlHttp.setRequestHeader("Connection", "close");
  xmlHttp.send(query);
}

function submitOnEnter(field, event)
{
  var keycode;

  if (window.event)
  {
    keycode = window.event.keyCode;
  }
  else if (event)
  {
    keycode = event.which;
  }
  else
  {
    return true;
  }

  if (keycode == 13)
  {
    document.getElementById('galleryForm').style.visibility='hidden';
    field.form.submit();
    return false;
  }
  return true;
}

