// эта библиотека требует, чтобы были подключены также и 
// StrLib.js
// DateTimeLib.js

function coo_Create(sName, sValue, iDays) 
{
  // функция для создания или перезаписи куки 
  // sName - имя куки
  // sValue - ее значение
  // iDays - количество дней, в течении которых будет жить назначаемая кука

  /// 0. переменная для обозначения времени жизни куки
  var sExpires;
  
  // 1. задаем количество дней жизни куки по умолчанию
  iDays = s_Init (iDays, 0);
  
  // 2. задаем значение куки по умолчанию
  sValue = s_Init (sValue, "");

  // 3. if (iDays)  - это все равно , что if (iDays == 0) 
  if (iDays) 
  {
    /// 4. период жизни задан.
    // создаю переменную типа Date
    
    var dDate = new Date();

    // 5. сейчас dDate - текущая дата (текущий момент)
    // определяем время, когда кука должна истечь,
    // т.е. время через iDays дней после текущего времени.
    // Для этого используем функцию dt_DataAdd ()
    // из библиотеки  DateTimeLib.js
    
    dDate = dt_Add (dDate, iDays, ixDT_D);
   
    // 6. преобразуем полученное время во время по гринвичу 
    // и возвращаем как строку:
    dDate = dDate.toGMTString();
    
    // 7. теперь dDate - это уже строка. Приклеиваем ее 
    // к строке назначения
    // куки, вместе с ключевым словом expires
    sExpires = "; expires=" + dDate;
  } 
  else 
  {
    // 8. задаем нулевой период жизни куки, т.е.
    //  что кука должна быть стерта
    
    sExpires = "; expires=0";
  
    // 9. строго говоря, надо было писать так:
    // var dDate = new Date();
    // добавляем минус 1 день,
    // чтобы время окончания было заранее завершено
    // dDate = dt_DateAdd (dDate, -1, ixDT_D);
    // dDate = dDate.toGMTString();
    // expires = "; expires=" + dDate;
    // но и expires=0 тоже срабатывает как директива на удаление.
    
  }
  
  // 10. даю окончательную команду
  document.cookie = sName + "=" + sValue + sExpires + "; path=/";

//asd(sName + "=" + sValue + sExpires + "; path=/");
}

//------------------------------------------------------------

function coo_Read(sName, sIfNotFound) 
{
  // эта функция возвращает значение куки с именем sName

  sIfNotFound = s_Init (sIfNotFound, "");
  
  // 11. формирую строку, включающую название куки и знак равенства
  var sNameAndEqual = sName + "=";

  // 12. получаем строку со списком имен-значений всех куки   
  // и тут же разрезаем ее на пары "имя=значение"
  // в качестве разделителя указываем не просто точку с запятой, а 
  // "; ", т.к. именно таки разделителем соеденены пары в 
  // общей строке с куками

  var aCoo = document.cookie.split('; ');

  /// 13. сейчас aCoo - массив с парами "имя=значение"
  // проходим по нему  
  for (var i = 0; i < aCoo.length; i++) 
  {
    // 14. помещаем очередную пару "имя=значение" из массива 
    // в переменную sNextCookie
    var sNextCookie = aCoo[i];

    
    // 15. определяем, начинается ли очередная пара 
    // с подстроки "название нужной куки=",
    // которая сейчас содержится в переменной sNameAndEqual
    
    if (s_Left(sNextCookie, sNameAndEqual.length) == sNameAndEqual)
    {
      // 16. да, начинается. Значит возвращаем то, что идет после знака равенства
      return s_Mid (sNextCookie, sNameAndEqual.length + 1);
    }
    else
    {
      // 17. возможен вариант, когда 
      // значением куки является пустая строка.
      // Такая кука в общей строке с куками присутствует не в виде
      // пары "название=значение", а просто в виде своего названия.
      // Поэтому надо проверить, не является ли очередной массива просто названием 
      // искомой куки
      if (sNextCookie == sName )
      {
        // 18. да, совпадает. Значит значение куки равно пустой строке
        return "";
      }
    }
  }
  
  /// 19. прошли по всему массиву с куками и не обнаружили в нем нужной.
  // возвращаем null
  return sIfNotFound;
}

//------------------------------------------------------------

function coo_AreEnabled() 
{
  sName = "kaslwek4fm5sk";
  coo_Create(sName, 1, 2);
  sName = coo_Read(sName);
  bEnabled = (sName != "")
  if (bEnabled)
  {
    coo_Create(sName, "");
  }
  return bEnabled;
}