
function ajaxObject() 
{
  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("This website requires AJAX which your browser does not seem to support!");
        return false;
      }
    }
  }
  return xmlHttp;
}

var images = new Array();
var imagesSize = 0;
var imagesURI = '';
var index = 0;
var preloadIndex = 0;
var preloadSize = 0;

function showImage(idx)
{
    if (idx < 0 || idx >= images.length) return false;

    index = idx;
    var image = images[index];

    try {
      pageTracker._trackPageview(imagesURI+"/"+image.getAttribute('id'));
    } catch(err) {}


    document.getElementById('arrow_left').style.visibility = (index-1 >= 0) ? 'visible' : 'hidden';
    document.getElementById('arrow_right').style.visibility = (index+1 < images.length) ? 'visible' : 'hidden';

    var credit_title = image.getAttribute('name');
    var credit_description = image.getAttribute('description');    

    var creditTag;
    creditTag = document.getElementById('credits_hitarea');
    creditTag.style.width = image.getAttribute('width')+'px';
    creditTag.style.left = (830/2 - image.getAttribute('width')/2)+'px';
    creditTag.style.visibility = credit_title ? 'visible' : 'hidden';
    creditTag = document.getElementById('credits');
    creditTag.style.width = image.getAttribute('width')+'px';
    creditTag.style.left = (830/2 - image.getAttribute('width')/2)+'px';
    creditTag = document.getElementById('credits_text');

    if (credit_title && credit_description) {
      creditTag.innerHTML = '<span class="title">'+credit_title+'</span><br />'+credit_description;
    }
    else if (credit_title) {
      creditTag.innerHTML = '<span class="title">'+credit_title+'</span>';
    }
    else {
      creditTag.innerHTML = '';
    }

    content = document.getElementById('photo');
    var imgTag = document.createElement('IMG');
    imgTag.width = image.getAttribute('width');
    imgTag.height = image.getAttribute('height');
    imgTag.alt = image.getAttribute('title');
    imgTag.src = image.getAttribute('url');
    imgTag.style.marginLeft = (770/2 - image.getAttribute('width')/2)+'px';
    imgTag.style.opacity = 0;
    imgTag.style.filter = "alpha(opacity=0)";            

    while (content.childNodes.length > 1) content.removeChild(content.childNodes[0]);

    var from_id = '';
    if (content.childNodes.length > 0) { 
      from_id = 'photoLast';
      content.childNodes[0].id = from_id;
    }
    imgTag.id = 'photoCurrent';
    content.appendChild(imgTag);
 
    crossfadeImage(from_id,'photoCurrent',500);
}

function nextImage()
{
    if (index < images.length) {
      index++;
      showImage(index);
    }
}

function prevImage()
{
    if (index > 0) {
      index--;
      showImage(index);
    }
}

function preloadImage()
{
    // Display first image
    if (preloadIndex == 1) {
        showImage(0);
    } 

    // Finished preloading
    if (preloadIndex >= images.length) {
        document.getElementById('progress').style.visibility = 'hidden';
        document.getElementById('progress_done').style.visibility = 'hidden';
        return false;
    }

    // Show the progress bar
    if (preloadIndex == 0) {
        document.getElementById('progress').style.visibility = 'visible';
        document.getElementById('progress_done').style.visibility = 'visible';
    }

    // Preload thumbnails
    var im = new Image();
    im.setAttribute('index',preloadIndex);
    im.onmouseover = function () { buttonOn(this); }
    im.onmouseout = function () { buttonOff(this); }
    im.onclick = function () { showImage(parseInt(this.getAttribute('index'))); hideAllNow(); }
    im.onload = function () {
      this.onload = null;
      this.style.visibility = 'inherit';
    }
    im.style.visibility = 'hidden';
    im.src = images[preloadIndex].getAttribute('url')+'/largeThumbnail';

    // Add thumbnail into layout (but hidden until loaded)
    var overlay = document.getElementById('_active_overlay');
    if (!overlay) return false;

    for (var i = 0; i < overlay.childNodes.length; i++) {
      if (overlay.childNodes[i].className == 'overlay_thumbs') {
        overlay.childNodes[i].appendChild(im);
      }
    }

    im = new Image();
    im.src = images[preloadIndex].getAttribute('url')+'/largeThumbnail?hover=1';

    // IE alpha bug workaround
    if (navigator.appName == 'Microsoft Internet Explorer') {
        images[preloadIndex].setAttribute('url',images[preloadIndex].getAttribute('url')+'/imageIEClean');
    }

    // Preload image
    im = new Image();
    im.size = parseInt(images[preloadIndex].getAttribute('size'));
    im.onload = function () { 
      preloadSize += this.size;
      document.getElementById('progress_done').style.width = parseInt(preloadSize*150.0/imagesSize)+'px';
      preloadIndex++;
      preloadImage(); 
    }
    im.src = images[preloadIndex].getAttribute('url');
}


