var xmlDoc;
var cList = 'searchResults';

function addEvent(elm, evType, fn, useCapture)
{
	if (typeof useCapture == "undefined") 
	{
		useCapture = false;
	}
	
	if(elm.addEventListener)
	{
		elm.addEventListener(evType, fn, useCapture);
		return true;
	}
	else if(elm.attachEvent)
	{
		var r = elm.attachEvent('on' + evType, fn);
		EventCache.add(elm, evType, fn);
		return r;
	}
	else
	{
		elm['on' + evType] = fn;
	}
}

var EventCache = function(){
	var listEvents = [];
	return {
		listEvents : listEvents,
		add : function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush : function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item = listEvents[i];
				if(item[0].removeEventListener){
					item[0].removeEventListener(item[1], item[2], item[3]);
				};
				if(item[1].substring(0, 2) != "on"){
					item[1] = "on" + item[1];
				};
				if(item[0].detachEvent){
					item[0].detachEvent(item[1], item[2]);
				};
				item[0][item[1]] = null;
			};
		}
	};
}();

function getRSfromXML(sql, xmlFile)
{
	if (typeof xmlFile == "undefined") 
	{
		xmlFile = 'getJobs.php';
	}
	//build url
	
	var url = xmlFile + '?sql=' + sql;
	//window.open(url);
	//load xml file
	// code for IE
	if (window.ActiveXObject)
	{
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async=false;
		xmlDoc.load(url);
		buildList();
	}
	// code for Mozilla, Firefox, Opera, etc.
	else if (document.implementation && document.implementation.createDocument)
	{
		xmlDoc=document.implementation.createDocument("","",null);
		xmlDoc.load(url);
		xmlDoc.onload=buildList;
	}
	else
	{
		alert('Your browser cannot handle this script');
	}
}

function createUL(ary, par, prefix, idflds, disflds, rowaction)
{
	var ulid = '';
	if (typeof disflds == "undefined" || disflds == '') 
	{
		var disflds = null;
	}

	if (typeof rowaction == "undefined" || rowaction == '') 
	{
		var rowaction = rowAction;
	}

	if (typeof prefix != "undefined") 
	{
		ulid = prefix;
	}
	if (typeof idflds != "undefined" && idflds != '') 
	{
		var eflds = idflds.split(',');
		for(var i = 0;i<eflds.length;i++)
		{
			ulid += ':' + ary[eflds[i]];
		}
	}
	
	var newul = document.createElement('ul');
	newul.id = ulid;
	newul.className = 'data';
	newul.style.color = 'blue';
	
	if(disflds == null)
	{
		for(var i = 0;i<ary.length;i++)
		{
			var newli = document.createElement('li');
			newli.innerHTML = ary[i];
			newul.appendChild(newli);
		}	
	}
	else
	{
		var flds = disflds.split(',');
		for(var i = 0;i<flds.length;i++)
		{
			var newli = document.createElement('li');
			newli.innerHTML = ary[flds[i]];
			newul.appendChild(newli);
		}	
		
	}
	addEvent(newul, 'click', rowaction);
	addEvent(newul, 'mouseover', rowHover);
	addEvent(newul, 'mouseout', rowLeave);
	var parent = document.getElementById(par);
	parent.appendChild(newul);
}

function buildList()
{
	//alert('Made it');
	var rs = [];
	var attrs = xmlDoc.getElementsByTagName("results")[0].attributes;
	for(var i = 0;i < attrs.length; i++)
	{
		rs[attrs[i].name] = attrs[i].value;
	}

	for(var r = 0;r < rs['count']; r++)
	{
		var nr = new Array();
		var elements = xmlDoc.getElementsByTagName("results")[0].childNodes[r].childNodes;
		for(var e = 0;e < elements.length;e++)
		{
			var fName = elements[e].nodeName;
			var fValue = elements[e].hasChildNodes() ? elements[e].childNodes[0].nodeValue : '';
			//alert(fName);
			//alert(fValue);
			nr[fName] = fValue;
			nr[e] = fValue;
		}
		rs.push(nr);
	}

	switch(cList)
	{
		case 'searchResults':
			if(rs['count'] > 0)
			{
				for(var i = 0; i<rs['count'];i++)
				{
					createUL(rs[i], 'jobresults', 'job', 'id', 'position,cat,loc');
				}
			}
			else
			{
                var jsearch = document.getElementById('jobsearch_div');
                var jresults = document.getElementById('jobresults_dl');
              	jsearch.style.display = 'block';
                jresults.style.display = 'none';
				alert('There are no positions available to match your selected job criteria.  Please revise your search and try again.');
                return false;
			}
		break;
		case 'setJob':
			if(document.getElementById('jobPositionDesc') != null)
			{
				document.getElementById('jobPositionDesc').innerHTML = rs[0]['position'];
			}
			if(document.getElementById('jobCategoryDesc') != null)
			{
				document.getElementById('jobCategoryDesc').innerHTML = rs[0]['cat'];
			}
			if(document.getElementById('jobNumberDesc') != null)
			{
				document.getElementById('jobNumberDesc').innerHTML = rs[0]['job_number'];
			}
			if(document.getElementById('jobLocationDesc') != null)
			{
				document.getElementById('jobLocationDesc').innerHTML = rs[0]['loc'];
			}
			if(document.getElementById('jobPostedDesc') != null)
			{
				document.getElementById('jobPostedDesc').innerHTML = formatDate(rs[0]['date_posted']);
			}
			if(document.getElementById('jobFaxDesc') != null)
			{
				document.getElementById('jobFaxDesc').innerHTML = rs[0]['contact_fax'];
			}
			if(document.getElementById('jobRequirementDesc') != null)
			{
				document.getElementById('jobRequirementDesc').innerHTML = rs[0]['job_requirements'];
			}
			if(document.getElementById('jobResponsibilityDesc') != null)
			{
				document.getElementById('jobResponsibilityDesc').innerHTML = rs[0]['job_responsibilities'];
			}
			if(document.getElementById('JobTitle') != null)
			{
				document.getElementById('JobTitle').value = rs[0]['position'];
			}
			if(document.getElementById('JobLocation') != null)
			{
				document.getElementById('JobLocation').value = rs[0]['loc'];
			}
			if(document.getElementById('jobid') != null)
			{
				document.getElementById('jobid').value = rs[0]['id'];
			}
		break;
	}
}

