var engine_reservations_process = "webcpms/proc_reservations.php";
var ajaxResDate,
    ajaxResTime,
    ajaxNextValidDate,
    ajaxEventOccasion,
    ajaxSaveReservation;

var imgEmpty = new Image(); imgEmpty.src = "webcpms/icons/list_off.gif";
var imgLeftOut = new Image(); imgLeftOut.src = "webcpms/icons/list_left.gif";
var imgLeft = new Image(); imgLeft.src = "webcpms/icons/list_left_on.gif";
var imgRight = new Image(); imgRight.src = "webcpms/icons/list_right_on.gif";




function saveReservationsSettings() {
   var settings = new Array();

   var num_guests = 0;
   if (document.getElementById('ResPanelOperationUnlimitedNumGuests').checked) {
      settings[0] = "res_numguests=0";
   } else if (document.getElementById('ResPanelOperationLimitNumGuests').checked) {
      num_guests = document.getElementById('ResPanelOperationLimitNumGuestsVal').value;
      if (num_guests == "" || isNaN(num_guests)) {
         alert("Please specify the limit for the number of guests");
         return;
      }
      settings[0] = "res_numguests=" + (-1 * num_guests);
   } else if (document.getElementById('ResPanelOperationDefaultNumGuests').checked) {
      num_guests = document.getElementById('ResPanelOperationDefaultNumGuestsVal').value;
      if (num_guests == "" || isNaN(num_guests)) {
         alert("Please enter the default number of guests");
         return;
      }
      settings[0] = "res_numguests=" + num_guests;
   }
   settings[1] = "res_userdefocc=" + (document.getElementById('ResPanelOperationUserDefOcc').checked ? "true" : "false");
   if (isNaN(document.getElementById('ResPanelOperationTimeProcessInterval').value)) {
      alert("Please specify the amount of time required to process reservations!");
      return;
   }
   settings[2] = "res_timeprocess=" + processIntervalSelector('ResPanelOperationTimeProcess');
//   settings[3] = "res_nonamewalkin=" + (document.getElementById('ResPanelEnableNoNameWalkIn').checked ? "true" : "false");
   if (document.getElementById('ResPanelAppearanceNormal').checked) {
      settings[3] = "res_appearance=normal";
   } else if (document.getElementById('ResPanelAppearanceMultipage').checked) {
      settings[3] = "res_appearance=multipage";
   } else if (document.getElementById('ResPanelAppearanceCompact').checked) {
      settings[3] = "res_appearance=compact";
   }
//   settings[5] = "res_usecolors=" + (document.getElementById('ResPanelAppearanceUseColors').checked ? "true" : "false");

   saveSystemSettings(settings, true, "SystemSettingsIndicator");
}




function validateReservation(event_id, prefix, evt_arr) {

   var evt = null;
   var evt_accept_res = 0;

   if (evt_arr) {
      evt = getEvent(event_id, evt_arr);
      if (evt == null) {
         alert("There are no reservable events for this date. Please specify another date and/or time!");
         return false;
      }

      evt_accept_res = evt.accept_res;
   } else {
      evt_accept_res = document.getElementById(prefix + 'EvtAcceptRes').value;
   }

   var from_year = document.getElementById(prefix + "YearFrom").value;
   if (from_year == 0) {
      alert("There are no available dates for this event. Please specify another event or occasion!");
      return false;
   }
   var occ_spec = "";
   if (evt_accept_res == 2) {
      if (document.getElementById(prefix + "OccasionSpec")) {
         occ_spec = document.getElementById(prefix + "OccasionSpec").value;
         if (occ_spec.length == 0) {
            alert("Please select an occasion from the list of events and occasions or specify your own!");
            return false;
         }
      }
   }

   if (document.getElementById(prefix + "OccasionAvgStayingTime").value == -2) {
      if (document.getElementById(prefix + "YearTo").value == "" || document.getElementById(prefix + "MonthTo").value == "" || document.getElementById(prefix + "DayTo").value == "") {
         alert("Please set the end date of reservation!");
         return false;
      }
   } else if (document.getElementById(prefix + "OccasionReqResTime").value == "true") {
      if (document.getElementById(prefix + "HourFrom").value == -1 || document.getElementById(prefix + "MinFrom").value == -1) {
         alert("Please set the time of reservation!");
         return false;
      }
   }


   var num_guests = document.getElementById(prefix + "NumGuests").value;
   if (num_guests.length == 0 || isNaN(num_guests)) {
      alert("Please enter the number of guests");
      return false;
   }

   return true;
}



function finishSavingReservation(page, prefix, loc_sel, evt_arr) {
   var event_sel = document.getElementById(prefix + "Occasion");
   if (event_sel != null) {
      var event_id = event_sel.value;
   }

   if (!validateReservation(event_id, prefix, evt_arr)) {
      return;
   }

   var loc_id = document.getElementById(loc_sel).value;

   var num_guests = document.getElementById(prefix + "NumGuests").value;
   var occ_spec = document.getElementById(prefix + "OccasionSpec") ? document.getElementById(prefix + "OccasionSpec").value : "";

   var from_year = document.getElementById(prefix + "YearFrom").value;
   var cmd = "&action=finish&loc_sel=" + loc_sel + "&loc_id=" + loc_id + "&loc_name=" + encodeURIComponent(getLocationName(loc_sel)) +
             "&event_id=" + event_id +
             "&occ_spec=" + encodeURIComponent(occ_spec) +
             "&num_guests=" + num_guests +
             "&from_year=" + from_year +
             "&from_month=" + makeTwoDigits(document.getElementById(prefix + "MonthFrom").value) +
             "&from_day=" + makeTwoDigits(document.getElementById(prefix + "DayFrom").value) +
             "&from_hour=" + makeTwoDigits(document.getElementById(prefix + "HourFrom").value) +
             "&from_min=" + makeTwoDigits(document.getElementById(prefix + "MinFrom").value);
   if (document.getElementById(prefix + "OccasionAvgStayingTime").value == -2) {
      cmd += "&to_year=" + document.getElementById(prefix + "YearTo").value +
             "&to_month=" + makeTwoDigits(document.getElementById(prefix + "MonthTo").value) +
             "&to_day=" + makeTwoDigits(document.getElementById(prefix + "DayTo").value) +
             "&to_hour=" + makeTwoDigits(document.getElementById(prefix + "HourTo").value) +
             "&to_min=" + makeTwoDigits(document.getElementById(prefix + "MinTo").value);
   }

   loadPage(getWebAddress() + "/index.php?page=" + page + cmd);
}



