
var accomm_prices;
var courses_prices = new Array;
var accomm_actual_prices;
var accomm_next_prices;
var course_actual_prices;
var course_next_prices;
var actual_year;
var accommodations = new Array();
var courses = new Array();
// we haven't private lesson price for each year
var price_private_lesson;
var price_inscription_fee;
var price_accommodation_fee;

function onloadBody(){
}

function onChangeFlightDetails() {
	var doc = document.applicationform;
	var flight_details = doc.elements['flight_details'];
	var arrival_day = doc.elements['arrival_day'];
	var arrival_month = doc.elements['arrival_month'];
	var arrival_year = doc.elements['arrival_year'];
	var arrival_hour = doc.elements['arrival_hour'];
	var arrival_minute = doc.elements['arrival_minute'];
	var airline = doc.elements['airline'];
	var flight_number = doc.elements['flight_number'];
	var calendarPopupFlight = document.getElementById( 'calendarPopupFlight' );
	var title1 = document.getElementById( 't_arrival_date' );
	var title2 = document.getElementById( 't_arrival_hour' );
	var title3 = document.getElementById( 't_airline' );
	var title4 = document.getElementById( 't_flight_number' );
	
	chk = ( flight_details.selectedIndex == 0 );
	arrival_day.disabled 		= chk;
	arrival_month.disabled 		= chk;
	arrival_year.disabled 		= chk;
	arrival_hour.disabled 		= chk;
	arrival_minute.disabled 	= chk;
	airline.disabled 			= chk;
	flight_number.disabled 		= chk;
	if ( chk ) {
		title1.className = "field_disabled";
		title2.className = "field_disabled";
		title3.className = "field_disabled";
		title4.className = "field_disabled";
		calendarPopupFlight.onclick = function onclick(event) { return false; }
	} else {
		title1.className = "field";
		title2.className = "field";
		title3.className = "field";
		title4.className = "field";
		calendarPopupFlight.onclick = function onclick(event) { return openCalcPopup(); } 
	}
}

function course_has_prices(pCourse){
 return $defined(pCourse) && pCourse.some(function (el, i) {
  return pCourse[i]!=0;
 });
}

function accomm_has_prices(pAccomm){
  return (pAccomm[0]!=0 || pAccomm[1]!=0);
}


