var currentImgDisplayedIndex = 0;
var slideshowProcess = undefined;
var firstImageInGroup = 0;
var groupSize = 0;
var slideshowDelay = 4000;
var selectColor = "#ff0000";
var unSelectColor = "#ffffff";

function imageObj() {
  this.src = undefined;
  this.alt = undefined;  
}

function selectImage(index) {
  imageIndex = firstImageInGroup + index;     
  if (itemImages[imageIndex] != undefined) {
     stopSlideshow();
     showImage(index, false);
  }
}

function showImage(index, fadeIn) {
   
      imageIndex = firstImageInGroup + index;      
      //document.['mainImage'].src=itemImages[imageIndex].src;   
      //opacity('mainImage', 100, 100, 5); 
      //shiftOpacity('mainImage', 1000);      
      //opacity('mainImage', 0, 100, 500); 
      //blendimage('blenddiv','mainImage', itemImages[imageIndex].src ,200);
             
      if (itemImages[imageIndex] != undefined) { 
        if (imageIndex == 0) {
          document.getElementById('prevButton').src = 'images/image_left_off.jpg';      
        } else {
          document.getElementById('prevButton').src = 'images/image_left.jpg';      
        } 

        if (imageIndex >= (itemImages.length - 1)) {
          document.getElementById('nextButton').src = 'images/image_right_off.jpg';      
        } else {
          document.getElementById('nextButton').src = 'images/image_right.jpg';      
        } 
       
        document.getElementById('mainImage').src = itemImages[imageIndex].src;  
        document.getElementById('mainImage').alt = itemImages[imageIndex].alt;                   
       
        clearAllHighlights();
        document.getElementById('imgBox'+index).style.backgroundColor = selectColor;  

        if (fadeIn) {
          pause(1000);
          opacity('mainImage', 50, 100, 3500);      
        }

        currentImgDisplayedIndex = index;

        document.getElementById('viewingIndicator').innerHTML = "Viewing Image "+(imageIndex+1)+" of "+itemImages.length;  
      }
      
}

function clearAllHighlights() {
  for (var i=0; i<groupSize; i++) {         
   document.getElementById('imgBox'+i).style.backgroundColor = unSelectColor;   
  }
}

function showNextImage(fade) {  
  nextImage = currentImgDisplayedIndex + 1;
  if ((nextImage + firstImageInGroup) >= itemImages.length) {
    nextImage=0;
    firstImageInGroup = 0;   
    refreshGroup(fade); 
  } 
  if(nextImage == (firstImageInGroup + groupSize)) {
     nextImageGroup();
     nextImage=0;
  }
  showImage(nextImage, fade);     
}

function selectNextImage() {
  nextImage = currentImgDisplayedIndex + 1;
  if ((nextImage + firstImageInGroup) < itemImages.length) {
    stopSlideshow();
    showNextImage(false);
  }
}

function selectPrevImage() {
  if (currentImgDisplayedIndex > 0) {
    nextImage = currentImgDisplayedIndex - 1;
    stopSlideshow();
    showImage(nextImage, false); 
  } else if (firstImageInGroup != 0) {
    prevImageGroup();
    stopSlideshow();
    showImage(groupSize - 1, false)
  }
}

function refreshGroup(fade) {
  imageIndex = firstImageInGroup;  
  for (var i=0; i<groupSize; i++) {    
    if (itemImages[imageIndex] != undefined) {
      //document.getElementById('thumb'+i).src = itemImages[imageIndex].src;            
      document.getElementById('thumb'+i).src = itemImages[imageIndex].src + "&thumbnail";
      document.getElementById('thumb'+i).alt = "Thumbnail "+itemImages[imageIndex].alt;
      //document.getElementById('thumb'+i).src = itemImagesThumbs[imageIndex].src;
      //document.getElementById('thumb'+i).alt = itemImagesThumbs[imageIndex].alt;    
    } else {
      document.getElementById('thumb'+i).src = 'images/transparent.gif';            
    } 
    imageIndex++;
  }
  showImage(0, fade);

  
      if ((firstImageInGroup + groupSize) < itemImages.length) {
        document.getElementById('nextPageButton').src = 'images/image_right.jpg';      
      } else {
        document.getElementById('nextPageButton').src = 'images/image_right_off.jpg';      
      }
      if (firstImageInGroup == 0) {
        document.getElementById('prevPageButton').src = 'images/image_left_off.jpg';      
      } else {
        document.getElementById('prevPageButton').src = 'images/image_left.jpg';      
      }
  

  if (itemImages.length > 0) {
      var currentPage = ((firstImageInGroup) / groupSize) + 1;  
      var totalPages = roundTowardsZero(itemImages.length / groupSize);      
      if ((itemImages.length % groupSize) != 0) {
        totalPages++;  
      }
      document.getElementById('viewingPageIndicator').innerHTML = "Viewing Page "+(currentPage)+" of "+totalPages;  
   }
}

