var results = new Array();
var offset = 0;
var selectall = true;
var http = new Array();
var searchText = '';
var talentUrl = "http://jobs.cgsociety.org/talentResults.php";
var adUrl = 'http://jobs.cgsociety.org/adResults.php';
var saveUrl = 'http://jobs.cgsociety.org/saveSearch.php';
var months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');


http_ident=0;
function quick_ajax_hit (url) {
	http_ident++;
	http[http_ident] = getHTTPObject();
	http[http_ident].open("GET", url, true);
	http[http_ident].send(null);
}

function Talent(userid, match, score, givenname, familyname, username, userLocation, skills, avatarurl) {
	
	function toString() {
		return "("+score+") "+username+" - "+userLocation+"("+skills+")"; 
	}

	this.userid = userid;
	this.match = match;
	this.score = score;
	this.givenname = givenname;
	this.familyname = familyname;
	this.username = username;
	this.userLocation = userLocation;
	this.skills = skills;
	this.avatarurl = avatarurl;
	this.selected = false;
}

function addTalent(userid, match, score, givenname, familyname, username, userLocation, skills, avatarurl) {
	results[results.length] = new Talent(userid, match, score, givenname, familyname, username, userLocation, skills, avatarurl);
}

function Advert(id, headline, company, country, job_time, description, date_listed, logo, bold, userid) {
	this.id = id;
	this.headline = headline;
	this.company = company;
	this.country = country;
	this.job_time = job_time;
	this.description = description;
	this.date_listed = date_listed;
	this.logo = logo;
	this.bold = bold;
	this.userid = userid;
	this.selected = false;
}

function addAd(id, headline, company, country, job_time, description, date_listed, logo, bold, userid) {
	results[results.length] = new Advert (id, headline, company, country, job_time, description, date_listed, logo, bold, userid);
}

function strcmp(a,b) {
	return (a < b) ? -1 : (a > b ? 1 : 0);
}

tByScore = function (a, b) {
	return a.score - b.score;	
}

tByUsername = function (a, b) {
	return strcmp(a.username, b.username);
}

tByGivenName = function (a, b) {
	return strcmp(a.givenname, b.givenname);
}

tByFamilyName = function (a,b) {
	return strcmp(a.familyname, b.familyname);
}

tByMatch = function (a,b) {
	return a.match - b.match;
}

tByCompany = function (a,b) {
	return strcmp(a.company,b.company);
}

tByCountry = function (a,b) {
	return strcmp(a.country,b.country);
}

tByDateListed = function (a,b) {
	return strcmp(b.date_listed,a.date_listed);
}



function setHTMLContent(type, count, offset) {
	
}

function toggleCheckbox(value) {
	if(results[value+offset].selected) {
		results[value+offset].selected = false;
		document.getElementById("checkbox_"+value).selected = false;
	} else {
		results[value+offset].selected = true;
		document.getElementById("checkbox_"+value).selected = true;
	}
}

function selectItems(adidlist, size) {
	adids = adidlist.split(',');
	
	for(i = 0; i < results.length; i++) {
		if(inArray(results[i].id, adids)) {
			results[i].selected=true;
		}
	}
	
	updateAdPage(document.getElementById('sortby_ad').value, size);
}

function inArray(needle, haystack) {
	for (h in haystack) {
		if (haystack[h] == needle) {
			return h;
		}
	}
	return false;
}

