//    Copyright (c) Enigma Interactive 2008
//
//    SOM3
//    Project:          Benfield Motors
//    Filename:         scripts/cardetail_slideshow.js
//    Creation Date:    16/May/2008
//    Original Author:  chrisw
//    Revision:         $Rev$
//    Last Changed By:  $LastChangedBy$
//    Last Change Date: $LastChangedDate$
//    Description:      Javascript file to handle slideshow functionality on car detail page.
//    Extends:          N/A
//    Actions:			init() :				Adds the slideshow on/off html and sets up all event handles for slideshow controls.          
//						startSlideshow() :		Sets slideshow "on" as current. Invokes repeatSlideshow() after delay.
//						repeatSlideshow() :		Invokes nextSlide and recurses back to startSlideshow().
//						stopSlideshow() :		Sets slideshow "off" as current. Stops slide recursion.
//						nextSlide() :			If there is another slide, invoke goNext(); else invoke goFirst().
//						prevSlide() :			If there is a previous slide, invoke goPrev(); else invoke goLast().
//						thisSlide(a) :			Sets the clicked on slide (a) as current. Changes main image to selected slide.
//						goNext() :				Sets the next slide as current and changes main image accordingly.
//						goPrev() :				Sets the previous slide as current and changes main image accordingly.
//						goFirst() :				Sets the first slide as current and changes main image accordingly.
//						goLast() :				Sets the last slide as current and changes main image accordingly.
//						switchImage(src) :		Fades out the main image, changes it's source attribute and fades it back in.
//    Uses:             jQuery library 			(tested and working up to v1.2.6)

var slideDelay = 3.5;
var slideTimeout = window.setTimeout('');
var slideURL = '';
var slideShowStatus = $.cookie('slideshow');

function initSlideshow() {
	$('#next_slide').click(function() {return nextSlide();});
	$('#prev_slide').click(function() {return prevSlide();});
	$('#cardetail_carthumbs a').click(function() {return thisSlide(this);});
	if ($('#cardetail_carthumbs a').length > 1) {
		$("<br />slideshow <a href=\"##\" id=\"slideshowon\">ON</a> | <a href=\"##\" id=\"slideshowoff\" class=\"current\">OFF</a>").appendTo("#carimages .slideshow");
		(slideShowStatus != "off") ? startSlideshow() : stopSlideshow();
		$('#slideshowon').click(function() {return startSlideshow();});
		$('#slideshowoff').click(function() {return stopSlideshow();});
	}
}

function startSlideshow() {
	$('#slideshowoff').removeClass("current");
	$('#slideshowon').addClass("current");
	slideTimeout = window.setTimeout('nextSlide()', ( slideDelay * 1000 ) );
	$.cookie('slideshow','on',{path: '/'});
	return false;
}

function pauseSlideshow() {
	clearTimeout(slideTimeout);
}

function unpauseSlideshow() {
	if ($('#slideshowon').hasClass("current")) {
		slideTimeout = window.setTimeout('nextSlide()', ( slideDelay * 1000 ) );
	}
}

function stopSlideshow() {
	$('#slideshowon').removeClass("current");
	$('#slideshowoff').addClass("current");
	clearTimeout(slideTimeout);
	$.cookie('slideshow','off',{path: '/'});
	return false;
}

function nextSlide() {
	$('#cardetail_carthumbs a.current').next('a').length > 0 ? goNext() : goFirst();
	return false;
}

function prevSlide() {
	$('#cardetail_carthumbs a.current').prev('a').length > 0 ? goPrev() : goLast();
	return false;
}

function thisSlide(a) {
	$('#cardetail_carthumbs a.current').removeClass("current");
	switchImage($(a).addClass("current").find("img").attr("src"));
	return false;
}

function goNext() {
	switchImage($('#cardetail_carthumbs a.current').removeClass("current").next('a').addClass("current").find("img").attr("src"));
}

function goPrev() {
	switchImage($('#cardetail_carthumbs a.current').removeClass("current").prev('a').addClass("current").find("img").attr("src"));
}

function goFirst() {
	$('#cardetail_carthumbs a.current').removeClass("current");
	switchImage($('#cardetail_carthumbs a:first').addClass("current").find("img").attr("src"));
}

function goLast() {
	$('#cardetail_carthumbs a.current').removeClass("current");
	switchImage($('#cardetail_carthumbs a:last').addClass("current").find("img").attr("src"));
}

function getHeroURL(src) {
	var aThumbURL = src.split("/");
	var filename = aThumbURL.pop();
	src = (filename.substr(0,6) != "thumb_") ? "http://image.drivebenfield.com/approved/298x194/" + filename : aThumbURL.join("/") + "/hero_" + filename.substr(6,filename.length-6);
	return src;
}

function getZoomedURL(src) {
	var aThumbURL = src.split("/");
	var filename = aThumbURL.pop();
	src = (filename.substr(0,6) != "thumb_") ? "http://image.drivebenfield.com/approved/640x418/" + filename : aThumbURL.join("/") + "/zoomed_" + filename.substr(6,filename.length-6);
	return src;
}

function switchImage(src) {
	slideURL = getHeroURL(src);
	zoomedURL = getZoomedURL(src);
	
	pauseSlideshow();
	
	$('#img_main').fadeOut("slow", function(img) {
		
		$("#cardetail_mainimage a").hide();
		$("#cardetail_mainimage a[href='" + zoomedURL + "']").show();
		$(this).appendTo("#cardetail_mainimage a[href='" + zoomedURL + "']");
		
		var image = new Image();
		
		image.onload = function() {
 			$('#img_main').attr("src",slideURL).fadeIn("slow")
			unpauseSlideshow();	
 		}
 		
 		image.src = slideURL;
 		
	});
}