var bf_dow=new Array('Sun','Mon','Tue','Wed','Thu','Fri','Sat');var bf_months=new Array('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');var bf_messages=new Hash
({'airport_unavailable':'Your choice of airport is not available for this destination','out_of_season':'This destination is not available for the dates you have specified','need_destination':'Please select a destination','departure_passed':'Your departure date is in the past.','departure_future':'Your departure date is over 12 months away<br/>Press Search to continue','no_hotels':'No hotels found matching your criteria','no_flights':'No flights found matching your criteria'});function determine_bf_toggle_field_groups()
{var bf_toggle_field_groups=new Hash({holiday:new Hash({state:null,fields:new Hash({fancy_show:['bf_search_flexibility','bf_search_airport','bf_hotel_info'],boring_show:['bf_search_destination_area'],inline_show:['bf_search_duration_range'],boring_hide:['bf_search_destination_hto'],inline_hide:['bf_search_duration_precise']})}),flight:new Hash({state:null,fields:new Hash({fancy_show:['bf_search_flexibility','bf_search_airport'],fancy_hide:['bf_hotel_info'],boring_show:['bf_search_destination_area'],inline_show:['bf_search_duration_range'],boring_hide:['bf_search_destination_hto'],inline_hide:['bf_search_duration_precise']})}),hotel:new Hash({state:null,fields:new Hash({fancy_show:['bf_hotel_info'],fancy_hide:['bf_search_flexibility','bf_search_airport'],boring_show:['bf_search_destination_hto'],inline_show:['bf_search_duration_precise'],boring_hide:['bf_search_destination_area'],inline_hide:['bf_search_duration_range']})})});if(bf_city_break)
{var city_break=new Hash({inline_show:['bf_search_duration_precise'],inline_hide:['bf_search_duration_range']});bf_toggle_field_groups.get('holiday').get('fields').update(city_break);bf_toggle_field_groups.get('flight').get('fields').update(city_break);}
return bf_toggle_field_groups;}
function bf_check(){var check_logic=[{type:'follow',fields:['bf_cyo-mode-holiday','bf_destination_area']},{type:'follow',fields:['bf_cyo-mode-flight','bf_destination_area']},{type:'follow',fields:['bf_cyo-mode-hotel','bf_destination_hto']}];var r=cf_check_form(check_logic,0,0);if(!r){bf_destination_flash('need_destination');}
if(!bf_destination_check_season()){bf_destination_flash('out_of_season');r=false;}
if(!bf_date_check_past()){bf_details_flash('departure_passed');r=false;}
var future_warning_visible=$('future_warning_visible').value;if(!bf_date_check_future()&&future_warning_visible=='0'){bf_details_flash('departure_future');$('future_warning_visible').value='1';r=false;}
bf_update_hotel_id($('bf_hotel_name'));bf_notice('bf_destination_flash',bf_destination_flash_messages,1);bf_notice('bf_details_flash',bf_details_flash_messages,1);return r;}
function bf_party_check(){return parseInt($('bf_party_adults').value)>=1;}
var bf_current_mode;function bf_current_mode_retrieve(){return bf_current_mode;}
function bf_current_mode_set(mode){bf_current_mode=mode;}
function bf_mode_switch(bf_mode,source){if(source&&source=='default'){bf_mode_select(bf_mode);}else{bf_toggle_field_group(bf_mode,0);}
if(bf_mode=='hotel'){$('mv_nextpage').value='cyo-get_hotels';}else{$('mv_nextpage').value='cyo-get_flights';}
bf_current_mode_set(bf_mode);bf_duration_mode_switch();bf_update_arrival();}
function bf_mode_select(bf_mode){var bf_mode_selectors=new Array('bf_cyo-mode-holiday','bf_cyo-mode-hotel','bf_cyo-mode-flight');bf_toggle_field_group(bf_mode,1);bf_mode_selectors.each(function(box){box=$(box);if(box.value==bf_mode){box.checked=true;}else{box.checked=false;}});}
var bf_toggle_field_states=new Hash({});function bf_toggle_field_group(group,is_load){bf_toggle_field_groups=determine_bf_toggle_field_groups();bf_toggle_field_groups.get(group).get('fields').each(function(pair){pair_breakdown=pair.key.split('_');bf_toggle_fields_loop(pair.value,pair_breakdown[0],(pair_breakdown[1]=='show'?1:0),is_load);});}
function bf_toggle_fields_loop(set,mode,state,is_load){set.each(function(field){if(bf_toggle_field_states.get(field)==state){return;}
bf_toggle_field_states.set(field,state);if(mode=='fancy'&&!is_load){bf_toggle_field_fancy(field,state);}else{if(mode=='inline'){bf_toggle_field_boring_inline(field,state);}else{bf_toggle_field_boring(field,state);}}});}
function bf_toggle_field_fancy(field,state){if(state){Effect.SlideDown(field,{duration:0.2,queue:'end',delay:0.01});}else{Effect.SlideUp(field,{duration:0.2,queue:'front',delay:0.01});}}
function bf_toggle_field_boring(field,state){$(field).setStyle({display:(state?'block':'none')});}
function bf_toggle_field_boring_inline(field,state){$(field).setStyle({display:(state?'inline':'none')});}
function bf_date_check_past(){var date_source=$('bf_depart_date');var date_breakdown=bf_date_breakdown(date_source);var today=new Date();var then=new Date(date_breakdown.get('year'),date_breakdown.get('month'),date_breakdown.get('day'));return(then.getTime()>today.getTime());}
function bf_date_check_future(){var date_source=$('bf_depart_date');var date_breakdown=bf_date_breakdown(date_source);var next_year=new Date();next_year.setFullYear(next_year.getFullYear()+1);var then=new Date(date_breakdown.get('year'),date_breakdown.get('month'),date_breakdown.get('day'));return(next_year.getTime()>then.getTime());}
function bf_date_breakdown(date_source){var breakdown=new Hash();breakdown.set('year',parseInt(date_source.value.substr(6,4)));breakdown.set('month',parseInt(date_source.value.substr(3,2).replace(/^0/,''))-1);breakdown.set('day',parseInt(date_source.value.substr(0,2).replace(/^0/,'')));return breakdown;}
function bf_date_default(bf_depart_date){var date_source=$('bf_depart_date');if(bf_depart_date){date_source.value=bf_depart_date;}else{if(date_source.value==''||date_source.value=='02-00-0'){var p=new Date();var now=p.getTime();var then=new Date(now+604800000);var d=date_zero_pad(then.getDate(),2);var m=date_zero_pad((then.getMonth()+1),2);var y=date_zero_pad(then.getFullYear(),4);date_source.value=d+"-"+m+"-"+y;}}}
function bf_date_update(source){var new_date;var year,month,day;if(source=='cal'||source=='default'){var input_date=$('bf_depart_date').value
year=input_date.substr(6,4);month=(parseInt(input_date.substr(3,2).replace(/^0/,''))-1);day=parseInt(input_date.substr(0,2).replace(/^0/,''));new_date=new Date(year,month,day);bf_update_date_box(year,month,day);$('bf_depart_display_month').value=new_date.getFullYear()+'-'+date_zero_pad((new_date.getMonth()+1),2);$('bf_depart_display_date').value=new_date.getDate();}else if(source=='date'||source=='month'||source=='force'){var raw_date_month=$('bf_depart_display_month').value;var raw_date_date=$('bf_depart_display_date').value;$('bf_depart_date').value=date_zero_pad($('bf_depart_display_date').value,2)+'-'+date_zero_pad(raw_date_month.substr(5,2),2)+'-'+raw_date_month.substr(0,4);year=raw_date_month.substr(0,4);month=parseInt(raw_date_month.substr(5,2)-1);day=raw_date_date;bf_update_date_box(year,month,day);}
bf_update_arrival();bf_update_day(year,month,day);bf_destination_check();}
function bf_update_day(year,month,day){var new_date=new Date(year,month,day);$('bf_depart_display_day').innerHTML=bf_dow[new_date.getDay()];}
function bf_update_date_box(year,month,day){var current_index=$('bf_depart_display_date').value;var today=new Date();var days_in_month=bf_get_days_in_month(year,month);for(var i=($('bf_depart_display_date').options.length-1);i>=0;i--){$('bf_depart_display_date').remove(i);}
var min_day;for(var i=1;i<=days_in_month;i++){var doc=new Option(i,i);$('bf_depart_display_date').options.add(doc);}
var potential_set_to=1;if(current_index&&current_index<=days_in_month){potential_set_to=current_index;}else if((day*1)<=days_in_month){day=day*1;potential_set_to=day;}else if((day*1)>days_in_month){potential_set_to=days_in_month;}
if(potential_set_to<min_day){$('bf_depart_display_date').value=min_day;bf_date_update('force');}else{$('bf_depart_display_date').value=potential_set_to;}}
function bf_get_days_in_month(year,month){return(32-new Date(year,month,32).getDate());}
function bf_update_duration(){bf_duration_has_been_changed_set();bf_update_arrival();}
function bf_duration_mode_switch(){if(!bf_duration_has_been_changed_retrieve()){return;}
var duration_range=$('bf_duration_range').value;var duration_precise=$('bf_duration_precise').value;var mode=bf_current_mode_retrieve();if(mode=='holiday'||mode=='flight'||bf_city_break){var duration_to_select;if(duration_precise==7||duration_precise==14){duration_to_select=duration_precise;}else if(duration_precise>=15){duration_to_select='15-21';}else if(duration_precise>=8){duration_to_select='8-13';}else{duration_to_select='3-6';}
$('bf_duration_range').value=duration_to_select}else{var duration_to_select;if(duration_range.match(/\-/)){duration_to_select=duration_range.split('-')[0];}else{duration_to_select=duration_range;}
$('bf_duration_precise').value=duration_to_select;}
bf_duration_has_been_changed_reset();}
var bf_duration_has_been_changed=0;function bf_duration_has_been_changed_set(){bf_duration_has_been_changed=1;}
function bf_duration_has_been_changed_reset(){bf_duration_has_been_changed=0;}
function bf_duration_has_been_changed_retrieve(){return bf_duration_has_been_changed;}
function bf_update_arrival(){var input_date=$('bf_depart_date').value;var year=input_date.substr(6,4);var month=(parseInt(input_date.substr(3,2).replace(/^0/,''))-1);var day=parseInt(input_date.substr(0,2).replace(/^0/,''));var nights;if(bf_current_mode_retrieve()=='hotel'||bf_city_break){nights=$('bf_duration_precise').value;}else{nights=$('bf_duration_range').value;}
if(nights.match(/\D/)){bf_toggle_field_boring_inline('bf_search_arrive',0)
return;}else{bf_toggle_field_boring_inline('bf_search_arrive',1)}
var arrival=new Date(year,month,(day+parseInt(nights)));$('bf_search_arrive_day').innerHTML=bf_dow[arrival.getDay()];$('bf_search_arrive_date').innerHTML=arrival.getDate();$('bf_search_arrive_month').innerHTML=bf_months[arrival.getMonth()];$('bf_search_arrive_year').innerHTML=arrival.getFullYear();}
var bf_last_selected_airport;function bf_destination_update(destination,source,town){if(source=='hto'){$('bf_destination_area').value=destination;}else if(source=='default'&&$('bf_destination_area').value!=destination){$('bf_destination_area').value=destination;}else if(source=='area'){$('bf_destination_hto').value=destination;}
bf_destination_update_towns(destination,town);update_departure_airports(destination);bf_destination_check(destination);if(bf_mode!='flight'){bf_hotel_name_autocomplete();}}
function bf_destination_check(destination){destination=bf_get_current_destination(destination);bf_notice('bf_destination_flash',bf_destination_flash_messages);}
function bf_get_current_destination(destination){if(destination==undefined){destination=bf_last_selected_airport;}
bf_last_selected_airport=destination;return destination;}
function bf_destination_update_towns(airport,default_town){if(!$('bf_destination_town')){return;}
for(var i=($('bf_destination_town').options.length-1);i>=0;i--){$('bf_destination_town').remove(i);}
var doc=new Option('Any town','');$('bf_destination_town').options.add(doc);if(bf_destinations.get(airport)&&bf_destinations.get(airport).towns){bf_destinations.get(airport).towns.each(function(town){var doc=new Option(town,town,false,(default_town&&default_town.toLowerCase()==town.toLowerCase()?true:false));$('bf_destination_town').options.add(doc);});}}
function bf_destination_check_season(){var select=$('bf_destination_area');if(typeof select!="undefined"){var destination=select.options[select.selectedIndex];if(destination.attributes.season_start==undefined)
return true;if(destination.attributes.season_end==undefined)
return true;var season_start=parseInt(destination.attributes.season_start.value);var season_end=parseInt(destination.attributes.season_end.value);var then=$('bf_depart_date').value;y=then.split('-');if(y[1].indexOf('0')==0){y[1]=y[1].substring(2,1);}
then=parseInt(y[1]+""+y[0]);if(then>season_end||then<season_start){bf_messages.set('out_of_season',"This destination operates on a seasonal basis between "+
bf_season_date_string(season_start)+" and "+
bf_season_date_string(season_end)+".<br/><br/>"+
"Please try a destination that is open all year round such as "+
canaries_link+", "+caribbean_link+", "+cyprus_link+", "+
egypt_link+", "+malta_link+" or "+tunisia_link+".");return false;}else{return true;}}else{return true;}}
function bf_season_date_string(date_int){var day=parseInt(date_int%100);var month=parseInt(date_int/100);return ordinalize(day)+" "+bf_months[month-1];}
var bf_destination_flash_messages=new Array();var bf_details_flash_messages=new Array();var bf_misc_flash_messages=new Array();function bf_destination_flash(msg){bf_destination_flash_messages.push(bf_messages.get(msg));}
function bf_details_flash(msg){bf_details_flash_messages.push(bf_messages.get(msg));}
function bf_misc_flash(msg){bf_misc_flash_messages.push(bf_messages.get(msg));}
function bf_notice(bf_box,bf_messages,bf_scroll){var notice_box=$(bf_box);if(bf_messages.length>0){var notice_text="<ol>";bf_messages.each(function(msg){notice_text+="<li>"+msg+"</li>";});notice_text+="</ol>";notice_box.innerHTML=notice_text;notice_box.style.display='block';if(bf_scroll){window.scroll(0,0);}
new Effect.Highlight(notice_box,{startcolor:'#EFC003',endcolor:'#FDE173'});}else{notice_box.innerHTML='';notice_box.style.display='none';}
bf_messages.clear();}
function bf_airport_change(a){bf_airport=a;}
var bf_dest_type;var ac,hotels;function bf_hotel_name_autocomplete_init()
{if(!$('bf_hotel_name').value){$('bf_hotel_name').value=unescape(bf_hotel_name);}
ac=new Autocompleter.Local('bf_hotel_name','bf_hotel_name_results',"",{afterUpdateElement:bf_update_hotel_id,minChars:1,choices:8,frequency:0.1});}
function bf_hotel_name_autocomplete()
{var destination=$('bf_destination_area').value;if(!destination)return;new Ajax.Request('/cgi-bin/hotel_json.pl?destination='+destination,{method:'get',onCreate:function()
{ac.setLocalArray([]);ac.showWaiting(5000);},onSuccess:function(transport)
{if(transport.responseText)
{hotels=transport.responseText.evalJSON();ac.setLocalArray(Object.keys(hotels));hotels=transport.responseText.toLowerCase().evalJSON();}
ac.hideWaiting();}});}
function bf_update_hotel_id(textField)
{if(typeof hotels!="undefined"){var hotel_name=textField.getValue().toLowerCase().strip();if(!hotel_name)return;var hotel_id=hotels[hotel_name];$("bf_hotel_id").setValue((hotel_id)?hotel_id:'');}}
function bf_init(bf_depart_date,bf_search_airport,bf_mode,bf_town,bf_reset){if(bf_reset){bf_date_default(bf_depart_date);bf_date_update('default');bf_hotel_name_autocomplete_init();bf_destination_update(bf_search_airport,'default',bf_town);bf_mode_switch(bf_mode,'default');bf_notice('bf_misc_flash',bf_misc_flash_messages,1);}else{bf_hotel_name_autocomplete_init();}}
function ordinalize(day)
{dNum=day;daySuffix='th';if(dNum!=11&&dNum!=12&&dNum!=13){if(dNum>9)dNum=dNum%10;if(dNum==1)daySuffix='st';if(dNum==2)daySuffix='nd';if(dNum==3)daySuffix='rd';}
return''+day+daySuffix;}