function saveReservation(prefix, loc_sel, evt_arr, action, callback_saved, callback_cancelled, indicator_referrer) {
   var event_sel = document.getElementById(prefix + "Occasion");
   if (event_sel != null) {
      var event_id = event_sel.value;
   }

   if (action != "cancel") {

      var from_year = document.getElementById(prefix + "YearFrom").value;

      if (!validateReservation(event_id, prefix, evt_arr)) {
         return;
      }

      if (document.getElementById(prefix + 'ID')) {

         var user_id = document.getElementById(prefix + 'ID').value;

         var fname = trim(document.getElementById(prefix + "FirstName").value);
         var lname = trim(document.getElementById(prefix + "LastName").value);
         if (lname.length == 0 && fname.length > 0 && fname.length < 3) {
            alert("Please type in at least three letters (your initials, for example)");
            return;
         }
         if (fname.length == 0 && fname.length < 3 && lname.length < 3) {
            alert("Please enter your name! We need at least your last name to make your reservation.\nYou should type in at least three letters (your initials, for example)");
            return;
         }

         var no_phone = false,
             no_email = false;

         var phone_area = document.getElementById(prefix + "PhoneArea").value;
         var phone_first = document.getElementById(prefix + "PhoneFirst").value;
         var phone_second = document.getElementById(prefix + "PhoneSecond").value;
         if ((isNaN(phone_area) || phone_area.length != 3) ||
             (isNaN(phone_first) || phone_first.length != 3) ||
             (isNaN(phone_second) || phone_second.length != 4)) {
            no_phone = true;
         }

         var email = document.getElementById(prefix + "EMail").value;
         if (email.indexOf('@') == -1 || email.indexOf('.') == -1) {
            no_email = true;
         }

         if (no_email && no_phone) {
            alert("Please enter either your phone number or your e-mail address or both");
            return;
         }
      }

      var captcha = false;
      var captchacode = "";
      if (document.getElementById(prefix + 'CaptchaCode')) {
         if (document.getElementById(prefix + 'CaptchaCode').value.length == 0) {
            alert("Please read the image carefully and enter the letters\ninto the check field labeled 'Letters'");
            return;
         } else {
            captcha = true;
            captchacode = document.getElementById(prefix + 'CaptchaCode').value;
         }
      }

      var loc_id = document.getElementById(loc_sel).value;

      var occ_spec = document.getElementById(prefix + "OccasionSpec") ? document.getElementById(prefix + "OccasionSpec").value : "";

      var num_guests = document.getElementById(prefix + "NumGuests").value;
      if (document.getElementById(prefix + "OccasionSpec")) occ_spec = document.getElementById(prefix + "OccasionSpec").value;



   }

   if (action == "cancel") {
      if (confirm("Do you really want to cancel your reservation?")) {
         startIndicator(prefix + "Indicator", "Cancelling", indicator_referrer);
         var cmd = "cmd=cmdCancelReservation" +
                   "&sid=" + document.getElementById('SessionID').value +
                   "&res_sid=" + document.getElementById('ResListSelected').value;
         load(ajaxSaveReservation = GetXmlHttpObject(), engine_reservations_process, cmd, callback_cancelled);
      }
   } else {
      startIndicator(prefix + "Indicator", "Saving", indicator_referrer);
      var cmd = "cmd=cmdSaveReservation" +
                "&sid=" + document.getElementById('SessionID').value +
                "&lang=" + document.getElementById('lang').value +
                "&action=" + action +
                "&res_sid=" + (action == "modify" ? document.getElementById("ResListSelected").value : "") +
                "&loc_id=" + loc_id +
                "&event_id=" + event_id +
                "&req_restime=" + document.getElementById(prefix + "OccasionReqResTime").value +
                "&occ_spec=" + encodeURIComponent(occ_spec) +
                "&num_guests=" + num_guests +
                "&user_id=" + user_id +
                "&fname=" + encodeURIComponent(fname) +
                "&lname=" + encodeURIComponent(lname) +
                "&phone_area=" + phone_area +
                "&phone_first=" + phone_first +
                "&phone_second=" + phone_second +
                "&email=" + encodeURIComponent(email) +
                (captcha ? "&captcha=" + captchacode : "") +
                "&from_year=" + from_year +
                "&from_month=" + makeTwoDigits(document.getElementById(prefix + "MonthFrom").value) +
                "&from_day=" + makeTwoDigits(document.getElementById(prefix + "DayFrom").value) +
                "&from_hour=" + makeTwoDigits(document.getElementById(prefix + "HourFrom").value) +
                "&from_min=" + makeTwoDigits(document.getElementById(prefix + "MinFrom").value);
      if (document.getElementById(prefix + "OccasionAvgStayingTime").value == -2) {
         cmd += "&to_year=" + document.getElementById(prefix + "YearTo").value +
                "&to_month=" + makeTwoDigits(document.getElementById(prefix + "MonthTo").value) +
                "&to_day=" + makeTwoDigits(document.getElementById(prefix + "DayTo").value) +
                "&to_hour=" + makeTwoDigits(document.getElementById(prefix + "HourTo").value) +
                "&to_min=" + makeTwoDigits(document.getElementById(prefix + "MinTo").value);
      }
      cmd += "&ctzo=" + document.getElementById('ClientTZO').value;
      load(ajaxSaveReservation = GetXmlHttpObject(), engine_reservations_process, cmd, callback_saved);
   }
}



function reservationSaved() {
   if (ajaxSaveReservation.readyState == 4 || ajaxSaveReservation.readyState == "complete") {
      stopIndicator("ResIndicator");
      toggle("ResSpecifyOccasion", false);
      toggle("ResSpecifyLocDateTime", false);
      toggle("ResSpecifyPersonalData", false);
      toggle("ResSaveResult", true);
      document.getElementById('ResSaveResult').innerHTML = getProperty("HTML", ajaxSaveReservation.responseText);
      setButtonVisualStuff();
   }
}



function reservationCancelled() {
   if (ajaxSaveReservation.readyState == 4 || ajaxSaveReservation.readyState == "complete") {
      stopIndicator("ResIndicator");
   }
}


function resetReservationPanel(erase_fields) {

   if (erase_fields) {
      if (document.getElementById("ResUserName")) document.getElementById("ResUserName").value = "";
      if (document.getElementById("ResPassword")) document.getElementById("ResPassword").value = "";

      if (document.getElementById('ResID')) {
         document.getElementById("ResID").value = "";
         document.getElementById("ResFirstName").value = "";
         document.getElementById("ResLastName").value = "";
         document.getElementById("ResPhoneArea").value = "";
         document.getElementById("ResPhoneFirst").value = "";
         document.getElementById("ResPhoneSecond").value = "";
         document.getElementById("ResEMail").value = "";
      }
   }

   toggle('ResSaveResult', false);
   toggle('ResSpecifyOccasion', true);
   document.getElementById('ResSpecifyLocDateTime').style.display = document.getElementById('ResPanelMultipage').value == 0 ? "block" : "none";
   document.getElementById('ResSpecifyPersonalData').style.display = document.getElementById('ResPanelMultipage').value == 0 ? "block" : "none";

   if (document.getElementById('ResCaptcha')) {
      reloadCaptcha('Res');
   }

   if (erase_fields) {
      findNextValidDate("Res", "LocationInfo_LocationList", "ResCurrentIndicator,ResCurrentIndicator2", updateNextValidDate);
   }
}



function printReservationCalendar(host_id, prefix, year, month, daylist, sender, small, compact, callback) {

   var sm = small ? "_small" : "";

   var cal = "";

   var offset = new Date(year, month - 1, 1).getDay();
   var i;

   cal += "<table" + (small ? "" : " class='panel'") + "><tr>"
   for (i = 0; i <= 6; i++) {
      cal += "<th class='calendar" + sm + "'>" + days[i].substring(0, 2) + "</th>";
   }
   cal += "</tr><tr>";
   for (i = 0; i < offset; i++) {
      cal += "<td class='dummy" + sm + "'>&nbsp;</td>";
   }
   var remain = 0;
   for (i = 0; i < daylist.length; i++) {
      var num = daylist[i];
      var day = i * 1 + 1;
      if (!isNaN(num) && num != 0) {
         var onclick = " onclick=\"setResDate('" + prefix + "', " + day + ", '" + sender + "', '" + (callback == null ? "" : callback) + "');" + (compact ? "hidePopupResDateTime('" + prefix + "Date" + sender + "Host');" : "") + "\"";
         var cls = (year == document.getElementById(prefix + 'Year' + sender).value && makeTwoDigits(month) == makeTwoDigits(document.getElementById(prefix + 'Month' + sender).value) && makeTwoDigits(day) == makeTwoDigits(document.getElementById(prefix + 'Day' + sender).value) ? "sel" : "calendar") + sm;
         var title = "";
         if (document.getElementById(prefix + "OccasionReqResTime").value == 0) {
//            title = " title='" + (num == -1 ? "Unlimited" : (num == 0 ? "No more " : num)) + " units'";
         }
         cal += "<td id='ResCalendarDay" + sender + "_" + day + "' class='" + cls + "'" + title + onclick + ">" + day + "</td>";
      } else {
         cal += "<td class='dummy" + sm + "'>" + day + "</td>";
      }
      if ((i * 1 + offset * 1 + 1) % 7 == 0) {
         cal += "</tr>";
         if (i < daylist.length - 1) {
            cal += "<tr>";
         }
      }
      if (i == daylist.length - 1) {
         remain = 7 - Math.floor((daylist.length + offset) % 7);
      }
   }
   for (i = 0; i < remain; i++) {
      cal += "<td class='dummy" + sm + "'>&nbsp;</td>";
   }
   cal += "</tr>";
   if (compact) {
      cal += "<tr><td colspan='7' class='button' onclick=\"hidePopupResDateTime('" + prefix + "Date" + sender + "Host')\">Close</td></tr>";
   }
   cal += "</table>";

   document.getElementById(host_id).innerHTML = cal;
}


