// JavaScript Document

var scrolltimer = null;
var thispage;
var itemstats = [];
var oldscrolltarget = '';
var scrolltarget = '';
var scrollxy;
var initx;
var inity;

var description_contractedbackcol = '#fefeef';
var description_expandedbackcol = '#fefefe';
var normalbackcol = '#cfcfbc';
var normalbackimg = "";
var litbackimg = "url('images/poopattern13.gif')";

var activetext = '#333333';
var inactivetext = '#333333';

var interactivecol = '#e7a658';
var motioncol = '#819bcb';
var printcol = '#66a768';
var scrapscol = '#9f8a79';

var itemhgap = 30;
var itemvgap = 20;

var minopacity = .3;

var itemwidth = 300;

function populatePage(){
	
	var numrows = 6;
	var numcols = Math.ceil(populatelist.length/numrows);
	
	getInitXY();
			
	var curx = initx;
	var cury = inity;
	var currow = 1;
	var padcounter = 0;
	
	setColours();
	
	for(i=0; i<populatelist.length; i++) {
		document.getElementById('itemcontainer').innerHTML += makeItem(populatelist[i]);
		var co = document.getElementById(populatelist[i]);
		co.style.position='absolute';
		co.style.display = 'block';
		co.style.top = cury + 'px';
		co.style.left = curx + 'px';
		co.style.backgroundImage = normalbackimg;
		co.style.backgroundColor = normalbackcol;
		cury = cury + itemvgap + co.offsetHeight;
		co.style.height = co.offsetHeight + 'px';
		itemstats[i] = ['',0,0,co.style.height];
		document.getElementById(populatelist[i]+'_info').style.color = inactivetext;
		document.getElementById(populatelist[i]+'_info').style.background = description_contractedbackcol;
		document.getElementById(populatelist[i]+'_info').innerHTML = itemContractedInfo(populatelist[i]);
		currow++;
		if(currow > numrows) {
			spacerid = 'pad'+padcounter;
			document.getElementById('itemcontainer').innerHTML += "<div class = 'pad' id='" + spacerid + "'></div>";
			var cs = document.getElementById(spacerid);
			cs.style.top = cury + (numrows*200) + 'px';
			cs.style.left = curx + 'px';
			padcounter++;
						
			curx += itemwidth + itemhgap;
			cury = inity;
			currow = 1;
		}
	}
	
	spacerid = 'pad'+padcounter;
	document.getElementById('itemcontainer').innerHTML += "<div class = 'pad' id='" + spacerid + "'></div>";
	var cs = document.getElementById(spacerid);
	cs.style.top = inity + 'px';
	cs.style.left = curx + (4*itemwidth) + 'px';
	padcounter++;
		
	getItemPositions();
	
	document.getElementById('pagenav').innerHTML = makeNav()+ "<br/>";
	
	//var tgit = getURL();
	//if(tgit != "" && tgit != null) scrollTo(tgit);
	
	var loc = window.location.hash;
	if(loc != "" && loc != null) scrollTo(splitIt(loc,1));
}

function getURL() {
	var str = document.location.href;
	return str.split('#')[1] ;
}

function scrollFromAnchor() {
	var cs = getScroll()[1];
	alert(cs);
	
	if(cs != 0) {
		for(i=0; i<itemstats.length; i++) {
			if(itemstats[i][2] == cs) {
				scrollTo(itemstats[i][0]);
				return;
			}
		}
	}
}

function getInitXY() {
	//var oo = document.getElementById('maininfo');
	//initx = findPos(oo)[0] + oo.offsetWidth + 4;
	//inity = findPos(oo)[1];
	
	initx = 270 + itemhgap;
	inity = 30;
}

function getItemPositions() {
	
	getInitXY();
	
	for(i=0; i<populatelist.length; i++) {
		var to = document.getElementById(populatelist[i]);
		itemstats[i][0] = populatelist[i];
		itemstats[i][1] = findPos(to)[0];
		itemstats[i][2] = findPos(to)[1];
	}
}

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

