// ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// 
// Coded by Travis Beckham
// http://www.squidfingers.com | http://www.podlob.com
// If want to use this code, feel free to do so, but please leave this message intact.
//
// ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// --- version date: 01/17/03 ---------------------------------------------------------

// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Cross-Browser Functions

var dom = document.getElementById;
var iex = document.all;
var ns4 = document.layers;

function addNewEvent(event,method){
	this[event] = method;
	if(ns4) this.captureEvents(Event[event.substr(2,event.length).toUpperCase()]);
}
function removeEvent(event){
	this[event] = null;
	if(ns4) this.releaseEvents(Event[event.substr(2,event.length).toUpperCase()]);
}
function getElement(name,nest){
	nest = nest ? "document."+nest+"." : "";
	var el = dom ? document.getElementById(name) : iex ? document.all[name] : ns4 ? eval(nest+"document."+name) : false;
	el.css = ns4 ? el : el.style;
	el.hideVis = function(){el.css.visibility="hidden"};
	el.showVis = function(){el.css.visibility="visible"};
	el.getTop = function(){return parseInt(el.css.left) || 0};
	el.setTop = function(y){el.css.left = ns4 ? y: y+"px"};
	el.getHeight = function(){return ns4 ? el.document.width : el.offsetWidth};
	/*el.getHeight = function(){alert(el.offsetWidth)};*/
	el.getClipHeight = function(){return ns4 ? el.clip.width : el.offsetWidth};
	el.addNewEvent = addNewEvent;
	el.removeEvent = removeEvent;
	return el;
}
function getMouse(e){
	return iex ? event.clientX : e.pageX;
}

document.addNewEvent = addNewEvent;
document.removeEvent = removeEvent;

// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Scroll Functions

var currentContent = null;
var docLoaded = false;
var contentMovement = 0;

function initScroller(){
	if( document.getElementById("contentMask") ){
		if((navigator.userAgent.indexOf('Gecko') != -1) && (navigator.userAgent.indexOf('Safari') == -1)) // for all mozilla browsers except Safari
			scrollSpeed = 24; // scrolling speed
		else
			scrollSpeed = 6; // scrolling speed
		
		dragHeight = 80; // Height of scrollbar drag
		trackHeight = 559; // Height of scrollbar track
		trackObj = getElement("track"); // Reference to the scrollbar track div
		upObj = getElement("up"); // Reference to the up arrow div
		downObj = getElement("down"); // Reference to the down arrow div
		dragObj = getElement("drag"); // Reference to the scrollbar drag div
		contentMaskObj = getElement("contentMask"); // Reference to the content mask div
		trackTop = 16; // Scrollbar top contraint
		trackLength = trackHeight-dragHeight; // Adjusted track height
		trackBottom = trackTop+trackLength; // Scrollbar bottom contraint
		contentMaskHeight = contentMaskObj.getClipHeight();// Height of the div that masks the content div
		scrollTimer = null;
		trackObj.addNewEvent("onmousedown",scrollJump);
		upObj.addNewEvent("onmousedown", function(){scroll(scrollSpeed);return false});
		upObj.addNewEvent("onmouseup", stopScroll);
		upObj.addNewEvent("onmouseout", stopScroll);
		downObj.addNewEvent("onmousedown", function(){scroll(-scrollSpeed);return false});
		downObj.addNewEvent("onmouseup", stopScroll);
		downObj.addNewEvent("onmouseout", stopScroll);
		dragObj.addNewEvent("onmousedown", startDrag);
		if(iex) dragObj.addNewEvent("ondragstart", function(){return false});
		docLoaded = true;
		loadContent("scroll");
		
		loadVisibleThumbs(contentMovement);
	}
}

function loadContent(name){
	if(!docLoaded) return;
	if(currentContent!=null){
		//contentObj.setTop(0);
		contentObj.hideVis();
	}
	currentContent = name;
	contentObj = getElement(currentContent+"Content","contentMask");
	contentHeight = contentObj.getHeight(); // Height of the content div
	contentLength = contentHeight-contentMaskHeight; // Adjusted content height
	scrollLength = trackLength/contentLength; // Height difference between the scrollbar track and the content
	contentObj.showVis();
	dragObj.setTop(trackTop);
	if(contentHeight<=contentMaskHeight){
		trackObj.hideVis();
		upObj.hideVis();
		downObj.hideVis();
		dragObj.hideVis();
	}else{

		trackObj.showVis();
		upObj.showVis();
		downObj.showVis();
		dragObj.showVis();
	}
}

function startDrag(e){
	dragStartMouse = getMouse(e); // Holds the starting y mouse position
	dragStartOffset = dragObj.getTop(); // Holds the starting top position of the scrollbar drag
	document.addNewEvent("onmousemove", drag);
	document.addNewEvent("onmouseup", stopDrag);
	startThumbs = setInterval(function(){ loadVisibleThumbs(contentMovement) },100);
	return false;
}

function stopDrag(){
	clearInterval(startThumbs);
	document.removeEvent("onmousemove");
	document.removeEvent("onmouseup");
}

function drag(e){
	var currentMouse = getMouse(e);
	var mouseDifference = currentMouse-dragStartMouse;
	var dragDistance = dragStartOffset+mouseDifference;
	var dragMovement = (dragDistance<trackTop) ? trackTop : (dragDistance>trackBottom) ? trackBottom : dragDistance;
	dragObj.setTop(dragMovement);
	contentMovement = -(dragMovement-trackTop)*(1/scrollLength);
	contentObj.setTop(contentMovement);
	return false;
}

widthContentVisible = 579;

