/*
 * add_table_row
 */
function add_table_row (table_id)
{
	var table = document.getElementById(table_id);
	var row_number = table.rows.length;
	var cell_count = 0;

	var iteration = 0;
	for (var i = 0; i <= table.rows.length; i++)
	{
		if (table.rows[i])
		{
			if (table.rows[i].id.substring(0, 3) == 'row' && parseInt(table.rows[i].id.substring(3)) >= iteration)
			{
				iteration = parseInt(table.rows[i].id.substring(3)) + 1;
			}
			if (table.rows[i].id.substring(0, 6) == 'subrow' && parseInt(table.rows[i].id.substring(6)) >= iteration)
			{
				iteration = parseInt(table.rows[i].id.substring(6)) + 1;
			}
		}
	}

	// city mappings
	if (table_id == 'mappings')
	{
		var new_row = table.insertRow(row_number);
		new_row.id = 'row' + iteration;
		new_row.className = iteration % 2 ? 'even' : 'odd';

		var left_cell = new_row.insertCell(cell_count++);
		var left_input = document.createElement('input');
		left_input.type = 'text';
		left_input.name = 'city_mappings[' + iteration + '][original_city_name]';
		left_input.size = 30;
		left_cell.appendChild(left_input);

		var middle_cell = new_row.insertCell(cell_count++);
		var middle_input = document.createElement('select');
		middle_input.name = 'city_mappings[' + iteration + '][correct_country_code]';
		middle_input.id = 'city_mappings[' + iteration + '][correct_country_code]';
		if (document.all)
		{
			middle_input.onchange = function(){ajax_get_cities(this.value, 'city_mappings[' + iteration + '][correct_city_id]', '?a=ajax&b=cities', 'GET');};
		}
		else
		{
			middle_input.setAttribute('onchange', "ajax_get_cities(this.value, 'city_mappings[" + iteration + "][correct_city_id]', '?a=ajax&b=cities', 'GET');");
		}
		middle_input.style.width = '250px';
		middle_cell.appendChild(middle_input);
		middle_cell.appendChild(document.createElement('br'));
		ajax_get_countries('city_mappings[' + iteration + '][correct_country_code]', '?a=ajax&b=countries', 'GET', false);

		var middle_input = document.createElement('select');
		middle_input.name = 'city_mappings[' + iteration + '][correct_city_id]';
		middle_input.id = 'city_mappings[' + iteration + '][correct_city_id]';
		middle_input.style.width = '250px';
		middle_cell.appendChild(middle_input);
		middle_cell.appendChild(document.createElement('br'));

		var right_cell = new_row.insertCell(cell_count++);
		right_cell.className = 'icons';
		right_cell.innerHTML = '<a href="javascript: void(0);" onclick="remove_table_row(\'' + table_id + '\', \'row' + iteration + '\'); return false;"><img src="../images/buttons/delete.png" alt="Remove" title="Remove" /></a>';
	}
	// airline platings
	else if (table_id == 'platings')
	{
		var new_row = table.insertRow(row_number);
		new_row.id = 'row' + iteration;
		new_row.className = iteration % 2 ? 'even' : 'odd';

		var airline_dropdown = document.getElementById('airlines');
		var airline_code = airline_dropdown.options[airline_dropdown.selectedIndex].value

		var left_cell = new_row.insertCell(cell_count++);
		var left_input = document.createElement('input');
		left_input.type = 'hidden';
		left_input.value = airline_code;
		left_input.name = 'general_settings[air][airline_plating][airlines][]';
		left_cell.appendChild(left_input);
		left_cell.appendChild(document.createTextNode(airline_code));

		var right_cell = new_row.insertCell(cell_count++);
		right_cell.className = 'icons';
		right_cell.innerHTML = '<a href="javascript: void(0);" onclick="remove_table_row(\'' + table_id + '\', \'row' + iteration + '\'); return false;"><img src="../images/buttons/delete.png" alt="Remove" title="Remove" /></a>';
	}
	// airline renamings
	else if (table_id == 'renamings')
	{
		var new_row = table.insertRow(row_number);
		new_row.id = 'row' + iteration;
		new_row.className = iteration % 2 ? 'even' : 'odd';

		var cell1 = new_row.insertCell(cell_count++);
		var input1 = document.createElement('input');
		input1.type = 'text';
		input1.size = 2;
		input1.maxLength = 2;
		input1.name = 'rename[' + iteration + '][codes][old]';
		cell1.appendChild(input1);

		var cell2 = new_row.insertCell(cell_count++);
		var input2 = document.createElement('input');
		input2.type = 'text';
		input2.size = 2;
		input2.maxLength = 2;
		input2.name = 'rename[' + iteration + '][codes][new]';
		cell2.appendChild(input2);

		var cell3 = new_row.insertCell(cell_count++);
		cell3.innerHTML = '<a href="javascript: void(0);" onclick="remove_table_row(\'' + table_id + '\', \'row' + iteration + '\'); return false;"><img src="../images/buttons/delete.png" alt="Remove" title="Remove" width="16" height="16" /></a>';


		var table1 = document.createElement('table');
		table1.id = 'renamings_classes' + (iteration + 1);
		var t1row0 = table1.insertRow(0);
		t1row0.id = 'subrow' + iteration;

		var t1r1cell0 = t1row0.insertCell(0);
		var input4 = document.createElement('input');
		input4.type = 'text';
		input4.size = 1;
		input4.maxLength = 1;
		input4.name = 'rename[' + iteration + '][classes][0][old]';
		t1r1cell0.appendChild(input4);

		var t1r1cell1 = t1row0.insertCell(1);
		var input5 = document.createElement('input');
		input5.type = 'text';
		input5.size = 1;
		input5.maxLength = 1;
		input5.name = 'rename[' + iteration + '][classes][0][new]';
		t1r1cell1.appendChild(input5);

		var t1r1cell2 = t1row0.insertCell(2);
		t1r1cell2.innerHTML = '<a href="javascript: void(0);" onclick="remove_table_row(\'renamings_classes' + (iteration + 1) + '\', \'subrow' + iteration + '\'); return false;"><img src="../images/buttons/delete.png" alt="Remove" title="Remove" width="16" height="16" /></a>';

		var cell4 = new_row.insertCell(cell_count++);
		cell4.colSpan = 3;
		cell4.appendChild(table1);


		var cell5 = new_row.insertCell(cell_count++);
		cell5.style.verticalAlign = 'bottom';
		cell5.style.paddingBottom = '4px';
		cell5.innerHTML = '<a href="javascript: void(0);" onclick="add_table_row(\'renamings_classes'  + (iteration + 1) + '\'); return false;"><img src="../images/buttons/add.png" alt="Add" title="Add" width="16" height="16" /></a>';
	}
	// airline renaming classes
	else if (table_id.substring(0, 17) == 'renamings_classes')
	{
		var new_row = table.insertRow(row_number);
		new_row.id = 'subrow' + iteration;

		var table_number = parseInt(table.id.substring(17));

		var cell1 = new_row.insertCell(cell_count++);
		var input1 = document.createElement('input');
		input1.type = 'text';
		input1.size = 1;
		input1.maxLength = 1;
		input1.name = 'rename[' + table_number + '][classes][' + iteration + '][old]';
		cell1.appendChild(input1);

		var cell2 = new_row.insertCell(cell_count++);
		var input2 = document.createElement('input');
		input2.type = 'text';
		input2.size = 1;
		input2.maxLength = 1;
		input2.name = 'rename[' + table_number + '][classes][' + iteration + '][new]';
		cell2.appendChild(input2);

		var cell3 = new_row.insertCell(cell_count++);
		cell3.innerHTML = '<a href="javascript: void(0);" onclick="remove_table_row(\'renamings_classes' + table_number + '\', \'subrow' + iteration + '\'); return false;"><img src="../images/buttons/delete.png" alt="Remove" title="Remove" /></a>';
	}
	// airline renaming classes
	else if (table_id == 'renaming_hidden')
	{
		var new_row = table.insertRow(row_number);
		new_row.id = 'row' + iteration;
		new_row.className = iteration % 2 ? 'even' : 'odd';

		var cell1 = new_row.insertCell(cell_count++);
		cell1.className = 'center';
		var input1 = document.createElement('input');
		input1.type = 'text';
		input1.size = 2;
		input1.maxLength = 2;
		input1.name = 'hide[' + iteration + '][code]';
		cell1.appendChild(input1);

		var cell2 = new_row.insertCell(cell_count++);
		cell2.className = 'center';
		var input2 = document.createElement('input');
		input2.type = 'checkbox';
		input2.name = 'hide[' + iteration + '][class]';
		cell2.appendChild(input2);

		var cell3 = new_row.insertCell(cell_count++);
		cell3.className = 'center';
		var input3 = document.createElement('input');
		input3.type = 'checkbox';
		input3.name = 'hide[' + iteration + '][fare_basis]';
		cell3.appendChild(input3);

		var cell4 = new_row.insertCell(cell_count++);
		cell4.className = 'icons';
		cell4.innerHTML = '<a href="javascript: void(0);" onclick="remove_table_row(\'' + table_id + '\', \'row' + iteration + '\'); return false;"><img src="../images/buttons/delete.png" alt="Remove" title="Remove" /></a>';
	}
	// tax names
	else if (table_id == 'tax_names')
	{
		var new_row = table.insertRow(row_number);
		new_row.id = 'row' + iteration;
		new_row.className = iteration % 2 ? 'even' : 'odd';
		new_row.className += ' padding';

		var cell1 = new_row.insertCell(cell_count++);
		var input1 = document.createElement('input');
		input1.type = 'text';
		input1.size = 2;
		input1.maxLength = 2;
		input1.name = 'tax_names[' + iteration + '][code]';
		cell1.appendChild(input1);

		var cell2 = new_row.insertCell(cell_count++);
		var input2 = document.createElement('input');
		input2.type = 'text';
		input2.size = 40;
		input2.maxLength = 150;
		input2.name = 'tax_names[' + iteration + '][name]';
		cell2.appendChild(input2);

		var cell3 = new_row.insertCell(cell_count++);
		var select3 = document.createElement('select');
		select3.name = 'tax_names[' + iteration + '][country]';
		select3.id = 'tax_names[' + iteration + '][country]';
		cell3.appendChild(select3);
		ajax_get_countries('tax_names[' + iteration + '][country]', '?a=ajax&b=countries', 'GET', false);

		var cell4 = new_row.insertCell(cell_count++);
		cell4.innerHTML = '<a href="javascript: void(0);" onclick="remove_table_row(\'' + table_id + '\', \'row' + iteration + '\'); return false;"><img src="../images/buttons/delete.png" alt="Remove" title="Remove" /></a>';
	}
	// airline classes
	else if (table_id == 'airline_class')
	{
		var new_row = table.insertRow(row_number);
		new_row.id = 'row' + iteration;
		new_row.className = iteration % 2 ? 'even' : 'odd';

		var cell1 = new_row.insertCell(cell_count++);
		var input1 = document.createElement('input');
		input1.type = 'text';
		input1.size = 2;
		input1.maxLength = 2;
		input1.name = 'entries[' + iteration + '][airline]';
		cell1.appendChild(input1);

		var cell2 = new_row.insertCell(cell_count++);
		var select2 = document.createElement('select');
		select2.name = 'entries[' + iteration + '][class]';
		var first_option = document.createElement('option');
		first_option.text = 'first';
		first_option.value = 'first';
		var business_option = document.createElement('option');
		business_option.text = 'business';
		business_option.value = 'business';
		var economy_option = document.createElement('option');
		economy_option.text = 'economy';
		economy_option.value = 'economy';
		try
		{
			// standards compliant; doesn't work in IE
			select2.add(first_option, null);
			select2.add(business_option, null);
			select2.add(economy_option, null);
		}
		catch (ex)
		{
			// IE only
			select2.add(first_option);
			select2.add(business_option);
			select2.add(economy_option);
		}
		cell2.appendChild(select2);

		var cell3 = new_row.insertCell(cell_count++);
		var input3 = document.createElement('input');
		input3.type = 'text';
		input3.size = 16;
		input3.maxLength = 64;
		input3.name = 'entries[' + iteration + '][letters]';
		cell3.appendChild(input3);

		var cell4 = new_row.insertCell(cell_count++);
		cell4.innerHTML = '<a href="javascript: void(0);" onclick="remove_table_row(\'' + table_id + '\', \'row' + iteration + '\'); return false;"><img src="../images/buttons/delete.png" alt="Remove" title="Remove" /></a>';
	}
	// hidden hotels
	else if (table_id == 'hidden_hotel')
	{
		var new_row = table.insertRow(row_number);
		new_row.id = 'row' + iteration;
		new_row.className = table_id == 'inbound' ? 'even' : 'odd';

		var left_select = provider_select.cloneNode(true);
		left_select.name = 'hotels[' + iteration + '][provider_id]';
		var left_cell = new_row.insertCell(cell_count++);
		left_cell.appendChild(left_select);

		var middle_input = document.createElement('input');
		middle_input.type = 'text';
		middle_input.name = 'hotels[' + iteration + '][hotel_id]';
		middle_input.size = 15;
		var middle_cell = new_row.insertCell(cell_count++);
		middle_cell.appendChild(middle_input);

		var right_cell = new_row.insertCell(cell_count++);
		right_cell.className = 'icons';
		right_cell.innerHTML = '<a href="javascript: void(0);" onclick="remove_table_row(\'' + table_id + '\', \'row' + iteration + '\'); return false;"><img src="../images/buttons/delete.png" alt="Remove" title="Remove" /></a>';
	}
	// airport search dropdown
	else
	{
		var new_row = table.insertRow(row_number);
		new_row.id = 'row' + iteration;
		new_row.className = table_id == 'inbound' ? 'even' : 'odd';

		var left_cell = new_row.insertCell(cell_count++);
		left_cell.className = 'compress';
		var left_input = document.createElement('input');
		left_input.type = 'text';
		left_input.name = table_id + '[' + iteration + '][code]';
		left_input.size = 3;
		left_cell.appendChild(left_input);

		var middle_cell = new_row.insertCell(cell_count++);
		var middle_input = document.createElement('input');
		middle_input.type = 'text';
		middle_input.name = table_id + '[' + iteration + '][text]';
		middle_input.size = 25;
		middle_input.style.width = '98%';
		middle_cell.appendChild(middle_input);

		var right_cell = new_row.insertCell(cell_count++);
		right_cell.className = 'icons';
		right_cell.innerHTML = '<a href="javascript: void(0);" onclick="remove_table_row(\'' + table_id + '\', \'row' + iteration + '\'); return false;"><img src="../images/buttons/delete.png" alt="Remove" title="Remove" /></a>';
	}
}


