
var engine_event_process = "webcpms/proc_events.php";

var ajaxEventLoad,
    ajaxEventAdd,
    ajaxEventDelete;

var events_display_mode = "list";



var events_occasions;
var eventcolor_list;
var eventsResUnits;
var eventsLayoutID;

function EventOccasion(id, loc_id, loc_name, event_from, event_to, wday, override, accept_res, maxnum_units, avg_stayingtime, req_restime, response_msg, titles, descrs, pageurls, layout_id, placeunits) {
   this.id = id;
   this.loc_id = loc_id;
   this.loc_name = loc_name;
   this.event_from = event_from;
   this.event_to = event_to;
   this.wday = wday;
   this.override = override > 0 ? true : false;
   this.accept_res = accept_res;
   this.maxnum_units = maxnum_units;
   this.avg_stayingtime = avg_stayingtime;
   this.req_restime = req_restime;
   this.response_msg = response_msg;
   var i = 0;
   this.titles = titles;
   this.descrs = descrs;
   this.pageurls = pageurls;
   this.layout_id = layout_id;
   this.placeunits = placeunits instanceof Array ? placeunits : (placeunits == "none" || placeunits == "all" ? placeunits : placeunits.split(","));

   this.title = function (lang) {
      if (lang == null) lang = document.getElementById('lang').value;
      if (lang == "") lang = languages[0];
      var i = 0;
      while (i < this.titles.length && this.titles[i][0] != lang) i++;
      return (i < this.titles.length ? unSafeString(this.titles[i][1]) : "");
   }

   this.descr = function (lang) {
      if (lang == null) lang = document.getElementById('lang').value;
      if (lang == "") lang = languages[0];
      var i = 0;
      while (i < this.descrs.length && this.descrs[i][0] != lang) i++;
      return (i < this.descrs.length ? unSafeString(this.descrs[i][1]) : "");
   }

   this.pageurl = function (lang) {
      if (lang == null) lang = document.getElementById('lang').value;
      if (lang == "") lang = languages[0];
      var i = 0;
      while (i < this.pageurls.length && this.pageurls[i][0] != lang) i++;
      return (i < this.pageurls.length ? this.pageurls[i][1] : "");
   }
}


function getEvent(id, event_arr) {
   if (event_arr == null || id == null || id == "") return null;
   var i = 0;
   while (i < event_arr.length && event_arr[i].id != id) i++;
   if (i < event_arr.length) return event_arr[i];
   return null;
}


function getDefaultEvent(event_arr) {
   if (event_arr == null) return null;
   if (event_arr.length == null) return null;
   var def = document.getElementById('PlacementUserDefOcc').value;
   if (def == 0) {
      return event_arr[0];
   }
   return getEvent(def, event_arr);
}



function parseEvents(xml_text, evt_occ_arr, date_arr) {
   var xml_doc = createXmlDoc(xml_text);
   var evtss = xml_doc.getElementsByTagName("events");
   if (date_arr != null) {
      var date_val = getElemAttributeValue(evtss[0], "date");
      if (date_val != null) {
         var date = date_val.split("-");
         date_arr[0] = date[0]; date_arr[1] = date[1]; date_arr[2] = date[2];
      }
   }
   var evts = evtss[0].getElementsByTagName("event");
   var i;
   for (i = 0; i < evts.length; i++) {
      var lang = getElemAttributeValue(evts[i], "lang");
      var id = getElemAttributeValue(evts[i], "id");
      var loc_id = findTagByName(evts[i], "loc_id").childNodes[0].nodeValue;
      var loc_name = findTagByName(evts[i], "loc_name").childNodes[0].nodeValue;
      var event_from = findTagByName(evts[i], "event_from").childNodes[0].nodeValue;
      var event_to = findTagByName(evts[i], "event_to").childNodes[0].nodeValue;
      var wday = findTagByName(evts[i], "wday").childNodes[0].nodeValue;
      var override = findTagByName(evts[i], "override").childNodes[0].nodeValue * 1;
      var accept_res = findTagByName(evts[i], "accept_res").childNodes[0].nodeValue * 1;
      var maxnum_units = findTagByName(evts[i], "maxnum_units").childNodes[0].nodeValue * 1;
      var avg_stayingtime = findTagByName(evts[i], "avg_stayingtime").childNodes[0].nodeValue * 1;
      var req_restime = findTagByName(evts[i], "req_restime").childNodes[0].nodeValue > 0 ? true : false;
      var response_msg = findTagByName(evts[i], "response_msg").childNodes[0].nodeValue;
      var titles = collectTagsByAttribute(evts[i], "title", "lang");
      var descrs = collectTagsByAttribute(evts[i], "descr", "lang");
      var pageurls = collectTagsByAttribute(evts[i], "pageurl", "lang");

      var placeunit_list_elem = findTagByName(evts[i], "placeunits");
      var placeunit_list = placeunit_list_elem.childNodes[0] ? placeunit_list_elem.childNodes[0].nodeValue : "";
      var layout_id = placeunit_list_elem.childNodes[0] ? getElemAttributeValue(placeunit_list_elem, "layout_id") : "";

      evt_occ_arr[evt_occ_arr.length] = new EventOccasion(id, loc_id, loc_name, event_from, event_to, wday, override, accept_res, maxnum_units, avg_stayingtime, req_restime, response_msg, titles, descrs, pageurls, layout_id, placeunit_list);
   }

   var resunit_elems = xml_doc.getElementsByTagName("resunit");
   if (resunit_elems.length > 0) {
      eventsLayoutID = getElemAttributeValue(xml_doc.getElementsByTagName("layout")[0], "id");
      eventsResUnits = new Array();
      parseResUnits(resunit_elems, eventsResUnits);
   }
}



function showOccasionFilter(prefix) {
   var refobj = document.getElementById(prefix + 'OccasionFilterSelector');
   if (refobj == null) return;
   var x = getElementLeft(refobj);
   var y = getElementTop(refobj);

   var p = alignWnd('MainPage');

   var host = document.getElementById(prefix + 'OccasionFilter');
   host.style.position = "absolute";
   host.style.left = x + "px";
   host.style.top = (y * 1 + refobj.offsetHeight * 1) + "px";
   host.style.display = "block";

   showBackground(prefix + 'OccasionFilter', host, p);

}



function hideOccasionFilter(prefix, cmd, callback) {
   var host = document.getElementById(prefix + 'OccasionFilter');
   host.style.display = "none";
   if (cmd == 'apply') {
      var i = 0, chk;
      while ( (chk = document.getElementById(prefix + "OccFilter_" + i)) != null ) {
         document.getElementById(prefix + "OccFilterOrig_" + i).value = chk.checked ? "true" : "false";
         i++;
      }
   } else if (cmd == 'cancel') {
      var i = 0, chk;
      while ( (chk = document.getElementById(prefix + "OccFilter_" + i)) != null ) {
         chk.checked = document.getElementById(prefix + "OccFilterOrig_" + i).value == "true" ? true : false;
         i++;
      }
   }
   hideBackground(prefix + "OccasionFilter");
   if (callback != null && callback != "") eval(callback);
}


var PREFILTER_SINGLE       = 1;
var PREFILTER_REPEATING    = 2;
var PREFILTER_ONEDAY       = 4;
var PREFILTER_MULTIDAY     = 8;
var PREFILTER_EVERYDAY     = 16;
var PREFILTER_DAYOFWEEK    = 32;
var PREFILTER_ONEDAY       = PREFILTER_SINGLE | PREFILTER_REPEATING | PREFILTER_ONEDAY | PREFILTER_EVERYDAY | PREFILTER_DAYOFWEEK;
var PREFILTER_EVENTS       = PREFILTER_SINGLE | PREFILTER_ONEDAY | PREFILTER_MULTIDAY;
var PREFILTER_OCCASIONS    = PREFILTER_REPEATING | PREFILTER_EVERYDAY | PREFILTER_DAYOFWEEK;
var PREFILTER_SHOWALL      = PREFILTER_EVENTS | PREFILTER_OCCASIONS;