var imageLoader = new Loader();
var visibles = [];

function loadVisibleThumbs(contentMovement){
	$("#scrollContent .illusPic").each(function(){
		id = $(this).get(0).getAttribute("id");
		if(id){
			x = $(this).get(0).offsetParent.offsetLeft;
			
			wrapLeft = Math.round(widthContentVisible-contentMovement-widthContentVisible);
			wrapRight = Math.round(wrapLeft+widthContentVisible);
			
			if(x >= wrapLeft && x < wrapRight-50){
				image = datas[id.split("_")[1]];
				
				if(imageLoader.isQueued(image)){
					visibles.push( $(this).get(0) );
					$(this).get(0).setAttribute("src",image);
					return;
				} else {
					visibles.push( $(this).get(0) );
					$(this).get(0).setAttribute("src",image);
					imageLoader.push(image);
				}
				
			}
		}
	});
	
	imageLoader.load();
	
	imageLoader.onComplete = function(loaded) {
		for(i=0; i<visibles.length; i++){
			if( $(visibles[i]).get(0).style.display == "none" || $(visibles[i]).get(0).style.display == "" ){
				$(visibles[i]).css("opacity","0");
				$(visibles[i]).css("visibility","visible");
				
				if( $(visibles[i]).is(".on") )
					$(visibles[i]).fadeTo("slow", 1);
				else
					$(visibles[i]).fadeTo("slow", 0.5);
				
				if( $("#oneLigne").is("table") ){
					$(visibles[i]).siblings("img").css("visibility","visible");
					$(visibles[i]).siblings("img").hide();
					
					if( $(visibles[i]).siblings("img").is(".on") )
						$(visibles[i]).siblings("img").css("opacity","1");
					else
						$(visibles[i]).siblings("img").css("opacity","0.5");
					
				} else {
					$(visibles[i]).siblings("img").css("opacity","0");
					$(visibles[i]).siblings("img").css("visibility","visible");
					$(visibles[i]).siblings("div").css("opacity","0");
					$(visibles[i]).siblings("div").css("visibility","visible");
					
					if( $(visibles[i]).siblings("img").is(".on") )
						$(visibles[i]).siblings("img").fadeTo("slow", 1);
					else
						$(visibles[i]).siblings("img").fadeTo("slow", 0.5);
               
               $(visibles[i]).siblings("div").fadeTo("slow", 1);
				}
			}
		}
	}
}

function Loader() {
	this.all = [];
	this.loaded = [];
	this.imgs = "";
	this.imgsLoaded = "";
	interval = null;
	
	this.push = function() {
		for (var i = 0; i < arguments.length; i++){
			this.all[this.all.length] = arguments[i];
			this.imgs += arguments[i] + "||";
		}
	}
	
	this.load = function() {
		for (var i = 0; i < this.all.length; i++) {
			thumb = {}
			thumb.loader = this;
			thumb.loader.image = new Image();
			thumb.loader.image.src = this.all[i];
			if(!interval){
				interval = setInterval(function(){
					if(thumb.loader.image.complete){
						thumb.loader.imgsLoaded += thumb.loader.all[i] + "||";
						
						clearInterval(interval);
						interval = null;
						(thumb.loader.onComplete||new Function)(thumb.loader.loaded);
						thumb.loader.all = [];
						thumb.loader.loaded = [];
					}
				},700);
			}
		}
	}
	
	this.isQueued = function(img){
		if( this.imgs.indexOf(img) > -1 )
			return true;
		else
			return false;
	}
}

function scroll(speed){
	contentMovement = contentObj.getTop()+speed;
	var dragMovement = trackTop-Math.round(contentObj.getTop()*(trackLength/contentLength));
	if(contentMovement > 0){
		contentMovement = 0;
	}else if(contentMovement < -contentLength){
		contentMovement = -contentLength;
	}
	if(dragMovement < trackTop){
		dragMovement = trackTop;
	}else if(dragMovement > trackBottom){
		dragMovement = trackBottom;
	}
	contentObj.setTop(contentMovement);
	dragObj.setTop(dragMovement);
	
	scrollTimer = window.setTimeout("scroll("+speed+")",25);
}

function stopScroll(){
	if(scrollTimer){
		window.clearTimeout(scrollTimer);
		scrollTimer = null;
	}
}

function scrollJump(e){
	var currentMouse = getMouse(e);
	pos = new findPos(contentMaskObj);
	var dragDistance = currentMouse-(dragHeight/2)-pos.x;
	var dragMovement = (dragDistance<trackTop) ? trackTop : (dragDistance>trackBottom) ? trackBottom : dragDistance;
	dragObj.setTop(dragMovement);
	contentMovement = -(dragMovement-trackTop)*(1/scrollLength);
	contentObj.setTop(contentMovement);
	loadVisibleThumbs(contentMovement);
	return false;
}

// ||||||||||||||||||||||||||||||||||||||||||||||||||
// Utility Functions

function fixNetscape4(){
	if(ns4origWidth != window.innerWidth || ns4origHeight != window.innerHeight){
		window.location.reload();
	}	
}
if(document.layers){
	ns4origWidth = window.innerWidth;
	ns4origHeight = window.innerHeight;
	window.onresize = fixNetscape4;
}

function findPos(obj){
	var curleft = obj.offsetLeft || 0;
	var curtop = obj.offsetTop || 0;
	while (obj = obj.offsetParent) {
		curleft += obj.offsetLeft
		curtop += obj.offsetTop
	}
	this.x = curleft;
	this.y = curtop;
}

// ||||||||||||||||||||||||||||||||||||||||||||||||||

//addLoadEvent(initScroller);