function $(id) {
	return document.getElementById(id);
}

function $$(obj, tagName) {
	return obj.getElementsByTagName(tagName);
}

function extend (ob1, ob2) {
	return (function (object) {
		for (var property in object) {
			this[property] = object[property];
		}
		return this;
	}).apply(ob1, [ob2]);
}

extend (Object, {
	Class: {
		find: function (obj, className) {
			var re = new RegExp('(^|\\s)' + className + '($|\\s)');
			return re.test(obj.className);
		},
		add: function (obj, a){
			if (!this.find(obj, a)){
				obj.className += (obj.className === '') ? a : ' ' + a;
			}
		},
		replace: function (obj, a, b, direction){
			if (direction) {
				var c = b, b = a, a = c;
			}
			if (this.find(obj, a)){
				obj.className = (obj.className.replace(new RegExp('(^|\\s+)(' + a + '|' + b + ')($|\\s+)', 'g'), '$1') + ' ' + b).replace(/^\s+/,'');
			} else {
				this.add(obj, b);
			}
		}
	},
	copyParams: function (obj, params) {
		for (var z in params) {
			obj[z] = params[z];
		}
	},
	array: function (iterable) {
		if (!iterable) { return []; }
		if (iterable.toArray) { return iterable.toArray(); }
		var length = iterable.length, results = [length];
		while (length--) {
				results[length] = iterable[length];
		}
		return results;
	}
});

extend (Function.prototype, {
	bind: function () {
		if (arguments.length < 2 && arguments[0] === undefined) { return this; }
		var __method = this, args = Object.array(arguments), object = args.shift();
		return function () {
			return __method.apply(object, args.concat(Object.array(arguments)));
		};
	},
	bindAsEventListener: function() {
		var __method = this, args = Object.array(arguments), object = args.shift();
		return function (event) {
		  return __method.apply(object, [event || window.event].concat(args));
		};
	}
});

var Event = {
	add: function (obj, sEvent, fnHandler) {
		if (obj.addEventListener) {
			obj.addEventListener(sEvent, fnHandler, false);
		} else {
			obj.attachEvent('on' + sEvent, fnHandler);
		}
	},
	remove: function (obj, sEvent, fnHandler) {
		if (obj.removeEventListener) {
			obj.removeEventListener(sEvent, fnHandler, false);
		} else {
			obj.detachEvent('on' + sEvent, fnHandler);
		}
	},
	element: function (e) {
		if (!e) { e = window.event; }
		if (!e) { return false; }
		return e.target || e.srcElement;
	},
	elementEqual: function (e, tag) {
		this.cancelEvent(e);
		e = this.element(e);
		return e.tagName == tag ? e : false;
	},
	cancelEvent: function (e) {
		return e.preventDefault ? e.preventDefault() : e.returnValue = false;
	}
};

/* ajax */
var Ajax = function (object, objParams) {
	Object.copyParams(this, object);
	Object.copyParams(this, objParams);
	if (this.init) {
		this.init.bind(this)();
	}

	return this;
};

Ajax.prototype = {
	go: function (data) {
		this.getTransport();
		if (!this.nospinner) {
			this.spinnerSH(1);
		}
		this.transport.open(this.method || 'GET', this.url, true);
		if (this.method == 'POST') {
			this.transport.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		} else {
			this.transport.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT");
		}
		this.transport.send(data || null);
		this.readyListener();
	},
	getTransport: function () {
		this.transport = window.ActiveXObject ? new ActiveXObject('Microsoft.XMLHTTP') : (window.XMLHttpRequest ? new XMLHttpRequest() : false);
	},
	spinnerSH: function (show) {
		Object.Class.replace(this.spinner, 'visible', '', show);
	},
	readyListener: function () {
		var Responder = this.transport;
		Responder.onreadystatechange = function () {
			if (Responder && Responder.readyState == 4 && Responder.status == 200) {
				try {
					eval(Responder.responseText);
					this.after.bind(this)(response);
				} catch (e) {
					this.after.bind(this)(Responder.responseText);
				}
			}
		}.bind(this);
	}
};