/*
 * autojump_onkeydown
 *
 */
var last_element;
function autojump_onkeydown (id)
{
	last_element = document.getElementById(id);
	last_element.lastvalue = last_element.value;
}


/*
 * autojump_onkeyup
 *
 */
function autojump_onkeyup (id, next_element, max_length)
{
	var current_element = document.getElementById(id);
	if (last_element == current_element && current_element.value != current_element.lastvalue && current_element.value.length >= max_length)
	{
		document.getElementById(next_element).focus();
	}
	last_element = null;
}


/*
 * check_all_options
 *  will check all the option elements of the enabled and priority select boxes
 */
function check_all_options (options)
{
	for (var i = 0; i < options.length; i++)
	{
		var select_list = document.getElementById(options[i]);
		for (var j = select_list.length - 1; j >= 0; j--)
		{
			select_list.options[j].selected = true;
		}
	}

	return true;
}
function encode_regex (string)
{
	return string.replace(/([.*+?^${}()|[\]\/\\])/g, '\\$1')
}


/*
 * check_all_boxes
 *  will check/uncheck all boxes in the given form based on the fieldname provided
 */
function check_all_boxes (form_name, field_name, is_checked)
{
	var regex = new RegExp('^' + encode_regex(field_name) + '.*');
	var form_element = document.getElementById(form_name);
	for (i = 0; i < form_element.elements.length; i++)
	{
		if (form_element.elements[i].type == 'checkbox' && regex.test(form_element.elements[i].name))
		{
			form_element.elements[i].checked = is_checked ? true : false;
		}
	}
}


