function addLoadEvent(func) {
  var oldonload = window.onload;
  if (typeof window.onload != 'function') {
    window.onload = func;
  } else {
    window.onload = function() {
      if (oldonload) {
        oldonload();
      }
      func();
    };
  }
};


var fullheights = {};
var initial = 3;
var accel = 3;
var speed = 25;
var maxrate = 500;

function getFullHeight(nam) {
	t = document.getElementById("menuinner_" + nam);
	return t.offsetHeight;
}

function toggle(id)
{
	if(brokenBrowser()) return true;
	div = document.getElementById("menu_" + id);
	//div.style.height = "";
	if(div.offsetHeight==0) {
		//collapse everybody else
		collapseme = false;
		for(var i in fullheights) {
			if(i!=id && document.getElementById("menu_"+i).offsetHeight>0) {
				collapseme = i;
			}//setTimeout("collapse('" + i + "')", speed/2);
		}
		//expand me
		if(collapseme) {
			expandAndCollapse(id, collapseme);
		} else {
			expandAndCollapse(id, "dummy");
//			expand(id);
		}
	} else {//if(div.style.height=="auto") {
		expandAndCollapse("dummy", id);
		//collapse(id);
	}
	return false;
}

function collapse(id)
{
	div = document.getElementById("menu_" + id);
	if(div.style.height=="auto") {
		fullheights[id] = div.offsetHeight;
	}
	doCollapse(id, initial);
}

function doCollapse(id, rate)
{
	div = document.getElementById("menu_" + id);
	if(div.offsetHeight<=0 || rate>maxrate) return;
	
	h = div.offsetHeight; //height.substring(0, div.style.height.length-2);
	newheight =(h-rate);
	if(newheight<0) newheight = 0;
	div.style.height = newheight + "px";
	setTimeout("doCollapse('" + id + "', " + (rate+accel) + ")", speed);
}

function expand(id)
{
	doExpand(id, initial*2);
}

function doExpand(id, rate)
{
	div = document.getElementById("menu_" + id);
	if(div.offsetHeight>=getFullHeight(id) || rate>maxrate) {
//		div.style.height = "auto";
		return;
	}
	
	h = div.offsetHeight; //height.substring(0, div.style.height.length-2);
	newheight =(h+rate);
	if(newheight>getFullHeight(id)) newheight = getFullHeight(id);
	div.style.height = newheight + "px";
	
	newrate = rate;
	if(newheight>(getFullHeight(id)/2)) {
		newrate = newrate - accel;
		if(newrate<3) newrate = 3;
	} else {
		newrate = newrate + accel;
	}
	setTimeout("doExpand('" + id + "', " + (newrate) + ")", speed);
}

var animating = -1;

function expandAndCollapse(id, id2)
{
	window.clearTimeout(animating);
	doExpandAndCollapse(id, id2, initial*1.5, initial*1.5);
}


function doExpandAndCollapse(id, id2, rate1, rate2) 
{
	div = document.getElementById("menu_" + id);
	div2 = document.getElementById("menu_" + id2);
	if(div.offsetHeight>=getFullHeight(id) || rate1>maxrate) {
//		div.style.height = "auto";
	}
	
//	if(div2.style.height=="auto" || rate2>maxrate) {
//		fullheights[id2] = div2.offsetHeight;
//	}
	
	if(div2.offsetHeight<=0 && div.offsetHeight>=getFullHeight(id)) {
		menuUpdateImg(id);
		menuUpdateImg(id2);
		return;
	}
	
	av = (rate1+rate2)/2;
	
	h = div.offsetHeight; //height.substring(0, div.style.height.length-2);
	newheight =(h+av);//rate1);
	if(newheight>getFullHeight(id)) newheight = getFullHeight(id);
	
	h = div2.offsetHeight; //height.substring(0, div.style.height.length-2);
	newheight2 =(h-av);//rate2);
	if(newheight2<0) newheight2 = 0;
	
	div.style.height = newheight + "px";
	div2.style.height = newheight2 + "px";
	
	newrate1 = rate1;
	if(newheight>(getFullHeight(id)/2)) {
		newrate1 = newrate1 - accel;
		if(newrate1<3) newrate1 = 3;
	} else {
		newrate1 = newrate1 + accel;
	}
	
	newrate2 = rate2;
	if(newheight2<(getFullHeight(id2)/2)) {
		newrate2 = newrate2 - accel;
		if(newrate2<3) newrate2 = 3;
	} else {
		newrate2 = newrate2 + accel;
	}
	//window.status = "Collapsing one: velocity=" + newrate2 +", pos=" + newheight2
	
	animating = setTimeout("doExpandAndCollapse('" + id + "', '" + id2 + "', " + (newrate1) + ", " + (newrate2) + ")", speed);

}


