/**
 * Trip Functionality
 */

/*-------------- CHOOSING WEEK --------------*/

function storeValue(id, value)
{
	document.getElementById(id).value = value;
}

function getWeeksAvailable(element)
{
	if (element.timeout) {
		window.clearTimeout(element.timeout);
	}
	element.timeout = window.setTimeout('sendRequest(\'getAvailableWeeks\', [\'' + element.value +'\'])', 1000);
}

function parseWeeksAvailable(serializedData)
{
	var weeks;
	// check for no results
	if (serializedData.indexOf('%%') == -1) {
		weeks = [];
	} else {
		// break into weeks
		weeks = serializedData.split('^^');
	}
	loadWeekOptions(weeks);
}

function loadWeekOptions(weeks)
{
	var weekBox = document.getElementById('departure');
	var storedValue = '';
	var selectedOption = null;
	var option;
	var text;
	var week;
	var data;
	var i;
	
	if (document.getElementById('stored_departure_date')) {
		storedValue = document.getElementById('stored_departure_date').value;
	}
	resetSelect(weekBox);
	
	if (weeks.length == 0) {
		alert('This destination does not have any dates available at this time.');
		document.getElementById('stored_departure_date').value = '';
		document.getElementById('stored_destination').value = '';
		document.getElementById('stored_departure_code').value = '';
		return false;
	}
	
	for (i = 0; i < weeks.length; i++) {
		// parse weeks array	
		week   = weeks[i];
		data   = week.split('%%');
	
		start  = data[0];
		end    = data[1];
		value  = data[2];
		
		// create option
		option  = document.createElement('option');
		text    = document.createTextNode('Week of ' + start);
		option.value = value;
		option.appendChild(text);
		if (storedValue.toLowerCase() == value.substr(0,6)) {
			option.selected = 'selected';
			selectedOption = i + 1;
		}
	
		// append child
		weekBox.appendChild(option);
	}

	weekBox.selectedIndex = (selectedOption == null) ? 0 : selectedOption;
	
	// flash element
	if (weeks.length) {
		flashElement('7fba00', 'ffffff', weekBox);
	}
}

/*-------------- CHOOSING DEPARTURE CITY --------------*/

function getDepartureCities()
{
	var destination     = document.getElementById('destination');
	var departure_date  = document.getElementById('stored_departure_date');
	
	if (destination.value == '' || departure_date.value == '') {
		parseDepartureCities('');
	} else {
		if (departure_date.timeout) {
			window.clearTimeout(departure_date.timeout);
		}
		departure_date.timeout = window.setTimeout('sendRequest(\'getDepartureCities\', [\'' + destination.value + departure_date.value.substr(0,6) + '\'])', 1000);
	}
}

function parseDepartureCities(serializedData)
{
	var cities;
	
	// check for no results
	if (serializedData.indexOf('%%') == -1) {
		cities = [];
	} else {
		// break into weeks
		cities = serializedData.split('^^');
	}

	loadDepartureOptions(cities);
}

function loadDepartureOptions(cities)
{
	var cityBox = document.getElementById('departure_code');
	var storedValue = document.getElementById('stored_departure_code').value;
	var selectedOption = null;
	var option;
	var text;
	var city;
	var data;
	var i;

	resetSelect(cityBox);
	
	if (cities.length == 0) {
		document.getElementById('stored_departure_date').value = '';
		document.getElementById('stored_destination').value = '';
		document.getElementById('stored_departure_code').value = '';
		return false;
	}

	for (i = 0; i < cities.length; i++) {
		// parse cities array
		city   = cities[i];
		data   = city.split('%%');
	
		code  = data[0];
		city  = data[1];
	
		// create option
		option  = document.createElement('option');
		text    = document.createTextNode(city);
		option.value = code;
		option.appendChild(text);
		
		if (storedValue.toLowerCase() == code.toLowerCase()) {
			option.selected = 'selected';
			selectedOption = i + 1;
		}
	
		// append child
		cityBox.appendChild(option);
	}

	cityBox.selectedIndex = (selectedOption == null) ? 0 : selectedOption;
	
	// flash element
	if (cities.length > 0) {
		flashElement('7fba00', 'ffffff', cityBox);
	}
}