function scrollTo(tg) {
	changeCursor('wait');
	oldscrolltarget = scrolltarget;
	scrolltarget = tg;
	
	var tidx = getPosIdx(scrolltarget);
	
	if(oldscrolltarget!='') {
		document.getElementById(oldscrolltarget+'_info').innerHTML = itemContractedInfo(oldscrolltarget);
		document.getElementById(oldscrolltarget+'_info').style.color = inactivetext;
		document.getElementById(oldscrolltarget+'_info').style.backgroundColor = description_contractedbackcol;		
	}
	
	document.getElementById(scrolltarget+'_info').innerHTML = itemExpandedInfo(scrolltarget);
	document.getElementById(scrolltarget+'_info').style.color = activetext;
	document.getElementById(scrolltarget+'_info').style.backgroundColor = description_expandedbackcol;
			
	scrollxy = [itemstats[tidx][1]-initx,itemstats[tidx][2]-inity];
	clearTimeout(scrolltimer);
	if(BrowserDetect.browser == 'Safari') {
		autoScrollY();
	} else {
		autoScroll();
	}
}

function autoScroll() {
	var offsets = getScroll();
	var hdist = (scrollxy[0]-offsets[0]);
	var vdist = (scrollxy[1]-offsets[1]);
	var hamt = hdist/2;
	var vamt = vdist/2;
	if(Math.abs(hdist) <= 1 && Math.abs(vdist) <= 1) {
		clearTimeout(scrolltimer);
		window.scroll(scrollxy[0],scrollxy[1]);
		changeCursor('default');
	} else {
		window.scrollBy(hamt,vamt);
		scrolltimer = setTimeout('autoScroll()',40);
	}
}

function autoScrollY() {
	var offsets = getScroll();
	var dist = (scrollxy[1]-offsets[1]);
	var amt = dist/2;
	if(Math.abs(dist) <= 1) {
		clearTimeout(scrolltimer);
		window.scroll(offsets[0],scrollxy[1]);
		scrolltimer = setTimeout('autoScrollX()',0);
	} else {
		window.scrollBy(0,amt);
		scrolltimer = setTimeout('autoScrollY()',20);
	}
}

function autoScrollX() {
	var offsets = getScroll();
	var dist = (scrollxy[0]-offsets[0]);
	var amt = dist/2;
	if(Math.abs(dist) <= 1) {
		clearTimeout(scrolltimer);
		window.scroll(scrollxy[0],scrollxy[1]);
		changeCursor('default');
	} else {
		window.scrollBy(amt,0);
		scrolltimer = setTimeout('autoScrollX()',40);
	}
}



function getScroll() {
	var scrOfX = 0, scrOfY = 0;
	
	if( typeof( window.pageYOffset ) == 'number' ) {
		//Netscape compliant
		scrOfY = window.pageYOffset;
		scrOfX = window.pageXOffset;
	} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		//DOM compliant
		scrOfY = document.body.scrollTop;
		scrOfX = document.body.scrollLeft;
	} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		//IE6 standards compliant mode
		scrOfY = document.documentElement.scrollTop;
		scrOfX = document.documentElement.scrollLeft;
	}
	
  	return [ scrOfX, scrOfY ];
}

function makeNav() {
	
	var outstring = "<span class='sitelinks'>";
	for(i=0; i<typelist.length; i++) {
			outstring += "<br/>>>" +  typenames[i] + " { " + "<br/>";
			outstring += makeItemsNav(typelist[i]);
			outstring += " }<br />";
	}
	return outstring + '</span>';
	
}

function makeItemsNav(typ) {
	
	var outstring = "<span class='" +  typ + "text'>";
	
	for(j=0; j<eval(typ+'list').length; j++) {
		outstring += "<a href = 'javascript:scrollTo(" + '"' + eval(typ+'list')[j] + '"' + ")' onmouseover='lightItem(" + '"' + eval(typ+'list')[j] + '"' + ")' onmouseout='dimItem(" + '"' +  eval(typ+'list')[j] + '"' + ")'>___ " + eval((eval(typ+'list')[j]) +"_title") + "; </a><br/>" ;
	}
	
	outstring += "</span>";
	
	return outstring;
	
}

function getPosIdx(tg) {
	
	for(q=0; q<itemstats.length; q++) {
		if(tg == itemstats[q][0]) return q;
	}
}
	
function itemExpandedInfo(itemid) {
	
	return "<span class='ptext'><span class = 'ornament'>.....................................................................<br/></span>" + itemContractedInfo(itemid) + "<br/><br/>"+ eval(itemid+'_description') + '</span>';
	
}

