﻿window.onload = initAll;

var xhr = false;
var xNews = false;
var xEvents = false;
var xFooter = false;
var xJobs = false;
var allMenu;
var allImages = null;
var allNews;
var allJobs;
var jobDiv;
var jobApply;
var photoSet = [];
var photoNow = [];
var lastUpdated = -1;
var fadein = 5;
var fadeout = 5;
var prefix = new String("");
var currentMenu1;
var currentMenu2;
var fadeSpeed = 0;
var paramname = [];
var paramvalue = [];
var countySelected;

function initAll() {
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
		xNews = new XMLHttpRequest();
		xFooter = new XMLHttpRequest();
		xPhotos = new XMLHttpRequest();
		xJobs = new XMLHttpRequest();
	} else {
		if (window.ActiveXObject) {
			try {
				xhr = new ActiveXObject("Microsoft.XMLHTTP");
				xNews = new ActiveXObject("Microsoft.XMLHTTP");
				xFooter = new ActiveXObject("Microsoft.XMLHTTP");
				xPhotos = new ActiveXObject("Microsoft.XMLHTTP");
				xJobs = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) { }
		}
	}
	currentMenu1 = getMenuItem(1);
	currentMenu2 = getMenuItem(2);
	fadeSpeed = getFadeSpeed();
	var menuLevel = 0;
	var loc = new String(window.location);
	var start = 0;
	var end = 0;
	var domain = true;
	if (loc.charAt(start) == "h") 
		start = 7;
	do {
		if (loc.charAt(start) == "/") {
			domain = false;
			if (start < (loc.length -1))
				menuLevel++;
		}
		if (loc.charAt(start) == ".") {
			if (!domain)
				menuLevel--;
		}
	} while (++start < loc.length);
	for (var p = 0; p < menuLevel; p++) {
		prefix = prefix + "../";
	}
	start = 0;
	var index = 0;
	while (loc.indexOf("?", start) != -1) {
		start = loc.indexOf("?", start) +1;
		end = loc.indexOf("=", start);
		paramname[index] = (loc.substring(start,end));
		start = end + 1;
		end = loc.indexOf("?",start);
		if (end == -1)
			end = loc.length;
		paramvalue[index] = (loc.substring(start,end));
		index++;
	}
	if (xhr) {
		xhr.onreadystatechange = fillMenu;
		xhr.open("GET", prefix + "scripts/menu.xml", true);
		xhr.setRequestHeader("Pragma", "no-cache"); 
		xhr.setRequestHeader("Expires", "0"); 
		xhr.setRequestHeader("Cache-Control", "no-store"); 
		xhr.send(null);
	} else {
		alert("Sorry, but I couldn't create an XML Http request");
	}
	if (xFooter) {
		xFooter.onreadystatechange = fillFooter;
		xFooter.open("GET", prefix + "scripts/footer.xml", true);
		xFooter.setRequestHeader("Pragma", "no-cache"); 
		xFooter.setRequestHeader("Expires", "0"); 
		xFooter.setRequestHeader("Cache-Control", "no-store"); 
		xFooter.send(null);
	} else {
		alert("Sorry, but I couldn't create an XML Http request");
	}
	if (xPhotos) {
		xPhotos.onreadystatechange = initFade;
		xPhotos.open("GET", prefix + "scripts/photos.xml", true);
		xPhotos.setRequestHeader("Pragma", "no-cache"); 
		xPhotos.setRequestHeader("Expires", "0"); 
		xPhotos.setRequestHeader("Cache-Control", "no-store"); 
		xPhotos.send(null);
	} else {
		alert("Sorry, but I couldn't create an XML Http request");
	}
	if (xJobs) {
		xJobs.onreadystatechange = loadJobs;
		xJobs.open("GET", prefix + "jobs/jobs.xml", true);
		xJobs.setRequestHeader("Pragma", "no-cache"); 
		xJobs.setRequestHeader("Expires", "0"); 
		xJobs.setRequestHeader("Cache-Control", "no-store"); 
		xJobs.send(null);
	} else {
		alert("Sorry, but I couldn't create an XML Http request");
	}
	if (!document.ELEMENT_NODE) {
		document.ELEMENT_NODE = 1;
		document.ATTRIBUTE_NODE = 2;
		document.TEXT_NODE = 3;
		document.CDATA_SECTION_NODE = 4;
		document.ENTITY_REFERENCE_NODE = 5;
		document.ENTITY_NODE = 6;
		document.PROCESSING_INSTRUCTION_NODE = 7;
		document.COMMENT_NODE = 8;
		document.DOCUMENT_NODE = 9;
		document.DOCUMENT_TYPE_NODE = 10;
		document.DOCUMENT_FRAGMENT_NODE = 11;
		document.NOTATION_NODE = 12;
	}
}

