
// коррекция функции getElementById
if(!document.getElementById){
if(document.all)document.getElementById=function(){
if(typeof document.all[arguments[0]]!="undefined")return document.all[arguments[0]];else return null
}
else if(document.layers)document.getElementById=function(){
if(typeof document[arguments[0]]!="undefined")return document[arguments[0]];else return null
}
}

// собственная функция для удобства - быстрый доступ к объекту
function ge(id) {return document.getElementById(id)}


// функция определения координат блока на странице:
function getCoorinates(element)
{
	var left = element.offsetLeft;
	var top = element.offsetTop;
	for (var parent = element.offsetParent; parent; parent = parent.offsetParent)
	{
		left += parent.offsetLeft;
		top += parent.offsetTop;
	}
	return {left: left, top: top, width: element.offsetWidth, height: element.offsetHeight};
}


function getCookie(NameOfCookie){
  if (document.cookie.length > 0) {              
  begin = document.cookie.indexOf(NameOfCookie+"=");       
  if (begin != -1) {           
    begin += NameOfCookie.length+1;       
    end = document.cookie.indexOf(";", begin);
    if (end == -1) end = document.cookie.length;
      return unescape(document.cookie.substring(begin, end));
    } 
  }
  return null;
}
function setCookie(NameOfCookie, value, expiredays) {
  var ExpireDate = new Date ();
  ExpireDate.setTime(ExpireDate.getTime() + (expiredays * 24 * 3600 * 1000));
  document.cookie = NameOfCookie + "=" + escape(value) + 
  ((expiredays == null) ? "" : "; expires=" + ExpireDate.toGMTString());
}








// класс-обёртка, явным образом обычно не создаётся
// Пример использования:
// div = document.getElementById('someId')
// CssClasses(div).add('someClass')
// CssClasses(div).remove('someClass')
// CssClasses(div).flip('someClass')
function CssClassesHandler(object) { this.object = object }
CssClassesHandler.prototype = {
	object	  : null,
	// возвращает все классы элемента в виде массива строк
	all		 : function() {
					return this.object.className.split(/\s+/)
				},
	// назначен ли элементу данный класс?
	exists	  : function(className) {
					var classes = this.all()
					for(var i = 0; i < classes.length; i++)
						if(classes[i] == className) return true
					return false
				},
	// назначает элементу класс
	add		 : function(className) {
					var classes = this.all()
					for(var i = 0; i < classes.length; i++)
						if(classes[i] == className) return
					this.object.className = this.object.className + " " + className
				},
	// удаляет класс из назначенных элементу.
	// можно указать как имя класса, так и регулярное выражение,
	// которое будет сравниваться отдельно с каждым из назначенных классов.
	remove	  : function(className) {
					var classes = this.all()
					var cn = ""
					for(var i = 0; i < classes.length; i++) {
						var isMatch = (typeof className.test == "function")
							? className.test(classes[i])
							: (classes[i] == className)
						if(!isMatch) cn = cn + " " + classes[i]
					}
					this.object.className = cn.substr(1)
				},
	// назначает/удаляет класс в зависимости от булевского параметра state
	set		 : function(className, state) {
					if(state)
						this.add(className)
					else
						this.remove(className)
				},
	// назначает элементу класс, если он ещё не назначен, в противном случае удаляет
	flip		: function(className) {
					if(this.exists(className))
						this.remove(className)
					else
						this.add(className)
				}
}
// функция, создающая класс-обёртку для данного элемента
function CssClasses(object) {
	return new CssClassesHandler(object)
}