var sc_supp;
var scroll = new scroller();
var sc_ajax;
var roll_list;
var ndiv;
var xheight;
var force_callback;	// this isn't so good..

function wheelhook(which)
{
	var t;

	t = document.getElementById("summary_container");
	if (which) {
		document.body.onmousewheel = scroll_move;
		if (window.addEventListener) window.addEventListener('DOMMouseScroll', scroll_move, false);
	} else {
		document.body.onmousewheel = null;
		if (window.removeEventListener) window.removeEventListener('DOMMouseScroll', scroll_move, false);
	}
}
function scroll_move(e)
{
	var delta;

	e = e?e:window.event;
	delta = null;
	if (e.wheelDelta) {
		delta = e.wheelDelta/120;
		if (window.opera) delta = -delta;
	} else if (e.detail) {
		delta = e.detail/3;
	}
	if (delta) {
		scroll.noscroll(true);
		scroll.move((delta>0)?1:-1);
		scroll.noscroll(false);
	}
// grab everything and stop it..
  	if(e.stopPropagation) e.stopPropagation();
	if (e.preventDefault) e.preventDefault();
	e.returnValue = false;
  	e.cancelBubble = true;
	e.cancel = true;
	return false;
}
function scroller_click(e)
{
	var c;
	var cross;
	var text;
	var co;
	var d;
	var cn;
	var t;

	d = sc_supp.getEventSource(e);
	c = scroll.gettarget(d);
	if (!c) return;
	scroll.stop();
	if (!ndiv) {
// construct the div.
		ndiv = document.createElement("div");
		ndiv.style.visibility = "hidden";
		ndiv.style.position = "absolute";
		ndiv.style.left = "0px";
		ndiv.style.top = "0px";
		ndiv.className = "comment_text";
		ndiv.id = "comment_container";
		document.body.appendChild(ndiv);
		cross = document.createElement("div");
		cross.className = "closebutton";
		cross.innerHTML = "X";
		cross.onclick = closeme;
		ndiv.appendChild(cross);
		text = document.createElement("div");
		text.id = "active_comment";
		ndiv.appendChild(text);
		xheight = sc_supp.getCoordinates(cross)[3];
	}
	if (!text) text = document.getElementById("active_comment");
	text.innerHTML = fmttext(roll_list[c[1]]);
// now get co-ordinates
	co = sc_supp.getCoordinates(text);
// position centered on item
	cn = sc_supp.getCoordinates(c[0]);
	var l = (cn[0] + (cn[2]/2)) - (co[2]/2);
	var t = ((cn[1] - co[3]) - xheight);
	t -= 10;	// push up by 10 px
	ndiv.style.left = l + "px";
	ndiv.style.top = (t+xheight) + "px";
	ndiv.style.height = (co[3]) + "px";
	ndiv.style.visibility = "visible";
}
function closeme()
{
	if (ndiv) ndiv.style.visibility = "hidden";
	return true;
}
function rollitem(who,what,name,position,company)
{
	this.name = name;
	this.position = position;
	this.company = company;
	this.who = who;
	this.what = what;
	this.rand = Math.floor(Math.random() * 100);
	return this;
}
function additem(who,what,name,position,company)
{
	roll_list[roll_list.length] = new rollitem(who,what,name,position,company);
}
function loaddata(xml)
{
	// yank out the data from the callback.
	var record;
	var txt;
	var nm;
	var company;
	var position;
	var cl;

	record = xml.responseXML.documentElement.getElementsByTagName("record");
	for(i=0;i<record.length;i++) {
		nm = position = company = logo = "";
		for(j=0;j<record[i].attributes.length;j++) {
			switch(record[i].attributes[j].name)
			{
				case "name":
					nm = record[i].attributes[j].value;
					break;
				case "position":
					position = record[i].attributes[j].value;
					break;
				case "company":
					company = record[i].attributes[j].value;
					break;
				case "logo":
					logo = record[i].attributes[j].value;
					break;
				default:
					break;
			}
		}
		txt = record[i].getElementsByTagName("text")[0].firstChild.nodeValue;
		additem(logo,txt,nm,position,company);
	}
	var d = document.getElementById("testimonials");
	if (d) build_testimonials(d);
// randomly sort
	roll_list.sort(roll_sort);
// now try and find matching items, move them around.
	sortdups(roll_list);
	for(i=0;i<roll_list.length;i++) {
		scroll.addcontent("<div class=\"comment_image\"><img src=\"" + roll_list[i].who + "\" border=0></div>");
	}
	scroll.setclick(scroller_click);
	sc_supp = new support();
	scroll.callonmove(closeme);
	scroll.load();
}
function build_testimonials(d)
{
	var p;
	var i;
	var txt;
	var t;
	var tb;
	var tr;
	var td;

	tb = document.createElement("table");
	tb.className = "client_details";
	d.appendChild(tb);
	for(i=0;i<roll_list.length;i++) {
		t = roll_list[i];
		tr = document.createElement("tr");
		tb.appendChild(tr);
		td = document.createElement("td");
		td.vAlign = "top";
		tr.appendChild(td);
		p = document.createElement("div");
		p.className = "client_logo";
		p.innerHTML = "<img src=\"" + t.who + "\">";
		td.appendChild(p);
		td = document.createElement("td");
		tr.appendChild(td);
		p = document.createElement("div");
		p.className = "client_title";
		txt = "";
		txt += t.name;
		if (t.position != "") txt += ", " + t.position;
		if (t.company != "") txt += ", " + t.company;
		p.innerHTML = txt;
		td.appendChild(p);
		p = document.createElement("div");
		p.className = "client_text";
//		txt = "<img src=\"" + t.who + "\">" + t.what;
		txt = t.what;
		p.innerHTML = txt;
		td.appendChild(p);
	}
	if (force_callback) force_callback();
}
function roll_sort(a,b)
{
	return a.rand-b.rand;
}
	