/*
 * close_window
 *  this closes a window and if given will change the parent window's location
 */
function close_window (location)
{
	window.close();
	window.opener.location.href = location;
}


/*
 * display_children
 *  hides/shows the children input boxes on the search page
 */
function display_children (amount, i)
{
	var child_ages = document.getElementById('child_ages' + i);
	var child_age1 = document.getElementById('child_age1' + i);
	var child_age2 = document.getElementById('child_age2' + i);
	var child_age3 = document.getElementById('child_age3' + i);
	var child_age4 = document.getElementById('child_age4' + i);

	// make them hidden by default
	child_ages.style.display = 'none';
	child_age1.style.display = 'none';
	child_age2.style.display = 'none';
	child_age3.style.display = 'none';
	child_age4.style.display = 'none';

	switch (amount)
	{
		case '4':
			child_age4.style.display = '';
		case '3':
			child_age3.style.display = '';
		case '2':
			child_age2.style.display = '';
		case '1':
			child_age1.style.display = '';
		default:
			child_ages.style.display = '';
	}
}


/*
 * display_passenger_birthdates
 *  hides/shows the passegner birthdates on the insurance search page
 */
function display_passenger_birthdates (number)
{
	for (var i = 1; i <= 9; i++)
	{
		document.getElementById('pax' + i).style.display = i > number ? 'none' : '';
	}
}


