

//Setup some variables to use
var TRANSITION_DURATION = 1000;
var slideshow;

var ListingSlideshow = function() {
    this.interval = 8000;
    this.isPaused = false;
    this.nextIndex = -1;
    this.currIndex = -1;
    this.listings = -1;
    this.maxListings = 0;
    this.timer = 0;
    this.obj = $('#slideshow');
}

ListingSlideshow.getImageUrl = function(listing) {
    return listing.img;
}

//Get the slideshow started
$(document).ready(function() {
    slideshow = new ListingSlideshow();    
	slideshow.listings = json; //set our variable equal to data from property feed
	slideshow.maxListings = slideshow.listings.length - 1; //set the max property value
	JquerySlideshow_Setup();
});

function JquerySlideshow_Setup() {
    slideshow.isPaused = false;
    JquerySlideshow_Start();
}

//Start the slideshow up
function JquerySlideshow_Start() {
    slideshow.isPaused = false;
    slideshow.timer = $.timer(slideshow.interval, function(timer) { JquerySlideshow_Advance(); })
}

//Advance the slide show
function JquerySlideshow_Advance() {
    slideshow.currIndex = slideshow.currIndex + 1;
    if (slideshow.currIndex >= slideshow.maxListings) {
        slideshow.currIndex = 0;
    }

    JquerySlideshow_FadeToNextSlide();

    slideshow.nextIndex = slideshow.currIndex + 1;

    if (slideshow.nextIndex >= slideshow.maxListings) {
        slideshow.nextIndex = 0;
    }
}

//Set the slide image
function JquerySlideshow_FadeToNextSlide() {

    var visible = slideshow.obj.find('#slide').find('img.visible');
    var hidden = slideshow.obj.find('#slide').find('img.hidden');

    fadeOutVisibleImage(visible);
    fadeInHiddenImage(hidden);

}

function fadeOutVisibleImage(visible) {

    visible.fadeOut(TRANSITION_DURATION, function() {
        visible.removeClass('visible').addClass('hidden');

        //preload next image
        var img = new Image();
    slideshow.nextIndex = slideshow.currIndex + 1;

    if (slideshow.nextIndex >= slideshow.maxListings) {
        slideshow.nextIndex = 0;
    }
        img.src = ListingSlideshow.getImageUrl(slideshow.listings[slideshow.nextIndex]);

        visible.attr('src', img.src);
    });
}

function fadeInHiddenImage(hidden) {

    var src = ListingSlideshow.getImageUrl(slideshow.listings[slideshow.currIndex]);
    hidden.attr('src', src);
    hidden.fadeIn(TRANSITION_DURATION, function() {
        hidden.removeClass('hidden').addClass('visible');
    });

    hidden.attr('alt', "");

    //set the slide paging value
    slideshow.obj.find('#propertypag').html('Property ' + (slideshow.currIndex + 1) + ' of ' + slideshow.maxListings);

    JquerySlideshow_setSlideTitle();

    //set the property link
    //slideshow.obj.find('#viewproperty').find('a').attr("href", slideshow.listings[slideshow.currIndex].rellink.Url);
}


function JquerySlideshow_setSlideTitle() {
    var titleElem = $('#photobarBottom');

    titleElem.find("label").fadeOut(TRANSITION_DURATION, function() {
        titleElem.find("label").html(slideshow.listings[slideshow.currIndex].caption);
        titleElem.find("label").fadeIn(TRANSITION_DURATION);
    });
}

