var timerbusy = 1;
var fir;
var lastpixnum = 2;
var lastdescrpixnum = 140;  // this neeeds to be calculated (first pervias id)
var lastactive = -1;
var startpos = 0, startpos2 = 0;
var Timer;
var perviaswidth;
var scrollLimitL;
var scrollLimitR;
var scrollwasdone = 0;

function init() {
	timerbusy = 0;
	document.getElementById('limiter_hor').scrollLeft = 0;
	document.getElementById('limiter_ver').scrollTop = 0;
	document.getElementById('loadin').style.visibility='hidden';
	document.getElementById('navigation').style.visibility='visible';
	document.getElementById('band_hor').style.visibility='visible';
	document.getElementById('limiter_ver').style.visibility='visible';
	document.getElementById('nav'+fir).className='act';
	lastactive = fir;
	adjustprojects();
}



var r = [];
var ry;
function scrollArticle(filenam) {
	var y = r[filenam];
	scrollto(r[filenam],ry,-2);
}

var ifpixnum;
function scrollto(pixnum,menunum,active) {
	var endpos = 2048*pixnum;
	var endpos2 = 2048*menunum;
	if (timerbusy===0 && (startpos!=endpos || startpos2!=endpos2)) {
		if (scrollwasdone==1) { // realign to start position if scroll was done 
			document.getElementById('limiter_hor').scrollLeft = scrollLimitL;
			scrollwasdone=0;
		}
		timerbusy = 1;
		ifpixnum = (active==-2) ? pixnum : 0;
		Timer = setInterval('trapezoidal('+startpos+','+endpos+','+startpos2+','+endpos2+','+ifpixnum+')',10);
		startpos = endpos;
		startpos2 = endpos2;
		if (active>=0) {
			document.getElementById('nav'+lastactive).className = 'inact';
			document.getElementById('nav'+active).className = 'act';
			lastactive = active;
			document.getElementById('descr_'+lastdescrpixnum).style.visibility = 'hidden';
			document.getElementById('descr2').style.visibility = 'hidden';
		} else if (active==-1) {
			document.getElementById('menu'+lastpixnum).className = 'transparency';
			document.getElementById('menu'+pixnum).className = 'current';
			lastpixnum = pixnum;
		} else { // by default this is -2 for pervias
			scrollLimitL = endpos;
			scrollLimitR = endpos+perviaswidth-1000;
		}
	}
}


/* TRAPEZOIDAL - generates trapezoidal motion curve of 2 sets of images with defined velocity and acceleration */
var vmax = 128;  // max spacing 2048 divided by 4
var accel = 2;
var maxmove = 3; // never show movement of more than this, skip if need be

function trapezoidal (start,end,start2,end2,pixnu) {
	var elem = document.getElementById('limiter_hor');
	var pos = elem.scrollLeft;
	var elem2 = document.getElementById('limiter_ver');
	var pos2 = elem2.scrollTop;
	var sign, pos_start, end_pos, step, x, y;
	if ((pos==end || start==end)&&(pos2==end2 || start2==end2)) {
		clearInterval(Timer);
		timerbusy=0;
		if (pixnu>0) { 
			document.getElementById('descr_'+pixnu).style.visibility = 'visible';
			lastdescrpixnum = pixnu;
			document.getElementById('descr2').style.visibility = 'visible';
		}
	} else {
		sign = (end>=start) ? 1 : -1;
		if (pos==end || start==end) {
			;
		} else if (pos==start) {
			elem.scrollLeft += sign; 
		} else {
			pos_start = pos - start; x = Math.ceil(Math.pow(2,(Math.floor(Math.log(sign*pos_start)/Math.log(accel))-1)));
			end_pos   = end - pos;   y = Math.ceil(Math.pow(2,( Math.ceil(Math.log(sign*end_pos  )/Math.log(accel))-2)));
			step = sign * Math.min(vmax,Math.min(x,y));
			if (step==sign*vmax && sign*pos_start>1024 && sign*(end-pos)>2048*maxmove) {
				step=((end-start)-sign*2048*maxmove);
			}
			elem.scrollLeft += step;
			//document.getElementById("scrolinks").innerHTML += (pos+'/'+x+'/'+y+'/'+step+' ');
		}
		sign = (end2>=start2) ? 1 : -1;
		if (pos2==end2 || start2==end2) {
			;
		} else if (pos2==start2) {
			elem2.scrollTop += sign; 
		} else {
			pos_start = pos2 - start2; x = Math.ceil(Math.pow(2,(Math.floor(Math.log(sign*pos_start)/Math.log(accel))-1)));
			end_pos   = end2 - pos2;   y = Math.ceil(Math.pow(2,( Math.ceil(Math.log(sign*end_pos  )/Math.log(accel))-2)));
			step = sign * Math.min(vmax,Math.min(x,y));
			if (step==sign*vmax && sign*pos_start>1024 && sign*(end2-pos2)>2048*maxmove) {
				step=((end2-start2)-sign*2048*maxmove);
			}
			elem2.scrollTop += step;
		}
	}
}