var RubricAJAX = {
	init: function () {
		Event.add(this.list_container, 'click', this.run.bind(this));
	},
	run: function (e) {
		e = Event.elementEqual(e, 'A');
		if (!e) { return false; }

		var url = e.href.match(/\/[^\/]+\/$/)[0];
		if (url == this.currentURL) { return; }

		for (var i = 0, l = this.listsArray.length; i < l; i++) {
			var a_links = $$(this.listsArray[i], 'A');
			for (var k = 0, ll = a_links.length; k < ll; k++) {
				var link = a_links[k];
				link.parentNode.className = (link.href == e.href) ? 'orng' : '';
			}
		}

		this.currentURL = url;
		this.url = url + 'index.json?view=rubric';
		this.go();
	},
	after: function (response) {
		if (response.url != this.currentURL) { return; }
		this.spinnerSH(0);
		this.t_container.innerHTML = response.title;
		this.container.innerHTML = response.html;
		this.link_container.href = response.url_all;
	}
};


/* other */
function switchActions (e, o) {
	e = Event.element(e);
	if (o) { e = o; }
	if (!e || e.tagName != 'LI') { return; }

	var id = e.className.match(/([^ ]+)/)[1];

	var oElement = $(id);
	
	if (typeof(hVisibleAction) == 'undefined') {
		hVisibleAction = {
			id: '',
			item: ''
		};
	}

	var current = (id == hVisibleAction.id);

	Object.Class.replace(hVisibleAction.item, '', 'visible', current);

	if (current) {
		Object.Class.replace($(hVisibleAction.id), 'visible', '');
	} else {
		Object.Class.add(e, 'visible');
		Object.Class.add(oElement, 'visible');
		if (hVisibleAction.item) {
			Object.Class.replace($(hVisibleAction.id), 'visible', '');
			Object.Class.replace(hVisibleAction.item, 'visible', '');
		}

	}

	hVisibleAction.id = current ? '' : id;
	hVisibleAction.item = current ? '' : e;
}


function switchMedia (e, c) {
	e = Event.element(e);

	if (!e || e.tagName != 'LI' || Object.Class.find(e, 'active') || e.href) { return; }

	var filters = $$(e.parentNode, 'LI');

	for (var i = 0, l = filters.length; i < l; i++) {
		Object.Class.replace(filters[i], 'active', '');
	}

	var sHiddenListID = e.className.replace(/\s/g, '');
	if (c) {
		carousel_media.switchMediaType(sHiddenListID);
	} else {
		c = $('media_container');
		sHiddenListID = 'r_m_hidden_' + sHiddenListID;
		if ($(sHiddenListID)) {
			c.innerHTML = $(sHiddenListID).innerHTML;
		}
	}
	Object.Class.add(e, 'active');
}

function switchFilters(e){
	e = Event.elementEqual(e, 'SPAN');
	if (!e || Object.Class.find(e.parentNode, 'active')) {
		return;
	}
	
	for (var i = 0, l = aFilters.length; i < l; i++) {
		aFilters[i].className = '';
	}
	
	Object.Class.add(e.parentNode, 'active');
	
	var sCurrentFilter = e.id.match(/f_(\w+)/)[1];
	
	for (i = 0, l = aList.length; i < l; i++) {
		var article = aList[i];
		var sClassName = article.className.match(/a_(\w+)/)[1];
		Object.Class.replace(article, 'invisible', '', (sCurrentFilter != 'all' && sClassName != 'all' && sClassName != sCurrentFilter));
	}
	
	if ($('ljcomments') && $('a_ljcomments')) {
	
	if (e.parentNode.id == 'ljcomments') {
		$('a_ljcomments').style.display = 'block';
	}
	else {
		$('a_ljcomments').style.display = 'none';
	}
}
}

