// класс-обёртка, явным образом обычно не создаётся (см. ниже)
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++)
                        if(classes[i] != className) 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)
}

//Изменения класса объекта Добавчоный "_on" стиль должен быть прописан в css следующим образом "имя.текущего.стиля"+"_on" при повторном вызове функции (важно чтобы она вызывалась тем же объектом) возвращается старое значение имени класса
className = '';
function change(obj) {
	if (className.indexOf('_on') == -1) {className=CssClasses(obj).all();prefiks='_on';} else {prefiks='';}
	CssClasses(obj).remove(className); if (prefiks=='') {className_temp=className; className=''; for (i=0;i<className_temp.indexOf('_on');i++) className+=className_temp.charAt(i);}
	className += prefiks;
	//Удаляет Лишние запятые (глюк в Опере)
	regx = /\W+/;className=className.replace(regx,'');
	CssClasses(obj).add(className);
}

//Функция активизирует переход по ссылке. Id ссылки(тега А) должен выглядеть "a_"+"id объекта который вызвал эту функцию"
function gou(obj) {
	document.getElementById('a_'+obj.id).click()
}