/***************************
***** Google Analytics *****
****************************/

// send info to Google Analyitics
function sendGoogleAnalytics() {
  if(document.location.href.indexOf('theweddedbliss')!=-1) {
    var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
    document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
    try {
      var pageTracker = _gat._getTracker("UA-4348865-1");
      pageTracker._trackPageview();
    }
    catch(err) {}
  }
}

sendGoogleAnalytics();

/***********************
***** Image Fading *****
***********************/

// initialize crossfade capability
function imageCrossfadeInit() {
  // ensure there is a photo container to crossfade
  if(document.getElementById('photo-container')) {
    // get all images in photo-container
    var images = document.getElementById('photo-container').getElementsByTagName('img');

    if(images.length>1) {  // more than one image in container
      for(var j=0; j<images.length; j++) {  // loop through images
        if(images[j].id=='');  // image doesn't have an ID
          images[j].id = 'crossfade-photo-'+j;  // dynamically give image an ID
        images[j].onclick = imageCrossfade;  // set onclick to crossfade

        if(j==0) {  // is first image
          images[j].style.zIndex = 100;  // brint to front
          images[j].style.display = '';  // show image
          imageFadeIn(images[j].id, 0);  // start fading image in
        }
        else {  // not first image
          images[j].style.display = 'none';  // hide image
          images[j].style.zIndex = 0;  // send to back
        }
      }
    }

    setInterval('imageCrossfade(1)', 4000);  // rotate header banner image
  }
}

// crossfade two images
function imageCrossfade(direction) {
  // get all images in photo-container
  var images = document.getElementById('photo-container').getElementsByTagName('img');

  var selected = 0;  // selected image

  for(var j=0; j<images.length; j++)  // loop through images
    if(images[j].style.zIndex==100) {  // is up-front image
      selected = j;  // is selected image
      break;  // stop looking
    }

  if(direction==-1)  // move left
    selected--;  // decrement selected image
  else  // move right
    selected++;  // increment selected image

  if(selected>=images.length)  // past last image
    selected = 0;  // loop back to first
  else if(selected<0)  // before first
    selected = images.length - 1;  // loop back to last

  for(var j=0; j<images.length; j++)  // loop through images
    if(j==selected) {  // is selected image
      images[j].style.display = '';  // show image
      images[j].style.zIndex = 100;  // bring to front
      imageFadeIn(images[j].id, 0);  // start fading image in
    }
    else if(images[j].style.zIndex==100)  // previously selected image
      images[j].style.zIndex = 50;  // send to middle
    else  // isn't selected image
      images[j].style.zIndex = 0;  // send to back
}

// fades image in gradually
function imageFadeIn(photoID, opacity) {
  var photo = document.getElementById(photoID);

  if(!photo.complete) {  // image hasn't finished loading
    photo.style.opacity = 0;  // zero out opacity
    photo.style.filter = 'alpha(opacity=0)';  // zero out opacity (IE)
    setTimeout('imageFadeIn(\''+photoID+'\', 0);', 25);  // check again in a bit
  }
  else if(opacity<=100) {  // is loaded, but not fully faded in
    photo.style.opacity = opacity/100;  // set to given opacity
    photo.style.filter = 'alpha(opacity=' + opacity + ')';  // set to given opacity (IE)
    if(opacity<100)  // still not full opacity
      setTimeout('imageFadeIn(\''+photoID+'\', '+(opacity+5)+');', 25);  // continue fade in
  }
}

// initialize thumbnail fade-in
function imageFadeThumbs() {
  for(var j=0; j<document.images.length; j++) {
    if(document.images[j].id=='') document.images[j].id = 'fade-thumb-'+j;
    imageFadeIn(document.images[j].id, 0);
  }
}

imageCrossfadeInit();  // prep images for crossfading
imageFadeThumbs();  // make thumbnails for fading in


/***********************
***** Issue Viewer *****
***********************/

// get page source by index
function issueAddPage(idx, id) {
  var fullscreen = document.getElementById('fullscreen').style.display=='';  // is it in fullscreen mode?
  var issuePageSize = getIssuePageSize(fullscreen);  // get target image dimensions
  var element;  // dynamic element

  if(idx>=0 && idx<pages.length) {  // valid image
    element = document.createElement('img');  // image tag
    element.setAttribute('src', (fullscreen?issuePathFull:issuePathReg)+pages[idx]);  // set image source
  }
  else {  // not an image
    element = document.createElement('div');  // div tag
    element.style.backgroundColor = fullscreen?'#3f3f3f':'#e5e5e5';
  }

  element.setAttribute('id', 'flipper'+id);  // add ID
  element.style.height = issuePageSize[1]+'px';
  element.style.width = issuePageSize[0]+'px';
  document.getElementById('flipper').appendChild(element);  // add element to moving div
}

