eventHandler = function (e){	e = e ? e : window.event;	if (this.obj)	{		if (this.obj.blockEvent)		{			e = e ? e : window.event;			if (e.stopPropagation) e.stopPropagation();			else e.cancelBubble = true;			if (e.preventDefault) e.preventDefault();			else e.returnValue = false;		}		if (e)		{			this.obj.event = e;			this.handler();			if (this.clickCallback)			{				this.clickCallback(e);			}		}	}}/************************************************************Добавление новых функций для элемента$ - поиск элемента по idgetByClassName - поиск по названию классаgetByClassNameAndTagName - поиск по названию класса и названию тэгаhideElem - скрытие элемента немедленныйshowElem - показ элемента немедленныйtoggleElem - скрытие показ в зависимости от текущего состояния************************************************************/ExtendElem = function (hideClass){	this.hiddenClassName = hideClass.split('|')[0];	this.visibleClassName = hideClass.split('|')[1];	this.allElems = document.getElementsByTagName('*');	this.$ = function (id)	{		return document.getElementById(id) || false;	}	this.getByClassName = function (className, parent)	{		var parent = parent ? parent : this.allElems;		var result = new Array();		for (var i = 0; i < parent.length; i++)		{			if (parent[i].className.search(className) > -1)			{				result.push(parent[i]);			}		}		return result;	}	this.getByClassNameAndTagName = function (className, tagName, parent)	{		var parent = parent ? parent : this.allElems;		var result = new Array();		var parent = this.getByClassName(className, parent);		for (var i = 0; i < parent.length; i++)		{			if (parent[i].tagName == tagName)			{				result.push(parent[i]);			}		}		return result;	}	this.checkStatus = function ()	{		return this.className.search(this.ee.visibleClassName) > -1;	}	this.hideElem = function ()	{		this.className = this.className.replace(this.ee.visibleClassName, this.ee.hiddenClassName);		return true;	}	this.showElem = function ()	{		this.className = this.className.replace(this.ee.hiddenClassName, this.ee.visibleClassName);		if (this.focusElem)		{			this.focusElem.focus();		}		return true;	}	this.toggleElem = function ()	{		this.checkStatus() ? this.hide() : this.show();		return true;	}	this.add = function (elem)	{		elem.ee = this;		elem.hide = this.hideElem;		elem.show = this.showElem;		elem.toggle = this.toggleElem;		elem.checkStatus = this.checkStatus;	}}/************************************************************Выключатель с двумя и более активными элементами.Включатель и выключатель раздельные.Выключателей и включателей может быть какой угодно количество, активный элемент только один.Парамметры:blockClassName - имя класса открываемого блока (уникальное или берется первый найденный)openClassName - имя класса всех открывашекcloseClassName - имя класса для все закрывашекhideClass - названия классов для скрытия и показа блока в формате: скрыт|показанopenAsClose - открывашка при повторном клике закроетcloseAsOpen - закрывашка при повторном клике откроет************************************************************/BlockToggler = function (blockClassName, openClassName, closeClassName, hideClass, openAsClose, closeAsOpen, blockEvent){	this.blockClassName = blockClassName;	this.blockElem = new Array();	this.openClassName = openClassName;	this.openElems = new Array();	this.closeClassName = closeClassName;	this.closeElems = new Array();	this.event = false;	this.openAsClose = openAsClose;	this.closeAsOpen = closeAsOpen;	this.ee = new ExtendElem(hideClass);	this.blockEvent = blockEvent;	this.openBlock = function ()	{		this.obj.blockElem.show();	}	this.toggleBlock = function ()	{		this.obj.blockElem.toggle();	}	this.closeBlock = function ()	{		this.obj.blockElem.hide();	}	this.prepare = function ()	{		if (this.blockClassName)		{			this.blockElem = this.ee.getByClassName(this.blockClassName, false);		}		if (this.openClassName)		{			this.openElems = this.ee.getByClassName(this.openClassName, false);		}		if (this.closeClassName)		{			this.closeElems = this.ee.getByClassName(this.closeClassName, false);		}		if (this.blockElem.length)		{			/* берем первый элемент */			this.blockElem = this.blockElem[0];			this.blockElem.obj = this;			this.ee.add(this.blockElem);			for (var i = 0; i < this.openElems.length; i++)			{				this.openElems[i].obj = this;				if (this.openAsClose)				{					this.openElems[i].handler = this.toggleBlock;				}				else				{					this.openElems[i].handler = this.openBlock;				}				this.openElems[i].onclick = eventHandler;			}			for (var i = 0; i < this.closeElems.length; i++)			{				this.closeElems[i].obj = this;				if (this.closeAsOpen)				{					this.closeElems[i].handler = this.toggleBlock;				}				else				{					this.closeElems[i].handler = this.closeBlock;				}				this.closeElems[i].onclick = eventHandler;			}		}	}	this.prepare();}/***************************************************************example:classNameRule = 'PrefixRoleId'or:classNameRule = 'RolePrefixId'prefix - та часть которая всех объединяетrole - роль элемента, например toggler или block (переключатель или переключаемый блок)id - та часть которая объединяет переключатель и блок***************************************************************/radioToggler = function (prefix, activeElemRole, passiveElemRole, classNameRule, hideClass, openAsClose, blockEvent){	this.ee = new ExtendElem(hideClass);	this.prefix = prefix;	this.activeElemRole = activeElemRole;	this.passiveElemRole = passiveElemRole;	this.classNameRule = classNameRule;	this.openAsClose = openAsClose;	this.activeElems = new Array();	this.passiveElems = new Array();	this.blockEvent = blockEvent;		this.makeClassName = function (active, id)	{		var role = active ? this.activeElemRole : this.passiveElemRole;		return this.classNameRule.replace('Prefix', this.prefix).replace('Role', role).replace('Id', id);	}	this.getElemId = function (elem)	{		var classes = elem.className.split(' ');		for (var i = 0; i < classes.length; i++)		{			if (classes[i].search(this.prefix) > -1)			{				var className = classes[i];				if (classes[i].search(this.activeElemRole) > -1)				{					var role = this.activeElemRole;					break;				}				else (classes[i].search(this.passiveElemRole) > -1)				{					var role = this.passiveElemRole;					break;				}			}		}		return className.replace(this.prefix, '').replace(role, '');	}	this.toggleElem = function (elem, className)	{		// проверяем на сходство с текущим переключателем для активизации		if (elem.className.search(className) > -1)		{			// Смотрим активен ли сейчас текущий элемент			if (elem.checkStatus())			{				// если элемент и так показан, то при наличие openAsClose его нужно скрыть				if (this.openAsClose)				{					elem.hide();				}			}			// не активен - показываем			else			{				elem.show();			}		}		// не совпал, прячем если активен		else		{			if (elem.checkStatus())			{				elem.hide();			}		}	}	this.toggleRadio = function ()	{		if (this.tagName != 'SELECT')		{			var id = this.obj.getElemId(this);		}		else		{			var id = this.value;		}				if (this.obj.clickCallback)		{			this.obj.clickCallback(id);		}				var activeClassName = this.obj.makeClassName(true, id);		var passiveClassName = this.obj.makeClassName(false, id);		for (var i = 0; i < this.obj.activeElems.length; i++)		{			this.obj.toggleElem(this.obj.activeElems[i], activeClassName);		}				for (var i = 0; i < this.obj.passiveElems.length; i++)		{			this.obj.toggleElem(this.obj.passiveElems[i], passiveClassName);		}	}	this.prepare = function ()	{		var activeClassName = this.makeClassName(true, '');		var passiveClassName = this.makeClassName(false, '');		this.activeElems = this.ee.getByClassName(activeClassName);		this.passiveElems = this.ee.getByClassName(passiveClassName);		for (var i = 0; i < this.activeElems.length; i++)		{			this.activeElems[i].obj = this;			this.ee.add(this.activeElems[i]);			this.activeElems[i].handler = this.toggleRadio;			if (this.activeElems[i].type == 'checkbox' && 0)			{				if (this.activeElems[i].onchange)				{					this.activeElems[i].changeCallback = this.activeElems[i].onchange;				}				this.activeElems[i].onchange = eventHandler			}			else			{				if (this.activeElems[i].onclick)				{					this.activeElems[i].clickCallback = this.activeElems[i].onclick;				}				this.activeElems[i].onclick = eventHandler;			}		}		for (var i = 0; i < this.passiveElems.length; i++)		{			this.passiveElems[i].obj = this;			this.ee.add(this.passiveElems[i]);		}	}	this.prepare();}/************************************** Скрипт изменения телефона в шапке************************************/function addEvent(elem, evType, fn) {	if (elem.addEventListener) {		elem.addEventListener(evType, fn, false)		return fn	}	iefn = function() { fn.call(elem) } 	elem.attachEvent('on' + evType, iefn)	return iefn}function getCookie( name ) {	var start = document.cookie.indexOf( name + '=' );	var len = start + name.length + 1;	if ( ( !start ) && ( name != document.cookie.substring( 0, name.length ) ) ) {		return null;	}	if ( start == -1 ) return null;	var end = document.cookie.indexOf( ';', len );	if ( end == -1 ) end = document.cookie.length;	return unescape( document.cookie.substring( len, end ) );}	function setCookie( name, value, expires, path, domain, secure ) {	var today = new Date();	today.setTime( today.getTime() );	if ( expires ) {		expires = expires * 1000 * 60 * 60 * 24;	}	var expires_date = new Date( today.getTime() + (expires) );	document.cookie = name+'='+escape( value ) +		( ( expires ) ? ';expires='+expires_date.toGMTString() : '' ) +//expires.toGMTString()		( ( path ) ? ';path=' + path : '' ) +		( ( domain ) ? ';domain=' + domain : '' ) +		( ( secure ) ? ';secure' : '' );}var changeElementCollectionDd;function changeElement() {	var elementLink = this.getAttribute("elem");	var temp = changeElementCollectionDd[elementLink].innerHTML.match(/(\d+(\-\d+)*)/g);	setCookie("phone", temp[1], "", "/", "", "");	setCookie("code", temp[0], "", "/", "", "");	var changeElementCollection = document.getElementsByTagName("div");	for (i = 0; i < changeElementCollection.length; i++) {		if (changeElementCollection[i].className == "phone") {			changeElementCollection[i].getElementsByTagName("span")[0].innerHTML = "("+getCookie("code")+")";			changeElementCollection[i].getElementsByTagName("b")[0].innerHTML = getCookie("phone");		}		if (changeElementCollection[i].className == "select-city-form selectcity-controled activeElem") {			changeElementCollection[i].className = "select-city-form selectcity-controled passiveElem";		}	}	return false;}onload = function () {	var changeElementCollection = document.getElementsByTagName("div");	for (i = 0; i < changeElementCollection.length; i++) {		if (changeElementCollection[i].className == "select-city-form selectcity-controled passiveElem") {			var changeElementCollectionDt = changeElementCollection[i].getElementsByTagName("dt");			changeElementCollectionDd = changeElementCollection[i].getElementsByTagName("dd");		}				if (changeElementCollection[i].className == "phone" && getCookie("code") && getCookie("phone")) {			changeElementCollection[i].getElementsByTagName("span")[0].innerHTML = "("+getCookie("code")+")";			changeElementCollection[i].getElementsByTagName("b")[0].innerHTML = getCookie("phone");		}			}	for (i = 0; i < changeElementCollectionDt.length; i++) {		changeElementCollectionDt[i].getElementsByTagName("a")[0].setAttribute("elem", i);		addEvent(changeElementCollectionDt[i].getElementsByTagName("a")[0],'click',changeElement);	}	return changeElementCollectionDd;}
