﻿var datePickerFocused = false;

function AjaxRequest()
{
  var request, complete = false;

  try
  {
    request = new XMLHttpRequest();
  }
  catch (e)
  {
    try
    {
      request = new ActiveXObject('Msxml2.XMLHTTP');
    }
    catch (e)
    {
      try
      {
        request = new ActiveXObject('Microsoft.XMLHTTP');
      }
      catch (e)
      {
        request = false;
      }
    }
  }
  if (!request)
    return null;

  this.connect = function(URL, method, parameters, onComplete)
  {
    if (!request)
      return false;

    complete = false;
    method = method.toUpperCase();

    try
    {
      if (method == 'GET')
      {
        request.open(method, URL + '?' + parameters, true);
        parameters = '';
      }
      else
      {
        request.open(method, URL, true);
        request.setRequestHeader('Method', 'POST ' + URL + ' HTTP/1.1');
        request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
      }
      request.onreadystatechange = function()
      {
        if ((request.readyState == 4) && !complete)
        {
          complete = true;
          onComplete(request);
        }
      };
      request.send(parameters);
    }
    catch (z)
    {
      return false;
    }
    return true;
  };

  return this;
}

function bindFocusEvents(cells)
{
  var i;

  if (cells != null)
  {
    for (i = 0; i < cells.length; i++)
    {
      cells[i].onblur = onCellBlur;
      cells[i].onfocus = onCellFocus;
    }
  }
}

function completeLoadDate(request)
{
  if ((request != null) && (request.responseText != null) && (request.responseText.length > 0))
  {
    var datePicker = document.getElementById('datePicker');

    datePicker.innerHTML = request.responseText;
    datePicker.className = 'visible';

    var header = datePicker.getElementsByTagName('th');
    var data = datePicker.getElementsByTagName('td');
    if (data != null)
    {
      data[0].focus();
      datePickerFocused = true;
    }

    //bindFocusEvents(header);
    bindFocusEvents(data);

    if (completeLoadDate.button != null)
    {
      var position = getPosition(completeLoadDate.button);
      datePicker.style.top = position[0] + completeLoadDate.button.offsetHeight + 'px';
      datePicker.style.left = position[1] + (completeLoadDate.button.offsetWidth - datePicker.offsetWidth) + 'px';
    }
  }
}

function getPosition(element)
{
  var top = 0, left = 0;

  if (element.offsetParent)
  {
    do
    {
      top += element.offsetTop;
      left += element.offsetLeft;
    } while (element = element.offsetParent);
  }

  return [top, left];
}

function hideDatePicker()
{
  var datePicker = document.getElementById('datePicker');
  
  if (datePicker != null)
    datePicker.className = 'hidden';
}

function modifyDate(date, year, month)
{
  completeLoadDate.button = null;

  var request = new AjaxRequest();
  request.connect('CalendarServer.aspx?ts=' + new Date().getTime(), 'GET', 'date=' + escape(date) + '&year=' + year + '&month=' + month, completeLoadDate);
}

function onCellBlur(e)
{
  datePickerFocused = false;  
  onDatePickerBlur();
}

function onCellFocus(e)
{
  datePickerFocused = true;
}

function onDatePickerBlur(e)
{
  //setTimeout(function() { if (!datePickerFocused) hideDatePicker(); }, 300);
}

function onDatePickerKeyUp(e)
{
  if (!e)
    var e = window.event;

  var code;

  if (e.keyCode)
    code = e.keyCode;
  else if (e.which)
    code = e.which;

  //if (code == 27)
   // hideDatePicker();
}

function setDate(date)
{
  //hideDatePicker();

  if (setDate.text != null)
  {
    setDate.text.value = date;
    setDate.text.focus();
    hideDatePicker();
  }
}

function currectLength(str) {
  str = str.length == 1 ? "0" + str : str;
  return str;
}

function showDatePicker(button)
{
  var datePicker = document.getElementById('datePicker');
  var text = button.previousSibling;
  if (datePicker == null) {   
    datePicker = document.createElement('div');
    datePicker.setAttribute('id', 'datePicker');
    datePicker.setAttribute('dir', 'rtl');
    datePicker.className = 'hidden';
    datePicker.onkeyup = onDatePickerKeyUp;

    document.body.appendChild(datePicker);
  }
  while (text != null)
  {
    if ((text.nodeType == 1) && (text.nodeName.toLowerCase() == 'input') && (text.getAttribute('type').toLowerCase() == 'text'))
      break;
    text = text.previousSibling;
  }

  if (datePicker.className == 'visible')
    hideDatePicker();
  else {    
    if ((text != null) && (text.nodeName.toLowerCase() == 'input') && (text.getAttribute('type').toLowerCase() == 'text'))
    {
      completeLoadDate.button = button;
      setDate.text = text;

      var request = new AjaxRequest();
      request.connect('CalendarServer.aspx?ts=' + new Date().getTime(), 'GET', 'date=' + escape(text.value), completeLoadDate);
    }
  }
}
