
//_____[ SEARCHBOX FOCUS ]_____\\

function focusSearchbox()
{
	if(!document.getElementById) return false;
	if(!document.getElementById('q')) return false;
	var searchbox = document.getElementById('q');
	searchbox.focus();
}
addLoadEvent(focusSearchbox);

//_____[ DATABASES : subjects ]_____\\

var dbs =
{
	changeClass: function(a,e,c,o)
	{
		switch(a)
		{
			case 'swap': e.className = !dbs.changeClass('check',e,c) ? e.className.replace(o,c) : e.className.replace(c,o); break;
			case 'add': if(!dbs.changeClass('check',e,c)) { e.className += e.className ? ' ' + c : c; } break;
			case 'remove': var rep = e.className.match(' ' + c) ? ' ' + c : c; e.className = e.className.replace(rep,''); break;
			case 'clear': e.className = ''; break;
			case 'check': return e.className.indexOf(c) != -1 ? true : false; break;
		}
	},

	toggle: function(d)
	{
		if(!document.getElementById || !document.getElementById('subject')) return false;
		var subject = document.getElementById('subject');
		var heads = subject.getElementsByTagName('h3');
		for(var i = 0; i < heads.length; i++)
		{
			var parentsubject = heads[i];
			var parentsubjectlink = parentsubject.firstChild;
			parentsubject.link = parentsubjectlink;
			while(parentsubjectlink.nodeType != 1) { parentsubjectlink = parentsubjectlink.nextSibling; }
			var childsubjects = parentsubject.nextSibling;
			while(childsubjects.nodeType != 1) { childsubjects = childsubjects.nextSibling; }
			parentsubject.childsubjects = childsubjects;
			parentsubject.index = i;
			var dbc = cookie.get('zsrdb' + parentsubject.index);
			if(!d)
			{
				if(parentsubject.index == dbc)
				{
					dbs.changeClass('add',parentsubject,'open');
					dbs.changeClass('add',parentsubject.childsubjects,'show');
				}
				else
				{
					dbs.changeClass('add',parentsubject,'trigger');
					dbs.changeClass('add',parentsubject.childsubjects,'hide');
				}
			}
			if(d)
			{
				if(d == 'expand')
				{
					dbs.changeClass('clear',parentsubject);
					dbs.changeClass('add',parentsubject,'open');
					dbs.changeClass('clear',parentsubject.childsubjects);
					dbs.changeClass('add',parentsubject.childsubjects,'show');
					cookie.create('zsrdb' + parentsubject.index,parentsubject.index,1);
				}
				if(d == 'contract')
				{
					dbs.changeClass('clear',parentsubject);
					dbs.changeClass('add',parentsubject,'trigger');
					dbs.changeClass('clear',parentsubject.childsubjects);
					dbs.changeClass('add',parentsubject.childsubjects,'hide');
					cookie.erase('zsrdb' + parentsubject.index);
				}
			}
			parentsubject.onmouseover = function() { dbs.changeClass('add',this,'hover'); };
			parentsubject.onmouseout = function() { dbs.changeClass('remove',this,'hover'); };
			parentsubject.link.onclick = dbs.stopEvent;
			parentsubject.onclick = function()
			{
				if(dbs.changeClass('check',this.childsubjects,'hide'))
				{
					
					dbs.changeClass('swap',this,'trigger','open');			
					dbs.changeClass('swap',this.childsubjects,'hide','show');
					cookie.create('zsrdb' + this.index,this.index,1);
				}
				else
				{
					dbs.changeClass('swap',this,'open','trigger');			
					dbs.changeClass('swap',this.childsubjects,'show','hide');	
					cookie.erase('zsrdb' + this.index);
				}
			};
		}
	},
	
	stopEvent: function(e)
	{
		if(typeof e == 'undefined') { e = window.event; }
		if(typeof e.stopPropagation != 'undefined') { e.stopPropagation(); }
		else { e.cancelBubble = true; }
	},
	
	checkSearchbox: function()
	{
		if(!document.getElementById || !document.getElementById('db_search')) return false;
		var sf = document.getElementById('db_search');
		var q = document.getElementById('q');
		sf.onsubmit = function()
		{
			if(q.value == '')
			{
				alert('Please enter a search term.');
				q.focus();
				return false;
			}
		};
	},
	
	buildFeature: function(p,t,d,y)
	{
		var c = document.createElement('span');
		var txt = document.createTextNode(t);
		c.appendChild(txt);
		p.appendChild(c);
		if(y) { p.appendChild(y); }
		c.onmouseover = function() { c.className = 'hover'; };
		c.onmouseout = function() { c.className = ''; };
		c.onclick = function() { dbs.toggle(d); };
	},
	
	prepareExpandContract: function()
	{
		var d = document.createElement('div');
		d.setAttribute('id','expand');
		var y = document.createTextNode(' | ');
		dbs.buildFeature(d,'Expand all','expand',y);
		dbs.buildFeature(d,'Contract all','contract');
		var subject = document.getElementById('subject');
		subject.insertBefore(d,subject.getElementsByTagName('h3')[0]);
	},
	
	init: function()
	{
		dbs.prepareExpandContract();
		dbs.toggle();
		dbs.checkSearchbox();
	}
}
addLoadEvent(dbs.init);