/*
 * display_rooms
 *  hides/shows the rooms on the hotel search page
 */
function display_rooms (number)
{
	for (var i = 1; i <= 8; i++)
	{
		if (document.getElementById('room' + i))
		{
			document.getElementById('room' + i).style.display = i > number ? 'none' : '';
		}
	}
}


/*
 * focusEl
 *  give focus to an element by id, if it exists
 */
function focusEl (id)
{
	var element = document.getElementById(id);
	if (element)
	{
		element.focus();
	}
}


/*
 * hide_wait
 *  hides the please wait image
 */
function hide_wait ()
{
	window.onpageshow = function (event)
	{
		if (event.persisted)
		{
			window.onload();
		}
	}

	if (document.getElementById('page_content'))
	{
		document.getElementById('page_content').style.display = '';
		document.getElementById('page_wait').style.display = 'none';
	}
}


/*
 * open_window
 *  simple script to open a new pop-up window, will return false when window blocked and true when successfully opened
 */
function open_window (url, name, width, height, check_if_opened)
{
	var the_window = window.open(url, name, 'width=' + width + ',' + 'height=' + height + 'top=50,left=50,scrollbars=1,titlebar=1,resizable=1');

	if (check_if_opened)
	{
		return (the_window == null || typeof(the_window) == 'undefined') ? false : true;
	}
	return false;
}


