// JavaScript Document public booking
var selected_meal_id = null; 
var selected_day = null;
var selected_month = null;
today_unavailable_array = new Array();
var selected_time = null;
var timestamp_booking_end = null;
load_day = null;
load_time = null;
load_booking = false;

function set_loader_position(event) {
var xposition = Event.pointerX(event);
var yposition = Event.pointerY(event);
$('loader_image').setStyle({   top: yposition+15,   left: xposition+15 }); 
}

function hide_loader() {
   if( $('loader_image').visible() ) {
    $('loader_image').setStyle({   display:'none' }); 
	return false;
   }   
}

function show_loader() { 
   if( !$('loader_image').visible() ) {
    $('loader_image').setStyle({   display:'block' }); 
	return false;
   }

}

//meal buttons on top, change color etc
function chose_meal(event,meal_id) {

//check if already one selected, remove classname from the old one
if(selected_meal_id) {
var selected_meal_button = $$('div.btn_meals_selected');
selected_meal_button[0].removeClassName('btn_meals_selected');
}

//if we are not loading from existing booking
if(!meal_id) {
var element = Event.element(event); 
} else {
var element = $('sections_meals_btn_'+meal_id);
}

//if it came from a span

if(element.hasClassName('btn_sections_name')) {
element = element.up(); 
} 


element.addClassName('btn_meals_selected'); 
//find sections_meals_id
sections_meals_id = element.readAttribute('name');
//the next variable will be used after diner selected a date
selected_meal_id = sections_meals_id; 
//set 2 to active

//if already a day was selected, the times have to be reloaded
if(selected_day) {
load_times();
}

$('2').addClassName('numberOfPeople_td_on');
$('numberOfPeople_form').enable();

if(wanted_month == null && wanted_year == null) {
load_calendar();
} else {
load_calendar(wanted_month,wanted_year);
}

}

//this form checks if the entered value in number people is correct
function check_number_people(value,max_number,event) {
   //check keys
  if( (event.keyCode < 46 && event.keyCode > 9 ) || event.keyCode > 57  ) {
    Event.stop(event);
  } else {
  //check the value
  setTimeout('check_number_people_value()', 0);
  }
}


function check_number_people_value(event) {
var value = $('numberOfPeople_input').value;
    
	if(value > 5) { 
    alert('The maximum number of people for online bookings is 5.\n\nIf you wish to book for more people please call the restaurant.\n\nThank you!');
    $('numberOfPeople_input').value = '5';
	check_number_people_value();
    } 
	
	if(value <= 5 && value > 0) {
	//the next variable will be used after diner selected a date
	selected_number_people = value;
	if(selected_day == null) {
	$('calendar_td').addClassName('calendar_td_on');
    set_event_future_days();
	} else {
	//when already a day is selected when somebody changes the number_people, times load again
	load_times();
	}
	
	
	}  
}

//this function calls the calendar. Needs the wanted month and year
function load_calendar(month,year,delete_selected_day) {


var text = 'restaurant_id='+restaurant_id;

if(month && year) {
text = text+'&month='+month+'&year='+year;
}

if(delete_selected_day) {
selected_day = null; 
}  
  
//if already a meal selected
if(selected_meal_id) {     
text = text+'&selected_meal_id='+selected_meal_id;  
}
//if day selected
if(selected_day) {  
text = text+'&selected_day='+selected_day;  
} 

//tell calendar the selected day, if we load an existing booking
if(load_day) {
text = text+'&load_day='+load_day;  
}

//section
if(section) {  
text = text+'&section='+section;  
}

show_loader();
new Ajax.Updater('calendar', 'php/calendar.php', {  
 parameters: text,
 onComplete: function(transport) {     
   if (200 == transport.status) {

	hide_loader();    

	if(selected_number_people) {
	set_event_future_days();
	}


   }
 } ,
 onFailure: function(transport) {     
 alert('Reloading System, one moment please.');
 location.reload();

 },
 evalScripts: true
}); 

}

//set event to today and future days
function set_event_future_days() {
//future days
   var days_future = $$('div.day_future');
   days_future.each(function(item) 
   { 
   item.observe('mousedown', load_times);
   //item.observe('click', check_meal_day_unavailability);
    
   }); 
   //future days span number
   var days_number_future = $$('div.day_number');
   days_number_future.each(function(item) 
   { 
   item.observe('mousedown', load_times); 
   }); 

   
//today
  var today = $$('div.today');
  //now needs to check if today is clickable or all meals are too late
  if(today[0]) {
 	 today[0].observe('mousedown', load_times); 
  }

  
}