var newsTargetHeight = -1;
var newsOriginalHeight = -1;

var newsTargetPos = -1;
var newsOriginalPos = -1;

function scrollNewsTo(id)
{
	outer = document.getElementById("latestnews_outer");
	newsOriginalHeight = outer.offsetHeight;
	
	div = document.getElementById("latestnews_" + id);
	newsTargetHeight = div.offsetHeight;
	
	//outer.style.height = "50px";
	
	newsOriginalPos = outer.scrollTop;
	newsTargetPos = div.offsetTop - document.getElementById("latestnews_top").offsetTop;
	
	if(navigator.appName=="Opera") {
		outer.style.overflow = "auto";
	}
//	alert("original pos is " + newsOriginalPos + " target pos is " + newsTargetPos);
//	alert("newstargetpos is " + newsTargetPos);
	
//	outer.scrollTop=100;
	
	doScrollNews(id, 0, -1);
}

var newsIndex = [];

var newsIndexPos = 0;

function brokenBrowser()
{
	if(navigator.appVersion.indexOf("MSIE") > 0 && navigator.appVersion.indexOf("Mac") > 0) {
		return true;
	}
	return false;
}

function wrongNewsHeight()
{
	if(navigator.appVersion.indexOf("Safari") > 0) {
		return true;
	}
	return false;
}

function setNewsIndex(arr)
{
	newsIndex = arr;
}

function nextNews()
{
	//is this a broken browser?
	//alert(navigator.appVersion);
	if(brokenBrowser()) {
		return true;
	}
	
	if(newsIndexPos<newsIndex.length-1) {
		newsIndexPos += 1;
	} else {
		newsIndexPos = 0;
	}
	
	scrollNewsTo(newsIndex[newsIndexPos]);
	return false;
}

function hopNewsTo(id)
{
	outer = document.getElementById("latestnews_outer");
	div = document.getElementById("latestnews_" + id);
	if(brokenBrowser()) {
		outer.style.height = (div.offsetHeight+10) + "px";
		//outer.offsetHeight = 50;
	} else {
		outer.style.height = div.offsetHeight + "px";
		outer.scrollTop = div.offsetTop - document.getElementById("latestnews_top").offsetTop;
		if(wrongNewsHeight()) {
			setTimeout("scrollNewsTo('" + id + "')", 500);
		}
	}
}