function printTimeTable(host_id, prefix, timelist, min_num_units, small, compact, callback) {
   var sm = small ? "_small" : "";
   var timeproc = document.getElementById(prefix + 'TimeProcVal').value * 1;
   var timeres = document.getElementById('TimeResolution').value * 1;
   var num_cols = Math.floor(60 / timeres);

   var sel_hour = document.getElementById(prefix + 'HourFrom').value * 1;
   var sel_min = document.getElementById(prefix + 'MinFrom').value * 1;

   var i, j;

//   var tt = "<table" + (compact ? " style=\"background: white; border: solid 1px black;\"" : "") + ">";
   var tt = "<table>";

   var firstrow = true;

   for (i = 0; i < timelist.length; i++) {
      var slot = timelist[i][0] * 1;
      var num = timelist[i][1] * 1;
      var h = Math.floor(slot / 60);
      var m = slot % 60;
      if (m == 0) {
         tt += "<tr>";
      }
      if (firstrow) {
         if (m > 0) {
            for (j = 0; j < Math.round(m / 60); j++) {
               tt += "<td class='dummy" + sm + "'>&nbsp;</td>";
            }
         }
      }
      var cls = (h == sel_hour && m == sel_min ? "sel" : (num >= min_num_units || num == -1 ? "calendar" : "dummy")) + sm;
      var title = " title='";
      if (num >= min_num_units) {
         title += num + " unit" + (num == 1 ? "" : "s");
      } else if (num == -1) {
         title += "Unlimited units";
      } else {
//         title += "Time is within " + Math.floor(timeproc / 3600) + " hours";
         title += "Not reservable";
      }
      title += "'";
      var onclick = ((num >= min_num_units || num == -1) && callback != null ? " onclick=\"" + callback + "('" + prefix + "', " + h + ", " + m + ", true);" + (compact ? "hidePopupResDateTime('" + prefix + "TimeFrom');" : "") + "\"" : "");
      tt += "<td id='ResCalendarTime_" + slot + "' class='" + cls + "'" + title + onclick + ">" + convertTime(h, m, true) + (h >= 24 ? "<br />(Next day)" : "") + "</td>";
      if ((m + timeres) % 60 == 0) {
         tt += "</tr>";
      }
      firstrow = false;
   }

   tt += "</tr>";
   if (compact) {
      tt += "<tr><td colspan='" + num_cols + "' class='button' onclick=\"hidePopupResDateTime('" + prefix + "TimeFrom');\">Close</td></tr>";
   }
   tt += "</table>";

   document.getElementById(host_id).innerHTML = tt;
}



function update() {
   var finished = true;
   if (ajaxResDate != null) {
      finished &= (ajaxResDate.readyState == 4 || ajaxResDate.readyState == "complete");
   }
   if (document.getElementById("ResOccasionReqResTime").value == 1 && ajaxResTime != null) {
      finished &= (ajaxResTime.readyState == 4 || ajaxResTime.readyState == "complete");
   }
   if (finished) {
      stopIndicator("ResCurrentIndicator");
      stopIndicator("ResCurrentIndicator2");

      var xml_doc = createXmlDoc(ajaxResDate.responseText);

      var resdays = xml_doc.getElementsByTagName("reservable_days");
      if (resdays[0] != null) {
         var year = getElemAttributeValue(resdays[0], "year");
         var month = getElemAttributeValue(resdays[0], "month");
         var type = getElemAttributeValue(resdays[0], "type");

         var daytags = xml_doc.getElementsByTagName("day");

         var daylist = new Array();
         for (i = 0; i < daytags.length; i++) {
            daylist[daylist.length] = daytags[i].childNodes[0] ? daytags[i].childNodes[0].nodeValue : null;
         }

         if (type == "" || type == 'From') printReservationCalendar('ResDateFrom', "Res", year, month, daylist, "From", document.getElementById('ResPanelCompact').value > 0 ? true : false, document.getElementById('ResPanelCompact').value > 0 ? true : false, "resDateMonthChanged");
         if (document.getElementById('ResOccasionAvgStayingTime').value == -2) {
            if (type == "" || type == 'To') printReservationCalendar('ResDateTo', "Res", year, month, daylist, "To", document.getElementById('ResPanelCompact').value > 0 ? true : false, document.getElementById('ResPanelCompact').value > 0 ? true : false, "resDateMonthChanged");
         }

         var evt = getEvent(document.getElementById("ResOccasion").value, res_events_occasions);

         if (evt.req_restime) {
            var xml_doc = createXmlDoc(ajaxResTime.responseText);
            var timeslotss = xml_doc.getElementsByTagName("timeslots");
            if (timeslotss[0] != null) {
               var min_num_units = getElemAttributeValue(timeslotss[0], "min_num_units");
               var time = getElemAttributeValue(timeslotss[0], "sel").split(":");
               document.getElementById('ResHourFrom').value = time[0];
               document.getElementById('ResMinFrom').value = time[1];
               var slots = xml_doc.getElementsByTagName("slot");
               var timelist = new Array();
               for (i = 0; i < slots.length; i++) {
                  var slot = getElemAttributeValue(slots[i], "id");
                  timelist[timelist.length] = new Array(slot, slots[i].childNodes[0].nodeValue);
               }
               printTimeTable('ResTimeFrom', "Res", timelist, min_num_units, document.getElementById('ResPanelCompact').value > 0 ? true : false, document.getElementById('ResPanelCompact').value > 0 ? true : false, "setResTime");
            }
         } else if (evt.override) {
            var evt_from = evt.event_from.split(" ");
            var evt_fromhm = evt_from[1].split(":");
            document.getElementById('ResHourFrom').value = evt_fromhm[0];
            document.getElementById('ResMinFrom').value = evt_fromhm[1];
            var evt_to = evt.event_to.split(" ");
            var evt_tohm = evt_to[1].split(":");
            document.getElementById('ResHourTo').value = evt_tohm[1];
            document.getElementById('ResMinTo').value = evt_tohm[1];
         } else {
            document.getElementById('ResHourFrom').value = 0;
            document.getElementById('ResMinFrom').value = 0;
            document.getElementById('ResHourTo').value = 0;
            document.getElementById('ResMinTo').value = 0;
         }
      }
      printCurrentReservation();
   }
}