function getSelectList(id)
{
	var selBox = document.getElementById(id);
	var listAry = new Array();
	var x = 0;
	if(selBox != null)
	{
		for (var i=0; i < selBox.options.length; i++)
		{
			if (selBox.options[i].selected) 
			{
				listAry[x] = selBox.options[i].value;
				x++;
			}
		}
	}
	
	return listAry.join(',');
}

function jobSearch(e)
{
	var catList = getSelectList('selectjobs');
	var locList = getSelectList('selectlocations');
	var jsearch = document.getElementById('jobsearch_div');
	var jresults = document.getElementById('jobresults_dl');
	var ddresults = document.getElementById('jobresults');

	jsearch.style.display = 'none';
	jresults.style.display = 'block';
	
	var sql = 'select jobs.*, location.location as loc, job_category.category as cat from jobs left join location on jobs.location = location.id left join job_category on jobs.job_category = job_category.id where date_closed > getdate() ';
	
	if(catList.substring(0,1) != '' && catList.substring(0,1) != 0)
	{
		sql += ' and jobs.job_category in ('+ catList +')';
	}

	if(locList.substring(0,1) != '' && locList.substring(0,1) != 0)
	{
		sql += ' and jobs.location in ('+ locList +')';
	}
	
	sql += ' order by date_posted desc';
	
	cList = 'searchResults';
	ddresults.innerHTML = '';
	getRSfromXML(sql);
}

function rowHover(e)
{
		var el = window.event ? window.event.srcElement : e ? e.target : null;
		el.parentNode.style.fontWeight = 'bold';
}

function rowLeave(e)
{
		var el = window.event ? window.event.srcElement : e ? e.target : null;
		el.parentNode.style.fontWeight = 'normal';
}

function rowAction(e)
{
	var el = window.event ? window.event.srcElement : e ? e.target: null;
	var jresults = document.getElementById('jobresults_dl');
	var jdesc = document.getElementById('jobdescription');
	var attr = el.parentNode.id.split(':');
	var sql = 'select jobs.*, location.location as loc, job_category.category as cat from jobs left join location on jobs.location = location.id left join job_category on jobs.job_category = job_category.id where jobs.id = ' + attr[1];
	cList = 'setJob';
	
	getRSfromXML(sql);
	jresults.style.display = 'none';
	jdesc.style.display = 'block';
}

function formatDate(d) 
{
	var dPart = d.split(" ");
	//dPart = dPart[0].split("/");
	
	var str = dPart[0] + ' ' + dPart[1] + ' ' + dPart[2];
	return str;
}

function backSearch()
{
	var jsearch = document.getElementById('jobsearch_div');
	var jresults = document.getElementById('jobresults_dl');
	jsearch.style.display = 'block';
	jresults.style.display = 'none';	
}

function backResults()
{
	var jdesc = document.getElementById('jobdescription');
	var jresults = document.getElementById('jobresults_dl');
	jdesc.style.display = 'none';
	jresults.style.display = 'block';	
}

function toApply()
{
	var jdesc = document.getElementById('jobdescription');
	var japply = document.getElementById('Resume');
	var japplydl = document.getElementById('resume_dl');
	jdesc.style.display = 'none';
	japply.style.display = 'block';
	japplydl.style.display = 'block';	
}

function eeoCancel()
{
	window.location = "about_efi_culture.shtml"; 
}

function getAppId()
{
	var appid = document.getElementById('appid');
	if(appid != null)
	{
		var hpart = window.location.hash;
		appid.value = hpart.replace('#', '');
	}
}

function installListerners()
{
	var el = document.getElementById('searchJob');
	if(el != null)
	{
		addEvent(el,"click",jobSearch);
	}
	
	var el = document.getElementById('searchBack');
	if(el != null)
	{
		addEvent(el, "click", backSearch);
	}

	var el = document.getElementById('resultsBack');
	if(el != null)
	{
		addEvent(el, "click", backResults);
	}
	
	var el = document.getElementById('applyOnly');
	if(el != null)
	{
		addEvent(el, "click", toApply);
	}
	
	var el = document.getElementById('noeeo');
	if(el != null)
	{
		addEvent(el, "click", eeoCancel);
	}
}

addEvent(window,"load",getAppId);
addEvent(window,"load",installListerners);
addEvent(window,'unload',EventCache.flush);