var nodeColor;

function fade(items){
	for(var i = 0; i < items.length; i++){
//		area += parseInt(items[i].style.width)*parseInt(items[i].style.height);
		new Effect.Morph(items[i], {style: {borderColor: '#000000'}, duration: 3.0});
	}
}

function intute(){
	nodeColor = "#EEEEEE";
}

function itemflash(classname){
	nodeColor = "#000000";
	var items = document.getElementsByClassName(classname);
	
	for(var i = 0; i < items.length; i++){
		new Effect.Highlight(items[i], {duration: 1.0, startcolor:'#FF0000', restorecolor: true});
	}
}

function rmcatbrush(catid,onoff,logurl){
	var cat = document.getElementById('cat' + catid);
	if(onoff) {
		cat.style.backgroundColor = 'silver';
	} else {
		cat.style.backgroundColor = 'transparent';
	} 
	logaction(logurl,arguments.callee,onoff,catid);
}

function catbrush(catid,onoff,logurl){
	var cat = document.getElementById('rmcat' + catid);
	if(onoff) {
		cat.style.backgroundColor = 'white';
		cat.style.borderColor = 'red';
	} else {
		cat.style.backgroundColor = 'transparent';
		cat.style.borderColor = 'white';		
	} 
	logaction(logurl,arguments.callee,onoff,catid);
}