// flips page
function issuePageFlip(direction) {
  var fullscreen = document.getElementById('fullscreen').style.display=='';  // is it in fullscreen mode?
  var issuePageSize = getIssuePageSize(fullscreen);  // target image dimensions
  var moveAmount = direction>0?Math.ceil(issuePageSize[0]/(fullscreen?2.5:7.5)):-Math.ceil(issuePageSize[0]/(fullscreen?2.5:7.5));  // amount to move each iteration
  var flipper = document.getElementById('flipper');  // page flipper box
  // load up moving div, if empty
  if(flipper.childNodes.length==0) {  // does not contain anything
    //  set page flipper properties
    if(fullscreen) {
      flipper.style.margin = document.getElementById('fullscreen').style.marginTop+' 0 0 '+(parseInt(document.getElementById('fullscreen').style.marginLeft)+50)+'px';  // set margins based on fullscreen location (adjusting for controls)
      flipper.style.position = 'fixed';
    }
    else {
      flipper.style.margin = '25px 30px';
      flipper.style.position = 'absolute';
    }
    flipper.style.width = (issuePageSize[0]*4)+'px';  // 4 pages used in flipper

    // add pages to page flipper div
    var j = 0;
    switch(direction) {
      case -2:  // first
        issueAddPage(-1, j++);  // pre front cover
        issueAddPage(0, j++);  // front cover
        issueAddPage(pageNum-1, j++);  // current left page
        issueAddPage(pageNum, j++);  // current right page

        break;
      case 2:  // last
        issueAddPage(pageNum-1, j++);  // current left page
        issueAddPage(pageNum, j++);  // current right page
        issueAddPage(pages.length - pages.length%2 - 1, j++);  // next to last page / back cover
        issueAddPage(pages.length - pages.length%2, j++);  // last page / post back cover
        break;
      case -1:  // previous
        if(pageNum-2<0) {
          issueAddPage(-1, j++);  // pre front cover
          issueAddPage(0, j++);  // front cover
        }
        else {
          issueAddPage(pageNum-3, j++);  // two pages back
          issueAddPage(pageNum-2, j++);  // one page back
        }
        issueAddPage(pageNum-1, j++);  // current left page
        issueAddPage(pageNum, j++);  // current right page
        break;
      case 1:  // next
      default:
        issueAddPage(pageNum-1, j++);  // current left page
        issueAddPage(pageNum, j++);  // current right page
        if(pageNum+1>pages.length) {
          issueAddPage(pages.length - pages.length%2 - 1, j++);  // next to last page / back cover
          issueAddPage(pages.length - pages.length%2, j++);  // last page / post back cover
        }
        else {
          issueAddPage(pageNum+1, j++);  // one page ahead
          issueAddPage(pageNum+2, j++);  // two pages ahead
        }
    }

    // clear floats div
    var element = document.createElement('div');  // div tag
    element.setAttribute('class', 'clearBoth');  // clear floats class
    flipper.appendChild(element);  // add element to moving div
  }

  // ensure pictures are fully loaded
  var ready = true;  // all images are loaded
  for(var j=0; j<4; j++)  // loop through pages
    if(document.getElementById('flipper'+j).tagName=='IMG' && !document.getElementById('flipper'+j).complete) {  // image not loaded
      ready = false;  // not ready yet
      break;  // stop looking
    }

  // all pictures are loaded
  if(ready) {
    // display moving div and replace underlying image sources
    if(flipper.style.display=='none') {
      // replace underside with new images
      switch(direction) {
        case -2:  // first
        case -1:  // previous
          // left image to page one in flip
          if(document.getElementById('flipper0').tagName=='IMG') {
            document.getElementById('image-left').src = document.getElementById('flipper0').src;
            document.getElementById('page-left').style.visibility = 'visible';
          }
          else {
            document.getElementById('image-left').src = '';
            document.getElementById('page-left').style.visibility = 'hidden';
          }

          // right image to page two in flip
          if(document.getElementById('flipper1').tagName=='IMG') {
            document.getElementById('image-right').src = document.getElementById('flipper1').src;
            document.getElementById('page-right').style.visibility = 'visible';
          }
          else {
            document.getElementById('image-right').src = '';
            document.getElementById('page-right').style.visibility = 'hidden';
          }

          break;
        case 2:  // last
        case 1:  // next
        default:
          // left image to page three in flip
          if(document.getElementById('flipper2').tagName=='IMG') {
            document.getElementById('image-left').src = document.getElementById('flipper2').src;
            document.getElementById('page-left').style.visibility = 'visible';
          }
          else {
            document.getElementById('image-left').src = '';
            document.getElementById('page-left').style.visibility = 'hidden';
          }

          // right image to page four in flip
          if(document.getElementById('flipper3').tagName=='IMG') {
            document.getElementById('image-right').src = document.getElementById('flipper3').src;
            document.getElementById('page-right').style.visibility = 'visible';
          }
          else {
            document.getElementById('image-right').src = '';
            document.getElementById('page-right').style.visibility = 'hidden';
          }
      }

      // if fullscreen, ensure correct sources and synchronize pages
      if(fullscreen) {
        // set fullscreen image sources
        document.getElementById('fs-image-left').src = document.getElementById('image-left').src;
        document.getElementById('fs-image-right').src = document.getElementById('image-right').src;

        // fix regular-sized image sources
        document.getElementById('image-left').src = document.getElementById('image-left').src.replace(issuePathFull, issuePathReg);
        document.getElementById('image-right').src = document.getElementById('image-right').src.replace(issuePathFull, issuePathReg);

        // sync placeholders
        document.getElementById('fs-page-left').style.visibility = document.getElementById('page-left').style.visibility;
        document.getElementById('fs-page-right').style.visibility = document.getElementById('page-right').style.visibility;
      }

      // set position of and unhide flipper
      flipper.style.left = (moveAmount>0?0:-2*issuePageSize[0])+'px';  // reset flipper position
      flipper.style.display = '';  // unhide flipper
    }

    if((moveAmount>0 && parseInt(flipper.style.left)>=-issuePageSize[0]*2+moveAmount) || (moveAmount<0 && parseInt(flipper.style.left)-moveAmount<0)) {  // room to move
      flipper.style.left = (parseInt(flipper.style.left)-moveAmount) + 'px';  // move
      flipper.style.clip = 'rect(0px, '+(Math.abs(parseInt(flipper.style.left))+issuePageSize[0]*2)+'px, '+issuePageSize[1]+'px, '+Math.abs(parseInt(flipper.style.left))+'px)';  // crop to fit
    }
    else {  // no more to move
      // remove all child nodes from page flipper
      while(flipper.childNodes.length>0)  // still has nodes
        flipper.removeChild(flipper.firstChild);  // remove first node

      // update selected page number
      switch(direction) {
        case -2:  // first
          pageNum = 0;
          break;
        case 2:  // last
          pageNum = pages.length - pages.length%2;
          break;
        case -1:  // previous
          pageNum -= 2;  // negate move amount
          break;
        case 1:  // next
        default:
          pageNum += 2;
      }

      // update controls
      document.getElementById('controls-left').style.visibility = pageNum>0?'visible':'hidden';  // display/hide previous page controls
      document.getElementById('controls-right').style.visibility = pageNum<pages.length?'visible':'hidden';  // display/hide next page controls
      if(fullscreen) {
        document.getElementById('fs-controls-left').style.visibility = document.getElementById('controls-left').style.visibility;  // display/hide previous page controls
        document.getElementById('fs-controls-right').style.visibility = document.getElementById('controls-right').style.visibility;  // display/hide next page controls
      }
      flipper.style.display = 'none'; // hide moving div
    }
  }

  if(flipper.childNodes.length>0)  // child nodes means that it hasn't finished
    setTimeout('issuePageFlip('+direction+');', 50);  // continue fade in

  return false;
}