function itemContractedInfo(itemid) {
	var s1 = "<br/><span class='heading'>" + eval(itemid+'_title') + "</span><br/>";
	var s2 = "<span class='subheading " + eval(itemid+'_type') + "text' >" + displayType(eval(itemid+'_type')) + ", " + eval(itemid+'_year') + "</span>";
	
	return s1+s2;
}

function displayType(typeid) {
	for(zz=0; zz<typelist.length; zz++) {
		if(typelist[zz] == typeid) return typenames[zz];
	}
	return "";
}
function makeItem(itemid){
	
	var s1 = "<div class='portfolioitem' id='" + itemid + "'><a name='_" + itemid + "'>";
	
	var s2 = "<div class='thumbnail'' id='" + itemid + "_image' >";

	var s3 = "<a href = 'javascript:imageClick(" + '"' + itemid + '"' + ")'><img src='" + thumbsrc + eval(itemid+'_thumbnail') + "' width=300 height=180 alt='" + eval(itemid+'_title') + " preview image' onmouseover='lightItem(" + '"' + itemid + '"' + ")' onmouseout='dimItem(" + '"' +  itemid + '"' + ")'></a></div>";
		
	var s4 = "<div class='infopanel " + eval(itemid+'_type') + "' id='" + itemid + "_info'>";
	
	var s5 = itemExpandedInfo(itemid) + "</div></div>";
	
	return s1+s2+s3+s4+s5;
	
}

function makeStandardImage(itemid) {
	document.getElementById(itemid+'_image') = "<a href = 'javascript:imageClick(" + '"' + itemid + '"' + ")'><img src='" + thumbsrc + eval(itemid+'_thumbnail') + "' width=300 height=180 alt='" + eval(itemid+'_title') + " preview image' onmouseover='lightItem(" + '"' + itemid + '"' + ")' onmouseout='dimItem(" + '"' +  itemid + '"' + ")'></a></div>";
}

function makeLightboxImage(itemid) {
	
	alert(itemid);
	document.getElementById(itemid+'_image') = "<a href = '" + eval(itemid+'_lightbox') + "' rel='lightbox'><img src='" + thumbsrc + eval(itemid+'_thumbnail') + "' width=300 height=180 alt='" + eval(itemid+'_title') + " preview image' onmouseover='lightItem(" + '"' + itemid + '"' + ")' onmouseout='dimItem(" + '"' +  itemid + '"' + ")'></a></div>";
	
}

function checkContains(str1, str2) {
	var checker = str1.match(str2);
	return (checker != "" && checker != null) ? true : false;
}

function splitIt(str,idx) {
	return str.split('_')[idx];
}

function imageClick(tg) {
	//if(tg==scrolltarget) {
	//	if(eval(tg+'_lightbox') == " rel = 'lightbox' ") {
	//	} else {
	//		window.open(eval(tg+'_link'));
	//	}
	//} else {
		scrollTo(tg);
	//}
}

function lightItem(tid) {
	var ttp = eval(tid+'_type');
	document.getElementById(tid).style.backgroundColor=eval(ttp+'col');
	document.getElementById(tid).style.backgroundImage = litbackimg;
}
function dimItem(tid){
	document.getElementById(tid).style.backgroundImage = normalbackimg;
	document.getElementById(tid).style.backgroundColor=normalbackcol;
}

function setColours() {
	
	var rulelist = [];
	if (document.styleSheets[0].cssRules) {
		rulelist = document.styleSheets[0].cssRules;
	} else if (document.styleSheets[0].rules) {
		rulelist = document.styleSheets[0].rules;
	}
	
	//interactive rules
	rulelist[1].style.color = interactivecol;
	rulelist[2].style.color = '#fefefe';
	rulelist[3].style.backgroundColor = interactivecol;
	
	//motion rules
	rulelist[5].style.color = motioncol;
	rulelist[6].style.color =  '#fefefe';
	rulelist[7].style.backgroundColor = motioncol;
	
	//print rules
	rulelist[9].style.color =  printcol;
	rulelist[10].style.color =  '#fefefe';
	rulelist[11].style.backgroundColor = printcol;
}

function changeCursor(tothis) {
	document.body.style.cursor = tothis;
	
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	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"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