function fillMenu() {
	if (xhr.readyState == 4) {
		if (xhr.status == 200) {
			if (xhr.responseXML) {
				// document.getElementById("menucell").removeChild(tempDiv);
				allMenu = xhr.responseXML.getElementsByTagName("mainmenu");
				for (var i = 0; i < allMenu.length; i++) {
					var tempDiv = document.createElement("div");
					var aTag = document.createElement("a");
					var current = allMenu[i].getElementsByTagName("a")[0];
					tempDiv.className = "menudiv";
					aTag.href = (prefix + (current.getElementsByTagName("href")[0].firstChild.nodeValue));
					aTag.id = (current.getElementsByTagName("id")[0].firstChild.nodeValue);
					aTag.innerHTML = (current.getElementsByTagName("label")[0].firstChild.nodeValue);
					tempDiv.id = "adiv" + ((current.getElementsByTagName("id")[0].firstChild.nodeValue).substring(4, 6));
					if (currentMenu1 == aTag.innerHTML) {
						aTag.className = "menulinkcurrent";
						aTag.innerHTML = ">  " + aTag.innerHTML;
					} else
						aTag.className = "menulink";
					tempDiv.onmouseover = showSubMenu;
					tempDiv.appendChild(aTag);
					document.getElementById("menucell").appendChild(tempDiv).cloneNode(true);
				}
			}
		} else {
			alert("There was a problem with the menu request" + xhr.status);
		}
	}
}

function showSubMenu(evt) {
	if (!evt) {
		evt = window.event;
	}
	if (evt.srcElement.id != "linkbox" && evt.srcElement.id != "submenu") {
		var k = this.id.length;
		var thisMenuNo = parseInt(this.id.substring(4, k));
		var subs = allMenu[thisMenuNo].getElementsByTagName("sub");
		var subdiv = document.getElementById("submenubox");
		hideMenu(subdiv);
		if (subs.length > 0) {
			for (var i = 0; i < subs.length; i++) {
				var tempDiv = document.createElement("div");
				var aTag = document.createElement("a");
				var current = subs[i].getElementsByTagName("a")[0];
				aTag.href = prefix + (current.getElementsByTagName("href")[0].firstChild.nodeValue);
				aTag.innerHTML = (current.getElementsByTagName("label")[0].firstChild.nodeValue).replace("&amp;","&");
				aTag.id = (current.getElementsByTagName("id")[0].firstChild.nodeValue);
				if (currentMenu2 == aTag.innerHTML) {
					aTag.className = "submenucurrent";
					aTag.innerHTML = ">  " + aTag.innerHTML;
				} else
					aTag.className = "submenu";
				tempDiv.appendChild(aTag);
				tempDiv.className = "linkbox";
				subdiv.appendChild(tempDiv).cloneNode(true);
			}
			var par = document.getElementById("adiv" + thisMenuNo);
			subdiv.style.top = (parseInt(getY(par, true))) + 3;
			subdiv.style.left = (parseInt(getX(par, true))) + 125;
			subdiv.style.height = (subs.length * 16) + 3;
			subdiv.style.width = 210;
			subdiv.style.visibility = "visible";
			subdiv.style.display = "block";
			// alert(subdiv.style.top + ", " + subdiv.style.left + ", " + subdiv.style.display + ", " + par.id);
			document.getElementById("menucell").onmouseout = hideSubMenu;
		}
	}
	return false;
}

function hideSubMenu (evt) {
	var box = document.getElementById("submenubox");
	if (box.style.visibility == "visible") {
		if (!evt) {
			evt = window.event;
		}
		var finished = false;
		var confirm = false;
		var p;
		try {
			if (evt.relatedTarget)
				p = evt.relatedTarget
			else
				p = evt.toElement;
			if (p.tagName == "BODY") {
				confirm = true;
			} else {
				do {
					p = p.parentNode;
					if (p.id == "menucell" || p.id == "linkbox" || p.id == "submenu") {
						finished = true;
						confirm = false;
					} else if (p.tagName == "BODY") {
						confirm = true;
						finished = true;
					}
				} while (!finished);
			}
		} catch (e) {
			confirm = true;
		}
		if (confirm) {
			hideMenu(box);
		}
	}
}