//function to load times
function load_times(event) {

//set the background to active
if(!$('4').hasClassName('times_td_on') ) {
$('4').toggleClassName('times_td_on');
}
show_loader();

if(event) { 

var element = Event.element(event);

//find id of selected day, or remove classname if already one selected
//selected day will be used later
if(selected_day != null && !$(selected_day).hasClassName('not_a_day')) {
	$(selected_day).toggleClassName('calendar_day_selected');
}
//if a span was clicked
if(element.up('div.day_future') ) {
	element = element.up('div.day_future');
}

if(element.up('div.today') ) {
	element = element.up('div.today');
}
selected_day = element.readAttribute('id'); 

check_meal_day_unavailability();

//set selected day to active
element.addClassName('calendar_day_selected');
//find month and year
var month = $('month');
month_year = month.firstChild.nodeValue;
//now load the times window
}

var text = 'max_free_seats_table='+max_free_seats_table+'&selected_meal_id='+selected_meal_id+'&selected_number_people='+selected_number_people+'&selected_day='+selected_day+'&month_year='+month_year+'&restaurant_id='+restaurant_id;
//If a time is selected we need it in times.php
if(selected_time) {
text = text+'&selected_time='+selected_time;
}

//if we are loading, post the load_booking to times.php
if(load_booking) {
text = text+'&load_booking='+load_booking;
}

//check if the day is in a slave periode
if( check_slave_day() != null ) {
	text = text+'&slave_year_day='+check_slave_day();
}


new Ajax.Updater('lyr1', 'php/times.php', {  
 parameters: text,
 evalScripts: true,
 onComplete: function(transport) {     
   if (200 == transport.status) {
    hide_loader();
    initScrollLayer();
	set_events_single_times();
	check_userdata();
	   //if we load a booking
	  if(load_booking) {
	  var selected_time_button = $$('div.single_time_selected');
	  selected_time = selected_time_button[0].readAttribute('id');
	  datafield = selected_time_button[0].readAttribute('name');
      }
	 
   }
 } ,
 onFailure: function(transport) { 
  hide_loader();    
 alert('This window has been opened for too long. It will reload now.');
 //alert(transport.responseText);
 location.reload();

 }
}); 

}

//set events for the single times and insert scrolling for that div

function set_events_single_times() {

//if we are loading an existing booking
if( (load_booking != false) && ($(load_time)) ) {
   
   if( $(load_time).readAttribute('class') == 'single_time_full' ) {
   $(load_time).removeClassName('single_time_full');
   $(load_time).addClassName('single_time');
   } 
   
   if(selected_time == load_time) {
   $(load_time).addClassName('single_time_selected');
   } else {
   $(load_time).addClassName('single_time');
   }
}
//end load

   var single_times = $$('div.single_time');
   single_times.each(function(item) 
   { 
    item.observe('click', ask_for_userdata);
	  
	 
//toggle classname for single_times
     item.observe('click', function(event) {

	   var single_time_selected = $$('div.single_time_selected');
	   
	    single_time_selected.each(function(item)  {
	    item.removeClassName('single_time_selected');
	    }
       )
	 
	 var element = Event.element(event);
	 
	 if(!element.hasClassName('single_time_selected') ) {
        element.toggleClassName('single_time_selected'); 
		}
	 
	 var selected_time_button = $$('div.single_time_selected');
	 selected_time = selected_time_button[0].readAttribute('id');
	 datafield = selected_time_button[0].readAttribute('name');
     });
	 item.observe('click', check_userdata );
     
   }); 


//if time was selected before and the times were reloaded
if(selected_time && $(selected_time) ) { 
  if(!$(selected_time).hasClassName('single_time_selected')) {
     $(selected_time).toggleClassName('single_time_selected'); 
  }
}
    
  
}

//ask for the user data
function ask_for_userdata(event) {

//set background to on
  if(!$('5').hasClassName('userdata_td_on') ) {
  $('5').toggleClassName('userdata_td_on'); 
  $('userdata_form').enable();
  }

//attach event handler for userdata inputs

var userdata_fields = $$('input.input_userdata');
   userdata_fields.each(function(item)  {
   item.observe('keyup', check_userdata);
   }
 )

}