function switchImportFilters (e) {
	e = Event.elementEqual(e, 'SPAN');
	if (!e || Object.Class.find(e.parentNode, 'active')) { return; }

	for (var i = 0, l = aFilters.length; i < l; i++) {
		aFilters[i].className = '';
	}

	Object.Class.add(e.parentNode, 'active');

	var aULs = $$(oContainer, 'UL');
	for (i = 0, l = aULs.length; i < l; i++) {
		var ul = aULs[i];
		if (Object.Class.find(ul, 'list')) {
			Object.Class.add(ul, 'invisible');
		}
	}

	var sCurrentFilter = e.id.match(/f_(\w+)/)[1];
	Object.Class.replace($('imp_' + sCurrentFilter), 'invisible', '');
}

function victorinaCheckSelected (e) {
	if (e) {
		e = Event.element(e);
		if (e.tagName == 'IMG') {
			e.parentNode.nextSibling.checked = true;
		}
	}

	var submit = $('form_submit');
	if (!submit.disabled) { return; }
	
	var aInputs = $$($('form_answers'), 'INPUT');
	for (var i = 0, l = aInputs.length; i < l; i++) {
		if (aInputs[i].checked) {
			submit.disabled = false;
			break;
		}
	}
}

function ListUpnDowner(settings) {
	this.hiddenClassName = 'hidden';
	this.blockId			 = (settings.blockId)? settings.blockId : null;
	this.visible_length		 = (settings.visible_length!=null)? settings.visible_length : 3;
	this.switchContainerView = (settings.switchContainerView!=null)? settings.switchContainerView : false;
	this.bottompos		= this.visible_length;

	this.rootBlock		= (this.blockId)?  document.getElementById(this.blockId+'_list') : null;
	this.plusBlock		= (this.blockId)?  document.getElementById(this.blockId+'_plus') : null;
	this.minusBlock		= (this.blockId)?  document.getElementById(this.blockId+'_minus') : null;
	this.count			= (this.rootBlock)? this.rootBlock.getElementsByTagName('li').length : null;

	/* Отображение контейнера	*/
	this.showContainer = function()	{
		if(this.switchContainerView && (this.rootBlock!=null))	{
			if(this.rootBlock.className=='hidden')	{ this.rootBlock.className=''; }
			else {this.rootBlock.className=this.rootBlock.className.replace(' hidden','');}
		}
	}

	/* Скрытие контейнера	*/
	this.hideContainer = function()	{
		if(this.switchContainerView && (this.rootBlock!=null))	{
			if(this.rootBlock.className==null)	{ this.rootBlock.className="hidden"; }
			else {
				var hiddenPattern = new RegExp("hidden");
				if(!hiddenPattern.test(this.rootBlock.className))	{ this.rootBlock.className=this.rootBlock.className + " hidden"; }
			}
		}
	}

	/* Отображение нового элемента в конце списка	*/
	this.showNextItem = function()	{
		/*	если нет отображаемых элементов, отображаем контейнер*/
		if(this.bottompos == 0)	{ this.showContainer();	}
		if(this.bottompos<this.count)	{
			var elements = this.rootBlock.getElementsByTagName('li');
			elements[this.bottompos].className = elements[this.bottompos].className.replace('hidden','');
			this.bottompos++;
		}
	},
	
	/*	Скрытие последнего элемента списка	*/
	this.hideLastItem = function()	{
		if(this.bottompos>this.visible_length)	{
			var elements = this.rootBlock.getElementsByTagName('li');
			elements[this.bottompos-1].className = elements[this.bottompos-1].className + 'hidden';
			this.bottompos--;
		}
		/*	если нет отображаемых элементов, прячем контейнер*/
		if(this.bottompos == 0)	{ this.hideContainer();	}		
	}
	
	if(this.plusBlock)	{ Event.add(this.plusBlock, 'click', this.showNextItem.bindAsEventListener(this, true)); }
	if(this.minusBlock)	{ Event.add(this.minusBlock, 'click', this.hideLastItem.bindAsEventListener(this, true)); }
	
}