/**
* Function : dump()
* Arguments: The data - array,hash(associative array),object
*    The level - OPTIONAL
* Returns  : The textual representation of the array.
* This function was inspired by the print_r function of PHP.
* This will accept some data as the argument and return a
* text that will be a more readable version of the
* array/hash/object that is given.
*/
function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;

	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";

	if(typeof(arr) == 'object') { //Array/Hashes/Objects
		for(var item in arr) {
			var value = arr[item];
			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}

function additional_text( id ) {

	var lang_id = parseInt( id.toString().substr( 0, id.toString().length - 5 ), 10 );
	var ret = "";
	document.getElementById( "id_course" ).value= id;
	document.getElementById( "course_language_id" ).value = lang_id;

	if ( languages_count[actual_year]['total']>1 ){
		document.getElementById( "number_of_languages" ).value = languages_count[actual_year]['total']; 
		ret = " <b>(" + languages_names[actual_year][lang_id] + ")</b>";
	}
	return ret;
} 

function course_populateList(fnc) {
	ClearOptions(document.applicationform.elements['id_course']);
	var FirstOut = 1;
	document.getElementById('id_course_selector_list').innerHTML += "<div class=\"button_close\"><a href=\"#\" onclick=\"javascript:showhide(document.getElementById('id_course_selector_list'));return false;\">[X]</a></div>";
	var templ = "<li><a href=\"#\" id=\"replaceid\" onclick=\"javascript:document.getElementById('id_course_selector').innerHTML = this.innerHTML + additional_text( 'replacevalue' );showhide(document.getElementById('id_course_selector_list'));"+fnc+";return false;\">replacetext</a></li>";
	var templ_temp = '';
	var list='';
//	alert( dump( courses[actual_year] ) );
//	alert( actual_year );
	var language="**";
	courses[actual_year].each(function(el) {
//		alert( courses_prices[actual_year][el.course_id] );
		if (el.course_id == 0 || course_has_prices(courses_prices[actual_year][el.course_id])) {
//			AddToOptionList(document.applicationform.elements['id_course'], el.course_id, js_process_string(el['value']));
//			AddToOptionList(document.applicationform.elements['id_course'], parseInt( el.course_id.toString().substr( el.course_id.toString().length - 5 ), 10 ), js_process_string(el['value'] + "xXxXx"));
			templ_temp = templ;
			if (el.course_id==0 && FirstOut>0){
				FirstOut = FirstOut-1;
				templ_temp = "<li id='default_text_course' class='first_option'>replacetext</li>";
			} else {
				if ( languages_count[actual_year]['total']>1 &&  el.language != language ){
					language = el.language;
					list += GetTextToSelectorList(0, language, "course_", "<li class='first_option'>replacetext</li>" );
				}
			}
			//AddToSelectorList(document.getElementById('id_course_selector_list'), el.course_id, js_process_string(el['value']),templ_temp);
			list += GetTextToSelectorList(el.course_id, js_process_string(el['value']),"course_", templ_temp);
		}
	});
	//document.getElementById('id_course_selector_list').innerHTML += '</ul>';
	$( "msgload_course" ).style.display = "none";
	document.getElementById('id_course_selector_list').innerHTML += "<ul style=\"padding-left:15px\">"+list+"</ul>";
	document.getElementById('id_course_selector').innerHTML = document.getElementById( 'default_text_course' ).innerHTML;
//	document.getElementById('id_course_selector').innerHTML = document.applicationform.elements['id_course'].options[ document.applicationform.elements['id_course'].selectedIndex].text;
}

function accomm_populateList(fnc){
	ClearOptions(document.applicationform.elements['accomodation_type_description']); 
	var FirstOut = 1;
	document.getElementById('id_accommodation_selector_list').innerHTML += "<div class=\"button_close\"><a href=\"#\" onclick=\"javascript:showhide(document.getElementById('id_accommodation_selector_list'));return false;\">[X]</a></div>";
	var templ = "<li><a id=\"replaceid\" href=\"#\" onclick=\"javascript:document.applicationform.elements['accomodation_type_description'].value='replacevalue';document.getElementById('id_accommodation_selector').innerHTML = this.innerHTML;showhide(document.getElementById('id_accommodation_selector_list'));"+fnc+";return false;\">replacetext</a></li>";
	var templ_temp = '';
	var list='';
	accommodations[actual_year].each(function(el) {
	 	if (el['ac_id'] == 0 || el['ac_id'] == -1 || $defined(accomm_prices[el['ac_id']]) && accomm_has_prices(accomm_prices[el['ac_id']])) {
//			AddToOptionList(document.applicationform.elements['accomodation_type_description'], el['ac_id'], js_process_string(el['value']));
			AddToOptionList(document.applicationform.elements['accomodation_type_description'], el['ac_id'], js_process_string(el['value']));
			templ_temp = templ;
			if (el['ac_id']==0 && FirstOut>0){
				FirstOut = FirstOut-1;
				templ_temp = "<li class='first_option'>replacetext</li>";
		 	}
			//AddToSelectorList(document.getElementById('id_accommodation_selector_list'), el['ac_id'], js_process_string(el['value']),templ_temp);
			list += GetTextToSelectorList(el['ac_id'], js_process_string(el['value']),"acco_", templ_temp);
	 	}
	});
	$( "msgload_accomodation" ).style.display = "none";
	document.getElementById('id_accommodation_selector_list').innerHTML += "<ul style=\"padding-left:15px\">"+list+"</ul>";
	document.getElementById('id_accommodation_selector').innerHTML = document.applicationform.elements['accomodation_type_description'].options[ document.applicationform.elements['accomodation_type_description'].selectedIndex].text;
}

function onChangeAccommoStartDate()
{
	updateInsuranceDatesAndAgeIndex(false);
}

function onChangeAccommoLastDate()
{
	updateInsuranceDatesAndAgeIndex(false);
}


/*
function onChangeAccommoTypeDescription2() {
	var first_day 	= $('first_day');
	var first_month = $('first_month');
	var first_year 	= $('first_year');
	var last_day 	= $('last_day');
	var last_month 	= $('last_month');
	var last_year 	= $('last_year');
	
	var form = document.applicationform;
	var accommodation = form.accomodation_type_description;
	
	chk = form.accomodation_type_description2.checked;
	accommodation.selectedIndex = 0;
	accommodation.disabled	= chk;
	
	first_day.selectedIndex		= 0;
	first_day.disabled 			= chk;

	first_month.selectedIndex	= 0;
	first_month.disabled 		= chk;

	first_year.selectedIndex	= 0;
	first_year.disabled 		= chk;

	last_day.selectedIndex		= 0;
	last_day.disabled 			= chk;

	last_month.selectedIndex	= 0;
	last_month.disabled 		= chk;

	last_year.selectedIndex		= 0;
	last_year.disabled 			= chk;

	alert( "antes del writetext");
	writeText('publishedPriceOfAccommodationDisplay', ' ');
	alert( "después del writetext");
	updateInsuranceDatesAndAgeIndex(false);	
	callCoursePriceCalculation();
	callAccommodationPriceCalculation('');
}
*/

function getObjectVisibilityStatus(object){
	return $(object).getStyle('display');
}

function timeDifferenceInDays (startDate, endDate)
{
	/* according to the loud speaking title, this function returns the
	   number of DAYS between two given dates (dates must be formatted as js-date-object) */
	return (Math.ceil((endDate.getTime()-startDate.getTime())/864e5));
}

function formatAsMoney(mnt)
{
	/*  this function only does layout-make up:
		format any number input to the integer
		value followed by two decimals.
		i.g.:  	formatAsMoney(3) will return 3.00 (not 3.14159 and especially not 42) */
	mnt -= 0;
	mnt = parseFloat(mnt);
	mnt = (Math.round(mnt*100))/100;
	return (mnt == Math.floor(mnt)) ? mnt + '.00' : ( (mnt*10 == Math.floor(mnt*10)) ?  mnt + '0' : mnt);
}

function writeText(id, text)
{
	console.error('deprecatd, use $(id).setHTML(text)');
	$(id).setHTML('deprecatd, use $(id).setHTML(text)');
}

function updateInsuranceType(option) {
	// Modify insurance_quotation
	switch(option) {
		case 'none':
			document.applicationform.elements['insurance_type'].value='none';
			document.getElementById('insuranceConditionsPackage2').style.display='none';
		break;
		case 'health':
			document.applicationform.elements['insurance_type'].value='health';
			document.getElementById('insuranceConditionsPackage2').style.display='none';
		break;
		case 'cancellation':
			document.applicationform.elements['insurance_type'].value='cancellation';
			document.getElementById('insuranceConditionsPackage2').style.display='block';
		break;				
	}
}			


function updateInsuranceDates() {
	if ( smartyTemplateName == "application" ) {
		var starting_insurance_date = new Date();
		var ending_insurance_date = new Date();					
		
		var starting_course_month = document.applicationform.elements['start_month'].options[document.applicationform.elements['start_month'].selectedIndex].value;
		var starting_course_day = document.applicationform.elements['start_day'].options[document.applicationform.elements['start_day'].selectedIndex].value;
		var starting_course_year = document.applicationform.elements['start_year'].options[document.applicationform.elements['start_year'].selectedIndex].value;				    
		
		var starting_course_date = new Date();
		starting_course_date.setMonth(starting_course_month-1, starting_course_day);
		starting_course_date.setYear(starting_course_year);					
		
		var ending_course_date = new Date();
		var num_weeks = document.applicationform.elements['number_weeks'].options[document.applicationform.elements['number_weeks'].selectedIndex].value;
		if (!isNaN(num_weeks) && num_weeks > 0) {
			ending_course_date.setTime(starting_course_date.valueOf() + num_weeks*5*24*3600*1000);
		} else {
			ending_course_date.setTime(starting_course_date.valueOf());
		}						
		
		if (!document.applicationform.elements['accomodation_type_description2'].checked && document.applicationform.elements['accomodation_type_description'].selectedIndex >0) {
			var starting_accommo_day = document.applicationform.elements['first_day'].options[document.applicationform.elements['first_day'].selectedIndex].value;
			var starting_accommo_month = document.applicationform.elements['first_month'].options[document.applicationform.elements['first_month'].selectedIndex].value;
			var starting_accommo_year = document.applicationform.elements['first_year'].options[document.applicationform.elements['first_year'].selectedIndex].value;
			var starting_accommo_date = new Date();
			starting_accommo_date.setMonth(starting_accommo_month-1, starting_accommo_day);
			starting_accommo_date.setYear(starting_accommo_year);						
		
			var ending_accommo_day = document.applicationform.elements['last_day'].options[document.applicationform.elements['last_day'].selectedIndex].value;
			var ending_accommo_month = document.applicationform.elements['last_month'].options[document.applicationform.elements['last_month'].selectedIndex].value;
			var ending_accommo_year = document.applicationform.elements['last_year'].options[document.applicationform.elements['last_year'].selectedIndex].value;
			var ending_accommo_date = new Date();
			ending_accommo_date.setMonth(ending_accommo_month-1, ending_accommo_day);
			ending_accommo_date.setYear(ending_accommo_year);
			
			if (starting_accommo_date.valueOf() < starting_course_date.valueOf())	
				starting_insurance_date.setTime(starting_accommo_date.valueOf() - 24*3600*1000);
			else
				starting_insurance_date.setTime(starting_course_date.valueOf() - 24*3600*1000);		
			if (ending_accommo_date.valueOf() < ending_course_date.valueOf())	
				ending_insurance_date.setTime(ending_course_date.valueOf() + 24*3600*1000);
			else
				ending_insurance_date.setTime(ending_accommo_date.valueOf() + 24*3600*1000);							
		} else {
			// If no accommodation selected, then use course dates
			starting_insurance_date.setTime(starting_course_date.valueOf() - 24*3600*1000);	
			ending_insurance_date.setTime(ending_course_date.valueOf() + 24*3600*1000);		
		}				   		    
		
		sincronizeSelect(document.applicationform.elements['insurance_start_day'], starting_insurance_date.getDate());
		sincronizeSelect(document.applicationform.elements['insurance_start_month'], starting_insurance_date.getMonth()+1);
		sincronizeSelect(document.applicationform.elements['insurance_start_year'], starting_insurance_date.getFullYear());
		
		sincronizeSelect(document.applicationform.elements['insurance_ending_day'], ending_insurance_date.getDate());
		sincronizeSelect(document.applicationform.elements['insurance_ending_month'], ending_insurance_date.getMonth()+1);
		sincronizeSelect(document.applicationform.elements['insurance_ending_year'], ending_insurance_date.getFullYear());
	}				
} 

function updateInsuranceDatesAndAgeIndex(writeResult) {					
	updateInsuranceDates();
	updateInsuranceAgeIndex(writeResult);		
}

function sincronizeSelect(selectObject, value) {
	var i = 0;
	var notFound = true;
	while(i<selectObject.options.length && notFound) {
		if (selectObject.options[i].value == value) {
			selectObject.selectedIndex = i;
			notFound = false;
		}
		i++;
	}
}				

function getInsuranceWeeks() {
	var insurance_start_date = new Date();
	var insurance_start_day = document.applicationform.elements['insurance_start_day'].options[document.applicationform.elements['insurance_start_day'].selectedIndex].value;
	var insurance_start_month = document.applicationform.elements['insurance_start_month'].options[document.applicationform.elements['insurance_start_month'].selectedIndex].value;
	var insurance_start_year = document.applicationform.elements['insurance_start_year'].options[document.applicationform.elements['insurance_start_year'].selectedIndex].value;

	var insurance_ending_date = new Date();
	var insurance_ending_day = document.applicationform.elements['insurance_ending_day'].options[document.applicationform.elements['insurance_ending_day'].selectedIndex].value;
	var insurance_ending_month = document.applicationform.elements['insurance_ending_month'].options[document.applicationform.elements['insurance_ending_month'].selectedIndex].value;
	var insurance_ending_year = document.applicationform.elements['insurance_ending_year'].options[document.applicationform.elements['insurance_ending_year'].selectedIndex].value;
	
	insurance_start_date.setMonth(insurance_start_month-1, insurance_start_day);
	insurance_start_date.setYear(insurance_start_year);
	insurance_ending_date.setMonth(insurance_ending_month-1, insurance_ending_day);
	insurance_ending_date.setYear(insurance_ending_year);
	
	numberOfWeeks = 0;
	numberOfWeeks = parseInt((insurance_ending_date.valueOf() - insurance_start_date.valueOf())/(1000*3600*24*7));
	numberOfDays = (insurance_ending_date.valueOf() - insurance_start_date.valueOf()) % (1000*3600*24*7);
	numberOfDays = parseInt(numberOfDays / (1000*3600*24));
	if (numberOfWeeks == 0 || (numberOfDays >= 2))
		numberOfWeeks ++;							
	return numberOfWeeks;
}

function updateInsuranceAgeIndex(writeResult) {
	var ageLimit = 40;
	
	var birth_month = document.applicationform.elements['birth_month'].options[document.applicationform.elements['birth_month'].selectedIndex].value;
	var birth_day = document.applicationform.elements['birth_day'].options[document.applicationform.elements['birth_day'].selectedIndex].value;	
	var birth_year = document.applicationform.elements['birth_year'].options[document.applicationform.elements['birth_year'].selectedIndex].value;
	
	var birthDate = new Date()
	birthDate.setMonth(birth_month-1, birth_day);
	birthDate.setYear(birth_year);

	var start_month = document.applicationform.elements['insurance_start_month'].options[document.applicationform.elements['insurance_start_month'].selectedIndex].value;
	var start_day = document.applicationform.elements['insurance_start_day'].options[document.applicationform.elements['insurance_start_day'].selectedIndex].value;	
	var start_year = document.applicationform.elements['insurance_start_year'].options[document.applicationform.elements['insurance_start_year'].selectedIndex].value;
	
	var startDate = new Date();
	startDate.setMonth(start_month-1, start_day);
	startDate.setYear(start_year - ageLimit);					

	if (startDate.valueOf() >= birthDate.valueOf()) {
		document.applicationform.elements['insurance_age_index'].value = 1.5;
	} else {
		document.applicationform.elements['insurance_age_index'].value = 1;
	}
				
}

function onChangeAccommoTypeDescription2()
{
	var doc = document.applicationform;


	var id_accommodation = $('id_accommodation_selector');
	var id_accomm_anchor = $('id_accommodation_selector_anchor');
	var accommodation 	 = doc.elements['accomodation_type_description'];
	var accommo_checkbox = doc.elements['accomodation_type_description2'];
	var pricefield 		 = doc.elements['published_price_accomodation']; // hidden input box
	
	var first_day 	= doc.elements['first_day'];
	var first_month = doc.elements['first_month'];
	var first_year 	= doc.elements['first_year'];
	var last_day 	= doc.elements['last_day'];
	var last_month 	= doc.elements['last_month'];
	var last_year 	= doc.elements['last_year'];

	chk = accommo_checkbox.checked
	accommodation.selectedIndex = 0;
	accommodation.disabled = chk;
	id_accommodation.innerHTML = accommodation.options[accommodation.selectedIndex].text;
	id_accommodation.disabled = chk;
	id_accomm_anchor.disabled = chk;
	// change the background of selector list (adding _disabled to class, must exist this class or don't work it)
	if ( chk ) {
		id_accommodation.className += "_disabled";
	} else {
		id_accommodation.className = id_accommodation.className.substr( 0, id_accommodation.className.length - 9 );
	}

	pricefield.value 		= '';

//	first_day.selectedIndex		= 0;
	first_day.disabled 			= chk;

//	first_month.selectedIndex	= 0;
	first_month.disabled 		= chk;

//	first_year.selectedIndex	= 0;
	first_year.disabled 		= chk;

//	last_day.selectedIndex		= 0;
	last_day.disabled 			= chk;

//	last_month.selectedIndex	= 0;
	last_month.disabled 		= chk;

//	last_year.selectedIndex		= 0;
	last_year.disabled 			= chk;

	$('publishedPriceOfAccommodationDisplay').setHTML('');
/*
	updateInsuranceDatesAndAgeIndex(false); 
 */		
}

function selectPackageOption(real_time_variable_id) {
	$("rtp_label_" + real_time_variable_id).click();
}

function processNoPackageSelected () {
	var id;
	// No package is selected, so no values remaining from other selections should be kept	
	if (document.applicationform.direct_booking.value > 0) {
		id = -1*parseInt(document.applicationform.direct_booking.value);
	} else {
		id = parseInt(document.applicationform.direct_booking.value);
	} 	
	document.applicationform.direct_booking.value = 0;
	setupDefaultValues(id);
	updateFormFieldsAvailability(id, false);
	makeSummaryVisible();
	warnPackagePlacesFree();
}

function processPackageSelection(packageId) {
	var id = packageId; 
	document.applicationform.direct_booking.value=id;
	
	if (checkPlacesAvailable(id)) {
		setupDefaultValues(id);
		updateFormFieldsAvailability(id, true);
		overwriteWithPackageValues(id);		
		makeSummaryVisible();
		
		
		warnPackagePlacesFree();
	} else {
		alert('Lo sentimos, no quedan plazas disponibles en este paquete');	
	}				
}

function setupDefaultValues(id) {
doc = document.applicationform;
if (id>0) {
	// Select course
/*
	var foundIndex = findIndex(doc.id_course, packages[id]['course_id']);
	if (foundIndex >= 0) {
		doc.id_course.selectedIndex = foundIndex;
	}
*/
	alert( packages[id]['course_id'] );
	doc.id_course.value = packages[id]['course_id'];

	// Select duration
	doc.number_weeks.selectedIndex =  packages[id]['duration'];

	// Calculation of starting date
	start_date = packages[id]['start_date'];				
	start_day = parseInt(start_date.substring(8));
	if (start_day == 0)
		start_day = parseInt(start_date.substring(9));
	start_month = parseInt(start_date.substring(5,7));
	if (start_month == 0)
		start_month = parseInt(start_date.substring(6,7));
	start_year = parseInt(start_date.substring(0,4));

	// Refactoring: Get actual year index
	doc.start_day.selectedIndex = start_day-1;
	doc.start_month.selectedIndex = start_month-1;
	doc.start_year.selectedIndex = 0; 

	// Calculation of accommodation dates
	var startDate = new Date();
	startDate.setMonth(start_month-1, start_day);
	startDate.setYear(start_year);
	startTmstmp = startDate.valueOf();	
	firstdayTmstmp = startTmstmp - 24*3600*1000;
	lastdayTmstmp =	startTmstmp + (packages[id]['duration']*7-2)*24*3600*1000;		

	var firstDate = new Date();
	firstDate.setTime(firstdayTmstmp);
	var lastDate = new Date();
	lastDate.setTime(lastdayTmstmp);

	// Choose one day before and after for accommodation				
	// Refactoring: get index values searching on the select
	doc.first_day.selectedIndex = firstDate.getDate()-1;
	doc.first_month.selectedIndex = firstDate.getMonth();
	doc.first_year.selectedIndex = 0; //Get actual year index
				
	// Choose one day before and after for accommodation				
	// Refactoring: get index values searching on the select
	doc.last_day.selectedIndex = lastDate.getDate()-1;
	doc.last_month.selectedIndex = lastDate.getMonth();
	doc.last_year.selectedIndex = 0; //Get actual year index
	
	// Setup airport transfer
	if (packages[id]['transfer_incl'] >= 1) {
		doc.airport_pickup[0].checked = true;
	}
	else {
		doc.airport_pickup[1].checked = true;
	}
	
	// Select accommodation
	var foundIndex = findIndex(doc.accomodation_type_description, packages[id]['acco_id']);
	if (foundIndex >= 0) {
		doc.accomodation_type_description.selectedIndex = foundIndex;
	}
	doc.accomodation_type_description2.checked = false;				
	/*
	doc.companion[0].checked = true;
	doc.companion_same_accomodation[0].checked = true;
	doc.companion_same_bed[0].checked = true;
	doc.children[0].checked = true;
	doc.smoker[0].checked = true;
	doc.pets[0].checked = true;*/
} else {
	// Resetting to non-package values
//	doc.id_course.selectedIndex = 0;
	doc.id_course.value = 0;
	doc.number_weeks.selectedIndex = 0;
	doc.accomodation_type_description.selectedIndex = 0;
	doc.airport_pickup[0].checked = false;
	if (parseFloat(doc.elements['deposit1'].value) < 0) {
		var originalId = -1* parseInt(id);
		var depositAux = -1* parseFloat(doc.elements['deposit1'].value);
		doc.elements['deposit1'].value = parseFloat(packages[originalId]['commission_different']);
		packages[originalId]['commission_different'] = depositAux;
	}
}
}

function findIndex (selectObject, value) {
for(i=0; i<selectObject.length ; i++) {
	if(selectObject.options[i].value == value)
		return i;
}
return -1;
}

function overwriteWithPackageValues (id) {
	doc = document.applicationform;
	doc.indiv_lesson.selectedIndex = 0;
	doc.elements['id_course'].value = packages[id]['course_id'];				
	if (packages[id]['price_different_tuition'] >= 0) {
		doc.elements['published_price_of_course'].value = packages[id]['price_different_tuition'];
	}
	if (packages[id]['fee_different_tuition'] >= 0) {
		doc.elements['inscription_fee'].value = packages[id]['fee_different_tuition'];
	}	
	if (packages[id]['acco_incl'] && packages[id]['price_different_accommo'] >= 0) {
		doc.elements['published_price_accomodation'].value = packages[id]['price_different_accommo'];
	}
	if (packages[id]['acco_incl'] && packages[id]['fee_different_accommodation'] >= 0) {
		doc.elements['published_placementcharge'].value = packages[id]['fee_different_accommodation'];
	}
	if (packages[id]['commission_different'] >= 0) {
		var depositAux = doc.elements['deposit1'].value;
		doc.elements['deposit1'].value = -1 * parseFloat(packages[id]['commission_different']);
		packages[id]['commission_different'] = depositAux;
	}
	if (packages[id]['transfer_incl'] && packages[id]['transfer_diff'] >= 0) { 
		doc.elements['airport_transfer_costs'].value = packages[id]['transfer_diff'];
	} 	 						
}

function checkPlacesAvailable (id, sex) {
	var rtp = packages[id];
	if (rtp) {
		if (typeof sex != "undefined") {
			if (sex == "Mr" && rtp.male_places_free >= 0) {
				return rtp.male_places_free != 0;
			}
			if (sex == "Ms" && rtp.female_places_free >= 0) {
				return rtp.female_places_free != 0;
			}
		}
		return (rtp.places > 0 || rtp.male_places_free > 0 || rtp.female_places_free >= 0);
	}
}

function warnPackagePlacesFree() {
	if (typeof packages != "undefined") {
		var checked_sex = null;
		var unchecked_sex = null;
		$A(document.applicationform.sex).each(function(radio) {
			if (radio.checked) {
				checked_sex = radio.value;
			}
			else {
				unchecked_sex = radio.value;
			}
		});
		var package_id = getPackageId();
		if (checked_sex != null) {
			$("warning_sex_" + checked_sex).style.display = "";
			$("warning_sex_" + unchecked_sex).style.display = "none";
		}
		$("packagePlacesFreeWarning").style.display = (package_id<0 || checkPlacesAvailable(package_id, checked_sex)) ? "none" : "";
	}
}

function getPackageId() {
	var package_id = -1;
	if ( $( "real_time_package" ) ) { 
		$A(document.applicationform.real_time_package).some(function(radio) {
			if (radio.checked) {
				package_id = radio.value;
				return true;
			}
		});
	}
	return package_id;
}

function updateFormFieldsAvailability (id, disabled) {
	updateCourseFieldsAvailability(disabled);
	// Check first if accommodation is included 
	// Refactoring: Add here the posibility to look for school accommodations 
	// if accommdation is not included. Warn people that they will have to wait for 
	// accommdaotion confirmation
	updateAccommoFieldsAvailability(disabled);
}

function updateCourseFieldsAvailability(disabled) {
	doc = document.applicationform;
	doc.id_course.disabled = disabled;
	doc.number_weeks.disabled = disabled;
	doc.indiv_lesson.disabled = disabled;
	doc.start_day.disabled = disabled;
	doc.start_month.disabled = disabled;
	doc.start_year.disabled = disabled;								
}

function updateAccommoFieldsAvailability(disabled) {
	// Refactoring: Use more reflection instead of harcoded indexing to setup values 
	doc = document.applicationform;
	doc.accomodation_type_description.disabled = disabled;				
	doc.accomodation_type_description2.disabled = disabled;
	doc.first_day.disabled = disabled;
	doc.first_month.disabled = disabled;
	doc.first_year.disabled = disabled;
	doc.last_day.disabled = disabled;
	doc.last_month.disabled = disabled;
	doc.last_year.disabled = disabled;
/*
  	doc.companion[0].disabled = disabled;
	doc.companion[1].disabled = disabled;
	doc.companion_same_accomodation[0].disabled = disabled;
	doc.companion_same_accomodation[1].disabled = disabled;
	doc.companion_same_bed[0].disabled = disabled;
	doc.companion_same_bed[1].disabled = disabled;
	doc.children[0].disabled = disabled;
	doc.children[1].disabled = disabled;
	doc.children[2].disabled = disabled;
	doc.smoker[0].disabled = disabled;
	doc.smoker[1].disabled = disabled;
	doc.smoker[2].disabled = disabled;
	doc.pets[0].disabled = disabled;
	doc.pets[1].disabled = disabled;
	doc.pets[2].disabled = disabled;
*/
	doc.airport_pickup[0].disabled = disabled;
	doc.airport_pickup[1].disabled = disabled;				
}

function addZero(str){
	if (str<10){
		return "0"+String(str);
	}
	else return str;
}

function addDays(myDate,days) {
	return new Date(myDate.getTime() + days*24*60*60*1000);
}

function adjustAccommdationDate() {
	var firstDate = new Date();
	firstDate.setDate( document.getElementById( "start_day" ).value );
	firstDate.setMonth( document.getElementById( "start_month" ).value -1 );
	firstDate.setFullYear( document.getElementById( "start_year" ).value );
	// the accommodation day must start 1 day before the course starting date
	firstDate = addDays( firstDate, -1 );
	var weeks = document.getElementById( "number_weeks" ).value;
	if ( weeks == ">>>" ) {
		weeks = 0;
	}
	var days = 0;
	if ( weeks > 1 ) {
		days = ( ( weeks - 1 ) * 7 ) + 6;
	} else {
		days = 6;
	} 
	var lastDate = addDays( firstDate, days );
	document.getElementById( "first_day" ).value = firstDate.getDate();
	document.getElementById( "first_month" ).value = firstDate.getMonth() + 1;
	document.getElementById( "first_year" ).value = firstDate.getFullYear();
	document.getElementById( "last_day" ).value = lastDate.getDate();
	document.getElementById( "last_month" ).value = lastDate.getMonth() + 1;
	document.getElementById( "last_year" ).value = lastDate.getFullYear();
}

function showHideInsuranceSchool() {
	adjustAccommdationDate();
	showHideInsurance();
}

// in application page, when the costumer is older than 65, we hide the insurance tab.
function showHideInsurance(){
	//alert ('its me!!');
	if (false){
		var ageLimit = 65;
		var d=new Date();
		
		// we get the birth date
		var birth_month = document.getElementById('birth_month').selectedIndex;
		var birth_day = document.getElementById('birth_day').selectedIndex;	
		var birth_year = document.getElementById('birth_year').selectedIndex;
		
		//funny thing... date and month are +1 less, year is +10... so
		birth_month=birth_month+1;
		birth_day=birth_day+1;
		birth_year=birth_year+1910;
		
		// we get the starting dates of the course
		var start_month = document.getElementById('start_month').selectedIndex;
		var start_day = document.getElementById('start_day').selectedIndex;	
		var start_year = document.getElementById('start_year').selectedIndex;
		
		// recalculating dates from the funny indexing in the selects
		start_month=start_month+1;
		start_day=start_day+1;
		start_year=start_year+d.getFullYear();
		
		var full_start=parseInt(String(start_year)+addZero(start_month)+addZero(start_day));
		var full_birth=parseInt(String(birth_year)+addZero(birth_month)+addZero(birth_day));
		
		var full_diff=full_start-full_birth;
		//alert (full_diff+": "+full_start + " | " + full_birth);
		
		// 650000 equals 65 years, 0 months and 0 days
		// if it was any day or month or year bigger, the difference would be also bigger than 65000
		if (full_diff>650000){
			document.getElementById('insurance_box').style.display="none";
			document.getElementById('insurance_box_65').style.display="";
		}
		else{
			document.getElementById('insurance_box').style.display="";
			document.getElementById('insurance_box_65').style.display="none";
		}
		
		//alert (startDate.valueOf()+'\n'+birthDate);
	}
}

function openLowerPrice(url){
	window.open(url, "lowerPricePopUp", "width=610, height=660, scrollbars=0, status=0");
	//return false;
	
}