function alertErrors(e) {
	if((typeof e).match(/object/i)) {
		alert("The following errors have occurred:\n" + $A(e).map(function(i){return ' - '+i;}).join("\n"));
	} else if((typeof e).match(/string/i)) {
		alert("The following errors have occurred:\n - "+e);
	}
}

function addBank(id) {
	waitingMessage.setMessage("adding_resume", "Adding resume selection...");

	requestPage("/network/functions/public/addresume.cfm", "id=" + id, function(requestText) {
		if(requestText.match(/^login$/i))
			loginRequest("addBank('" + id + "');");
		else if(requestText.match(/^timeout$/i)) {
			waitingMessage.remove();
			timeoutAlert(true);
		}
		else {
			waitingMessage.remove();
			cartRefresh("resume");
		}
	});

	return false;
}

function removeBank(id) {
	if(id || (!id && confirm("Are you sure you wish to clear all your selected resumes?"))) {
		waitingMessage.setMessage("removing_resume", "Removing resume selection...");
		requestPage("/network/functions/public/removeresume.cfm", ((id) ? "id=" + id : "clear=true"), function(requestText) {
			if(requestText.match(/^login$/i))
				loginRequest("removeBank(" + id + ");");
			else if(requestText.match(/^timeout$/i)) {
				waitingMessage.remove();
				timeoutAlert(true);
			}
			else {
				waitingMessage.remove();
				cartRefresh("resume");
			}
		});
	}

	return false;
}

function cartRefresh(type, site) {
	if($("jt_" + type + "cart")) {
		this.options = {
			onSuccess: function() { loading.hide(); },
			onFailure: function() { loading.hide(); }
		}
		Object.extend(this.options, arguments[2] || {} );

		switch(type) {
			case "jobpost" :
				var displayText = 'site(s)';
				var cartTitle = 'Posting cart';
				break;
			case "resume" :
				var displayText = 'resume(s)';
				var cartTitle = 'Resume cart';
				break;
		}

		urlvars = '';
		if($('jobpostcart_postvals') && $('jobpostcart_postvals').type)
			urlvars += '&type=' + $('jobpostcart_postvals').type.value;

		loading.setMessage('Refreshing selected ' + displayText);
		if(!loading.visible) { loading.show(); }

		new Ajax.Request("/network/content/" + type + "cart.cfm?site_id=" + site + urlvars, {
			method: 'post',
			successFunc: this.options.onSuccess,
			failureFunc: this.options.onFailure,
			theType: type,
			onSuccess: function(transport, json, opt) {
				if(document.getElementById("text_box"))
					document.getElementById("text_box").value = transport.responseText;

				if(transport.responseText.match(/^login$/i)) {
					loginRequest("cartRefresh('" + opt.theType + "', " + site + ");");
				} else if(transport.responseText.match(/^timeout$/i)) {
					loading.hide();
					timeoutAlert(true);
					opt.failureFunc.call();
				} else {
					/* I'm not sure how to handle this now. The success function should handle
					 * the pre-existing message that is displayed at this moment. If we hide
					 * it right now, the success message will re-display immediately after and
					 * the overlay will flash off and on, which is very unattractive. 
					 *
					 * For the time being, I will assume that the success function will handle
					 * the message appropriately. */
					//loading.hide();
					var replaceCart = new RegExp('<div id="?jt_' + opt.theType + 'cart"?[^\>]*>([\\s\\S]+)</div>', "i");
					$("jt_" + opt.theType + "cart").innerHTML = transport.responseText.replace(replaceCart, "$1");

					// Loop through all .jt_<the type>cart_command elements instead of finding only one.
					$A($$(".jt_" + opt.theType + "cart_command_text")).each(function(e) {
						e.innerHTML = cartTitle + ((!$("jt_" + opt.theType + "cart_products_hidden").innerHTML) ? ' (0 ' + displayText + ')' : ' (' + $("jt_" + opt.theType + "cart_products_hidden").innerHTML + ' ' + displayText + ')');
					});

					opt.successFunc.call();
				}
			}
		});
	}
}

function moveCart(type,elm) {
	if(typeof(type) != "string") {
		type = 'jobpost';
	}
	var size = windowSize();
	if($(elm)) {
		// Move the cart to be relative to where this element is located.
		/*
		var pos = {
			top: Position.page(elm)[1],
			left: Position.page(elm)[0]
		};
		*/
		var pos = {
			top: Position.realOffset(elm)[1] + Position.page(elm)[1],
			left: Position.realOffset(elm)[0] + Position.page(elm)[0]
		}

		$("jt_" + type + "cart").style.top = pos.top + 10 + "px";
		$("jt_" + type + "cart").style.left = (pos.left < size.width / 2) ? pos.left + "px" : pos.left + $(elm).getWidth() - $("jt_" + type + "cart").getWidth() + "px";
	} else {
		// Move the cart to be conspicuously visible within the scrolled area of the window.
		$('jt_' + type + 'cart').style.top = getScrollOffset().top + 200 + 'px';
		$('jt_' + type + 'cart').style.left = ( ( size.width - $('jt_' + type + 'cart').getWidth() ) / 2 ) + 'px';
	}
}

function cartShow(type, show) {
	if(!show) {
		$('jt_jobpostcart_hide_link').hide();
		new Effect.DrawerDown('jt_' + type + 'cart', { scaleTo: cartSmallHeightPct+1, duration: 0.5, restoreAfterFinish: false, queue: 'end' } );
		new Effect.Invoke( { invoke: function() {
			$('jt_' + type + 'cart').setStyle({ height: '21px' });
		}, queue: 'end' } );
	} else {
		new Effect.DrawerUp('jt_' + type + 'cart', { duration: 0.5, scaleFrom: cartSmallHeightPct, scaleMode: { originalHeight: cartOrigDims.height + 5, originalWidth: cartOrigDims.width }, restoreAfterFinish: false } );
		$('jt_jobpostcart_hide_link').show();
	}

	return false;
}