function doScrollNews(id, amount, amount2)
{
	outer = document.getElementById("latestnews_outer");
	div = document.getElementById("latestnews_" + id);

	newsheight = outer.offsetHeight;
	newsscroll = outer.scrollTop;
	
	
	heightfinished = false;
	if(newsheight>newsTargetHeight-amount && newsheight<newsTargetHeight+amount) {
		newsheight = newsTargetHeight;
		outer.style.height = newsTargetHeight + "px";
		heightfinished = true;
	} else if(newsheight < newsTargetHeight) {
		newsheight += amount;
	} else if(newsheight > newsTargetHeight) {
		newsheight -= amount;
	}

	scrollfinished = false;
//	window.status = "(" + newsscroll + "," + (newsTargetPos-amount2) + "," + newsscroll + "," + (newsTargetPos+amount2) + ")"
	if(newsscroll>newsTargetPos-amount2 && newsscroll<newsTargetPos+amount2) {
//		window.status = "finito";
		newsscroll = newsTargetPos;
		outer.scrollTop = newsTargetPos;
		scrollfinished = true;
	} else if(newsscroll < newsTargetPos) {
		newsscroll += amount2;
	} else if(newsscroll > newsTargetPos) {
		newsscroll -= amount2;
	}
	
	if(scrollfinished && heightfinished) {
		return;
	}
		
	newamount = amount + 1;
	origdiff = newsTargetHeight - newsOriginalHeight;
	curdiff = newsTargetHeight - newsheight;
	if(newsTargetHeight<newsheight && curdiff>(origdiff/2)
	|| newsTargetHeight>newsheight && curdiff<(origdiff/2)) {
		newamount = amount - 1;
		if(newamount<1) newamount = 1;
	}
	
	newamount2 = amount2 + 1;
	origdiff = newsTargetPos - newsOriginalPos;
	curdiff = newsTargetPos - newsscroll;
	if(newsTargetPos<newsscroll && curdiff>(origdiff/2)
	|| newsTargetPos>newsscroll && curdiff<(origdiff/2)) {
		newamount2 = amount2 - 1;
		if(newamount2<1) newamount2 = 1;
	}
	
	
	outer.style.height = newsheight + "px";
	outer.scrollTop = newsscroll;
//	alert("setting scrollTop to " + newsscroll);
	
	setTimeout("doScrollNews(" + id + ", " + newamount + "," + newamount2 + ")", 30);
}

function oldscrollNewsTo(id)
{
	outer = document.getElementById("latestnews_outer");
	inner = document.getElementById("latestnews_inner");
	
	div = document.getElementById("latestnews_" + id);
	
	newsTargetHeight = div.offsetHeight;
	newsHeightDiff = div.offsetHeight - outer.offsetHeight;
	
	newsTopDiff = inner.offsetTop + div.offsetTop;
	newsStartTop = inner.offsetTop;
	newsTargetTop = -div.offsetTop + newsOrigTop;// + newsStartTop
	//alert(newsTargetTop);
	
	doScrollNews(id, 1);
}

function olddoScrollNews(id, amount) 
{
	outer = document.getElementById("latestnews_outer");
	inner = document.getElementById("latestnews_inner");
	
	//div = document.getElementById("latestnews_" + id);
	
	sb = 5;
	if(newsHeightDiff<0) sb = -sb;
	outer.style.height = (outer.offsetHeight+sb) + "px";
	
	sb = 5;
	if(newsTargetTop<newsStartTop) sb = -sb;
	//outer.style.height = (outer.offsetHeight+scrollBy) + "px";
	
	inner.style.top = (inner.offsetTop-newsOrigTop+sb) + "px";
	
	finishedScrolling=false;
	if((newsTargetTop<=newsStartTop) && (inner.offsetTop<=newsTargetTop) || (newsTargetTop>=newsStartTop) && (inner.offsetTop>=newsTargetTop) || amount>10) {
		finishedScrolling=true;
		inner.style.top = (newsTargetTop-newsOrigTop) + "px";
	}
	//if((newsTargetTop<newsStartTop)
	
	finishedSizing = false;
	if((newsHeightDiff>0 && outer.offsetHeight>=newsTargetHeight) || (newsHeightDiff<=0 && outer.offsetHeight<=newsTargetHeight) || newsHeightDiff==0) {
		outer.style.height = newsTargetHeight + "px";
		finishedSizing = true;
	}
	
	if(finishedSizing && finishedScrolling) {
//		alert("got there");
		return;
	}
	
	setTimeout("doScrollNews(" + id + ", " + (amount+1) + ")", 25);
	
}

var menuExpands = [];

function addMenuExpand(id)
{
	if(brokenBrowser()) {
		return;
	}
	menuExpands.push(id);
}

function doMenuExpands()
{
	if(brokenBrowser()) {
		return;
	}
	
	for(var i=0; menuExpands[i]; i++) {
		id = menuExpands[i];
		setTimeout("expandAndCollapse('" + id + "', 'dummy');", 500);
	}
}