function getBounds(element) {
	var left = element.offsetLeft;
	var top = element.offsetTop;
	for (var parent = element.offsetParent; parent; parent = parent.offsetParent) {
		left += parent.offsetLeft - parent.scrollLeft;
		top += parent.offsetTop - parent.scrollTop
	}
	return {left: left, top: top, width: element.offsetWidth, height: element.offsetHeight, bottom: top + element.offsetTop, right: left + element.offsetWidth };
}

function search(ctx, name, className) {
	name = name || '*';
	className = className || '';
	var elems = ctx.getElementsByTagName(name);
	if (!className) {
		if (elems.length == 1) {
			elems = elems[0];
		}
		return elems;
	} else {
		var ret = [];
		for (var i = 0, l = elems.length; i < l; i++) {
			var elem = elems[i]
			if (Object.Class.find(elem, className)) {
				ret.push(elem);
			}
		}
		if (ret.length == 1) {
			ret = ret[0];
		}
		return ret;
	}
}

//
function divshow(div) {
	if (document.getElementById(div).style.display == "block")
		{
			document.getElementById(div).style.display = "none";
		}
	else
		{
			document.getElementById(div).style.display = "block";
		}
	}
//
function opens (el_id)
    {
      el = document.getElementById(el_id);
      if (el)
        el.style.display = "block";
    }
    function closes (el_id)
    {
      el = document.getElementById(el_id);
      if (el)
        el.style.display = "none";
    }


//
function check_form(checkon) {
	var checkon=document.getElementById('check');
	document.getElementById('fip_send').disabled = !checkon.checked;
	}



//
function openbox(id){
    display = document.getElementById(id).style.display;
 
    if(display=='none'){
       document.getElementById(id).style.display='block';
    }else{
       document.getElementById(id).style.display='none';
    }
}

//
function formExtend (o, f) {
	var status = !Object.Class.find(o, 'on');
	Object.Class.replace(o, 'on', '', status);
	Object.Class.replace(f, 'visible', 'invisible', status);
	switchFieldsStatus(f, Object.Class.find(o, 'on'));
}

function switchFieldsStatus (f, st) {
	var types = ['input', 'select', 'textarea'];
	
	for (var i = 0; type = types[i]; i++) {
		var currItems = $$(f, type);
		for (var k = 0; field = currItems[k]; k++) {
			field.disabled = st ? false : true;
		}
	}
}

//
function allRub(o) {
	var inp = $$(o.parentNode.parentNode, 'input');
	for (var i=0; i<inp.length; i++) {
		inp[i].checked = o.checked;
	}
}
function checkAllRub(o) {
	var inp = $$($('item_0').parentNode.parentNode, 'input');
	var ch = true;
	for (var i=0; i<inp.length; i++) {
		if (inp[i].checked == false) {
			ch = false
		}
		$('item_0').checked = ch;
	}
}

//
function clearQuery() {
	if (document.forms[0].query.value == "Recherche") {
		document.forms[0].query.value = '';
    }
}

//
function add_favorite(a) {
  title=document.title;
  url=document.location;
  try {
    // ie
    window.external.AddFavorite(url, title);
  }
  catch (e) {
    try {
      // mozilla
      window.sidebar.addPanel(title, url, "");
    }
    catch (e) {
      // opera
      if (typeof(opera)=="object") {
        a.rel="sidebar";
        a.title=title;
        a.url=url;
        return true;
      }
      else {
        alert ('Нажмите Ctrl-D чтобы добавить страницу в закладки!');
      }
    }
  }
  return false;
}



//
function setHomepage()
{
document.body.style.behavior='url(#default#homepage)';
document.body.setHomePage('http://www.rian.ru/');
}

//






	
	
	