function updatePage(sortType, count) {
	switch(sortType) {
		case 'match':
		offset=0;
		results.sort(tByFamilyName);
		results.sort(tByMatch);
		results.reverse();
		break;
		case 'givenname':
		offset=0;
		results.sort(tByGivenName);
		break;
		case 'familyname':
		offset=0;
		results.sort(tByFamilyName);
		break;
		case 'score':
		offset=0;
		results.sort(tByFamilyName);
		results.sort(tByScore);
		results.reverse();
		break;
		case 'username':
		offset=0;
		results.sort(tByUsername);
		break;
	}
	
	shown=count;
			
	idlist = new Array();
	for(i=0;i<results.length;i++)
		idlist.push(results[i].userid);
	document.cookie = 'all_search_applications_'+__ad_id+'='+idlist.join(',')+';path="/"';

	for(iter = 0; iter < count; iter ++) {
		i = iter+offset;
		
		if (results[i] == null) {
			document.getElementById('talent_row_'+iter).style.display = 'none';
			hideNext();
			shown --;
			continue;
		}
		document.getElementById('talent_row_'+iter).style.display = 'block';
		document.getElementById("name_"+iter).innerHTML = '<a onclick="document.cookie=\'ad_offset_for_'+__ad_id+'='+offset+'; path=/\'" href="http://jobs.cgsociety.org/candidate/'+__ad_id+':'+results[i].userid+'/">'+results[i].givenname + " " + results[i].familyname+'</a>';
		
		document.getElementById("match_"+iter).innerHTML = results[i].match;
		
		document.getElementById("score_"+iter).innerHTML = '<div class="profile_bar" style="width:'+results[i].score+'%; margin-top:3px"><img src="/images/structure/transparent_spacer.gif" width="1" height="10" /></div>';
			  
		document.getElementById("portfolio_"+iter).innerHTML = '<a href="http://'+results[i].username+'.cgsociety.org" target="_blank">'+results[i].username+'.cgsociety.org</a>';
		document.getElementById("location_"+iter).innerHTML = results[i].userLocation;
		document.getElementById("skills_"+iter).innerHTML = results[i].skills;
		if(results[i].avatarurl.length > 5) { 
			document.getElementById("avatar_"+iter).innerHTML = '<a onclick="document.cookie=\'ad_offset_for_'+__ad_id+'='+offset+'; path=/\'" href="http://jobs.cgsociety.org/candidate/'+__ad_id+':'+results[i].userid+'/"><img src="http://portfolio.cgsociety.org/'+results[i].avatarurl+'" width="71" height="71" /></a>';
		} else {
			document.getElementById("avatar_"+iter).innerHTML = '<img src="http://portfolio.cgsociety.org/images/structure/cgs_spacer.gif" width="71" height="71" />';
		}
		document.getElementById("checkbox_"+iter).checked = results[i].selected;
	}

	document.getElementById("search_text").innerHTML = searchText;
	
	document.getElementById("start_top").innerHTML = offset+1;
	document.getElementById("start_btm").innerHTML = offset+1;
	
	document.getElementById("count").innerHTML = results.length;
	document.getElementById("count_top").innerHTML = results.length;
	document.getElementById("count_btm").innerHTML = results.length;
		
	document.getElementById("end_top").innerHTML = offset+shown;
	document.getElementById("end_btm").innerHTML = offset+shown;
}
var updateFunc = updatePage;

function updateAdPage(sortType, count) {
	updateFunc = updateAdPage;
	switch(sortType) {
		case 'company':
		offset=0;
		results.sort(tByCompany);
		break;
		case 'country':
		offset=0;
		results.sort(tByCountry);
		break;
		case 'date_listed':
		offset=0;
		results.sort(tByDateListed);
		break;
	}

	hits = new Array ();
	for(iter = 0; iter < count; iter ++) {
		i = iter+offset;
		if (results[i] == null) {
			document.getElementById('ad_row_'+iter).style.display = 'none';
			hideNext();
			continue;
		}
		hits.push (results[i].id);

		document.getElementById('ad_row_'+iter).style.display = 'block';
		if (results[i].bold == 1)
			document.getElementById('ad_row_'+iter).className = 'search_bold';
		else
			document.getElementById('ad_row_'+iter).className = '';

		document.getElementById("ad_headline_"+iter).innerHTML = '<a href="http://jobs.cgsociety.org/ad/'+results[i].id+'/" onclick="showJob('+results[i].id+'); return false;">'+results[i].headline+'</a>';

		document.getElementById("ad_company_"+iter).innerHTML = '<a href="/company/'+results[i].userid+'/">'+results[i].company+'</a>';
		document.getElementById("ad_location_"+iter).innerHTML = results[i].country;
		document.getElementById("ad_job_time_"+iter).innerHTML = results[i].job_time;
		document.getElementById("ad_description_short_"+iter).innerHTML = results[i].description;
		document.getElementById("ad_date_listed_"+iter).innerHTML = dateMunge(results[i].date_listed);
		document.getElementById("ad_logo_"+iter).innerHTML = ''; // results[i].logo ? '<img src="'+results[i].logo+'" />' : '';

		document.getElementById("checkbox_"+iter).checked = results[i].selected;
	}
	if (hits.length > 0)
		quick_ajax_hit ('/hit.php?type=summary&ids='+hits.join(','));
	
	document.getElementById("search_text").innerHTML = searchText;
	
	document.getElementById("start_top").innerHTML = offset+1;
	document.getElementById("start_btm").innerHTML = offset+1;
	
	document.getElementById("count").innerHTML = results.length;
	document.getElementById("count_top").innerHTML = results.length;
	document.getElementById("count_btm").innerHTML = results.length;
		
	document.getElementById("end_top").innerHTML = results.length < offset+count ? results.length : offset+count;
	document.getElementById("end_btm").innerHTML = results.length < offset+count ? results.length : offset+count;
}

