/******************** JS Gallery *********************************/
function initGallery() {
  loadPics();
}
var picsArray = new Array;
var curPicIndex = 0;
function loadPics() {
  picsArray = ['sm_08_wykoff_run_far.jpg','sm_09_wykoff_run_near.jpg','sm_01_cedar_creek.jpg',
               'sm_02_mushroom_log.jpg','sm_03_phlox.jpg','sm_04_dingmans_creek.jpg',
               'sm_05_dogwood_tree.jpg','sm_06_dogwood_blossoms.jpg','sm_07_silverthread_falls.jpg',
               'sm_10_fisherman.jpg','sm_11_sunset_pine_branch.jpg','sm_12_yellow_orchid.jpg',
               'sm_13_orchid_trio.jpg','sm_14_fulmer_falls_far.jpg','sm_15_fulmer_falls_near.jpg',
               'sm_16_fulmer_falls_blur.jpg','sm_17_fern.jpg','sm_18_palm_frond.jpg',
               'sm_19_birch_stand.jpg','sm_20_factory_falls_far.jpg','sm_21_factory_falls_near.jpg',
               'sm_22_delaware_river_bank.jpg','sm_23_julia_butterfly.jpg','sm_24_shohola_falls_roots.jpg',
               'sm_25_shohola_falls_side.jpg','sm_26_shohola_falls.jpg','sm_27_pine_forest_path.jpg',
               'sm_28_bull_elk.jpg','sm_29_pine_with_ferns.jpg','sm_30_raymondskill_falls.jpg',
               'sm_31_canyon_sunset.jpg','sm_32_deer_leap_falls_brink.jpg','sm_33_deer_leap_falls_far.jpg',
               'sm_34_deer_leap_falls_1.jpg','sm_35_deer_leap_falls_2.jpg','sm_36_sunset_gorge.jpg',
               'sm_37_tahiti_sunset.jpg','sm_38_hanama_bay_hawaii.jpg','sm_39_guam_beach.jpg',
               'sm_40_saltstraumen_norway_1.jpg','sm_41_saltstraumen_norway_2.jpg','sm_42_balloon_glow.jpg',
               'sm_43_forksville_bridge.jpg','sm_44_loyalsock_creek.jpg','sm_45_forksville_umc.jpg',
               'sm_46_lily_pond.jpg','sm_47_pink_orchids.jpg','sm_48_white_orchids.jpg',
               'sm_49_stone_arch_bridge.jpg','sm_50_hells_hollow_falls.jpg','sm_51_massachusetts_autumn.jpg',
               'sm_52_treetops_kildoo.jpg','sm_53_cucumber_falls_1.jpg','sm_54_cucumber_falls_2.jpg',
               'sm_55_cucumber_falls_3.jpg','sm_56_cucumber_falls_4.jpg','sm_57_leaves.jpg',
               'sm_58_hells_hollow_trail.jpg','sm_59_green_scene.jpg','sm_60_montour_trail_snow.jpg',
               'sm_61_youghiogheny_at_ohiopyle.jpg','sm_62_raccoon_reflection_1.jpg',
               'sm_63_susquehanna_river_19.jpg','sm_64_susquehanna_river_21.jpg',
               'sm_65_raccoon_lake_reflection_2.jpg','sm_66_heron_at_sunset.jpg','sm_67_vesuvius_dc9.jpg',
               'sm_68_lion.jpg','sm_69_elephants.jpg','sm_70_waterhole_warthog.jpg',
               'sm_71_sydney_opera_house.jpg','sm_72_great_wall_1.jpg','sm_73_great_wall_2.jpg',
               'sm_74_saratoga_16.jpg','sm_75_saratoga_17.jpg','sm_76_pittsburgh_point_night_lights.jpg',
               'sm_77_tom_turkey_path.jpg','sm_78_IMG_0718.jpg'];

  firstPic();
}
function nextPic() {
  if (curPicIndex < picsArray.length - 1) {
    curPicIndex++;
    document.getElementById('curPic').src = '/pics/' + picsArray[curPicIndex];
    document.getElementById('fileName').innerHTML = picsArray[curPicIndex].substring(6,picsArray[curPicIndex].length - 4);
    document.getElementById('numPics').innerHTML = curPicIndex + 1;
    document.getElementById('totalPics').innerHTML = picsArray.length;
  }
}
function prevPic() {
  if (curPicIndex > 0) {
    curPicIndex--;
    document.getElementById('curPic').src = '/pics/' + picsArray[curPicIndex];
    document.getElementById('fileName').innerHTML = picsArray[curPicIndex].substring(6,picsArray[curPicIndex].length - 4);
    document.getElementById('numPics').innerHTML = curPicIndex + 1;
    document.getElementById('totalPics').innerHTML = picsArray.length;
  }
}
function firstPic() {
  curPicIndex = 0;
  document.getElementById('curPic').src = '/pics/' + picsArray[0];
  document.getElementById('fileName').innerHTML = picsArray[0].substring(6,picsArray[0].length - 4);
  document.getElementById('numPics').innerHTML = 1;
  document.getElementById('totalPics').innerHTML = picsArray.length;
}
function lastPic() {
  curPicIndex = picsArray.length - 1;
  document.getElementById('curPic').src = '/pics/' + picsArray[picsArray.length - 1];
  document.getElementById('fileName').innerHTML = picsArray[picsArray.length - 1].substring(6,picsArray[picsArray.length - 1].length - 4);
  document.getElementById('numPics').innerHTML = picsArray.length;
  document.getElementById('totalPics').innerHTML = picsArray.length;
}
/******************** Scale Picture Gallery *********************************/
function initScaleGallery() {
  //get all links
  var links = document.getElementsByTagName('a');
  //for all livethumbnail links, get the image, and set attributes on the object
  for (var i = 0; i < links.length; i++) {
    if (links[i].className == 'livethumbnail') {
      var img = links[i].getElementsByTagName('img')[0];
      img.state = 'small';
      img.smallSrc = img.getAttribute('src');
      img.smallWidth = parseInt(img.getAttribute('width'));
      img.smallHeight = parseInt(img.getAttribute('height'));
      img.largeSrc = links[i].getAttribute('href');
      img.largeWidth = parseInt(img.getAttribute('largewidth'));
      img.largeHeight = parseInt(img.getAttribute('largeheight'));
      img.ratio = img.smallHeight / img.smallWidth;
      links[i].onclick = scale;
    }
  }
}
function scale() {
  //get image object
  var img = this.getElementsByTagName('img')[0];
  //img.src = img.smallSrc;
  img.src = img.largeSrc;

  // if we are scaling up, scale down everything else
  if (img.state == 'small') {
    var links = document.getElementsByTagName('a');

    for (var i = 0; i < links.length; i++) {
      if ((links[i].className == 'livethumbnail') && (links[i].getElementsByTagName('img')[0].state == 'large') &&  (links[i] != this)) {
        links[i].onclick();
      }
    }
  }

  if (!img.preloaded) {
    img.preloaded = new Image();
    img.preloaded.src = img.largeSrc;
  }

  var interval = window.setInterval(scaleStep, 10);
  return false;


  function scaleStep() {
    var step = 10;
    var width = parseInt(img.getAttribute('width'));
    var height = parseInt(img.getAttribute('height'));

    if (img.state == 'small') {
      width += step;
      height += Math.floor(step * img.ratio);

      img.setAttribute('width', width);
      img.setAttribute('height', height);

      if (width > img.largeWidth - step) {
        img.setAttribute('width', img.largeWidth);
        img.setAttribute('height', img.largeHeight);
        //img.setAttribute('src', img.largeSrc);
        window.clearInterval(interval);
        img.state = 'large';
      }
    } else {
      width -= step;
      height -= Math.floor(step * img.ratio);

      img.setAttribute('width', width);
      img.setAttribute('height', height);

      if (width < img.smallWidth + step) {
        img.setAttribute('width', img.smallWidth);
        img.setAttribute('height', img.smallHeight);
        img.src = img.smallSrc;
        window.clearInterval(interval);
        img.state = 'small';
      }
    }
  }
}
/******************** Form Functions (validation, etc) **********************/
function valForm(whichForm) {
  var numErrors = 0;
  f = whichForm;
  switch (whichForm.name) {
    case 'contactForm':
      if (!valRequired(f.contName,'Your Name')) {numErrors++}
      if (!valOptEmail(f.contEmail,'Your Email')) {numErrors++}
      if (!valRequired(f.contSubject,'A subject')) {numErrors++}
      if (!valRequired(f.contMessage,'A message')) {numErrors++}

      break;

    default:
      break;
  }

  if (numErrors == 0) {
    f.submit();
  } else {
    return false;
  }
}