/*
 * refresh_air_search
 *  this will toggle the display of the different flight types
 */
function refresh_air_search (flight_type, date_format, use_advanced)
{
	// toggle the advanced/basic search
	var use_basic_html = false;
	if (document.getElementById('basic_search') && document.getElementById('advanced_search'))
	{
		if (flight_type == 3)
		{
			document.getElementById('advanced_search').style.display = 'none';
			document.getElementById('basic_search').style.display = 'none';
		}
		else if (use_advanced || document.getElementById('flights[1][from][name]').type == 'select-one' || document.getElementById('flights[1][to][name]').type == 'select-one')
		{
			document.getElementById('advanced_search').style.display = 'none';
			document.getElementById('basic_search').style.display = '';
		}
		else
		{
			document.getElementById('advanced_search').style.display = '';
			document.getElementById('basic_search').style.display = 'none';
			use_basic_html = true;
		}
	}

	// set the flights html
	document.getElementById('flights').innerHTML = '';
	if (flight_type == 1) // one-way
	{
		document.getElementById('flights').innerHTML = use_basic_html ? document.getElementById('oneway_select_html').innerHTML : document.getElementById('oneway_html').innerHTML;
	}
	else if (flight_type == 2) // round trip
	{
		document.getElementById('flights').innerHTML = use_basic_html ? document.getElementById('roundtrip_select_html').innerHTML : document.getElementById('roundtrip_html').innerHTML;
	}
	else if (flight_type == 3) // multi-city
	{
		document.getElementById('flights').innerHTML = document.getElementById('multi_city_html').innerHTML;
	}


	// create our calendar elements
	if (document.getElementById('flights[1][date]'))
	{
		calendar_flight1 = new create_calendar_from_input(document.getElementById('flights[1][date]'), document.getElementById('flights[2][date]') ? document.getElementById('flights[2][date]') : null, date_format);
	}
	if (document.getElementById('flights[2][date]'))
	{
		calendar_flight2 = new create_calendar_from_input(document.getElementById('flights[2][date]'), document.getElementById('flights[3][date]') ? document.getElementById('flights[3][date]') : null, date_format);
	}
	if (document.getElementById('flights[3][date]'))
	{
		calendar_flight3 = new create_calendar_from_input(document.getElementById('flights[3][date]'), document.getElementById('flights[4][date]') ? document.getElementById('flights[4][date]') : null, date_format);
	}
	if (document.getElementById('flights[4][date]'))
	{
		calendar_flight4 = new create_calendar_from_input(document.getElementById('flights[4][date]'), document.getElementById('flights[5][date]') ? document.getElementById('flights[5][date]') : null, date_format);
	}
	if (document.getElementById('flights[5][date]'))
	{
		calendar_flight5 = new create_calendar_from_input(document.getElementById('flights[5][date]'), document.getElementById('flights[6][date]') ? document.getElementById('flights[6][date]') : null, date_format);
	}
	if (document.getElementById('flights[6][date]'))
	{
		calendar_flight6 = new create_calendar_from_input(document.getElementById('flights[6][date]'), null, date_format);
	}

	return false;
}


/*
 * remove_table_row
 */
function remove_table_row (table_id, row_id)
{
	var table = document.getElementById(table_id);
	for (var i = 0; i <= table.rows.length; i++)
	{
		if (table.rows[i] && table.rows[i].id == row_id)
		{
			table.deleteRow(i);
		}
	}
}


/*
 * select_move
 *  will move the selected elements from one select to another
 */
function select_move (select_from_id, select_to_id)
{
	var from_select = document.getElementById(select_from_id);
	var to_select = document.getElementById(select_to_id);

	for (var i = from_select.length - 1; i >= 0; i--)
	{
		if (from_select.options[i].selected)
		{
			var new_option = document.createElement('option');
			new_option.text = from_select.options[i].text;
			new_option.value = from_select.options[i].value;

			var exists = false;
			for (var j = to_select.length - 1; j >= 0; j--)
			{
				if (from_select.options[i].value == to_select.options[j].value)
				{
					exists = true;
				}
			}

			if (!exists)
			{
				try
				{
					// standards compliant; doesn't work in IE
					to_select.add(new_option, null);
				}
				catch (ex)
				{
					// IE only
					to_select.add(new_option);
				}
			}
		}
	}
}


/*
 * select_remove
 *  will remove any selected options of the passed in select element
 */
function select_remove (select_id)
{
	var remove_select = document.getElementById(select_id);

	for (var i = remove_select.length - 1; i >= 0; i--)
	{
		if (remove_select.options[i].selected)
		{
			remove_select.remove(i);
		}
	}
}