function printOccasionFilter(prefix, evt_arr, filter_accept_res, prefilter_flags, callback_apply, callback_cancel) {
   if (filter_accept_res == null) filter_accept_res = false;
   if (prefilter_flags == null) prefilter_flags = PREFILTER_SHOWALL;
   var occfilter_host = document.getElementById(prefix + 'OccasionFilter');
   if (occfilter_host) {
      var i, cnt = 0;
      var list = "<table><tr><td colspan=2><div class='h2'>Events&nbsp;and&nbsp;occasions&nbsp;to&nbsp;display</div>";
      list += "<p class='small_note'>[&nbsp;<span class='menuitem' onclick=\"evtOccFilterSelectAll('" + prefix + "');\">Select all</span>&nbsp;|&nbsp;<span class='menuitem' onclick=\"evtOccFilterSelectNone('" + prefix + "');\">Select none</span>&nbsp;]</p><p>";
      for (i = 0; i < evt_arr.length; i++) {
         if ( (filter_accept_res && evt_arr[i].accept_res > 0) || !filter_accept_res) {

            var datetime = evt_arr[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 = evt_arr[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 single = (ty > 0 && tm > 0 && td > 0) ? true : false;
            var oneday = true;
            if (single) oneday = fy == ty && fm == tm && fd == td ? true : false;

            var chk = true;

            if (prefilter_flags instanceof Array) {
               var j = 0;
               while (j < prefilter_flags.length && evt_arr[i].id != prefilter_flags[j]) j++;
               if (j >= prefilter_flags.length) chk = false;
            } else {
               if (prefilter_flags & PREFILTER_SINGLE > 0 && prefilter_flags & PREFILTER_REPEATING > 0) chk &= true;
                  else if (prefilter_flags & PREFILTER_SINGLE > 0) chk &= single;
                  else if (prefilter_flags & PREFILTER_REPEATING > 0) chk &= !single;
               if (prefilter_flags & PREFILTER_ONEDAY && prefilter_flags & PREFILTER_MULTIDAY && single) chk &= true;
                  else if (prefilter_flags & PREFILTER_ONEDAY && single) chk &= oneday;
                  else if (prefilter_flags & PREFILTER_MULTIDAY && single) chk &= !oneday;
               if (prefilter_flags & PREFILTER_EVERYDAY && prefilter_flags & PREFILTER_DAYOFWEEK && !single) chk &= true;
                  else if (prefilter_flags & PREFILTER_EVERYDAY && !single) chk &= evt_arr[i].wday % 10 == 0 ? true : false;
                  else if (prefilter_flags & PREFILTER_DAYOFWEEK && !single) chk &= evt_arr[i].wday % 10 > 0 ? true : false;
            }

            list += "<input type='hidden' id='" + prefix + "OccID_" + cnt + "' name='" + prefix + "OccID_" + cnt + "' value='" + evt_arr[i].id + "' /><input type='hidden' id='" + prefix + "OccFilterOrig_" + cnt + "' name='" + prefix + "OccFilterOrig_" + cnt + "' value='" + (chk ? "true" : "false") + "' /><input type='checkbox' id='" + prefix + "OccFilter_" + cnt + "' name='" + prefix + "OccFilter_" + cnt + "'" + (chk ? " checked='true'" : "") + " /><label for='" + prefix + "OccFilter_" + cnt + "'>" + evt_arr[i].title() + "</label><br />";
            cnt++;
         }
      }
      list += "</p></td></tr><tr><td class='button' width='50%' onclick=\"hideOccasionFilter('" + prefix + "', 'apply', " + (callback_apply == null ? "null" : "'" + callback_apply + "'") + ")\">Apply</td><td class='button' width='50%' onclick=\"hideOccasionFilter('" + prefix + "', 'cancel', " + (callback_cancel == null ? "null" : "'" + callback_cancel + "'") + ")\">Cancel</td></tr></table>";
      occfilter_host.innerHTML = list;
   }
}



function evtOccFilterSelectAll(prefix) {
   var i = 0;
   var chk;
   while ( (chk = document.getElementById(prefix + "OccFilter_" + i++)) != null ) chk.checked = true;
}

function evtOccFilterSelectNone(prefix) {
   var i = 0;
   var chk;
   while ( (chk = document.getElementById(prefix + "OccFilter_" + i++)) != null ) chk.checked = false;
}

function getEventsOccasionsToDisplay(prefix) {
   var evts = new Array();
   var i = 0;
   var chk;
   while ( (chk = document.getElementById(prefix + "OccFilter_" + i)) != null ) {
      if (chk.checked) evts[evts.length] = document.getElementById(prefix + "OccID_" + i).value;
      i++;
   }
   return evts;
}

function displayEvent(events_to_display, evt_id) {
   var display = false;
   if (events_to_display.length > 0) {
      var i = 0;
      while (i < events_to_display.length && events_to_display[i] != evt_id) i++;
      if (i < events_to_display.length) display = true;
   }
   return display;
}


function hintEventNewAccept() {
   if (document.getElementById("EventNewAcceptRes")) {

      var hint = "Hint: ";

      var chk = document.getElementById("EventNewAcceptRes").checked;
      if (chk == false && document.getElementById('EventNewLimitedResUnits').checked) {
         document.getElementById('EventNewLimitedNoLimit').checked = true;
      }
      document.getElementById('EventNewLimitedResUnits').disabled = !chk;
      if (document.getElementById('EventNewPlaceUnits')) {
         var list = document.getElementById('EventNewPlaceUnits').value;
         if (chk == false && document.getElementById('EventNewLimitedAssign').checked && list == "none") {
            document.getElementById("EventNewAcceptRes").checked = chk = true;
         }
         if (document.getElementById('EventNewLimitedAssign').checked) {
            if (chk == true && list == "all") {
               hint += "the whole location is exclusively reserved for this event, that is, no other events are allowed during this event and no reservation can be made with other occasion in the period of this event";
            } else if (chk == true && list == "none") {
               hint += "reservations can be made to this occasion, guests can be seated to any placeunits in the location";
            } else if (chk == true) {
               hint += "only the selected placeunits can be reserved for this event, other events and occasions must share the rest of the placeunits";
            } else if (chk == false && list == "all") {
               hint += "no reservation can be made at all in the period of this event, neither for this event nor for any other events";
            } else if (chk == false) {
               hint += "selected placeunits are not reservable, rest of the placeunits can be reserved for other events/occasions";
            }
         } else {
            if (chk == true) {
               hint += "this is a public event, guests can make reservations";
            } else {
               hint += "this is a private, non-reservable event but guests can make reservations for other events";
            }
         }
      } else {
         if (chk == true) {
            hint += "this is a public event, guests can make reservations";
         } else {
            hint += "this is a private event, no reservation can be made";
            document.getElementById('EventNewLimitedResUnits').checked = false;
            document.getElementById('EventNewDefault').checked = false;
         }
         toggle('EventNewLimitedResUnitsHost', chk);
      }
      toggle('EventNewFinishHost', chk);
      toggle('EventNewDefaultHost', chk);
      toggle('EventNewDefaultHint', chk);
      chk = document.getElementById('EventNewLimitedResUnits').checked;
      toggle('EventNewMaxResUnitsHost', chk, "inline");
      chk = document.getElementById('EventNewFinishDuration').checked;
      toggle('EventNewDurationHost', chk, "inline");

      document.getElementById("EventNewAcceptHint").innerHTML = hint;

      hintEventNewFinish();
   }
}


function hintEventNewFinish() {
   if (document.getElementById("EventNewAcceptRes")) {
      var hint = "Hint: ";
      if (document.getElementById('EventNewFinishResDateTo').checked) {
         hint += "typically hotels require both arrival and leaving date from guests";
      } else if (document.getElementById('EventNewFinishEventDateTo').checked) {
         hint += "your guests stay until event finishes if it is a conference, performance, presentation, show or any other kind of party or meeting";
      } else if (document.getElementById('EventNewFinishDuration').checked) {
         hint += "this is a general all-day occasion and guests/clients stay only a shorter period of time; recommended typically for restaurants, health care or beauty care services<br />Note: do not specify longer duration than the half of location's open period. That is, if for example you are open from 9 to 5 (it is 8 hours) then average time of staying should be <i>shorter</i> than 4 hours.";
      }
      document.getElementById('EventNewFinishHint').innerHTML = hint;
   }
}


function hintEventNewOverride() {
   var single = document.getElementById("EventNewSingle").checked;
   var ovr = document.getElementById("EventOverrideOH").checked;

   var hint = "Hint: ";
   if (single) { // single
      if (ovr == true) {
         hint += "location is open in the period specified above during this event";
      } else {
         hint += "standard open hours apply to this event";
      }
   } else { // repetitive
      if (ovr == true) {
         hint += "location is open in the period specified above during this event";
      } else {
         hint += "standard open hours apply to this event";
      }
   }

   document.getElementById("EventNewOverrideHint").innerHTML = hint;
}




function checkEventNewDefault() {
   if (document.getElementById("EventNewAcceptRes") == null) return;
   var event_id = document.getElementById("EventNewID").value;
   var i = 0;
   var unchecked = false;
   while (i < events_occasions.length && events_occasions[i].accept_res != 2) i++;
   if (document.getElementById('EventNewDefault').checked == false) {
      if (i < events_occasions.length && events_occasions[i].id == event_id) {
         if (!confirm("By unchecking this box you decide to use no default event.\nYour visitors will not be able to specify their own occasion.\nContinue?")) {
            document.getElementById('EventNewDefault').checked = true;
         } else {
            unchecked = true;
         }
      }
   }
   var hint = "Hint: ";
   if (i < events_occasions.length) {
      if (unchecked == true) {
         hint += "this was the default event. When you save changes, there will be no default event any longer and your visitors will not be able to specify their own occasion of reservation.";
      } else {
         if (document.getElementById('EventNewDefault').checked == false) {
            hint += "current default event is <b>" + events_occasions[i].title(document.getElementById('lang').value) + "</b>. Check the box above to set this event as default.";
         } else {
            if (events_occasions[i].id == event_id) {
               hint += "this is the default event. To set another event as default, select it from the list above, click on <b>Edit</b> then check this box. You can also decide to use no default event. In this case, your visitors will not be able to specify their own occasion of reservation on page <b>" + getCookie("MenuName_reservations", "Reservation system") + "</b>.";
            } else {
               hint += "this will be the default event when you save changes.";
            }
         }
      }
   } else {
      if (document.getElementById('EventNewDefault').checked == false) {
         hint += "no default event set. Check the box above to set this event as default. If you allow your visitors to specify their own occasion of reservation, you have to set a default event, this one or another. Otherwise, specifying a default event is not necessary.";
      } else {
         hint += "this will be the default event when you save changes.";
      }
   }

   document.getElementById("EventNewDefaultHint").innerHTML = hint;
}


function hintEventNewReqResTime(nocheck) {
   if (document.getElementById("EventNewAcceptRes") == null) return;


   var chk = document.getElementById('EventNewReqResTime').checked;

   if (chk) {
      if (!nocheck) {
         document.getElementById('EventNewFinishDuration').checked = true;
         toggle('EventNewDurationHost', true, "inline");
      }
      document.getElementById('EventNewFinishResDateTo').disabled = true;
   } else {
      document.getElementById('EventNewFinishResDateTo').disabled = false;
   }

   hintEventNewFinish();
}



function eventScheduler(id) {
   if (id == 'EventNewSingle') {
      var host = document.getElementById("EventSingleControls");
      host.style.display = "block";
      host = document.getElementById("EventRepetitiveControls");
      host.style.display = "none";
   } else if (id == 'EventNewRepetitive') {
      var host = document.getElementById("EventSingleControls");
      host.style.display = "none";
      host = document.getElementById("EventRepetitiveControls");
      host.style.display = "block";
      printUpcomingList();
   }
}


function toggleOH(chk_id) {
   var chk = document.getElementById("EventOverrideOH").checked;
   var host = document.getElementById("EventNewHostOH");
   host.style.display = chk == true ? "inline" : "none";
}



function loadEvents() {
   if (document.getElementById("EventNewValid")) {
      document.getElementById("EventNewValid").value = '0'; // invalidate drop-down layout controls
   }

   startIndicator("LocEventIndicator", "Loading events");
   var loc_id = document.getElementById("Event_LocationList").value;
   var cmd = "cmd=cmdLoadEventsOccasions&sid=" + document.getElementById('SessionID').value + "&page=" + document.getElementById('page').value + "&loc_id=" + loc_id;
   load(ajaxEventLoad = GetXmlHttpObject(), engine_event_process, cmd, updateEvents);
}


function updateEvents() {
   if (ajaxEventLoad.readyState == 4 || ajaxEventLoad.readyState == "complete") {
      stopIndicator("LocEventIndicator");

      toggle('NewEventHost', false);
      toggle('EventsHost', true);

      events_occasions = new Array();
      eventcolor_list = new Array();
      parseEvents(ajaxEventLoad.responseText, events_occasions);
      createEventColors('EventList', events_occasions, eventcolor_list);


      events_display_mode = document.getElementById('EventDisplaySelector') ? document.getElementById('EventDisplaySelector').value : getCookie("EventsDisplayMode", "list");
      printOccasionFilter('EventList', events_occasions, false, events_display_mode == "month" || events_display_mode == "year" || events_display_mode == "week" ? (PREFILTER_EVENTS | PREFILTER_OCCASIONS) - PREFILTER_EVERYDAY : PREFILTER_SHOWALL, "printEventsOccasions();", null);

      printEventsOccasions();

      var host = document.getElementById("NewEvent_LocationHost");
      if (host) {

         checkEventNewDefault();

         host.innerHTML = getLocationName("Event_LocationList");
         resetEventForm();
      }

   }
}



function printEventsOccasionsFiltered() {

//   if (document.getElementById('EventDisplaySelector') == null) return;

   if (document.getElementById('EventDisplaySelector')) events_display_mode = document.getElementById('EventDisplaySelector').value;

   if (events_display_mode == "day" || events_display_mode == "list") {
      printOccasionFilter('EventList', events_occasions, false, PREFILTER_SHOWALL, "printEventsOccasions();", null);
   } else if (events_display_mode == "week") {
      printOccasionFilter('EventList', events_occasions, false, (PREFILTER_EVENTS | PREFILTER_OCCASIONS) - PREFILTER_EVERYDAY, "printEventsOccasions();", null);
   } else if (events_display_mode == "month") {
      printOccasionFilter('EventList', events_occasions, false, (PREFILTER_EVENTS | PREFILTER_OCCASIONS) - PREFILTER_EVERYDAY, "printEventsOccasions();", null);
   } else if (events_display_mode == "year") {
      printOccasionFilter('EventList', events_occasions, false, (PREFILTER_EVENTS | PREFILTER_OCCASIONS) - PREFILTER_EVERYDAY, "printEventsOccasions();", null);
   }
   printEventsOccasions();
}


function printEventsOccasions() {

//   if (document.getElementById('EventDisplaySelector') == null) return;

   startIndicator("LocEventIndicator", "Loading list");

   if (document.getElementById('EventDisplaySelector')) events_display_mode = document.getElementById('EventDisplaySelector').value;

//   if (events_display_mode == "day") {
//      printEventListDay();
//   } else if (events_display_mode == "week") {
   if (events_display_mode == "week") {
      printEventListWeek();
   } else if (events_display_mode == "month") {
      printEventListMonth();
   } else if (events_display_mode == "year") {
      printEventListYear();
   } else if (events_display_mode == "list") {
      printEventListDetailed();
   }

   stopIndicator("LocEventIndicator");

   setCookie("EventsDisplayMode", events_display_mode);

}

function prevEventWeek() {
   if (document.getElementById('EventListDay') && document.getElementById('EventListMonth') && document.getElementById('EventListYear')) {
      var day = document.getElementById('EventListDay').value;
      var month = document.getElementById('EventListMonth').value;
      var year = document.getElementById('EventListYear').value;
      var date = new Date(year, month - 1, day);
      date.setDate(date.getDate() - 7);
      document.getElementById('EventListDay').value = date.getDate();
      document.getElementById('EventListMonth').value = date.getMonth() + 1;
      document.getElementById('EventListYear').value = date.getFullYear();
      printEventsOccasions();
   }
}

function nextEventWeek() {
   if (document.getElementById('EventListDay') && document.getElementById('EventListMonth') && document.getElementById('EventListYear')) {
      var day = document.getElementById('EventListDay').value;
      var month = document.getElementById('EventListMonth').value;
      var year = document.getElementById('EventListYear').value;
      var date = new Date(year, month - 1, day);
      date.setDate(date.getDate() + 7);
      document.getElementById('EventListDay').value = date.getDate();
      document.getElementById('EventListMonth').value = date.getMonth() + 1;
      document.getElementById('EventListYear').value = date.getFullYear();
      printEventsOccasions();
   }
}


function prevEventMonth() {
   if (document.getElementById('EventListMonth') && document.getElementById('EventListYear')) {
      var month = document.getElementById('EventListMonth').value;
      var year = document.getElementById('EventListYear').value;
      month--;
      if (month == 0) {
         month = 12;
         year--;
      }
      document.getElementById('EventListMonth').value = month;
      document.getElementById('EventListYear').value = year;
      printEventsOccasions();
   }
}

function nextEventMonth() {
   if (document.getElementById('EventListMonth') && document.getElementById('EventListYear')) {
      var month = document.getElementById('EventListMonth').value;
      var year = document.getElementById('EventListYear').value;
      month++;
      if (month == 13) {
         month = 1;
         year++;
      }
      document.getElementById('EventListMonth').value = month;
      document.getElementById('EventListYear').value = year;
      printEventsOccasions();
   }
}

function prevEventYear() {
   if (document.getElementById('EventListYear')) {
      var year = document.getElementById('EventListYear').value;
      year--;
      document.getElementById('EventListYear').value = year;
      printEventsOccasions();
   }
}

function nextEventYear() {
   if (document.getElementById('EventListYear')) {
      var year = document.getElementById('EventListYear').value;
      year++;
      document.getElementById('EventListYear').value = year;
      printEventsOccasions();
   }
}


function getEventsOnDay(evt_arr, year, month, day, stamp, o_stamp, c_stamp, prefix, use_default) {
   var evts_to_display = prefix == null ? null : getEventsOccasionsToDisplay(prefix);
   var filtered = new Array();
   var k, i, display;
   for (k = 0; k < evt_arr.length; k++) {
      if (prefix != null) {
         if (!displayEvent(evts_to_display, evt_arr[k].id)) continue;
      }
      if (!use_default && evt_arr[k].accept_res == 2) continue;
      var found = false;
      var datetime = evt_arr[k].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 = evt_arr[k].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 single = (ty > 0 && tm > 0 && td > 0) ? true : false;

      if (single) {
         var oneday = fy == ty && fm == tm && fd == td ? true : false;
         if (oneday) {
            if (evt_arr[k].override) {
               if (fy == year && fm == month && fd == day) {
                  var from = fh * 60 + fi * 1;
                  var to = th * 60 + ti * 1;
                  if (to <= from) to += 1440;
                  found = stamp == null ? true : (stamp >= from && stamp < to ? true : false);
               }
            } else {
               found = fy == year && fm == month && fd == day ? true : false;
            }
         } else {
            var from = new Date(fy, fm - 1, fd, fh, fi).getTime();
            var to = new Date(ty, tm - 1, td, th, ti).getTime();
            var h = 0, m = 0;
            if (stamp != null) {
               h = Math.floor(stamp / 60);
               m = stamp % 60;
            }
            var e = new Date(year, month - 1, day, h, m).getTime();
            found = from <= e && e <= to ? true : false;
         }
      } else {
         var rep = Math.floor(evt_arr[k].wday / 10);
         if (rep == 0) rep = 1;
         var wday = evt_arr[k].wday % 10;
         var start = getRepeatStart(fy, fm, fd, wday, rep);
         var def = new Date(year, month - 1, getMaxDaysOfMonth(month, year));
         while (start.getTime() <= def.getTime() && !found) {
//            if (stamp != null && o_stamp != null && c_stamp != null) {
            if (stamp != null) {
               if (evt_arr[k].override) {
                  var from = fh * 60 + fi * 1;
                  var to = th * 60 + ti * 1;
                  if (to <= from) to += 1440;
                  found = (start.getFullYear() == year * 1 && start.getMonth() == month * 1 - 1 && start.getDate() == day * 1 && (stamp == null ? true : (stamp >= from && stamp < to ? true : false))) ? true : false;
               } else {
                  found = (start.getFullYear() == year * 1 && start.getMonth() == month * 1 - 1 && start.getDate() == day * 1 && (stamp == null ? true : (stamp >= o_stamp && stamp < c_stamp ? true : false))) ? true : false;
               }
            } else {
               found = (start.getFullYear() == year * 1 && start.getMonth() == month * 1 - 1 && start.getDate() == day * 1) ? true : false;
            }
            start = getRepeatNext(wday, rep, start);
         }
//alert(evt_arr[k].title() + "\nstamp: " + stamp + "\no_stamp: " + o_stamp + "\nc_stamp: " + c_stamp + "\nfrom: " + from + "\nto: " + to + "\n" + (found ? "found" : "not found"));
      }
      if (found) filtered[filtered.length] = evt_arr[k];
   }
   return filtered;
}



function getDisplayModeSelector() {
   var sel = document.getElementById('EventDisplaySelector');
//   if (sel == null) {
//      return "<input type='hidden' id='EventDisplaySelector' value='list' />";
//   }
//   if (sel.type == "hidden") {
//      return "";
//   }

   if (sel != null) {
      if (sel.type == "hidden") {
         return "";
      }
   }

   var res = "";
   var mode = sel ? sel.value : events_display_mode;
//   res += "<select class='select_small' id='EventDisplaySelector' name='EventDisplaySelector' onchange=\"printEventsOccasions();\">";
   res += "<select class='select_small' id='EventDisplaySelector' name='EventDisplaySelector' onchange=\"printEventsOccasionsFiltered();\">";
   res += "\t<option value='week'" + (mode == "week" ? " selected='selected'" : "") + ">Week view</option>";
   res += "\t<option value='month'" + (mode == "month" ? " selected='selected'" : "") + ">Month view</option>";
   res += "\t<option value='year'" + (mode == "year" ? " selected='selected'" : "") + ">Year view</option>";
   res += "\t<option value='list'" + (mode == "list" ? " selected='selected'" : "") + ">Detailed list</option>";
   res += "</select>";
   return res;
}


/*
function printEventListDay() {
   var demo_admin_mode = document.getElementById('EventNewID') == null ? false : true;

   var list = "";
   var i, k;

   if (document.getElementById('EventListYear') && document.getElementById('EventListMonth') && document.getElementById('EventListDay')) {
      var year = document.getElementById('EventListYear').value;
      var month = document.getElementById('EventListMonth').value;
      var day = document.getElementById('EventListDay').value;
   } else {
      var cur = new Date();
      while (cur.getDay() != 0) cur.setTime(cur.getTime() - 86400000);
      var year = cur.getFullYear();
      var month = cur.getMonth() + 1;
      var day = cur.getDate();
   }
   var evt_sel = 0;
   if (document.getElementById('EventListSelected')) evt_sel = document.getElementById('EventListSelected').value;

   list += "<input type='hidden' id='EventListYear' name='EventListYear' value='" + year + "' />";
   list += "<input type='hidden' id='EventListMonth' name='EventListMonth' value='" + month + "' />";
   list += "<input type='hidden' id='EventListDay' name='EventListDay' value='" + day + "' />";

   var to = new Date(year, month - 1, day);
   to.setDate(to.getDate() + 6);
   var ty = to.getFullYear();
   var tm = to.getMonth() + 1;
   var td = to.getDate();

   var date = tm == month ? months[month - 1] + " " + day + " - " + makeTwoDigits(td) + ", " + year : (year == ty ? months[month - 1] + " " + makeTwoDigits(day) + " - " + months[tm - 1] + " " + makeTwoDigits(td) + ", " + year : months[month - 1] + " " + makeTwoDigits(day) + ", " + year + " - " + months[tm - 1] + " " + makeTwoDigits(td) + ", " + ty);

   list += "<p class='eventtablehead'><span style='float: right;'>" + getDisplayModeSelector() + "</span><span class='bignavig' onclick=\"prevEventWeek();\">&lt;&lt;</span> " + date + " <span class='bignavig' onclick=\"nextEventWeek();\">&gt;&gt;</span></p>";

   list += "<table width='95%' class='panel'>";
   for (i = 0; i < 7; i++) {
      to = new Date(year, month - 1, day);
      to.setDate(to.getDate() + i);
      list += "<tr><th class='eventheadweek'>" + months[to.getMonth()].substr(0, 3) + " " + makeTwoDigits(to.getDate()) + "<br />" + days[to.getDay()].substr(0, 3) + "</th>";

      var evts = getEventsOnDay(events_occasions, to.getFullYear(), to.getMonth() + 1, to.getDate(), null, null, null, "EventList", true);

      var event_list = new Array();

      for (k = 0; k < evts.length; k++) {
         event_list[event_list.length] = "<span class='menuitem' onclick=\"printEventInfo(" + evts[k].id + ")\">" + evts[k].title() + "</span><br />";
         event_list[event_list.length - 1] += "<span " + (demo_admin_mode ? "class='demonavig'" : "style='display: none;'") + ">" + getArticleNavButton("EventEdit" + evts[k].id + "_", "icon_edit.gif", "editEvent", "Edit", evts[k].title(document.getElementById('lang').value), evts[k].id) + "&nbsp;" + getArticleNavButton("EventDelete" + evts[k].id + "_", "icon_delete.gif", "deleteEvent", "Delete", evts[k].title(document.getElementById('lang').value), evts[k].id) + "</span>\r\n";
      }

      list += "<td class='eventitemweek'>" + (event_list.length > 0 ? event_list.join("<div class='sep_horiz'></div>") : "&nbsp;") + "</td>";
      list += "</tr>";
   }
   list += "</table>";

   list += "<h2>Event details</h2>\r\n\r\n";
   list += "<input type='hidden' id='EventListSelected' name='EventListSelected' value='" + evt_sel + "' />\r\n<p id='EventListDetails'>No event selected. Click on an event in the table for detailed information.</p>\r\n";

   var host = document.getElementById("EventsHost");
   host.innerHTML = list;

   printEventInfo(evt_sel);
   setButtonVisualStuff();
}
*/

function printEventListWeek() {
   var demo_admin_mode = document.getElementById('EventNewID') == null ? false : true;

   var list = "";
   var i, k;

   var use_colors = document.getElementById('EventListUseColors').value == "true" ? true : false;

   if (document.getElementById('EventListYear') && document.getElementById('EventListMonth') && document.getElementById('EventListDay')) {
      var year = document.getElementById('EventListYear').value;
      var month = document.getElementById('EventListMonth').value;
      var day = document.getElementById('EventListDay').value;
   } else {
      var cur = new Date();
      while (cur.getDay() != 0) cur.setTime(cur.getTime() - 86400000);
      var year = cur.getFullYear();
      var month = cur.getMonth() + 1;
      var day = cur.getDate();
   }
   var evt_sel = 0;
   if (document.getElementById('EventListSelected')) evt_sel = document.getElementById('EventListSelected').value;

   list += "<input type='hidden' id='EventListYear' name='EventListYear' value='" + year + "' />";
   list += "<input type='hidden' id='EventListMonth' name='EventListMonth' value='" + month + "' />";
   list += "<input type='hidden' id='EventListDay' name='EventListDay' value='" + day + "' />";

   var to = new Date(year, month - 1, day);
   to.setDate(to.getDate() + 6);
   var ty = to.getFullYear();
   var tm = to.getMonth() + 1;
   var td = to.getDate();

   var date = tm == month ? months[month - 1] + " " + makeTwoDigits(day) + " - " + makeTwoDigits(td) + ", " + year : (year == ty ? months[month - 1] + " " + makeTwoDigits(day) + " - " + months[tm - 1] + " " + makeTwoDigits(td) + ", " + year : months[month - 1] + " " + makeTwoDigits(day) + ", " + year + " - " + months[tm - 1] + " " + makeTwoDigits(td) + ", " + ty);

   list += "<table width='95%' class='panel'>";
   list += "<tr><td class='eventtablehead' colspan=2><span style='float: right;'>" + getDisplayModeSelector() + "</span><span class='eventnavigprev' onclick=\"prevEventWeek();\">&lt;&lt;</span> " + date + " <span class='eventnavignext' onclick=\"nextEventWeek();\">&gt;&gt;</span></td></tr>";

   for (i = 0; i < 7; i++) {
      to = new Date(year, month - 1, day);
      to.setDate(to.getDate() + i);
      list += "<tr><th class='eventheadweek'>" + months[to.getMonth()].substr(0, 3) + " " + makeTwoDigits(to.getDate()) + "<br />" + days[to.getDay()].substr(0, 3) + "</th>";

      var evts = getEventsOnDay(events_occasions, to.getFullYear(), to.getMonth() + 1, to.getDate(), null, null, null, "EventList", true);

      var event_list = new Array();

      for (k = 0; k < evts.length; k++) {
         var e = "";
         if (use_colors) e += "<div id='EventItemWeek_" + i + "_" + k + "'  onmouseover=\"flashEventColor(this.id, " + evts[k].id + ", 'eventcolor_list', 1);\" onmouseout=\"flashEventColor(this.id, " + evts[k].id + ", 'eventcolor_list', 0);\" style=\"padding: 3px; margin: 3px; background-color: rgb(" + eventcolor_list[evts[k].id][1].join(",") + "); border-style: solid; border-width: 0px 0px 1px 3px; border-color: rgb(" + eventcolor_list[evts[k].id][2].join(",") + "); color: rgb(" + eventcolor_list[evts[k].id][2].join(",") + "); font-size: 8pt;\">";
         e += "<span" + (use_colors ? "" : " class='menuitem'") + " onclick=\"printEventInfo(" + evts[k].id + ")\">" + evts[k].title() + "</span><br />";
         e += "<span " + (demo_admin_mode ? "class='demonavig'" : "style='display: none;'") + ">" + getArticleNavButton("EventEdit" + evts[k].id + "_", "icon_edit_big.gif", "editEvent", "Edit", evts[k].title(document.getElementById('lang').value), evts[k].id) + "&nbsp;" + getArticleNavButton("EventDelete" + evts[k].id + "_", "icon_delete_big.gif", "deleteEvent", "Delete", evts[k].title(document.getElementById('lang').value), evts[k].id) + "</span>\r\n";
         if (use_colors) e += "</div>";
         event_list[event_list.length] = e;
      }

      list += "<td class='eventitemweek'>" + (event_list.length > 0 ? event_list.join(" ") : "&nbsp;") + "</td>";
      list += "</tr>";
   }
   list += "</table>";

   list += "<h2>Event details</h2>\r\n\r\n";
   list += "<input type='hidden' id='EventListSelected' name='EventListSelected' value='" + evt_sel + "' />\r\n<p id='EventListDetails'>No event selected. Click on an event in the table for detailed information.</p>\r\n";

   var host = document.getElementById("EventsHost");
   host.innerHTML = list;

   printEventInfo(evt_sel);
   setButtonVisualStuff();
}


function printEventListMonth() {
   var demo_admin_mode = document.getElementById('EventNewID') == null ? false : true;

   var use_colors = document.getElementById('EventListUseColors').value == "true" ? true : false;
   var display_size = document.getElementById('EventListDisplaySize').value;

   var list = "";
   var i, j, k;

   if (document.getElementById('EventListMonth') && document.getElementById('EventListYear')) {
      var month = document.getElementById('EventListMonth').value;
      var year = document.getElementById('EventListYear').value;
   } else {
      var cur = new Date();
      var month = cur.getMonth() + 1;
      var year = cur.getFullYear();
   }
   var evt_sel = 0;
   if (document.getElementById('EventListSelected')) evt_sel = document.getElementById('EventListSelected').value;

   list += "<input type='hidden' id='EventListMonth' name='EventListMonth' value='" + month + "' /><input type='hidden' id='EventListYear' name='EventListYear' value='" + year + "' />";

   list += "<table width='95%' class='panel'>\r\n";
   if (display_size == "main") {
      list += "<tr><td class='eventtablehead' colspan=7><span style='float: right;'>" + getDisplayModeSelector() + "</span><span class='eventnavigprev' onclick=\"prevEventMonth();\">&lt;&lt;</span> " + months[month - 1] + " " + year + " <span class='eventnavignext' onclick=\"nextEventMonth();\">&gt;&gt;</span></td></tr>";
   }

   if (display_size == "small") {
      list += "<tr><th class='eventheadmonth_" + display_size + "'><span class='menuitem' onclick=\"prevEventMonth();\">«</span></th><th class='eventheadmonth_" + display_size + "' colspan='5' align='center'>" + months[month - 1] + "<br />" + year + "</th><th class='eventheadmonth_" + display_size + "'><span class='menuitem' onclick=\"nextEventMonth();\">»</span></th></tr>";
   }
   list += "<tr>";
   for (j = 0; j < 7; j++) {
      list += "<th class='eventheadmonth_" + display_size + "'>" + (display_size == "main" ? days[j].substring(0, 3) : days[j].substring(0, 1)) + "</th>";
   }
   list += "</tr>\r\n";
   var offset = new Date(year, month - 1, 1).getDay() - 1;
   var maxdays = getMaxDaysOfMonth(month, year);
//alert("offset: " + offset + "\nmaxdays: " + maxdays);
   var num_rows = offset + maxdays >= 35 ? 6 : 5;
   for (j = 0; j < num_rows; j++) {
      list += "<tr>\r\n";
      for (i = 0; i < 7; i++) {
         var day = i + j * 7 - offset;
         if (day > 0 && day <= maxdays) {
            var event_list = new Array();
            var evts = getEventsOnDay(events_occasions, year, month, day, null, null, null, "EventList", true);
            if (display_size == "main") {
               for (k = 0; k < evts.length; k++) {
                  var e = "";
                  if (use_colors) e = "<div id='EventItemMonth_" + i + "_" + j + "_" + k + "'  onmouseover=\"flashEventColor(this.id, " + evts[k].id + ", 'eventcolor_list', 1);\" onmouseout=\"flashEventColor(this.id, " + evts[k].id + ", 'eventcolor_list', 0);\" style=\"padding: 3px; margin: 3px; background-color: rgb(" + eventcolor_list[evts[k].id][1].join(",") + "); border-style: solid; border-width: 0px 0px 1px 3px; border-color: rgb(" + eventcolor_list[evts[k].id][2].join(",") + "); color: rgb(" + eventcolor_list[evts[k].id][2].join(",") + "); font-size: 8pt;\">";
                  e += "<span" + (use_colors ? "" : " class='menuitem'") + " onclick=\"printEventInfo(" + evts[k].id + ")\">" + evts[k].title() + "</span><br />";
                  e += "<span " + (demo_admin_mode ? "class='demonavig'" : "style='display: none;'") + ">" + getArticleNavButton("EventEdit" + evts[k].id + "_", "icon_edit_big.gif", "editEvent", "Edit", evts[k].title(document.getElementById('lang').value), evts[k].id) + "&nbsp;" + getArticleNavButton("EventDelete" + evts[k].id + "_", "icon_delete_big.gif", "deleteEvent", "Delete", evts[k].title(document.getElementById('lang').value), evts[k].id) + "</span>\r\n";
                  if (use_colors) e += "</div>";
                  event_list[event_list.length] = e;
               }
               list += "<td class='eventitemmonth_" + display_size + "'>" + "<div class='eventdaymonth_" + display_size + "'>" + day + "</div>" + event_list.join(" ") + "</td>";
            } else {
               if (evts.length > 0) {
                  list += "<td class='eventitemmonthevt_" + display_size + "' onclick=\"printEventListDay(events_occasions, " + year + ", " + month + ", " + day + ", 'EventList');\">" + day + "</td>";
               } else {
                  list += "<td class='eventitemmonth_" + display_size + "'>" + day + "</td>";
               }
            }
         } else {
            list += "<td class='eventitemmonth_" + display_size + "'>&nbsp;</td>";
         }
      }
   }
   list += "</table>\r\n";

   list += "<input type='hidden' id='EventListSelected' name='EventListSelected' value='" + evt_sel + "' />\r\n";

   if (display_size == "main") {
      list += "<h2>Event details</h2>\r\n\r\n";
      list += "<div id='EventListDetails'>No event selected. Click on an event in the table for detailed information.</div>\r\n";
   } else {
      list += "<div id='EventListDetails' class='eventlistdetails' style='display: none;'></div>\r\n";
   }

   var host = document.getElementById("EventsHost");
   host.innerHTML = list;

   if (display_size == "main") {
      printEventInfo(evt_sel);
   }
   setButtonVisualStuff();
}

function printEventListYear() {
   var demo_admin_mode = document.getElementById('EventNewID') == null ? false : true;

   var list = "";
   var i, k;

   var use_colors = document.getElementById('EventListUseColors').value == "true" ? true : false;

   if (document.getElementById('EventListYear')) {
      var year = document.getElementById('EventListYear').value;
   } else {
      var cur = new Date();
      var year = cur.getFullYear();
   }
   var evt_sel = 0;
   if (document.getElementById('EventListSelected')) evt_sel = document.getElementById('EventListSelected').value;

   list += "<input type='hidden' id='EventListYear' name='EventListYear' value='" + year + "' />";

   list += "<table width='95%' class='panel'>";
   list += "<tr><td class='eventtablehead' colspan=2><span style='float: right;'>" + getDisplayModeSelector() + "</span><span class='eventnavigprev' onclick=\"prevEventYear();\">&lt;&lt;</span> " + year + " <span class='eventnavignext' onclick=\"nextEventYear();\">&gt;&gt;</span></td></tr>";

   var day = 1;
   var month, prev_month = -1, has_event_thismonth = true;
   var to = new Date(year, 0, day);
   var reset = to.getTime();

   while (to.getFullYear() == year) {
      month = to.getMonth();
      if (prev_month != month) {
         if (!has_event_thismonth) {
            list += "<tr><td class='eventitemyear' colspan=2>No event in this month.</td></tr>";
         }
         list += "<tr><td class='eventheadyear' colspan=2>" + months[month] + "</td></tr>";
         prev_month = month;
         has_event_thismonth = false;
      }
      var event_list = new Array();
      var evts = getEventsOnDay(events_occasions, year, month + 1, to.getDate(), null, null, null, "EventList", true);
      if (evts.length > 0) {
         has_event_thismonth = true;
         for (k = 0; k < evts.length; k++) {
            var e = "";
            if (use_colors) e += "<div id='EventItemYear_" +  month + "_" + day + "_" + k + "'  onmouseover=\"flashEventColor(this.id, " + evts[k].id + ", 'eventcolor_list', 1);\" onmouseout=\"flashEventColor(this.id, " + evts[k].id + ", 'eventcolor_list', 0);\" style=\"padding: 3px; margin: 3px; background-color: rgb(" + eventcolor_list[evts[k].id][1].join(",") + "); border-style: solid; border-width: 0px 0px 1px 3px; border-color: rgb(" + eventcolor_list[evts[k].id][2].join(",") + "); color: rgb(" + eventcolor_list[evts[k].id][2].join(",") + "); font-size: 8pt;\">";
            e += "<span" + (use_colors ? "" : " class='menuitem'") + " onclick=\"printEventInfo(" + evts[k].id + ")\">" + evts[k].title() + "</span><br />";
            e += "<span " + (demo_admin_mode ? "class='demonavig'" : "style='display: none;'") + ">" + getArticleNavButton("EventEdit" + evts[k].id + "_", "icon_edit_big.gif", "editEvent", "Edit", evts[k].title(document.getElementById('lang').value), evts[k].id) + "&nbsp;" + getArticleNavButton("EventDelete" + evts[k].id + "_", "icon_delete_big.gif", "deleteEvent", "Delete", evts[k].title(document.getElementById('lang').value), evts[k].id) + "</span>\r\n";
            if (use_colors) e += "</div>";
            event_list[event_list.length] = e;
         }
         list += "<tr><th class='eventheadyear'>" + months[month].substr(0, 3) + " " + makeTwoDigits(to.getDate()) + "<br />" + days[to.getDay()].substr(0, 3) + "</th><td class='eventitemyear'>" + event_list.join(" ") + "</td></tr>";
      }
      to.setTime(reset);
      to.setDate(to.getDate() + day++);
   }
   if (!has_event_thismonth) {
      list += "<tr><td class='eventitemyear' colspan=2>No event in this month.</td></tr>";
   }
   list += "</table>";

   list += "<h2>Event details</h2>\r\n\r\n";
   list += "<input type='hidden' id='EventListSelected' name='EventListSelected' value='" + evt_sel + "' />\r\n<p id='EventListDetails'>No event selected. Click on an event in the table for detailed information.</p>\r\n";

   var host = document.getElementById("EventsHost");
   host.innerHTML = list;

   printEventInfo(evt_sel);
   setButtonVisualStuff();
}



function printEventInfo(evt_id) {
   var demo_admin_mode = document.getElementById('EventNewID') == null ? false : true;
   var evt = getEvent(evt_id, events_occasions);

   document.getElementById('EventListSelected').value = evt_id;

   if (evt == null) return;

   var datetime = evt.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 = evt.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 = (ty > 0 && tm > 0 && td > 0) ? true : false;

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

   var evt_info = "<b>" + evt.title() + "</b><br />" + date + "<br />\r\n" + evt.descr();
   evt_info += "<br /><span " + (demo_admin_mode ? "class='demonavig'" : "style='display: none;'") + ">" + getArticleNavButton("EventEdit" + evt.id + "_", "icon_edit.gif", "editEvent", "Edit", evt.title(document.getElementById('lang').value), evt.id) + "&nbsp;" + getArticleNavButton("EventDelete" + evt.id + "_", "icon_delete.gif", "deleteEvent", "Delete", evt.title(document.getElementById('lang').value), evt.id) + "</span>\r\n";

   document.getElementById('EventListDetails').innerHTML = evt_info;
}



function printEventListDay(evt_arr, year, month, day, prefix) {
   var event_list = new Array();
//   var evts = getEventsOnDay(evt_arr, year, month, day, null, null, null, prefix, true);
   var evts = getEventsOnDay(evt_arr, year, month, day);
   if (evts.length > 0) {
      var url = "";
      var i;
      var list = "";
      for (i = 0; i < evts.length - 1; i++) {
         url = evts[i].pageurl();
         list += "<a class='side' href='" + (url == "" ? getPageBase() + "?page=events&item=" + evts[i].id : url) + "'>" + evts[i].title() + "&nbsp;&gt;&gt;</a><br />";
      }
      url = evts[evts.length - 1].pageurl();
      list += "<a class='side' href='" + (url == "" ? getPageBase() + "?page=events&item=" + evts[i].id : url) + "'>" + evts[evts.length - 1].title() + "&nbsp;&gt;&gt;</a><br />";
      document.getElementById('EventListDetails').innerHTML = list;
   }
}


function printEventListDetailed() {
   var demo_admin_mode = document.getElementById('EventNewID') == null ? false : true;

   var single;
   var list_single = "",
       list_rep = "";
   var i;


   for (i = 0; i < events_occasions.length; i++) {
      var datetime = 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 = 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 = (ty > 0 && tm > 0 && td > 0) ? true : false;

      if (single) {
         var title = events_occasions[i].title(document.getElementById('lang').value);
         if (title != null) {
            var oneday = fy == ty && fm == tm && fd == td ? true : false;
            var twd = new Date(ty, tm - 1, td).getDay();
            list_single += "<tr><td class='item'>" + title + (events_occasions[i].accept_res == 2 ? " <i>(default)</i>" : "") + "</td><td class='item' " + (oneday && !events_occasions[i].override ? "colspan=3" : "") + ">";
            if (events_occasions[i].override == 1) {
               list_single += days[fwd].substr(0, 3) + ", " + months[fm - 1].substr(0, 3) + " " + fd + ", " + fy + " " + convertTime(fh, fi);
            } else {
               list_single += days[fwd].substr(0, 3) + ", " + months[fm - 1].substr(0, 3) + " " + fd + ", " + fy;
            }
            if (!oneday || events_occasions[i].override) {
               list_single += "</td><td>-</td><td>";
            }
            if (!oneday) {
               if (events_occasions[i].override) {
                  list_single += days[twd].substr(0, 3) + ", " + months[tm - 1].substr(0, 3) + " " + td + ", " + ty + " " + convertTime(th, ti);
               } else {
                  list_single += days[twd].substr(0, 3) + ", " + months[tm - 1].substr(0, 3) + " " + td + ", " + ty;
               }
            } else {
               if (events_occasions[i].override) {
                  list_single += convertTime(th, ti);
               }
            }
            list_single += "</td>";
            if (document.getElementById("EventNewAcceptRes")) {
               list_single += "<td class='item'>" + (events_occasions[i].accept_res > 0 ? "yes" : "no") + "</td>";
               if (document.getElementById("EventNewPlaceUnits")) {
                  if (events_occasions[i].layout_id == eventsLayoutID) {
                     var ul = getResUnitList(events_occasions[i].placeunits, eventsResUnits, true);
                     list_single += "<td class='item'>" + (ul == "" ? "<span class='msg_err'>Invalid unit info</span>" : ul) + "</td>";
                  } else {
                     list_single += "<td class='item'><span class='msg_err'>Invalid unit info</span></td>";
                  }
               } else {
                  list_single += "<td class='item'>" + (events_occasions[i].accept_res > 0 ? (events_occasions[i].maxnum_units == -1 ? "Unlimited" : events_occasions[i].maxnum_units) : "-") + "</td>";
               }
            }
            list_single += "<td class='item' style='width: 60px;'><span " + (demo_admin_mode ? "class='demonavig'" : "style='display: none;'") + ">";
            list_single += getArticleNavButton("EventEdit" + events_occasions[i].id + "_", "icon_edit_big.gif", "editEvent", "Edit", events_occasions[i].title(document.getElementById('lang').value), events_occasions[i].id) + "&nbsp;";
            list_single += getArticleNavButton("EventDelete" + events_occasions[i].id + "_", "icon_delete_big.gif", "deleteEvent", "Delete", events_occasions[i].title(document.getElementById('lang').value), events_occasions[i].id) + "&nbsp;";
            list_single += "</span></td></tr>\r\n";
         }
      } else {
         var title = events_occasions[i].title(document.getElementById('lang').value);
         if (title != null) {
            list_rep += "<tr><td class='item'>" + title + (events_occasions[i].accept_res == 2 ? " <i>(default)</i>" : "") + "</td>";
            list_rep += "<td class='item'>" + days[fwd].substr(0, 3) + ", " + months[fm - 1].substr(0, 3) + " " + fd + ", " + fy + "</td>";
            list_rep += "<td class='item'>";
            var rep = Math.floor(events_occasions[i].wday / 10);
            if (rep == 2) {
               list_rep += "Every other ";
            } else if (rep == 4) {
               list_rep += "Every fourth ";
            } else if (rep == 0) {
               list_rep += "Every ";
            }
            var wday = events_occasions[i].wday % 10;
            if (wday == 0) {
               list_rep += "day";
            } else {
               list_rep += days[wday - 1];
            }
            list_rep += "</td>";
            if (events_occasions[i].override) {
               list_rep += "<td>" + convertTime(fh, fi) + "</td><td>-</td><td>" + convertTime(th, ti) + "</td>";
            } else {
               list_rep += "<td class='item' colspan=3>From opening to closing</td>";
            }
            if (document.getElementById("EventNewAcceptRes")) {
               list_rep += "<td class='item'>" + (events_occasions[i].accept_res > 0 ? "yes" : "no") + "</td>";
               if (document.getElementById("EventNewPlaceUnits")) {
                  if (events_occasions[i].layout_id == eventsLayoutID) {
                     var ul = getResUnitList(events_occasions[i].placeunits, eventsResUnits, true);
                     list_rep += "<td class='item'>" + (ul == "" ? "<span class='msg_err'>Invalid unit info</span>" : ul) + "</td>";
                  } else {
                     list_rep += "<td class='item'><span class='msg_err'>Invalid unit info</span></td>";
                  }
               } else {
                  list_rep += "<td class='item'>" + (events_occasions[i].accept_res > 0 ? (events_occasions[i].maxnum_units == -1 ? "Unlimited" : events_occasions[i].maxnum_units) : "-") + "</td>";
               }
            }
            list_rep += "<td class='item' style='width: 60px;'><span " + (demo_admin_mode ? "class='demonavig'" : "style='display: none;'") + ">";
            list_rep += getArticleNavButton("EventEdit" + events_occasions[i].id + "_", "icon_edit_big.gif", "editEvent", "Edit", events_occasions[i].title(document.getElementById('lang').value), events_occasions[i].id) + "&nbsp;";
            list_rep += getArticleNavButton("EventDelete" + events_occasions[i].id + "_", "icon_delete_big.gif", "deleteEvent", "Delete", events_occasions[i].title(document.getElementById('lang').value), events_occasions[i].id) + "&nbsp;";
            list_rep += "</span></td></tr>\r\n";
         }

      }
   }

   var list = "<table><tr><td class='eventtablehead'><span style='float: right;'>" + getDisplayModeSelector() + "</span>List of Events and Occasions</td></tr><tr><td class='eventitemdet'>";
   if (list_single != "") {
      list += "<table cellpadding=3 cellspacing=0><tr><td class='itemtitle'>Event (single)</td><td class='itemtitle' colspan=3>Date / Interval</td>";
      if (document.getElementById("EventNewAcceptRes")) {
         list += "<td class='itemtitle'>Accept</td>";
         if (document.getElementById("EventNewPlaceUnits")) {
            list += "<td class='itemtitle'>Units involved</td>";
         } else {
            list += "<td class='itemtitle'>Max # units</td>";
         }
      }
      list += "<td class='itemtitle'>&nbsp;</td></tr>\r\n";
      list += list_single;
      list += "</table></td></tr>\r\n";
   }
   if (list_rep != "") {
      list += "<tr><td class='eventitemdet'><table cellpadding=3 cellspacing=0><tr><td class='itemtitle'>Event (repetitive)</td><td class='itemtitle'>Starts on</td><td class='itemtitle'>Repeating</td><td class='itemtitle' colspan=3>Interval</td>";
      if (document.getElementById("EventNewAcceptRes")) {
         list += "<td class='itemtitle'>Accept</td>";
         if (document.getElementById("EventNewPlaceUnits")) {
            list += "<td class='itemtitle'>Units involved</td>";
         } else {
            list += "<td class='itemtitle'>Max # units</td>";
         }
      }
      list += "<td class='itemtitle'>&nbsp;</td></tr>\r\n";
      list += list_rep;
      list += "</table>\r\n";
   }
   list += "</td></tr></table>";

   var host = document.getElementById("EventsHost");
   host.innerHTML = list;

   setButtonVisualStuff();
}


function getRepeatStart(from_year, from_month, from_day, wday, rep) {
   if (rep == 0) rep = 1;
   var start = new Date(from_year, from_month - 1, from_day);
   var cur = new Date();
   cur = new Date(cur.getFullYear(), cur.getMonth(), cur.getDate());

   var dif = 0;

   if (wday > 0) {
      var swd = start.getDay();
      if (swd != wday - 1) {
         dif = wday - 1 - swd;
         if (dif < 0) dif = dif * 1 + 7;
//         start.setTime(start.getTime() + (dif * 86400000));
         start.setDate(start.getDate() + dif * 1);
      }
   }
   var next = wday % 10 > 0 ? rep * 7 : 1;
   while (start.getTime() < cur.getTime()) {
//      var next = wday % 10 > 0 ? rep * 604800000 : 86400000;
//      start.setTime(start.getTime() + next);
      start.setDate(start.getDate() + next);
   }
   return start;
}


function getRepeatNext(wday, rep, start) {
   if (rep == 0) rep = 1;
//   var next = wday % 10 > 0 ? rep * 604800000 : 86400000;
   var next = wday % 10 > 0 ? rep * 7 : 1;
//   start.setTime(start.getTime() + next);
   start.setDate(start.getDate() + next);
   return start;
}


function printUpcomingList() {
   var from_year = document.getElementById("OH_event_start_year").value;
   var from_month = makeTwoDigits(document.getElementById("OH_event_start_month_sel").value);
   var from_day = makeTwoDigits(document.getElementById("OH_event_start_day_sel").value);

   var rep = document.getElementById("EventRepeat").value;
   var wday = document.getElementById("EventWeeklyDay").value;

   if (rep > 0 && wday == 0) {
      document.getElementById("EventWeeklyDay").selectedIndex = 1;
      wday = document.getElementById("EventWeeklyDay").value;
   }

   var start = getRepeatStart(from_year, from_month, from_day, wday, rep);

   var list = "<i>Upcoming dates:<br />\r\n";
   var i;
   for (i = 0; i < 4; i++) {
      list += months[start.getMonth()].substr(0, 3) + " " + start.getDate() + ", ";
      start = getRepeatNext(wday, rep, start);
   }
   list += months[start.getMonth()].substr(0, 3) + " " + start.getDate();
   list += "...</i>";

   var host = document.getElementById("EventUpcomingDates");
   host.innerHTML = list;
}


function saveEvent() {

   var event_id = document.getElementById("EventNewID").value;
   if (event_id != "") {
      event_id = "&event_id=" + event_id;
   }

   var loc_id = document.getElementById("Event_LocationList").value;

   var wday = 0;
   var from_time = "";
   var to_time = "";
   var s_ovr = "", s_acc = "", from = "", to = "", from_time = "", to_time = "";
   var ovr = document.getElementById("EventOverrideOH").checked;
   if (ovr == true) {
      s_ovr = "&Override=1";
      var from_h = makeTwoDigits(document.getElementById("OH_0_EventNew_from_h").value);
      var from_m = makeTwoDigits(document.getElementById("OH_0_EventNew_from_m").value);
      var to_h = makeTwoDigits(document.getElementById("OH_0_EventNew_to_h").value);
      var to_m = makeTwoDigits(document.getElementById("OH_0_EventNew_to_m").value);
      var f = from_h * 60 + from_m * 1;
      var t = to_h * 60 + to_m * 1;
      if (f >= t) to_h = to_h * 1 + 24;
      from_time = "&FromH=" + from_h + "&FromMin=" + from_m;
      to_time = "&ToH=" + to_h + "&ToMin=" + to_m;
   }
   var single = document.getElementById("EventNewSingle").checked;
   if (single) { // single
      var from_year = document.getElementById("OH_event_from_year").value;
      var from_month = makeTwoDigits(document.getElementById("OH_event_from_month_sel").value);
      var from_day = makeTwoDigits(document.getElementById("OH_event_from_day_sel").value);
      var to_year = document.getElementById("OH_event_to_year").value;
      var to_month = makeTwoDigits(document.getElementById("OH_event_to_month_sel").value);
      var to_day = makeTwoDigits(document.getElementById("OH_event_to_day_sel").value);
      from = "&FromY=" + from_year + "&FromMon=" + from_month + "&FromD=" + from_day + from_time;
      to = "&ToY=" + to_year + "&ToMon=" + to_month + "&ToD=" + to_day + to_time;
   } else { // repetitive
      var from_year = document.getElementById("OH_event_start_year").value;
      var from_month = makeTwoDigits(document.getElementById("OH_event_start_month_sel").value);
      var from_day = makeTwoDigits(document.getElementById("OH_event_start_day_sel").value);
      var rep = document.getElementById("EventRepeat").value;
      wday = document.getElementById("EventWeeklyDay").value;
      if (rep > 0) {
         wday = rep + "" + wday;
      }
      from = "&FromY=" + from_year + "&FromMon=" + from_month + "&FromD=" + from_day + from_time;
      to = to_time;
   }
   var accept = false;
   if (document.getElementById("EventNewAcceptRes")) {
      accept = document.getElementById("EventNewAcceptRes").checked;
      if (accept == true) {
         if (document.getElementById('EventNewDefault').checked == true) {
            s_acc = "&AcceptRes=2";
         } else {
            s_acc = "&AcceptRes=1";
         }
      }
   }

   var title_descr = checkTitleDescr("EventNew", true);
   if (title_descr.length == 0) return;

   var pts = getPageTitles("EventNew");

   var maxnum_units = -1, req_restime = 0, avg_stayingtime = -1;
   var p_list = "";
   var p_list_ok = true;
   if (document.getElementById("EventNewAcceptRes")) {
      if (document.getElementById("EventNewPlaceUnits") && document.getElementById('EventNewLimitedAssign').checked) {
         p_list = document.getElementById("EventNewPlaceUnits").value;
      }
      maxnum_units = document.getElementById('EventNewLimitedResUnits').checked ? document.getElementById('EventNewMaxResUnits').value : -1;
      req_restime = document.getElementById('EventNewAcceptRes').checked ? (document.getElementById('EventNewReqResTime').checked ? 1 : 0) : 0;
   }

   var placeunit_list = "";
   if (p_list == "all" || p_list == "none") {
      p_list_ok = true;
      placeunit_list = "&PlaceUnits=" + p_list + "&LayoutID=" + eventsLayoutID;
   } else {
      var arr = p_list.split(",");
      p_list_ok = true;
      var place_list = new Array();
      var i;
      for (i = 0; i < arr.length && p_list_ok; i++) {
         var name = trim(arr[i]);
         if (name.length > 0) {
            var unit = getResUnitByName(name, eventsResUnits);
            if (unit != null) {
               place_list[place_list.length] = unit.id;
            }
         }
      }
      if (p_list_ok) {
         placeunit_list = "&PlaceUnits=" + place_list.join(",") + "&LayoutID=" + eventsLayoutID;
      }
   }

   if (!p_list_ok) {
      alert("Incorrect reservable unit list.\nOnly comma-spearated numeric values or 'none' or 'all' keywords can be used.");
      return;
   }


   if (single) {
      if (new Date(to_year, to_month, to_day).getTime() < new Date(from_year, from_month, from_day).getTime()) {
         alert("Event date:\nBeginning date of event cannot be later than end date of event");
         return;
      }
   }
//   if (ovr) {
////      if (from_h == 0 && from_m == 0 && to_h == 0 && to_m == 0) {
//      var f = from_h * 60 + from_m * 1;
//      var t = to_h * 60 + to_m * 1;
//      if (f >= t) {
//         alert("Overriding open hours:\nEnd time must be earlier than start time");
//         return;
//      }
//   }


   if (document.getElementById("EventNewAcceptRes")) {
      if (maxnum_units == "" || isNaN(maxnum_units)) {
         alert("Limited reservable units:\nPlease specify the maximum number of reservable units!");
         return;
      }
      if (document.getElementById("EventNewAcceptRes").checked) {
         if (document.getElementById('EventNewFinishDuration').checked) {
            avg_stayingtime = document.getElementById('EventNewDurationInterval').value;
            if (avg_stayingtime == "" || isNaN(avg_stayingtime)) {
               alert("Please specify the average staying time for this event!");
               return;
            }
         } else if (document.getElementById('EventNewFinishResDateTo').checked) {
            avg_stayingtime = -2;
         }
      }
      avg_stayingtime = avg_stayingtime < 0 ? avg_stayingtime : processIntervalSelector("EventNewDuration");
   }

   var response_msg = 0;
   if (isModuleInstalled("reservations") && isModuleInstalled("messages")) {
      if (document.getElementById('EventNewAutoResponse').checked) response_msg = document.getElementById('EventNewTemplateSelector').value + "|Event: " + document.getElementById('EventNewTitle_' + document.getElementById('lang').value).value;
   }

   startIndicator("LocEventIndicator", "Saving");
   var cmd = "cmd=cmdSaveEvent&sid=" + document.getElementById('SessionID').value + "&page=" + document.getElementById('page').value + event_id + "&loc_id=" + loc_id + "&" + from + to + "&WDay=" + wday + s_ovr + s_acc + title_descr + pts + "&MaxNumUnits=" + maxnum_units + "&AvgStayingTime=" + avg_stayingtime + "&ReqResTime=" + req_restime + "&ResponseMsg=" + response_msg + placeunit_list;
   load(ajaxEventAdd = GetXmlHttpObject(), engine_event_process, cmd, addedEvent);
}



function addedEvent() {
   if (ajaxEventAdd.readyState == 4 || ajaxEventAdd.readyState == "complete") {
      resetEventForm();
      var loc_id = document.getElementById("Event_LocationList").value;
      var cmd = "cmd=cmdLoadEventsOccasions&sid=" + document.getElementById('SessionID').value + "&page=" + document.getElementById('page').value + "&loc_id=" + loc_id;
      load(ajaxEventLoad = GetXmlHttpObject(), engine_event_process, cmd, updateEvents);
   }
}





function deleteEvent(name, title, entry_id, topic_id) {
   var evt = getEvent(entry_id, events_occasions);
   if (confirm("Do you really want to delete this event?\n   " + decodeURIComponent(title) + "\nTHIS CANNOT BE UNDONE!")) {
      startIndicator("LocEventIndicator", "Deleting event");
      var cmd = "cmd=cmdDeleteEvent&sid=" + document.getElementById('SessionID').value + "&page=" + document.getElementById('page').value + "&event_id=" + entry_id;
      load(ajaxEventDelete = GetXmlHttpObject(), engine_event_process, cmd, deletedEvent);
   }
}


function deletedEvent() {
   if (ajaxEventDelete.readyState == 4 || ajaxEventDelete.readyState == "complete") {
      var loc_id = document.getElementById("Event_LocationList").value;
      var cmd = "cmd=cmdLoadEventsOccasions&sid=" + document.getElementById('SessionID').value + "&page=" + document.getElementById('page').value + "&loc_id=" + loc_id;
      load(ajaxEventLoad = GetXmlHttpObject(), engine_event_process, cmd, updateEvents);
   }
}


function resetEventForm() {
   toggle("EventNewTypeHost", true);
   toggle("EventNewReservationParamsHost", false);
   toggle("EventNewTitleDescrHost", false);
   toggle("EventNewMessagingHost", false);

   document.getElementById("EventNewID").value = "";

   document.getElementById("EventNewSingle").checked = true;

   eventScheduler("EventNewSingle");
   setCurrentDate(null, "Input_OH_event_from_year", "OH_event_from_year", "OH_event_from_month", "OH_event_from_day");
   setCurrentDate(null, "Input_OH_event_to_year", "OH_event_to_year", "OH_event_to_month", "OH_event_to_day");
   setCurrentDate(null, "Input_OH_event_start_year", "OH_event_start_year", "OH_event_start_month", "OH_event_start_day");

   if (document.getElementById("EventNewAcceptRes")) {
      document.getElementById("EventNewAcceptRes").checked = true;
   }
   document.getElementById("EventOverrideOH").checked = false;
   setTimeValue("OH_0_EventNew_from_h", "OH_0_EventNew_from_m", 0, 0)
   setTimeValue("OH_0_EventNew_to_h", "OH_0_EventNew_to_m", 0, 0)
   toggleOH();
   hintEventNewOverride();

   document.getElementById("EventRepeat").value = 0;
   document.getElementById("EventWeeklyDay").value = 0;

   if (document.getElementById("EventNewAcceptRes")) {
      if (document.getElementById("EventNewPlaceUnits")) {
         setPlaceUnits("EventNew", "none", eventsResUnits, "hintEventNewAccept");
         document.getElementById('EventNewLimitedAssign').checked = true;
      } else {
         document.getElementById('EventNewLimitedNoLimit').checked = true;
      }
      document.getElementById('EventNewMaxResUnits').value = "";
      document.getElementById('EventNewReqResTime').checked = false;
      document.getElementById('EventNewFinishDuration').checked = true;
      setIntervalSelector("EventNewDuration", 120, "minutes")
   }

   hintEventNewAccept("EventNewPlaceUnits");
   hintEventNewReqResTime(true);
   if (document.getElementById("EventNewAcceptRes")) document.getElementById('EventNewDefault').checked = false;
   checkEventNewDefault();

   if (isModuleInstalled("reservations") && isModuleInstalled("messages")) {
      document.getElementById('EventNewAutoResponse').checked = false;
      toggle('EventNewTemplateSelectorHost', false);
      if (document.getElementById('EventNewTemplateSelector')) {
         document.getElementById('EventNewTemplateSelector').value = 0;
      }
   }

   var loc_name = getLocationName("Event_LocationList");

   var i;
   resetPageTitleEditor("EventNew");
   for (i = 0; i < languages.length; i++) {
      document.getElementById("EventNewTitle_" + languages[i].descr).value = "";
      wreEventNewDescr.setDocument(languages[i].descr);
      document.getElementById('LocationTopicTitle_1_' + languages[i].descr).value = loc_name;
   }
   wreEventNewDescr.setText();

}


function editEvent(name, title, entry_id, topic_id) {
   var evt = getEvent(entry_id, events_occasions);

   toggle('NewEventHost', true);
   toggle('EventsHost', false);

   toggle('NewEventHeadTextHost', false);
   toggle('EditEventHeadTextHost', true);

   var evt_title = compact(evt.title(), 30);
   document.getElementById('EditEventHeadText').innerHTML = "Edit: " + evt_title;

   document.getElementById("EventNewID").value = evt.id;

   var datetime = evt.event_from.split(" ");
   var date = datetime[0].split("-"), time = datetime[1].split(":");
   var fy = date[0] * 1, fm = date[1], fd = date[2] * 1, fh = time[0] * 1, fi = time[1] * 1;
   datetime = evt.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 single = (ty > 0 && tm > 0 && td > 0) ? true : false;

   document.getElementById(single ? "EventNewSingle" : "EventNewRepetitive").checked = true;

   if (single) {
      eventScheduler("EventNewSingle");
      setSelectedDate(null, "Input_OH_event_from_year", fy, fm, fd, "OH_event_from_year", "OH_event_from_month", "OH_event_from_day");
      setSelectedDate(null, "Input_OH_event_to_year", ty, tm, td, "OH_event_to_year", "OH_event_to_month", "OH_event_to_day");
   } else {
      eventScheduler("EventNewRepetitive");
      setSelectedDate(null, "Input_OH_event_start_year", fy, fm, fd, "OH_event_start_year", "OH_event_start_month", "OH_event_start_day");
      document.getElementById("EventRepeat").value = Math.floor(evt.wday / 10);
      document.getElementById("EventWeeklyDay").value = evt.wday % 10;
      printUpcomingList();
   }

   if (document.getElementById("EventNewAcceptRes")) {
      document.getElementById("EventNewAcceptRes").checked = evt.accept_res > 0 ? true : false;
   }

   if (evt.override) {
      setTimeValue("OH_0_EventNew_from_h", "OH_0_EventNew_from_m", fh, fi);
      setTimeValue("OH_0_EventNew_to_h", "OH_0_EventNew_to_m", th, ti);
   }
   document.getElementById("EventOverrideOH").checked = evt.override;
   toggleOH();
   hintEventNewOverride();
   if (document.getElementById("EventNewAcceptRes")) {

      if (evt.maxnum_units == -1) {
         if (evt.placeunits == "none") {
            document.getElementById('EventNewLimitedNoLimit').checked = true;
         } else if (document.getElementById('EventNewLimitedAssign')) {
            document.getElementById('EventNewLimitedAssign').checked = true;
         }
         document.getElementById('EventNewMaxResUnits').value = "";
      } else {
         document.getElementById('EventNewLimitedResUnits').checked = true;
         document.getElementById('EventNewMaxResUnits').value = evt.maxnum_units;
      }
      if (document.getElementById("EventNewPlaceUnits")) {
         if (evt.layout_id == eventsLayoutID) {
            setPlaceUnits("EventNew", evt.placeunits, eventsResUnits, "hintEventNewAccept");
         } else {
            setPlaceUnits("EventNew", "none", eventsResUnits, "hintEventNewAccept");
         }
      }


      document.getElementById('EventNewReqResTime').checked = evt.req_restime;
      if (evt.avg_stayingtime == -2) { // Guests/clients have to specify finish date of reservation
         document.getElementById('EventNewFinishResDateTo').checked = true;
      } else if (evt.avg_stayingtime == -1) { // Guests stay until this event finishes
         document.getElementById('EventNewFinishEventDateTo').checked = true;
      } else { // Calculate finish date/time from average time of staying
         document.getElementById('EventNewFinishDuration').checked = true;
         setIntervalSelector("EventNewDuration", evt.avg_stayingtime)
      }
   }

   hintEventNewAccept("EventNewPlaceUnits");
   hintEventNewReqResTime(true);
   if (document.getElementById("EventNewAcceptRes")) document.getElementById('EventNewDefault').checked = evt.accept_res == 2 ? true : false;
   checkEventNewDefault();

   var loc_name = getLocationName("Event_LocationList");

   var i;
   resetPageTitleEditor("EventNew");
   for (i = 0; i < languages.length; i++) {
      document.getElementById("EventNewTitle_" + languages[i].descr).value = evt.title(languages[i].descr);
      var url = evt.pageurl(languages[i].descr);
      if (url.length > 0) {
         document.getElementById('EventNewPermalink_' + languages[i].descr).innerHTML = getWebAddress() + "/" + url;
         checkPageTitle("EventNew", languages[i].descr);
      }
      document.getElementById('LocationTopicTitle_1_' + languages[i].descr).value = loc_name;
      wreEventNewDescr.setDocument(languages[i].descr, evt.descr(languages[i].descr));
   }
   wreEventNewDescr.setText(evt.descr(document.getElementById('lang').value));

   if (isModuleInstalled("reservations") && isModuleInstalled("messages")) {
      if (evt.response_msg > 0) {
         document.getElementById('EventNewAutoResponse').checked = true;
         document.getElementById('EventNewTemplateSelector').value = evt.response_msg;
      } else {
         document.getElementById('EventNewAutoResponse').checked = false;
      }
      toggle('EventNewTemplateSelectorHost', document.getElementById('EventNewAutoResponse').checked, document.getElementById('EventNewAutoResponse').checked ? "inline" : "");
   }
}




function copyDateToEventTo() {
   document.getElementById("Input_OH_event_to_year").value = document.getElementById("Input_OH_event_from_year").value;
   document.getElementById("OH_event_to_year").value = document.getElementById("OH_event_from_year").value;
   document.getElementById("OH_event_to_month_sel").value = document.getElementById("OH_event_from_month_sel").value;
   document.getElementById("OH_event_to_day_sel").value = document.getElementById("OH_event_from_day_sel").value;
}






function createEventColors(prefix, event_arr, color_arr) {
   var use_colors = document.getElementById('EventListUseColors').value == "true" ? true : false;
   if (!use_colors) {
      return;
   }
   var i;
   for (i = 0; i < event_arr.length; i++) {
      var idx = i % document.getElementById(prefix + 'NumColors').value
      var base = document.getElementById(prefix + 'ColorBase_' + idx).value.split(",");
      var lighter = document.getElementById(prefix + 'ColorLighter_' + idx).value.split(",");
      var even_darker = document.getElementById(prefix + 'ColorEvenDarker_' + idx).value.split(",");
      var even_lighter = document.getElementById(prefix + 'ColorEvenLighter_' + idx).value.split(",");
      var darker = document.getElementById(prefix + 'ColorDarker_' + idx).value.split(",");
      color_arr[event_arr[i].id] = Array(base, lighter, even_darker, even_lighter, even_darker);
   }
}



function flashEventColor(id, clr_idx, colorlist_arr_name, over) {
   var elem = document.getElementById(id);
   var colorlist_arr = eval(colorlist_arr_name);
   elem.style.backgroundColor = "rgb(" + (over ? colorlist_arr[clr_idx][3].join(",") : colorlist_arr[clr_idx][1].join(",")) + ")";
   elem.style.color = "rgb(" + (over ? colorlist_arr[clr_idx][4].join(",") : colorlist_arr[clr_idx][2].join(",")) + ")";
}








function loadedEventNewEMailTemplates() {
   if (ajaxLoadEMailTemplates.readyState == 4 || ajaxLoadEMailTemplates.readyState == "complete") {
      stopIndicator("EventNewTemplateIndicator");

      var sel_category = 0, sel_template = document.getElementById('EMailEventNew').value;

      var event_email_categories = new Array();

      parseEMailTemplates(ajaxLoadEMailTemplates.responseText, event_email_categories);

      printEMailTemplateSelector("EventNew", event_email_categories, "", sel_category, sel_template, true);
   }
}

