function getObjectById(id)
{
  var returnVar = null;

  if(document.getElementById)
  {
    returnVar = document.getElementById(id);
  }
  else if(document.all)
  {
    returnVar = document.all[id];
  }
  else if(document.layers)
  {
    returnVar = document.layers[id];
  }

  return returnVar;
}


function getObjectsByClassName(obj, cl)
{
  var retnode = [];
  var myclass = new RegExp('\\b'+cl+'\\b');
  var elem = obj.getElementsByTagName('*');

  for (var i = 0; i < elem.length; i++)
  {
    var classes = elem[i].className;
    if (myclass.test(classes)) retnode.push(elem[i]);
  }

  return retnode;
}; 


function getObjectVisibility(obj)
{
  var displayVal = "";

  if(document.layers)
  {
    displayVal = obj.display;
  }
  else
  {
    displayVal = obj.style.display;
  }

  return displayVal != "none";
}


function setObjectVisibility(obj, visible)
{
  var displayVal = (visible)? "block": "none";

  if(document.layers)
  {
    obj.display = displayVal;
  }
  else
  {
    obj.style.display = displayVal;
  }
}


function setCalendarBusy(calendarName, busy)
{
  var blanket = getObjectById(calendarName + '_blanket');
  var spinner = getObjectById(calendarName + '_spinner');

  setObjectVisibility(blanket, busy);
  setObjectVisibility(spinner, busy);
}


function updateCalendar(calendarName, url)
{
  setCalendarBusy(calendarName, true);
  setTimeout("updateCalendarHelper(\"" + calendarName + "\", \"" + url + "\")", 250); 
}


function updateCalendarHelper(calendarName, url)
{
  var calendarObj = getObjectById(calendarName);
  var xmlhttp =  new XMLHttpRequest();
  xmlhttp.open('GET', url, true);

  xmlhttp.onreadystatechange = function()
  {
    if(xmlhttp.readyState == 4)
    {
      if (xmlhttp.status == 200)
      {
        calendarObj.innerHTML = xmlhttp.responseText;

        try
        {
          var scriptTags = calendarObj.getElementsByTagName("script");   

          for(var i = 0; i < scriptTags.length; i++)
          {  
            eval(scriptTags[i].text);  
          }
        }
        catch(err)
        {
        }

        updateMoreItemArrows(calendarObj);
      }
      else
      {
      }

      setCalendarBusy(calendarName, false);
    }
  }

  xmlhttp.send(null);
}


function updateEvent(calendarName, url)
{
  setCalendarBusy(calendarName, true);
  setTimeout("updateEventHelper(\"" + calendarName + "\", \"" + url + "\")", 250); 
}


function updateEventHelper(calendarName, url)
{
  var eventObj = getObjectById(calendarName + "_event_details");
  var xmlhttp =  new XMLHttpRequest();
  xmlhttp.open('GET', url, true);

  xmlhttp.onreadystatechange = function()
  {
    if(xmlhttp.readyState == 4)
    {
      if (xmlhttp.status == 200)
      {
        eventObj.innerHTML = xmlhttp.responseText;
      }
      else
      {
      }

      setCalendarBusy(calendarName, false);
      setEventVisible(calendarName, true);
    }
  }

  xmlhttp.send(null);
}


function setEventVisible(calendarName, visible)
{
  var wrapper = getObjectById(calendarName + "_event_wrapper");
  var printObj = getObjectById(calendarName + "_event_print");
  var emailObj = getObjectById(calendarName + "_event_email");
  var detailsObj = getObjectById(calendarName + "_event_details");
  setObjectVisibility(wrapper, visible);
  setObjectVisibility(printObj, false);
  setObjectVisibility(emailObj, false);
  setObjectVisibility(detailsObj, true);
}


function printEvent(calendarName)
{
  try
  { 
    var printObj = getObjectById(calendarName + "_event_print");
    setObjectVisibility(printObj, true);
    var eventDetails = getObjectById(calendarName + "_event_details").innerHTML;
    var printDoc = (printObj.contentWindow || printObj.contentDocument);

    if (printDoc.document) 
    {
      printDoc = printDoc.document;
    }

    printDoc.write("<html><head><title>title</title>");
    printDoc.write("</head><body onload='this.focus(); this.print();'>");
    printDoc.write(eventDetails + "</body></html>");	    
    printDoc.close();
  }
  catch(e)
  {
    self.print();
  }
}


function emailEvent(calendarName)
{
  var detailsObj = getObjectById(calendarName + "_event_details");
  var emailObj = getObjectById(calendarName + "_event_email");
  setObjectVisibility(detailsObj, false);
  setObjectVisibility(emailObj, true);
  refreshEmailCaptcha(calendarName, pathToRoot);
}


function refreshEmailCaptcha(calendarName, pathToRoot)
{
  var captchaObj = getObjectById(calendarName + "_email_captcha");
  captchaObj.src = pathToRoot + "_captcha/secureimage/securimage_show.php?sid=" + Math.random();
}


function updateMoreItemArrows(calendarObj)
{
  var wrapperObjs = getObjectsByClassName(calendarObj, "calendar-items-wrapper");

  for(var i = 0; i < wrapperObjs.length; ++i)
  {
    var itemsHeight = wrapperObjs[i].offsetHeight;
    var parentHeight = wrapperObjs[i].parentNode.offsetHeight;
    var arrowObj = getObjectsByClassName(wrapperObjs[i].parentNode.parentNode, "calendar-day-footer");

    setObjectVisibility(arrowObj[0], itemsHeight>parentHeight);
  }
}