/*
 * select_sort
 *  based on the move command that is sent change the order of a select element
 */
function select_sort (move, select_id)
{
	var sort_select = document.getElementById(select_id);

	var items = new Array;
	var values = new Array;
	var index = sort_select.selectedIndex;

	var total = sort_select.options.length - 1;

	if (sort_select.selectedIndex == -1)
	{
		return false;
	}
	if (move == +1 && sort_select.selectedIndex == total)
	{
		return false;
	}
	if (move == -1 && sort_select.selectedIndex == 0)
	{
		return false;
	}

	for (var i = total; i >= 0; i--)
	{
		items[i] = sort_select.options[i].text;
		values[i] = sort_select.options[i].value;
	}

	for (var i = total; i >= 0; i--)
	{
		if (sort_select.selectedIndex == i)
		{
			sort_select.options[i + move] = new Option(items[i], values[i]);
			sort_select.options[i] = new Option(items[i + move], values[i + move]);

			i--;
		}
		else
		{
			sort_select.options[i] = new Option(items[i], values[i]);
		}
	}

	sort_select.selectedIndex = index + move;
	sort_select.focus();

	return true;
}


/*
 * show_all_results
 *  show more rates on hotel results page
 */
function show_all_results (property_identifier)
{
	var result = document.getElementById(property_identifier + '_more_results');
	if (result)
	{
		result.style.display = 'none';
	}

	var result_index = 0;
	var more_results = true;
	while (more_results)
	{
		result_index++;
		// check if we have a pricing row
		var price = document.getElementById(property_identifier + '_' + result_index + '_price');
		if (price)
		{
			price.style.display = '';
		}
		else
		{
			more_results = false;
		}
		// check for a spacer row
		var spacer = document.getElementById(property_identifier + '_' + result_index + '_spacer');
		if (spacer)
		{
			spacer.style.display = '';
		}
	}
}


/*
 * show_by_id
 *  takes the id and puts the content of text into it
 */
function show_by_id (text, id)
{
	var element = document.getElementById(id);

	element.innerHTML = eval(text);
}


/*
 * show_hide
 *  shows or hides the id's provided
 */
function show_hide (show_id, hide_id)
{
	if (show_id)
	{
		document.getElementById(show_id).style.display = '';
	}
	if (hide_id)
	{
		document.getElementById(hide_id).style.display = 'none';
	}
}


/*
 * show_wait
 *  shows a please wait image. Make sure you have a wait and page content div in your page
 */
function show_wait (wait_image)
{
	scroll(0,0);
	document.getElementById('page_content').style.display = 'none';
	document.getElementById('page_wait').style.visibility = 'visible';
	if (wait_image == 'images/wait.gif')
	{
		document.getElementById('page_wait').style.width = '450px';
		document.getElementById('page_wait').style.height = '150px';
	}
	document.getElementById('page_wait').style.display = '';

	// IE fix
	if (document.all)
	{
		setTimeout("document.getElementById('wait_image').src = '" + wait_image + "';", 20);
	}
}


/*
 * toggle_hotels_search_type
 *  toggle between the two hotels search types
 */
function toggle_hotels_search_type (type, origin, destination)
{
	var destination_value = origin.getElementById('destination').value;

	origin.getElementById('destinations').innerHTML = destination;

	if (type == 'advanced')
	{
		origin.getElementById('advanced_search').style.display = 'none';
		origin.getElementById('basic_search').style.display = '';

		origin.getElementById('destination').value = destination_value;
	}
	else if (type == 'basic')
	{
		origin.getElementById('advanced_search').style.display = '';
		origin.getElementById('basic_search').style.display = 'none';
	}

	return false;
}


/*
 * toggle_published
 *  toggles the published fares on/off based on the fetch availability checkbox
 */
function toggle_published (checked, id)
{
	var element = document.getElementById('pub_consolidators_' + id);
	if (checked)
	{
		element.disabled = false;
	}
	else
	{
		element.disabled = true;
	}
}


/*
 * unhide_results
 *  will expand the list of cities on the hotel search page when searching by country name
 */
function unhide_results ()
{
	var element = document.getElementById('cities_list');

	for (var i = 0; i < element.childNodes.length; i++)
	{
		if (element.childNodes[i].tagName == 'DT')
		{
			element.childNodes[i].style.display = '';
		}
	}

	document.getElementById('expand_results').style.display = 'none';
}


/*
 * update_date
 *  take a given date and increase it by the number of days given
 */