function hideMenu(box) {
	var links = box.getElementsByTagName("a");
	if (links.length > 0) {
		do {
			links[0].parentNode.removeChild(links[0]);
		} while (links[0] != null);
	}
	box.style.visibility = "hidden";
	box.style.display = "none";
}

function getMenuItem(level) {
	var metas = document.getElementsByTagName("meta");
	for (var i = 0; i < metas.length; i++) {
		if (metas[i].name == "aa-menu" + level)
			return metas[i].content;
	}
}

function getFadeSpeed() {
	var metas = document.getElementsByTagName("meta");
	var speed = 0;
	for (var i = 0; i < metas.length; i++) {
		if (metas[i].name == "fade")
			speed = metas[i].content;
	}
	if (speed == 0)
		speed = 5000;
	return speed;
}

function getY(obj, scroll) {
	var value = 0;
	while (obj != null) {
		value += obj.offsetTop;
		obj = obj.offsetParent;
	}
	if (scroll) {
		if (typeof (window.pageYOffset) == 'number')
			value -= window.pageYOffset
		else if (document.body && document.body.scrollTop)
			value -= document.body.scrollTop;
		else if (document.documentElement && document.documentElement.scrollTop)
			value -= document.documentElement.scrollTop;
	}
	return (value);
}

function getX(obj, scroll) {
	var value = 0;
	while (obj != null) {
		value += obj.offsetLeft;
		obj = obj.offsetParent;
	}
	if (scroll) {
		if (typeof (window.pageXOffset) == 'number')
			value -= window.pageXOffset
		else if (document.body && document.body.scrollLeft)
			value -= document.body.scrollLeft;
		else if (document.documentElement && document.documentElement.scrollLeft)
			value -= document.documentElement.scrollLeft;
	}

	return (value);
}

function initFade() {
	if (xPhotos.readyState == 4) {
		if (xPhotos.status == 200) {
			if (xPhotos.responseXML) {
				var allPhotos = xPhotos.responseXML.getElementsByTagName("entries");
				allImages = getElementsByClass("rotatephotos", "img", "-1");
				if (allImages.length > 0) {
					for (var i = 0; i < allImages.length; i++) {
						photoSet[i] = getXMLElementById(allPhotos[0], allImages[i].id);
						photoNow[i] = 0;
						var image = document.getElementById(allImages[i].id);
						var photo = photoSet[i].getElementsByTagName("img")[photoNow[i]];
						image.src = prefix + photo.getAttribute("src");
						image.alt = photo.getAttribute("alt");
						if ((photo.getAttribute("href")) && (photo.getAttribute("href").length > 0)) {
							var a = image.parentNode;
							a.href = prefix + photo.getAttribute("href");
						}
					}
					t = setTimeout("startFade()", fadeSpeed);
				}
			}
		} else {
			alert("there was a problem with the photo request" + xNews.status);
		}
	}
}

function startFade() {
	if (++lastUpdated >= allImages.length)
		lastUpdated = 0;
	var image = document.getElementById(allImages[lastUpdated].id);
	var a = image.parentNode;
	var p;
	if (a.tagName == "A")
		p = a.parentNode;
	else {
		p = a;
		a = null;
	}
	p.style.backgroundImage = "url('"+ image.getAttribute("src") + "')";
	setOpacity(image.id, 0);
	if (++photoNow[lastUpdated] >= photoSet[lastUpdated].getElementsByTagName("img").length)
		photoNow[lastUpdated] = 0;
	var photo = photoSet[lastUpdated].getElementsByTagName("img")[photoNow[lastUpdated]];
	image.alt = photo.getAttribute("alt");
	image.src = prefix + photo.getAttribute("src");
	if ((photo.getAttribute("href")) && (photo.getAttribute("href").length > 0) && (a != null))
		a.href = prefix + photo.getAttribute("href");
	doFade(image.id, 0, 100, fadein);
	var t = setTimeout("startFade()", parseInt(fadeSpeed) + 1000);
}

function doFade(id, start, end, dir) {
	if (dir == fadein) {
		start += 5;
	} else {
		start -= 5;
	}
	setOpacity(id, start);
	if (((dir == fadein) && (start < end)) || ((dir == fadeout) && (start > end)))
		var s = setTimeout("doFade('" + id + "'," + start + "," + end + "," + dir + ")", 5);
}

