function centerChildWindow( child_window ) { 

	if ( !window.WindowGeometry ) { return; }
	
	var child_geometry = new WindowGeometry( child_window );
	var parent_geometry = new WindowGeometry( child_window.opener );
	
	var final_x = ( parent_geometry.getWindowX() + ( parent_geometry.getViewportWidth() / 2 ) ) - ( child_geometry.getViewportWidth() / 2 );
	var final_y = ( parent_geometry.getWindowY() + ( parent_geometry.getViewportHeight() / 2 ) ) - ( child_geometry.getViewportHeight() / 2 );	
	
	child_window.moveTo( final_x, final_y );
	
}


var defaultWhatText = 'Enter Job Title or Keyword';
var defaultWhereText = 'Enter City or Zip (optional)';

function prepValue( string ) {

	var return_string = string;
	return_string = return_string.replace(/\&/g, '\&amp\;');
	return_string = return_string.replace(/\"/g, '\&quot\;');
	return_string = return_string.replace(/\</g, '\&lt\;');
	return_string =return_string.replace(/\>/g, '\&gt\;');
	
	return return_string;

}

function newQuery( defaultWhat, defaultWhere ) {
	
	var newRequestNum = requestNum + 1;
	
	var target = document.getElementById( 'salary_query_' + requestNum );
	
	if ( !target.innerHTML ) { return ''; }
	
	var template = target.cloneNode( true );
	
	template.id = 'salary_query_' + newRequestNum;
	template.className = 'query_' + newRequestNum;
	
	template.innerHTML = processQuery( template.innerHTML, requestNum, newRequestNum );	
	
	return template;

	
}


function addQuery() {
		
	if ( requestNum >= 13 ) { return; }

	var defaultWhatInput = document.getElementById( 'q' + requestNum )
	
	if ( defaultWhatInput ) { var defaultWhat = defaultWhatInput.value; } 
	
	var defaultWhere = document.getElementById( 'l' + requestNum ).value;
				
	var placeHolder = document.createElement('div');
	placeHolder.appendChild( newQuery( defaultWhat, defaultWhere ) );	
				
	var new_query = document.getElementById('salary_queries').appendChild( placeHolder.childNodes[0] );
	initInput( new_query.getElementsByTagName('input')[0], defaultWhatText );
	initInput( new_query.getElementsByTagName('input')[1], defaultWhereText );
	
	new_query.getElementsByTagName('input')[0].select();
	
	requestNum++;
	updateNumQueries();
	
	if ( requestNum >= 13 ) { document.getElementById('add_comparison').style.display = 'none'; }

}


function removeAllChildNodes( element ) {

	for ( var i = ( element.childNodes.length - 1 ); i >=0; i-- ) {
	
		element.removeChild( element.childNodes[i] );
	
	}	

}


function processQuery( query_string, old_index, new_index ) {
	
	var new_query_string = query_string;
	
	new_query_string = new_query_string.replace( new RegExp('q' + old_index, 'gi' ), 'q' + new_index );
	new_query_string = new_query_string.replace( new RegExp('l' + old_index, 'gi' ), 'l' + new_index );
	new_query_string = new_query_string.replace( new RegExp('Job ' + old_index ), 'Job ' + new_index );										
	new_query_string = new_query_string.replace( new RegExp("removeQuery\\(" + old_index + "\\)", 'g' ), "removeQuery(" + new_index  + ")" );
	
	return new_query_string;
	
}


function removeQuery( index ) {

	if ( requestNum <= 1 ) { return; }

	var query = document.getElementById( 'salary_query_' + index );
	
	if ( query ) {
					
		query.parentNode.removeChild( query );
		
		var node;
		var new_index = parseInt( index ) + 1;
		
		
		while ( node = document.getElementById('salary_query_' + new_index ) ) {
			
			node.id = 'salary_query_' + (new_index - 1);
			node.className = 'query_' + (new_index - 1);
			
			var placeHolder = document.createElement('fieldset');
			placeHolder.innerHTML = processQuery( node.innerHTML, new_index, new_index - 1)
								
			removeAllChildNodes( node );
			
			for ( var i = (placeHolder.childNodes.length - 1); i >= 0; i-- ) {

				node.insertBefore( placeHolder.childNodes[i], node.firstChild );
			
			}
			
			new_index++;
		
		}
		
		requestNum--;
		updateNumQueries();
		
		if ( requestNum < 13 ) { document.getElementById('add_comparison').style.display = ''; }
	
	}

}


function updateNumQueries(  ) {

	document.getElementById('salary_query').className = 'num_queries_' + requestNum;

}


function toTitleCase() {

	if ( typeof arguments[0] == 'string' ) {
	
		var return_value = arguments[0].split( ' ' );
		
		for ( var i = 0; i < return_value.length; i++ ) {
							
			return_value[i] = return_value[i].substring(0,1).toUpperCase() + return_value[i].substring(1).toLowerCase();
			
			if ( ( return_value[i].match(/^(\.NET|ABAP|ACS|ADZ|AJAX|ASP|CAD|CATIA|CICS|CDL|CEO|CFO|CIO|COO|CNA|CNC|CPA|CPS|CSS|CTO|DB|DBA|EMT|ESL|ETL|GIS|GUI|HHA|HR|HRIS|HVAC|HTML|IBM|IR|IT|J2EE|LAN|LPN|LVN|MRI|OA|OT|PA|PACS|PBX|PC|PHP|PL|PM|PT|QA|QC|RN|SAN|SAP|SAS|SQL|VP|VB\.NET|WSNA)(\,)?$/i) != null ) || return_value[i].length <= 2 ) {
			
				return_value[i] = return_value[i].toUpperCase();
			
			}
		
			if ( return_value[i].match(/^(in|at|of|the|a)$/i) != null ) {
			
				return_value[i] = return_value[i].toLowerCase();
				
			}
			
			if ( return_value[i].match(/^(Ph\.?D\.?)$/i) != null ) {
			
				return_value[i] = 'Ph.D.';
				
			}
			
			
		}
		
		// Ensure the first word is caplitalized, even if it is a,of,the, etc.
		return_value[0] = return_value[0].substring(0,1).toUpperCase() + return_value[0].substring(1);
			
		return return_value.join( ' ' );
			
	}

}


function urlUnescape(s) {
	s = s.replace(/\+/g," ");
	return unescape(s);
}

var urlencode = window.encodeURIComponent ? 
	function ( str ) { return window.encodeURIComponent(str).replace(/%20/g,'+') } : 
	function ( str ) { return escape(str).replace(/\+/g,'%2B').replace(/\//g,'%2F').replace(/%20/g,'+'); 
}


function showInPopup( href ) {
	
	var popup_width = 600;
	var popup_height = 400;
	
	if ( window.WindowGeometry ) {
			
		var parent_geometry = new WindowGeometry( window );
			
		var final_x = ( parent_geometry.getWindowX() + ( parent_geometry.getViewportWidth() / 2 ) ) - ( popup_width / 2 );
		var final_y = ( parent_geometry.getWindowY() + ( parent_geometry.getViewportHeight() / 2 ) ) - ( popup_height / 2 );	
	}
	
	else {
					
		final_x = 0;
		final_y = 0;
	
	}

	var new_win = window.open( href, 'about', 'height=' + popup_height + ',width=' + popup_width + ',top=' + final_y + ',left=' +  final_x + 'menu,toolbar,status,resizable,location,scrollbars' );
		
	new_win.focus();

}


function clearAllTextInputs( element  ) {

	for ( var i = 0, inputs = element.getElementsByTagName('input'); i < inputs.length; i++ ) {
	
		if ( inputs[i].type == 'text' ) { inputs[i].value = ''; inputs[i].setAttribute('value', ''); }
	
	}

}

function procChange( element, defaultText ) {

	element.setAttribute( 'value', element.value );
	return;
	
	procBlur( element, defaultText );

}

function procBlur( element, defaultText ) {

	return;
	
	if ( element.value == '' ) {
	
		element.value = defaultText;
		element.setAttribute( 'value', defaultText );
		addClass( element, 'default' );
	
	}
	

}

function procFocus( element, defaultText ) {

	return;
	
	if ( element.value == defaultText ) {
	
		element.value = '';
		element.setAttribute( 'value', '' );
		removeClass( element, 'default' );
	
	}
	
	else {
	
		element.select();
	
	}
	

}


function initInput( element, defaultText ) {

	return;
	
	procBlur( element, defaultText );

}

function procFormInputs( form ) {
	
	return;

	for ( var i = 0; i < form.elements.length; i++ ) {
	
		if ( form.elements[i].tagName.toLowerCase() == 'fieldset' ) { continue; }
		
		if ( form.elements[i].name ) {
		
			if ( form.elements[i].name.match(/q[0-9]+/) && form.elements[i].value == defaultWhatText  ) {
			
				form.elements[i].value = '';
				form.elements[i].setAttribute('value', '' );
			
			}
			
			else if ( form.elements[i].name.match(/l[0-9]+/) && form.elements[i].value == defaultWhereText ) {
			
				form.elements[i].value = '';
				form.elements[i].setAttribute('value', '' );
			
			}
		}
	}

}

function redirect(url,s) { if (!s) s=''; return '/url?q='+urlencode('http'+s+'://'+url); }
function salarycom(ttl,lat,lon,state,zip) { return redirect('indeed.salary.com/salarywizard/layoutscripts/swzl_indeed.asp?lat='+lat+'&lon='+lon+'&statecode='+state+'&zip='+zip+'&q='+urlencode(ttl)); }
/* for payscale.com, use src=2403-A for United States, src=2403-B for Canada. */
function payscale(ttl,city,state,country) { return redirect('www.payscale.com/af/indeed/?af=2403&src='+(country=='Canada'?'2403-B':'2403-A')+'&job='+urlencode(ttl)+'&city='+urlencode(city)+'&state='+state); }




function windowShade( element, options ) {

	element.windowshadeTarget = document.getElementById(  element.href.slice( element.href.lastIndexOf('#') + 1 ) );
	
	
	element.isOpen = function() {
	
		return this.windowshadeTarget.style.display == '';
	
	}
	
	element.open = function() {
	
		this.windowshadeTarget.style.display = '';
		addClass( this, 'windowshade_selected' );
		
		if ( options && options.onopen ) { options.onopen(); }
		
	}
	
	element.close = function() {
	
		this.windowshadeTarget.style.display = 'none';
		removeClass( this, 'windowshade_selected' );
	
	}
	
	element.toggle = function() {

		return this.isOpen() ? this.close() : this.open();
	
	}
	
	element.onclick = function() { this.toggle(); return false; }
	
	if ( window.location.hash.slice(1) == element.href.slice( element.href.lastIndexOf('#') + 1 ) ) {
	
		element.open();
	
	}

}

	function simpleToggle( label, target, actions ) {

		if ( target.style.display == 'none' ) {

			target.style.display = '';
			label.className = 'open';
			if ( actions && actions.onopen ) { actions.onopen(); }

		}

		else {

			target.style.display = 'none';
			label.className = 'closed';
			if ( actions &&  actions.onclose ) { actions.onclose(); }
		}

	}


	function getFormValuesAsObject(form) {

		var args = {};

		for ( var i = 0; i < form.elements.length; i++ ) {

			input = form.elements[i];

			if ( input.disabled ) { continue; }

			switch (input.type) {

				case 'text':
				case 'hidden':
				case 'password':
				case 'textarea':
				case 'submit':
				case 'file':
					args[input.name] = trim( input.value );
					break;

				case 'select-one':
					args[input.name] = input.options[input.selectedIndex].value;
					break;

				case 'select-multiple':
					for ( var j = 0; j < input.options.length; j++ ) {

						if ( input.options[j].selected ) {

							args[input.name] = input.options[j].value;

						}

					}

					break;

				case 'radio':
				case 'checkbox':
					if ( input.checked ) {
						args[input.name] = input.value;
					}
					break;

			}
		}

		return args;
	}


	function trim( str ) {

		return str.replace( /^\s*/, '' ).replace( /\s*$/, '');

	}


	function createQueryStringFromObj( args ) {

		encoded_args = [];

		for ( var arg in args ) {

			encoded_args[encoded_args.length] = urlencode( arg ) + '=' + urlencode( args[arg] );

		}

		return '?' + encoded_args.join('&');

	}

	function genericEmailForm( form, sts, rpc_base ) {

		if ( !hasAjax() ) { alert('Sorry, your browser does not support this feature.'); return; }

		var args = getFormValuesAsObject( form );

		var sts = document.getElementById( sts );

		if ( !sts ) {
			sts = document.createElement('div');
			sts.id = sts;
			sts.className = 'email_job_sts';
			form.parentNode.insertBefore( sts, form );
		}

		function sendemail_success( msg ) {

			sts.style.display = '';
			sts.innerHTML = '<p>Your email to <b>' + args.toEmail + '</b>  has been sent! </p>';

			form.style.display = 'none';

			var again = document.createElement('a');
			again.href = '#';
			again.onclick = function () { sts.innerHTML = ''; form.style.display = ''; form.toEmail.value = args.toEmail; form.fromEmail.value = args.fromEmail;  form.comments.value = ''; setTimeout( function( ) { form.toEmail.select(); }, 0 ); return false; }

			sts.firstChild.appendChild( again );

			again.innerHTML = 'Send another email';
			again.focus();

		}

		function sendemail_errors( errors ) {

			var error_msg = '';

			for ( error in errors ) {

				error_msg += '<li>' + errors[error] + '</li>';
			}

			sts.style.display = '';
			sts.innerHTML = '<ul class="error_msg">' + error_msg + '</ul>';

		}

		sendRequest( rpc_base + createQueryStringFromObj( args ), form.method, function( response ) { if ( response.readyState != 4 || response.responseText == '' ) { return; } eval( response.responseText ); });

	}