function update_date (date, field_b, days, date_format)
{
	if (document.getElementById(field_b))
	{
		if (date_format == 'm/d/Y')
		{
			var field_date = parse_mmddyyyy(date);
			if (field_date)
			{
				field_date = field_date.setDate(field_date.getDate() + days);
				document.getElementById(field_b).value = calendar_generate_mmddyyyy(new Date(field_date));
			}
		}
		else if (date_format == 'd/m/Y')
		{
			var field_date = parse_ddmmyyyy(date);
			if (field_date)
			{
				field_date = field_date.setDate(field_date.getDate() + days);
				document.getElementById(field_b).value = calendar_generate_ddmmyyyy(new Date(field_date));
			}
		}
	}
}


/*
 * update_lead_pax
 *  updates the lead passenger on the booking page
 */
var lead_pax_edited = false;
function update_lead_pax (pax_name_el_root)
{
	if (lead_pax_edited)
	{
		return;
	}
	var lead_pax = document.getElementById('lead_pax');
	if (! lead_pax)
	{
		return;
	}
	var first_name = document.getElementById(pax_name_el_root + '[first_name]');
	if (! first_name)
	{
		return;
	}
	var last_name = document.getElementById(pax_name_el_root + '[last_name]');
	if (! last_name)
	{
		return;
	}
	lead_pax.value = first_name.value + ' ' + last_name.value;
}


/*
 * update_payment_total
 *  updates the payment total on the booking page
 */
function update_payment_total (currency_code, itinerary_id, payment_type)
{
	var total = 0;

	if (payment_type == 'full')
	{
		for (var i = 0; i < itinerary_ids.length; i++)
		{
			var base = document.getElementById('base[' + itinerary_ids[i] + ']');
			var markup = document.getElementById('markups[' + itinerary_ids[i] + ']');
			var delivery = document.getElementById('delivery[' + itinerary_ids[i] + ']');
			var commissions = document.getElementById('commissions[' + itinerary_ids[i] + ']');
			if (base && base.value > 0)
			{
				total += parseFloat(base.value);
			}
			if (markup && markup.value > 0)
			{
				total += parseFloat(markup.value);
			}
			if (delivery && delivery_ids[itinerary_ids[i]][delivery.value] > 0)
			{
				total += parseFloat(delivery_ids[itinerary_ids[i]][delivery.value]);
			}
			if (commissions && commissions.value > 0)
			{
				total += parseFloat(commissions.value);
			}
		}

		// check for "single" commission field
		var commission = document.getElementById('commission');
		if (commission && commission.value > 0)
		{
			total += parseFloat(commission.value);
		}

		var payment_total = document.getElementById('payment_total');
		payment_total.innerHTML = '';
		payment_total.innerHTML = '$' + total.toFixed(2) + ' ' + currency_code;
	}
	else if (payment_type == 'partial')
	{
		var commission_total = 0;
		var payment_total = 0;

		for (i = 0; i < itinerary_ids.length; i++)
		{
			var delivery = document.getElementById('delivery[' + itinerary_ids[i] + ']');
			var payments = document.getElementById('payments[' + itinerary_ids[i] + ']');
			var commissions = document.getElementById('commissions[' + itinerary_ids[i] + ']');
			if (delivery && delivery_ids[itinerary_id][delivery.value] > 0)
			{
				payment_total += parseFloat(delivery_ids[itinerary_id][delivery.value]);
			}
			if (payments && payments.value > 0)
			{
				payment_total += parseFloat(payments.value);
			}
			if (commissions && commissions.value > 0)
			{
				commission_total += parseFloat(commissions.value);
			}
		}

		document.getElementById('total_payment').value = payment_total.toFixed(2);
		document.getElementById('total_commission').value = commission_total.toFixed(2);
	}
}


/*
 * limit_selected_options
 *  this will limit the number of options that can be selected at one time
 */
function limit_selected_options (select, max_allowed)
{
	var number_selected = 0;
	for (var i = 0; i < select.length; i++)
	{
		if (select.options[i].selected)
		{
			number_selected++;
			if (number_selected > max_allowed)
			{
				select.options[i].selected = false;
				alert('You are only allowed to select ' + max_allowed + ' items.');
			}
		}
	}
}








// global variables //
var TIMER = 5;
var SPEED = 10;
var WRAPPER = 'content';

// calculate the current window width //
function page_width()
{
	return window.innerWidth != null ? window.innerWidth : document.documentElement && document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body != null ? document.body.clientWidth : null;
}

// calculate the current window height //
function page_height()
{
	return window.innerHeight != null? window.innerHeight : document.documentElement && document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body != null? document.body.clientHeight : null;
}

// calculate the current window vertical offset //
function top_position()
{
	return typeof window.pageYOffset != 'undefined' ? window.pageYOffset : document.documentElement && document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop ? document.body.scrollTop : 0;
}

// calculate the position starting at the left of the window //
function left_position()
{
	return typeof window.pageXOffset != 'undefined' ? window.pageXOffset : document.documentElement && document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft ? document.body.scrollLeft : 0;
}

