// --------------------------------------------------------------------------------------------------------------------------------------------
// Javascript for draggable slider control
// --------------------------------------------------------------------------------------------------------------------------------------------

var mousex = 0;
var mousey = 0;
var grabx = 0;
var graby = 0;
var orix = 0;
var oriy = 0;
var elex = 0;
var eley = 0;
var containerwidth = 0;
var sliderwidth = 0;
var slideroffset = 0;
var tickwidth = 0;
var mintickwidth = 5;
var minwidth = 75;
var maxwidth = 718;
var slideractive = false;
var sliderdragging = false;

var dragobj = null;

function falsefunc() { return false; }

function sliderInit() {
	// Set the width of the slider based on the number of page sets
	if (noSets > 1) {
		if ((noSets * minwidth) > maxwidth) containerwidth = maxwidth; else containerwidth = noSets * minwidth;
		slideractive = true;
	} else {
		containerwidth = 0;
	}
	document.getElementById("sliderGroove").style.width = containerwidth + "px";
	
	// Get element widths
	sliderwidth = document.getElementById("sliderButton").offsetWidth;
	slideroffset = sliderwidth / 2;
	document.getElementById("sliderButton").style.left = (0 - slideroffset) + "px";
	elex = (0 - slideroffset);
	
	// create groove ticks
	if (slideractive) {
		groove = document.getElementById("sliderGroove");
		mypercent = ((noSets / (noSets - 1)) - 1);
		tickwidth = containerwidth * mypercent;
		for (var i=0; i<noSets; i++) {
			if (i == 0 || i == (noSets - 1) || tickwidth >= mintickwidth) {
				newTick = document.createElement('div');
				tickID = 'tick'+ i;
				newTick.setAttribute('id',tickID);
				groove.appendChild(newTick);
				document.getElementById("tick" + i).style.left = containerwidth * (mypercent * i) + "px";
				if (i == 0) {
					document.getElementById("tick" + i).className = "sliderTickLeft";
				} else {
					document.getElementById("tick" + i).className = "sliderTick";
				}
			}
		}
	} else {
		// De-active slider link
		document.getElementById("sliderButton").className = "sliderButtonOff";
		document.getElementById("sliderButtonLink").title = "";
	}
	
	// update(event) implied on NS, update(null) implied on IE
	document.onmousemove = update;
	update();
	
	// Load page images
	if (noPages > 0) setTimeout("loadNextPage();",100);
}

function getMouseXY(e) {
	if (!e) e = window.event; // works on IE, but not NS (we rely on NS passing us the event)

	if (e) { 
		if (e.pageX || e.pageY) { // this doesn't work on IE6!! (works on FF,Moz,Opera7)
			mousex = e.pageX;
			mousey = e.pageY;
		} else if (e.clientX || e.clientY) { // works on IE6,FF,Moz,Opera7
			mousex = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
			mousey = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
		}  
	}
}

function update(e) {
	getMouseXY(e); // NS is passing (event), while IE is passing (null)
	
	// Calculate the page we are on
	if (slideractive) {
		mydistance = elex + slideroffset;
		mytickdistance = Math.floor((elex + slideroffset) / tickwidth);
		mydistancer = mydistance - (tickwidth * mytickdistance);
		mydistancep = mydistancer / tickwidth;
		if (mydistancep >= 0.5) mytickdistance += 1;
		currPageSet = mytickdistance;
		document.getElementById("sliderButtonLink").innerHTML = pageSetText[currPageSet];		
	} else {
		document.getElementById("sliderButtonLink").innerHTML = pageSetText[0];
	}
}

function grab(context,jump) {
	if (slideractive && !sliderdragging) {
		document.onmousedown = falsefunc; // in NS this prevents cascading of events, thus disabling text selection
		dragobj = context;
		dragobj.style.zIndex = 10; // move it to the top
		document.onmousemove = drag;
		document.onmouseup = drop;
		grabx = mousex;
		graby = mousey;
		if (jump) moveSliderToMouse();
		elex = orix = dragobj.offsetLeft;
		eley = oriy = dragobj.offsetTop;
		update();
		sliderdragging = true;
		bookmarkPage = false;
	}
}

function drag(e) { // parameter passing is important for NS family 
	if (dragobj) {
		elex = orix + (mousex-grabx);
		eley = oriy + (mousey-graby);
		if (elex < (0 - slideroffset)) elex = 0 - slideroffset;
		if (elex > (containerwidth - slideroffset)) elex = containerwidth - slideroffset;
		dragobj.style.position = "absolute";
		dragobj.style.left = (elex).toString(10) + 'px';
		dragobj.className = "sliderButtonOn";
	}
	update(e);
	return false; // in IE this prevents cascading of events, thus text selection is disabled
}

function drop() {
	if (dragobj) {
		dragobj.className = "";
		dragobj = null;
		sliderdragging = false;
	}
	update();
	document.onmousemove = update;
	document.onmouseup = null;
	document.onmousedown = null; // re-enables text selection on NS
	gotoPageSet(currPageSet);
	moveSlider();
}

function moveSlider() {
	// Get page number
	if (currPageSet == 0) {
		elex = 0 - slideroffset;
	} else if (currPageSet == (noSets - 1)) {
		elex = containerwidth - slideroffset;
	} else {
		elex = (currPageSet * tickwidth) - slideroffset;
	}
	document.getElementById("sliderButton").style.left = elex + "px";
	update();
}

function moveSliderToMouse() {
	if (dragobj) {
		grooveoffset = document.getElementById("centredPage").offsetLeft + document.getElementById("browserArea").offsetLeft + document.getElementById("sliderContainer").offsetLeft + document.getElementById("sliderGroove").offsetLeft + slideroffset;
		dragobj.style.position = "absolute";
		dragobj.style.left = (mousex-grooveoffset).toString(10) + 'px';
		dragobj.className = "sliderButtonOn";
	}
}

// Cookie functions

function setCookie(cookieName,cookieValue,expireDays) {
	var exdate = new Date();
	exdate.setDate(exdate.getDate() + expireDays);
	document.cookie = cookieName + "=" + escape(cookieValue) + ((expireDays == null) ? "" : ";expires=" + exdate.toGMTString());
}

function getCookie(cookieName) {
	if (document.cookie.length > 0) {
		cookieStart = document.cookie.indexOf(cookieName + "=");
		if (cookieStart != -1) { 
			cookieStart += (cookieName.length + 1); 
			cookieEnd = document.cookie.indexOf(";",cookieStart);
			if (cookieEnd == -1) cookieEnd = document.cookie.length;
			return unescape(document.cookie.substring(cookieStart,cookieEnd));
		} 
	}
	return "";
}