// show/hide fullscreen version of online issue
function toggleFullScreen() {
  var fs = document.getElementById('fullscreen');  // fullscreen element
  var flipper = document.getElementById('flipper');

  if(fs.style.display=='none') {  // hidden, so show
    var issuePageSize = getIssuePageSize(true);  // get target image dimensions
    document.getElementById('darken').style.display = '';  // unhide darkener

    // left controls
    element = document.createElement('div');
    element.setAttribute('id', 'fs-controls-left');
    element.style.backgroundImage = 'url(/images/viewer/full-left.gif)';
    element.style.visibility = (pages[pageNum-1])?'visible':'hidden';
    element.style.width = '50px';
    // first page control
    element2 = document.createElement('img');
    element2.setAttribute('src', '/images/viewer/full-first.gif');
    element2.style.cursor = 'pointer';
    element2.setAttribute('onclick', 'issuePageFlip(-2);');
    element.appendChild(element2);
    // prev page control
    element2 = document.createElement('img');
    element2.setAttribute('src', '/images/viewer/full-prev.gif');
    element2.style.cursor = 'pointer';
     element2.setAttribute('onclick', 'issuePageFlip(-1);');
    element.appendChild(element2);
    fs.appendChild(element);

    // left page
    element = document.createElement('div');  // div to contain page
    element.setAttribute('id', 'fs-page-left');
    element.style.height = issuePageSize[1]+'px';
    element.style.width = issuePageSize[0]+'px';
    element2 = document.createElement('img');  // image tag
    element2.setAttribute('id', 'fs-image-left');  // set image ID
    element2.setAttribute('onclick', 'toggleFullScreen();');  // set onclick command to toggle fullscreen mode
    if(pages[pageNum-1]) element2.setAttribute('src', issuePathFull+pages[pageNum-1]);  // set image source
    element.appendChild(element2);
    fs.appendChild(element);  // add element to fullscreen div
    if(pages[pageNum-1]) imageFadeIn('fs-image-left', 0);  // start image fade-in once loaded

    // right page
    element = document.createElement('div');  // div to contain page
    element.setAttribute('id', 'fs-page-right');
    element.style.height = issuePageSize[1]+'px';
    element.style.width = issuePageSize[0]+'px';
    element2 = document.createElement('img');  // image tag
    element2.setAttribute('id', 'fs-image-right');  // set image ID
    element2.setAttribute('onclick', 'toggleFullScreen();');  // set onclick command to toggle fullscreen mode
    if(pages[pageNum]) element2.setAttribute('src', issuePathFull+pages[pageNum]);  // set image source
    element.appendChild(element2);
    fs.appendChild(element);  // add element to fullscreen div
    if(pages[pageNum]) imageFadeIn('fs-image-right', 0);  // start image fade-in once loaded

    // right controls
    element = document.createElement('div');
    element.setAttribute('id', 'fs-controls-right');
    element.style.backgroundImage = 'url(/images/viewer/full-right.gif)';
    element.style.visibility = (pages[pageNum])?'visible':'hidden';
    element.style.width = '50px';
    // last page control
    element2 = document.createElement('img');
    element2.setAttribute('src', '/images/viewer/full-last.gif');
    element2.style.cursor = 'pointer';
    element2.setAttribute('onclick', 'issuePageFlip(2);');
    element.appendChild(element2);
    // next page control
    element2 = document.createElement('img');
    element2.setAttribute('src', '/images/viewer/full-next.gif');
    element2.style.cursor = 'pointer';
    element2.setAttribute('onclick', 'issuePageFlip(1);');
    element.appendChild(element2);
    fs.appendChild(element);

    // clear floats
    element = document.createElement('div');
    element.setAttribute('class', 'clear-floats');
    fs.appendChild(element);

    setFullScreenSizes();  // set size for images
    fs.style.display = '';  // unhide pages
  }
  else {  // shown, so hide
    fs.style.display = 'none';  // hide fullscreen pages
    fs.innerHTML = '';  // remove all elements
    document.getElementById('darken').style.display = 'none';  // hide darkener
  }
}