// build/show the dialog box, populate the data and call the fade_dialog function //
function show_dialog(title, message, type, autohide)
{
	if (!type)
	{
		type = 'error';
	}
	var dialog;
	var dialogheader;
	var dialogclose;
	var dialogtitle;
	var dialogcontent;
	var dialogmask;
	if (!document.getElementById('dialog'))
	{
		dialog = document.createElement('div');
		dialog.id = 'dialog';
		dialogheader = document.createElement('div');
		dialogheader.id = 'dialog-header';
		dialogtitle = document.createElement('div');
		dialogtitle.id = 'dialog-title';
		dialogclose = document.createElement('div');
		dialogclose.id = 'dialog-close'
		dialogcontent = document.createElement('div');
		dialogcontent.id = 'dialog-content';
		dialogmask = document.createElement('div');
		dialogmask.id = 'dialog-mask';
		document.body.appendChild(dialogmask);
		document.body.appendChild(dialog);
		dialog.appendChild(dialogheader);
		dialogheader.appendChild(dialogtitle);
		dialogheader.appendChild(dialogclose);
		dialog.appendChild(dialogcontent);;
		dialogclose.setAttribute('onclick','hide_dialog()');
		dialogclose.onclick = hide_dialog;
	}
	else
	{
		dialog = document.getElementById('dialog');
		dialogheader = document.getElementById('dialog-header');
		dialogtitle = document.getElementById('dialog-title');
		dialogclose = document.getElementById('dialog-close');
		dialogcontent = document.getElementById('dialog-content');
		dialogmask = document.getElementById('dialog-mask');
		dialogmask.style.visibility = "visible";
		dialog.style.visibility = "visible";
	}
	dialog.style.opacity = .00;
	dialog.style.filter = 'alpha(opacity=0)';
	dialog.alpha = 0;
	var width = page_width();
	var height = page_height();
	var left = left_position();
	var top = top_position();
	var dialogwidth = dialog.offsetWidth;
	var dialogheight = dialog.offsetHeight;
	var topposition = top + (height / 3) - (dialogheight / 2);
	var leftposition = left + (width / 2) - (dialogwidth / 2);
	dialog.style.top = topposition + "px";
	dialog.style.left = leftposition + "px";
	dialogheader.className = 'dialog_' + type + "header";
	dialogtitle.innerHTML = title;
	dialogcontent.className = 'dialog_' + type;
	dialogcontent.innerHTML = message;
	var content = document.getElementById(WRAPPER);
	dialogmask.style.height = content.offsetHeight + 'px';
	dialog.timer = setInterval("fade_dialog(1)", TIMER);
	if (autohide)
	{
		dialogclose.style.visibility = "hidden";
		window.setTimeout("hide_dialog()", (autohide * 1000));
	}
	else
	{
		dialogclose.style.visibility = "visible";
	}
}


// hide the dialog box //
function hide_dialog()
{
	var dialog = document.getElementById('dialog');
	clearInterval(dialog.timer);
	dialog.timer = setInterval("fade_dialog(0)", TIMER);
}


// fade-in the dialog box //
function fade_dialog(flag)
{
	if (flag == null)
	{
		flag = 1;
	}
	var dialog = document.getElementById('dialog');
	var value;
	if (flag == 1)
	{
		value = dialog.alpha + SPEED;
	}
	else
	{
		value = dialog.alpha - SPEED;
	}
	dialog.alpha = value;
	dialog.style.opacity = (value / 100);
	dialog.style.filter = 'alpha(opacity=' + value + ')';
	if (value >= 99)
	{
		clearInterval(dialog.timer);
		dialog.timer = null;
	}
	else if (value <= 1)
	{
		dialog.style.visibility = "hidden";
		document.getElementById('dialog-mask').style.visibility = "hidden";
		clearInterval(dialog.timer);
	}
}


var navtabs = new Array('air', 'hotels', 'airports', 'vendors', 'bookings', 'logout');
function update_navtabs (tab_clicked)
{
	for (i = 0; i <= navtabs.length; i++)
	{
		if (document.getElementById('navtab_' + navtabs[i]))
		{
			document.getElementById('navtab_' + navtabs[i]).className = navtabs[i] == tab_clicked ? 'current' : '';
		}
	}
}


function nav_switch (tab)
{
	if (tab == 'hotels')
	{
		document.getElementById('nav_search_flight').style.display = 'none';
		document.getElementById('nav_search_hotel').style.display = '';
		focusEl('destination');
		update_navtabs(tab);
		return false;
	}
	else if (tab == 'air')
	{
		document.getElementById('nav_search_flight').style.display = '';
		document.getElementById('nav_search_hotel').style.display = 'none';
		focusEl('flights[1][from][code]');
		update_navtabs(tab);
		return false;
	}

	return false;
}