function dateMunge(unixDate) {
	unixDate = unixDate.split(' ');
	
	date = unixDate[0].split('-');
	
	stringDate = date[2]+" "+months[date[1]-1]+" "+date[0];
	
	return stringDate;
}

function selectAll(count) {
	if (selectall) { 
		for(i = 0; i < results.length; i++) {
			results[i].selected = true;
			selectall = false;
			document.getElementById("select_top").value = 'Deselect All Results';
			document.getElementById("select_btm").value = 'Deselect All Results';
		}
	} else {
		for(i = 0; i < results.length; i++) {
			results[i].selected = false;	
			selectall = true;
			document.getElementById("select_top").value = 'Select All Results';
			document.getElementById("select_btm").value = 'Select All Results';
		}
	}
	
	updateFunc(null, count);
}

function goNext(value) {
	if((offset+value)<results.length) {
		offset += value;
		showPrev();
	} else {
		offset = results.length-value;
		showPrev();
		hideNext();
	}
	updateFunc(null, value);
}

function goPrev(value) {
	if((offset-value)>0) {
		offset -= value;
		showNext();
	} else {
		offset = 0;
		showNext();
		hidePrev();
	}
	updateFunc(null, value);
}

var __ad_id;
function getAdMatches (userid, adid, size, force_offset) {
	var curDateTime = new Date();
	var ident = curDateTime;
	
	hideItems(talentSearchItems);
	hideItems(adSearchItems);
	showItems(spinnerItems);
	
	http[ident] = getHTTPObject();
	
	var sendURL = talentUrl+"?userid="+userid+"&jobid="+adid;

	__ad_id = adid;

	http[ident].open("GET", sendURL, true);
	http[ident].onreadystatechange = function() {handleTalentResponse(ident, size, force_offset)};
	http[ident].send(null);
}

function getSavedAdSearch (query, adidlist, size, _offset) {
	var curDateTime = new Date();
	var ident = curDateTime;

	http[ident] = getHTTPObject();

	var sendURL = adUrl+'?'+query;

	http[ident].open("GET", sendURL, true);
	http[ident].onreadystatechange = function() {handleAdResponse(ident, size, adidlist, _offset)};
	http[ident].send(null);

	elements = query.split('&');
	for (i=0;i<elements.length;i++) {
		line = elements[i].split('=');
		if (e=document.getElementById(line[0]))
			e.value = line[1];
		else if (e=document.getElementById(line[0]+'_select')) {
			e.value = line[1];
			// VERY HACKY. Set the value 2.5s from now, in case we're still loading the list dynamically.
			setTimeout ("document.getElementById('"+line[0]+"_select').value = '"+line[1]+"';", 2500);
		} else if (line[0] == 'work_auth_emp')
			document.getElementById('work_auth_employer').checked = line[1];
//		else
//			alert ('Cant place '+line[0]+' with '+line[1]);

		// Update dependant select boxes
		if (line[0] == 'country') {
			getList('country', 'state', e.value, '0', true);
			getList('country', 'city', e.value, '0', true); 
		}

		if (line[0] == 'company' || line[0] == 'city' || line[0] == 'job_time' || line[0] == 'job_site' || line[0] == 'work_auth_emp') {
			document.getElementById ('advanced').checked = true;
			setadvanced(true);
		}
	}
}

function getAdSearch (size) {
	var curDateTime = new Date();
	var ident = curDateTime;
	http[ident] = getHTTPObject();

	hideItems(talentSearchItems);
	hideItems(adSearchItems);
	showItems(spinnerItems);

	var sendURL = adUrl+'?go';

	sendURL += '&keywords='+document.getElementById('keywords').value;
	sendURL += '&country='+document.getElementById('country_select').value;
	sendURL += '&state='+document.getElementById('state_select').value;
	sendURL += '&industry='+document.getElementById('industry_select').value;
	sendURL += '&job='+document.getElementById('job_select').value;
	sendURL += '&job_basis='+document.getElementById('job_basis').value;
	sendURL += '&postedinlast='+document.getElementById('postedinlast').value;

	if (document.getElementById('advanced').checked == true) {
		sendURL += '&company='+document.getElementById('company').value;
		sendURL += '&city='+document.getElementById('city_select').value;
		sendURL += '&job_time='+document.getElementById('job_time').value;
		sendURL += '&job_site='+document.getElementById('job_site').value;
		sendURL += '&work_auth_emp='+document.getElementById('work_auth_employer').checked;
	}

	var expires = new Date();
	expires.setTime(expires.getTime()+(28*24*60*60*1000)); 

	document.cookie = 'cgj_default_search_country='+document.getElementById('country_select').value+';expires='+expires.toGMTString();
	document.cookie = 'cgj_default_search_state='+document.getElementById('state_select').value+';expires='+expires.toGMTString();
	document.cookie = 'cgj_default_search_city='+document.getElementById('city_select').value+';expires='+expires.toGMTString();

	http[ident].open("GET", sendURL, true);
	http[ident].onreadystatechange = function() {handleAdResponse(ident, size)};
	http[ident].send(null);
}