function updateNextValidDate() {
   if (ajaxNextValidDate.readyState == 4 || ajaxNextValidDate.readyState == "complete") {
//alert(ajaxNextValidDate.responseText);
      var xml_doc = createXmlDoc(ajaxNextValidDate.responseText);
      var indicatorss = xml_doc.getElementsByTagName("indicators");
      var indicators = indicatorss[0].childNodes[0].nodeValue.split(",");
      var i;
      for (i = 0; i < indicators.length; i++) {
         stopIndicator(indicators[i]);
      }
      var evt = getEvent(document.getElementById("ResOccasion").value, res_events_occasions);
      var valid_from_elem = xml_doc.getElementsByTagName("valid_from");
      var valid_to_elem = xml_doc.getElementsByTagName("valid_to");
      var valid_from = valid_from_elem[0].childNodes[0].nodeValue;
      var valid_to = valid_to_elem[0] ? valid_to_elem[0].childNodes[0].nodeValue : null;
      if (valid_from == 0) {
         document.getElementById('ResYearTo').value = document.getElementById('ResYearFrom').value = 0;
         document.getElementById('ResMonthTo').value = document.getElementById('ResMonthFrom').value = 0;
         document.getElementById('ResDayTo').value = document.getElementById('ResDayFrom').value = 0;
         document.getElementById('ResHourTo').value = document.getElementById('ResHourFrom').value = 0;
         document.getElementById('ResMinTo').value = document.getElementById('ResMinFrom').value = 0;
         document.getElementById('ResMonthYearFromSelector').value = document.getElementById('CurMonth').value;
         if (evt.avg_stayingtime == -2) {
            document.getElementById('ResMonthYearToSelector').value = document.getElementById('CurMonth').value;
         }
         var daylist = new Array();
         for (i = 0; i < getMaxDaysOfMonth(document.getElementById('CurMonth').value, document.getElementById('CurYear').value); i++) {
            daylist[daylist.length] = 0;
         }
         printReservationCalendar('ResDateFrom', "Res", document.getElementById('CurYear').value, document.getElementById('CurMonth').value, daylist, "From", document.getElementById('ResPanelCompact').value > 0 ? true : false, document.getElementById('ResPanelCompact').value > 0 ? true : false, "resDateMonthChanged");
         if (document.getElementById('ResOccasionAvgStayingTime').value == -2) {
            printReservationCalendar('ResDateTo', "Res", document.getElementById('CurYear').value, document.getElementById('CurMonth').value, daylist, "To", document.getElementById('ResPanelCompact').value > 0 ? true : false, document.getElementById('ResPanelCompact').value > 0 ? true : false, "resDateMonthChanged");
         }
         printCurrentReservation();
      } else {
         var from = new Date();
         from.setTime(parseSqlDate(valid_from).getTime());
         document.getElementById('ResYearFrom').value = from.getFullYear();
         document.getElementById('ResMonthFrom').value = from.getMonth() + 1;
         document.getElementById('ResDayFrom').value = from.getDate();
         if (evt.req_restime) {
            document.getElementById('ResHourFrom').value = from.getHours();
            document.getElementById('ResMinFrom').value = from.getMinutes();
            if (evt.avg_stayingtime == -2) {
               document.getElementById('ResYearTo').value = from.getFullYear();
               document.getElementById('ResMonthTo').value = from.getMonth() + 1;
               document.getElementById('ResDayTo').value = from.getDate();
            }
            document.getElementById('ResHourTo').value = from.getHours();
            document.getElementById('ResMinTo').value = from.getMinutes();
         } else {
            var to = new Date();
            if (valid_to != null && valid_to != "0000-00-00 00:00:00") {
               to.setTime(parseSqlDate(valid_to).getTime());
            } else {
               to.setFullYear(from.getFullYear());
               to.setMonth(from.getMonth());
               to.setDate(from.getDate());
               if (evt.override) {
                  var evt_from = evt.event_from.split(" ");
                  var evt_fromhm = evt_from[1].split(":");
                  from.setHours(evt_fromhm[0]);
                  from.setMinutes(evt_fromhm[1]);
                  var evt_to = evt.event_to.split(" ");
                  var evt_tohm = evt_to[1].split(":");
                  to.setHours(evt_tohm[0]);
                  to.setMinutes(evt_tohm[1]);
               }
            }
            if (evt.avg_stayingtime == -2) {
               document.getElementById('ResYearTo').value = to.getFullYear();
               document.getElementById('ResMonthTo').value = to.getMonth() + 1;
               document.getElementById('ResDayTo').value = to.getDate();
            }
            if (evt.override) {
               document.getElementById('ResHourFrom').value = from.getHours();
               document.getElementById('ResMinFrom').value = from.getMinutes();
               document.getElementById('ResHourTo').value = to.getHours();
               document.getElementById('ResMinTo').value = to.getMinutes();
            } else {
               document.getElementById('ResHourTo').value = document.getElementById('ResHourFrom').value = 0;
               document.getElementById('ResMinTo').value = document.getElementById('ResMinFrom').value = 0;
            }
//alert(evt.title() + "\n\navg_stayingtime: " + evt.avg_stayingtime + "\noverride: " + evt.override + "\n\nfrom" + from + "\nto: " + to);
         }
         document.getElementById('ResMonthYearFromSelector').value = document.getElementById('ResMonthFrom').value * 1 + (document.getElementById('ResYearFrom').value * 1 - document.getElementById('CurYear').value * 1) * 12;
         if (evt.avg_stayingtime == -2) {
            document.getElementById('ResMonthYearToSelector').value = document.getElementById('ResMonthTo').value * 1 + (document.getElementById('ResYearTo').value * 1 - document.getElementById('CurYear').value * 1) * 12;
         }
         resDateMonthChanged(null);
      }
   }
}



function printCurrentReservation() {

   var loc_name = getLocationName('LocationInfo_LocationList');

   var fy = document.getElementById("ResYearFrom").value;
   var fm = makeTwoDigits(document.getElementById("ResMonthFrom").value);
   var fd = makeTwoDigits(document.getElementById("ResDayFrom").value);
   var fh = makeTwoDigits(document.getElementById("ResHourFrom").value);
   var fi = makeTwoDigits(document.getElementById("ResMinFrom").value);

   var ty = document.getElementById("ResYearTo").value;
   var tm = makeTwoDigits(document.getElementById("ResMonthTo").value);
   var td = makeTwoDigits(document.getElementById("ResDayTo").value);
   var th = makeTwoDigits(document.getElementById("ResHourTo").value);
   var ti = makeTwoDigits(document.getElementById("ResMinTo").value);

   var reslist_dateformat_datetime = document.getElementById('ResListDateFormatDateTime').value;
   var reslist_dateformat_date = document.getElementById('ResListDateFormatDate').value;
   var reslist_dateformat_time = document.getElementById('ResListDateFormatTime').value;

   if (document.getElementById('ResModifyReservation')) document.getElementById('ResModifyReservation').disabled = fy == 0 ? true : false;
   if (document.getElementById('ResMakeReservation')) document.getElementById('ResMakeReservation').disabled = fy == 0 ? true : false;
   if (document.getElementById('SpecDateTimeButton')) document.getElementById('SpecDateTimeButton').disabled = fy == 0 ? true : false;

   var compact = false;
   if (document.getElementById('OccasionSelectorCompactHost') != null) {
      compact = true;
   }
   if (compact) {
      if (document.getElementById('ResDateFromSelector')) {
         document.getElementById('ResDateFromSelector').innerHTML = formatDateTime(fy + "-" + fm + "-" + fd, reslist_dateformat_date);
      }
      if (document.getElementById('ResTimeSelector')) {
         document.getElementById('ResTimeSelector').innerHTML = formatDateTime(fy + "-" + fm + "-" + fd + " " + fh + ":" + fi + ":00", reslist_dateformat_time);
      }
      if (document.getElementById('ResDateToSelector')) {
         document.getElementById('ResDateToSelector').innerHTML = formatDateTime(ty + "-" + tm + "-" + td, reslist_dateformat_date);
      }
      return;
   }


   var cur_res = "";

   if (fy == 0) {
      cur_res += "<p class='note'>There are no available dates for this event in this location. Please specify another location or another event or occasion!</p>\r\n";
   } else {

      cur_res += loc_name + "<br />\r\n";
      var num_guests = document.getElementById("ResNumGuests").value;
      var evt_accept_res, evt_title, evt_req_restime, evt_override, evt_avg_stayingtime;
      if (res_events_occasions != null) {
         evt = getEvent(document.getElementById("ResOccasion").value, res_events_occasions);
         evt_accept_res = evt.accept_res;
         evt_title = evt.title();
         evt_req_restime = evt.req_restime;
         evt_override = evt.override;
         evt_avg_stayingtime = evt.avg_stayingtime;
      } else {
         evt_accept_res = document.getElementById('ResEvtAcceptRes').value;
         evt_title = decodeURIComponent(document.getElementById('ResEvtTitle').value);
         evt_req_restime = document.getElementById('ResOccasionReqResTime').value;
         evt_override = document.getElementById('ResEvtOverride').value;
         evt_avg_stayingtime = document.getElementById('ResOccasionAvgStayingTime').value;
      }
      if (evt_accept_res == 2) {
         var spec = document.getElementById("ResOccasionSpec") ? (document.getElementById("ResOccasionSpec").value == "" ? evt_title : document.getElementById("ResOccasionSpec").value) : "";
         cur_res += (spec.length > 0 ? spec + ", " : "") + num_guests + " guest" + (num_guests > 1 ? "s" : "") + "<br />";
      } else {
         cur_res += evt_title + ", " + num_guests + " guest" + (num_guests > 1 ? "s" : "") + "<br />";
      }
      if (evt_req_restime || evt_override) {
         cur_res += formatDateTime(fy + "-" + fm + "-" + fd + " " + fh + ":" + fi + ":00", reslist_dateformat_datetime);
      } else {
         cur_res += formatDateTime(fy + "-" + fm + "-" + fd, reslist_dateformat_date);
      }
      if (evt_avg_stayingtime == -2) {
         cur_res += "&nbsp;-&nbsp;";
         if (evt_req_restime == 1) {
            cur_res += formatDateTime(ty + "-" + tm + "-" + td + " " + th + ":" + ti + ":00", reslist_dateformat_datetime);
         } else {
            cur_res += formatDateTime(ty + "-" + tm + "-" + td, reslist_dateformat_date);
         }
      }
   }

   document.getElementById('ResCurrent').innerHTML = "<p>" + cur_res + "</p>";
   if (document.getElementById('ResCurrent2') != null) document.getElementById('ResCurrent2').innerHTML = "<p>" + cur_res + "</p>";
}