function check_userdata() {
var all_data = true;
//firstname
 if($F('user_data_input_1').length < 1) {
    if($('6').hasClassName('book_td_on')) {
    $('6').toggleClassName('book_td_on');
    }
 all_data = false;
 }
//lastname
 if($F('user_data_input_2').length < 2) {
   if($('6').hasClassName('book_td_on')) {
   $('6').toggleClassName('book_td_on');
   }

 all_data = false;
 }
 //email 
 if($F('user_data_input_3').length < 2 ) {
   if($('6').hasClassName('book_td_on')) {
   $('6').toggleClassName('book_td_on');
   }
 all_data = false;
 }
  
  //tel 
 if($F('user_data_input_4').length < 2 ) {
   if($('6').hasClassName('book_td_on')) {
   $('6').toggleClassName('book_td_on');
   }
 all_data = false;
 }

if(!$(selected_time)) {
 all_data = false;
}
 
if(all_data == true) {

  if(!$('6').hasClassName('book_td_on')) {
    $('6').toggleClassName('book_td_on');
    $('6').observe('click', show_summary);    
  }
  firstname = $F('user_data_input_1').gsub('\\?','');
  surname = $F('user_data_input_2').gsub('\\?','');
  email = $F('user_data_input_3').gsub('\\?','');
  phone = $F('user_data_input_4').gsub('\\?','');
} else {
  if($('6').hasClassName('book_td_on')) {
    $('6').toggleClassName('book_td_on');  
  }
  $('6').stopObserving('click', show_summary); 
} 
  
}

//function to open a new window with a summary and send booking
function show_summary() {
show_loader();
var text = 'section='+section+'&selected_meal_id='+selected_meal_id+'&selected_number_people='+selected_number_people+'&selected_day='+selected_day+'&month='+month+'&month_year='+month_year+'&selected_time='+selected_time+'&datafield='+datafield+'&firstname='+firstname+'&surname='+surname+'&email='+email+'&phone='+phone+'&session_end='+session_end+'&restaurant_id='+restaurant_id+'&last_order='+last_order;
//if we are loading
if(load_booking) {
	text += '&bid='+load_booking;
	text += '&uid='+unique_id;
}


new Ajax.Updater('summary_container', 'php/summary.php', {  
 parameters: text,
 
 onComplete: function(transport) {     
   if (200 == transport.status) {
      hide_loader();
      $('main_container').toggle();
      $('summary_container').toggle();
      $('changelink').observe('click', make_changes);
      $('confirm').observe('click', confirmation);  
 
   }
 } ,
 onFailure: function(transport) {     
 alert('Sorry, we are experiencing technical difficulties. We have to reload this window. Please try again after that.');
 location.reload();
 }
}); 


}


function confirmation() {

$('confirm').stopObserving();  


show_loader();

//put selected options in text
var options_checkboxes = $$('input.option_checkbox');

selected_options = '';
options_checkboxes.each(function(item) 
 { 
 if(item.checked) {
 selected_options = selected_options+';'+item.value;
 }
 
 
 }); 
  
var text = 'section_id='+$F("section_id")+'&selected_meal_id='+selected_meal_id+'&section_name='+$F("section_name")+'&meal_name='+$F("meal_name")+'&selected_number_people='+$F("selected_number_people")+'&selected_time_timestring='+$F("selected_time_timestring")+'&timestamp_booking_end='+$F("timestamp_booking_end")+'&firstname='+$F("firstname")+'&surname='+$F("surname")+'&email='+$F("email")+'&phone='+$F("phone")+'&booking_message='+$F("message").inspect().gsub('\\?','')+'&options='+selected_options+'&restaurant_id='+restaurant_id+'&flag_table_joinable='+$F("flag_table_joinable")+'&tablesize='+$F("tablesize");

//if we are loading
if(load_booking) {
text += '&bid='+$F("bid");
text += '&uid='+$F("uid");
}

new Ajax.Updater('summary_container', 'php/mailsend.php', {  
 parameters: text,
 onComplete: function(transport) {     
   if (200 == transport.status) { 
   hide_loader();    

   }
 } ,
 onFailure: function(transport) {     
 alert('Error.');
 //location.reload();
 }
}); 

}

