jQuery(function()
{
  jQuery("div.app_button").each(function()
  {
    jQuery(this).hover(function()
    {
      jQuery(this).css({ cursor:"pointer" }).find("p").css({ color:"#30a933" });
      //jQuery("div.app_button p").css({ color:"#30A933" });
    }, function()
    {
      jQuery(this).css({ cursor:"auto" }).find("p").css({ color:"black" });
      //jQuery("div.app_button p").css({ color:"black" });
    });
  });
  
  
  // 
  // Save an edited booking
  //
  jQuery("#save_button").click(function()
  {
    saveBooking();
    return false;
  });
  
  jQuery("#delete_button").click(function()
  {
    deleteBooking();
    return false;
  });
});



function validDate(strValue)
{
  var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{4}jQuery/
 
  //check to see if in correct format
  if(!objRegExp.test(strValue))
    return false; //doesn't match pattern, bad date
  else{
    var strSeparator = strValue.substring(2,3) 
    var arrayDate = strValue.split(strSeparator); 
    //create a lookup for months not equal to Feb.
    var arrayLookup = { '01' : 31,'03' : 31, 
                        '04' : 30,'05' : 31,
                        '06' : 30,'07' : 31,
                        '08' : 31,'09' : 30,
                        '10' : 31,'11' : 30,'12' : 31}
    var intDay = parseInt(arrayDate[0],10); 

    //check if month value and day value agree
    if(arrayLookup[arrayDate[1]] != null) {
      if(intDay <= arrayLookup[arrayDate[1]] && intDay != 0)
        return true; //found in lookup table, good date
    }
    
    // Deal with February
    var intMonth = parseInt(arrayDate[1],10);
    if (intMonth == 2) { 
       var intYear = parseInt(arrayDate[2]);
       if (intDay > 0 && intDay < 29) {
           return true;
       }
       else if (intDay == 29) {
         if ((intYear % 4 == 0) && (intYear % 100 != 0) || 
             (intYear % 400 == 0)) {
              // year div by 4 and ((not div by 100) or div by 400) ->ok
             return true;
         }   
       }
    }
  }  
  return false; //any other values, bad date
}



function convertToDbDate(dateStr)
{
  var returnDate;
  var strSeparator = dateStr.substring(2,3) 
  var arrayDate = dateStr.split(strSeparator); 
  returnDate = arrayDate[2] + "-" + arrayDate[1] + "-" + arrayDate[0];
  return (returnDate);
}

function convertFromDbDate(dateStr)
{
  var returnDate;
  var strSeparator = dateStr.substring(4,5) 
  var arrayDate = dateStr.split(strSeparator); 
  
  if (arrayDate[1].length == 1)
  {
    var tmp = arrayDate[1];
    arrayDate[1] = "0" + tmp;
  }
  
  if (arrayDate[2].length == 1)
  {
    var tmp = arrayDate[2];
    arrayDate[2] = "0" + tmp;
  }
  
  returnDate = arrayDate[2] + "-" + arrayDate[1] + "-" + arrayDate[0];
  return (returnDate);
}

function processBookingDetails(xml)
{
  jQuery("booking",xml).each(function(id)
  {
    var bookingData = jQuery("booking",xml).get(id);
    var bookingId = jQuery("bookingId",bookingData).text();
    var bookingStatus = jQuery("bookingStatus",bookingData).text();
    var reference = jQuery("reference",bookingData).text();
    var customerName = jQuery("customerName",bookingData).text();
    var apartment = jQuery("apartmentName",bookingData).text();
    var apartmentId = jQuery("apartmentId",bookingData).text();
    var arrivalDate = jQuery("arrivalDate",bookingData).text();
    var departureDate = jQuery("departureDate",bookingData).text();
    var price = jQuery("customerPrice",bookingData).text();
    
    var convertedArrivalDate = "";
    if (arrivalDate != "")
      convertedArrivalDate = convertFromDbDate(arrivalDate);
      
    var convertedDepartureDate = "";  
    if (departureDate != "")
      convertedDepartureDate = convertFromDbDate(departureDate);
    
    jQuery("td#booking_id").empty();
	jQuery("td#booking_id").append(bookingId);
	jQuery("select#apartment_input").attr("value",apartmentId);
    jQuery("input#booking_reference_input").attr("value",reference);
    jQuery("select#booking_status_input").attr("value",bookingStatus);
    jQuery("input#arrival_date_input").attr("value",convertedArrivalDate);
    jQuery("input#departure_date_input").attr("value",convertedDepartureDate);
    jQuery("input#accommodation_cost_input").attr("value",price);
    jQuery("input#customer_name_input").attr("value",customerName);
  });
} 