function resetSelect(element)
{
	var initialElement  = document.createElement('option');
	var initialText     = document.createTextNode('Choose...');
															
	// remove options
	while (element.childNodes.length >= 1) {
		element.removeChild(element.firstChild);
	}

	// create initial option
	initialElement.appendChild(initialText);
	initialElement.value = '';
	element.appendChild(initialElement);
}

/*-------------- CHOOSING TRIP ---------------*/
function checkChoose()
{
	var destination = document.getElementById('destination');
	var departure_date = document.getElementById('departure');
	var departure_code = document.getElementById('departure_code');
	
	if (destination.value == '' || departure_date.value == '' || departure_code.value == '') {
		alert('You cannot leave a value unchecked. Please try again.');
		return false;
	}
}

/*-------------- CHOOSING ADD-ON --------------*/

function preparePrice(element)
{
	var add_ons = document.getElementById('add_ons');
	var checkboxes = add_ons.getElementsByTagName('input');

	for (i = 0; i < checkboxes.length; i++) {
		if (checkboxes[i].type == 'checkbox') {
			if (checkboxes[i].checked == true) {
				togglePrice(checkboxes[i]);
			} else {
				checkboxes[i].checked = false;
			}
		}		
	}
}

function togglePrice(element)
{
	var checkbox = element;
	var total    = document.getElementById('total_price');
    //Ryan Zec This was cuasing a NaN error.
	//checkbox.id  = checkbox.id.substring(7);
	var row      = checkbox.parentNode.parentNode;
	var amount   = parseFloat(element.id.substring(7));
	
	if (checkbox.checked == true) {
		total.innerHTML = (parseFloat(total.innerHTML) + amount).toFixed(2);
		row.style.backgroundColor   = '#ffff99';
	} else {
		total.innerHTML = (parseFloat(total.innerHTML) - amount).toFixed(2);
		row.style.backgroundColor   = '#ffffff';
	}
}

function toggleExplanation(table_id)
{
	var explanation = document.getElementById('explanation_' + table_id);
	var link        = document.getElementById('platinum_link_' + table_id);
	
	if (explanation.style.display == 'block') {
		explanation.style.display = 'none';
		explanation.parentNode.style.paddingTop = '2px';
		link.innerHTML = 'learn more';
	} else {
		flashElement('FFFF33', 'FFFFFF', explanation);
		explanation.style.display = 'block';
		explanation.parentNode.style.paddingTop = '3px';
		link.innerHTML = 'hide explanation';
	}
}

/*-------------- CHOOSING HOTEL --------------*/

function toggleBox(element, hotel)
{
	var link = element;
	var hotel_selection  = element.parentNode.parentNode.parentNode.parentNode;
	var hotel_description = element.parentNode.parentNode.parentNode;
					
	if (link.innerHTML == 'prices &amp; info') {
		link.innerHTML    = 'less info';
		hotel_description.style.height = 'auto';
		hotel_selection.style.height  = 'auto';
		flashElement('FFFF33', 'FFFFFF', document.getElementById('hotel_selection'+hotel));
	} else {
		link.innerHTML    = 'prices &amp; info';
		hotel_description.style.height = 'auto';
		hotel_selection.style.height  = 'auto';
	}
}

function openBox(hotel)
{
	var link = document.getElementById('box_toggle' + hotel);
	var hotel_selection  = link.parentNode.parentNode.parentNode.parentNode;
	var hotel_description = link.parentNode.parentNode.parentNode;
	
	
	link.innerHTML    = 'less info';
	hotel_description.style.height = 'auto';
	hotel_selection.style.height  = 'auto';
	flashElement('FFFF33', 'FFFFFF', document.getElementById('hotel_selection'+hotel));
}

/*-------------- HOTEL SLIDESHOW --------------*/
function changeImage(id, src)
{
	var image;
	if (image = document.getElementById(id)) {
		image.setAttribute('src', src);
	}
}