//hard-coded default slideshow post:
var default_post='enterprise';

function smart_load(slidershow_url,post_title) {
	//check for default
	if (post_title==null) post_title = default_post;
	//hide all slideshows
	jQuery('.slidershow').hide();
	//fetch show to be loaded
	var slidershow = jQuery('#slidershow_'+post_title);
	if(slidershow.html()!=null) {
		//show if it exists
		slidershow.show();
	} else {
		//else load it
		load_show(slidershow_url,post_title);
	}
}

function load_show(slidershow_url,post_title)
{	
	var full_url = slidershow_url+post_title.replace(' ','-').toLowerCase();
	var async_call = new sack(full_url);
	async_call.onError = function() { alert('Ajax error in feedback' )};
	async_call.onCompletion = function() {if(async_call.responseStatus[0] == 200) add_show(async_call.response)};
	async_call.runAJAX();
	return true;
}

function load_show_gallery(slidershow_gallery_url)
{	
	var async_call_gallery = new sack(slidershow_gallery_url);
	async_call_gallery.onError = function() { alert('Ajax error in feedback' )};
	async_call_gallery.onCompletion = function() {if(async_call_gallery.responseStatus[0] == 200) add_gallery(async_call_gallery.response)};
	async_call_gallery.runAJAX();
	return true;
}

function add_gallery(responseXML)
{
	jQuery('#slidershow_gallery').html(responseXML);
}

function add_show(responseXML)
{
	jQuery('#slidershow').append(responseXML);
}

function set_fixed_width(show_id)
{
	var slider_width = 0;
	var slider_elements = jQuery('#'+show_id+' .sliderslide');
	for (var i = 0; i < slider_elements.length; i++)
	{
		slider_width += slider_elements[i].offsetWidth;
	}
	var slider_slides = jQuery('#'+show_id+' .sliderslides');
	slider_slides.width(slider_width);
}


//physics
var slider_force = 3;
var slider_friction = 2;
var slider_interval = 30;
var max_momentum = 30;
//instances
var slider_momentum = new Array();
var increase_momentum_right = new Array();
var increase_momentum_left = new Array();
var decrease_momentum = new Array();
var physics_instance = new Array();

function start_slide(show_id)
{
	activate(show_id);
	slider_momentum[show_id] = -4;
}

function activate(show_id)
{
	if(physics_instance[show_id] == null)
	{
		if(slider_momentum[show_id] == null) slider_momentum[show_id] = 0;
		physics_instance[show_id] = setInterval('physics("'+show_id+'");',slider_interval);
	}
}

function deactivate(show_id)
{
	slider_momentum[show_id] = 0;
	no_force(show_id);
	clearInterval(physics_instance[show_id]);
	physics_instance[show_id] = null;
}

function physics(show_id)
{
	apply_force(show_id);
	apply_momentum(show_id);
}

function force_right(show_id)
{
	increase_momentum_right[show_id] = true;
	if (physics_instance[show_id] == null) activate(show_id);
}

function force_left(show_id)
{
	increase_momentum_left[show_id] = true;
	if (physics_instance[show_id] == null) activate(show_id);
}

function no_force(show_id)
{
	increase_momentum_right[show_id] = false;
	increase_momentum_left[show_id] = false;
	decrease_momentum[show_id] = false;
}

function apply_friction(show_id)
{
	decrease_momentum[show_id] = true;
}

function apply_force(show_id)
{
	if (increase_momentum_right[show_id])
	{
		if(slider_momentum[show_id] > -max_momentum) slider_momentum[show_id] -= slider_force;
	}
	if (increase_momentum_left[show_id])
	{
		if(slider_momentum[show_id] < max_momentum)slider_momentum[show_id] += slider_force;
	}
	if (decrease_momentum[show_id] && slider_momentum[show_id])
	{
		if (slider_momentum[show_id] > 0)
		{
			slider_momentum[show_id] -= slider_friction;
			if ( slider_momentum[show_id] < 0) slider_momentum[show_id] = 0;
		}
		else
		{
			slider_momentum[show_id] += slider_friction;
			if ( slider_momentum[show_id] > 0) slider_momentum[show_id] = 0;
		}
	}
	if (slider_momentum[show_id] == 0 && !increase_momentum_left[show_id] && !increase_momentum_right[show_id]) deactivate(show_id);
}

function apply_momentum(show_id)
{
//alert(show_id);
	var sliderslides = jQuery('#'+show_id+' .sliderslides');
	/* IE */if(sliderslides.css('left') == 'auto') sliderslides.css('left','0px');
	var current_left = parseInt(sliderslides.css('left').replace('px',''));
	if(hit_left(show_id,slider_momentum[show_id]))
	{
		deactivate(show_id);
		current_left = 0;
	} else if(hit_right(show_id,slider_momentum[show_id])) {
		deactivate(show_id);
		current_left = get_right(show_id);
	} else {
		current_left += slider_momentum[show_id];
	}
	sliderslides.css('left',current_left+'px');
}

function hit_left(show_id,current_momentum)
{
	if(current_momentum == null) current_momentum = 0;
	var sliderslides = jQuery('#'+show_id+' .sliderslides');
	return sliderslides.position().left + current_momentum >= 0;
}

function hit_right(show_id,current_momentum)
{
	if(current_momentum == null) current_momentum = 0;
	var scroller = jQuery('#'+show_id);
	var sliderslides = jQuery('#'+show_id+' .sliderslides');
	return get_right(show_id) >= sliderslides.position().left + current_momentum;
}

function get_right(show_id)
{
	var scroller = jQuery('#'+show_id);
	var sliderslides = jQuery('#'+show_id+' .sliderslides');
	var right_value = scroller[0].offsetWidth - sliderslides.width();
	if (right_value > 0) right_value = 0;
	return right_value;
}