
//GLOBALS




//preloads
var preloadfiles = new Array;
var preloadimgs =  new Array;
var preloadindex=0;


// init
window.onload= function () {

	//mailto protectors
	convertmail();

	//rotation and nav preloads
	dopreloads();
	
	//nag ie6
	browserDetect.ie6Warn();

}

var browserDetect = {
	ie6Warn: function () {
		this.browser = this.searchString(this.dataBrowser) || "";
		this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion)	|| "";
		
		if      ((this.browser=='Explorer') && this.version && this.version <7) this.outdated=true;
		else if ((this.browser=='Netscape') && this.version && this.version <6) this.outdated=true;
		else                                                                    this.outdated=false;
		
		if (this.outdated) alert("Did you know that your web browser is out of date? As part of a worldwide campaign to eradicate IE6, you are recomended to upgrade asap. (try www.firefox.org). By proceeding you acknowledge that your experience may be degraded.");
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1) return data[i].identity;
			}
			else if (dataProp)	return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{string: navigator.userAgent, subString: "Chrome",identity: "Chrome"	},
		{string: navigator.userAgent, subString: "OmniWeb",versionSearch: "OmniWeb/",identity: "OmniWeb"},
		{string: navigator.vendor,    subString: "Apple",	identity: "Safari",versionSearch: "Version"},
		{prop: window.opera,identity: "Opera"},
		{string: navigator.vendor,	   subString: "iCab",   identity: "iCab"},
		{string: navigator.vendor,    subString: "KDE",    identity: "Konqueror"},
		{string: navigator.userAgent,	subString: "Firefox",	identity: "Firefox"},
		{string: navigator.vendor,	   subString: "Camino",	identity: "Camino"},
		{string: navigator.userAgent,	subString: "Netscape",identity: "Netscape"},// for newer Netscapes (6+)
		{string: navigator.userAgent,	subString: "MSIE",    identity: "Explorer",versionSearch: "MSIE"},
		{string: navigator.userAgent,	subString: "Gecko",	identity: "Mozilla",versionSearch: "rv"},
		{string: navigator.userAgent,	subString: "Mozilla",identity: "Netscape",versionSearch: "Mozilla"}// for older Netscapes (4-)
	]

};



function setopacity(obj, x) {
	x=Math.round(x*100)/100;
	if (x>0.99) x=0.99;
	if (x<0) x=0;
	obj.style.opacity = x;
	obj.style.MozOpacity = x;
	obj.style.filter = "alpha(opacity=" + (x*100) + ")";
}




//preload functions
//create a queue

function preload(file) {
	preloadfiles[preloadindex] =  file;
	preloadindex++;
}
//action the preload queue on window load so that normal images load first
function dopreloads() {
	var c;
	for (c=0;c<preloadindex;c++){
		preloadimgs[c] = new Image;
		preloadimgs[c].src = preloadfiles[c];
	}
}




//rotator functions
//rotates div content
//slide show globals
var slidefadercounts=    new Array();
var slidefaderpositions= new Array();
var slidefaderstepnos=   new Array();
var slidefaderprimaryinc;
var slidefadersecondaryinc;
var slidefadersecondarysteps;
var slidefaderautoplay;
var slidefaderfadein;


// ROTATOR CONFIG

// NB: make sure that you have a comfort margin
//   slidefadersecondaryinc x slidefadersecondarysteps should be less than slidefaderprimaryinc
//   pref less than a quarter of slidefaderprimaryinc
//   many browsers wont be able to keep up with 25 frames a second.

slidefaderfadein=         1;
slidefaderautoplay=       1;
slidefaderdirection=      1; //0 =backward 1 =forward
slidefadersecondaryinc=   40;  //ms time between fade steps, do NOT try to go smaller than 40.
slidefadersecondarysteps= 20;  //no of steps to fade
slidefaderprimaryinc=     12000; //ms time between slides




//init slidefader
function rotateslide(id,r) {
	//slidefaderprimaryinc=r;
	
	//config check
	slidefaderprimaryinc= Math.round(slidefaderprimaryinc);
	if (!slidefaderprimaryinc)                 {alert('slidefader config error 1'); return;}
	if (!document.getElementById(id))      {alert('slidefader config error 2'); return;}
	if ((slidefadersecondaryinc * slidefadersecondarysteps) >= (0.7 *slidefaderprimaryinc)) {alert('slidefader config error 3'); return;}
	
	//see how many images there are
	var cc = 1;
	while (document.getElementById(id+'_'+cc)) { 
		//zero all opacitys
		setopacity(document.getElementById(id+'_'+cc), 0);
		cc++; 
	}
	slidefadercounts[id]=cc-1;
	
	//define start pt
	slidefaderpositions[id]=  0;
	doslidefader(id,1); //1 means repeat
}

//slidefader main iterater
function doslidefader(id, repeatflag) {
	
	//init secondary step
	slidefaderstepnos[id]=  1; //the first step is 1/slidefadersecondarysteps
	
	//inc primary shift
	slidefaderpositions[id]++;	
	if (slidefaderpositions[id] > slidefadercounts[id])  slidefaderpositions[id]=1;
	
	//iterate secondary shift until one slide is complete
	doslidefaderstep(id);
		
	//repeat primarys forever
	if (repeatflag && slidefaderautoplay) setTimeout("doslidefader('"+id+"',1)",slidefaderprimaryinc);
}