/* scrolling for the pervias series */

var scrollFlag = 0;
function setScrollTimer(step,period) {
	if (step===0 || step!==scrollFlag) {
		clearInterval(Timer);
		scrollFlag = 0;
		timerbusy = 0;
	}
	if (step!==0 && scrollFlag===0) {
		Timer = setInterval('scroller('+step+')',period);
		scrollFlag = step;
		timerbusy = 1;
		scrollwasdone = 1;
	}
}
function scroller(step) {
	var pos = document.getElementById('limiter_p'+ifpixnum);
	var lastscrol = pos.scrollLeft;
	pos.scrollLeft -= step;
	if (pos.scrollLeft == lastscrol) {   // check for end of scroll limits
		clearInterval(Timer);
		scrollFlag = 0;
		timerbusy = 0;
	}
}


function adjustprojects() {
	var divCollection = document.getElementsByTagName("div");
	var j=0; var k=0; var m=0;
	var t_c = [];
	var t_p = [];
	var t_h = [];
	var p_h = [];
	var htotal = [];
	var h = [];
	var n = [];
	var pt = [];
	var pth = [];
	var divCol;
	var top, tclast;
	for (var i=0; i<divCollection.length; i++) {  // find heights of divs containing text and matching pix
		divCol = divCollection[i].getAttribute("id");
		if (divCol.substr(0,9) == "menutext_") {
			t_c[j] = divCol.substr(9,1);
			t_p[j] = divCol.substr(11,1);
			t_h[j] = divCollection[i].offsetHeight;  // also try pixelHeight
			j++;
		} else if (divCol.substr(0,8) == "menupix_") {
			p_h[k] = divCollection[i].offsetHeight;
			k++;
		} else if (divCol.substr(0,10) == "projtitle_") {
			pt[m] = divCol.substr(10,1);
			pth[m] = divCollection[i].offsetTop;  // also try pixelHeight
			m++;
		}
	}
	tclast=-1;
	for (i=0; i<j; i++) {  // look up total height required
		if (t_c[i]!=tclast) {
			htotal[t_c[i]] = 0;
			n[t_c[i]] = 0;
			tclast = t_c[i];
		}
		h[i] = Math.max(t_h[i],p_h[i]);	// for pix and text pick highest div
		htotal[t_c[i]] += h[i];
		n[t_c[i]] += 1;
	}
	tclast=-1;
	for (i=0; i<j; i++) {  // adjust all positions so evnly distributed on height
		if (t_c[i]!=tclast) {
			top = 10;
			tclast = t_c[i];
		}
		document.getElementById('menutext_'+t_c[i]+'_'+t_p[i]).style.top = top+'px';
		document.getElementById( 'menupix_'+t_c[i]+'_'+t_p[i]).style.top = (top+5)+'px';
		top += (h[i] + (545-htotal[t_c[i]])/n[t_c[i]] );   // offset a bit so top is 10px and total is 545+10 leaving 5px bottom
	}
	for (i=0; i<m; i++) {  // adjust all positions so evnly distributed on height
		document.getElementById('transparency_'+pt[i]).style.top = pth[i]+'px';
	}
}