// Verion: 1.2 11/2/2011 14:18
// Author: Media Zo!
// Needs array( 0 ) => 'file', 'name', 'shortdescription', 'description', 'total', 'randstart'
var zo_slideDebug = false; // Enable debug to #slide_debug
var zo_slideJson = 'json.php'; // Path to json
var zo_slideJsonGet = ''; // And get param to json url
var zo_pSlide = 0; // Previouw slide div
var zo_cSlide = 1; // Current slide div
var zo_iCounter = 0; // Index for getting slide in json
var zo_randCounter = 0; // Set option to randomly start at 1
var zo_slideContent = false; // Set div for content that slides with image
var zo_slideTransparent = false; // Set transparancy div for content that slides with image
var zo_slideMouseover = false; // Mouseover active
var zo_slideTransparentOver = false; // Set transparancy div for mouseover active
var zo_slideRunning = 0; // Is already zo_slideRunning or not.
var zo_animDirectionShow = 'right'; // Which direction show animation
var zo_animDirectionHide = 'left'; // Which direction show animation
var zo_animDuration = 1000; // Duration of fade or slide for instance
var zo_slideIntTimeout = 5000;
var zo_slideRunningTimeout = 0; // Set if timeout already set
var zo_slideBlockTimeout = 0; // Temporary block new timeout
var zo_slideContainerId = 'slide_cont'; // Id of container in HTML
var zo_slideTimeout = null; // Timeout var for next slide
var zo_slideEffect = 'slide'; // Effect for transition
var zo_slideMouseOuttimer = null;

// Setting up some HTML
function start_slider(){
	if(zo_slideRunning == 0){
		// Slide 1
			// img container
		$('#'+zo_slideContainerId).append('<div id="slide'+zo_cSlide+'" class="overlay_screen"></div>');
		$('#slide'+zo_cSlide).hide();
		if(zo_slideTransparent){
				// tranparent overlay - slide
			$('#'+zo_slideContainerId).append('<div id="slide_transp'+zo_cSlide+'" class="overlay_tranparent_slide"></div>');
			$('#slide_transp'+zo_cSlide).hide(); }
			
		if(zo_slideContent){
				// content overlay - slide
			$('#'+zo_slideContainerId).append('<div id="slide_cont'+zo_cSlide+'" class="overlay_content_slide"></div>');
			$('#slide_cont'+zo_cSlide).hide(); }
		
		if(zo_slideMouseover){
			if(zo_slideTransparentOver){
					// transparent overlay - mouseover
				$('#'+zo_slideContainerId).append('<div id="transparent'+zo_cSlide+'" class="overlay_transparent"></div>');
				$('#transparent'+zo_cSlide).hide(); }
			
				// content overlay - mouseover
			$('#'+zo_slideContainerId).append('<div id="content'+zo_cSlide+'" class="overlay_content"></div>');
			$('#content'+zo_cSlide).hide();
		}
		
		// Slide 2
			// img container
		$('#'+zo_slideContainerId).append('<div id="slide'+ (zo_cSlide+1) +'" class="overlay_screen"></div>');
		$('#slide'+ (zo_cSlide+1) ).hide();
		if(zo_slideTransparent){
				// tranparent overlay - slide
			$('#'+zo_slideContainerId).append('<div id="slide_transp'+(zo_cSlide+1)+'" class="overlay_tranparent_slide"></div>');
			$('#slide_transp'+(zo_cSlide+1) ).hide(); }
		
		if(zo_slideContent){
				// content overlay - slide
			$('#'+zo_slideContainerId).append('<div id="slide_cont'+(zo_cSlide+1)+'" class="overlay_content_slide"></div>');
			$('#slide_cont'+(zo_cSlide+1) ).hide(); }		
		
		if(zo_slideMouseover){
			if(zo_slideTransparentOver){
					// transparent overlay - mouseover
				$('#'+zo_slideContainerId).append('<div id="transparent'+ (zo_cSlide+1) +'" class="overlay_transparent"></div>');
				$('#transparent'+ (zo_cSlide+1) ).hide(); }
			
				// content overlay - mouseover
			$('#'+zo_slideContainerId).append('<div id="content'+ (zo_cSlide+1) +'" class="overlay_content"></div>');
			$('#content'+ (zo_cSlide+1) ).hide();
		}
		
		zo_slideRunning = 1;
	}
	
	// Start slider
	get_nextslide();
	
}

