var advanced = false;
var destServlet = false;

var expandedFirst = -1;
var expandedSecond = -1;


var xslSrc;
var xslDoc;
var xsltProcessor;

var theXmlDoc;

var xsltProcessor;
var theXmlDoc;


var theTable = null;

var visibleClass = 17;


// ----------------------------------------------------------------------------



	function setAdvanced(newAdvanced) {
		searchForm.advanced.value = newAdvanced?'Y':'N';
		searchForm.submit();
	}

	function setSelectedCheckboxes() {
		var list = searchForm.value.value.split(' ');
		for (i = 0; i < list.length; i++) {
			var box = document.getElementById('k'+list[i]);
			if (box) {
				box.defaultChecked = true;
				box.checked = true;
			}
		}
	}

	function updateSelectCount() {
		var id = document.getElementById('selectCount');
		if (id) {
			var slist = searchForm.value.value.split(' ');
			var count = 0;
			for (i = 0; i < slist.length; i++)
				if (slist[i].length == 0)
					count--;

			count += slist.length;

			if (count > 0)
				id.value = count + ' subject'+(count>1?'s':'')+' selected';
			else
				id.value = id.defaultValue;
		}
	}

	function s_tog(id, name) {
		if (advanced) {
			if (!s_add(id)) {
				removeSubject(id);
			}
			updateSelectCount();
		}
		else {
			if (destServlet) {
				searchForm.value.value += ' ' + id;
				changeServlet(destServlet);
			}
			else {
				var loc = '/servlet/SubjectSearch?';
				if (searchForm && searchForm.referer) loc += 'referer='+searchForm.referer.value+'&';
				window.location.href = loc+'search=1&cgroupid=-1&searchid=&criteria=F1_P12_1_'+id+'_';
			}
		}
	}

	function s_add(id, name) {
		var added = false;
		// IF subject ID is not already in the list
		
		// ADD new subjectId to the list
		var aTag = document.getElementById('a'+id);

		if (aTag) {
		//list.innerHTML += aTag.innerHTML + "<br>";
		
			var name = aTag.innerHTML;
			
			var parent = aTag.parentNode;
			
			while (parent && (!parent.id || parent.id.charAt(0) != 'c')) {
				parent = parent.parentNode;
			}
			if (parent) {
				aTag = document.getElementById('a'+parent.id.substring(1));
				name = aTag.innerHTML + ' - ' + name;
			}

			parent = parent.parentNode;

			while (parent && (!parent.id || parent.id.charAt(0) != 'c')) {
				parent = parent.parentNode;
			}
			if (parent) {
				aTag = document.getElementById('a'+parent.id.substring(1));
				name = aTag.innerHTML + ' - ' + name;
			}
		
			name = name.replace(/<\/?b>/gi,'').replace(/&amp;/,'&');
			
			added = addSubjectOld(id, name);

		}
		
		return added;
	}


function toggle(elementName) {
	var value = false;
	var img = elementName;
	if (!img.src)
		img = MM_findObj(elementName);
	var minus = '/collections/generic/white/minus.gif';
	var plus = '/collections/generic/white/plus.gif';

	if (img.src.indexOf('minus') >= 0) {
		img.src = plus;
		value = 0;
	}
	else {
		img.src = minus;
		value = 1;
	}
	return value;
}


// ----------------------------------------------------------------------------


function onloadXSLNetscape() {
	xsltProcessor = new XSLTProcessor();
	//window.alert("loaded: " + xsltProcessor + ", " + xslDoc);
}