function saveTalentHunter (searchName) {
	var curDateTime = new Date();
	var ident = curDateTime = curDateTime;
	http[ident] = getHTTPObject();
	
	var savefield = "";
	savefield += '&keywords='+document.getElementById('keywords').value;
	savefield += '&country='+document.getElementById('country_select').value;
	savefield += '&state='+document.getElementById('state_select').value;
	savefield += '&industry='+document.getElementById('industry_select').value;
	savefield += '&job='+document.getElementById('job_select').value;
	savefield += '&job_basis='+document.getElementById('job_basis').value;

	if (document.getElementById('advanced').checked == true) {
		savefield += '&company='+document.getElementById('company').value;
		savefield += '&city='+document.getElementById('city_select').value;
		savefield += '&job_time='+document.getElementById('job_time').value;
		savefield += '&job_site='+document.getElementById('job_site').value;
		savefield += '&work_auth_emp='+document.getElementById('work_auth_employer').checked;
	}
	
	savefield=escape(savefield);
	
	var sendURL = saveUrl+'?name='+searchName;
	sendURL += '&type=search';
	sendURL += '&query='+savefield;
	
	http[ident].open("GET", sendURL, true);
	http[ident].onreadystatechange = function() {handleSaveResponse(ident)};
	http[ident].send(null);
}

function getAdList(adlist, size) {
	var curDateTime = new Date();
	var ident = curDateTime;
	http[ident] = getHTTPObject();
	
	var sendURL = adUrl+'?go';
	sendURL += '&adlist='+adlist;
	
	http[ident].open("GET", sendURL, true);
	http[ident].onreadystatechange = function() {handleAdResponse(ident, size)};
	http[ident].send(null);	
}

function saveSearchResults(searchName) {
	var adids = new Array();
	var curDateTime = new Date();
	var ident = curDateTime = curDateTime;
	http[ident] = getHTTPObject();
	
	for (i = 0; i < results.length; i++) {
		if(results[i].selected)	adids[adids.length] = results[i].id;
	}
	
	var sendURL = saveUrl+'?name='+searchName;
	sendURL += '&type=results';
	sendURL += '&adidlist='+adids.join(",");
	
	http[ident].open("GET", sendURL, true);
	http[ident].onreadystatechange = function() {handleSaveResponse(ident)};
	http[ident].send(null);
}

function showJob(id) {
	var savefield = "";
	savefield += '&keywords='+document.getElementById('keywords').value;
	savefield += '&country='+document.getElementById('country_select').value;
	savefield += '&state='+document.getElementById('state_select').value;
	savefield += '&industry='+document.getElementById('industry_select').value;
	savefield += '&job='+document.getElementById('job_select').value;
	savefield += '&job_basis='+document.getElementById('job_basis').value;

	if (document.getElementById('advanced').checked == true) {
		savefield += '&company='+document.getElementById('company').value;
		savefield += '&city='+document.getElementById('city_select').value;
		savefield += '&job_time='+document.getElementById('job_time').value;
		savefield += '&job_site='+document.getElementById('job_site').value;
		savefield += '&work_auth_emp='+document.getElementById('work_auth_employer').checked;
	}
		
	savefield=escape(savefield);
		
	var sendURL = '?search_query='+savefield;
	sendURL += '&adidlist='+id;
	
	sendURL += '&offset='+offset;
	
	this.location.href = "http://jobs.cgsociety.org/apply_for_job.php/"+sendURL;
}