function loadImages()
{
    var xmlHttp = ajaxObject();
    xmlHttp.onreadystatechange=function () 
        { 
                if(xmlHttp.readyState==4 && xmlHttp.responseXML)
                {
                    var i;
                    var response = xmlHttp.responseXML.documentElement;
                    imagesURI = response.getAttribute('uri');
                    for (i = 0; i < response.childNodes.length; i++) {
                        if (response.childNodes[i].tagName=='image') {
                            imagesSize += parseInt(response.childNodes[i].getAttribute('size'));
                            images.push(response.childNodes[i]);
                        }                            
                    }
                    preloadImage();
                }
        }
    xmlHttp.open("GET","xmlImages",true);
    xmlHttp.send(null);
}

var crossfadeTimerId = 0;
var steps = 3;

function crossfadeImage(from_id, to_id, millisec) {
    var speed = Math.round(millisec / (100/steps));

    if (crossfadeTimerId) clearTimeout(crossfadeTimerId);
    crossfadeTimerId = setTimeout("crossfadeOpacity('" + from_id + "','" + to_id + "',"+speed+")",speed);
}

function crossfadeOpacity(from_id, to_id, speed) {
    var finished = 1;

    if (from_id.length) {
      var object = document.getElementById(from_id);
      if (object && object.style.opacity > 0) {
        var new_opacity = object.style.opacity*100 - steps;
        if (new_opacity < 0) {
          object.parentNode.removeChild(object);
        }
        else {
          finished = 0;
          object.style.opacity = (new_opacity / 100);
          object.style.filter = "alpha(opacity=" + new_opacity + ")";        
        }
      }
    }    

    var object = document.getElementById(to_id);
    if (object.style.opacity < 1.0) {
      var new_opacity = object.style.opacity*100 + steps;
      if (new_opacity >= 100) {
        object.style.opacity = 1.0;
        object.style.filter = "";
      }
      else{
        finished = 0;
        object.style.opacity = (new_opacity / 100);
        object.style.filter = "alpha(opacity=" + new_opacity + ")";        
      }
    }

    if (!finished) {
      crossfadeTimerId = setTimeout("crossfadeOpacity('" + from_id + "','" + to_id + "',"+speed+")",speed); 
    }
} 

function showThumbnails(portfolio,folder)
{
    var folderTag = document.getElementById(portfolio+'_'+folder);
    var imgTags = folderTag.getElementsByTagName('IMG');
    for (var i = 0; i < imgTags.length; i++) {
      if (imgTags[i].className == 'folder') buttonOn(imgTags[i]);
    }
    
    var thumbs = document.getElementById(portfolio+'_'+folder+'_thumbs');
    if (!thumbs.getAttribute('loaded')) {
      thumbs.setAttribute('loaded',1);
      loadThumbnails(portfolio,folder);
    }
    thumbs.style.visibility = 'visible';
}

function hideThumbnails(portfolio,folder)
{
    var folderTag = document.getElementById(portfolio+'_'+folder);
    var imgTags = folderTag.getElementsByTagName('IMG');
    for (var i = 0; i < imgTags.length; i++) {
      if (imgTags[i].className == 'folder') buttonOff(imgTags[i]);
    }
    
    var thumbs = document.getElementById(portfolio+'_'+folder+'_thumbs');
    thumbs.style.visibility = 'hidden';
}