/* 	url - log url to post to
	src - function name from where this logging was triggered
	act - string indicating what type of action was taken
	id - library id of the interaction element
*/
function logaction(url,caller,act,id) {
	if(url == null) {
			url = "/log.php"
	}
	/* Mozilla has name property, IE et al. don't, so we have to parse. */
	if(caller.name){
		caller = caller.name;
	} else {
		caller = /\W*function\s+([\w\$]+)\(/.exec(caller)[1];
	}
	
	new  Ajax.Request(url, 
					  {method: 'get', 
					   parameters: { time: new Date().getTime(), action: act, source: caller, libid: id}
					  }
		);
}

function cleanupNode(parent,node){
	//parent.removeChild(node);
}

function rmkeybrush(doctype,onoff,logurl){
	doctype = doctype.toLowerCase().replace(/ /g,"").replace(/\W/g,"");
	
//	rmnodes = document.getElementsByClassName(doctype);
	rmnodes = $$("." + doctype);
	items = $$(".item-" + doctype);
//	rmnodes = $('resultmap').getElementsBySelector(doctype);
	
	if(rmnodes.length > 1){
		if(onoff) {
			document.getElementById(doctype).className='keybrush';
		} else {
			document.getElementById(doctype).className='key';
		}
	}
	
	for (var i = 0; i < items.length; i++){
		if(onoff){
			items[i].className='documentbrush item-' + doctype;
		} else {
			items[i].className='document item-' + doctype;
		}
	}
	
	for (var i = 0; i < rmnodes.length; i++) {
		var z = parseInt(rmnodes[i].zIndex);
		if(onoff) {
			rmnodes[i].style.borderColor='#FF0000';
			rmnodes[i].style.opacity="1.0";
			rmnodes[i].zIndex=z+1;
		} else {
			rmnodes[i].style.borderColor=nodeColor;
			rmnodes[i].style.opacity=".75";
			rmnodes[i].zIndex=z-1;
		}
	}
	
	logaction(logurl,arguments.callee,onoff,doctype);
}

function backbrush(keyid,docid,onoff,logurl){
	/*
	if(!e) 
		var e = window.event;

	if(console) {
		if(e)
			console.log("%s -> %s; %d",e.fromElement,e.toElement,e.target.nodeName);
		else
			console.log("NULL");
	}
	*/
	var newkeyid = keyid.toLowerCase().replace(/ /g,"").replace(/\W/g,"");
	//var newkeyid = keyid.replace(" ","_").replace("/","-");

	if(onoff) {
		document.getElementById(newkeyid).className='keybrush';
		var i = 0;
		var rmnode = document.getElementById("rm" + docid + "-" + i);
		while (rmnode != null) {
			var z = parseInt(rmnode.zIndex);
			
			rmnode.style.borderColor='#FF0000';
			rmnode.style.opacity="1.0";
			rmnode.zIndex=z+1;
			
			//new Effect.Morph(rmnode, {style: {borderColor: '#FF0000', opacity: "1.0"}, duration: .1});		
			
			var newelement = rmnode.cloneNode(false);
			newelement.removeAttribute("onmouseover");
			newelement.removeAttribute("onmouseout");
			newelement.removeAttribute("onclick");
			
			newelement.setAttribute("id","rm" + docid + "-" + i + "-highlight");
			newelement.style.zIndex = "999";
			newelement.style.backgroundColor = 'transparent';
			newelement.style.borderColor = 'yellow';
			
			rmnode.parentNode.appendChild(newelement);
			new Effect.Puff(newelement, {duration: 0.75});
			//new Effect.Puff(newelement, {duration: 0.4, afterFinish: cleanupNode(rmnode.parentNode,newelement)});
			//new Effect.Scale(newelement, 100.0);
			//new Effect.Scale(newelement, 10.0, {afterFinish: cleanupNode(doc.parentNode,newelement)});
			//new Effect.Shake(newelement,10);
			newelement = null;
			
			i++;
			rmnode = document.getElementById("rm" + docid + "-" + i);
		}
	} else {
		document.getElementById(newkeyid).className='key';
		var i = 0;
		var rmnode = document.getElementById("rm" + docid + "-" + i);
		while (rmnode != null) {
			var z = parseInt(rmnode.zIndex);
			//rmnode.style.borderColor='#000000';
			rmnode.style.borderColor=nodeColor;
			rmnode.style.opacity=".75";
			rmnode.zIndex=z-1;
			
			var highlight = document.getElementById("rm" + docid + "-" + i + "-highlight");
			rmnode.parentNode.removeChild(highlight);
			//new Effect.Morph(rmnode, {style: {borderColor: '#000000'}, duration: 0.25});
			
			i++;
			rmnode = document.getElementById("rm" + docid + "-" + i);
		}
	}
	
	logaction(logurl,arguments.callee,onoff,docid);
}

function backbrush_test(keyid,docid,onoff,logurl){
	var newkeyid = keyid.toLowerCase().replace(/ /g,"").replace(/\W/g,"");
	switch(newkeyid) {
			case "projects":
				newkeyid = "software";
				break;
			case "productnews":
				newkeyid = "news";
				break;
			case "bibliographicdatabases":
				newkeyid = "dataset";
				break;
			case "ebooks":
			case "governmentpublications":
			case "papersreportsarticlescollections":
			case "conferencepapers":
			case "theses":
				newkeyid = "publication";
				break;
			case "journalscontentsandabstracts":
			case "journalsfulltext":
			case "publishers":
				newkeyid = "forum";
				break;
			case "standards":
			case "resource":
			case "faqs":
			case "resourceguidesanddirectories":
			case "mailinglistsanddiscussiongroups":
			case "patentsandstandards":
			case "productinformation":
			case "referencesources":
			case "subjectguides":
				newkeyid = "reference";
				break;
			case "companies":
			case "associations":
			case "governmentbodies":
			case "feinstitutionsanddepartments":
			case "heinstitutionsanddepartments":
			case "researchcentresandprojects":
			case "professionalorganisations":
			case "events":
			case "recruitmentagencies":
				newkeyid = "organization";
				break;
			default:
				break;
	}
	
	backbrush(newkeyid,docid,onoff,logurl);
}

function outOfViewport(elem){
	var vertPos = Position.page(elem)[1];
	if(vertPos < 0) {
		return vertPos;
	} else if(vertPos > viewportHeight()){
		return vertPos - viewportHeight();
	} else {
		return 0;
	}
}

function viewportHeight() {
    return self.innerHeight || (document.documentElement.clientHeight || document.body.clientHeight);
}

function rmclick(libid,logurl) {
	document.getElementById('doc' + libid).style.border='1px solid silver';
    showSearchImage(document.getElementById('doc' + libid + 'more'),
					document.getElementById('doc' + libid + 'less'),
					document.getElementById('doc' + libid + 'expand'));
    document.getElementById('doc' + libid + 'less').style.display='none';
    new Effect.ScrollTo('doc' + libid);
	
	logaction(logurl,arguments.callee,"click",libid);
}

function rmbrush(keyid,docid,onoff,logurl) {
	var newkeyid = keyid.toLowerCase().replace(/ /g,"").replace(/\W/g,"");
	//var newkeyid = keyid.replace(" ","_").replace("/","-");
	
	if(onoff) {
		var i = 0;
		var doc = document.getElementById("rm" + docid + "-" + i);
		while (doc != null) {
			var z = parseInt(doc.zIndex);
			doc.style.borderColor='#FF0000';
			doc.style.opacity="1.0";
			doc.zIndex=z+1;
			
			i++;
			doc = document.getElementById("rm" + docid + "-" + i);
		}
		document.getElementById(newkeyid).className='keybrush';
		
		var vertPos = outOfViewport(document.getElementById(docid));
		var attentionArea;
		if(vertPos < 0) {
			attentionArea = document.getElementById('rmmessageabove');
			//attentionArea.innerHTML = "See above"
			// Also brush because *part* of the result could be visible
			document.getElementById(docid).className='documentbrush';
		} else if(vertPos > 0) {
			attentionArea = document.getElementById('rmmessagebelow');
			//attentionArea.innerHTML = "See below"
		} else {
			attentionArea = document.getElementById(docid);
			attentionArea.className='documentbrush';
		}
		attentionArea.style.visibility="visible";
	} else {
		document.getElementById(newkeyid).className='key';
		document.getElementById(docid).className='document';
		var i = 0;
		var doc = document.getElementById("rm" + docid + "-" + i);
		while (doc != null) {
			var z = parseInt(doc.zIndex);
//			doc.style.borderColor='#000000';
			doc.style.borderColor=nodeColor;
			doc.style.opacity=".75";
			doc.zIndex=z-1;
			
			//new Effect.Morph(doc, {style: {borderColor: '#000000'}, duration: 1.0});
						
			i++;
			doc = document.getElementById("rm" + docid + "-" + i);
		}
		
		document.getElementById('rmmessagebelow').style.visibility="hidden";
		document.getElementById('rmmessageabove').style.visibility="hidden";
	}
	
	logaction(logurl,arguments.callee,onoff,docid);
}

function brush(keyid,docid,onoff,logurl) {
	var newkeyid = keyid.toLowerCase().replace(/ /g,"").replace(/\W/g,"");
	//var newkeyid = keyid.replace(" ","_").replace("/","-");
	if(onoff) {
		document.getElementById(newkeyid).className='keybrush';
		document.getElementById(docid).className='documentbrush';
	} else {
		document.getElementById(newkeyid).className='key';
		document.getElementById(docid).className='document';
	}
	
	logaction(logurl,arguments.callee,onoff,docid);
}

/*Used for show/hide button that switches function*/
function showHideSearchImage(tr,d,a,logurl) {
	var action;
    if(tr.style.display == "none") {
        tr.style.display = "";
		d.style.display = "none";
        a.innerHTML = "[-]";
		action = "show";
	} else {
        tr.style.display = "none";
		d.style.display = "";
        a.innerHTML = "[+]";
		action = "hide"
    }
	logaction(logurl,arguments.callee,action,tr.id);
} 

/*Used for a pure show*/
function showSearchImage(tr,d,a){
    if(tr.style.display == "none") {
        tr.style.display = "";
		d.style.display = "none";
        a.innerHTML = "[-]";
	}
	/*Element.scrollTo(tr);*/
}

function helpwindow($url) {
	window.open($url,
				'_blank',
				'scrollbars=yes, toolbar=no, menubar=no, directories=no, width=640, height=480',
				false);
} 

function hideTable(t,on) {
	t.style.display = "none";
	on.style.display = "inline";
}

function showTable(t, on) {
	t.style.display = "block";
	on.style.display = "inline";
}

function doNothing() {
	alert("Hello there");
}

function checkAllBoxes(f) {
	for (var i = 0; i < f.elements.length; i++) {
		f.elements[i].checked = true;
	}
}

function uncheckAllBoxes(f) {
	for (var i = 0; i < f.elements.length; i++) {
		f.elements[i].checked = false;
	}
}

function sendmail(dummy, domain, user) {
	email_address = user + "@" + domain;
	this.location.href = "mailto:" + email_address;
}