//_____[ DATABASES : descriptions ]_____\\

var dbd = 
{
	show: true,
	
	moveDescription: function(x,y)
	{
		var d = document.getElementById('active_description');
		if(d)
		{
			d.style.left = x + 'px';
			d.style.top = y + 'px';
		}
	},

	getMouse: function(e)
	{
		var x = 0;
		var y = 0;
		if(!e) { e = window.event; }
		if(e.pageX || e.pageY)
		{
			x = e.pageX;
			y = e.pageY;
		}
		else if(e.clientX || e.clientY)
		{
			x = e.clientX + document.documentElement.scrollLeft;
			y = e.clientY + document.documentElement.scrollTop;
		}
		x = x + 25;
		y = y + 15;
		dbd.moveDescription(x,y);
	},
	
	removeDescription: function()
	{
		var n = document.getElementById('active_description');
		if(n) { n.parentNode.removeChild(n); }
	},
	
	showDescription: function(t,f,d)
	{
		var v = document.createElement('div');
		var h = document.createElement('h4');
		var ht = document.createTextNode(t);
		h.appendChild(ht);
		var s = document.createElement('span');
		var st = document.createTextNode(f);
		s.appendChild(st);
		var p = document.createElement('p');
		var pd = document.createTextNode(d);
		p.appendChild(pd);
		v.appendChild(h);
		v.appendChild(s);
		v.appendChild(p);
		v.setAttribute('id','active_description');
		document.body.appendChild(v);
	},

	setDescription: function(t,k,f,d)
	{
		if(dbd.show)
		{
			k.onmouseover = function() { dbd.showDescription(t,f,d); };
			k.onmouseout = function() { dbd.removeDescription(); };
			k.onmousemove = dbd.getMouse;
		}
		else
		{
			dbd.removeDescription();
			k.onmouseover = null;
			k.onmouseout = null;
			k.onmousemove = null;
		}
	},
	
	getDatabaseLinks: function()
	{
		var records = document.getElementsByClassName('record');
		for(var i = 0; i < records.length; i++)
		{
			var id;
			var link;
			var title = '';
			var format = '';
			var description = '';
			
			var record = records[i];
			var id = record.getAttribute('id').split('-')[1];
			var link = document.getElementById('database-' + id).firstChild;
			var title = link.firstChild.nodeValue;
			if(document.getElementById('format-' + id))
			{
				var format = document.getElementById('format-' + id).firstChild.nodeValue;
			}
			if(document.getElementById('description-' + id))
			{
				var description = document.getElementById('description-' + id).firstChild.nodeValue;
			}
			dbd.setDescription(title,link,format,description);
			//record.id = id;
			//record.link = link;
			//record.description = description;
		}
	},
	
	doCheck: function()
	{
		var n = document.getElementById('show_description');
		if(n.checked)
		{
			dbd.show = true;
			dbd.getDatabaseLinks();
			cookie.erase('zsrdbdesc');
		}
		else
		{
			dbd.show = false;
			dbd.getDatabaseLinks();
			cookie.create('zsrdbdesc','no',30);
		}
	},
	
	createCheck: function()
	{
		var c = document.createElement('div');
		c.setAttribute('id','check_description');
		var u = document.createElement('input');
		u.setAttribute('type','checkbox');
		u.setAttribute('id','show_description');
		u.onclick = dbd.doCheck;
		var b = document.createElement('label');
		b.setAttribute('for','show_description');
		var bt = document.createTextNode('Show description');
		b.appendChild(bt);
		c.appendChild(u);
		c.appendChild(b);
		var t = document.getElementById('databases');
		t.parentNode.insertBefore(c,t.nextSibling);
		var dbdc = cookie.get('zsrdbdesc');
		if(dbdc && dbdc == 'no')
		{
			u.setAttribute('checked','');
			u.checked = false;
		}
		else
		{
			u.setAttribute('checked','checked');
			u.checked = true;
		}
	},
	
	init: function()
	{
		if(!document.getElementById || !document.getElementById('databases') || location.href.indexOf('info=') != -1) return false;
		dbd.createCheck();
		dbd.doCheck();
		dbd.getDatabaseLinks();
	}
}
addLoadEvent(dbd.init);

//_____[ getElementsByClassName ]_____\\

document.getElementsByClassName = function(name)
{
	var results = new Array();
	var a = document.getElementsByTagName("*");
	for(var i=0; i<a.length; i++)
	{
		if(a[i].className.indexOf(name) != -1)
		{
			results[results.length] = a[i];
		}
	}
	return results;
};