function setResTime(prefix, hour, min, redraw) {
   document.getElementById(prefix + 'HourFrom').value = hour;
   document.getElementById(prefix + 'MinFrom').value = min;
   if (redraw) resTimeHourChanged();
}


function setResDate(prefix, day, sender, callback) {
   var month = document.getElementById(prefix + 'MonthYear' + sender + 'Selector').value;
   document.getElementById(prefix + 'Year' + sender).value = document.getElementById('CurYear').value * 1 + Math.floor(month / 13);
   document.getElementById(prefix + 'Month' + sender).value = month <= 12 ? month : month - 12;
   if (day > 0) document.getElementById(prefix + 'Day' + sender).value = day;

   if (callback) if (callback.length > 0) eval(callback + "(sender)");
//   resDateMonthChanged(sender);
}


function resTimeHourChanged() {
   var event_id = document.getElementById("ResOccasion").value;
   if (event_id == 0) return;

   var time_proc = document.getElementById('ResTimeProcVal').value;

   startIndicator("ResCurrentIndicator", "Updating");
   startIndicator("ResCurrentIndicator2", "Updating");

   var id = document.getElementById('LocationInfo_LocationList').value;

   var num_guests = document.getElementById("ResNumGuests").value;

   var cmd = "cmd=cmdGetResTime" +
             "&sid=" + document.getElementById('SessionID').value +
             "&lang=" + document.getElementById('lang').value +
             "&flags=" + document.getElementById('ResPanelFlags').value +
             "&id=" + id +
             "&event_id=" + encodeURI(event_id) +
             "&num_guests=" + encodeURI(num_guests) +
             "&time_proc=" + time_proc +
             "&year=" + document.getElementById("ResYearFrom").value +
             "&month=" + makeTwoDigits(document.getElementById("ResMonthFrom").value) +
             "&day=" + makeTwoDigits(document.getElementById("ResDayFrom").value) +
             "&hour=" + makeTwoDigits(document.getElementById("ResHourFrom").value) +
             "&min=" + makeTwoDigits(document.getElementById("ResMinFrom").value);
   load(ajaxResTime = GetXmlHttpObject(), engine_reservations_process, cmd, update);

}




function resDateMonthChanged(type) {
   var event_id = document.getElementById("ResOccasion").value;
   if (event_id == 0) return;

   startIndicator("ResCurrentIndicator", "Updating");
   startIndicator("ResCurrentIndicator2", "Updating");

   var id = document.getElementById('LocationInfo_LocationList').value;

   var sender = (type == null ? "From" : type);
   var month = document.getElementById('ResMonthYear' + sender + 'Selector').value;
   var day = document.getElementById('ResDay' + sender).value;
   var year = document.getElementById('CurYear').value * 1 + Math.floor(month / 13);
   month = month <= 12 ? month : month - 12;

   var num_guests = document.getElementById("ResNumGuests").value;
   var time_proc = document.getElementById('ResTimeProcVal').value;

   var cmd = "cmd=cmdGetResDate" +
             "&lang=" + document.getElementById('lang').value +
             "&sid=" + document.getElementById('SessionID').value +
             "&id=" + encodeURI(id) +
             "&event_id=" + encodeURI(event_id) +
             "&num_guests=" + encodeURI(num_guests) +
             "&time_proc=" + encodeURI(time_proc) +
             "&req_restime=" + document.getElementById("ResOccasionReqResTime").value +
             "&type=" + (type == null ? "" : type) +
             "&year=" + encodeURI(year) +
             "&month=" + encodeURI(month) +
             "&day=" + encodeURI(day) +
             "&res_year=" + makeTwoDigits(document.getElementById("ResYearFrom").value) +
             "&res_month=" + makeTwoDigits(document.getElementById("ResMonthFrom").value);
   load(ajaxResDate = GetXmlHttpObject(), engine_reservations_process, cmd, update);

   if (document.getElementById("ResOccasionReqResTime").value == 1) {
      resTimeHourChanged();
   }
}


function findNextValidDate(prefix, loc_sel, indicator_list, callback) {
   var event_id = document.getElementById(prefix + "Occasion").value;
   if (event_id == 0) return;

   var sel = document.getElementById(loc_sel);

   if (sel == null) return;

   var id = sel.value;

   var num_guests = document.getElementById(prefix + "NumGuests").value;
   var time_proc = document.getElementById(prefix + 'TimeProcVal').value;

   var indicators = indicator_list.split(",");
   var i;
   for (i = 0; i < indicators.length; i++) {
      startIndicator(indicators[i], "Updating");
   }

   var cmd = "cmd=cmdGetNextValidDate" +
             "&lang=" + document.getElementById('lang').value +
             "&sid=" + document.getElementById('SessionID').value +
             "&indicators=" + indicator_list +
             "&event_id=" + encodeURI(event_id) +
             "&num_guests=" + encodeURI(num_guests) +
             "&time_proc=" + encodeURI(time_proc) +
             "&req_restime=" + document.getElementById(prefix + "OccasionReqResTime").value +
             (document.getElementById(prefix + "OccasionAvgStayingTime").value == -2 ? "&spec_date_to=1" : "") +
             "&id=" + encodeURI(id);
   load(ajaxNextValidDate = GetXmlHttpObject(), engine_reservations_process, cmd, callback);
}


function locationChanged() {
   var sel = document.getElementById('LocationInfo_LocationList');
   if (sel == null) {
      var id = document.getElementById('ResLocationID').value;
   } else {
      var id = sel.value;
      document.getElementById('ResLocationID').value = id;
   }

   loadLocInfo();

   findNextValidDate("Res", "LocationInfo_LocationList", "ResCurrentIndicator,ResCurrentIndicator2", updateNextValidDate);
}


function prevResMonth(sender) {
   if (document.getElementById('ResMonthYear' + sender + 'Selector').selectedIndex > 0) {
      document.getElementById('ResMonthYear' + sender + 'Selector').selectedIndex--;
      resDateMonthChanged(sender);
   }
}

function nextResMonth(sender) {
   if (document.getElementById('ResMonthYear' + sender + 'Selector').selectedIndex < document.getElementById('ResMonthYear' + sender + 'Selector').length) {
      document.getElementById('ResMonthYear' + sender + 'Selector').selectedIndex++;
      resDateMonthChanged(sender);
   }
}




