////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2006-2007 Victor V Vakchturov (Виктор В. Вахтуров) aka 3V
// All rights reserved
//
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
//
// See http://codeguru.ru for updates
//
// Запрещается публикация кода, содержащегося в этом файле любыми средствами
// и на любых носителях (в том числе и в Internet) без письменного
// разрешения автора.
//
// Вы можете использовать данную библиотеку абсолютно бесплатно в любых
// своих приложениях и проектах при условии сохранения данного комментария.
//

////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2008 Stanislav Katseval (Станислав А. Кацевал) aka Scor
// All rights reserved
// This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
// WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
// Запрещается публикация кода, содержащегося в этом файле любыми средствами
// и на любых носителях (в том числе и в Internet) без письменного
// разрешения автора.
// Вы можете использовать данную библиотеку абсолютно бесплатно в любых
// своих приложениях и проектах при условии сохранения данного комментария.



////////////////////////////////////////////////////////////////////////////
//
// Функция    : SetCookie
// Назначение : установка значения cookie с заданным именем
//
// Прототип   :
//
// SetCookie(strName, oValue [, oDateExpires [, strDomain [, strPath [, bSecure]]]])

function SetCookie(strName, oValue)
{
	var argv = SetCookie.arguments;
	var argc = SetCookie.arguments.length;

	var oDate = false; // аргумент expires

	if((argc > 2) && (argv[2] != null))
	{
		// задана дата
		// дату допустимо задавать:
		//	объектом Date,
		//	числом (миллисекундное смещение от 00:00:00 01.01.1970)
		//	строкой в формате, приемлемом для Date.parse

		var nStamp = (typeof(argv[2]) != "number")	?
				Date.parse(argv[2].toString())	:
				argv[2];

		if(!isNaN(nStamp))
			oDate = new Date(nStamp);
	}

	document.cookie =	strName + "=" + escape(oValue.toString())			+
				(oDate ? "; expires=" + oDate.toGMTString() : "")		+
				(((argc > 3) && (argv[3])) ? "; domain=" + argv[3] : "")	+
				(((argc > 4) && (argv[4])) ? "; path=" + argv[4] : "")		+
				((argc > 5) ? (argv[5] ? "; secure" : "") : "");
}


////////////////////////////////////////////////////////////////////////////
//
// Функция    : GetCookie
// Назначение : возвращает значение cookie с заданным именем
//

function GetCookie(strName)
{
	if((typeof(strName) == "string") && strName.length)
	{
	    var cookie_str = document.cookie;
	    var cookie_arr = cookie_str.split(";");
	    for (var i=0;i<cookie_arr.length;i++)
	    {
	        var pair = cookie_arr[i].split("=");
	        pair[0] = pair[0].replace(/\s+/ig,"");
	        if(pair[0] == strName)
	        {	        	 return unescape(pair[1]);
	        }
	    }
	    return null;
	}

	return null;
}


////////////////////////////////////////////////////////////////////////////
//
// Функция    : DeleteCookie
// Назначение : удаляет cookie с заданным именем
//

function DeleteCookie(strName)
{
	document.cookie = strName + "=0; expires=" + (new Date(0)).toGMTString();
}


////////////////////////////////////////////////////////////////////////////
//
// Функция    : DeleteAllCookie
// Назначение : удаляет все cookie, связанные с документом
//

function DeleteAllCookie()
{
    var cookie_str = document.cookie;
	var cookie_arr = cookie_str.split(";");
	for (var i=0;i<cookie_arr.length;i++)
	{
	    var pair = cookie_arr[i].split("=");
	    pair[0] = pair[0].replace(/\s+/ig,"");
	    DeleteCookie(pair[0]);
	}
}


////////////////////////////////////////////////////////////////////////////
//
// Функция    : IsCookieEnabled
// Назначение : определяет, "включены" ли куки на основе свойства
//		navigator.cookieEnabled, либо путем установки
//		"тестовой" куки

function IsCookieEnabled()
{
	if(typeof(navigator.cookieEnabled) != "undefined")
		return navigator.cookieEnabled;
	else
	{
		// свойство navigator.cookieEnabled не поддерживается
		// установим и получим тестовую куку

		var _c = "__V_TEST_COOKIE_NAME_";

		SetCookie(_c, "1");

		if(GetCookie(_c) != null)
		{
			DeleteCookie(_c);
			return true;
		}

		return false;
	}
}

////////////////////////////////////////////////////////////////////////////
//
// Функция    : IsCookieEnabledSimple
// Назначение : определяет, "включены" ли куки путем установки
//		"тестовой" куки

function IsCookieEnabledSimple()
{
	// свойство navigator.cookieEnabled не учитываю, т.к. куки
	// могут быть принудительно отключены пользователем
	var _c = "__V_TEST_COOKIE_NAME_";
	SetCookie(_c, "1");
	if(GetCookie(_c) != null)
	{
		DeleteCookie(_c);
		return true;
	}
	return false;
}