function showSelected() {
	var adids = new Array();
	var curDateTime = new Date();
	var ident = curDateTime = curDateTime;
	http[ident] = getHTTPObject();
	
	var savefield = "";
	savefield += '&keywords='+document.getElementById('keywords').value;
	savefield += '&country='+document.getElementById('country_select').value;
	savefield += '&state='+document.getElementById('state_select').value;
	savefield += '&industry='+document.getElementById('industry_select').value;
	savefield += '&job='+document.getElementById('job_select').value;
	savefield += '&job_basis='+document.getElementById('job_basis').value;

	if (document.getElementById('advanced').checked == true) {
		savefield += '&company='+document.getElementById('company').value;
		savefield += '&city='+document.getElementById('city_select').value;
		savefield += '&job_time='+document.getElementById('job_time').value;
		savefield += '&job_site='+document.getElementById('job_site').value;
		savefield += '&work_auth_emp='+document.getElementById('work_auth_employer').checked;
	}
	savefield=escape(savefield);
	
	for (i = 0; i < results.length; i++) {
		if(results[i].selected)	adids[adids.length] = results[i].id;
	}
	
	var sendURL = '?search_query='+savefield;
	sendURL += '&adidlist='+adids.join(",");
	
	sendURL += '&offset='+offset;
	
	this.location.href = "http://jobs.cgsociety.org/apply_for_job.php/"+sendURL;
}

function showItems(htmlItemArray) {
	for (i = 0; i < htmlItemArray.length; i++) {
		document.getElementById(htmlItemArray[i]).style.display = 'block';
	}
}

function hideItems(htmlItemArray) {
	for (i = 0; i < htmlItemArray.length; i++) {
		document.getElementById(htmlItemArray[i]).style.display = 'none';
	}
}

function enableJobs() {
	document.getElementById('jobs_left').style.display = 'block';
	document.getElementById('jobs_right').style.display = 'block';
	document.getElementById('talent_left').style.display = 'none';
	document.getElementById('talent_right').style.display = 'none';
}

function enableTalent() {
	document.getElementById('talent_left').style.display = 'block';
	document.getElementById('talent_right').style.display = 'block';
	document.getElementById('jobs_left').style.display = 'none';
	document.getElementById('jobs_right').style.display = 'none';
}

function showTalentSearch() {
	document.getElementById('talent_ttl').style.display = 'block';
	document.getElementById('search_ttl').style.display = 'block';
	document.getElementById('search_nav_top').style.display = 'block';
	document.getElementById('talent_results').style.display = 'block';
	document.getElementById('search_nav_btm').style.display = 'block';
	document.getElementById('search_ftr').style.display = 'block';
	
}

function handleTalentResponse(ident, size, force_offset) {
	if (http[ident].readyState == 4) {
		results = new Array();
		
		userstrings =http[ident].responseText.split("~");
		
		if(userstrings.length > 1) {
				
			searchText = userstrings[0];
									
			for(i=1; i < (userstrings.length); i++) {
				if(userstrings[i].length > 0) result = userstrings[i].split('^');
				addTalent(result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8]);
			}
		}
		showNext();
		hidePrev();
		
		if(results.length <= size) { hideNext(); }
		
		updatePage(document.getElementById('sortby_talent').value, size);
		hideItems(spinnerItems);
		hideItems(adSearchItems);
		showItems(talentSearchItems);

		if (force_offset)
			goNext (force_offset);
		else {
			goNext (10);
			goPrev (10);
		}
	}
}

function handleSaveResponse(ident) {
	if(http[ident].readyState==4) {
		
	}
}

function handleAdResponse(ident, size, adidlist, _offset) {
	if (http[ident].readyState == 4) {
		results = new Array();
		userstrings = http[ident].responseText.split("~");
		if (userstrings.length > 0) {
			searchText = userstrings[0];
			for (i=1;i<userstrings.length;i++) {
				if (userstrings[i].length > 0) result = userstrings[i].split('^');
				addAd(result[0], result[1], result[2], result[3], result[4], result[5], result[6], result[7], result[8], result[9]);
			}
		}
		
		showNext();
		hidePrev();
		
		if(results.length <= size) { hideNext(); }
		
		updateAdPage(document.getElementById('sortby_ad').value, size);
		
		hideItems(spinnerItems);
		hideItems(talentSearchItems);
		showItems(adSearchItems);
		
		if (adidlist) {
			selectItems(adidlist, size);
		}
	
		if(_offset) {
			offset=_offset;
			if(offset>0) { showPrev(); }
			
		}
		
		updateFunc(null, size);
	}
		
	
	
}

function getHTTPObject() {
	var xmlhttp;

	/*@cc_on
		@if (@_jscript_version >= 5)
			try {
				xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
			} catch (e) {
				try {
					xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
				} catch (E) {
					xmlhttp = false;
				}
			}
		@else
			xmlhttp = false;
	@end @*/

	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	return xmlhttp;
}
