// Location of photos for gallery
var photoDir = "fileadmin/templates/images/hotel/";
//alert("loaded");
// = 2x CSS border size
var borderSize = 6;

// get current photo id from URL
var thisURL  = document.location.href;
var splitURL = thisURL.split( "#" );
var photoId  = splitURL[1] - 1;

// if no id in query string then set to 0
photoId = ( !photoId )? 0 : photoId;

// Create access to 'Detect' object and a place to put instances of 'HTMLobj'
API = new Detect();

// CREATE INSTANCES & LOAD
loadAPI = function() {
    // Instantiate HTMLobj
    API.Container       = new HTMLobj( 'Container' );
    API.Photo           = new HTMLobj( 'Photo' );
    API.PhotoContainer  = new HTMLobj( 'PhotoContainer' );
    API.LinkContainer   = new HTMLobj( 'LinkContainer' );
    API.PrevLink        = new HTMLobj( 'PrevLink' );
    API.NextLink        = new HTMLobj( 'NextLink' );
    API.CaptionBlock    = new HTMLobj( 'CaptionBlock' );
    API.Counter         = new HTMLobj( 'Counter' );
    API.Caption         = new HTMLobj( 'Caption' );
    API.LoadImg         = new HTMLobj( 'LoadImg' );

    // Show initial photo
    cyclePhoto( photoId );
}

// Fade in photo when it is loaded from the server
function initFade(){
    // Show PhotoContainer again
    API.PhotoContainer.show();

    // Be certain the tween is complete before fading, too
    var fade_timer = window.setInterval( 'startFade()', 1000 );

    // Fade photo in when ready and clear listener
    startFade = function(){
        if ( API.Container._tweenRunning == false ) {
            window.clearInterval( fade_timer );

            // Be certain fade is done running before allowing next/previous links to work
            // This avoids rapid fade-in when users click next/previous links in quick succession
            var adv_timer = window.setInterval( 'permitNextPrev()', 500 );

            // Permit next/previous links to function normally when fade is completed
            permitNextPrev = function() {
                if ( API.Photo._fadeRunning == false ) {
                    window.clearInterval( adv_timer );

                    // Only show links if there is more than one photo in array
                    if ( photoNum > 1 ) {
                        API.LinkContainer.displayShow();
                        document.getElementById( 'NextLink' ).onclick = nextPhoto;
                        document.getElementById( 'PrevLink' ).onclick = prevPhoto;
                    }
                } else {
                    return;
                }
            }
            
            // Swap out loading animation to spare CPU cycles when hidden anyway
            API.LoadImg.setSrc( "fileadmin/templates/images/c.gif" );

            // Show caption again
            API.CaptionBlock.show();

            // Fade photo in
            API.Photo.fadeIn( 0, 15, 33 );
        } else {
            return;
        }
    }
};

// Prevent next/previous
function falsify() {
    return false;
};

// Go to next photo
function nextPhoto() {
    // Go to next photo
    if ( photoId == ( photoArray.length - 1 ) ) {
        photoId = 0;
    } else {
        photoId++;
    }
    
    cyclePhoto( photoId );
};

// Go to previous photo
function prevPhoto() {
    // If at start, go back to end
    if ( photoId == 0 ) {
        photoId = photoArray.length - 1;
    } else {
        photoId--;
    }
    
    cyclePhoto( photoId );
};

// Alter class of elements
function changeElementClass( objId, setClass ) {
    document.getElementById( objId ).className = setClass;
};

// Function to load subsequent photos in gallery
function cyclePhoto( photoId ) {
    // Swap in loading animation
    API.LoadImg.setSrc( "fileadmin/templates/images/loading_ani2.gif" );

    // Hide link container if it is not already hidden
    API.LinkContainer.displayHide();

    // Hide photo container and caption temporarily
    API.Photo.hide();
    API.Photo.setOpacity( 0 );
    API.CaptionBlock.hide();

    // Get dimensions of photo
    var wNew = photoArray[photoId][1];
    var hNew = photoArray[photoId][2];

    // Start tween on a delay
    var wCur = API.Container.getWidth()  - borderSize;
    var hCur = API.Container.getHeight() - borderSize;

    // Begin tweening on a short timer
    window.setTimeout( 'API.Container.tweenTo(easeInQuad, ['+wCur+', '+hCur+'], ['+wNew+','+hNew+'], 7)', 500 );
    window.setTimeout( 'API.LinkContainer.sizeTo('+wNew+','+hNew+')', 500 );
    window.setTimeout( 'API.PrevLink.sizeTo('+wNew/2+','+hNew+')', 500 );
    window.setTimeout( 'API.NextLink.sizeTo('+wNew/2+','+hNew+')', 500 );
    window.setTimeout( 'API.CaptionBlock.sizeTo('+wNew+',18)', 500 );

    // Get new photo source
    var newPhoto = photoDir + photoArray[photoId][0];

    // Set source, width, and height of new photo
    API.Photo.setSrc( newPhoto );
    API.Photo.sizeTo( wNew, hNew );

    // Set links to new targets based on photoId
    API.NextLink.setHref(thisURL + "#" + ( photoId + 1 ) );
    API.PrevLink.setHref(thisURL + "#" + ( photoId + 1 ) );
    API.Counter.setInnerHtml( ( photoId + 1 ) + "/" + photoNum + " |" );
    API.Caption.setInnerHtml( photoArray[photoId][3] );
	
    // Event listeners for onload and onclick events
    document.getElementById('Photo').onload = initFade;

    // Block next/previous links until permitNextPrev() has fired
    document.getElementById('NextLink').onclick = falsify;
    document.getElementById('PrevLink').onclick = falsify;
};