var globalImageURL = "images/";

function menuOverImg(id, imgurl)
{
	if(!imgurl) {
		imgurl=globalImageURL;
	} else {
		globalImageURL=imgurl;
	}
	
	img = document.getElementById("menuimg_" + id);
	div = document.getElementById("menu_" + id);

	if(div.offsetHeight>0) {
		img.src = imgurl + "nsmenucollapseover.gif";
	} else {
		img.src = imgurl + "nsmenuexpandover.gif";
	}	
}

function menuImg(id, imgurl)
{
	if(!imgurl) {
		imgurl=globalImageURL;
	} else {
		globalImageURL=imgurl;
	}
	
	img = document.getElementById("menuimg_" + id);
	div = document.getElementById("menu_" + id);
	
	if(div.offsetHeight>0) {
		img.src = imgurl + "nsmenucollapse.gif";
	} else {
		img.src = imgurl + "nsmenuexpand.gif";
 	}
}

function menuUpdateImg(id)
{
	img = document.getElementById("menuimg_" + id);
	div = document.getElementById("menu_" + id);

	if(!img) {
		return;
	}
	
	if(img.src.indexOf("over")>-1) {
		menuOverImg(id);
	} else {
		menuImg(id);
	}
}

function setNoHeight(id)
{
	if(brokenBrowser()) {
		document.getElementById("menu_" + id).style.height = "1px";
	} else {
		document.getElementById("menu_" + id).style.height = "0px";
	}
}

function expandFAQ(id)
{
	document.getElementById("faqexpand_" + id).style.display = "none";
	document.getElementById("faqcollapse_" + id).style.display = "";
	
	outer = document.getElementById("faqbodyouter_" + id);
	inner = document.getElementById("faqbodyinner_" + id);
	
//	alert("id is " + id + " and current height " + outer.offsetHeight + " and target height is " + inner.offsetHeight);
	doResizeFAQ(id, outer.offsetHeight, inner.offsetHeight, 1);
}

var FAQtimer = -1;

function doResizeFAQ(id, originalHeight, targetHeight, amount)
{
	if(FAQtimer>-1) {
		clearTimeout(FAQtimer);
		FAQtimer = -1;
	}
//	alert("targetHeight is " + targetHeight);
	outer = document.getElementById("faqbodyouter_" + id);
	
	newheight = outer.offsetHeight;
	heightfinished = false;
	if(newheight>targetHeight-amount && newheight<targetHeight+amount) {
		outer.style.height = targetHeight + "px";
//		alert("finito, targetHeight now " + targetHeight);
		if(newheight>targetHeight) {
		
		}
		return;
	} else if(newheight < targetHeight) {
		newheight += amount;
	} else if(newheight > targetHeight) {
		newheight -= amount;
	}


	newamount = amount + 1;
	origdiff = targetHeight - originalHeight;
	curdiff = targetHeight - newheight;
	if(targetHeight<newheight && curdiff>(origdiff/2)
	|| targetHeight>newheight && curdiff<(origdiff/2)) {
		newamount = amount - 1;
		if(newamount<1) newamount = 1;
	}
	
	
	outer.style.height = newheight + "px";
	
	FAQtimer = setTimeout("doResizeFAQ(" + id + ", " + originalHeight + ", " + targetHeight + ", " + newamount + ")", 30);
}

function collapseFAQ(id)
{
	document.getElementById("faqexpand_" + id).style.display = "";
	document.getElementById("faqcollapse_" + id).style.display = "none";
	
	outer = document.getElementById("faqbodyouter_" + id);
	inner = document.getElementById("faqbodyinner_" + id);
	
//	alert("id is " + id + " and current height " + outer.offsetHeight + " and target height is " + inner.offsetHeight);
	doResizeFAQ(id, outer.offsetHeight, 0, 1);
}

function popup(URL, width, height) {
	window.open(URL, "popup", "width="+width+",height="+height+",scrollbars=no,resizable=0");
};