//slidefader step iterater
function doslidefaderstep(id) {
	
	//work out prev slide
	var step=slidefaderstepnos[id];
	var pos =slidefaderpositions[id];	
	var prevpos=pos-1;
	if (prevpos<1) prevpos =slidefadercounts[id];
		
	//fade in step
	var o=Math.round(step/slidefadersecondarysteps*100)/100; 
	setopacity(document.getElementById(id+'_'+pos),o);
	

	//fade out step
	setopacity(document.getElementById(id+'_'+prevpos), 1-o);
	
	
	//inc step and repeat unless done
	slidefaderstepnos[id]++;  	
	if (slidefaderstepnos[id] <= slidefadersecondarysteps) 	setTimeout("doslidefaderstep('"+id+"')",slidefadersecondaryinc);
}


/*
function setrotatedelay(nn) {
	rotatedelay=nn*1000;
}
//inits a show
function rotateslide(rid,rotatedelay) {
	if (!rid) return;
	if (!rotatedelay) rotatedelay=6000;
	
	if (!document.getElementById(rid)) return;
	if (!document.getElementById(rid+'_0')) return;
	dorotate(rid,0,0);
}
//handles rotations
function dorotate(rid,rno,rprev) {
	//hide prev iteration
	if (rno+rprev)	document.getElementById(rid+'_'+rprev).style.display = 'none';
	//set the iteration to show
	document.getElementById(rid+'_'+rno).style.display = 'block';

	rprev=rno;
	rno++;
	if (!document.getElementById(rid+'_'+rno)) rno=0;
	
	setTimeout("dorotate('"+rid+"',"+rno+","+rprev+")",rotatedelay);
}
*/


//add antispam event handlers, and mailto tag in two seperate very very paranoid steps
//mail protector
//converts mail class to mailto: href

function convertmail(){
	var elements= document.all?document.all:document.getElementsByTagName('span');
	var i,obj,email;
	for (i=0; i< elements.length; i++) {
		if (elements[i].className =='mail'){
			obj=elements[i];
			email= obj.innerHTML;
			email= email.replace(/blablabla/ig,'');
			obj.innerHTML= email.replace(/ /g,'');
			obj.onmouseover= function (){ insertmailto(this);}
		}
	}
}
function insertmailto(obj) {
	var email = obj.innerHTML;
	email = email.replace(/blablabla/ig,'');
	email = email.replace(/ /g,'');
	obj.innerHTML = '<a href="mailto:'+email+'">'+email+'</a>';
	obj.onmouseover= function (){};
}



function subtexthandlers () {
	//add subtext event handlers

	elements= document.all?document.all:document.getElementsByTagName('a');
	for (i=0; i< elements.length; i++) {
		if (elements[i].className =='subhead'){
			obj=elements[i];
			obj.onmouseover= function (){ rollon(this);}
			obj.onmouseout=  function (){ rolloff(this);}
		}
	}
}




//subtext tooltip

function rollon(obj) {
	var subtextobj= document.getElementById('subtext');

	//move the link objs title attribute to empty subtext div
	subtextobj.innerHTML=obj.getAttribute('title');
	obj.setAttribute('title','');

	//set position of subtext div
	var placement = findPos(obj);
	subtextobj.style.left = placement[0] + 19+"px";
	subtextobj.style.top =  placement[1] + 19+"px";

	//turn on subtext div
	subtextobj.className='subtexton';
}
function rolloff(obj) {
	var subtextobj= document.getElementById('subtext');

	//copy subtext back to title
	obj.setAttribute('title',subtextobj.innerHTML);

	//turn off subtext div
	subtextobj.className='subtextoff';
}


//lib function for subtext popups

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}


//popups

function showpopup(label) {
	document.getElementById(label).className='popupon';
}
function hidepopup(label) {
	document.getElementById(label).className='popupoff';
}


// textarea inserter

function insertBB(i,o) {
	if(o == undefined) { o=''; }
	var myField = document.getElementById('textfield');
	if (document.selection) {
		myField.focus();
		sel = document.selection.createRange();
		if (sel.text.length > 0) {
			sel.text = i + sel.text + o;
		} else {
			sel.text = i + o;
		}
		myField.focus();
	}
	else if (myField.selectionStart || myField.selectionStart == '0') {
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		var cursorPos = endPos;
		var scrollTop = myField.scrollTop;
		if (startPos != endPos) {
			myField.value = myField.value.substring(0, startPos)
				+ i + myField.value.substring(startPos, endPos)
				+ o + myField.value.substring(endPos, myField.value.length);
			cursorPos = cursorPos + i.length + o.length;
		}
		else {
			myField.value = myField.value.substring(0, startPos)
				+ i + o
				+ myField.value.substring(endPos, myField.value.length);
			cursorPos = startPos + i.length;
		}
		myField.focus();
		myField.selectionStart = cursorPos;
		myField.selectionEnd = cursorPos;
		myField.scrollTop = scrollTop;
	}
	else {
		myField.value += i+o;
		myField.focus();
	}
}