function loadEventsOccasions() {
   startIndicator("EventOccasionIndicator", "Loading events and occasions");
   var id = 0;
   var cmd = "cmd=cmdLoadEventsOccasions" +
            "&sid=" + document.getElementById('SessionID').value +
            "&loc_id=" + id +
            "&year=" + document.getElementById("ResYearFrom").value +
            "&month=" + makeTwoDigits(document.getElementById("ResMonthFrom").value) +
            "&day=" + makeTwoDigits(document.getElementById("ResDayFrom").value);
//            "&filter=accept_res";
   load(ajaxEventOccasion = GetXmlHttpObject(), engine_event_process, cmd, updateOccasions);
}



var res_events_occasions;


function findFirstValidOccasion(events_arr, has_default) {
   var evt_id = 0;
   if (events_arr.length > 0) {
      var i;
      var evt_id_def = 0,
          evt_id_acc = 0;
      for (i = 0; i < events_arr.length; i++) {
         if (evt_id_acc == 0 && events_arr[i].accept_res == 1) evt_id_acc = events_arr[i].id;
         if (evt_id_def == 0 && events_arr[i].accept_res == 2 && has_default) evt_id_def = events_arr[i].id;
         if (evt_id_def > 0 && evt_id_acc > 0) break;
      }
      if (evt_id_def > 0) {
         evt_id = evt_id_def;
      } else if (evt_id_acc > 0) {
         evt_id = evt_id_acc;
      }
   }
   return evt_id;
}


function createEventLocationSelector(host_id, sel_id, evt, callback) {
   var sel = "";
   var host = document.getElementById('LocationInfo_LocationSelectorHost');

   if (document.getElementById('ResPanelHideLocations').value == 0) {

      var compact = false;
      if (document.getElementById('OccasionSelectorCompactHost') != null) {
         compact = true;
      }

      var onchange = callback == null ? "" : " onchange=\"" + callback + "\"";

      sel += "<select" + (compact ? " class='res_compact'" : "") + " id='" + sel_id + "' name='" + sel_id + "'" + onchange + ">";
      if (evt != null) {
         sel += "\t<option value='" + evt.loc_id + "'>" + evt.loc_name + "</option>\r\n";
      }
      sel += "</select>";

      host.innerHTML = sel;

      if (evt) selectItem(sel_id, evt.loc_id);
   } else {
      sel += "<input type='hidden' id='" + sel_id + "' name='" + sel_id + "' value='" + evt.loc_id + "' />";
      sel += "<input type='hidden' id='" + sel_id + "_" + evt.loc_id + "' name='" + sel_id + "_" + evt.loc_id + "' value='" + evt.loc_name + "' />";
      sel += evt.loc_name;
      host.innerHTML = sel;
   }

   if (callback) {
      eval(callback);
   }
}


function updateOccasions() {
   if (ajaxEventOccasion.readyState == 4 || ajaxEventOccasion.readyState == "complete") {

      stopIndicator("EventOccasionIndicator");

      res_events_occasions = new Array();
      parseEvents(ajaxEventOccasion.responseText, res_events_occasions);

//      createLocationListener('LocationInfo_LocationSelectorHost', 'LocationInfo_LocationList', locationChanged);
//      loadLocationList('LocPropIndicator', false);

      if (res_events_occasions.length > 0) {
         var evt_id = document.getElementById("ResOccasion").value.length > 0 ? document.getElementById("ResOccasion").value : findFirstValidOccasion(res_events_occasions, document.getElementById('ResPanelUserDefOcc').value > 0 ? true : false);
         var evt = getEvent(evt_id, res_events_occasions);
         if (evt != null) {
            document.getElementById("ResOccasion").value = evt_id;
            document.getElementById("ResOccasionReqResTime").value = evt.req_restime ? 1 : 0;
            document.getElementById("ResOccasionAvgStayingTime").value = evt.avg_stayingtime;
            toggle("ResTimeFromHost", evt.req_restime);
            if (evt.avg_stayingtime == -2) {
               toggle("ResDateToPanel", true);
//               toggle("ResTimeToHost", evt.req_restime);
            } else {
               toggle("ResDateToPanel", false);
//               toggle("ResTimeToHost", false);
            }
            createEventLocationSelector("LocationInfo_LocationSelectorHost", "LocationInfo_LocationList", evt, "locationChanged();");
         }
         printEventOccasionList();
      }
   }
}