function preparePopups() {
	var links = document.getElementsByTagName("a");
	for(var i=0; i<links.length; i++) {
		var rel = links[i].getAttribute("rel");
		if(rel) {
			if(rel.search("popup")>=0){
				var atts = rel.split(" ");
				links[i].onclick=function() {
					popup(this.getAttribute("href"), atts[1], atts[2]);
					return false;
				};
			}
		}
	}
};

addLoadEvent(preparePopups);

var galleryTimer = -1;
var scrollAmount = 1;

function startGalleryScroll(dir)
{
	div = document.getElementById("gallerythumbs");
//	div.scrollTop = 100;
	if(navigator.userAgent.indexOf("Opera")>-1) {
		//div.style.height = "auto";
		//return;
		div.style.overflow = "auto";
	}

	scrollAmount = 1;
	doGalleryScroll(dir, 1);

	img = document.getElementById("galleryscrollup");
	if(dir>0) {
		img.src = globalImageURL + "nsgalleryscrollup.gif";
	}
}

function doGalleryScroll(dir, amount)
{
	if(galleryTimer>-1) {
		clearTimeout(galleryTimer);
		galleryTimer = -1;
	}
	div = document.getElementById("gallerythumbs");
	
	if(scrollAmount>10) scrollAmount=10;
	
	if(scrollAmount==0) return;
	
	div.scrollTop = div.scrollTop + (scrollAmount*dir);
	scrollAmount = scrollAmount + amount;
	
	galleryTimer = setTimeout("doGalleryScroll(" + dir + ", " + amount + ")", 50);
}

function stopGalleryScroll(dir)
{
	scrollAmount = scrollAmount - (scrollAmount%2);
	doGalleryScroll(dir, -2);
//	doGalleryScroll(dir, -2);
	
	div = document.getElementById("gallerythumbs");

}

var flashStartHeight = -1;
var flashTargetHeight=-1;
var flashSpeed = 1;
var flashDivId = "";

function resizeFlash(did, h)
{
	flashDivId = did;
	div = document.getElementById(did);
	
	
	flashTargetHeight = h;
	flashStartHeight = div.offsetHeight;
	setTimeout('doResizeFlash()', 30);
	
	//div.style.height = h + "px";
	
}

function doResizeFlash()
{
	div = document.getElementById(flashDivId);
	
	if(Math.abs((div.offsetHeight-flashStartHeight)/(flashTargetHeight-flashStartHeight))>0.5) {
		flashSpeed = Math.max(flashSpeed-10, 5);
	} else {	
		flashSpeed += 10;
	}
	
	if(div.offsetHeight<flashTargetHeight) {
		div.style.height = Math.min((div.offsetHeight + flashSpeed), flashTargetHeight) + "px";

	} else if(div.offsetHeight>flashTargetHeight) {
		div.style.height = Math.max((div.offsetHeight - flashSpeed), flashTargetHeight) + "px";
	} else {
		return;
	}
	
	setTimeout('doResizeFlash()', 30);
}

var Slideshow = new Class({
		
	options: {
		pause: 6000,
		transition: 1500
	},

	initialize: function(container, images, options){
		this.setOptions(options);
		this.container = $(container);
		this.image = this.container.getElement('img');
		
		// cycle image array once before starting
		this.images = images.shift();
		images.push(this.images);
		this.images = images;
		
		this.preloads = [];
		for(var i = 0; images[i]; i++) {
			this.preloads[images[i]] = Asset.image(images[i]);
		}
		
		this.showNext();
	},
	
	showNext: function() {
		if(!this.preloads[this.images[0]]) {
			this.showNext.delay(50,this);
			return;
		}
		this.next = this.images.shift();
		this.images.push(this.next);
		this.container.setStyle('background-image','url('+this.next+')');
		this.effect = new Fx.Style(this.image, 'opacity', {duration: this.options.transition});
		this.effect.addEvent('onComplete', this.onComplete.bind(this));
		this.effect.start(0);
	},
	
	onComplete: function() {
		this.image.src = this.next;
		this.image.setOpacity(1);
		this.showNext.delay(this.options.pause, this);
	}
	
});

Slideshow.implement(new Options);