// set width/height for images
function setFullScreenSizes() {
  var viewportSize = getViewportSize();  // get browser viewport dimensions
  var issuePageSize = getIssuePageSize(true);  // get fullscreen image sizes

  // set image/placeholder dimensions and margins for prev/next controls
  if(document.getElementById('fs-image-left')) {
    document.getElementById('fs-image-left').width = document.getElementById('fs-image-right').width = issuePageSize[0];
    document.getElementById('fs-page-left').style.width = document.getElementById('fs-page-right').style.width = issuePageSize[0]+'px';
    document.getElementById('fs-image-left').height = document.getElementById('fs-image-right').height = issuePageSize[1];
    document.getElementById('fs-page-left').style.height = document.getElementById('fs-page-right').style.height = document.getElementById('fs-controls-left').style.height = document.getElementById('fs-controls-right').style.height = issuePageSize[1]+'px';
    document.getElementById('fs-controls-left').lastChild.style.marginTop = document.getElementById('fs-controls-right').lastChild.style.marginTop = Math.floor(issuePageSize[1]/2-75)+'px';  // center vertically vs image
  }

  // set margins for centering
  document.getElementById('fullscreen').style.marginLeft = (Math.floor((viewportSize[0]-100)/2)-issuePageSize[0])+'px';
  document.getElementById('fullscreen').style.marginTop = ((viewportSize[1]-issuePageSize[1])/2)+'px';
}