function emptyBookingDetails()
{
  jQuery("td#booking_id").empty();
  jQuery("select#apartment_input").val("0");
  jQuery("td#day_selected").empty();
  jQuery("input#booking_reference_input").attr("value","");
  jQuery("select#booking_status_input").val("0");
  jQuery("input#arrival_date_input").attr("value","");
  jQuery("input#departure_date_input").attr("value","");
  jQuery("input#accommodation_cost_input").attr("value","");
  jQuery("input#customer_name_input").attr("value","");
} 


function getMonthName(monthText)
{ 
  var monthName;
  switch(monthText)
  {
    case "1": monthName = "Jan"; break;
	case "2": monthName = "Feb"; break;
	case "3": monthName = "Mar"; break;
	case "4": monthName = "Apr"; break;
	case "5": monthName = "May"; break;
	case "6": monthName = "Jun"; break;
	case "7": monthName = "Jul"; break;
	case "8": monthName = "Aug"; break;
	case "9": monthName = "Sep"; break;
	case "10": monthName = "Oct"; break;
	case "11": monthName = "Nov"; break;
	case "12": monthName = "Dec"; break;
    default: monthName = "???"; break;
  }
 
  return (monthName);
}



function deleteBooking()
{
  bookingId = jQuery("#booking_id").text();
  
  if (bookingId == "")
    return false;
  
  var confirmDelete = confirm("Delete booking?");
  
  if (confirmDelete)  
  {
    // Remove data in booking details form, so user can't Save
    // again immediately after deleting (will fail because the 
    // displayed booking Id no longer exists)
    emptyBookingDetails();
    
    jQuery.post("../booking_delete.php",
      { Id:          bookingId },
      function(xml) { processBookingDelete(); }
    );  
  }
}


function saveBooking()
{
  bookingId = jQuery("#booking_id").text();
  //apartmentId = jQuery("#apartment_select").val();
  apartmentId = jQuery("#apartment_input").val();
  bookingReferenceInput = jQuery("#booking_reference_input").attr("value");
  bookingStatusInput = jQuery("#booking_status_input").val();
  customerNameInput = jQuery("#customer_name_input").attr("value");
  arrivalDateInput = jQuery("#arrival_date_input").attr("value");
  departureDateInput = jQuery("#departure_date_input").attr("value");
  accommodationCostInput = jQuery("#accommodation_cost_input").attr("value");
  
  if (apartmentId == 0)
  {
    alert("No apartment selected");
    return false;
  }
    
  if (bookingReferenceInput == null || customerNameInput == null ||
      arrivalDateInput == null || departureDateInput == null ||
      accommodationCostInput == null || bookingStatusInput == 0)
  {
    alert("Please complete the booking details form");
    return false;
  }
    
  if (!validDate(arrivalDateInput))
  {
    alert("Invalid arrival date.\nUse dd-mm-yyyy or dd/mm/yyyy.");
    return false;
  }
    
  if (!validDate(departureDateInput))
  {
    alert("Invalid departure date.\nUse dd-mm-yyyy or dd/mm/yyyy.");
    return false;
  }
  
  // Convert dates to MySQL format (yyyy-mm-dd)
  var convertedArrivalDate = convertToDbDate(arrivalDateInput);
  var convertedDepartureDate = convertToDbDate(departureDateInput);
    
  jQuery.post("../booking_edit.php",
    {
      Id:          bookingId,
      Apartment:   apartmentId,
      Reference:   bookingReferenceInput,
      Status:      bookingStatusInput,
      Name:        customerNameInput,
      Arrival:     convertedArrivalDate,
      Departure:   convertedDepartureDate,
      Cost:        accommodationCostInput
    },
    function(xml) { processBookingEdit(xml); }
  );  
}