function printEventOccasionList() {
   var occ_sel = document.getElementById("ResOccasion").value;

   var occ = "",
       occ_closed = "";
   var num_closed = 0;

   var compact = false;
   var host = document.getElementById('OccasionSelectorHost');
   if (host == null) {
      host = document.getElementById('OccasionSelectorCompactHost');
      if (host != null) {
         compact = true;
      }
   }
   if (document.getElementById('ResModifyReservation')) document.getElementById('ResModifyReservation').disabled = true;
   if (document.getElementById('ResMakeReservation')) document.getElementById('ResMakeReservation').disabled = true;
   if (document.getElementById('SpecDateTimeButton')) document.getElementById('SpecDateTimeButton').disabled = true;

   if (occ_sel == 0) {
      if (host != null) {
         occ += "<p>";
         occ += "You cannot make a reservation since there are no reservable events or occasions.";
         occ += "</p>";
         host.innerHTML = occ;
         document.getElementById('ResSpecifyNumGuests').style.display = "none";
         document.getElementById('ResSpecifyLocDateTime').style.display = "none";
         document.getElementById('ResSpecifyPersonalData').style.display = "none";
         if (document.getElementById('ResModifyReservation')) document.getElementById('ResModifyReservation').disabled = false;
         if (document.getElementById('ResMakeReservation')) document.getElementById('ResMakeReservation').disabled = false;
         if (document.getElementById('SpecDateTimeButton')) document.getElementById('SpecDateTimeButton').disabled = false;
         return;
      }
   }

   if (host != null) {
      var found = false;
      var occ_single = "",
          occ_rep = "",
          occ_occ = "",
          occ_other = "",
          occ_descr = "";

      for (i = 0; i < res_events_occasions.length; i++) {

         var id = res_events_occasions[i].id;
         if (document.getElementById('ResPanelHideEventsOccasions').value == 1 && document.getElementById('ResOccasion').value != id) {
            continue;
         }

         var datetime = res_events_occasions[i].event_from.split(" ");
         var date = datetime[0].split("-"), time = datetime[1].split(":");
         var fy = date[0] * 1, fm = date[1] * 1, fd = date[2] * 1, fh = time[0] * 1, fi = time[1] * 1;
         datetime = res_events_occasions[i].event_to.split(" ");
         date = datetime[0].split("-"), time = datetime[1].split(":");
         var ty = date[0] * 1, tm = date[1] * 1, td = date[2] * 1, th = time[0] * 1, ti = time[1] * 1;
         var fwd = new Date(fy, fm - 1, fd).getDay();

         var single = (fy > 0 && fm > 0 && fd > 0 && ty > 0 && tm > 0 && td > 0) ? true : false;

         if (!isNaN(occ_sel) && id == occ_sel) {
            var sel_left = "&nbsp;<img src='" + imgLeft.src + "' id='ResOccImgLeft_" + id + "' width='" + imgLeft.width + "' height='" + imgLeft.height + "' alt='' />&nbsp;";
            var sel_right = "&nbsp;<img src='" + imgRight.src + "' id='ResOccImgRight_" + id + "' width='" + imgRight.width + "' height='" + imgRight.height + "' alt='' />&nbsp;";
            found = true;
         } else {
            var sel_left = "&nbsp;<img src='" + imgEmpty.src + "' id='ResOccImgLeft_" + id + "' width='" + imgLeft.width + "' height='" + imgLeft.height + "' alt='' />&nbsp;";
            var sel_right = "&nbsp;<img src='" + imgEmpty.src + "' id='ResOccImgRight_" + id + "' width='" + imgRight.width + "' height='" + imgRight.height + "' alt='' />&nbsp;";
         }

         var date = "";
         if (single) {
            var oneday = fy == ty && fm == tm && fd == td ? true : false;
            var twd = new Date(ty, tm - 1, td).getDay();
            if (res_events_occasions[i].override == 1) {
//               date += days[fwd].substr(0, 3) + ", " + months[fm - 1].substr(0, 3) + " " + fd + ", " + fy + " " + convertTime(fh, fi);
               date += formatDateTime(res_events_occasions[i].event_from, "D, M d, Y, h:i A");
            } else {
//               date += days[fwd].substr(0, 3) + ", " + months[fm - 1].substr(0, 3) + " " + fd + ", " + fy;
               date += formatDateTime(res_events_occasions[i].event_from, "D, M d, Y");
            }
            if (!oneday || res_events_occasions[i].override) {
               date += " - ";
            }
            if (!oneday) {
               if (res_events_occasions[i].override) {
//                  date += days[twd].substr(0, 3) + ", " + months[tm - 1].substr(0, 3) + " " + td + ", " + ty + " " + convertTime(th, ti);
               date += formatDateTime(res_events_occasions[i].event_to, "D, M d, Y, h:i A");
               } else {
//                  date += days[twd].substr(0, 3) + ", " + months[tm - 1].substr(0, 3) + " " + td + ", " + ty;
                  date += formatDateTime(res_events_occasions[i].event_to, "D, M d, Y");
               }
            } else {
               if (res_events_occasions[i].override) {
                  date += convertTime(th, ti);
               }
            }
         } else {
            if (res_events_occasions[i].wday % 10 > 0) {
               var rep = Math.floor(res_events_occasions[i].wday / 10);
               date += "Every ";
               if (rep == 2) {
                  date += "other ";
               } else if (rep == 4) {
                  date += "fourth ";
               }
               var wday = res_events_occasions[i].wday % 10;
               date += days[wday - 1];
//               date += " from " + months[fm - 1].substr(0, 3) + " " + fd + ", " + fy;
               date += " from " + formatDateTime(res_events_occasions[i].event_from, "M d, Y");
            } else {
               date += "Every day";
            }
            if (res_events_occasions[i].override) {
//               date += ", " + convertTime(fh, fi) + " - " + convertTime(th, ti);
               date += ", " + formatDateTime(res_events_occasions[i].event_from, "h:i A") + " - " + formatDateTime(res_events_occasions[i].event_to, "h:i A");
            }
         }

         if (res_events_occasions[i].accept_res == 0 && res_events_occasions[i].override == true) {
            occ_closed += "<div class='note'>" + date + "<br />" + res_events_occasions[i].descr() + "</div>";
            num_closed++;
         } else {
            if (compact) {
               var sel_occ_id = document.getElementById('ResOccasion').value;
               sel = res_events_occasions[i].id == sel_occ_id ? "selected='selected'" : "";
               if (res_events_occasions[i].accept_res == 1) {
                  if (single) {
                     occ_single += "<option value='" + id + "'" + sel + ">" + res_events_occasions[i].title() + "</option>";
                     occ_descr += "<input type='hidden' id='ResEventOccasion_" + id + "' name='ResEventOccasion_" + id + "' value='" + encodeURIComponent(date + "<br />" + res_events_occasions[i].descr()) + "' />";
                  } else {
                     if (res_events_occasions[i].wday > 0) {
                        occ_rep += "<option value='" + id + "'" + sel + ">" + res_events_occasions[i].title() + "</option>";
                        occ_descr += "<input type='hidden' id='ResEventOccasion_" + id + "' name='ResEventOccasion_" + id + "' value='" + encodeURIComponent(date + "<br />" + res_events_occasions[i].descr()) + "' />";
                     } else {
                        occ_occ += "<option value='" + id + "'" + sel + ">" + res_events_occasions[i].title() + "</option>";
                        occ_descr += "<input type='hidden' id='ResEventOccasion_" + id + "' name='ResEventOccasion_" + id + "' value='" + encodeURIComponent(res_events_occasions[i].descr()) + "' />";
                     }
                  }
               } else if (document.getElementById('ResUserDefOcc').value > 0 && res_events_occasions[i].accept_res == 2) {
                  if (single) {
                     occ_other += "<option value='" + id + "'" + sel + ">" + res_events_occasions[i].title() + "</option>";
                  } else {
                     if (res_events_occasions[i].wday > 0) {
                        occ_other += "<option value='" + id + "'" + sel + ">" + res_events_occasions[i].title() + "</option>";
                     } else {
                        occ_other += "<option value='" + id + "'" + sel + ">" + res_events_occasions[i].title() + "</option>";
                     }
                  }
               }
            } else {
               if (res_events_occasions[i].accept_res == 1) {
                  if (single) {
                     occ_single += "<dt onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\">" + sel_left + "<a href=\"javascript:setOccasion(" + id + ")\">" + res_events_occasions[i].title() + "</a>" + sel_right + "</dt>";
                     occ_single += "<dd onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\" onclick=\"setOccasion(" + id + ")\">" + date + "<br />" + res_events_occasions[i].descr() + "</dd>";
                  } else {
                     if (res_events_occasions[i].wday > 0) {
                        occ_rep += "<dt onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\">" + sel_left + "<a href=\"javascript:setOccasion(" + id + ")\">" + res_events_occasions[i].title() + "</a>" + sel_right + "</dt>";
                        occ_rep += "<dd onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\" onclick=\"setOccasion(" + id + ")\">" + date + "<br />" + res_events_occasions[i].descr() + "</dd>";
                     } else {
                        occ_occ += "<dt onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\">" + sel_left + "<a href=\"javascript:setOccasion(" + id + ")\">" + res_events_occasions[i].title() + "</a>" + sel_right + "</dt>";
                        occ_occ += "<dd onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\" onclick=\"setOccasion(" + id + ")\">" + res_events_occasions[i].descr() + "</dd>";
                     }
                  }
               } else if (document.getElementById('ResUserDefOcc').value > 0 && res_events_occasions[i].accept_res == 2) {
                  var res_occ_spec = "Please specify: <input type='text' id='ResOccasionSpec' name='ResOccasionSpec' size='30' onfocus=\"setOccasion(" + id + ")\" onkeyup=\"printCurrentReservation();\" />";
                  if (single) {
                     occ_other += "<dt onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\">" + sel_left + "<a href=\"javascript:setOccasion(" + id + ")\">" + res_events_occasions[i].title() + "</a>" + sel_right + "</dt>";
                     occ_other += "<dd onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\">" + date + "<br />" + res_occ_spec + "</dd>";
                  } else {
                     if (res_events_occasions[i].wday > 0) {
                        occ_other += "<dt onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\">" + sel_left + "<a href=\"javascript:setOccasion(" + id + ")\">" + res_events_occasions[i].title() + "</a>" + sel_right + "</dt>";
                        occ_other += "<dd onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\">" + date + "<br />" + res_occ_spec + "</dd>";
                     } else {
                        occ_other += "<dt onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\">" + sel_left + "<a href=\"javascript:setOccasion(" + id + ")\">" + res_events_occasions[i].title() + "</a>" + sel_right + "</dt>";
                        occ_other += "<dd onmouseover=\"resOccOver(" + id + ")\" onmouseout=\"resOccOut(" + id + ")\">" + res_occ_spec + "</dd>";
                     }
                  }
               }
            }
         }
      }

      if (compact) {
         if (occ_single != "" || occ_rep != "" || occ_occ != "" || occ_other != "") {
            occ += occ_descr;
            occ += "<select class='res_compact' id='ResOccasionSelector' name='ResOccasionSelector' onchange=\"updateEventOccasionSelector();\">";
            if (occ_single != "" || occ_rep != "") {
               occ += "<optgroup label='Events'>";
               if (occ_single != "") occ += occ_single;
               if (occ_rep != "") occ += occ_rep;
               occ += "</optgroup>";
            }
            if (occ_occ != "") {
               occ += "<optgroup label='Occasions'>";
               occ += occ_occ;
               occ += "</optgroup>";
            }
            if (occ_other != "") {
               occ += occ_other;
            }
//            occ += "</select><br />[&nbsp;<span class='menuitem' onclick=\"toggle('ResOccasionDescr');\">Toggle details</span>&nbsp;]</div>";
            occ += "</select>";
            occ += "<span id='ResOccasionDescr' style='display: none;'></span>";
         }
      } else {
         if (occ_single != "") {
            occ += "<dl>";
            occ += occ_single;
            occ += "</dl>";
         }
         if (occ_rep != "") {
            occ += "<dl>";
            occ += occ_rep;
            occ += "</dl>";
         }
         if (occ_occ != "") {
            occ += "<dl>";
            occ += occ_occ;
            occ += "</dl>";
         }
         if (occ_other != "") {
            occ += "<dl>";
            occ += occ_other;
            occ += "</dl>";
         }
      }
      host.innerHTML = occ;
      if (compact) {
         updateEventOccasionSelector();
      }

      if (occ_closed != "") {
         var closed = "";
         closed += "<p>Please note that no reservations are accepted in the following period" + (num_closed > 1 ? "s" : "") + ":<br />";
         closed += occ_closed;
         closed += "</p>";
         document.getElementById('ClosedRange').innerHTML = closed;
         if (document.getElementById('ClosedRange2')) document.getElementById('ClosedRange2').innerHTML = closed;
      }
   }
}