function getScrollOffset() {
	var x,y;
	if (self.pageYOffset) // all except Explorer
	{
		x = self.pageXOffset;
		y = self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
		// Explorer 6 Strict
	{
		x = document.documentElement.scrollLeft;
		y = document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		x = document.body.scrollLeft;
		y = document.body.scrollTop;
	}
	return { left: x, top: y };
}


function viewCartResume(resume, elm) {
	if(resume) {
		elm = idFix(elm);
		waitingMessage.setMessage("loading_resume", "Loading resume...");

		requestPage("/network/content/resumecart_resume.cfm", "id=" + resume, function(requestText) {
			if(document.getElementById("text_box"))
				document.getElementById("text_box").value = requestText;

			if(requestText.match(/^login$/i))
				loginRequest("viewCartResume('" + resume + "', '" + getElmId(elm) + "');");
			else if(requestText.match(/^timeout$/i)) {
				waitingMessage.remove();
				timeoutAlert(true);
			}
			else {
				waitingMessage.remove();
				var pos = getPos(elm);
				newAlert("jt_resumecart_resume", requestText, pos.top + 5, 15, pos.left - 15, null, "jt_resumecart");
			}
		});
	}
	else
		newAlert("jt_resumecart_resume");

	return false;
}

function showSites(category, val, parent, link) {
	if(link) {
		var urlvars = window.location.search.replace(/(&?type=)[^&]+/i, "");
		urlvars = '?' + urlvars.replace(/\?/, "");
		urlvars = urlvars.replace(/(&?val=)[^&]+/i, "");
		urlvars = urlvars.replace(/(&?parent=)[^&]+/i, "");
		if(urlvars.length > 1) {
			urlvars += "&type=" + category + ((val) ? "&val=" + val : "") + ((parent) ? "&parent=" + parent : "");
		} else {
			urlvars += "type=" + category + ((val) ? "&val=" + val : "") + ((parent) ? "&parent=" + parent : "");
		}
		window.location = window.location.pathname + urlvars;
	}
	else {
		if(val == null || !val) {
			document.getElementById("jt_sites").removeChild(document.getElementById("jt_sites_sitelist"));
			document.getElementById("jt_sites_" + category).style.display = "";

			if(document.getElementById("jt_sites_popup")) {
				document.getElementById("jt_sites_popup_shadow").style.height = document.getElementById("jt_sites_popup").offsetHeight;
				document.getElementById("jt_sites_popup_shadow").style.width = document.getElementById("jt_sites_popup").offsetWidth;
				document.getElementById("jt_sites_popup_shim").style.height = document.getElementById("jt_sites_popup").offsetHeight;
				document.getElementById("jt_sites_popup_shim").style.width = document.getElementById("jt_sites_popup").offsetWidth;
			}
		}
		else {
			waitingMessage.setMessage("loading_category", "Loading job boards..");

			requestPage("/network/content/sites.cfm", "type=" + category + "&val=" + val + ((parent) ? "&parent=" + parent : ""), function(requestText) {
				waitingMessage.remove();
				
				if(requestText.match(/^timeout$/i)) {
					timeoutAlert(true);
				}
				else {
					var elm = document.createElement("div");
					elm.id = "jt_sites_sitelist";
					elm.innerHTML = requestText;

					if(document.getElementById("jt_sites_sitelist"))
						document.getElementById("jt_sites").removeChild(document.getElementById("jt_sites_sitelist"));
					document.getElementById("jt_sites_" + category).style.display = "none";
					document.getElementById("jt_sites").appendChild(elm);

					if(document.getElementById("jt_sites_popup")) {
						document.getElementById("jt_sites_popup_shadow").style.height = document.getElementById("jt_sites_popup").offsetHeight;
						document.getElementById("jt_sites_popup_shadow").style.width = document.getElementById("jt_sites_popup").offsetWidth;
						document.getElementById("jt_sites_popup_shim").style.height = document.getElementById("jt_sites_popup").offsetHeight;
						document.getElementById("jt_sites_popup_shim").style.width = document.getElementById("jt_sites_popup").offsetWidth;
					}
				}
			});
		}
	}

	return false;
}

function showSiteCategory(category, link) {
	if(link) {
		return true;
	}
	else {
		var elm = document.getElementById("jt_sites_tabs").getElementsByTagName("li");
		for(var i = 0; i < elm.length; i++) {
			if((category == "industry" && i == 0) || (category == "geography" && i == 1) || (category == "diversity" && i == 2))
				elm[i].className = "jt_tabs_selected";
			else
				elm[i].className = "";
		}

		document.getElementById("jt_sites_industry").style.display = (category == "industry") ? "" : "none";
		document.getElementById("jt_sites_geography").style.display = (category == "geography") ? "" : "none";
		document.getElementById("jt_sites_diversity").style.display = (category == "diversity") ? "" : "none";

		if(document.getElementById("jt_sites_sitelist"))
			document.getElementById("jt_sites").removeChild(document.getElementById("jt_sites_sitelist"));
		
		if(document.getElementById("jt_sites_popup")) {
			document.getElementById("jt_sites_popup_shadow").style.height = document.getElementById("jt_sites_popup").offsetHeight;
			document.getElementById("jt_sites_popup_shadow").style.width = document.getElementById("jt_sites_popup").offsetWidth;
			document.getElementById("jt_sites_popup_shim").style.height = document.getElementById("jt_sites_popup").offsetHeight;
			document.getElementById("jt_sites_popup_shim").style.width = document.getElementById("jt_sites_popup").offsetWidth;
		}

		return false;
	}
}

function showCartAddBoards(show, elm, type) {
	if(show) {
		if(elm) {
			elm = idFix(elm);
			var pos1 = getPos(elm);
			var pos2 = getPos(document.getElementsByTagName("h2")[0]);
			var size = windowSize();
		}

		waitingMessage.setMessage("site_load", "Loading job board list...");
		requestPage("/network/functions/sites.cfm?type=" + ((type) ? type : ''), "pop=true", function(requestText) {
			if(requestText.match(/^login$/i))
				loginRequest("showCartAddBoards(" + show + ", '" + getElmId(elm) + "');");
			else if(requestText.match(/^timeout$/i)) {
				waitingMessage.remove();
				timeoutAlert(true);
			}
			else {
				if(document.getElementById("jt_sites_popup")) {
					document.getElementById("jt_sites_popup").innerHTML = requestText;
				}
				else {
					newAlert("jt_sites_popup", requestText, pos2.top + 20, pos1.left + 10, size.width - pos1.left - 45);
				}
				waitingMessage.remove();
			}
		});
	}
	else {
		newAlert("jt_sites_popup");
	}

	return false;
}

function clearLocs() {
	var form = document.getElementById("jt_post");

	var items = new Array(new Object(), new Object(), new Object(), new Object(), new Object());
	items[0].id = "134";
	items[1].id = "135";
	items[2].id = "136";
	items[3].id = "137";
	items[4].id = "138";

	for(var i = 0; i < items.length; i++) {
		var elm = eval("form.q" + items[i].id);

		if(elm) {
			if(elm.type == "text")
				elm.value = "";
			else if(elm.type == "select-one")
				elm.selectedIndex = 0;
		}
	}

	return false;
}

function addLocation(city, state, state2, region, country, refresh) {
	var form = document.getElementById("jt_post");

	var items = new Array(new Object(), new Object(), new Object(), new Object(), new Object());
	items[0].id = "134";
	items[0].value = "";
	items[1].id = "135";
	items[1].value = "";
	items[2].id = "136";
	items[2].value = "";
	items[3].id = "137";
	items[3].value = "";
	items[4].id = "138";
	items[4].value = "";

	var loc = "";

	if(!city && !state && !state2 && !region && !country && !refresh) {
		for(var i = 0; i < items.length; i++) {
			var elm = eval("form.q" + items[i].id);

			if(elm) {
				if(elm.type == "text") {
					items[i].value = elm.value;
					elm.value = "";
				}
				else if(elm.type == "select-one") {
					items[i].value = (elm.options.selectedIndex) ? elm.options[elm.options.selectedIndex].text + "__" + elm.options[elm.options.selectedIndex].value : "";
					elm.selectedIndex = 0;
				}
			}

			if(i == 2 && items[i].value.length)
				items[1].value = "";
		}

		for(var i = 0; i < items.length; i++)
			loc += ((i > 0 ) ? "|" : "") + "'" + items[i].value + "'";
	}
	else if(!refresh) {
		loc = "'" + city + "'|'" + state + "'|'" + state2 + "'|'" + region + "'|'" + country + "'";
	}

	if(loc != "''|''|''|''|''" || refresh) {
		if(!refresh)
			form.locations.value += ((form.locations.value.length) ? "~" : "") + loc;

		var locs = form.locations.value.split("~");
		var loclist = 
				'<table border="0" cellspacing="0" cellpadding="0"><tr>'
			+ (eval("form.q" + items[0].id) ? "<th style='width:40%;'>City</th>" : "")
			+ (eval("form.q" + items[1].id) || eval("form.q" + items[2].id) ? "<th style='width:30%;'>State</th>" : "")
			+ (eval("form.q" + items[3].id) ? "<th style='width:30%;'>Region</th>" : "")
			+ (eval("form.q" + items[4].id) ? "<th style='width:30%;'>Country</th>" : "")
			+ '</tr>';

		for(var i = 0; i < locs.length; i++) {
			var this_loc = locs[i].split("|");
			loclist += '<tr class="jt_row' + (i % 2 + 1) + '">'

			for(var x = 0; x < items.length; x++) {
				var showblank = false;
				var loc = (this_loc.length >= x) ? this_loc[x].replace(/^'(.*)'$/, "$1") : "";
				if(loc == "__") loc = "";

				if(x == 1 && eval("form.q" + items[x].id) && !loc.length) {
					if(!eval("form.q" + items[2].id) || this_loc.length < 2 || !this_loc[2].replace(/^'(.*)'$/, "$1").length)
						showblank = true;
				}
				else if(x == 2 && eval("form.q" + items[x].id) && !loc.length) {
					if(!eval("form.q" + items[1].id) || this_loc.length < 1 || !this_loc[1].replace(/^'(.*)'$/, "$1").length)
						showblank = true;
				}
				else if(x != 1 && x != 2 && eval("form.q" + items[x].id) && !loc.length)
					showblank = true;						

				if(eval("form.q" + items[x].id) && loc.length)
					loclist += '<td>' + loc.split("__")[0] + '</td>';
				else if(showblank)
					loclist += '<td>&nbsp;</td>';
			}

			loclist += '</tr>';
		}

		loclist += "</table>";
		document.getElementById("jt_post_locations").innerHTML = loclist;
	}
	else {
		alert("The following error(s) have occurred:\n - You attempted to add a location but did not enter the location's information.");
	}

	return false;
}

function locAutoSelect(type, id) {
	var form = document.getElementById("jt_post");

	switch(type) {
		case "country" :
			for(var i = 0; i < form.q138.options.length; i++) {
				if((id == 6 || id == 9 || id == 27 || id == 37 || id == 42 || id == 45 || id == 46 || id == 49 || id == 52 || id == 54 || id == 56 || id == 69) && form.q138.options[i].value == 2) {
					form.q138.selectedIndex = i;
					break;
				}
				else if(id && id != 70 && form.q138.options[i].value == 1) {
					form.q138.selectedIndex = i;
					break;
				}						
			}
			break;
		
		case "state_other" :
			if(id && id != 70)
				form.q136.value = "";
			else if(trim(form.q136.value).length) {
				for(var i = 0; i < form.q135.options.length; i++) {
					if(form.q135.options[i].value == 70) {
						form.q135.selectedIndex = i;
						break;
					}			
				}
			}

			break;
	}

	return false;
}

/*
function addRecipient(form, clear, id) {
	if(clear) {
		form.recipient_first_name.value = "";
		form.recipient_last_name.value = "";
		form.recipient_email.value = "";
	}
	else if(id) {
		var form = document.getElementById("jt_post");
		for(var i = 0; i < form.recipients.length; i++) {
			if(form.recipients[i].value == id) {
				form.recipients[i].checked = true;
				form.recipients[i].parentNode.parentNode.className = "jt_selected";
				break;
			}
		}
	}
	else {
		form = idFix(form);
		var error = "";

		if(!trim(form.recipient_first_name.value).length)
			error += " - Please enter the new recipient's first name.\n";
		if(!trim(form.recipient_last_name.value).length)
			error += " - Please enter the new recipient's last name.\n";
		if(!/^([\w\d\.\-_\+'])+@(([\w\d\-_\+'])+\.)+([\w\d]{2,4})\s*$/.test(form.recipient_email.value))
			error += " - Please enter the new recipient's email address in the form abc@xyz.com\n";
		
		if(error)
			alert("The following error(s) have occurred:\n" + error);
		else {
			waitingMessage.setMessage("adding_recipient", "Adding recipient...");
			requestPage("/network/functions/addrecipient.cfm", "firstname=" + form.recipient_first_name.value + "&lastname=" + form.recipient_last_name.value + "&email=" + form.recipient_email.value, function(requestText) {
				if(requestText.match(/^login$/i))
					loginRequest("addRecipient('" + getElmId(form) + "', " + clear + ");");
				else if(requestText.match(/^timeout$/i)) {
					waitingMessage.remove();
					timeoutAlert(true);
				}
				else if(!/^\d+$/.test(requestText))
					alert("The following error(s) have occurred:\n" + requestText);
				else {
					elm = document.getElementById("jt_post_recipients");

					for(var i = 0; i < elm.childNodes.length; i++) {
						if(/^table$/i.test(elm.childNodes[i].tagName))
							elm = elm.childNodes[i];
					}

					var row = document.createElement("tr");
					row.className = "jt_selected";
					var cell1 = document.createElement("td");
					cell1.className = "jt_item_recipients_checkbox";
					cell1.innerHTML = '<input type="checkbox" name="recipients" value="' + requestText + '" onclick="recipientCheck(this);" checked>';
					var cell2 = document.createElement("td");
					cell2.innerHTML = '<div class="jt_item_recipients_name">' + form.recipient_first_name.value + ' ' + form.recipient_last_name.value + '</div><div class="jt_item_recipients_email">' + form.recipient_email.value + '</div>';
					
					row.appendChild(cell1);
					row.appendChild(cell2);
					elm.tBodies[0].appendChild(row);

					addRecipient(form, true);

					waitingMessage.remove();
				}
			});
		}
	}

	return false;	
}

function recipientCheck(elm) {
	elm.parentNode.parentNode.className = (elm.checked) ? "jt_selected" : "";
}

function showRecipients(show) {
	document.getElementById("jt_item_recipients").style.display = (show) ? "" : "none";

	return false;
}
*/

/*
function postJob(form) {
	form = idFix(form);

	if(form.update)
		waitingMessage.setMessage("posting_job", "Saving changes to job...");
	else
		waitingMessage.setMessage("posting_job", "Creating job posting...");

	requestPage("/network/functions/postjob.cfm", formAsString(form), function(requestText) {
		if(requestText.match(/^login$/i))
			loginRequest("postJob('" + getElmId(form) + "');");
		else if(requestText.match(/^timeout$/i)) {
			waitingMessage.remove();
			timeoutAlert(true);
		}
		else if(!requestText.match(/^\d+$/i)) {
			if(document.getElementById("text_box"))
				document.getElementById("text_box").value = requestText;
			waitingMessage.remove();
			errorAlert(requestText)
		}
		else {
			if(form.update || requestText == "0") {
				requestPage("/network/functions/removesite.cfm", "clear=true", function(requestText) {
					waitingMessage.success("Your job has been posted.", 3000, "window.location='/network/jobs/index.cfm';");
				});
			}
			else
				window.location = '/network/pay/confirm.cfm?order=' + requestText;
		}
	});

	return false;
}
*/

function networkPreviewJob(form) {
	var site_id = arguments[1] || 1;
	if(('string' == typeof form) && form == 'post') {
		// Slip in an element called "post," which the receiving page will look for
		// (normally it would be the submit button itself).
		new Insertion.Top('jt_post', '<input type="hidden" name="post" value="Post Job" />');

		$('jt_post').submit();
		return false;
	}

	if(form) {
		form = idFix(form);

		/*
		waitingMessage.setMessage("preview_job", "Constructing preview...");
		*/

		var win = windowSize();
		winWidth = (win.width - 200);
		winHeight = (win.height - 200);

		aframe = new Aframe('/network/functions/post_preview.cfm?site_id='+site_id, { method: 'post', parameters: Form.serialize(form) }, { margin: 100 });
		//TB_show2('Job Preview', '/network/functions/post_preview.cfm?width=' + winWidth + '&height=' + winHeight, null, null, form);

		/*
		requestPage("/network/functions/post_preview.cfm", formAsString(form), function(requestText) {
			if(requestText.match(/^timeout$/i)) {
				waitingMessage.remove();
				timeoutAlert(true);
			}
			else {
				if(document.getElementById("text_box"))
					document.getElementById("text_box").value = requestText;

				var size = windowSize();
				var pos = getPos(document.getElementsByTagName("h2")[0]);

				newAlert("jt_post_preview", requestText, pos.top + 20, pos.left + 10, size.width - pos.left - 50);
				window.location.hash = "#";
				waitingMessage.remove();
			}
		});
		*/
	} else {
		/*newAlert("jt_post_preview");*/
		TB_remove();
	}

	return false;
}

function postJobSelectMoreSites() {
	var elm = document.createElement("input");
	elm.name = "post_network_moresites";
	elm.value = "1";
	elm.type = "hidden";

	document.getElementById("jt_post").appendChild(elm);
	document.getElementById("jt_post").submit();
}

function confirmOrder(order, type, form) {
	form = idFix(form);

	waitingMessage.setMessage("confirm_order", "Processing your order...");
	
	requestPage("/network/functions/process_order.cfm", "order=" + order + "&" + formAsString(form), function(requestText) {
		if(document.getElementById("text_box"))
			document.getElementById("text_box").value = requestText;

		if(requestText.match(/^login$/i))
			loginRequest("confirmOrder('" + order + "', '" + type + "'," + getElmId(form) + ");");
		else if(requestText.match(/^timeout$/i)) {
			waitingMessage.remove();
			timeoutAlert(true);
		}
		else if(!requestText.match(/^true$/ig)) {
			waitingMessage.remove();
			errorAlert(requestText);
		}
		else {
			if(type == "resume") {
				requestPage("/network/functions/removeresume.cfm", "clear=true", function(requestText) {
					window.location = "/network/pay/done.cfm";
				}, true);
			}
			else if(type == "post") {
				requestPage("/network/functions/removesite.cfm", "clear=true", function(requestText) {
					window.location = "/network/pay/done.cfm";
				}, true);
			}
			else {
				window.location = "/network/pay/done.cfm";
			}
		}		
	}, true);

	return false;
}

function tabMessage(message) {
	waitingMessage.setMessage("loading_tab", message);
}

/*
function deletePostAbandoned(id, name) {
	if(confirm("Permanently delete job " + name + "?")) {
		if(document.getElementById("jt_post_abandoned_" + id)) {
			waitingMessage.setMessage("remove_abandoned", "Removing order...");

			requestPage("/network/functions/remove_abandoned.cfm", "id=" + id, function(requestText) {
				if(document.getElementById("text_box"))
					document.getElementById("text_box").value = requestText;

				if(requestText.match(/^login$/i))
					loginRequest("deletePostAbandoned('" + id + "', '" + name + "');");
				else if(requestText.match(/^timeout$/i)) {
					waitingMessage.remove();
					timeoutAlert(true);
				}
				else {
					var parent = document.getElementById("jt_post_abandoned_" + id).parentNode;
					parent.removeChild(document.getElementById("jt_post_abandoned_" + id));

					var jobs = parseInt(document.getElementById("jt_post_abandoned_count").innerHTML) - 1;
					document.getElementById("jt_post_abandoned_count").innerHTML = jobs + " job" + ((jobs == 1) ? "" : "s");

					var show = 0;
					for(var i = 0; i < parent.childNodes.length; i++) {
						if(parent.childNodes[i].tagName) {
							parent.childNodes[i].className = "jt_item" + (((show + 1) % 2) + 1);
							show++;
						}
					}

					if(!show) {
						waitingMessage.setMessage("loading_sites", "Loading job board selections...");
						window.location = '/network/jobs/sites.cfm?a=0';
					}
					else
						waitingMessage.remove();
				}
			});
		}
	}

	return false;
}
*/

function emailProfile(elm, form) {
	if(form) {
		form = idFix(form);

		waitingMessage.setMessage("email_profile", "Sending profile...");
		requestPage("/network/functions/email_profile.cfm", formAsString(form), function(requestText) {
			if(document.getElementById("text_box"))
				document.getElementById("text_box").value = requestText;

			if(requestText.match(/^login$/i))
				loginRequest("emailProfile(null, '" + getElmId(form) + "');");
			else if(requestText.match(/^timeout$/i)) {
				waitingMessage.remove();
				timeoutAlert(true);
			}
			else if(!requestText.match(/^true+$/i)) {
				waitingMessage.remove();
				errorAlert(requestText)
			}
			else
				waitingMessage.success("Resume has been forwarded", 3000, "emailProfile()");
		});
	}
	else if(elm) {
		var pos = getPos(elm);
		if(document.getElementById("jt_bank_profile_email"))
			newAlert("jt_bank_profile_email");
		newAlert("jt_bank_profile_email", document.getElementById("jt_bank_profile_email_hold").innerHTML, pos.top + 10, pos.left - 290, null, null, "jt_bank_profile", null, 15);
	}
	else
		newAlert("jt_bank_profile_email");


	return false;
}


function emailApplicant(elm, form) {
	if(form) {
		form = idFix(form);

		waitingMessage.setMessage("email_applicant", "Sending applicant...");
		requestPage("/network/functions/email_applicant.cfm", formAsString(form), function(requestText) {
			if(document.getElementById("text_box"))
				document.getElementById("text_box").value = requestText;

			if(requestText.match(/^login$/i))
				loginRequest("emailApplicant(null, '" + getElmId(form) + "');");
			else if(requestText.match(/^timeout$/i)) {
				waitingMessage.remove();
				timeoutAlert(true);
			}
			else if(!requestText.match(/^true+$/i)) {
				waitingMessage.remove();
				errorAlert(requestText)
			}
			else
				waitingMessage.success("Applicant has been forwarded", 3000, "emailApplicant()");
		});
	}
	else if(elm) {
		var pos = getPos(elm);
		if(document.getElementById("jt_applicant_email"))
			newAlert("jt_applicant_email");
		newAlert("jt_applicant_email", document.getElementById("jt_applicant_email_hold").innerHTML, pos.top + 10, pos.left + 10, null, null, "jt_applicant");
	}
	else
		newAlert("jt_applicant_email");


	return false;
}


function emailPassword(form) {
	if(form.test_cookies && form.test_cookies.value == "1") {
		return true;
	} else {
		var siteId = arguments[1] || 0;

		var formData = Form.serialize(form, true);
		if(!formData.email.length || !formData.last_name.length) {
			alert('You must supply both your e-mail address as well as your last name.');
			return false;
		}
		var parms = {
			email: formData.email,
			last_name: formData.last_name
		}

		loading.setMessage('Sending you your password...');
		loading.show();

		new Ajax.Request('/network/functions/public/email_password.cfm?site_id=' + ((siteId) ? siteId : ''), {
			method: 'post',
			parameters: parms,
			onSuccess: function(transport,json,opt) {
				var resp = transport.responseText || '';
				resp = resp.replace(/^\s+|\s+$/g, '');
				if(resp.match(/^timeout$/i)) {
					message.setMessage('The e-mail request timed out.');
					message.setDelay(1500);
					message.show();
				} else if(!resp.match(/^false$/i)) {
					$('jt_login_trouble_password').innerHTML = resp;
					message.setMessage('Your password has been e-mailed to you.');
					message.setDelay(1500);
					message.show();
				} else if(resp.match(/^false$/i)) {
					message.setMessage('The e-mail request failed.');
					message.setDelay(1500);
					message.show();
				}
			},
			onFailure: function() {
				message.setMessage('Sending your password failed.');
				message.setDelay(1500);
				message.show();
			}
		});

		/*
		waitingMessage.setMessage("email_password", "Sending you your password...");
		requestPage("/network/functions/public/email_password.cfm", formAsString(form), function(requestText) {
			if(document.getElementById("text_box"))
				document.getElementById("text_box").value = requestText;
			
			waitingMessage.remove();

			if(requestText.match(/^timeout$/i)) {
				waitingMessage.remove();
				timeoutAlert(true);
			}
			else if(!requestText.match(/^true+$/i))
				errorAlert(requestText)
			else
		});
		*/
		return false;
	}
}


function cookieTest(form) {
	form.test_cookies.value = 1;
	form.submit();

	return false;
}


function jobAction(action, id) {
	switch(action) {
		case "start" :
			var showtext = "Starting";
			var statustext = "Currently running";
			var actiontext = '[<a href="#" onclick="return jobAction(' + "'stop', '" + id + "');" + '">stop</a>]';
			break;
		case "stop" :
			var showtext = "Stopping";
			var statustext = "Stopped";
			var actiontext = '[<a href="#" onclick="return jobAction(' + "'start', '" + id + "');" + '">start</a>]';
			break;
	}

	waitingMessage.setMessage("job_action", showtext + " job...");
	requestPage("/network/functions/job_action.cfm", "action=" + action + "&id=" + id, function(requestText) {
		waitingMessage.remove();

		if(requestText.match(/^login$/i))
			loginRequest("jobAction('" + action + "','" + id + "')");
		else if(requestText.match(/^timeout$/i)) {
			waitingMessage.remove();
			timeoutAlert(true);
		}
		else if(!requestText.match(/^true$/i)) {
			errorAlert(requestText);

			if(document.getElementById("text_box"))
				document.getElementById("text_box").value = requestText;
		}
		else {
			waitingMessage.setMessage("reloading_jobs", "Reloading your jobs...");
			requestPage("/network/content/job_list.cfm", null, function(requestText) {
				if(document.getElementById("text_box"))
					document.getElementById("text_box").value = requestText;

				if(requestText.match(/^timeout$/i)) {
					waitingMessage.remove();
					timeoutAlert(true);
				}
				else {
					for(var i = document.getElementById("jt_jobs_content").childNodes.length - 1; i >= 0; i--)
						document.getElementById("jt_jobs_content").removeChild(document.getElementById("jt_jobs_content").childNodes[i]);
					document.getElementById("jt_jobs_content").innerHTML = requestText;
					waitingMessage.remove();
				}
			});
		}
	});

	return false;
}

function loginRequest(endFunc, form) {
	if(form) {
		waitingMessage.setMessage("logging_in", "Processing login...");
		requestPage("/network/functions/public/login.cfm", "pop=1&" + formAsString(form), function(requestText) {
			waitingMessage.remove();
			
			if(requestText.match(/^timeout$/i)) {
				waitingMessage.remove();
				timeoutAlert(true);
			}
			else if(!requestText.match(/^true$/i))
				errorAlert(requestText)
			else {
				loginRequest();
				eval(endFunc);
			}
		});
	}
	else if(!document.getElementById("jt_login_popup")) {
		waitingMessage.remove();
		var size = windowSize();
		newAlert("jt_login_popup_box", '<form method="post" action="#" id="jt_login_popup" onsubmit="return loginRequest(\'' + endFunc.replace(/'/g, "\\'") + '\', this);"><div class="jt_title">Please Log In</div><div class="jt_subtitle">As a safety measure, you were automatically logged out due to inactivity. Please log in again below; none of your data will be lost.</div><table border="0" cellspacing="0" cellpadding="0"><tr><th>Email:</th><td><input type="text" class="jt_text" name="j_username"></td></tr><tr><th>Password:</th><td><input type="password" class="jt_text" name="j_password"></td></tr></table><div class="jt_links"><input type="submit" class="jt_button" name="login" value="Log In"></div></form>', (size.height / 2) - 75, (size.width / 2) - 125, 250, null, null, true);
		document.getElementById("jt_login_popup").j_username.focus();
	}
	else
		newAlert("jt_login_popup_box");

	return false;
}


function timeoutAlert(show) {
	if(show) {
		var size = windowSize();

		newAlert("jt_timeout_popup", 'The server did not respond to your request in a timely fashion. This delay can be the result of a heavily loaded server, an error with your web browser, or a problem with the network itself.<br><br>Please try your request once more. If you continue to have difficulty, please contact your Account Rep using the information on the right of the screen.<div class="jt_links"><input type="button" class="jt_button" name="okay" value="Okay" onclick="return timeoutAlert(false);"></div>', (size.height / 2) - 75, (size.width / 2) - 225, 450, null, null, true);
	}
	else
		newAlert("jt_timeout_popup");

	return false;
}


function idFix(form) {
	return (form.tagName) ? form : document.getElementById(form);
}

function getElmId(form) {
	if(form.id.length)
		return form.id;
	else {
		form.id = ++formCounter;
		return form.id;
	}
}


function bankSearch(show, elm, form) {
	if(form) {
		//waitingMessage.setMessage("searching_bank", "Searching resume bank...");
		window.location = "/network/candidates/bank.cfm?" + formAsString(form, "keywords,exclude,state,id,site_id");
	}
	else if(show && elm) {
		var pos = getPos(elm);
		newAlert("jt_bank_search", document.getElementById("jt_bank_search_hold").innerHTML, pos.top + 15, ((pos.left - 340 < 0) ? 0 : pos.left - 340), null, null, "jt_bank");
	}
	else if(show) {
		document.getElementById("jt_bank_search").innerHTML = document.getElementById("jt_bank_search_hold").innerHTML;
	}
	else {
		newAlert("jt_bank_search");
	}

	return false;
}


function printPage() {
	window.print();
	window.close();
}

/*
function loadJobTemplate(template) {
	if(confirm("Are you sure you wish to replace the currently entered job with a template?")) {
		waitingMessage.setMessage("loading_template", "Loading your template...");

		requestPage("/network/functions/jobtemplate_load.cfm", "template=" + template, function(requestText) {
			waitingMessage.remove();

			if(document.getElementById("text_box"))
				document.getElementById("text_box").value = requestText;
		
			if(requestText.match(/^timeout$/i)) {
				waitingMessage.remove();
				timeoutAlert(true);
			}
			else {
				eval(requestText);

				if(!requestText.match(/^errorAlert/)) {
					var form = document.getElementById("jt_post");

					for(var i = 0; i < form.elements.length; i++) {
						if(form.elements[i].name != "templates") {
							switch((!form.elements[i].type && (form.elements[i][0].type == "checkbox" || form.elements[i][0].type == "radio")) ? form.elements[i][0].type : form.elements[i].type) {
								case "text" :
								case "textarea" :
									form.elements[i].value = "";
									break;

								case "select-one" :
									form.elements[i].selectedIndex = 0;
									break;
								
								case "select-multiple" :
									for(var x = 0; x < form.elements[i].options.length; x++)
										form.elements[i].options[x].selected = false;
									form.elements[i].selectedIndex = 0;
									break;
								
								case "checkbox" :
								case "radio" :
									form.elements[i].checked = false;
							}
						}
					}

					for(var i = 0; i < form.recipients.length; i++)
						form.recipients[i].parentNode.parentNode.className = "";

					var locs = new Object();

					for(var i = 0; i < items.length; i++) {
						if(eval("form.q" + items[i].id)) {
							var elm = eval("form.q" + items[i].id);

							if(items[i].group.length) {
								if(!locs[items[i].group])
									locs[items[i].group] = new Object();
								locs[items[i].group][items[i].id] = items[i].val;
							}
							else {
								switch((!elm.type && (elm[0].type == "checkbox" || elm[0].type == "radio")) ? elm[0].type : elm.type) {
									case "text" :
									case "textarea" :
										elm.value = items[i].val;
										break;

									case "select-one" :
										for(var x = 0; x < elm.options.length; x++) {
											if(elm.options[x].value == items[i].val) {
												elm.options[x].selected = true;
												elm.selectedIndex = x;
												break;
											}
										}
										break;
									
									case "select-multiple" :
										for(var x = 0; x < elm.options.length; x++) {
											if(elm.options[x].value == items[i].val) {
												elm.options[x].selected = true;
												break;
											}
										}
										break;
									
									case "checkbox" :
									case "radio" :
										for(var x = 0; x < elm.length; x++) {
											if(elm[x].value == items[i].val) {
												elm[x].checked = true;
												break;
											}
										}
										break;
								}
							}
						}
						else if(items[i].id == 120) {
							addRecipient(null, null, items[i].val);
						}
					}

					form.locations.value = "";
					clearLocs();
					for(var x in locs) {
						addLocation(((locs[x][134]) ? locs[x][134] : ''), ((locs[x][135]) ? locs[x][135] : ''), ((locs[x][136]) ? locs[x][136] : ''), ((locs[x][137]) ? locs[x][137] : ''), ((locs[x][138]) ? locs[x][138] : ''));
					}

					if(form.q119)
						showRecipients(((form.q119[1].checked) ? false : true));
				}
			}
		});
	}

	return false;
}
*/

function removeOrderItem(order, item, elm) {
	if(confirm("Are you sure you wish to remove this item from your order?")) {
		elm = idFix(elm);
		waitingMessage.setMessage("remove_item", "Removing item from your order...");

		requestPage("/network/functions/order_remove_item.cfm", "order=" + order + "&item=" + item, function(requestText) {
			if(document.getElementById("text_box"))
				document.getElementById("text_box").value = requestText;
			
			if(requestText.match(/^login$/i)) {
				waitingMessage.remove();
				loginRequest("removeOrderItem('" + order + "','" + item + "','" + getElmId(elm) + "');");
			}
			else if(requestText.match(/^timeout$/i)) {
				waitingMessage.remove();
				timeoutAlert(true);
			}
			else if(!requestText.match(/^true$/ig)) {
				waitingMessage.remove();
				errorAlert(requestText);
			}
			else {
				requestPage("/network/content/pay_confirm_summary.cfm?order=" + order, null, function(requestText) {
					if(requestText.match(/^timeout$/i)) {
						waitingMessage.remove();
						timeoutAlert(true);
					}
					else {
						document.getElementById("jt_summary").innerHTML = requestText;
						waitingMessage.remove();
					}
				});


				/*
				var table = elm.parentNode.parentNode.parentNode;
				for(var i = 0; i < table.rows.length; i++) {
					if(table.rows[i] == elm.parentNode.parentNode) {
						table.rows[i].className = "jt_cancelled";
						if(table.rows[i + 1] && table.rows[i + 1].className == "jt_row2") {
							for(var x = 0; x < table.rows[i + 1].cells.length; x++)
								table.rows[i + 1].cells[x].className = "jt_cancelled";
						}

						for(var x = 0; x < table.rows[i].cells.length; x++) {
							if(table.rows[i].cells[x].className == "jt_cost") {
								if(table.rows[i].cells[x].innerHTML.match(/\$/)) {
									var cost = trim(table.rows[i].cells[x].innerHTML.replace(/[\$,]/g, ""));
									var total = trim(document.getElementById("jt_pay_confirm_total").innerHTML.replace(/[\$,]/g, ""));
									document.getElementById("jt_pay_confirm_total").innerHTML = dollarFormat(Number(total) - Number(cost));
								}
								else {
									var credits = parseInt(table.rows[i].cells[x].innerHTML);
									var total = parseInt(document.getElementById("jt_pay_confirm_total").innerHTML);
									document.getElementById("jt_pay_confirm_total").innerHTML = total - credits + " credit" + ((total - credits != 1) ? "s" : "");
								}
							}
						}

					}
				}
				elm.parentNode.innerHTML = "<a href='#' onclick=" + '"return activateOrderItem(' + "'" + order + "','" + item + "',this);" + '">re-activate</a>';
				*/
			}
		});
	}

	return false;
}


function activateOrderItem(order, item, elm) {
	elm = idFix(elm);
	waitingMessage.setMessage("activate_item", "Re-activating item...");

	requestPage("/network/functions/order_activate_item.cfm", "order=" + order + "&item=" + item, function(requestText) {
		if(document.getElementById("text_box"))
			document.getElementById("text_box").value = requestText;
		
		if(requestText.match(/^login$/i)) {
			waitingMessage.remove();
			loginRequest("activateOrderItem('" + order + "','" + item + "','" + getElmId(elm) + "');");
		}
		else if(requestText.match(/^timeout$/i)) {
			waitingMessage.remove();
			timeoutAlert(true);
		}
		else if(!requestText.match(/^true$/ig)) {
			waitingMessage.remove();
			errorAlert(requestText);
		}
		else {
			requestPage("/network/content/pay_confirm_summary.cfm?order=" + order, null, function(requestText) {
				document.getElementById("jt_summary").innerHTML = requestText;
				waitingMessage.remove();
				fixRightHeight();
			});
		}
	});

	return false;
}


function purchaseCredits(form) {
	form = idFix(form);

	waitingMessage.setMessage("buy_credits", "Processing your order...");

	requestPage("/network/functions/credits_buy.cfm", formAsString(form), function(requestText) {
		if(document.getElementById("text_box"))
			document.getElementById("text_box").value = requestText;

		if(requestText.match(/^login$/i))
			loginRequest("purchaseCredits('" + getElmId(form) + "');");
		else if(requestText.match(/^timeout$/i)) {
			waitingMessage.remove();
			timeoutAlert(true);
		}
		else if(!requestText.match(/^\d+$/i)) {
			waitingMessage.remove();
			errorAlert(requestText)
		}
		else {
			if(requestText == "0") {
				waitingMessage.success("Your order has been completed.", 3000, "window.location='/network/index.cfm';");
			}
			else
				window.location = '/network/pay/confirm.cfm?order=' + requestText;
		}
	});

	return false;
}


function estimateCreditCost(type, quantity) {
	quantity = quantity.replace(/,/g, "");

	if(type == "jobs") {
		if(quantity < 25)
			var cost = quantity * 50;
		else if(quantity < 50)
			var cost = quantity * 45;
		else if(quantity < 100)
			var cost = quantity * 40;
		else if(quantity < 250)
			var cost = quantity * 35;
		else if(quantity < 500)
			var cost = quantity * 30;
		else 
			var cost = quantity * 25;
	}
	else if(type == "resumes") {
		if(quantity < 20)
			var cost = quantity * 30;
		else if(quantity < 50)
			var cost = quantity * 25;
		else if(quantity < 150)
			var cost = quantity * 20;
		else if(quantity < 250)
			var cost = quantity * 15;
		else 
			var cost = quantity * 10;
	}

	document.getElementById(type + "_credit_cost").innerHTML = dollarFormat(cost);

	return false;
}

function submitContactRequest(form) {
	waitingMessage.setMessage("sending_contact", "Processing contact request...");

	requestPage("/network/functions/contact_request.cfm", formAsString(form), function(requestText) {
		document.getElementById("text_box").value = requestText;

		if(!requestText.match(/^\d+$/i)) {
			waitingMessage.remove();
			alert("The following error(s) have occurred:\n" + requestText.replace(/<li>/ig, " - ").replace(/<\/li>/ig, "\n"));
		}
		else if(requestText.match(/^timeout$/i)) {
			waitingMessage.remove();
			timeoutAlert(true);
		}
		else {
			if(requestText == "0") {
				requestPage("/network/functions/removeresume.cfm", "clear=true", function(requestText) {
					waitingMessage.success("Your request has been sent.", 3000, "window.location='/network/candidates/index.cfm';");
				});
			}
			else {
				waitingMessage.setMessage("loading_page", "Loading payment page...");
				window.location = '/network/pay/confirm.cfm?order=' + requestText;
			}
		}
	});

	return false;
}


function jobAction(action, id) {
	switch(action) {
		case "start" :
			var showtext = "Starting";
			var statustext = "Currently running";
			var actiontext = '[<a href="##" onclick="return jobAction(' + "'stop', '" + id + "');" + '">stop</a>]';
			break;
		case "stop" :
			var showtext = "Stopping";
			var statustext = "Stopped";
			var actiontext = '[<a href="##" onclick="return jobAction(' + "'start', '" + id + "');" + '">start</a>]';
			break;
	}

	waitingMessage.setMessage("job_action", showtext + " job...");
	requestPage("/network/functions/job_action.cfm", "action=" + action + "&id=" + id, function(requestText) {
		waitingMessage.remove();

		if(!requestText.match(/^true$/i))
			alert("The following error(s) have occurred:\n" + requestText.replace(/<li>/ig, " - ").replace(/<\/li>/ig, "\n"));
		else {
			waitingMessage.setMessage("reloading_jobs", "Reloading your jobs...");
			requestPage("/network/content/job_list.cfm", null, function(requestText) {
				for(var i = document.getElementById("jt_jobs_content").childNodes.length - 1; i >= 0; i--)
					document.getElementById("jt_jobs_content").removeChild(document.getElementById("jt_jobs_content").childNodes[i]);

				document.getElementById("jt_jobs_content").innerHTML = requestText;
				waitingMessage.remove();
			});
		}
	});

	return false;
}

function emailJob(elm, job, form) {
	if(form) {
		waitingMessage.setMessage("email_job", "Sending job...");

		requestPage("/network/functions/email_job.cfm", formAsString(form), function(requestText) {
			if(!requestText.match(/^true$/i)) {
				waitingMessage.remove();
				alert("The following error(s) have occurred:\n" + requestText.replace(/<li>/g, " - ").replace(/<\/li>/g, "\n"));
			}
			else {
				waitingMessage.success("Job has been sent.", 2000);
				emailJob();
			}
		});
	}
	else if(job) {
		var pos = getPos(elm);

		newAlert("jt_job_email", '<form method="post" action="" id="jt_job_email_form" onsubmit="return emailJob(null, null, this);"><table border="0" cellspacing="0" cellpadding="0"><tr><th>Email To:</th><td><input type="text" class="jt_text" name="email"></td></tr><tr><th>Additional<br>Message:</th><td><textarea name="message" class="jt_text"></textarea></td></tr><tr class="jt_links"><th>&nbsp;</th><td><input type="button" class="jt_button" name="cancel" value="Cancel" onclick="return emailJob();">&nbsp;<input type="submit" class="jt_button" name="send" value="Send Job"><input type="hidden" name="job" value="' + job + '"></td></tr></table></form>', ((pos.top - 40 < 0) ? 0 : pos.top - 40), ((pos.left - 150 < 0) ? 0 : pos.left - 150), 300, null, "jt_job");

		document.getElementById("jt_job_email_form").email.focus();
	}
	else {
		newAlert("jt_job_email");
	}

	return false;
}


function printJob(job) {
	window.open("/network/jobs/print.cfm?id=" + job);

	return false;
}

function siteGet() {
	var site_id = "";
	if(location.search) {
		var qstring = window.location.search.substr(1).split("&");
		for (i = 0; i < qstring.length; i++) {
			if(qstring[i].split("=")[0] == "site_id") {
				site_id = qstring[i].split("=")[1];
				break;
			}
		}
	}

	if(!site_id)
		return 1;
	else
		return site_id;
}

// Porter stemmer in Javascript. Few comments, but it's easy to follow against the rules in the original
// paper, in
//
//  Porter, 1980, An algorithm for suffix stripping, Program, Vol. 14,
//  no. 3, pp 130-137,
//
// see also http://www.tartarus.org/~martin/PorterStemmer

// Release 1

step2list = new Array();
step2list["ational"]="ate";
step2list["tional"]="tion";
step2list["enci"]="ence";
step2list["anci"]="ance";
step2list["izer"]="ize";
step2list["bli"]="ble";
step2list["alli"]="al";
step2list["entli"]="ent";
step2list["eli"]="e";
step2list["ousli"]="ous";
step2list["ization"]="ize";
step2list["ation"]="ate";
step2list["ator"]="ate";
step2list["alism"]="al";
step2list["iveness"]="ive";
step2list["fulness"]="ful";
step2list["ousness"]="ous";
step2list["aliti"]="al";
step2list["iviti"]="ive";
step2list["biliti"]="ble";
step2list["logi"]="log";

step3list = new Array();
step3list["icate"]="ic";
step3list["ative"]="";
step3list["alize"]="al";
step3list["iciti"]="ic";
step3list["ical"]="ic";
step3list["ful"]="";
step3list["ness"]="";

c = "[^aeiou]";          // consonant
v = "[aeiouy]";          // vowel
C = c + "[^aeiouy]*";    // consonant sequence
V = v + "[aeiou]*";      // vowel sequence

mgr0 = "^(" + C + ")?" + V + C;               // [C]VC... is m>0
meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";  // [C]VC[V] is m=1
mgr1 = "^(" + C + ")?" + V + C + V + C;       // [C]VCVC... is m>1
s_v   = "^(" + C + ")?" + v;                   // vowel in stem

function stemWord(w) {
	var stem;
	var suffix;
	var firstch;
	var origword = w;

	if (w.length < 3) { return w; }

   	var re;
   	var re2;
   	var re3;
   	var re4;

	firstch = w.substr(0,1);
	if (firstch == "y") {
		w = firstch.toUpperCase() + w.substr(1);
	}

	// Step 1a
   	re = /^(.+?)(ss|i)es$/;
   	re2 = /^(.+?)([^s])s$/;

   	if (re.test(w)) { w = w.replace(re,"$1$2"); }
   	else if (re2.test(w)) {	w = w.replace(re2,"$1$2"); }

	// Step 1b
	re = /^(.+?)eed$/;
	re2 = /^(.+?)(ed|ing)$/;
	if (re.test(w)) {
		var fp = re.exec(w);
		re = new RegExp(mgr0);
		if (re.test(fp[1])) {
			re = /.$/;
			w = w.replace(re,"");
		}
	} else if (re2.test(w)) {
		var fp = re2.exec(w);
		stem = fp[1];
		re2 = new RegExp(s_v);
		if (re2.test(stem)) {
			w = stem;
			re2 = /(at|bl|iz)$/;
			re3 = new RegExp("([^aeiouylsz])\\1$");
			re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
			if (re2.test(w)) {	w = w + "e"; }
			else if (re3.test(w)) { re = /.$/; w = w.replace(re,""); }
			else if (re4.test(w)) { w = w + "e"; }
		}
	}

	// Step 1c
	re = /^(.+?)y$/;
	if (re.test(w)) {
		var fp = re.exec(w);
		stem = fp[1];
		re = new RegExp(s_v);
		if (re.test(stem)) { w = stem + "i"; }
	}

	// Step 2
	re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
	if (re.test(w)) {
		var fp = re.exec(w);
		stem = fp[1];
		suffix = fp[2];
		re = new RegExp(mgr0);
		if (re.test(stem)) {
			w = stem + step2list[suffix];
		}
	}

	// Step 3
	re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
	if (re.test(w)) {
		var fp = re.exec(w);
		stem = fp[1];
		suffix = fp[2];
		re = new RegExp(mgr0);
		if (re.test(stem)) {
			w = stem + step3list[suffix];
		}
	}

	// Step 4
	re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
	re2 = /^(.+?)(s|t)(ion)$/;
	if (re.test(w)) {
		var fp = re.exec(w);
		stem = fp[1];
		re = new RegExp(mgr1);
		if (re.test(stem)) {
			w = stem;
		}
	} else if (re2.test(w)) {
		var fp = re2.exec(w);
		stem = fp[1] + fp[2];
		re2 = new RegExp(mgr1);
		if (re2.test(stem)) {
			w = stem;
		}
	}

	// Step 5
	re = /^(.+?)e$/;
	if (re.test(w)) {
		var fp = re.exec(w);
		stem = fp[1];
		re = new RegExp(mgr1);
		re2 = new RegExp(meq1);
		re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
		if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {
			w = stem;
		}
	}

	re = /ll$/;
	re2 = new RegExp(mgr1);
	if (re.test(w) && re2.test(w)) {
		re = /.$/;
		w = w.replace(re,"");
	}

	// and turn initial Y back to y

	if (firstch == "y") {
		w = firstch.toLowerCase() + w.substr(1);
	}
	return w;
}

var Stemmer = Class.create();
Stemmer.prototype = {
	initialize: function(opt) {
		this.options = Object.extend({
			stemCaps: true,
			stemQuoted: false
		}, opt || {});
	},
	stem: function(phrase) {
		var keywords = "";
		var nostem = "";
		var stemCaps = this.options.stemCaps;
		var stemFunction = this.options.stemFunction;
		if(this.options.stemQuoted) {
			phrase = phrase.replace(/[^a-zA-Z0-9 ]/g,"");
		} else {
			phrase = phrase.replace(/[^a-zA-Z0-9 '"]/g,"");
			if(phrase.match(/("|').*?\1/)) {
				phrase.match(/("|').*?\1/g).each(function(quoted) {
					phrase = phrase.replace(quoted, "");
					nostem = nostem + " " + quoted;
				});
			}
		}
		$A(phrase.split(/ /)).each(function(word) {
			if(!word.match(/^[A-Z]/) || stemCaps) {
				keywords = keywords + " " + stemFunction(word);
			} else {
				keywords = keywords + " " + word;
			}
		});
		keywords = keywords + " " + nostem;
		return keywords;
	},
	stemUpdate: function(element, phrase) {
		element = $(element);
		element.innerHTML = this.stem(phrase);
	}
};

var stemmer = new Stemmer({
	stemCaps: true,
	stemQuoted: false,
	stemFunction: stemWord
});

/*
function searchSites(parms, user) {
	if(!typing) {
		$('jt_throbber').show();
		if($('jt_default_results')) {
			$('jt_default_results').hide();
		}
		if(user) {
			typing = true;
			window.setTimeout(function() { typing = false; parms.keywords = $F('jt_keywords'); searchSites(parms, false); }, 1000);
			return false;
		}
		if(parms.keywords.length > 1) {
			$('jt_search_msg').hide();
			parms.keywords = stemmer.stem(parms.keywords);
			if(parms.site && parms.site == 1) url = '/network/jobs/@sites/results_search_sites/default.cfm'
				else url = '/network/jobs/@sites/results_search_sites/' + parms.site + '.cfm';
			new Ajax.Request(url, {
				method: 'get',
				parameters: parms,
				onSuccess: function(transport) {
					$('jt_throbber').hide();
					response = transport.responseText || '';
					$('jt_results').innerHTML = response;
					fixRightHeight();
				},
				onFailure: function() {
					$('jt_throbber').hide();
					$('jt_results').innerHTML = 'Something went terribly wrong.';
					fixRightHeight();
				}
			});
		} else {
			if(parms.keywords.length > 0) {
				$('jt_search_msg').innerHTML = 'Please use a longer keyword.';
				$('jt_search_msg').show();
			} else {
				$('jt_search_msg').hide();
			}
			if($('jt_default_results')) {
				$('jt_default_results').show();
			}
			$('jt_results').innerHTML = '';
			fixRightHeight();
			$('jt_throbber').hide();
		}
	}
}
*/

waitingMessage.setGraphic("bar2.gif");
var formCounter = 0;
var typing = false;

var Cart = Class.create();

// The default before() and after() functions don't do anything
// for now.
Cart.DefaultOptions = {
	beforeSelectProduct: function() { },
	afterSelectProduct: function() { },
	beforeRemoveProduct: function() { },
	afterRemoveProduct: function() { },
	onSelectProductSuccess: function() { },
	onRemoveProductSuccess: function() { },
	onSelectProductFailure: function() { },
	onRemoveProductFailure: function() { },
	imageOn: '',
	imageOff: ''
}

Object.extend(Cart.prototype, {
	initialize: function() {
		this.options = Object.extend(Object.extend({}, Cart.DefaultOptions), arguments[0] || {});
		// If these options are set as strings (which they should be upon instantiation),
		// create the proper objects and set them up. If they were not strings, we don't
		// do anything because... They are what they are (possibly custom objects).
		if((typeof(this.options.imageOn)).match(/string/i)) {
			p = this.options.imageOn;
			this.options.imageOn = new Image();
			this.options.imageOn.src = p;
		}
		if((typeof(this.options.imageOff)).match(/string/i)) {
			p = this.options.imageOff;
			this.options.imageOff = new Image();
			this.options.imageOff.src = p;
		}
	},

	selectJobPostProduct: function(product, item, site) {
		Object.extend(this.options, arguments[3] || {});

		this.options.beforeSelectProduct.call();

		var params = {};
		var items;
		if(items = product.match(/(\d*?)_(.+)$/)) {
			product = items[2];
			params.product = product;
			params.siteId = items[1];
		} else {
			params.product = product;
			params.siteId = null;
		}
		params.ajax = 1;

		if(product == 'all') {
			var newproducts = '';
			var products = $('jt_sites').product;

			for(var i = 0; i < products.length; i++) {
				if(products[i].id.match(/more_products/i))
					products[i].checked = false;
				else {
					products[i].checked = true;
					newproducts += ((newproducts.length) ? ',' : '') + products[i].value;
				}
			}

			product = newproducts;
		} else {
			// Uncheck all other products (you can only purchase one at a time)
			var products = item.form.product;
			var sitetest = new RegExp("_" + item.id.match(/_(\d+)_/)[1] + "_");

			for(var i = 0; i < products.length; i++) {
				if(sitetest.test(products[i].id) && products[i].value != product)
					products[i].checked = false;
			}
		}

		loading.setMessage('Adding job board selection...');
		loading.show();

		var theProduct = product;
		new Ajax.Request("/network/functions/public/addjobpostproduct.cfm?site_id=" + site, {
			method:			'post',
			site:			site,
			parameters:		params,
			imageOn:		this.options.imageOn,
			successFunc:	this.options.onSelectProductSuccess,
			failureFunc:	this.options.onSelectProductFailure,
			onSuccess: function(transport, json, opt) {
				if(document.getElementById("text_box"))
					document.getElementById("text_box").value = transport.responseText;

				json = transport.response.responseJSON || {};
				if(json.status) {
					if(opt.parameters.siteId && opt.imageOn && $('cart_button_'+opt.parameters.siteId)) {
						// If there is a siteId present, it means that the cart
						// BUTTON was clicked (not an additional product checkbox).
						// We must light up that button.
						$('cart_button_'+opt.parameters.siteId).src = opt.imageOn.src;
					}
					cartRefresh("jobpost", opt.site, { onSuccess: function() { opt.successFunc.call(this, opt); } } );
				} else if(json.messages && json.messages.length) {
					if($('more_products_'+opt.parameters.siteId+'_'+opt.parameters.product)) {
						$('more_products_'+opt.parameters.siteId+'_'+opt.parameters.product).checked = false;
					}
					loading.hide();
					alert($A(json.messages).join(', '));
				} else if(json.data && json.data.match(/login/i)) {
					loginRequest("selectPostingProduct('" + theProduct + "');");
				} else if(json.data && json.data.match(/timeout/i)) {
					loading.hide();
					timeoutAlert(true);
					opt.failureFunc.call();
				}
			}
		});

		this.options.afterSelectProduct.call();

		return false;
	},

	removeJobPostProduct: function(product, site) {

		Object.extend(this.options, arguments[2] || {});

		this.options.beforeRemoveProduct.call();

		if(product || (!product && confirm("Are you sure you wish to clear all your selected job boards?"))) {
			loading.setMessage('Removing job boards...');
			loading.show();

			var params = {};
			if(product == 'current_page') {
				var products = $('jt_sites').product;
				params.clear = true;
				params.product = '';

				for(var i = 0; i < products.length; i++)
					params.product += ((params.product.length) ? ',' : '') + products[i].value;
			} else if(product) {
				var items = product.match(/(\d+)_(.*?)$/);
				params.product = items[2];
				params.siteId = items[1];
				if(params.siteId && !params.product) {
					// If a site was provided, but no product (e.g. the parameter passed
					// was "37_", that means to remove whichever product is selected for
					// site 37. This happens whenever you click the cart button to deselect it.
					var s = params.siteId;
					var t = new RegExp('more_products_' + s + '_');
					$A($$("input[type=checkbox]")).each(function(e) {
						if(t.test(e.id) && e.checked) {
							e.checked = false;
							params.product = e.id.match(/(\d+)_(.*?)$/)[2];
						}
					});
				}
			} else {
				params.clear = 'true';
			}

			new Ajax.Request("/network/functions/public/removejobpostproduct.cfm?site_id=" + site, {
				method:			'post',
				parameters:		params,
				site:			site,
				imageOff:		this.options.imageOff,
				successFunc:	this.options.onRemoveProductSuccess,
				failureFunc:	this.options.onRemoveProductFailure,
				onSuccess: function(transport, json, opt) {
					if(transport.responseText.match(/^login$/i)) {
						loginRequest("removeJobPostProduct(" + opt.parameters.product + ");");
					} else if(transport.responseText.match(/^timeout$/i)) {
						loading.hide();
						timeoutAlert(true);
						opt.failureFunc.call();
					} else {
						if(document.getElementById("text_box"))
							document.getElementById("text_box").value = transport.responseText;

						//if(opt.parameters.siteId && opt.imageOff.src && $('cart_button_'+opt.parameters.siteId)) {
						if(opt.parameters.siteId && opt.imageOff && $('cart_button_'+opt.parameters.siteId)) {
							// If there is a siteId present, it means that the cart
							// BUTTON was clicked (not an additional product checkbox).
							// We must turn off that button.
							
							//$('cart_button_'+opt.parameters.siteId).src = opt.imageOff.src;
							$('cart_button_'+opt.parameters.siteId).src = opt.imageOff.src;
						}
						
						// This is going to by my sneaky way of unckecing the default box when you are working with a different product (technically) 
						if(document.getElementsByClassName('site_product_' + opt.parameters.siteId)[0]){
							document.getElementsByClassName('site_product_' + opt.parameters.siteId)[0].checked = false;
						}											
						if($('contract_product_' + opt.parameters.siteId + '_' + opt.parameters.product)) {
							$('contract_product_' + opt.parameters.siteId + '_' + opt.parameters.product).checked = false;
						}
						if($('more_products_' + opt.parameters.siteId + '_' + opt.parameters.product)) {
							$('more_products_' + opt.parameters.siteId + '_' + opt.parameters.product).checked = false;
						}

						if(opt.parameters.clear) {
							// Un-check every product.
							$A($$("input[type=checkbox]")).each(function(e) {
								if(e.getAttribute('id').match(/^(more_)?products?_/)) {
									e.checked = false;
								}
							});
							// Switch off every image.
							$A($$("img.cart_image")).each(function(e) {
								e.src = opt.imageOff.src;
							});

							if($('jt_cart_message')) $('jt_cart_message').remove();
						}

						cartRefresh("jobpost", opt.site, { onSuccess: function() { opt.successFunc.call(this, opt); if(!opt.product && $("jt_jobpostcart_command")) cartShow('jobpost', false); } } );						
					}
				}
			});
		}

		this.options.afterRemoveProduct.call();

		return false;
	},

	postPageLoad: function(site_id) {
		url = '/network/jobs/post.cfm?site_id=' + site_id;
		
		if($('jobpostcart_postvals') && $('jobpostcart_postvals').a)
			url += '&a=' + $('jobpostcart_postvals').a.value;
		else if($('jobpostcart_postvals') && $('jobpostcart_postvals').job)
			url += '&job=' + $('jobpostcart_postvals').job.value;
		else
			url += '&a=0';

		url += "&stepcomp=";

		if($('jobpostcart_postvals') && $('jobpostcart_postvals').stepcomp)
			url += $('jobpostcart_postvals').stepcomp.value + (($('jobpostcart_postvals').stepcomp.value.match(/b/)) ? '' : 'b');
		else
			url += "b";

		window.location = url;

		return false;			
	}
});

function proposalDelete(proposal, name) {
	if(confirm('Are you sure to wish to delete proposal \'' + name + '\'?')) {
		//waitingMessage.setMessage("proposal_delete", "Deleting proposal");
		loading.setMessage('Deleting proposal');
		loading.show();
		new Ajax.Request("/network/functions/proposal_delete.cfm", {
			method: 'post',
			arguments: arguments,
			parameters: { proposal: proposal },
			onSuccess: function(transport, json, opt) {
				if(document.getElementById("text_box"))
					document.getElementById("text_box").value = transport.responseText;

				if(transport.responseText.match(/^login$/i)) {
					loginRequest("proposalDelete('" + opt.arguments[0] + "','" + opt.arguments[1] + "');");
				} else if(transport.responseText.match(/^timeout$/i)) {
					loading.hide();
					//waitingMessage.remove();
					timeoutAlert(true);
				} else if(!transport.responseText.match(/^true$/i)) {
					loading.hide();
					//waitingMessage.remove();
					errorAlert(transport.responseText);
				}
				else {
					loading.setMessage('Reloading proposals.');
					//waitingMessage.setMessage("proposal_delete", "Reloading proposals");
					window.location.reload();
				}
			}
		});

	}

	return false;
}

function proposalUse(proposal, site) {
	var loadingMessage = (typeof proposalLoadingMessage != "undefined") ? proposalLoadingMessage : 'Loading OneClick&trade; Network';
	loading.setMessage('Loading proposal');
	loading.show();
	new Ajax.Request("/network/functions/proposal_load.cfm", {
		method: 'post',
		arguments: arguments,
		parameters: { proposal: proposal },
		loadingMessage: loadingMessage,
		onSuccess: function(transport, json, opt) {
			if(transport.responseText.match(/^login$/i)) {
				loginRequest("proposalUse('" + opt.arguments[0] + "','" + opt.arguments[1] + "');");
			} else if(transport.responseText.match(/^timeout$/i)) {
				loading.hide();
				timeoutAlert(true);
			} else if(!transport.responseText.match(/^true$/i)) {
				loading.hide();
				errorAlert(transport.responseText);
			}
			else {
				loading.setMessage(opt.loadingMessage);
				window.location = '/network/jobs/post.cfm?site_id=' + opt.arguments[1] + "&a=0&stepcomp=b";
			}
		}
	});
	return false;
}


function proposalProductRemove(site, proposal, product_site, product) {
	waitingMessage.setMessage("proposal_product_remove", "Removing job board");

	if(!proposal)
		proposal = '';

	new Ajax.Request('/network/functions/proposal_product_delete.cfm', {
		method: 'post',
		parameters: { proposal: proposal, product: product, type: '6' },
		onSuccess: function(transport, json, opt) {
			if(document.getElementById("text_box"))
				document.getElementById("text_box").value = transport.responseText;

			waitingMessage.remove();
			waitingMessage.setMessage("proposal_products_refresh", "Refreshing job boards");

			new Ajax.Request('/network/jobs/proposals/@edit/products/loader.cfm?site_id=' + site + '&id=' + proposal, {
				method: 'post',
				parameters: { },
				onSuccess: function(transport, json, opt) {
					if(document.getElementById("text_box"))
						document.getElementById("text_box").value = transport.responseText;

					$('jt_proposal_boards').innerHTML = transport.responseText;

					waitingMessage.remove();
				}
			});


		}
	});


	return false;
}

function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

/********************************************************************************
 * "See It!" functionality.
 *******************************************************************************/
var seenIt;

function unSeeIt() {
	Event.stopObserving(window, 'scroll', positionViewer);
	Event.stopObserving(window, 'resize', positionViewer);
	$('jt_window').hide();
	$('jt_see_it_add').hide();
	$('jt_see_it_close').hide();
	new Effect.Fade('jt_backdrop', { duration: 0.2 } );

	try {
		Event.stop(arguments[0]);
	} catch(e) { }

	$('jt_backdrop').stopObserving('click', unSeeIt);
	$('jt_see_it_close').stopObserving('click', unSeeIt);
}

function windowLoadHandler() {
	seenIt = true;
	var data = $('jt_window').className.match(/^pid-(\d+)_sid-(\d+)_site-(\d+)$/);
	var params = {
		pid: data[1],
		sid: data[2],
		site: data[3]
	};

	if(!$('jt_window').visible()) {
		new Effect.Invoke( { invoke: function() {
			$('jt_window').show();

			if(!hasSelectedProducts(params.sid)){
				$('jt_see_it_add').show();
			}

			$('jt_see_it_close').show();
			$('jt_ifrm_load').hide();
			Event.observe(window, 'scroll', positionViewer);
			Event.observe(window, 'resize', positionViewer);

			$('jt_see_it_add').onclick = null;
			$('jt_see_it_add').onclick = function() {
				Event.stopObserving(window, 'scroll', positionViewer);
				Event.stopObserving(window, 'resize', positionViewer);
				$('jt_window').hide();
				$('jt_see_it_add').hide();
				$('jt_see_it_close').hide();
				new Effect.Fade('jt_backdrop', { duration: 0.2, queue: 'end' } );
				new Effect.Invoke({ invoke: function() {
					var cb = $('more_products_' + params.sid + '_' + params.pid);
					siteCart.selectJobPostProduct(params.sid + '_' + params.pid, cb, params.site);
					cb.checked = true;
				}, queue: 'end' });
				return false;
			};

			$('jt_backdrop').observe('click', unSeeIt);
			$('jt_see_it_close').observe('click', unSeeIt);

		}, queue: 'end' } );
	}
	
	Event.stopObserving('jt_window', 'load', windowLoadHandler);
}

function errorWindowLoadHandler() {
	$('jt_see_it_add').hide(); /* Shouldn't be showing anyway */
	$('jt_see_it_close').observe('click', unSeeIt);
	$('jt_see_it_close').show();
	$('jt_window').show();
	$('jt_ifrm_load').hide();
	Event.observe(window, 'scroll', positionViewer);
	Event.observe(window, 'resize', positionViewer);
}

/* See It!, display a site inside of a floating iframe. */
function seeIt(url, params, enable_post) {

	/*
		Figure out if we should display the 'Post to this site!' button. 
		This is a mess because of the way this entire function was designed.
	*/
	if( enable_post == false ){
		enable_post = 'disabled';
	} else {
		enable_post = '';
	}

	if(!url.match(/http:\/\//)) {
		url = 'http://' + url;
	}
	
	var button_style = {
		'font-weight':	'bold',
		'border-width':	'1px',
		'background':	'white url(\'/images/new/button_back.gif\') repeat-x bottom left',
		'width':		'151px', 
		'height':		'50px',
		'font-family':	'Verdana, Helvetica, sans-serif',
		'font-size':	'1.3em'
	}

	if(!$('jt_backdrop')) {
		//<div id="jt_backdrop" style="display: none; position: absolute; z-index: 100; top: 0; left: 0; background-color: black;">
		var bd = new Element('div', { id: 'jt_backdrop' });
		bd.hide();
		$$('body')[0].insert({ bottom: bd });
	}
	if(!$('jt_window')) {
		//<iframe id="jt_window" style="display: none; position: absolute; top: 0; left: 0; z-index: 150; background-color: white;"></iframe>
		var w = new Element('iframe', { id: 'jt_window' });
		w.hide();
		$$('body')[0].insert({ bottom: w });
	}
	if(!$('jt_see_it_close')) {
		//<div id="jt_see_it_close" style="display: none;">
		//	<button style="font-weight: bold; border-width: 1px; background: white url('/images/new/button_back.gif') repeat-x bottom left; width: 150px; height: 50px; font-family: Verdana, Helvetica, sans-serif; font-size: 1.3em;">Return to Results</button>
		//</div>
		var bc = new Element('div', { id: 'jt_see_it_close' });
		bc.hide();
		var bb = new Element('button');
		bb.update('Return to Results');
		bb.setStyle(button_style);
		bc.insert({ bottom: bb });
		$$('body')[0].insert({ bottom: bc });
	}
	if(!$('jt_see_it_add')) {
		//<div id="jt_see_it_add" style="display: none;">
		//	<button style="font-weight: bold; border-width: 1px; background: white url('/images/new/button_back.gif') repeat-x bottom left; width: 151px; height: 50px; font-family: Verdana, Helvetica, sans-serif; font-size: 1.3em;">Post on This Site</button>
		//</div>
		var bc = new Element('div', { id: 'jt_see_it_add'});
		bc.hide();
		var bb = new Element('button', { disabled: enable_post });
		bb.update('Post on This Site');
		bb.setStyle(button_style);
		bc.insert({ bottom: bb });
		$$('body')[0].insert({ bottom: bc });
	}
	if(!$('jt_ifrm_load')) {
		//<div id="jt_ifrm_load" style="display: none; background-color: black;">Loading...</div>
		var il = new Element('div', { id: 'jt_ifrm_load' });
		il.hide();
		il.update('Loading...');
		$$('body')[0].insert({ bottom: il });
	}

	if($('jt_backdrop') && url.length) {
		positionViewer();

		new Effect.Appear('jt_backdrop', { duration: 0.5, to: 0.7, queue: 'end' });

		// passes variables to windowLoadHandler (which decides what variables to show). Works for now, change later to bigger class structure.
		$('jt_window').className = 'pid-' + params.pid + '_sid-' + params.sid + '_site-' + params.site;
		Event.observe('jt_window', 'load', windowLoadHandler);

		/* First set up the iframe part. */
		$('jt_window').src = '';
		$('jt_window').src = url;

		/* Now set up the timeout stuff. */
		seenIt = false;
		window.setTimeout(function() {
			if(!seenIt) {
				Event.stopObserving('jt_window', 'load', windowLoadHandler);
				Event.observe('jt_window', 'load', errorWindowLoadHandler);
				$('jt_window').src = '/network/content/see_it_error.cfm';
			}
		}, 30000);
	}

}

function seeItStaticPosition() {
	var pagesize = getPageSize();
	$('jt_see_it_border').setStyle({
		top: ((pagesize[3] - $('jt_see_it_border').getHeight()) / 2) + 35 + getScrollOffset().top + 'px',
		left: ((pagesize[2] - $('jt_see_it_border').getWidth()) / 2) + 'px'
	});
	$('jt_see_it_add').setStyle({
		height: '50px',
		width: '151px',
		position: 'absolute',
		zIndex: '102',
		top: (Position.cumulativeOffset($('jt_see_it_border'))[1] - 50) + 'px',
		left: (Position.cumulativeOffset($('jt_see_it_border'))[0]) + 'px'
	});
	$('jt_see_it_close').setStyle({
		height: '50px',
		width: '41px',
		position: 'absolute',
		zIndex: '102',
		top: (Position.cumulativeOffset($('jt_see_it_border'))[1] - 50) + 'px',
		left: (Position.cumulativeOffset($('jt_see_it_border'))[0] + 151) + 'px'
	});
	$('jt_see_it_notice').setStyle({
		position: 'absolute',
		top: (Position.cumulativeOffset($('jt_see_it_border'))[1] - 25) + 'px',
		left: ((Position.cumulativeOffset($('jt_see_it_border'))[0] + $('jt_see_it_border').getWidth()) - $('jt_see_it_notice').getWidth()) + 'px',
		zIndex: '102',
		height: '25px'
	});
}

/* See It! only for static preview images. */
function seeItStatic(url, params, enable_post) {

	/*
		Figure out if we should display the 'Post to this site!' button. 
	*/
	if( enable_post == false ){
		enable_post = 'disabled';
	} else {
		enable_post = '';
	}

	var objBody = document.getElementsByTagName('body').item(0);

	var button_style = {
		'font-weight':	'bold',
		'border-width':	'1px',
		'background':	'white url(\'/images/new/button_back.gif\') repeat-x bottom left',
		'width':		'151px', 
		'height':		'50px',
		'font-family':	'Verdana, Helvetica, sans-serif',
		'font-size':	'1.3em'
	}

	if(!$('jt_backdrop')) {
		//<div id="jt_backdrop" style="display: none; position: absolute; z-index: 100; top: 0; left: 0; background-color: black;">
		var bd = new Element('div', { id: 'jt_backdrop' });
		bd.hide();
		$$('body')[0].insert({ bottom: bd });
	}
	if(!$('jt_window')) {
		//<iframe id="jt_window" style="display: none; position: absolute; top: 0; left: 0; z-index: 150; background-color: white;"></iframe>
		var w = new Element('iframe', { id: 'jt_window' });
		w.hide();
		$$('body')[0].insert({ bottom: w });
	}
	if(!$('jt_see_it_add')) {
		//<div id="jt_see_it_add" style="display: none;">
		//	<button style="font-weight: bold; border-width: 1px; background: white url('/images/new/button_back.gif') repeat-x bottom left; width: 151px; height: 50px; font-family: Verdana, Helvetica, sans-serif; font-size: 1.3em;">Post on This Site</button>
		//</div>
		var bc = new Element('div', { id: 'jt_see_it_add' });
		bc.hide();
		var bb = new Element('button', { disabled: enable_post });
		bb.update('Post on This Site');
		bb.setStyle(button_style);
		bc.insert({ bottom: bb });
		$$('body')[0].insert({ bottom: bc });
	}
	if(!$('jt_see_it_close')) {
		//<div id="jt_see_it_close" style="display: none;">
		//	<button style="font-weight: bold; border-width: 1px; background: white url('/images/new/button_back.gif') repeat-x bottom left; width: 150px; height: 50px; font-family: Verdana, Helvetica, sans-serif; font-size: 1.3em;">Return to Results</button>
		//</div>
		var bc = new Element('div', { id: 'jt_see_it_close' });
		bc.hide();
		var bb = new Element('button');
		bb.update('Return to Results');
		bb.setStyle(button_style);
		bc.insert({ bottom: bb });
		$$('body')[0].insert({ bottom: bc });
	}
	if(!$('jt_ifrm_load')) {
		//<div id="jt_ifrm_load" style="display: none; background-color: black;">Loading...</div>
		var il = new Element('div', { id: 'jt_ifrm_load' });
		il.hide();
		il.update('Loading...');
		$$('body')[0].insert({ bottom: il });
	}

	imgPreloader = new Image();
	imgPreloader.onload = function() {

		imgPreloader.onload = null;

		// Resizing large images - orginal by Christian Montoya
		var pagesize = getPageSize();
		var x = pagesize[2] - 150;
		var y = pagesize[3] - 185;
		var imageWidth = imgPreloader.width;
		var imageHeight = imgPreloader.height;
		if (imageWidth > x) {
			imageHeight = imageHeight * (x / imageWidth); 
			imageWidth = x; 
			if (imageHeight > y) { 
				imageWidth = imageWidth * (y / imageHeight); 
				imageHeight = y; 
			}
		} else if (imageHeight > y) { 
			imageWidth = imageWidth * (y / imageHeight); 
			imageHeight = y; 
			if (imageWidth > x) { 
				imageHeight = imageHeight * (x / imageWidth); 
				imageWidth = x;
			}
		}
		// End Resizing

		var objBorder = document.createElement('div');
		objBorder.setAttribute('id', 'jt_see_it_border');
		objBorder.style.display = 'none';
		var objImage = document.createElement('img');
		objImage.setAttribute('width', imageWidth);
		objImage.setAttribute('height', imageHeight);
		objImage.setAttribute('id', 'jt_see_it_img');
		objImage.src = url;
		objBorder.appendChild(objImage);
		objBody.appendChild(objBorder);

		var objNotice = document.createElement('div');
		objNotice.setAttribute('id', 'jt_see_it_notice');
		objNotice.innerHTML = 'This is a static preview only!';
		objBody.appendChild(objNotice);

		$('jt_see_it_border').className = 'pid-' + params.pid + '_sid-' + params.sid + '_site-' + params.site;
		$('jt_see_it_border').setStyle({ width: imageWidth + 'px', height: imageHeight + 'px' });
		$('jt_backdrop').setStyle({ width: pagesize[0] + 'px', height: pagesize[1] + 'px' });

		seeItStaticPosition();

		new Effect.Appear('jt_backdrop', { duration: 0.5, from: 0.0, to: 0.8 });

		Event.observe(window, 'scroll', seeItStaticPosition);
		Event.observe('jt_see_it_close', 'click', unSeeItStatic);
		$('jt_see_it_border').show();

		seeItStaticPosition();

		$('jt_see_it_close').show();
		if($('product_' + params.sid + '_' + params.pid) && !$('product_' + params.sid + '_' + params.pid).checked) {
			$('jt_see_it_add').onclick = null;
			$('jt_see_it_add').onclick = function() {
				Event.stopObserving(window, 'scroll', positionViewer);
				Event.stopObserving(window, 'resize', positionViewer);
				$('jt_see_it_border').hide();
				$('jt_see_it_add').hide();
				$('jt_see_it_close').hide();
				$('jt_see_it_notice').hide();
				new Effect.Fade('jt_backdrop', { duration: 0.2, queue: 'end' } );
				new Effect.Invoke({ invoke: function() {
					siteCart.selectJobPostProduct(params.pid, $('product_' + params.sid + '_' + params.pid), params.site);
					if(!$('product_' + params.sid + '_' + params.pid).checked) {
						$('product_' + params.sid + '_' + params.pid).checked = true;
					}
				}, queue: 'end' });
				return false;
			};
			$('jt_see_it_add').show();
		}
	}
	imgPreloader.src = url;
}

function unSeeItStatic() {
	$('jt_see_it_border').hide();
	$('jt_see_it_add').hide();
	$('jt_see_it_close').hide();
	$('jt_see_it_notice').hide();
	new Effect.Fade('jt_backdrop', { duration: 0.2 } );
	Event.stopObserving('jt_see_it_close', 'click', unSeeItStatic);
	Event.stopObserving('jt_see_it_add', 'click', unSeeItStatic);
	Event.stopObserving(window, 'scroll', seeItStaticPosition);

	/* Called almost always from a click event. Prevent moving around
	 * on the page. */
	return false;
}

function positionViewerStatic() {
	var win = windowSize();
	$('jt_window').setStyle({ width: (win.width - 200) + 'px', height: (win.height - 200) + 'px', top: Math.abs(Position.page($('jt_backdrop'))[1]) + 100 + 'px', left: '100px' });

	var body = {
		width:	$$('body').first().getWidth(),
		height:	$$('body').first().getHeight()
	};

	var arrayPageSize = getPageSize();
	yScroll = arrayPageSize[1];
	xScroll = arrayPageSize[0];

	$('jt_backdrop').setStyle({ width: xScroll + 'px', height: yScroll + 'px' });
	$('jt_see_it_add').setStyle({
		height: '50px',
		width: '151px',
		position: 'absolute',
		zIndex: '102',
		top: Math.abs(Position.page($('jt_backdrop'))[1]) + 50 + 'px', left: '100px'
	});
	$('jt_see_it_close').setStyle({
		height: '50px',
		width: '41px',
		position: 'absolute',
		zIndex: '102',
		top: Math.abs(Position.page($('jt_backdrop'))[1]) + 50 + 'px',
		left: '251px'
	});

	if(!$('jt_backdrop').visible()) {
		var loadTop = ((win.height - $('jt_ifrm_load').getHeight()) / 2) + Math.abs(Position.page($('jt_backdrop'))[1]);
		var loadLeft = ((win.width - $('jt_ifrm_load').getWidth()) / 2);
		$('jt_ifrm_load').setStyle( { position: 'absolute', zIndex: '102', top: loadTop + 'px', left: loadLeft + 'px', border: '2px solid white', color: 'white', padding: '15px', fontSize: '2em' } );
		$('jt_ifrm_load').show();
	}
}

function positionViewer() {
	var win = windowSize();
	$('jt_window').setStyle({ width: (win.width - 200) + 'px', height: (win.height - 200) + 'px', top: Math.abs(Position.page($('jt_backdrop'))[1]) + 100 + 'px', left: '100px' });

	var body = {
		width:	$$('body').first().getWidth(),
		height:	$$('body').first().getHeight()
	};

	var arrayPageSize = getPageSize();
	yScroll = arrayPageSize[1];
	xScroll = arrayPageSize[0];

	$('jt_backdrop').setStyle({ width: xScroll + 'px', height: yScroll + 'px' });
	$('jt_see_it_add').setStyle({
		height: '50px',
		width: '151px',
		position: 'absolute',
		zIndex: '102',
		top: Math.abs(Position.page($('jt_backdrop'))[1]) + 50 + 'px', left: '100px'
	});
	$('jt_see_it_close').setStyle({
		height: '50px',
		width: '41px',
		position: 'absolute',
		zIndex: '102',
		top: Math.abs(Position.page($('jt_backdrop'))[1]) + 50 + 'px',
		left: '251px'
	});

	if(!$('jt_backdrop').visible()) {
		var loadTop = ((win.height - $('jt_ifrm_load').getHeight()) / 2) + Math.abs(Position.page($('jt_backdrop'))[1]);
		var loadLeft = ((win.width - $('jt_ifrm_load').getWidth()) / 2);
		$('jt_ifrm_load').setStyle( { position: 'absolute', zIndex: '102', top: loadTop + 'px', left: loadLeft + 'px', border: '2px solid white', color: 'white', padding: '15px', fontSize: '2em' } );
		$('jt_ifrm_load').show();
	}
}

window.onbeforeunload = function() {
	if($('jt_ifrm_load') && $('jt_ifrm_load').visible()) {
		return false;
	}
}

function suggestReset() {
	if(arguments.length && arguments[0]) {
		$('suggest_url').value = '';
		$('suggest_title').value = '';
	}
	$('suggest_waiting').hide();
	$('suggest_title_box').hide();
	$('suggest_waiting2').hide();
	$('suggest_title_error').hide();
	$('suggest_continue').show();
	$('suggest_existing_site').hide();
	$('suggest_added_success').hide();
	$('suggest_url').focus();
}

function suggestLookup() {
	$('suggest_waiting').show();
	var url = $F('suggest_url');
	new Ajax.Request('/network/functions/public/getsitetitle.cfm', {
		method: 'post',
		parameters: { url: url },
		onSuccess: function(transport, json, opts) {
			$('suggest_waiting').hide();
			$('suggest_title_error').hide();
			response = transport.responseText || '';
			response = response.replace(/^\s+|\s+$/g, '');
			if(response.length) {
				response = (response * 1);
				if(response > 0) {
				/*if(response.match(/^EXISTS/)) {
					var site = response.match(/^EXISTS{(.*?)}{(.*?)}{(.*?)}{(.*?)}{(.*?)}/);
					$('suggest_existing_title').innerHTML = site[2];
					$('suggest_existing_cost').innerHTML = '$' + site[3];
					$('suggested_product').value = site[4];
					*/
					$('suggest_keywords').value = $('suggest_url').value;
					$('suggest_existing_site').show();
					new Effect.Highlight('suggest_existing_site');
				} else {
					suggestAdd($('suggested_site').value);
					/*
					$('suggest_title').value = response;
					$('suggest_title_box').show();
					$('suggest_continue').hide();
					*/
				}
			} else {
				$('suggest_title_error').innerHTML = '<p>There was a problem completing this operation.</p>';
				$('suggest_title_error').show();
			}
		},
		onFailure: function() {
			$('suggest_waiting').hide();
			$('suggest_title_error').innerHTML = '<p>There was a problem contacting the site you entered. Make sure you\'ve typed it correctly and try again.</p>';
			$('suggest_title_error').show();
		}
	});
}

function suggestExistingAdd() {
	var product = $('suggested_product').value;
	var site = $('suggested_site').value;

	waitingMessage.setMessage("adding_site", "Adding job board selection...");

	var theProduct = product;
	new Ajax.Request("/network/functions/public/addjobpostproduct.cfm?site_id=" + site, {
		method: 'post',
		site: site,
		parameters: { product: theProduct },
		successFunc: siteCart.options.onSelectProductSuccess,
		failureFunc: siteCart.options.onSelectProductFailure,
		onSuccess: function(transport, json, opt) {
			if(document.getElementById("text_box"))
				document.getElementById("text_box").value = transport.responseText;

			if(transport.responseText.match(/^login$/i)) {
				loginRequest("selectPostingProduct('" + theProduct + "');");
			} else if(transport.responseText.match(/^timeout$/i)) {
				waitingMessage.remove();
				timeoutAlert(true);
				opt.failureFunc.call();
			} else {
				waitingMessage.remove();
				cartRefresh("jobpost", opt.site, { onSuccess: function() { opt.successFunc.call(); } } );
				suggestReset(true);
			}
		}
	});

	siteCart.options.afterSelectProduct.call();
}

function siteSave(site) {
	loading.setMessage('Saving this site to your<br />saved sites list...');
	loading.show();

	// There MIGHT be a query string piece sent along.
	// If there is, convert it into an object, add our own key/value pair
	// for saving the site after login, and convert it back into a string.
	var qs = '';
	if(arguments[1]) {
		o = arguments[1].toQueryParams();
		Object.extend(o, {
			savesite: site
		});
		qs = Object.keys(o).collect(function(k) { var val=(typeof(o[k])!='undefined')?o[k]:''; return k + '=' + val; }).join('&');
	}

	new Ajax.Request('/network/functions/site_save.cfm', {
		method: 'post',
		parameters: { site: site },
		onSuccess: function(transport, json, opt) {
			resp = transport.responseText || '';
			if(resp.replace(/^\s+|\s+$/g, '').match(/true/i)) {
				message.setMessage('Site saved!');
				message.setDelay(800);
				message.show();
				$('jt_site_save_'+opt.parameters.site).hide();
				$('jt_site_unsave_'+opt.parameters.site).show();
			} else if(resp.replace(/^\s+|\s+$/g, '').match(/login/i)) {
				// Where we currently are (and will return to).
				var url = '/network/jobs/sites/index.cfm?' + qs;
				// Where we are going to go from here.
				var loginpage = '/network/login/login.cfm?site_id='+o.site_id+'&reqlog=1&&goto='+escape(url);
				window.location = loginpage;
			} else {
				message.setMessage('Site was not saved.<br />Please contact support.');
				message.setDelay(1500);
				message.show();
			}
		},
		onFailure: function() {
			message.setMessage('Site was not saved.<br />Please contact support.');
			message.setDelay(1500);
			message.show();
		}
	});
}

function siteUnsave(site) {
	loading.setMessage('Removing this site from your<br />saved sites list...');
	loading.show();

	new Ajax.Request('/network/functions/site_save_delete.cfm', {
		method: 'post',
		parameters: { site: site },
		onSuccess: function(transport, json, opt) {
			resp = transport.responseText || '';
			if(resp.replace(/^\s+|\s+$/g, '').match(/true/i)) {
				message.setMessage('Site removed!');
				message.setDelay(800);
				message.show();
				$('jt_site_save_'+opt.parameters.site).show();
				$('jt_site_unsave_'+opt.parameters.site).hide();
			} else {
				message.setMessage('Site was not removed.<br />Please contact support.');
				message.setDelay(1500);
				message.show();
			}
		},
		onFailure: function() {
			message.setMessage('Site was not removed.<br />Please contact support.');
			message.setDelay(1500);
			message.show();
		}
	});
}

function suggestAdd(site) {
	loading.setMessage('Adding the site to your cart...');
	loading.show();
	$('suggest_waiting2').show();
	new Ajax.Request('/network/functions/public/sitesuggestadd.cfm', {
		method: 'post',
		parameters: {
			name: $F('suggest_title'),
			url: $F('suggest_url')
		},
		onSuccess: function() {
			cartRefresh('jobpost', site, { onSuccess: function() {
				message.setMessage("The site you suggested has been added to your shopping cart.");
				message.setDelay(3000);
				message.show();
				//loading.hide();
				suggestReset(true);
				$('suggest_added_success').show();
				new Effect.Highlight('suggest_added_success', { duration: 1 } );
			 	siteCart.options.afterSelectProduct.call();
			} } );
		},
		onFailure: function() {
			$('suggest_title_box').hide();
			$('suggest_title_error').innerHTML = '<p>There was a problem adding this site to your shopping cart. Please wait a moment and try again.</p>';
			$('suggest_title_error').show();
			suggestReset();
		}
	});
}

function badSearchRes(link, site, keywords, tab, result) {
	Element.replace(link, '<span id="jt_temp_span"><img src="/images/waiting.gif" alt="" />&nbsp;Please wait a moment...</span>');
	new Ajax.Request('/network/functions/public/badresult.cfm', {
		method: 'get',
		parameters: {
			site: site,
			keywords: keywords,
			tab: tab,
			result: result
		},
		onSuccess: function(t,j,o) {
			$('jt_send_report_'+result).hide();
			$('jt_send_report_link_'+result).replace('<span>Thank you!</span>');
		},
		onFailure: function() {
			$('jt_send_report_'+result).hide();
			$('jt_send_report_link_'+result).replace('<span>Thank you!</span>');
		}
	});
}

function siteMemberInfoSave(querystring, form) {
	if(!form) {
		$('member_info_message').innerHTML = 'Please enter your membership information, or click Cancel.';
	} else {
		aframe.wait();

		var formHash = $(form).serialize({getHash: true});
		var site = formHash.site;
		new Ajax.Request('/network/functions/site_member_info_save.cfm?site=' + ((site) ? site : ''), {
			method: 'post',
			parameters: $(form).serialize(),
			onSuccess: function(transport, json, opt) {
				resp = transport.responseText || '';
				if(!resp.match(/^true$/)) {
					aframe.unWait();
					errorAlert(resp);
				}
				else {
					$('member_info_container').innerHTML = '<h1>Your information was saved!</h1>';
					if(site)
						$('member_info_container').innerHTML += '<p>Hang on while we refresh your view...</p>';
					else
						$('member_info_container').innerHTML += '<p>Your membership information has been sent to your job posting consultant for setup. Please note that there may be a brief delay before your membership has been configured and verified.</p>';
					

					if(window.location.pathname == '/network/subscriptions/index.cfm' || window.location.pathname == '/network/jobs/sites/index.cfm')
						window.location.reload();
					else
						aframe.back();
				}
			},
			onFailure: function() {
				alert("I couldn't reach the information service for this site. Please try again in a moment.");
			}
		});
	}

	return false;
}

function siteMemberInfoDelete(site, board) {
	if(confirm('Are you sure you wish to remove your membership information for this job board?')) {
		aframe.wait();
		
		new Ajax.Request('/network/functions/site_member_info_delete.cfm?site_id=' + ((site) ? site : ''), {
			method: 'post',
			parameters: {
				board: board
			},
			onSuccess: function(transport, json, opt) {
				resp = transport.responseText || '';
				if(!resp.match(/^true$/)) {
					aframe.unWait();
					errorAlert(resp);
				}
				else {
					if(window.location.pathname == '/network/subscriptions/index.cfm')
						window.location.reload();
					else
						aframe.reload();
				}
			},
			onFailure: function() {
				alert("I couldn't reach the information service for this site. Please try again in a moment.");
			}
		});
	}

	return false;
}

function dollarformat(num) {
	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
	num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
	cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
	num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function billingSelect(type, id) {
	var form = document.getElementById("jt_pay_confirm");

	if(form.billing) {
		if(!type) {
			for(var i = 0; i < form.billing.length; i++) {
				if(form.billing[i].checked) {
					type = form.billing[i].value;
					if(type == "existing" && !id)
						for(var x = 0; x < form.billing_existing.length; x++)
							if(form.billing_existing.options[x].selected)
								id = form.billing_existing.options[x].value;
					break;
				}
			}
		}

		if(!type)
			type = 'me';

		for(var i = 0; i < form.billing.length; i++) {
			if(form.billing[i].value == type) {
				form.billing[i].checked = true;
				var elm = form.billing[i];
				while(!/^tr$/i.test(elm.tagName))
					elm = elm.parentNode;
				elm.className = "jt_selected";
			}
			else {
				var elm = form.billing[i];
				while(!/^tr$/i.test(elm.tagName))
					elm = elm.parentNode;
				elm.className = "";
			}
		}

		if(type != "new") {
			form.billing_new_first.value = "";
			form.billing_new_last.value = "";
			form.billing_new_email.value = "";
			form.billing_new_phone.value = "";
			form.billing_new_ext.value = "";
			form.billing_new_fax.value = "";
			form.billing_new_address1.value = "";
			form.billing_new_address2.value = "";
			form.billing_new_city.value = "";
			form.billing_new_zip.value = "";
			form.billing_new_state.selectedIndex = 0;
			form.billing_new_country.selectedIndex = 0;
		}
		if(type != "existing" && form.billing_existing)
			form.billing_existing.selectedIndex = 0;

		document.getElementById("jti_billing_new_fields").style.display = (type == 'new') ? '' : 'none';

	}
}

function jobErrorQuestionChange(form, site, question, location, where) {
	if(location) {
		fieldname = new RegExp("(^s\\d+_q\\d+_loc\\d+$)|(^s\\d+_q\\d+_loc\\d+_)|(^s\\d+_loc\\d+$)|(^s\\d+_loc\\d+_)", "i");
		notfieldname = new RegExp("(^s" + site + "_q\\d+_loc" + location + "$)|(^s" + site + "_q\\d+_loc" + location + "_)|(^s" + site + "_loc" + location + "$)|(^s" + site + "_loc" + location + "_)", "i");
	}
	else {
		fieldname = new RegExp("(^s\\d+_q" + question + "$)|(^s\\d+_q" + question + "_)", "i");
		notfieldname = new RegExp("^s" + site + "_q", "i");
	}

	for(var i = 0; i < form.elements.length; i++) {
		if(form.elements[i].name.match(fieldname) && !form.elements[i].name.match(notfieldname)) {
			if(where == 'all')
				form.elements[i].disabled = true;
			else
				form.elements[i].disabled = false;
		}
	}
}

/* This GUI helper function will tell you whether or not there are any products
 * selected for any given site. Pass a site ID as an integer.
 */
function hasSelectedProducts(site) {
	// I know, this is disgusting.
	return $A($$("input[type=checkbox]")).any(function(e) {
		var t = new RegExp('more_products_' + site + '_');
		return t.test(e.id) && e.checked;
	});
}


function addMembershipInfo(site, board, client) {
	aframe.wait();

	new Ajax.Request('/network/includes/verify_ajax.cfm', {
		method: 'get',
		parameters: { noredirect: 1 },
		onSuccess: function(transport, json, opt) {
			var r = transport.responseText || '';
			if(r.replace(/^\s+|\s+$/g, '').match(/^login$/i)) {
				var url = '/network/jobs/sites/index.cfm' + window.location.search;
				var loginpage = '/network/login/login.cfm?site_id=' + site + '&reqlog=1&goto=' + escape(url);
				window.location = loginpage;
			} else {
				aframe.forward('/network/content/site_member_info.cfm', { parameters: {
					site_id: site,
					board: board,
					client: client || ''
				}});
			}
		},
		onFailure: function() {
			loading.hide();
		}
	});

	return false;
}

function manageInventory(site, board) {
	if(!board || !$('jts_inventory_site' + board))
		window.location.reload();

	loading.setMessage('Just a moment...');
	loading.show();

	// There MIGHT be a query string piece sent along.
	// If there is, convert it into an object, add our own key/value pair
	// for saving the site after login, and convert it back into a string.
	var qs = '';
	if(arguments[2]) {
		o = arguments[2].toQueryParams();
		Object.extend(o, {
			inventorylist: board
		});
		qs = Object.keys(o).collect(function(k) { var val=(typeof(o[k])!='undefined')?o[k]:''; return k + '=' + val; }).join('&');
	}

	new Ajax.Request('/network/content/site_inventory_list.cfm', {
		method: 'get',
		parameters: { noredirect: 1 , site_id: site, board: board },
		onSuccess: function(transport, json, opt) {
			var r = transport.responseText || '';
			if(r.replace(/^\s+|\s+$/g, '').match(/^login$/i)) {
				var url = '/network/jobs/sites/index.cfm?' + qs;
				var loginpage = '/network/login/login.cfm?site_id='+o.site_id+'&reqlog=1&goto='+escape(url);
				window.location = loginpage;
			} else if(r.replace(/^\s+|\s+$/g, '').match(/^jt_inventory_subrequired$/i)) {
				TB_show2('Subscription Required', '/network/content/site_inventory_subrequired.cfm?width=600&height=500&site_id=' + site, null, function() { loading.hide(); }, null, { loading: false } );
			}
			else {
				$('jts_inventory_site' + board).innerHTML = r;
				loading.hide();
			}
		},
		onFailure: function() {
			loading.hide();
		}
	});

	return false;
}


function editInventory(site, board, inventory_id, type, client) {
	aframe.wait();
	//loading.setMessage('Just a moment...');
	//loading.show();

	// There MIGHT be a query string piece sent along.
	// If there is, convert it into an object, add our own key/value pair
	// for saving the site after login, and convert it back into a string.
	var qs = '';
	if(arguments[2]) {
		o = arguments[2].toQueryParams();
		Object.extend(o, {
			editinventory: board
		});
		qs = Object.keys(o).collect(function(k) { var val=(typeof(o[k])!='undefined')?o[k]:''; return k + '=' + val; }).join('&');
	}

	new Ajax.Request('/network/includes/verify_ajax.cfm', {
		method: 'get',
		parameters: { noredirect: 1, board: board, inventory: inventory_id, type: type, client: client },
		onSuccess: function(transport, json, opt) {
			var r = transport.responseText || '';
			if(r.replace(/^\s+|\s+$/g, '').match(/login/i)) {
				var url = '/network/jobs/sites/index.cfm?' + qs;
				var loginpage = '/network/login/login.cfm?site_id='+o.site_id+'&reqlog=1&goto='+escape(url);
				window.location = loginpage;
			} else {
				aframe.forward('/network/content/site_inventory.cfm', { 
					parameters: {
						site_id: site,
						board: board,
						inventory: inventory_id || '',
						type: type || '',
						client: client || ''
					}
				});
			}

		},
		onFailure: function() {
			//loading.hide();
			aframe.unWait();
		}
	});

	return false;
}


function deleteInventory(site, board, inventory_id, type, client) {
	//loading.setMessage('Just a moment...');
	//loading.show();
	
	if(confirm('Are you sure you wish to remove your inventory information for this job board?')) {

		aframe.wait();

		// There MIGHT be a query string piece sent along.
		// If there is, convert it into an object, add our own key/value pair
		// for saving the site after login, and convert it back into a string.
		var qs = '';
		if(arguments[2]) {
			o = arguments[2].toQueryParams();
			Object.extend(o, {
				editinventory: board
			});
			qs = Object.keys(o).collect(function(k) { var val=(typeof(o[k])!='undefined')?o[k]:''; return k + '=' + val; }).join('&');
		}

		new Ajax.Request('/network/functions/site_inventory_delete.cfm', {
			method: 'get',
			parameters: { site_id: site, noredirect: 1 , board: board, inventory: inventory_id, type: type, client: ((client) ? client : '') },
			onSuccess: function(transport, json, opt) {
				var r = transport.responseText || '';
				if(r.replace(/^\s+|\s+$/g, '').match(/^login$/i)) {
					var url = '/network/jobs/sites/index.cfm?' + qs;
					var loginpage = '/network/login/login.cfm?site_id='+o.site_id+'&reqlog=1&goto='+escape(url);
					window.location = loginpage;
				}
				else if(!r.replace(/^\s+|\s+$/g, '').match(/^true$/)) {
					//loading.hide();
					aframe.unWait();
					if($('text_box'))
						$('text_box').value = r;
					errorAlert(r);
				}
				else {
					// I hate to do this.
					if(opt.parameters.site_id == 802) {
						aframe.unWait();
						aframe.close();
						$('db_my_job_boards').contentWindow.document.location.reload();
						return;
					} else {
						if(aframe.win.visible()) {
							aframe.unWait();
							aframe.reload();
						} else {
							document.location.reload();
						}
						//loading.hide();
						//manageInventory(site, board);
					}
				}
			},
			onFailure: function() {
				aframe.unWait();
				//loading.hide();
			}
		});
	}
	
	return false;
}

function siteInventorySave(site, querystring, form, inventory_id, type, client) {
	if(!form) {
		$('jt_info_message').innerHTML = 'Please enter your membership information, or click Cancel.';
	} else {
		aframe.wait();
		var formHash = $(form).serialize({getHash: true});
		var board = formHash.board;
		new Ajax.Request('/network/functions/site_inventory_save.cfm?site_id=' + site + '&inventory=' + ((inventory_id)?inventory_id:'') + '&type=' + ((type)?type:'') + '&client=' + ((client)?client:''), {
			method: 'post',
			parameters: $(form).serialize(),
			onSuccess: function(transport, json, opt) {
				resp = transport.responseText || '';
				if(!resp.match(/^true$/)) {
					aframe.unWait();
					errorAlert(resp);
				}
				else {
					if(site == 802) {
						aframe.unWait();
						aframe.close();
						$('db_my_job_boards').contentWindow.document.location.reload();
						return;
					}

					if(!opt.parameters.inventory && !opt.parameters.board)
						alert('Your inventory information has been sent to your job posting consultant for setup. Please note that there may be a brief delay before your inventory has been configured and verified.');
					
					if(window.location.pathname == '/network/subscriptions/index.cfm' || window.location.pathname == '/network/jobs/sites/index.cfm')
						window.location.reload();
					else
						aframe.back();
				}
			},
			onFailure: function() {
				aframe.unWait();
				alert("I couldn't reach the information service for this site. Please try again in a moment.");
			}
		});
	}

	return false;
}


function siteInventorySiteSelect(site, inventory, type, client, board) {
	aframe.reload({ method: 'get', parameters: { site_id: site, inventory: inventory, type: type, client: client, board: board, boardselect: ((board) ? '1' : '') } });
}

function manageInventoryAndMembership(site, board, client) {
	aframe.wait();

	var qs = '';
	if(arguments[2]) {
		o = arguments[2].toQueryParams();
		Object.extend(o, {
			editinventory: board
		});
		qs = Object.keys(o).collect(function(k) { var val=(typeof(o[k])!='undefined')?o[k]:''; return k + '=' + val; }).join('&');
	}

	new Ajax.Request('/network/includes/verify_ajax.cfm', {
		method: 'get',
		parameters: { noredirect: 1 },
		onSuccess: function(transport, json, opt) {
			var r = transport.responseText || '';
			if(r.replace(/^\s+|\s+$/g, '').match(/^login$/i)) {
				var url = '/network/jobs/sites/index.cfm' + window.location.search;
				var loginpage = '/network/login/login.cfm?site_id=' + site + '&reqlog=1&goto=' + escape(url);
				window.location = loginpage;
			} else {
				aframe.forward('/network/content/site_inventory_membership_list.cfm', { parameters: {
					site_id: site,
					board: board,
					client: client || ''
				}});
			}
		},
		onFailure: function() {
			aframe.close();
		}
	});

	return false;
}


function clientSelect(site) {
	loading.setMessage('Just a moment...');
	loading.show();

	new Ajax.Request('/network/includes/verify_ajax.cfm', {
		method: 'get',
		parameters: { noredirect: 1 },
		onSuccess: function(transport, json, opt) {
			var r = transport.responseText || '';
			if(r.replace(/^\s+|\s+$/g, '').match(/^login$/i)) {
				var loginpage = '/network/login/login.cfm?site_id='+site+'&reqlog=1&goto='+escape(url);
				window.location = loginpage;
			} else {
				TB_show2('Select a Client', '/network/content/clientselect.cfm?site_id=' + site + '&width=600&height=500', null, function() { loading.hide(); }, null, { loading: false } );
			}
		},
		onFailure: function() {
			loading.hide();
		}
	});

	return false;
}

function clientSelectChoose(site, client, goto) {
	loading.setMessage('Just a moment...');
	loading.show();

	new Ajax.Request('/network/functions/clientselect.cfm', {
		method: 'get',
		parameters: { noredirect: 1, client: client, site_id: site, gotov: goto || false },
		onSuccess: function(transport, json, opt) {
			var goto = opt.parameters.gotov;
			var r = transport.responseText || '';
			if(r.replace(/^\s+|\s+$/g, '').match(/^login$/i)) {
				var loginpage = '/network/login/login.cfm?site_id='+site+'&reqlog=1&goto='+escape(window.location);
				window.location = loginpage;
			}
			else if(!r.match(/^true$/)) {
				loading.hide();
				errorAlert(r);
			} 
			else {
				if(goto) 
					window.location = goto;
				else
					window.location.reload();
			}
		},
		onFailure: function() {
			loading.hide();
		}
	});
}

function jobStatusLinkGet(site, job) {
	$('jti_status_link_' + job).innerHTML = '<div class="jts_loading"><img style="border: none; display: inline; margin: 5px 0 0 0;" src="/images/waiting.gif" alt="Please wait..." /><div>Generating status link...</div></div>';
	$('jti_status_link_' + job).style.display = '';

	new Ajax.Request('/network/functions/jobstatuslink_generate.cfm', {
		method: 'get',
		parameters: { site_id: site, job: job },
		onSuccess: function(transport, json, opt) {
			var r = transport.responseText || '';
			if(r.replace(/^\s+|\s+$/g, '').match(/^login$/i)) {
				var loginpage = '/network/login/login.cfm?site_id='+site+'&reqlog=1&goto='+escape(window.location);
				window.location = loginpage;
			}
			else if(r.match(/<li>/i)) {
				$('jti_status_link_' + job).style.display = 'none';
				errorAlert("<li>" + r + "</li>");
			} 
			else {
				$('jti_status_link_' + job).innerHTML = '<div class="jts_link"><span class="jts_name">Status Link:</span>' + r + '</div>';
			}
		},
		onFailure: function() {
			$('jti_status_link_' + job).style.display = 'none';
			errorAlert("<li>There was an error generating the job status link. Please refresh the page and try again.</li>");
		}
	});

	return false;
}

function selectClientFull(site, client, goto) {
	loading.setMessage('Loading account...');
	loading.show();
	window.location = '/network/company/clients/select.cfm?site_id=' + site + '&client=' + client + '&goto=' + ((goto) ? goto : '');

	return false;
}

function reportIncorrectCost(rcenter, site) {
	loading.setMessage('Reporting this site\'s cost as incorrect... Wait just a moment.');
	loading.show();

	new Ajax.Request('/network/functions/public/incorrect_cost_report.cfm', {
		method: 'get',
		parameters: { rcenter: rcenter, site: site },
		onSuccess: function(transport, json, opt) {
			$('jt_send_report_'+opt.parameters.site).hide();
			var response = transport.response.responseText || '';
			message.setMessage('This site\'s cost has been reported as incorrect.');
			message.setDelay(3000);
			message.show();
		},
		onFailure: function() {
			message.setMessage('An error was encountered while saving the report. Try again in a moment.');
			message.show();
		}
	});
}

function showProducts(site) {
	if($('jt_products_link_'+site) && $('jt_products_'+site)) {
		var link = $('jt_products_link_'+site);
		var box = $('jt_products_'+site);

		//box.setStyle({ position: 'absolute', zIndex: 500, backgroundColor: 'white' });
		//box.clonePosition(link, { setLeft: true, setTop: true, setWidth: false, setHeight: false, offsetLeft: -21, offsetTop: -21 });
		var co = link.cumulativeOffset();
		box.setStyle({ top: (co[1]-21)+'px', left:(co[0]-21)+'px' });

		box.show();
	}
}

function sendReport(site) {
	if($('jt_send_report_link_'+site) && $('jt_send_report_'+site)) {
		var link = $('jt_send_report_link_'+site);
		var box = $('jt_send_report_'+site);

		var co = link.cumulativeOffset();
		box.setStyle({ top: (co[1]-21)+'px', left:(co[0]-42)+'px' });

		box.show();
	}
}

function itemGrossCostChange(form) { 
	items = $$('input.jt_adjustment');
	total = 0;

	for(x = 0; x < items.length; x++) {
		total += (/^[\d\.\s]+$/.test(items[x].value)) ? parseFloat(items[x].value.replace(/\s/, '')) : 0;
	}

	$('jt_total_gross').innerHTML = dollarformat(total);
}

var loading;
var message;
var aframe;

Event.observe(window, 'load', function() {
	loading = Dialog.create(DIALOG_LOADING);
	message	= Dialog.create(DIALOG_MESSAGE);
});

function currencyformat(cost, currency, code) {
	var ret = cost;

	switch(currency) {
		case "usd" :
			ret = dollarformat(cost) + ((code) ? ' USD' : '');
			break;
		case "cad" :
			ret = dollarformat(cost) + ((code) ? ' CAD' : '');
			break;
		case "aud" :
			ret = dollarformat(cost) + ((code) ? ' AUD' : '');
			break;
		case "eur" :
			ret = dollarformat(cost).toString().replace(/\$/g, '&euro;') + ((code) ? ' EUR' : '');
			break;
		case "gbp" :
			ret = dollarformat(cost).toString().replace(/\$/g, '&pound;') + ((code) ? ' GBP' : '');
			break;
	}

	return ret;
}