/* Global window events
===================================== */
	var GLOBAL_EVENTS={
		$onload:new Array(),
		$onresize:new Array(),
		onloadExecute:function(){
			var eData=this.eData
			for (var fNum in eData.$onload){
					var fName=eData.$onload[fNum]
					fName.call(this)
				}

			},
		onresizeExecute:function(){
			var eData=this.eData
			for (var fNum in eData.$onresize){
					var fName=eData.$onresize[fNum]
					fName.call(this)

				}

			},

		append:function(eventType,fName){
			if (!eventType || !this["$"+eventType]) return false
			this["$"+eventType].push(fName)
			return false
			},
		ready:function(){
			window.eData=this
			window.onresize=this.onresizeExecute
			window.onload=this.onloadExecute
		}
	}
	//GLOBAL_EVENTS.ready()

/* Unset "focus" for handmade buttons
===================================== */
	function unsetFocusButtons(){
		var btns=getElementsByTagAndClass(document.body,"DIV","button")
			for (var i=0; i<btns.length; i++){
				var btn=$tagname("BUTTON",btns[i])
				if (btn)
					btn.onfocus=function(){this.blur()}

				}

		}
	//GLOBAL_EVENTS.append("onload",unsetFocusButtons)
		EVENTS.append(window,"onload",unsetFocusButtons)

