<!-- ignore if older browser

// TYPJS, BOILER

var sld_number = 0;
var imgSeq = 0 ;
var B_Pre_Img=new Array(Book_Image_Sources.length);
var	poolLength = Book_Image_Sources.length; 
var shortLength = poolLength - 1;

function loadPics(){
	if(document.getElementById) {
		for (i=0; i<Book_Image_Sources.length; i++) {
			B_Pre_Img[i]=new Image(); 
			B_Pre_Img[i].src=js_dir_path + Book_Image_Sources[i];}
//			document('ImageMain').src = B_Pre_Img[0].src;
			}}
	
function swapRandomly(){
	imgSeq++ ;
	Img1.src = B_Pre_Img[(imgSeq) % shortLength + 1].src ; // never [0]
	Img2.src = B_Pre_Img[(imgSeq + 1) % shortLength + 1].src ;
	Img3.src = B_Pre_Img[(imgSeq + 2) % shortLength + 1].src ;
	Img4.src = B_Pre_Img[(imgSeq + 3) % shortLength + 1].src ;
	setTimeout("swapRandomly()", 3000)} // then calls itself again
	
function swapMainImage(my_time){
	imgSeq++ ;
	if (!my_time){my_time = 4000;}
	ImageMain.src = B_Pre_Img[imgSeq % poolLength].src ; // can be [0]
	setTimeout("swapMainImage(" + my_time + ")", my_time)} // then calls itself again
	
function swapMainFade(my_time){
	imgSeq++ ;
	if (!my_time){my_time = 4000;}
	ImageMain.src = B_Pre_Img[imgSeq % poolLength].src ; // can be [0]
	fadeImg(my_time / 3) ;
	setTimeout("swapMainFade(" + my_time + ")", my_time) ; // then calls itself again
	imgOpacity(0) ; } 
	
function swapSpryFade(my_time){
	imgSeq++ ;
	if (!my_time){my_time = 4000 ; }
	imgOpacity(0) ;
	ImageMain.src = B_Pre_Img[imgSeq % poolLength].src ; // can be [0]
	var fadeElement = fadeUp(my_time * .35 ) ;
	setTimeout("swapSpryFade(" + my_time + ")", my_time) ; // then calls itself again
} 

function fadeUp(my_time){
	runEffect('Fade', 'fade1', {duration: my_time, from: 10, to: 100, toggle: false} ) ;
}

function fadeDown(){
	runEffect('Fade', 'fade1', {duration: 1000, from: 100, to: 20, toggle: false} ) ;
}

function setOpacity(value) {
	SwapHolder.style.opacity = value / 10;
	SwapHolder.style.filter = 'alpha(opacity=' + value * 10 + ')';
}

function imgOpacity(value) {
	ImageMain.style.opacity = value / 10;
	ImageMain.style.filter = 'alpha(opacity=' + value * 10 + ')';
}

function fadeImg(total_ms){
	var fade_ms = total_ms / 40, half_steps = 15;
	for (fade_step = 0; fade_step < half_steps * 2 ; fade_step++){
		op = (half_steps - Math.abs(fade_step - half_steps)) + 1;
		setTimeout("imgOpacity(" + op + ")", fade_ms * op);
}}
	
function fadeUpDown(total_ms){
	var fade_ms = total_ms / 40, half_steps = 15;
	for (fade_step = 0; fade_step < half_steps * 2 ; fade_step++){
		op = (half_steps - Math.abs(fade_step - half_steps)) + 1;
		setTimeout("setOpacity(" + op + ")", fade_ms * op);
}}
	
function loadSlides(){
	if(document.getElementById){
		for(i=0; i<Book_Image_Sources.length; i++)
			{ B_Pre_Img[i]=new Image(); 
			B_Pre_Img[i].src=js_dir_path + Book_Image_Sources[i];}
		slideSwap();}}

function slideSwap(){
	sld_number++;
	if (sld_number >= Book_Image_Sources.length) {sld_number = 1;} /// avoid [0] because that is used in the masthead
	SwapHolder.src=B_Pre_Img[sld_number].src;
	fadeUpDown(6000);
	setTimeout("slideSwap()", 5000) // then calls itself again
	setOpacity(0);
	} 
		
// 	Global Variables // list of effects already run to be reused
var effects = {};
// latest effect ran
var prevEffect = false;
// CSS initial properties for the elements on which we apply the effects
var initialElements = [];
// list of style properties to be monitored
var saveStyle = ['position', 'width', 'height', 'opacity', 'filter', 'top', 'left', 'backgroundColor', 'visibility', 'display'];

// Generic Observer // 		The observer will save the initial element state, 
// 		restore the effect and the element to their original states when the effect finished or canceled.
var Observer = {};
Observer.onPreEffect = function(obj){
	if (obj.direction && obj.direction == Spry.forwards){
		saveElement(obj.element);
		if (obj.name == 'Slide' || obj.name == 'FadeSlide'){
			saveElement(document.getElementById('content_box'));
		}
	}
};
Observer.onCancel = function(obj){
	if (obj.direction == Spry.forwards){
		obj.doToggle();
	}
	
	restoreElement(obj.element);

	if (obj.name == 'Slide' || obj.name == 'FadeSlide'){
		var el = document.getElementById('content_box')
		restoreElement(el);
	}
};
Observer.onPostEffect = function(obj){
	if (obj.direction == Spry.forwards)
		setTimeout(function(){obj.start()}, 150);
	else
		restoreElement(obj.element);
};

function ExampleHelpText(helpText)
{
	document.getElementById("text_pane").innerHTML='<p>'+helpText+'</p>';
};

function ReloadDocument()
{
	window.location.reload(true);
};

var saveElement = function(el){
	if (!initialElements[el.id])
	{
		initialElements[el.id] = {};
		for (var i = 0; i < saveStyle.length; i++)
		{
			initialElements[el.id][saveStyle[i]] = Spry.Effect.getStyleProp(el, saveStyle[i]);
		}
	}
};

var restoreElement = function(el){
	for (var i = 0; i < saveStyle.length; i++)
		el.style[saveStyle[i]] = initialElements[el.id][saveStyle[i]];
};

var runEffect = function(effect, element, options, helptext){
	if (prevEffect && effects[prevEffect].isRunning){
		effects[prevEffect].cancel();
		setTimeout(function(){runEffect(effect, element, options, helptext)}, 150);
		return false;
	}

	if (!effects[effect]){
		effects[effect] = new Spry.Effect[effect](element, options);
		if (effect != 'Highlight' && effect != 'Shake' && effect != 'Pulsate' && effect != 'Fade') {
			effects[effect].addObserver(Observer) ; }
	}

	effects[effect].start();

	if (helptext)
		ExampleHelpText(helptext);

	prevEffect = effect;
	return false;
};
// restart if ignored -->

