var TimeoutRetVal=null;
var event_x, event_y;

function RTrim(s) {return s.replace(/ +$/,'');}
function LTrim(s) {return s.replace(/^ +/,'');}
function Trim(s) {return RTrim(LTrim(s));}

var trans = [];
for (var i = 0x410; i <= 0x44F; i++)
	trans[i] = i - 0x350; // А-Яа-я

trans[0x401] = 0xA8;    // Ё
trans[0x451] = 0xB8;    // ё

function RegExpPreparePattern(sStr){
return sStr.replace(/(\\)|(\^)|(\$)|(\*)|(\+)|(\?)|(\{)|(\})|(\))|(\()|(\[)|(\])|(\,)|(\.)|(\!)|(\|)|(\-)|(\:)|(\@)|(\#)|(\%)|(\&)|(\_)|(\=)|(\/)|(\")|(\;)|(\<)|(\>)|(\')|(\`)|(\~)/gim, '\\$&');
}

//кодироует строку заменяю < > & " на соответствующие эквиваленты
function HTMLEncode(istr)
{
	istr = istr.replace(/\&/gi, '&amp;');
	istr = istr.replace(/</gi, '&lt;');
	istr = istr.replace(/>/gi, '&gt;');
	istr = istr.replace(/\"/gi, '&quot;');
	return istr;
}

//кодироует строку заменяю 8-ми битные символы на %##
function UrlEncode(istr)
{
	if (istr!=null && istr.length>0)
	{
		var i, tmpstr, chcod;
		tmpstr='';
		for(i=0; i<istr.length; i++)
		{
			chcod = istr.charCodeAt(i);
			
			if (typeof trans[chcod] != 'undefined')
				chcod = trans[chcod];
				
			if (chcod <= 0xFF)
				tmpstr+=String.fromCharCode(chcod);
		}
		tmpstr = escape(tmpstr);
		tmpstr = tmpstr.replace(/\x2B/g, '%2B')
		return tmpstr
	}
return '';
}
// заменя getElementById для 4 эксплорера
function findElementById(elmid){
var i, obj=null;
	for (i=0; i<document.all.length; i++){
		if (document.all[i].id.toLowerCase()==elmid.toLowerCase()){
			obj = document.all[i]; break
		}
	}
return obj;
}

//
function GetBrowser() 
{
var iever, BrowserName, BrowserN=null;
var mayBehavior=false;
var userAgent = navigator.userAgent;
var res1 = userAgent.match(/MSIE\s*(\d+\.\d+)/gi);
var res2;

if (res1!=null){
	res2 = userAgent.match(/opera/gi);
 	if (res2==null){
			if (document.charset){
				BrowserName = 'ie';
				iever = res1.toString().match(/(\d+\.\d+)/gi);
				if (iever!=null){
					iever = parseFloat(iever);
					if (iever>=5)
						mayBehavior=true;
				}	
			}else
				BrowserName = 'notie';
	}
	else
		BrowserName = 'notie';
		
}else
	BrowserName = 'notie';

if (BrowserName == 'notie')
{
	if((res1=userAgent.match(/opera((\s*)|(\/))(\d+\.\d+)/gi)))
	{
		BrowserN = 'opera'
		iever = res1.toString().match(/(\d+\.\d+)/gi);
		if (iever)
			iever = parseFloat(iever);
	}

	if(BrowserN==null){
	if(userAgent.match(/Gecko\/\d+/gi))
	{
		iever=null; res1=null;
		res1 = userAgent.match(/firefox\/[\d\.]+/gi);
		if (res1)
		{
			BrowserN = 'firefox'
			iever = res1.toString().match(/(\d+\.\d+)/gi);
			if (iever && iever[0])
				iever = parseFloat(iever[0]);
		}
		else
		{
			BrowserN = 'mozila'
			res1 = userAgent.match(/rv\:[\d\.]+/gi);
			if (res1)
			{
				iever = res1.toString().match(/(\d+\.\d+)/gi);
				if (iever && iever[0])
					iever = parseFloat(iever[0]);
				
			}
		}
	}}
	
	if(BrowserN==null){
	res1 = userAgent.match(/Chrome\/[\d\.]+/gi)
	if (res1)
	{
		BrowserN = 'chrome';
		iever = res1.toString().match(/[\d\.]+/gi);
	}}

	if(BrowserN==null){
	res1 = userAgent.match(/Safari\/[\d\.]+/gi)
	if (res1)
	{
		BrowserN = 'safari';
		iever = res1.toString().match(/[\d\.]+/gi);
	}}
}

var my_array = new Array(BrowserName, iever, mayBehavior, BrowserN);
return my_array;
}

/*==*/
function submitForm(iFormName) {
var obj = eval('window.document.' + iFormName); obj.submit();
}
/*==*/

function OneSelect(checkbox)
{
	if (typeof(checkbox)=='object' && typeof(checkbox.form)=='object' && checkbox.type == 'checkbox' && checkbox.checked){
		var checkedName = checkbox.name;
		var checkedVal = checkbox.value;
		var element, i;
		for (i=0; i<checkbox.form.elements.length; i++)		{
			element = checkbox.form.elements[i];
			if (typeof(element)=='object' && 
				element.type == 'checkbox' && 
				element.name==checkedName && 
				element.value!=checkedVal && 
				element.checked)
				element.checked = false;
}}}
//
function ShowPhoto(e, url, evtObj){
if (document.images['photosTag'])
	{
		if (window.event){
			event_x = window.event.x+window.document.body.scrollLeft; 
			event_y = window.event.y+window.document.body.scrollTop;
		}
		else{
			if(e){event_x = e.pageX; event_y = e.pageY;}
			else{event_x = evtObj.firstChild.x; event_y = evtObj.firstChild.y;}
		}

		var obj= document.getElementById('photosTag');
		
		if (obj)
		{
			window.clearTimeout(TimeoutRetVal);
			
			if (obj.src!=url)
			{
				document.getElementById('photos').style.display = 'none';
				obj.src=url;
				if (navigator.userAgent.match(/opera/gi)) 
					ShowPhotoWindow();
			}
			else
				ShowPhotoWindow();
			return false;
		}
	}
OnW(url, 'photowin', 'no' , 'no', 300, 300);
return false;}
//
function ShowPhotoWindow(){
var obj;
	obj = document.getElementById('photos');
	
	if (obj.style.display.match(/none/gi)){
		var imgObj = document.getElementById('photosTag');
		var x = event_x + 50;
		var y = event_y + 30;

		var winH = window.document.body.scrollTop+document.body.clientHeight
		var winW = window.document.body.scrollLeft+document.body.clientWidth
		
		if (document.charset) obj.style.display = 'block';
		
		x = ((imgObj.width+x+24)>document.body.clientWidth)?document.body.clientWidth-imgObj.width-24:x
		y = ((imgObj.height+y+24)>winH)?winH-imgObj.height-24:y

		x = (x<window.document.body.scrollLeft)?window.document.body.scrollLeft:x
		y = (y<window.document.body.scrollTop)?window.document.body.scrollTop:y

		obj.style.left = x;
		obj.style.top  = y;
		
		if (obj.style.display.match(/none/gi)) obj.style.display = 'block';
	}
	//TimeoutRetVal = window.setTimeout('document.getElementById(\'photos\').style.display = \'none\';', 15000);
return false;}
//
function OnW(url, name, scr, fullscr, w, h){ 
var PL, PT, ww, wh;
if (w > window.screen.width) w=window.screen.width;
if (h > window.screen.height) h=window.screen.height;
PL = (window.screen.width-w)/2;
PT = (window.screen.height-h)/2;

if (fullscr.toLowerCase()=='yes') 
	name = window.open(url, name, 'top=0,left=0,toolbar=no,location=no,status=no,menubar=no,resizable=yes,directories=no,scrollbars='+scr+',width='+window.screen.availWidth+',height='+window.screen.availHeight+'');
else 
	name = window.open(url, name, 'top='+PT+',left='+PL+',toolbar=no,location=no,status=no,menubar=no,resizable=yes,directories=no,scrollbars='+scr+',width='+w+',height='+h+'');
if (!name.closed) name.focus();
return false;
}
//
function OnWNoRS(url, name, scr, fullscr, w, h){ 
var PL, PT, ww, wh;
if (w > window.screen.width) w=window.screen.width;
if (h > window.screen.height) h=window.screen.height;
PL = (window.screen.width-w)/2;
PT = (window.screen.height-h)/2;

if (fullscr.toLowerCase()=='yes') 
	name = window.open(url, name, 'top=0,left=0,toolbar=no,location=no,status=no,menubar=no,resizable=no,directories=no,scrollbars='+scr+',fullscreen=yes');
else 
	name = window.open(url, name, 'top='+PT+',left='+PL+',toolbar=no,location=no,status=no,menubar=no,resizable=no,directories=no,scrollbars='+scr+',width='+w+',height='+h+'');
if (!name.closed) name.focus();
return name;
}
//
function OnPM(th){OnPM_ext(th, 0)}
//
function OnPM_ext(th, tp) {
var obj;

	if (th)
	{
		if (th.style.backgroundImage.indexOf('url')!=-1)
		{
		
			switch(tp)
			{
				case 0:
					if (th.style.backgroundImage.indexOf('p.gif')==-1)
					{
						th.style.backgroundImage = 'url(/pic/p.gif)'
						th.title='Раскрыть';
					}
					else
					{
						th.style.backgroundImage = 'url(/pic/m.gif)'
						th.title='Cкрыть';
					}
					break;
				case 1:
					th.style.backgroundImage = 'url(/pic/m.gif)'
					th.title='Cкрыть';
					break;
					
				case 2:
					th.style.backgroundImage = 'url(/pic/p.gif)'
					th.title='Раскрыть';
					break;
			}
			
		}
		else
		{
			switch(tp)
			{
				case 0:
					var pic=th.src;
					if (pic.indexOf('p.gif')==-1)
					{
						th.src='pic/p.gif';
						th.alt='Раскрыть';
					}
					else
					{ 
						th.src='pic/m.gif';
						th.alt='Cкрыть'; 
					}
					break;
				case 1:
					th.src='pic/m.gif';
					th.alt='Cкрыть'; 
					break;
				
				case 2:
					th.src='pic/p.gif';
					th.alt='Раскрыть';
					break;
			}
		}
	
		obj=(document.getElementById)?document.getElementById('d_'+th.id):findElementById('d_'+th.id);
		
		switch(tp)
		{
			case 0:
				if (obj.style.display=='none')
					obj.style.display='block';
				else
					obj.style.display='none';
				
				break;
			case 1:
				obj.style.display='block';
				break;
			
			case 2:
				obj.style.display='none';
				break;
		}
	}
}
//
function GoAll(iCod) {
var N, tmpObj, obj;
var re = /^Srp\_.*/i;
var imgs = (document.getElementById)?document.getElementsByTagName("img"):document.all.tags("img");

for (N=0; N < imgs.length; N++){
	tmpObj=imgs[N];
	if (typeof(tmpObj.id)!='undefined' && tmpObj.id!=null){
		var tmp = tmpObj.id+'';
		if (re.test(tmp)){if (iCod > 0) OnPM_ext(tmpObj, 1); else OnPM_ext(tmpObj, 2);}
	}
}

}
//
function ChangePict(obj, BPict, SPict){
var ID, SZ, tmpstr, t_alt, pictID, PictObj, i, Flag=false;
if (obj.id==null) {
	if (obj!=null)	{
		tmpstr = obj+'';
		if (tmpstr.indexOf('photos/')>0) return OnW(tmpstr, 'Bigphotos', 'no', '', 250, 375);
		else return true; } 
	else return true;}

tmpstr = obj.id;
if (tmpstr.indexOf('_')>0){	
	ID = tmpstr.substring(tmpstr.indexOf('_')+1, tmpstr.length); SZ = tmpstr.substring(0, tmpstr.indexOf('_')).toLowerCase();
} 
else
	return true;
if ((BPict!='') && (SPict=='')) {SPict=BPict;}	if ((BPict=='') && (SPict!='')) {SPict=''; BPict='';} tmpstr = ''; pictID = 'pict'+ID; 

for (i=0; i<obj.childNodes.length; i++){
	tmpstr = obj.childNodes.item(i).id
	if (tmpstr!=null){
		if (tmpstr.toLowerCase()==pictID.toLowerCase()) {PictObj = obj.childNodes.item(i); break;}
}	}

if (BPict=='')  BPict = PictObj.src;	if (SPict=='')  SPict = PictObj.src;	t_alt = PictObj.alt;
if (SZ=='s'){
	obj.innerHTML ='<img src="' + BPict + '" alt="уменьшить" id="' + pictID +'" border="0"><br><img src="pic/p_zm.gif" border="0" width="25" height="20" vspace="10" align="center"><span class="textboldunderline">уменьшить</span>';
	obj.id='b_' + ID;
}
else{
	obj.innerHTML ='<img src="' + SPict + '" alt="увеличить" id="' + pictID +'" width="70" border="1"><br><img src="pic/p_zm.gif" border="0" width="25" height="20" vspace="10" align="center"><span class="textboldunderline">увеличить</span>';
	obj.id='s_' + ID;
}

for (i=0; i<obj.childNodes.length; i++){
	tmpstr = obj.childNodes.item(i).id
	if (tmpstr!=null){
		if (tmpstr.toLowerCase()==pictID.toLowerCase()) {PictObj = obj.childNodes.item(i); PictObj.alt=t_alt; break;}
}	}

return false;}
//
function  ChSize(p1,p2,p3) {
var tmpStr, h, w, sz, sId, ln;
sId=window.event.srcElement.id;
ln=sId.length;
if (sId.substr(ln-2)=='!b')
	sz=0;
else 
	sz=1;
sId=sId.substr(0,ln-2);
ln=sId.length;
switch (p1) {
	case 2:
		w=50; 	h=70;
		if (sz==0)
			tmpStr='<img src=' + p2 + ' id=' + sId + '!s border=1 width=' + w +' height='+ h +' alt=Увеличить>' ;
		else
			tmpStr='<img src=' + p2 + ' id=' + sId + '!b border=0 alt=Уменьшить>' ;
		break;
	case 3:
		w=70; h=100;
		if (sId.substr(ln-2)=='_t' || sId.substr(ln-2)=='_g')
			sId=sId.substr(0,ln-2);
		if (sz==0)
			tmpStr='<img src=' + p2 + ' id=' + sId + '!s border=1 width=' + w + ' height=' + h + ' alt=Увеличить><br><img id=' + sId + '_g!s src=pic/p_zm.gif border=0 width=25 height=20 vspace=10 align=middle><span id=' + sId + '_t!s class=textboldunderline>увеличить</span>' ;
		else
			tmpStr='<img src=' + p2 + ' id=' + sId + '!b border=0 alt=Уменьшить><br><img id=' + sId + '_g!b src=pic/p_zm.gif border=0 width=25 height=20 vspace=10 align=middle><span id=' + sId + '_t!b class=textboldunderline>уменьшить</span>' ;
		break;
	case 4:
		w=70;
		if (sId.substr(ln-2)=='_t' || sId.substr(ln-2)=='_g')
			sId=sId.substr(0,ln-2);
		if (sz==0)
			tmpStr='<img src=' + p2 + ' id=' + sId + '!s border=1 width=' + w + ' alt=Увеличить><br><img id=' + sId + '_g!s src=pic/p_zm.gif border=0 width=25 height=20 vspace=10 align=middle><span id=' + sId + '_t!s class=textboldunderline>увеличить</span>' ;
		else
			tmpStr='<img src=' + p2 + ' id=' + sId + '!b border=0 alt=Уменьшить><br><img id=' + sId + '_g!b src=pic/p_zm.gif border=0 width=25 height=20 vspace=10 align=middle><span id=' + sId + '_t!b class=textboldunderline>уменьшить</span>' ;
		break;
}
if (tmpStr!='' && p3!='') document.all(p3).innerHTML=tmpStr;
}

function SetImg(targetID, img){
	if (window.document.createElement){
		var imgObj = window.document.createElement('IMG');
		
		imgObj.onload=function(){
			var obj;
			obj=document.getElementById(targetID);
			if(obj){
				obj.style.height = (imgObj.height+20)+'px';
				obj.style.backgroundImage = 'url(' + img + ')';
				obj.style.backgroundRepeat = 'no-repeat';
		}	}
		imgObj.src=img
	}
	else
	{
		var obj=document.getElementById(targetID);
		if(obj){
			obj.style.height = '400px';
			obj.style.backgroundImage = 'url(' + img + ')';
			obj.style.backgroundRepeat = 'no-repeat';
	}	}
}

function initExtraImg(imgID, imgTag){
	if (document.getElementById){
		var obj=document.getElementById(imgID);
		if(obj){
			obj=document.getElementById(imgTag);
			if(obj){
				var img = obj.style.backgroundImage.replace(/(^url\(\"?)|(\"?\)$)/gi,'');
				img = img.replace(/[a-z]+\:\/{2}/gi, '');
				img = img.replace(/^[^\/]+/gi, '');
				SetImg(imgTag, img);
	}	}	}
}

// ищем элемент в массиве
var inArrayIndex = Array.prototype.indexOf ?
    function(arr, val){if(arr.length>0) return arr.indexOf(val); else return -1;} :
    function(arr, val){
	if(arr.length>0){
		for(var i in arr){
		    if (!arr.hasOwnProperty(i)) continue;
			if (a[i] === val) return i;}}
    return -1; }

// удаляем элемент из массива
function ExcludeFromArray(arr, val){
var _arr = new Array();
	if(typeof(arr)=='object' && (arr instanceof Array)){
		for(var i in arr) {
			if (!arr.hasOwnProperty(i)) continue;
			if(!(arr[i]===val))	_arr.push(arr[i]);
		}
		return _arr;
	}
	return arr;
}

// обработчик события загрузки документа
var $onReady = new (function(){
	var readyList = [];

	this.AddHandler = function(handler){
		if (!readyList.length){
			bindReady(function(){for(var i=0; i<readyList.length; i++){readyList[i]()}})}
		readyList.push(handler);}
	
	var bindReady = function(handler){
		var called = false; function ready(){if(called) return;	called=true;	handler();}
	
		if (document.addEventListener){
			document.addEventListener("DOMContentLoaded", 
				function(){document.removeEventListener( "DOMContentLoaded", arguments.callee, false); ready();},
				false ); } 
		else if (document.attachEvent){
			if (document.documentElement.doScroll && window == window.top ){
				function tryScroll(){
					if (called) return;
					try{document.documentElement.doScroll("left"); ready();}
					catch(e){setTimeout(tryScroll, 0);}
				};
				tryScroll();
			}
	
			document.attachEvent("onreadystatechange", 
				function(event){
					if ( document.readyState === "complete" ){
						document.detachEvent( "onreadystatechange", arguments.callee ); ready();
				}	}
			) }
	
	    if (window.addEventListener) window.addEventListener('load', ready, false);
	    else if (window.attachEvent) window.attachEvent('onload', ready);
	    /*else window.onload=ready; */}
})();
//  ==================

// управление событиями
(function(){
	var UseWrap = (document.addEventListener) ? false : true;
	
	// так будем искать наш обработчик
	var FindHandel = function(arr, etype, handel){
		if(arr.length>0){
			for(var i in arr) {
			    if (!arr.hasOwnProperty(i)) continue;
				if ((arr[i].hndl === handel) && (arr[i].etype === etype)) return i;
		}	}
		return -1;
	};

	$Events={};
	
	// кол-во разных обработчиков событий у элемента
	$Events.EventCount = function(elm){
		if (typeof(elm)!='undefined'){
			try{
				if((typeof(elm.ArrayOfHandels)!='undefined') && (elm.ArrayOfHandels instanceof Array))
					return elm.ArrayOfHandels.length;
				else
					return 0;
			}catch(e){throw e;}
		}else throw new Error('parameter elm is undefined.')
	}
	
	// добавляем обработчик события
	$Events.addEvent = function(elm, etype, handel){
		if(typeof(elm)=='undefined') throw new Error('parameter elm is undefined.')
		if(typeof(handel)=='undefined') throw new Error('parameter handel is undefined.')
		if(typeof(etype)=='undefined') throw new Error('parameter etype is undefined.')

		if(!(handel instanceof Function)) throw new Error('invalid handel')
		if(typeof(etype)!='string') throw new Error('parameter etype not a string')
		etype = etype.toLowerCase();
		
		//так создаем объект содержищий исходный обработчик и созданную для него функцию
		var o = {handel:null, etype:null, fn:null};
		o.hndl=handel
		o.etype=etype;
		o.fn = (UseWrap)? (function() { handel.call(elm); }) : handel
		
		if( (typeof(elm.ArrayOfHandels)!='undefined') && (elm.ArrayOfHandels instanceof Array) ){
			if(FindHandel(elm.ArrayOfHandels, etype, handel)<0){
				// добавляем наш обработчик только если его нет в списке
				elm.ArrayOfHandels.push(o);
				if(UseWrap)	elm.attachEvent('on' + etype, o.fn);
				else elm.addEventListener(etype, o.fn, false);
			}
		}else{
			// создаём массив обработчиков и добавляем в него наш
			elm.ArrayOfHandels = new Array();
			elm.ArrayOfHandels.push(o);
			if(UseWrap) elm.attachEvent('on' + etype, o.fn);
			else elm.addEventListener(etype, o.fn, false);
		}
	}
	
	// удаляем обработчик события
	$Events.removeEvent = function(elm, etype, handel){
		if(typeof(elm)=='undefined') throw new Error('parameter elm is undefined.')
		if(typeof(handel)=='undefined') throw new Error('parameter handel is undefined.')
		if(typeof(etype)=='undefined') throw new Error('parameter etype is undefined.')

		if(!(handel instanceof Function)) throw new Error('invalid handel')
		if(typeof(etype)!='string') throw new Error('parameter etype not a string')
		etype = etype.toLowerCase();
		
		if( (typeof(elm.ArrayOfHandels)!='undefined') && (elm.ArrayOfHandels instanceof Array) ){
			// если у нас есть массив обработчиков то ищем в нем наш обработчик
			// и удаляем именно его
			var i = FindHandel(elm.ArrayOfHandels, etype, handel);
			if(i>=0){
				if(UseWrap)	elm.detachEvent('on' + etype, elm.ArrayOfHandels[i].fn);
				else elm.removeEventListener(etype, elm.ArrayOfHandels[i].fn, false);
				
				arr = new Array();
				for(var j in elm.ArrayOfHandels) {
				    if (!elm.ArrayOfHandels.hasOwnProperty(j)) continue;
					if(j!=i) arr.push(elm.ArrayOfHandels[j]);
				}
				elm.ArrayOfHandels = arr;
				return;
			}
		}
	
		// если мы оказались здесь значит массив обработчиков не создан
		// или обработчик в нем не найден, пытаемся удалить то что нам передали.
		if(UseWrap)	elm.detachEvent('on' + etype, handel);
		else elm.removeEventListener(etype, handel, false);
	}
})();

// определение типа браузера
(function(){ 
	var ua = navigator.userAgent, av = navigator.appVersion, pl = navigator.platform, v, v1, i;
	
	$Agent={};
	$Agent.Opera = !!(window.opera && opera.buildNumber);	$Agent.OperaMini = $Agent.Opera && (/Opera\s(Mini|Mobi)/gi).test(ua)
	$Agent.Presto = $Agent.Firefox = $Agent.Thunderbird = $Agent.SeaMonkey = $Agent.WebKit = $Agent.OldWebKit = $Agent.Chrome = false;
	$Agent.Chrome =  typeof(window.chrome)!='undefined' || typeof(window.chromium)!='undefined'
	$Agent.Safari = (/apple computer/gi).test(window.navigator.vendor)
	
	if ($Agent.Chrome || $Agent.Safari){$Agent.WebKit = /WebKit/.test(ua); $Agent.OldWebKit = $Agent.WebKit && !window.getSelection().getRangeAt;}
	
	$Agent.IE = !$Agent.WebKit && !$Agent.Opera && typeof(window.ActiveXObject)!='undefined' && (/MSIE/gi).test(ua) && (/(Explorer)|(IE\sMobile)/gi).test(navigator.appName);
	$Agent.IEMobile = (/IE\sMobile/gi).test(navigator.appName)
	$Agent.IE6 = $Agent.IE && /MSIE [56]/.test(ua);
	$Agent.IE5 = $Agent.IE && /MSIE [5]/.test(ua);
	$Agent.Gecko = !$Agent.WebKit && !$Agent.Opera && !$Agent.IE && typeof(document.contentType)!='undefined'; //	 /Gecko/.test(ua);
	if($Agent.Gecko){
		$Agent.Firefox = (/Firefox/gi).test(ua);
		$Agent.Thunderbird = (/Thunderbird/gi).test(ua);
		$Agent.SeaMonkey = (/SeaMonkey/gi).test(ua); }
	
	$Agent.Mac = (/^mac/gi).test(pl);
	$Agent.Win = (/^win/gi).test(pl);
	$Agent.WinCE = (/Windows\sCE/gi).test(ua) || (/WinCE/gi).test(pl);
	$Agent.WinMobile = (/Windows\sMobile/gi).test(ua);
	$Agent.Linux = (/linux/gi).test(ua);
	$Agent.FreeBSD = (/FreeBSD/gi).test(ua);
	$Agent.iPhone = (/iPhone/gi).test(ua);
	$Agent.iPad = (/iPad/gi).test(ua);
	$Agent.Symbian = (/(SymbOS)|(SymbianOS)/gi).test(ua);
	$Agent.Android = (/Android/gi).test(ua);
	$Agent.Mobile = $Agent.OperaMini || $Agent.IEMobile || $Agent.WinMobile || $Agent.WinCE || $Agent.iPhone || $Agent.iPad || $Agent.Symbian || $Agent.Android;
	$Agent.OtherPlatform = !$Agent.Mac && !$Agent.Win && !$Agent.WinCE && !$Agent.WinMobile && !$Agent.Linux && !$Agent.FreeBSD && !$Agent.iPhone && !$Agent.iPad && !$Agent.Symbian && !$Agent.Android;
	
	if (!$Agent.IE5) v = (ua.toLowerCase().match(new RegExp(".+(?:rv|it|ra|ie)[\\/: ]([\\d.]+)"))||[])[1];
	switch (true){
	    case ($Agent.WebKit):
			(new RegExp("(\\d+\\.\\d*)")).exec(v)
			$Agent.WebKitVer = RegExp.$1;
			try{v=parseInt(v, 10); v=v>599?4:v>499?3:v>399?2:1; $Agent.ok = v>2;}catch(e){v=null;}
			(new RegExp("(Chrome|Version)\\/(\\d+\\.\\d*)", "gi")).exec(ua);
			v = RegExp.$2;
			try{v=parseFloat(v);}catch(e){v=null;}
			break;
		case ($Agent.OperaMini):
	    case ($Agent.Opera): 
			$Agent.OperaVer=null; $Agent.Presto={MinorVer:null, MajorVer:null}; 
			re = (new RegExp("Presto\\/(\\d+\\.\\d+)\\.(\\d+)", "gi")).exec(ua); 
			try{$Agent.Presto.MinorVer = parseFloat(re[1]); $Agent.Presto.MajorVer = parseFloat(re[2])}catch(e){}
			v = v||9; try{$Agent.OperaVer=parseFloat(v);}catch(e){$Agent.OperaVer=null;}
			(new RegExp("Version\\/(\\d+\\.\\d*)", "gi")).exec(ua);
			var vv = RegExp.$1;
			v=(vv!=null && vv!='')?vv:(v||9);
			try{v=parseFloat(v); $Agent.ok = v>9; if($Agent.OperaVer==null)$Agent.OperaVer=v; }catch(e){v=null;}
			break;
	    case ($Agent.Gecko): 
			v=v.substr(0,3)||1.8;
			try{$Agent.GeckoVer = parseFloat(v);}catch(e){$Agent.GeckoVer=null;}
			(new RegExp("(Firefox|Thunderbird|SeaMonkey)\\/(\\d+\\.\\d*)", "gi")).exec(ua)
			v = RegExp.$2;
			try{v=parseFloat(v)}catch(e){v=null;}
			$Agent.ok = true; break;
	    case ($Agent.IE): 
			if(window.XMLHttpRequest){(new RegExp("MSIE (\\d+\\.\\d*)", "gi")).exec(ua); v = RegExp.$1;}
			else v = (/MSIE [5]/.test(av)) ? (/MSIE 5.5/.test(av))?5.5:5 : 6; 
			try{v=parseFloat(v); $Agent.ok = v>6}catch(e){v=null;}
			break;
    };
	$Agent.ver = v;
	$Agent.debug = /&debug$/.test(location.search);
})();

// обект для манипуляций с XML (только чтение)
var $xmlUtils = new (function(){
	this.XmlEncode = function(text){
		var s = text.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F]/gi,'');
		s = s.replace(/\&/gi,'&amp;');
		s = s.replace(/\"/gi,'&quot;');
		s = s.replace(/\'/gi,'&apos;');
		s = s.replace(/\>/gi,'&gt;');
		s = s.replace(/\</gi,'&lt;');
		return s;
	}

	// так получаем ссылку на конкретную ветку документа
	this.SelectSingleNode = function (xmlDoc, elementPath, nsPrefix, nsURI){
		switch (true){
			case (typeof(window.ActiveXObject)!='undefined'):
				try{
					var DomNode=null;
					if(typeof(xmlDoc.documentElement)!='undefined')DomNode = xmlDoc.documentElement;
					else{try{DomNode = (typeof(xmlDoc.ownerDocument)!='undefined' && xmlDoc.ownerDocument!=null)?xmlDoc.ownerDocument.documentElement:null;}catch(e){DomNode = null;}}
					
					if(DomNode){
						DomNode.ownerDocument.setProperty('SelectionLanguage', 'XPath');
						if( typeof(nsPrefix)!='undefined' && typeof(nsURI)!='undefined' && nsPrefix!=null && nsURI!=null)
							DomNode.ownerDocument.setProperty('SelectionNamespaces', nsPrefix+':'+nsURI);
						else
							DomNode.ownerDocument.setProperty('SelectionNamespaces', '');
					}
					return xmlDoc.selectSingleNode(elementPath);
				}catch(e){return null;}
				break;
	
			case ( $Agent.Opera && $Agent.ver>=9.02 ):
				try{return xmlDoc.selectSingleNode(elementPath);}
				catch(e){return null;}
				break;
			default:
				try{
					var nsResolver=null, _nsPrefix = nsPrefix, _nsURI=nsURI;
					var DomNode = (typeof(xmlDoc) == 'object' && (xmlDoc instanceof XMLDocument)) ? xmlDoc.documentElement : xmlDoc;
		    		var xpe = new XPathEvaluator();
					if( typeof(nsPrefix)!='undefined' && typeof(nsURI)!='undefined' )
						nsResolver=function(prefix) {return (_nsPrefix==prefix) ? _nsURI : null;}
					else
						nsResolver = xpe.createNSResolver( DomNode.ownerDocument == null ? DomNode.documentElement : DomNode.ownerDocument.documentElement );
					var res = xpe.evaluate(elementPath,DomNode,nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
					return res.singleNodeValue;
				}catch(e){return null;}
		}
	};

	// так получаем несколько элементов 
	this.SelectNodes = function(xmlDoc, elementPath, nsPrefix, nsURI){
		switch (true){
			case (typeof(window.ActiveXObject)!='undefined'):
				try{
					var DomNode=null;
					if(typeof(xmlDoc.documentElement)!='undefined') DomNode = xmlDoc.documentElement;
					else{try{DomNode = (typeof(xmlDoc.ownerDocument)!='undefined' && xmlDoc.ownerDocument!=null)?xmlDoc.ownerDocument.documentElement:null;}catch(e){DomNode = null;}}
					
					if(DomNode){
						DomNode.ownerDocument.setProperty('SelectionLanguage', 'XPath');
						if( typeof(nsPrefix)!='undefined' && typeof(nsURI)!='undefined' && nsPrefix!=null && nsURI!=null)
							DomNode.ownerDocument.setProperty('SelectionNamespaces', nsPrefix+':'+nsURI);
						else
							DomNode.ownerDocument.setProperty('SelectionNamespaces', '');
					}
					res = xmlDoc.selectNodes(elementPath); return (res.length>0)?res:null;
				}catch(e){return null;}
				break;
				
			case ( $Agent.Opera && $Agent.ver>=9.02 ):
				try{res = xmlDoc.selectNodes(elementPath); return (res.length>0)? res : null;}
				catch(e){return null;}
				break;
			default:
				try{
					var nsResolver=null, _nsPrefix = nsPrefix, _nsURI=nsURI;
					var DomNode = (typeof(xmlDoc) == 'object' && (xmlDoc instanceof XMLDocument)) ? xmlDoc.documentElement : xmlDoc;
			    	var xpe = new XPathEvaluator();
					if( typeof(nsPrefix)!='undefined' && typeof(nsURI)!='undefined' )
						nsResolver=function(prefix) {return (_nsPrefix==prefix) ? _nsURI : null;}
					else
						nsResolver = xpe.createNSResolver( DomNode.ownerDocument == null ? DomNode.documentElement : DomNode.ownerDocument.documentElement );
					
					var res = xpe.evaluate(elementPath,DomNode,nsResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
					//xpe.evaluate(elementPath,DomNode,nsResolver, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null)
					return (res.snapshotLength>0) ? res : null;
				}catch(e){return null;}
		}
	};

	// возвращает объект для обхода коллекции Nodes
	// коллекцию получаем с помощью this.SelectNodes
	this.Enumerator = function(_nodes){return new NodesEnumerator(_nodes)};
	
	// объект для прохода по колекции Nodes
	// коллекцию получаем с помощью this.SelectNodes
	function NodesEnumerator(_nodes){
		var nodes = _nodes, i=0;
		/*
		var useFor = false;
		switch (true){
			case (typeof(window.ActiveXObject)!='undefined'):
			case ( $Agent.Opera && $Agent.ver>=9.02 ):
				useFor = true;
				break;}
		*/
		this.Next = function(){
			if(nodes){
				if( i < ((nodes.snapshotLength)?nodes.snapshotLength:nodes.length) ){
					try{var res = (nodes.snapshotLength)?nodes.snapshotItem(i):nodes.item(i); i++; return res;}
					catch(e){return null;}
				}else{return null;}
				/*
				if (useFor){
					if(i<nodes.length){
						try{return nodes.item(i); i++;}
						catch(e){return null;}
					}else{return null}
				}else{try{return nodes.iterateNext();}catch(e){return null;}}
				*/
			}else{return null;}
		};
	};

	// так получаем значение XML элемента
	this.GetElementValue = function(Element){
		if (window.ActiveXObject)
			return Element.text;
		else{
			if (typeof(Element.text)!='undefined')
				return Element.text;
			else if(typeof(Element.textContent)!='undefined')
				return Element.textContent;
			else if(typeof(Element.nodeValue)!='undefined')
				return Element.nodeValue;
			else if(typeof(Element.innerHTML)!='undefined')
				return Element.innerHTML;
			else if( (typeof(Element.firstChild)!='undefined') && (typeof(Element.firstChild.nodeValue)!='undefined') )
				return Element.firstChild.nodeValue;
		}
	};

	// так получаем значение атрибута
	this.getAttribute = function(node, name){
		if(node.attributes){
			try{
				var atr = node.attributes.getNamedItem(name);
	
				if (typeof(atr.text)!='undefined')
					return atr.text;
				else if(typeof(atr.textContent)!='undefined')
					return atr.textContent;
				else if(typeof(atr.nodeValue)!='undefined')
					return atr.nodeValue;
				else if(typeof(atr.innerHTML)!='undefined')
					return atr.innerHTML;
				else if( (typeof(atr.firstChild)!='undefined') && (typeof(atr.firstChild.nodeValue)!='undefined') )
					return atr.firstChild.nodeValue;
			}catch(e){return null;}
		}
		return null;
	}
})();