function setOpacity(id, level) {
	var object = document.getElementById(id); 
	object.style.opacity = (level / 100);
	object.style.KhtmlOpacity = (level / 100); 
	object.style.filter = "alpha(opacity=" + level + ")"; 
	if (level == 100)
		level = 99.999;
	object.style.MozOpacity = (level / 100); 
}

function getTHdate(d) {
	var dt = "0th";
	switch(d) {
		case "1":
		case "21":
		case "31":
			dt = d + "st";
			break;
		case "2":
		case "22":
			dt = d + "nd";
			break;
		case "3":
		case "23":
			dt = d + "rd";
			break;
		default:
			dt = d + "th";
			break;
	}
	return dt;
}

function fillFooter() {
	if (xFooter.readyState == 4) {
		if (xFooter.status == 200) {
			if (xFooter.responseXML) {
				var importedNode = null;
				var tables = xFooter.responseXML.getElementsByTagName("tr");
				for (var i = 0; i < tables.length; i++) {
					if (tables[i].nodeType == 1) {
						document.getElementById("termscell").appendChild(importXMLNode(tables[i], true));
					}
				}
				document.recalc();
			}
		} else {
			alert("there was a problem with the footer request" + xFooter.status);
		}
	}
}

function loadJobs() {
	if (xJobs.readyState == 4) {
		if (xJobs.status == 200) {
			if (xJobs.responseXML) {
				allJobs = xJobs.responseXML.getElementsByTagName("job");
				if (allJobs.length > 0)
					showAllJobs();
				else {
					noJobs();
				}
			}
		} else {
			alert("There was a problem with the jobs request" + xJobs.status);
		}
	}
}

function showAllJobs() {
	jobDiv = document.getElementById("jobdiv");
	if (jobDiv) {
		var jobsListed = false;
		for (var i = 0; i < allJobs.length; i++) {
			var current = allJobs[i];
			if (current.getElementsByTagName("active")[0].firstChild.nodeValue == "yes") {
				jobsListed = true;
				var pTag = document.createElement("p");
				var aTag = document.createElement("a");
				var id = current.getAttribute("id");
				aTag.href = id;
				aTag.id = id;
				aTag.onclick = showJob;
				aTag.innerHTML = current.getElementsByTagName("title")[0].firstChild.nodeValue;
				pTag.appendChild(aTag);
				pTag.appendChild(document.createElement("br"));
				pTag.appendChild(document.createTextNode("Closing Date: " + current.getElementsByTagName("date")[0].firstChild.nodeValue));
				jobDiv.appendChild(pTag);
			}
		}
		if (!jobsListed)
			noJobs();
	} else
		jobApply();
}

function showJob() {
	var found = false;
	var thisJob;
	for (var i = 0; (i < allJobs.length) && (!found); i++) {
		if (allJobs[i].getAttribute("id") == this.id) {
			found = true;
			thisJob = allJobs[i];
		}
	}
	if (found) {
		emptyJobBox();
		
		//add return link
		var pTag = document.createElement("p");
		var aTag = document.createElement("a");
		aTag.href = "back";
		aTag.id = "back";
		aTag.onclick = hideJob;
		aTag.innerHTML = "Back to All Vacancies";
		pTag.appendChild(aTag);
		jobDiv.appendChild(pTag);	
		
		// add job heading
		pTag = document.createElement("p");
		var spanTag = document.createElement("span");
		spanTag.className = "minorhead";
		spanTag.appendChild(document.createTextNode(thisJob.getElementsByTagName("title")[0].firstChild.nodeValue));
		pTag.appendChild(spanTag);
		jobDiv.appendChild(pTag);
		
		// add closing date
		pTag = document.createElement("p");
		spanTag = document.createElement("span");
		spanTag.className = "minorhead";
		spanTag.appendChild(document.createTextNode("Closing Date: "));
		pTag.appendChild(spanTag);
		pTag.appendChild(document.createTextNode(thisJob.getElementsByTagName("date")[0].firstChild.nodeValue));
		jobDiv.appendChild(pTag);
		
		// add salary
		if (thisJob.getElementsByTagName("salary")[0].firstChild) {
			pTag = document.createElement("p");
			spanTag = document.createElement("span");
			spanTag.className = "minorhead";
			spanTag.appendChild(document.createTextNode("Salary: "));
			pTag.appendChild(spanTag);
			pTag.appendChild(document.createTextNode(thisJob.getElementsByTagName("salary")[0].firstChild.nodeValue));
			jobDiv.appendChild(pTag);
		}
		
		// add criteria
		if (thisJob.getElementsByTagName("criteria")[0].firstChild) {
			pTag = document.createElement("p");
			spanTag = document.createElement("span");
			spanTag.className = "minorhead";
			spanTag.appendChild(document.createTextNode("Criteria: "));
			pTag.appendChild(spanTag);
			pTag.appendChild(document.createTextNode(thisJob.getElementsByTagName("criteria")[0].firstChild.nodeValue));
			jobDiv.appendChild(pTag);
		}
		
		// add explanation
		if (thisJob.getElementsByTagName("explanation")[0].firstChild) {
			pTag = document.createElement("p");
			spanTag = document.createElement("span");
			spanTag.className = "minorhead";
			spanTag.appendChild(document.createTextNode("Explanation: "));
			pTag.appendChild(spanTag);
			pTag.appendChild(document.createTextNode(thisJob.getElementsByTagName("explanation")[0].firstChild.nodeValue));
			jobDiv.appendChild(pTag);
		}
		if ((thisJob.getElementsByTagName("jobdesc")[0].firstChild) && (thisJob.getElementsByTagName("jobdesc")[0].firstChild.nodeValue.length > 0)) {
			pTag = document.createElement("p");
			aTag = document.createElement("a");
			aTag.href = "apply.htm?jobid=" + this.id;
			aTag.innerHTML = "Click here to apply for this job.";
			pTag.appendChild(aTag);
			jobDiv.appendChild(pTag);
		}
	}
	

	return false;
}