function onloadXMLNetscape() {
	var HTMLDoc;
	
	if (theXmlDoc.documentElement == null)
		throw new Exception( "No XML node.  This may be due to a parsing error." );
	
	//NETSCAPE 7.0
	if(!(xsltProcessor && xsltProcessor.importStylesheet)) {
		var nodeList = theXmlDoc.theElement.childNodes;
		for (i = 0; i < nodeList.length; i++) {
			theXmlDoc.theElement.removeChild(nodeList[0]);
		}

		var subjectList = theXmlDoc.getElementsByTagName('subject');
		// SKIP the first (parent) subject
		for (idx = 1; idx < subjectList.length; idx++) {
			if (idx > 1)
				theXmlDoc.theElement.appendChild(document.createElement("BR"));

			var subject = subjectList.item(idx);
			var id = subject.getAttribute("id");

			var image = document.createElement("img");
			image.setAttribute('width', '10');
			image.setAttribute('height', '1');
			image.setAttribute('src', '/images/transparent.gif');
			theXmlDoc.theElement.appendChild(image);

			if (advanced) {
			var checkbox = document.createElement("input");
			checkbox.setAttribute('class', 'sc');
			checkbox.setAttribute('type', 'checkbox');
			checkbox.setAttribute('id', 'k'+id);
			checkbox.setAttribute('name', 'k'+id);
			checkbox.setAttribute('onclick', 'javascript:s_tog(' + id + ');');
			theXmlDoc.theElement.appendChild(checkbox);
			}

			var subjectElement = document.createElement("a");
			subjectElement.setAttribute('id', 'a'+id);
			subjectElement.setAttribute('class', 's3');
			subjectElement.setAttribute('href', 'javascript:s_tog(' + id + ');');
			subjectElement.appendChild(document.createTextNode(subject.getAttribute("name")));
			theXmlDoc.theElement.appendChild(subjectElement);

		}

		theXmlDoc.theElement.loaded = true;
		if (theXmlDoc.close != null) theXmlDoc.close();
		theXmlDoc = null;

		// UPDATE CheckBox State
		setSelectedCheckboxes();
	
	} else {
		//BROWSER MOZILLA
		xsltProcessor.importStylesheet(xslDoc);
		HTMLdoc = xsltProcessor.transformToFragment(theXmlDoc, document);
	}
	
}



function expand(element) {
	var xmlSrc = '/servlet/SubjectTree?subjectid=' + element.id.substring(1);
	if (!element.loaded && xmlSrc != null && xmlSrc != "") {
		element.innerHTML = "Loading...";
		// Netscape 6 or above
		if (document.implementation && document.implementation.createDocument) {
			theXmlDoc = document.implementation.createDocument("", "", null);
			theXmlDoc.addEventListener("load", onloadXMLNetscape, false);
			theXmlDoc.theElement = element;
			theXmlDoc.load(xmlSrc);
		}
		// Internet Explorer 5 or above
		else if (window.ActiveXObject) {
			var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
			xmlDoc.async = false;
			xmlDoc.load(xmlSrc);
	
			if (xslDoc.xml != "" && xmlDoc.xml != "") {
				var html = xmlDoc.transformNode(xslDoc);
			
				if (html != null && html != "") {
					element.innerHTML = html;
					element.loaded = true;
					
					// UPDATE CheckBox State
					setSelectedCheckboxes();
				} else {
					element.innerHTML = "html not available";
				}
			
			} else {
				element.innerHTML = "xml or xsl not available";
			}
		} else {
			// not supported
			element.innerHTML = "action not supported";
		}
	}
}

function expandClass(sid, topLevel) {
	var tog = -1;
	if (!topLevel) {
		tog = toggle('o'+sid);
	}
	var display = showClass(sid,tog);
	var element = MM_findObj("x"+sid);
	if (element != null) {
		expand(element);
	}
	if (!advanced) {
		if (display) {
			var lastsid = topLevel?expandedFirst:expandedSecond;

			if (lastsid != -1 && lastsid != sid) {
				if (topLevel && expandedSecond != -1) {
					expandClass(expandedSecond);
				}
				expandClass(lastsid,topLevel);
			}

			if (topLevel) expandedFirst = sid;
			else expandedSecond = sid;
		} else {
			if (topLevel) expandedFirst = -1;
			else expandedSecond = -1;
		}
	}
	
	if (isAllCollapsed()) {showImag=true;imag();}
	else imag(0);
}



// ----------------------------------------------------------------------------

function insertSubject(id, name) {
	// hidden value
	var value = searchForm.value.value;
	if (value.length > 0) value += ' ';
	value += id;
	searchForm.value.value = value;
	
	// subject list
	var list = searchForm.subjectSelection;
	if (list) {
		list.options[list.length] = new Option(name, id);
	}

	// checkbox
	var box = document.getElementById('k'+id);
	if (box) {
		box.defaultChecked = true;
		box.checked = true;
	}
}

function addSubjectOld(id, name) {
	// Add option to the bottom of the list
	var value = searchForm.value.value;
	var exists = value.search('\\b'+id+'\\b') >= 0;

	if (!exists) insertSubject(id, name);
	
	return !exists;
}