/* Displaying page
====================================*/
	function TriDorogiPageBase(){
		this.displayPage=function(content,title,caption){
			var contentContainer=this.getContentContainer();
			if (isset(content)){
				this.setContent(content);
				}
			if (title && !caption){
				caption=title;
				}
			if (caption){
				this.setCaption(caption);
				}
			if (title){
				this.setTitle(title);
				}
			return true;
			}

		this.setContent=function(content){
			return $innerHTML(this.getContentContainer(),content+'<span class="clear0"></span>');
			}
		this.setCaption=function(caption){
			return $innerHTML(this.getCaptionContainer(),caption);
			}
		this.setTitle=function(title){
			return document.title=title.html_entity_decode()+' | Три Дороги';
			}

		this.redirect=function(page){
			if(!page) page="/";
			if (page.search(/^http\:\/\//i)<0){
				if (page.substr(0,1)!='/')
					page="/"+page;
				page=SITE_URL+page;
				}
			window.location=page;
			return false;
			}

		this.getContentContainer=function(){
			return $id('content');
			}
		this.getMainWrapContainer=function(){
			return $id('body-wrap');
			}
		this.getCaptionContainer=function(){
			return $tagname("H1",$id("caption"));
			}

		this.refresh=function(){
			window.location.reload(false);
			}

		//Support killing registered elements when on document clicking
		this.registerBlurKilled=function(el,funcs){
			el=$id(el);
			if (!el){
				return false;
				}
			EVENTS.append(el,'onclick',stopEventBubble);
			//EVENTS.append(el,'onclick',arrestEvent);

			/* Functions to run when killing */
			if (!el._toArrestEventFunctions){
				el._toArrestEventFunctions=[];
				}
			if (funcs){
				if (!funcs.length){
					el._toArrestEventFunctions.push(funcs);
					}
				else{
					el._toArrestEventFunctions=el._toArrestEventFunctions.concat(funcs);
					}
				}
			this.targetsToKillByBlur.push(el);
			return this.targetsToKillByBlur.length;
			}

		this.registerBlurFunction=function(func){
			if (is_function(func)){
				this.blurFunctions.push(func);
				}
			}

		this.prepareHash=function(h){
			var strHash='';
			if (is_object(h)){
				var arHash=[];
				for (var pName in h){
					if ((is_string(h[pName]) || is_numeric(h[pName])) && typeof(h)!='undefined'){
						arHash.push(pName+'='+String(h[pName]));
						}
					}
				strHash=arHash.join('&');
				}
			else if (is_string(h)){
				strHash=h;
				}
			else{
				return false;
				}
			return strHash;
			}
		this.setHash=function(h){
			var strHash=this.prepareHash(h);
			if (strHash){
				location.hash=strHash;
				}
			}


		this.GET={};
		this.parseHash=function(){
			var
				h=decodeURI(location.hash),
				params={};
			if (!isset(h) || h==''){
				return false;
				}
			h=h.substr(1);
			var arHash=h.split('&');
			for (var i in arHash){
				if (!is_string(arHash[i])){
					continue;
					}
				var p=arHash[i].split('=');
				if (!p.length || p.length<2){
					continue;
					}
				params[p[0]]=p[1];
				}
			this.$GET=params;
			return params;
			}

		
		this.isTestenv = function(){
			return !!window['gTestenv'];
			}
			
		var
			$this=this,
			initialize=function(){
				$this.targetsToKillByBlur=[];
				$this.blurFunctions=[];
				EVENTS.append(
					window,
					'onload',
					function(){
						$this.parseHash();
						EVENTS.append(
							document.body,
							'onclick',
							function(e){
								var guarded=[];
								if (window.eventArrested && window.eventArrested.length){
									for (var i=0; i<window.eventArrested.length; i++){
										var el=window.eventArrested[i];
										if (el._toArrestEventElements && el._toArrestEventElements.length){
											for (var j=0; j<el._toArrestEventElements.length; j++){
												//toggleClass(el._toArrestEventElements[j],1);
												guarded.push(el._toArrestEventElements[j]);
												}
											}
										//toggleClass(el,1);
										}
									guarded=guarded.concat(guarded,window.eventArrested);
									window.eventArrested=[];
									}
								for (var i=0; i<$this.blurFunctions.length; i++){
									($this.blurFunctions[i])();
									}
								for (var i=0; i<$this.targetsToKillByBlur.length; i++){
									var el=$this.targetsToKillByBlur[i];
									if (!in_array(guarded,el)){
										if ($displaying(el) && el._toArrestEventFunctions && el._toArrestEventFunctions.length){
											for (var j=0; j<el._toArrestEventFunctions.length; j++){
												var func=el._toArrestEventFunctions[j];
												if (is_function(func)){
													func.call(el);
													}
												}
											}
										toggleClass(el,0);
										}
									}
								}
							);
						}
					);
				}

		initialize();
		}

	var TriDorogiPage=new TriDorogiPageBase();

$(function(){
		
		/* My routes */
		;(function(){
			var
				/** @type {jQuery} */
				$myRoutesLink = $('#my-routes-link'),
				/** @type {jQuery} */
				$btn = $('<a class="dropdown-btn"><span>(список)</span></a>'),
				/** 
				 * Dropdown body
				 * @type {jQuery} */
				$dd,
				/** @type {jQuery} */
				$ddContent,
				/** @type {jQuery} */
				$closeBtn,
				isVisible = false,
				loaded = false,
				show = function(){
					if (!$dd){
						$dd = $([
							'<div class="dropdown">',
								'<div class="dropdown-content">',
									'<span class="loading">Загрузка...</span>',
								'</div>',
								'<span class="close-btn">Закрыть</span>',
								'<a href="/routes/" class="fulllist-btn">Полный список</a>',
							'</div>'].join(''))
							.css({
								position:	'absolute',
								zIndex:		10000,
								width:		300,
								height:		350,
								top:		-350,
								left:		$btn.offset().left - 200
								})
							.appendTo(document.body);
						$ddContent = $dd.find('>div.dropdown-content');
						$closeBtn = $dd.find('>span.close-btn')
							.click(function(){
								hide();
								return false;
								})
						}
//					$dd.show();
					$dd.hide().css({top:45});
					$dd.slideDown();
					if (!loaded){
						$.request({
							type: 'GET',
							url: '/routes',
							data:{
								view: 'list'
								},
							quite:true,
							success:function(res){
								if (res && res._html){
									$ddContent.html(res._html)
									}
								}
							});
						loaded = true;
						}
					isVisible = true;
					},
				hide = function(){
					if ($dd){
						$dd.slideUp('fast');
						/* $dd.animate(
						{
							top: -350
							}, 
						'fast', 
						function(){
							$dd.hide();						
							}); */
						}
					isVisible = false;
					};
			if (!USER_DATA || !USER_DATA.id || !$myRoutesLink || !$myRoutesLink.length){
				return false;
				}
			$myRoutesLink.after($btn);
			$btn.click(function(){
				if (isVisible){
					hide();
					}
				else{
					show();
					}
				});
			})();	
	
		/* Auth window */
		;(function(){
			var
				/** @type {jQuery} */
				$btnContainer = $('#personal-userlogin-link'),
				/** @type {jQuery} */
				$authBody = $('#auth'),
				/** @type {jQuery} */
				$closeLink = $('#close-auth-link'),
				/** @type {jQuery} */
				$login = $('#lgn'),
				authBodyVisible=false,
				setEvents=function(){
					$id('close-auth-link').onclick=function(){
						slideUp(
							authBody,
							{
								speed:60,
								oncomplete:function(){
									toggleClass(authBody,0,['passive','active']);
									}
								}
							);
						return false;
						}
					doOnLoadAuth();
					},
				open = function(){
					$('html')
						.animate({ scrollTop: 0 }, 'fast', function(){
							$authBody
								.css({
									top: - $authBody.outerHeight()
									})
								.removeClass('passive')
								.animate({top: 0}, 'fast', function(){
									$login.focus();
									});
							});
					authBodyVisible = true;
					},
				close = function(){
					var top = - $authBody.outerHeight();
					$authBody.animate({
						top: top
						}, 'fast', function(){
							$authBody.addClass('passive');						
							});
					authBodyVisible = false;
					};
			$('#personal-userlogin-link,A.auth-open').click(function(){
				if (!authBodyVisible){
					open();
					}
				else{
					close();
					}
				});
			$closeLink.click(close);
			})();
		
			
		/* Checking messages */
		;(function(){
			
			var
				CHECKING_NEW_MESSAGES_INTERVAL=30000,
				MAX_MESSAGE_ANNOUNCE_LENGTH=50;
			
			/* Temp */
			if (!$id('newMessagesCount') || TriDorogiPage.isTestenv()){
				return false;
				}
			/* /Temp */
			var
				numberContainer=$tagname('STRONG','newMessagesCount'),
				offsetTotalNewMessagesCount=function(offset){
					setStyle('newMessagesCount',{display:'inline'});
					$innerHTML(numberContainer,Number($innerHTML(numberContainer))+offset);
					};
	
	
			/* Preparing msg-announce container */
	
			var
				msgAnnounceContainer=setChildExt(
					{
						id:'msgAnnounceContainer',
						className:'iAnnounce',
						child:{
							className:'iAnnounce-core',
							children:[
								{
									id:'msgAnnounceContent',
									className:'cnt'
									},
								{
									tag:'A',
									className:'btn-close hidden',
									id:'msgAnnounceContainerBtnClose',
									content:'Закрыть'
									}
								]
							},
						params:{
							isActive:false
							},
						style:{
							top:0,
							left:-3000
							},
						handlerFunction:function(el){
							EVENTS.append(
								window,
								'onresize',
								function(){
									if ($id('msgAnnounceContainer') && $id('msgAnnounceContainer').isActive){
										placeMsgAnnounceContainer();
										}
									}
								);
							}
						}
					),
				placeMsgAnnounceContainer=function(hide){
					if (!msgAnnounceContainer){
						return false;
						}
					var
						pos=getWhereIs('head-core'),
						//left=310;
						left=pos.right-msgAnnounceContainer.offsetWidth-3;
					setStyle(
						msgAnnounceContainer,
						{
							left:left,
							top:0,
							display:hide?'none':'block'
							}
						);
					msgAnnounceContainer.isActive=true;
					},
				hideMsgAnnounceContainer=function(){
					if (!msgAnnounceContainer){
						return false;
						}
					slideUp(
						msgAnnounceContainer,
						{
							speed:15,
							oncomplete:function(el){
								setStyle(
									el,
									{
										display:'block',
										left:-3000
										}
									);
								}
							}
						)
					msgAnnounceContainer.isActive=false;
					},
				displayNewMessage=function(res){
					if (!res || !res.msg){
						return false;
						}
					$clear('msgAnnounceContent');
						setChildExt(
							{
								parent:'msgAnnounceContent',
								children:[
									{
										tag:'H3',
										content:'Получено новое сообщение от&nbsp;пользователя '+getUserLink(res.fromUserLogin)
										},
									{
										className:'msg-announce',
										content:res.msg.trim(MAX_MESSAGE_ANNOUNCE_LENGTH)
										},
									{
										tag:'A',
										className:'more-link',
										params:{
											href:PATH_MESSAGES_INBOX+'#message_'+res.id
											},
										content:'Читать дальше'
										}
									]
								}
							);
					placeMsgAnnounceContainer(true);
					slideDown(
						msgAnnounceContainer,
						{
							speed:15,
							oncomplete:function(){
								$id('msgAnnounceContainerBtnClose').onclick=function(){
										toggleClass(this,0);
										hideMsgAnnounceContainer();
										return false;
										}
								toggleClass('msgAnnounceContainerBtnClose',1);
								}
							}
						);
					};
			var
				maxCheckCount=1000,
				checkCount=0,
				_lastDt=(new Date()).toDT();
	
	
			var checkingInterval=setInterval(
				function(){
					if (++checkCount>maxCheckCount){
						clearInterval(checkingInterval);
						return false;
						}
					makeAjaxExt(
						{
							params:{
								todo:'checkNewMessages',
								dt:_lastDt
								},
							onload:function(res){
	
								if (res && res.length){
									offsetTotalNewMessagesCount(res.length);
									var lastMsg=res.pop();
									if (lastMsg.id){
										displayNewMessage(lastMsg);
										}
									_lastDt=(new Date()).toDT();
									return false;
									}
								}
							}
						);
					}
				,CHECKING_NEW_MESSAGES_INTERVAL
				);
			})();	
	
		
		/* User thumbs hovers */
		;(function(){
			var 
				/** @type {jQuery} */
				$tip,
				/** @type {jQuery} */
				$thumbInTip,
				/** @type {jQuery} */
				$contentInTip,
				onThumb = false,
				onTip = false,
				hideTip = function(){
					if (!onThumb && !onTip){
						$tip.hide();
						}
					},
				isMe = false,
				delay = 50;
			$(document.body).delegate('a.thumb-hover', 'hover', function(/* Event */e){
				var 
					/** @type {jQuery} */
					$thumb = $(this),
					$imgThumb,
					$imgTip,
					login,
					href,
					srcp;
				if (!$tip){
					$tip = $([
						'<span class="thumb-tip cleared">',
							'<a class="thumb-in-tip"></a>',
							'<span class="content-in-tip"></span>',
						'</span>'].join(''))
						.hover(
							function(){
								onTip = true
								}, 
							function(){
								onTip = false;
								setTimeout(hideTip, delay);
								}
							)
						.appendTo(document.body);
					$thumbInTip = $tip.find('>a.thumb-in-tip');
					$contentInTip = $tip.find('>span.content-in-tip');
					}
				if (e.type == 'mouseover'){
					$imgThumb = $thumb.find('img:first');
					$imgTip = $imgThumb.clone()
						.width($imgThumb.width()) 
						.appendTo($thumbInTip.html('<span></span>'));
					srcp = $imgThumb.attr('src').toString().split('/');
					login = srcp[2];
					$tip.css($thumb.offset()).show();
					href = $thumb.attr('href');
					
					isMe = !!(window['USER_DATA'] && USER_DATA.login && USER_DATA.login == login);
					
					$thumbInTip
						.attr('href', href)
						.toggleClass('user-online', $thumb.hasClass('user-online'));
					$contentInTip.html([
						'<a href="' , href , '" class="content-in-tip-login">' , 
							login , 
							'<span></span>',
						'</a>',
						'<ul class="content-in-tip-links">',
							'<li><a href="/users/', login , '/auto">Автомобиль</a></li>',
							'<li><a href="/users/', login , '/photo">Фотографии</a></li>',
							'<li><a href="/users/', login , '/routes">Маршруты</a></li>',
							(isMe
								? '<li class="distant"><strong class="content-in-tip-me">Это вы!</strong></li>'
								: [
									'<li class="distant func"><a href="/users/', login , '/message">Отправить сообщение</a></li>',
									'<li class="func"><a href="/users/', login , '/abuse">Пожаловаться</a></li>'
									].join('')
								),
						'</ul>'].join(''));
					}
				else if (e.type == 'mouseout'){
					onTip = false;
					setTimeout(hideTip, delay);
					}
				})
			})();
	
	});


/* User
====================================*/
	function getUserLink(userLogin){
		if (!userLogin){
			return "";
			}
		return '<a href="'+PATH_USERS+userLogin+'/" class="user-link">'+userLogin+'</a>';
		}
	function getUserThumb(userLogin, isOnline){
		if (!userLogin){
			return "";
			}
		return ['<a href="', PATH_USERS, userLogin, '/" class="thumb' , ( isOnline ? ' user-online' : '' )  , '"><img src="', PATH_USERS, userLogin, '/photo/thumb/" alt="', userLogin, '" class="" width="', USER_THUMB_VIEW_WIDTH, '" height="', USER_THUMB_VIEW_HEIGHT, '"/><span></span></a>'].join('');
		}

/* Extension select
================================================*/
function ExtSelect(data){
	this.data={
		itemName:'city',
		perpage:30,
		pagerWing:3,
		pagerAtBottom:false,
		pagerAtTop:true
		};
	this.itemsData={
		city:{
			title:'Выбор населённого пункта'
			},
		street:{
			title:'Выбор улицы'
			},
		subway:{
			title:'Выбор станции метро'
			}
		};
	this.setData(data);
	}

ExtSelect.prototype={
	render:function(){
		try{
			this.setData(this.itemsData[this.getData('itemName')]);
			}
		catch(e){
			return false;
			}
		this.build();
		this.refreshList(null,this.getData('extData'));

		return false;
		},

	refreshList:function(targetContainer,extData){
		var m;
		if (method_exists(this,m='refreshList_'+this.getData('itemName'))){
			return this[m](targetContainer,extData);
			}
		else{
			return this.refreshList_default(targetContainer,extData);
			}
		},

	refreshList_default:function(targetContainer,extData){
		targetContainer=$id(targetContainer);
		var
			$this=this,
			listContainer=targetContainer||this.getData('listContainer'),
			reqData=concatObjects(
				(is_object(extData)?extData:{}),
				{
					todo:'extSelect',
					itemName:this.getData('itemName'),
					perpage:this.getData('perpage'),
					allResults:false,
					perpage:50
					}
				);
		this.blockList();
		makeAjaxExt(
			{
				params:reqData,
				notCache:false,
				onload:function(res){
					$this.unBlockList();
					$clear(listContainer);
					if (!res || !res.items || !res.items.length){
						return false;
						}
					var
						items=res.items,
						children=[];


					/* displaying pager if its need to */
					if (Number(res.total)>0 && Number(res.page)>0 && Number(res.perpage)>0){
						var pagerSettings={
								page:res.page,
								perpage:res.perpage,
								total:res.total,
								wing:$this.getData('pagerWing'),
								onclick:function(page){
									$this.refreshList_default(
											listContainer,
											concatObjects(
												{
													page:page
													},
												reqData
												)
											);
									return;
									}
								};

						}
					if ($this.getData('pagerAtTop') && pagerSettings){
						listContainer.appendChild(getPager(pagerSettings));
						}
					var lc=setChildExt(
						{
							parent:listContainer,
							tag:'UL'
							}
						);

					/* displaying items */
					for (var i=0;i<items.length;i++){
						var item=items[i];
						if (!item.name_full){
							continue;
							}
						var parts=item.name_full.split(',');
						if (parts.length>=3){
							parts.splice(1,1);
							item.name_full=parts.join(',');
							}
						var li=setChildExt(
							{
								parent:lc,
								tag:'LI',
								className:((i%2)?'even':'odd') + (+item.hasChildren ? ' has-children' : ''),
								child:{
									tag:'A',
									onfocus:selfBlur,
									params:{
										href:'#',
										item:item,
										childrenContainer:null,
										page:!isNaN(items.page)?items.page:1
										},
									content:item.name_full,
									onclick:function(){
										if (this.childrenContainer){
											toggleClass(this.childrenContainer);
											toggleClass(this.parentNode,null,['opened','closed']);
											}
										else{
											if (+this.item.hasChildren){
												$this.refreshList(
													this.childrenContainer=setChildExt(
														{
															parent:this.parentNode,
															className:'children-container'
															}
														),
													concatObjects(
														this.item,
														{
															allResults:false
															}
														)
													);
												toggleClass(this.parentNode,1,['closed','opened']);
												}
											else{
												$this.selectItem(this.item);
												}
											}
										return false;
										}
									}
								}
							);
						}

					if ($this.getData('pagerAtBottom') && pagerSettings){
						listContainer.appendChild(getPager(concatObjects(pagerSettings,{addClass:'pager-bottom'})));
						}
					}
				}
			);
		},

	selectItem:function(item){
		var onresult=this.getData('onresult');
		if (is_function(onresult)){
			onresult(item);
			}
		this.kill();
		},

	build:function(){
		blockScreen();
		var
			$this=this,
			container=setChildExt(
				{
					id:'ext-select',
					className:'ext-select',
					children:[
						{
							tag:'H3',
							content:this.getData('title'),
							onmousedown:function(e){
								$drag(e,this,'ext-select')
								}
							},
						{
							className:'ext-select-body',
							children:[
								{
									id:'ext-select-list',
									className:'ext-select-list'
									},
								{
									className:'submit centered distant',
									child:{
										className:'button wide4',
										child:{
											tag:'BUTTON',
											child:{
												tag:'SPAN',
												content:'Отмена'
												},
											onfocus:selfBlur,
											onclick:function(){
												$this.kill();
												}
											}
										}
									},
								{
									className:'ext-select-blocking',
									id:'ext-select-blocking',
									child:{
										tag:'SPAN',
										content:'Загрузка'
										}
									}
								]
							}
						],
					handlerFunction:function(el){
						putInScreenCenter(el,true);
						}
					}
				);
		this.setData('container',container);
		this.setData('listContainer',$id('ext-select-list'));
		},

	kill:function(){
		unsetChild(this.getData('container'));
		unblockScreen();
		},

	blockList:function(state){
		if (!isset(state)){
			state=1;
			}
		toggleClass('ext-select-blocking',(state?1:0),['blocking-off','blocking-on']);
		/* if (state){
			var pos=getWhereIs('ext-select-list');
			setStyle(
				'ext-select-blocking',
				{top:pos.top}
				)
			} */
		},
	unBlockList:function(){
		toggleClass('ext-select-blocking',0,['blocking-off','blocking-on']);
		},

	getData:function(property){
		if (property){
			return this.data[property];
			}
		else{
			return this.data;
			}
		},

	setData:function(data,val){
		if (!data){
			return false;
			}
		if (typeof data=='object'){
			for (var opt in data){
				this.data[opt]=data[opt];
				}
			}
		else{
			this.data[data]=val;
			}
		return this.data;
		}
	}

function makeExtSelect(settings){
	var es=new ExtSelect();
	es.setData(settings);
	es.render();
	}

function getPager(settings){
	settings=concatObjects(
		settings,
		{
			page:1,
			perpage:10,
			wing:5,
			total:10,
			leftArrow:'<em>&lt;</em>',
			rightArrow:'<em>&gt;</em>',
			leftSideArrow:'<em>&lt;&lt;</em>',
			rightSideArrow:'<em>&gt;&gt;</em>',
			displaySideArrows:true,
			output:'dom',
			onclick:function(){return false;},
			baseLink:'',
			addClass:''
			}
		);
	var
		totalPages=Math.ceil(Number(settings.total)/Number(settings.perpage)),
		startPage=Math.max(Number(settings.page)-Number(settings.wing),1),
		finishPage=Math.min(Number(settings.page)+Number(settings.wing),totalPages),
		getChild=function(content,num,onclick,isAccent,href){
			return {
				tag:'LI',
				child:
					isAccent?
					{
						tag:'STRONG',
						content:content
						}
					:
					{
						tag:'A',
						onclick:function(){
							onclick(num);
							return false;
							},
						params:{
							href:href||'#'
							},
						content:content
						}
				};
			},
		getChildren=function(){
			var children=[];
				if (startPage>1){
					if (settings.displaySideArrows && startPage>2){
						children.push( getChild(settings.leftSideArrow,1,settings.onclick,false,settings.baseLink) );
						}
					children.push( getChild(settings.leftArrow,startPage-1,settings.onclick,false,settings.baseLink) );
					}

				for (var i=startPage;i<=finishPage;i++){
					children.push( getChild(i,i,settings.onclick,(i==settings.page),settings.baseLink) );
					}
				if (finishPage<totalPages){
					children.push( getChild(settings.rightArrow,finishPage+1,settings.onclick,false,settings.baseLink) );
					if (settings.displaySideArrows && (finishPage+1)<totalPages){
						children.push( getChild(settings.rightSideArrow,totalPages,settings.onclick,false,settings.baseLink) );
						}
					}
				return children;
			},
		pager=setChildExt(
			{
				setType:'noAppend',
				className:'pager '+settings.addClass,
				children:
					finishPage>startPage?
					[
					 	{
							tag:'SPAN',
							className:'caption',
							content:'Страницы:'
							},
						{
							tag:'UL',
							className:'pager',
							children:getChildren()
							},
						clearNode
						]
					:
					null
				}
			);
	return pager;
	}

/* Collapsing list
================================================*/
EVENTS.append(
	window,
	'onload',
	function(){
		var lists=getElementsByTagAndClass(document.body,'DL','collapsed');
		for (var i=0; i<lists.length; i++){
			var list=lists[i];
			var dts=$tag('DT',list);
			for (var j=0;j<dts.length;j++){
				var
					dt=dts[j],
					a=$tag('A',dt)[0];
				if (!a){
					continue;
					}
				a.dd=$id(a.href.split('#').pop());
				var slideSettings={speed:80};
				a.onclick=function(){
					if ($displaying(this.dd)){
						slideUp(this.dd,slideSettings);
						}
					else{
						slideDown(this.dd,slideSettings);
						}
					return false;
					}
				toggleClass(a.dd,0);
				}
			}
		}
	);

	
var GlobalListener={};
(function(){
	var 
		_counter,
		_pageUrl='/'+trimStr(location.pathname,'/ '),
		_getCounter=function(){
			if (window['o']/* && window['o'].push*/){
				_counter=window['o'];
				return _counter;
				}
			return false;
			};
	var self=GlobalListener={
		track:function(data){
			if (!_counter && !_getCounter()){
				return false;
				}
			_counter.push(data);
			},
		trackEvent:function(data){
			if (typeof(data)=='string'){
				data={
					url:data
					}
				}
			data.url=(data.url.charAt(0)=='/'?'':_pageUrl+'*')+data.url;
			self.track(data);
			},
		trackUrl:function(data){
			if (typeof(data)=='string'){
				data={
					url:data
					}
				}
			data.url=(data.url.charAt(0)=='/'?data.url:_pageUrl+'/')+data.url;
			self.track(data);
			}
		};
	})();