function setupscroll()
{
	var i;

	scroll.setname("item");
	roll_list = new Array;
	sc_ajax = new ajax();
	sc_ajax.load("xml/testimonial.xml?timestamp=" + new Date().getTime(),loaddata);
}
function fmttext(t)
{
	var txt;
	txt = "<div class=\"comment_title\">";
	txt += t.name + "<br/>";
	if (t.position != "") txt += t.position + "<br/>";
	if (t.company != "") txt += t.company + "<br/>";
	txt += "</div><div style=\"clear: both;\"></div>" + t.what;
	return txt;
}
function compare(a,b)
{
	if (a.item.who == b.item.who) {
		return 1;
	}
	return 0;
}
function dumpall(c,d,x)
{
	var h = x;
	do {
		d.innerHTML += c + ": " + x.item.who + "<br>";
		x = x.next;
	} while(x != h);
}
function sortdups(items)
{
	var i;
	var didmatch;
/* look for the same item next to each other - do it in a linked list because
 it makes moving things around tons easier. */
	var p = new list();
	for(i=0;i<items.length;i++) {
		p.add(items[i]);
	}
	var l = p.head();
	var h = l;
	p.makecircular();	/* to allow us to cope with a b c d a */
	didmatch = false;
	do {
		if (compare(l,l.next) == 1) {
			var z = h;
			do {
/* look for a gap, i.e. non consecutive */
				if (compare(z,l) == 0 && compare(z,z.next) == 0 && compare(z.next,l) == 0) {
					var ll = p.unlink(l.next);
					p.append(z,ll);
					didmatch = true;
					break;
				}
				z = z.next;
			} while(z != h);
		}
		if (didmatch) didmatch = false;
		else l = l.next;
	} while(l && l != h);
	p.breakcircular();
	var l = p.head();
	var i = 0;
	while(l) {
		items[i++] = l.item;
		l = l.next;
	}
}

if (window.onload) scroll.setcallback(window.onload);
window.onload = setupscroll;