function selectPrevImageGroup() {
  if (firstImageInGroup > 0) {
    stopSlideshow();
    prevImageGroup();
  }
}

function selectNextImageGroup() {
  if ((firstImageInGroup + groupSize) <= itemImages.length) {    
    stopSlideshow();
    nextImageGroup();
  }
}


function nextImageGroup() {
   if ((firstImageInGroup + groupSize) < itemImages.length) {
     firstImageInGroup = firstImageInGroup + groupSize;
     refreshGroup(false);
   }
}

function prevImageGroup() {
   if ((firstImageInGroup - groupSize) >= 0) {
     firstImageInGroup = firstImageInGroup - groupSize;
     refreshGroup(false);
   }
}

function initViewer(groupMax, startSlideShow) {
  groupSize = groupMax; 
  refreshGroup(true);

  if (startSlideShow) toggleSlideshow();
  else showImage(0, true);
  
}

function toggleSlideshow() {
  if (slideshowProcess == undefined) {    
    startSlideshow();
  } else {
    stopSlideshow();    
  }
}

function startSlideshow() {    
    document.getElementById('imgBox'+currentImgDisplayedIndex).style.backgroundColor = unSelectColor;  
    //document.getElementById('slideShowButton').innerHTML = 'stop';     
    document.getElementById('slideShowButton').src = 'images/image_stop_button.jpg';
    showImage(currentImgDisplayedIndex ,true);    
    slideshowProcess = setInterval('showNextImage(true)', slideshowDelay);
}

function stopSlideshow() {
  if (slideshowProcess != undefined) {  
    clearInterval(slideshowProcess);
    slideshowProcess = undefined;
    document.getElementById('slideShowButton').src = 'images/image_play_button.jpg';
    //document.getElementById('slideShowButton').innerHTML = 'play';  
  }
}

function pause(millisecondi)
{
    var now = new Date();
    var exitTime = now.getTime() + millisecondi;

    while(true)
    {
        now = new Date();
        if(now.getTime() > exitTime) return;
    }
}

// media editor functions

var selectedMediaToEditId = undefined;
var selectedMediaToEditIndex = undefined;
var totalMediaToEdit = undefined;

function selectMediaToEdit(mediaId, index, total) {  
  if (mediaSelected()) {
    document.getElementById(selectedMediaToEditId).style.backgroundColor = unSelectColor;  
  }
  selectedMediaToEditId = mediaId;
  selectedMediaToEditIndex = index;
  totalMediaToEdit = total;
  document.getElementById(mediaId).style.backgroundColor = selectColor;  

  if (index == 0) {
    document.getElementById('moveMediaBackButton').src = 'images/eola/button_left_off.gif';    
  } else {
    document.getElementById('moveMediaBackButton').src = 'images/eola/button_left.gif';    
  }

  if (index >= (totalMediaToEdit - 1)) {
    document.getElementById('moveMediaForwardButton').src = 'images/eola/button_right_off.gif';    
  } else {
    document.getElementById('moveMediaForwardButton').src = 'images/eola/button_right.gif';    
  }    
    document.getElementById('mediaEdit').src   = 'images/eola/edit.gif';    
    document.getElementById('mediaInsert').src = 'images/eola/insert.gif';    
    document.getElementById('mediaRemove').src = 'images/eola/remove.gif';      
}


function mediaSelected() {
  if (selectedMediaToEditId != undefined && 
      selectedMediaToEditIndex != undefined) {
    return true;
  } else {
    return false;
  }
}

function deleteSelectedMedia(path) {
  if (mediaSelected()) {
    if (!changesMade) {
      confirmDelete(path);
    } else {
      changesMadeAlert();
    }
  }
}


function editSelectedMedia(path) {
  if (mediaSelected()) {
    mediaWindow(path);
  }
}

function moveSelectedMediaBack(path) {  
  if (mediaSelected() && (selectedMediaToEditIndex != 0)) {    
    checkForChanges(path);    
  }
}

function moveSelectedMediaForward(path) {
  if (mediaSelected() && (selectedMediaToEditIndex < (totalMediaToEdit - 1))) {    
      checkForChanges(path);
  }
}

function roundTowardsZero(X) {
  return (X<0?-1:+1)*Math.floor(Math.abs(X)) 
}