// get dimensions of images:  array(width, height)
function getIssuePageSize(fullscreen) {
  var imageWidth;  // resultant image width
  var imageHeight;  // resultant image height

  var retro = document.getElementById('viewer').className=='fix-2011';

  if(fullscreen) {
    var viewportSize = getViewportSize();  // live browser area
    var imageRatio =(retro?850:910)/1100;  // image width/height ratio

    if((viewportSize[0]-100)/viewportSize[1]/2>imageRatio) {  // viewport - controls is wider than picture ratio, so base size off height
      imageWidth = Math.floor(viewportSize[1]*imageRatio);
      imageHeight = viewportSize[1];
    }
    else {  // viewport is taller ratio than picture, so base size off width minus controls
      imageWidth = Math.floor((viewportSize[0]-100)/2);
      imageHeight = Math.floor(imageWidth/imageRatio);
    }
  }
  else {
    imageWidth = retro?367:393;
    imageHeight = 475;
  }

  return Array(imageWidth, imageHeight);
}

// get browser
function getViewportSize() {
  var viewportWidth;
  var viewportHeight;

  // get viewport height
  if(typeof window.innerHeight!='undefined') {  // FF/Opera/IE7
    viewportWidth = window.innerWidth-18;  // includes scrollbars
    viewportHeight = window.innerHeight;
  }
  else if(
      typeof document.documentElement != 'undefined'
      && typeof document.documentElement.clientHeight!='undefined'
      && document.documentElement.clientHeight!=0
    ) {  // IE6 in standards compliant mode
    viewportWidth = document.documentElement.clientWidth;
    viewportHeight = document.documentElement.clientHeight;
  }
  else {  // older versions of IE
    viewportWidth = document.getElementsByTagName('body')[0].clientWidth;
    viewportHeight = document.getElementsByTagName('body')[0].clientHeight;
  }

  return Array(viewportWidth, viewportHeight);
}

// initialize issue viewer
function issueInit() {
  if(document.getElementById('viewer')) {
    // hide and init fullscreen elements
    document.getElementById('flipper').style.display = document.getElementById('darken').style.display = document.getElementById('fullscreen').style.display = 'none';
    document.getElementById('darken').style.width = document.getElementById('darken').style.height = '100%';
    window.onresize = setFullScreenSizes;  // recalculate fullscreen element sizes on window resizing

    // start fading in regular-sized issue pages
    imageFadeIn('image-left', 0);
    imageFadeIn('image-right', 0);
  }
}

issueInit();  // prep issue viewer


/******************
***** Vendor *****
******************/

// find selected vendor
function vendorFind(anchorName) {
  window.location.hash = anchorName;
}

// initialize vendor form
function vendorInit() {
  if(document.getElementById('vendor-find'))
    document.getElementById('vendor-find').style.display = '';
}

vendorInit();  // unhide vendor finder


/*******************
***** Payments *****
*******************/

function paymentAmountChange() {
  if(document.getElementById('payment-chargetotal').value==='0') {
    document.getElementById('payment-comments').className = 'required';
    var parent = document.getElementById('payment-chargetotal').parentNode;
    parent.removeChild(parent.firstChild);
    parent.innerHTML += '<input name="chargetotal" type="text" size="7" maxlength="7" value="amount" title="Amount" id="payment-chargetotal" class="required numeric-positive" />';
    document.getElementById('payment-chargetotal').focus();
    document.getElementById('payment-chargetotal').select();
  }
  else if(document.getElementById('payment-chargetotal').options[document.getElementById('payment-chargetotal').selectedIndex].text.indexOf('ticket')!=-1)
    document.getElementById('payment-comments').className = 'required';
}