function updateEventOccasionSelector() {
   var evt_id = document.getElementById('ResOccasionSelector').value;
   document.getElementById('ResOccasion').value = evt_id;
   var evt = getEvent(evt_id, res_events_occasions);
   document.getElementById("ResOccasionReqResTime").value = evt.req_restime ? 1 : 0;
   document.getElementById("ResOccasionAvgStayingTime").value = evt.avg_stayingtime;
   if (document.getElementById('ResEventOccasion_' + evt_id)) {
      document.getElementById('ResOccasionDescr').innerHTML = "<div class='small_note'>" + decodeURIComponent(document.getElementById('ResEventOccasion_' + evt_id).value) + "</div>";
   } else {
      document.getElementById('ResOccasionDescr').innerHTML = "";
      var evt_descr = evt.descr();
      document.getElementById('ResOccSpecHost').innerHTML = (evt_descr.length == 0 ? "Please specify: " : evt_descr) + "<input type='text' id='ResOccasionSpec' name='ResOccasionSpec' size='30' onfocus=\"setOccasion(" + evt_id + ")\" onkeyup=\"printCurrentReservation();\" />";
   }
   if (document.getElementById("ResOccSpecHost")) {
      if (evt.accept_res == 2) {
         document.getElementById('ResOccSpecHost').style.display = "block";
         document.getElementById('ResOccasionDescr').style.display = "none";
      } else {
         document.getElementById('ResOccSpecHost').style.display = "none";
         document.getElementById('ResOccasionDescr').style.display = "block";
      }
   }
   toggle("ResTimeFromHost", evt.req_restime);
   if (evt.avg_stayingtime == -2) {
      toggle("ResDateToPanel", true);
//      toggle("ResTimeToHost", evt.req_restime);
   } else {
      toggle("ResDateToPanel", false);
//      toggle("ResTimeToHost", false);
   }
//   selectItem("LocationInfo_LocationList", evt.loc_id);
//   locationChanged();
   createEventLocationSelector("LocationInfo_LocationSelectorHost", "LocationInfo_LocationList", evt, "locationChanged();");
}




function popupResDateTime(referrer_id, host_id, init_code) {
   var p = alignWnd('MainBar');

   var referrer = document.getElementById(referrer_id);
   var x = getElementLeft(referrer);
   var y = getElementTop(referrer);

   var host = document.getElementById(host_id);
   host.style.position = "absolute";
   host.style.left = x + "px";
   host.style.top = y + referrer.offsetHeight + "px";
   host.style.display = "block";

   if (init_code != null) {
      eval(init_code);
   }

   showBackground(host_id, document.getElementById(host_id), p);
}


function hidePopupResDateTime(host_id) {
   var host = document.getElementById(host_id);
   host.style.display = "none";

   hideBackground(host_id);
}



function setOccasion(id) {

   var evt = getEvent(id, res_events_occasions);

   document.getElementById("ResOccasion").value = id;
   document.getElementById("ResOccasionReqResTime").value = evt.req_restime ? 1 : 0;
   document.getElementById("ResOccasionAvgStayingTime").value = evt.avg_stayingtime;

   var i;
   for (i = 0; i < res_events_occasions.length; i++) {
      if (document.getElementById("ResOccImgLeft_" + res_events_occasions[i].id)) {
         document.getElementById("ResOccImgLeft_" + res_events_occasions[i].id).src = imgEmpty.src;
         document.getElementById("ResOccImgRight_" + res_events_occasions[i].id).src = imgEmpty.src;
      }
   }
   if (document.getElementById("ResOccImgLeft_" + id)) {
      document.getElementById("ResOccImgLeft_" + id).src = imgLeft.src;
      document.getElementById("ResOccImgRight_" + id).src = imgRight.src;
   }

   toggle("ResTimeFromHost", evt.req_restime);
   if (evt.avg_stayingtime == -2) {
      toggle("ResDateToPanel", true);
//      toggle("ResTimeToHost", evt.req_restime);
   } else {
      toggle("ResDateToPanel", false);
//      toggle("ResTimeToHost", false);
   }

//   selectItem("LocationInfo_LocationList", evt.loc_id);
//   locationChanged();
   createEventLocationSelector("LocationInfo_LocationSelectorHost", "LocationInfo_LocationList", evt, "locationChanged();");
}


function resOccOver(id) {
   var occ_sel = document.getElementById("ResOccasion").value;
   document.getElementById("ResOccImgLeft_" + id).src = imgLeftOut.src;
}

function resOccOut(id) {
   var occ_sel = document.getElementById("ResOccasion").value;
   document.getElementById("ResOccImgLeft_" + id).src = occ_sel == id ? imgLeft.src : imgEmpty.src;
}


function gotoOccasion() {
   setOccasion(document.getElementById("ResOccasion").value == "" ? -1 : document.getElementById("ResOccasion").value);
   document.getElementById("ResSpecifyOccasion").style.display = "block";
   document.getElementById("ResSpecifyLocDateTime").style.display = "none";
   document.getElementById("ResSpecifyPersonalData").style.display = "none";
}

function gotoDateTime(reset_date) {
   var event_id = document.getElementById("ResOccasion").value;
   var evt = getEvent(event_id, res_events_occasions);
   if (document.getElementById("ResOccasion").value == "" || (evt != null && evt.accpet_res == 2 && document.getElementById("ResOccasionSpec") && document.getElementById("ResOccasionSpec").value == "")) {
      alert("Please select an occasion from the list of events and occasions or specify your own!");
      return;
   }
   locationChanged(reset_date);
   document.getElementById("ResSpecifyOccasion").style.display = "none";
   document.getElementById("ResSpecifyLocDateTime").style.display = "block";
   document.getElementById("ResSpecifyPersonalData").style.display = "none";
}

function gotoPersonal() {
   document.getElementById("ResSpecifyOccasion").style.display = "none";
   document.getElementById("ResSpecifyLocDateTime").style.display = "none";
   document.getElementById("ResSpecifyPersonalData").style.display = "block";
}


function checkResEventDefault() {
   if (document.getElementById('ResPanelOperationUserDefOcc').checked == true) {
      var i = 0;
      while (i < res_events_occasions.length && res_events_occasions[i].accept_res != 2) i++;
      if (i >= res_events_occasions.length) document.getElementById('ResPanelOperationUserDefOcc').checked = false;
   }
}