//next function makes changes available after clicking on book
function make_changes() {
  $('main_container').toggle();
  $('summary_container').toggle();
}



//check todays meals availability and set meal buttons classname
function check_today_unavailable() {
  if(today_unavailable_array.length > 0) {
  
   today_unavailable_array.each(function(item) 
   { 
       if($('sections_meals_btn_'+item).hasClassName('btn_meals_selected') ) {
	     
	     $('sections_meals_btn_'+item).removeClassName('btn_meals_selected');
		 $('sections_meals_btn_'+item).addClassName('btn_meals_inactive');
		 var classname_removed = true;
		 alert('Today it is too late too book for. Please choose another Meal or another Day');

	   }
	   	     
	  if(!classname_removed) {
	    $('sections_meals_btn_'+item).removeClassName('btn_meals_selected');
	    $('sections_meals_btn_'+item).addClassName('btn_meals_inactive');
	  }

	 $('sections_meals_btn_'+item).stopObserving('click', chose_meal);
	 
   });   
  }
}


//check day_future availability
function check_meal_day_unavailability() {

if(selected_day) {
  var day = selected_day.replace(/d/, '');
//deactivate buttons of unavalable meals

  if(day_meal_unavailable_array[day]) {

     day_meal_unavailable_array[day].each(function(item)  {

		if($('sections_meals_btn_'+item).hasClassName('btn_meals')) {
			$('sections_meals_btn_'+item).removeClassName('btn_meals');
			$('sections_meals_btn_'+item).addClassName('btn_meals_inactive');
			$('sections_meals_btn_'+item).stopObserving('click', chose_meal);
		}	  
     });
	 	 
  } 

//activate buttons of avalable meals
   //first inactive buttons
   var activate = true;
   var meal_id = null;
   var inactive_buttons = $$('div.btn_meals_inactive');

	 //check and activate inactive_buttons 
	 inactive_buttons.each(function(item)  {
	 
	    meal_id = item.readAttribute('name');
	    activate = true;
          
		  if(day_meal_unavailable_array[day]) {
	      day_meal_unavailable_array[day].each(function(item)  {
	          if(item == meal_id) {
	          activate = null;
	          } 
			     
	     }); 
		 } 

		 
	         if(activate == true) {
	         item.removeClassName('btn_meals_inactive');
	         item.addClassName('btn_meals');
             item.observe('click', chose_meal);
	        }
		 
	 }); 

}
  
}

//function to load the data of an existing booking

function load_a_booking(booking_id,uid,shut_down_before_start) {
var text = 'restaurant_id='+restaurant_id+'&bid='+booking_id+'&uid='+uid+'&shut_down_before_start='+shut_down_before_start;
new Ajax.Request('php/load_booking.php', {  
 parameters: text,
 onComplete: function(transport) {     
   if (200 == transport.status) {
   //alert(transport.responseText);
   eval(transport.responseText);
   }
 } ,
 onFailure: function(transport) {     
 alert("error in load_booking");
 location.reload();
 },
evalScripts: true
}); 

}


//function to delete a booking

function delete_a_booking() {

if(confirm('Would you like to delete this booking?')) {
var text = 'bid='+load_booking+'&uid='+unique_id+'&section='+section+'&restaurant_id='+restaurant_id;
new Ajax.Request('php/delete_booking.php', {  
 parameters: text,
 onComplete: function(transport) {     
   if (200 == transport.status) {
   //alert(transport.responseText);
   alert('Your booking has been deleted');
   eval(transport.responseText);
   }
 } ,
 onFailure: function(transport) {     
 alert("error in delete_booking");
 //location.reload();
 },
evalScripts: true
}); 
}

}


function check_slave_day() {
	
	var day_today = selected_day.substr(1);
	var slave_year_day_number;
	
	day_today = String(day_today);
	
	if( day_today.length == 1 ) {
		day_today = String('0'+day_today);
	}

	
	//check if the selected day appears in the array with all the slave time days
	if( slave_month_days_array.indexOf(day_today) > -1 ) {

		var index = slave_month_days_array.indexOf(day_today);
		slave_year_day_number = slave_year_days_array[index];	
		
	} else {
		slave_year_day_number = null;	
	}

return slave_year_day_number;

}