function hideJob() {
	emptyJobBox();
	showAllJobs();
	return false;
}

function emptyJobBox() {
	var contents = jobDiv.getElementsByTagName("p");
	if (contents.length > 0) {
		do {
			contents[0].parentNode.removeChild(contents[0]);
		} while (contents[0] != null);
	}
	contents = jobDiv.getElementsByTagName("div");
	if (contents.length > 0) {
		do {
			contents[0].parentNode.removeChild(contents[0]);
		} while (contents[0] != null);
	}
}

function noJobs() {
	var pTag = document.createElement("p");
	pTag.appendChild(document.createTextNode("We do not have any job vacancies at the moment."));
	pTag.appendChild(document.createElement("br"));
	pTag.appendChild(document.createTextNode("Please check again soon as this page is updated regularly."));
	pTag.className = "minorhead";
	jobDiv.appendChild(pTag);
}

function jobApply() {
	jobApply = document.getElementById("jobapply");
	var jobId;
	var thisJob;
	if (jobApply) {
		for (i = 0; i < paramname.length; i++) {
			if (paramname[i] == "jobid")
				jobId = paramvalue[i];
		}
		if (jobId) {
			var found = false;
			for (var i = 0; (i < allJobs.length) && (!found); i++) {
				if (allJobs[i].getAttribute("id") == jobId) {
					found = true;
					thisJob = allJobs[i];
				}
			}
			if (found) {
				document.getElementById("position").value = thisJob.getElementsByTagName("title")[0].firstChild.nodeValue;
				document.getElementById("jobid").value = jobId;
				document.getElementById("nexturl").value = "forms/forms.htm?jobid=" + jobId;
				var d = new Date();
				var day = d.getDate();
				var month = d.getMonth() + 1;
				var year = d.getFullYear();
				document.getElementById("date").value = day + "-" + month + "-" + year;
				if (thisJob.getElementsByTagName("checkdriver")[0].firstChild.nodeValue == "no") {
					var row = document.getElementById("driverrow");
					row.parentNode.removeChild(row);
				}
			}
		}		
	} else
		jobForms();
}