function isEmpty(s) {
  return ((s == null) || (s.length == 0))
}
function matchRegEx(regex, inputStr) {
  if (regex.test(inputStr)) {
    return true;
  } else {
    return false;
  }
}
function valRequired(f,fn) {
  var msg;
  if(isEmpty(f.value)) {
    f.className="reqError";
    msg = fn + ' is required.';
    if (document.getElementById(f.id + 'Error') != null) {
      document.getElementById(f.id + 'Error').innerHTML = msg;
    }
    return false;
  } else {
    f.className="req";
    msg = ""
    if (document.getElementById(f.id + 'Error') != null) {
      document.getElementById(f.id + 'Error').innerHTML = msg;
    }
    return true;
  }
}
function valOptEmail(f,fn) {
  var msg;
  if (!isEmpty(f.value)) {
    if(!matchRegEx(/^[\w\.-_\+]+@[\w-]+(\.\w{2,4})+$/,f.value)) {
      f.className="notReqError";
      msg = 'Please enter a valid email address.';
      if (document.getElementById(f.id + 'Error') != null) {
        document.getElementById(f.id + 'Error').innerHTML = msg;
      }
      return false;
    } else {
      f.className="notReq";
      msg = ""
      if (document.getElementById(f.id + 'Error') != null) {
        document.getElementById(f.id + 'Error').innerHTML = msg;
      }
      return true;
    }
  } else {
    f.className="notReq";
    msg = ""
    if (document.getElementById(f.id + 'Error') != null) {
      document.getElementById(f.id + 'Error').innerHTML = msg;
    }
    return true;
  }
}
function valReqEmail(f,fn) {
  var msg;
  if (!isEmpty(f.value)) {
    if(!matchRegEx(/^[\w\.-_\+]+@[\w-]+(\.\w{2,4})+$/,f.value)) {
      f.className="reqError";
      msg = 'Please enter a valid email address.';
      if (document.getElementById(f.id + 'Error') != null) {
        document.getElementById(f.id + 'Error').innerHTML = msg;
      }
      return false;
    } else {
      f.className="req";
      msg = ""
      if (document.getElementById(f.id + 'Error') != null) {
        document.getElementById(f.id + 'Error').innerHTML = msg;
      }
      return true;
    }
  } else {
    valRequired(f,fn);
  }
}