function removeSubject(id) {
	var value = searchForm.value.value;
	
	var regexp = new RegExp('\\s?\\b' + id + '\\b');
	value.replace(regexp, '');
	searchForm.value.value = value.replace(regexp, '');

	var list = searchForm.subjectSelection;
	if (list) {
		for (i = 0; i < list.length; i++) {
			if (list.options[i].value == id) {
				removeSubjectFromList(i);
				break;
			}
		}
	}
	
	var box = document.getElementById('k'+id);
	if (box) {
		box.defaultChecked = false;
		box.checked = false;
	}
	
}

function removeSubjectFromList(index) {
	var list = searchForm.subjectSelection;
	if (index >= 0) {
		list[index] = null;
	}
}

function removeSelectedSubjects() {
	var itemRemoved = false;
	var list = searchForm.subjectSelection.options;
	for (index = list.length - 1; index >= 0; index--) {
		if (list[index].selected) {
			removeSubjectFromList(index);
			itemRemoved = true;
		}
	}
	
	if (!itemRemoved) {
		removeSubjectFromList(list.length - 1);
	}
}

function removeAllSubjects() {
	var list = searchForm.value.value.split(' ');
	for (index = list.length - 1; index >= 0; index--) {
		removeSubject(list[index]);
	}
	updateSelectCount();
}

var topS = [4, 184, 13, 29, 33, 40, 47, 55, 60, 78, 91, 106, 132, 145, 162, 116];
function isAllCollapsed() {
	var value = true;
	for (i = 0; i < topS.length; i++) {
		var id = document.getElementById('c'+topS[i]);
		if (id && id.style.visibility == 'visible') {
			value = false;
			break;
		}
	}
	return value;
}

function imag(id) {
	if (showImag) {
		if (!theTable) theTable = document.getElementById('blank');
		if (theTable) {
			var newClass;
			if (id != null) newClass='bg'+id; else newClass='bg';
			if (theTable.className != newClass)
				theTable.className = newClass;
			if (id == 0) showImag = false;
		}
	}
}

// ----------------------------------------------------------------------------

function showClass(n, show){ var NS = (navigator.appName == 'Netscape');
	var lname = "c" + n;
	var display = false;
	if (!NS) {
		var element = document.all[lname];

		if (show == 1) display = true;
		else if (show == 0) display = false;
		else display = (element.style.visibility != 'visible');
		
		if (display) {
			element.style.visibility = 'visible';
			element.style.display = 'inline';
		}
		else {
			element.style.visibility = 'hidden';
			element.style.display = 'none';
		}
	}
	else {
		if (document.getElementById) {
			var element = document.getElementById(lname);
			
			if (show == 1) display = true;
			else if (show == 0) display = false;
			else display = (element.style.visibility != 'visible');
		
			if (display) {
				element.style.visibility = 'visible';
				element.style.display = '';
			}
			else {
				element.style.display = 'none';
				element.style.visibility = 'hidden';
			}
			
		}
		else {
			document.all[lname].style.visibility = 'show';
			document.all[lname].style.display = 'inline';
		}
	}
	return display;
}


function checkLongVal(){
	var sel  = document.forms[0].KEYWORDLIST.selectedIndex;
	var kval = document.forms[0].KEYWORDLIST.options[sel].text;

	if (kval.indexOf("...", 0) > 0){
		var newURL = String(document.location.href);
		var longVal = newURL.indexOf("LONGVAL",0);
		//alert (longVal);
		if (longVal > 0)
		newURL = newURL.substring(0, longVal);
		newURL += "&LONGVAL=" + document.forms[0].KEYWORDLIST.options[sel].value;
		//alert(newURL);

		document.location = newURL;
	}
}


// ----------------------------------------------------------------------------



function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);

function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.0
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && document.getElementById) x=document.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src;x.src=a[i+2];}
}


function MM_display() {
}

function mm_setBlank(src) {
	var x=MM_findObj('blank');
	x.src=src;
}


// ----------------------------------------------------------------------------


function updateSubjectSelection() {
	var selection = '';
	var list = searchForm.subjectSelection;
	for (i = 0; i < list.length; i++) {
		if (i > 0) selection += ' ';
		selection += list[i].value;
	}
	searchForm.value.value = selection;
}

function entsub(myform) {
	if (window.event && window.event.keyCode == 13) {
		myform.findSubjects.click();
		return false;
	}
	return true;
}

// ----------------------------------------------------------------------------