function jobSubmit() {
	var formOk = true;
	var fullName = document.getElementById("name");
	if (fullName.value.length < 5) {
		fullName.style.background = "ff9999";
		formOk = false;
	} else {
		if (fullName.value.indexOf(" ") < 2) {
			fullName.style.background = "ff9999";
			formOk = false;
		} else {
			if (fullName.value.length - fullName.value.indexOf(" ") < 3) {
				fullName.style.background = "ff9999";
				formOk = false;
			} else
				fullName.style.background = "ffffff";
		}
	}
	var address1 = document.getElementById("address1");
	if (address1.value.length < 1) {
		address1.style.background = "ff9999";
		formOk = false;
	} else
		address1.style.background = "ffffff";
	var town = document.getElementById("town");
	if (town.value.length < 1) {
		town.style.background = "ff9999";
		formOk = false;
	} else
		town.style.background = "ffffff";
	var county = document.getElementById("county");
	if (county.value.length < 1) {
		county.style.background = "ff9999";
		formOk = false;
	} else
		county.style.background = "ffffff";
	var postcode = document.getElementById("postcode");
	if (postcode.value.length < 1) {
		postcode.style.background = "ff9999";
		formOk = false;
	} else
		postcode.style.background = "ffffff";
	var phone = document.getElementById("phone");
	if (phone.value.length < 6) {
		phone.style.background = "ff9999";
		formOk = false;
	} else
		phone.style.background = "ffffff";
	var isDriver = "no";
	if (document.getElementById("driverrow")) {
		for (i = 0; i < document.jobapply.driver.length; i++) {
			if (document.jobapply.driver[i].checked) {
				isDriver = document.jobapply.driver[i].value;
			}
		}
		if (isDriver == "no") {
			document.getElementById("drivermessage").innerHTML = "You must have a current driving licence to apply for this job.";
			document.getElementById("drivertable").style.background = "ff9999";
			formOk = false;
		} else
			document.getElementById("drivertable").style.background = "ffffff";
	}
	if (formOk)
		return true;
	else {
		document.getElementById("errormessage").innerHTML = "Please complete all fields marked in red.";
		return false;
	}
}

function jobForms() {
	jobApply = document.getElementById("jobforms");
	var jobId;
	var thisJob;
	if (jobApply) {
		for (i = 0; i < paramname.length; i++) {
			if (paramname[i] == "jobid")
				jobId = paramvalue[i];
		}
		if (jobId) {
			var found = false;
			for (var i = 0; (i < allJobs.length) && (!found); i++) {
				if (allJobs[i].getAttribute("id") == jobId) {
					found = true;
					thisJob = allJobs[i];
				}
			}
			if (found) {
				document.getElementById("jobdesc").setAttribute("href", "descriptions/" + thisJob.getElementsByTagName("jobdesc")[0].firstChild.nodeValue);
				document.getElementById("appform").setAttribute("href", thisJob.getElementsByTagName("appform")[0].firstChild.nodeValue);
				document.getElementById("medical").setAttribute("href", thisJob.getElementsByTagName("medical")[0].firstChild.nodeValue);
				document.getElementById("equalopps").setAttribute("href", thisJob.getElementsByTagName("equalopps")[0].firstChild.nodeValue);
				document.getElementById("convictions").setAttribute("href", thisJob.getElementsByTagName("convictions")[0].firstChild.nodeValue);
			}
		}
	}
}

function importXMLNode(node, allChildren) {
	switch (node.nodeType) {
		case 1:
			var newNode = document.createElement(node.nodeName);
      /* does the node have any attributes to add? */
			if (node.attributes && node.attributes.length > 0) {
        		for (var i = 0; i < node.attributes.length; i++) {
        			if (node.attributes[i].nodeName == "href") {
        				newNode.setAttribute("href", prefix + node.getAttribute("href"));
        			} else if (node.attributes[i].nodeName == "src") {
        				newNode.setAttribute("src", prefix + node.getAttribute("src"));
        			} else {
        				newNode.setAttribute(node.attributes[i].nodeName, node.getAttribute(node.attributes[i].nodeName));
        			}
          		}
           	}
      /* are we going after children too, and does the node have any? */
			if (allChildren && node.childNodes && node.childNodes.length > 0) {
				for (var i = 0; i < node.childNodes.length; i++) {
					newNode.appendChild(importXMLNode(node.childNodes[i], true));
				}
			}
      		return newNode;
			break;
		case 3:
			return document.createTextNode(node.nodeValue);
			break;
		case 4:
		case 8:
			return document.createTextNode(node.nodeValue);
			break;
  	}
}

function getElementsByClass(className, tagName, source) {
	var allElements;
	if (source == "-1")
		allElements = document.getElementsByTagName(tagName);
	else
		allElements = source.getElementsByTagName(tagName);
	var store = [];
	for (var i = 0; i < allElements.length; i++) {
		if (allElements[i].className == className)
			store[store.length] = importXMLNode(allElements[i],true);
	}
	return store;
}

function getXMLElementById(node, id) {
	var found = null;
	if (node.attributes && node.attributes.length > 0) {
   		for (var i = 0; i < node.attributes.length; i++) {
        	if (node.attributes[i].nodeName == "id") {
				if (node.getAttribute("id").indexOf(id) == 0)
					found = node;
			}
		}
	}
	for (var i = 0; (node.childNodes) && (i < node.childNodes.length) && (found==null); i++)
		found = getXMLElementById(node.childNodes[i], id);
	return found;
}