function get_nextslide(){
	// First load info of slide
	$.ajax({
		type: 'GET',
		dataType: 'json',
		url: zo_slideJson+'?i='+Math.floor(Math.random()*11)+'&doRand='+zo_randCounter+''+zo_slideJsonGet,
		data: { n : zo_iCounter },
		success: function(data){
			// remove any timeout
			pause_slide();
			
			// set random start
			if(zo_randCounter == 1 && data['randstart'] > 0){ zo_iCounter = data['randstart']; zo_randCounter = 0; }
			
			// Set next div
			set_nextslidediv();
			
			// Load in slide
			$('#slide'+zo_cSlide+'').html('<img src="'+data['file']+'" title="'+data['name']+'" />');
			if(zo_slideContent){
				$('#slide_cont'+zo_cSlide+'').html(data['shortdescription']);
			}
			if(zo_slideMouseover){
				if(zo_slideContent){
					$('#slide_cont'+zo_cSlide+'').mouseover(function(){ 
						if(zo_slideTransparentOver){ $('#transparent'+zo_cSlide).show(); } 
						$('#content'+zo_cSlide).show();
						pause_slide(); });
					$('#content'+zo_cSlide+'').mouseover(function(){ destroy_mouseoutdelay(); })
					$('#content'+zo_cSlide+'').mouseout(function(){ 
						delay_mouseout(); });
				}else{
					$('#slide'+zo_cSlide+'').mouseover(function(){ 
						if(zo_slideTransparentOver){ $('#transparent'+zo_cSlide).show(); } 
						$('#content'+zo_cSlide).show(); 
						pause_slide(); });
					$('#content'+zo_cSlide+'').mouseover(function(){ destroy_mouseoutdelay(); })
					$('#content'+zo_cSlide+'').mouseout(function(){ 
						delay_mouseout(); });
				}
				$('#content'+zo_cSlide+'').html(''+data['description']+'');
			}
			
			// Preload image and then launch animation.
			$('#slide'+zo_cSlide+' img').bind('load readystatechange', function(e){ 
				if(checkload(e,this)){
					// start animation
					animate_slide();
					
					// Set next slide
					set_nextslidenum(data);
					
					// start next timeout
					resume_slide();
				}
			});
			
			/* CALL WITHOUT PRELOAD
			// start animation
			animate_slide();
			// Set next slide
			set_nextslidenum(data);
			// start next timeout
			resume_slide();*/
		}
	});
}

function checkload(e,img){
	
	if(zo_slideDebug){
	$('#slide_debug').append('bind type: '+e.type + '<br />');
	$('#slide_debug').append('obj complete: '+img.complete + '<br />');
	$('#slide_debug').append('obj readystate: '+img.readyState + '<br />');
	$('#slide_debug').append('obj readystate2: '+img.readystate + '<br />');
	$('#slide_debug').append('<hr />');
	}
	
	if(( e.type == 'load' && img.complete) || ( e.type == 'load' && img.readyState == 'complete') ){
		return true;
	}else{
		return false;
	}
}

function destroy_mouseoutdelay(){
	clearTimeout(zo_slideMouseOuttimer);clearTimeout(zo_slideMouseOuttimer);
}

function delay_mouseout(){
	clearTimeout(zo_slideMouseOuttimer);clearTimeout(zo_slideMouseOuttimer);
	zo_slideMouseOuttimer = setTimeout('do_mouseout();',100);
}

function do_mouseout(){
	clearTimeout(zo_slideMouseOuttimer);clearTimeout(zo_slideMouseOuttimer);
	if(zo_slideTransparentOver){ $('#transparent'+zo_cSlide).hide(); } 
	$('#content'+zo_cSlide).hide(); 
	resume_slide();
}

function animate_slide(){
	// Show new
	zo_slideBlockTimeout=1;
	$('#slide'+zo_cSlide+'').show(zo_slideEffect, { direction: zo_animDirectionShow }, zo_animDuration);
	if(zo_slideTransparent){
		$('#slide_transp'+zo_cSlide+'').show(zo_slideEffect, { direction: zo_animDirectionShow }, zo_animDuration); }
	if(zo_slideContent){
		$('#slide_cont'+zo_cSlide+'').show(zo_slideEffect, { direction: zo_animDirectionShow }, zo_animDuration); }
	zo_slideBlockTimeout=0;			
	// Hide previous
	if(zo_pSlide > 0){
		zo_slideBlockTimeout=1;
		$('#slide'+zo_pSlide+'').hide(zo_slideEffect, { direction: zo_animDirectionHide }, zo_animDuration);
		if(zo_slideTransparent){
			$('#slide_transp'+zo_pSlide+'').hide(zo_slideEffect, { direction: zo_animDirectionHide }, zo_animDuration); }
		if(zo_slideContent){
			$('#slide_cont'+zo_pSlide+'').hide(zo_slideEffect, { direction: zo_animDirectionHide }, zo_animDuration); }
		zo_slideBlockTimeout=0;
	}
}

function pause_slide(){
	clearTimeout(zo_slideTimeout); clearTimeout(zo_slideTimeout);
	zo_slideRunningTimeout = 0;
}

function resume_slide(){
	if(zo_slideRunningTimeout != 1 && zo_slideBlockTimeout == 0){
		zo_slideTimeout = setTimeout('get_nextslide();',zo_slideIntTimeout);
	}
	zo_slideRunningTimeout = 1;
}

function set_nextslidediv(){
	// Which div to use.
	if(zo_cSlide == 1){ 
		zo_pSlide = 1; zo_cSlide = 2;
	}else if(zo_cSlide == 2){
		zo_pSlide = 2; zo_cSlide = 1;
	}
}

function set_nextslidenum(data){
	var totalSlides = data['total'];
	
	// Get index
	if(zo_iCounter == (totalSlides-1)){ zo_iCounter = 0; }else{ zo_iCounter++; }
	
	return zo_iCounter;
}