function loadThumbnail(portfolio,folder,image)
{
    var thumbs = document.getElementById(portfolio+'_'+folder+'_thumbs');
    var imgTag = document.createElement('IMG');
    imgTag.onload = function () { this.style.display = 'inline'; }
    imgTag.src = image.getAttribute('url')+'/thumbnail';
    
    thumbs.appendChild(imgTag);
}

function loadThumbnails(portfolio,folder)
{   
    var xmlHttp = ajaxObject();
    xmlHttp.onreadystatechange=function () 
        { 
                if(xmlHttp.readyState==4 && xmlHttp.responseXML)
                {
                    response = xmlHttp.responseXML.documentElement;
                    for (var i = 0; i < response.childNodes.length; i++) 
                    {
                        if (response.childNodes[i].tagName=='image') loadThumbnail(portfolio,folder,response.childNodes[i]);                       
                    }
                }
        }
    xmlHttp.open("GET",rootURI+"portfolios/"+portfolio+"/"+folder+"/"+"xmlImages",true);
    xmlHttp.send(null);
}

var slideshow = new Array();
var slideshow_idx = 0;

function startSlideshow()
{
    var xmlHttp = ajaxObject();
    xmlHttp.onreadystatechange=function () 
        { 
                if(xmlHttp.readyState==4 && xmlHttp.responseXML)
                {
                    var response = xmlHttp.responseXML.documentElement;
                    for (var i = 0; i < response.childNodes.length; i++) 
                    {
                        if (response.childNodes[i].tagName=='image') {
                            // IE alpha bug workaround
                            if (navigator.appName == 'Microsoft Internet Explorer') {
                                response.childNodes[i].setAttribute('url',response.childNodes[i].getAttribute('url')+'/imageIEClean');
                            }
                            
                            slideshow.push(response.childNodes[i]);
                        }
                    }
                    showSlideshowImage();
                }
        }
    xmlHttp.open("GET",rootURI+"xmlSlideshow",true);
    xmlHttp.send(null);
}

function showSlideshowImage()
{
    var image = slideshow[slideshow_idx];

    content = document.getElementById('photo');
  
    var imgTag = document.createElement('IMG');
    imgTag.width = image.getAttribute('width');
    imgTag.height = image.getAttribute('height');
    imgTag.alt = image.getAttribute('title');    
    imgTag.src = image.getAttribute('url');
    
    // Add descriptive text for non-IE browsers
    if (navigator.appName != 'Microsoft Internet Explorer') {
        var divTag = document.createElement('DIV');
        divTag.appendChild(imgTag);        
        imgTag = divTag;
        
        var textTag = document.createElement('IMG');
        textTag.src = rootURI + 'textSlideshow?text=' + image.getAttribute('portfolio_u') + '%20-%20' + image.getAttribute('folder_u');
        textTag.alt = image.getAttribute('portfolio') + ' - ' + image.getAttribute('folder');
        textTag.style.position = 'absolute';
        textTag.style.left= '30px';
        textTag.style.bottom = '13px';
        divTag.appendChild(textTag);        
    }

    imgTag.style.marginLeft = (770/2 - image.getAttribute('width')/2)+'px';
    imgTag.style.opacity = 0;
    imgTag.style.filter = "alpha(opacity=0)";            

    while (content.childNodes.length > 1) content.removeChild(content.childNodes[0]);

    var from_id = '';
    if (content.childNodes.length > 0) { 
      from_id = 'photoLast';
      content.childNodes[0].id = from_id;
    }
    imgTag.id = 'photoCurrent';
    content.appendChild(imgTag);

    crossfadeImage(from_id,'photoCurrent',1000);

    // Update index to point to next photo    
    slideshow_idx++;
    if (slideshow_idx >= slideshow.length) slideshow_idx = 0;  

    // Preload image
    var im = new Image();
    im.src = slideshow[slideshow_idx].getAttribute('url');

    setTimeout('showSlideshowImage()', 7500);
}