var MESSAGES={
	loading:'Загрузка...'
	,error:'Произошла ошибка. Повторите попытку позже.'
	,error_500:'Error 500'
	};
var message=function(key){
	return MESSAGES[key]||'';
	};
var addMessages=function(data){
	return $.extend(MESSAGES,data);
	}

var isAdmin=function(){
	return IS_ADMIN;
	}
	
/* Displaying page
====================================*/
	function SitePageBase(){
		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\:\/\/{1}/i)<0){
				if (page.substr(0,1)!='/')
					page="/"+page;
				page=SITE_URL+page;
				}
			window.location=page;
			return false;
			};
			
		this.redirectUpLevel=function(page){
			var lp=trimStr(location.pathname,'/').split('/');
			lp.pop();
			return this.redirect('/'+lp.join('/')+'/');
			};
			
		this.getContentContainer=function(){
			return $id('content');
			};
		this.getMainWrapContainer=function(){
			return $id('main-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;			
			};
		};
		
	var SitePage=new SitePageBase();
	
var getImgSize=function(src,onready){
		var 
			size={width:0,height:0},
			img=new Image();
		img.onload=function(){
			size.width=this.width;
			size.height=this.height;
			$.isFunction(onready) && onready($.extend(size,{html:'<img src="'+src+'"+ width="'+size.width+'" height="'+size.height+'" alt="" />'}));
			return;
			}
		img.src=src;
		}
	
	
/* jQuery Transport
	=================================================*/
	var 
		AJAX_STATUS_ERROR=0,
		AJAX_STATUS_OK=1;
	function $A(data,onload,onerror,bs,url,format,method){
		if (bs){
			showAjaxProgress();
			}
		if (!format){
			format='json';
			}
		var error=function(msg){
			if (is_function(onerror)){
				onerror(msg);
				}
			else if (TESTENV){
				alert('Transport error'+(msg?': '+msg:''));
				}
			};
		$.ajax({
			url:url||PAGE_URI+'.'+format,
			type:method||'post',
			dataType:format,
			data:data,
			success:function(res){
				bs && stopShowAjaxProgress();
				if (is_function(onload)){
					onload((format=='json' && res)?res.res:res);
					}				
				},
			error:function(xhr,status){
				error(xhr.responseText);
				}
			});
		}
		
	$.extend($A,{
		post:function(data,onload,onerror,bs,url,format){
			return $A(data,onload,onerror,bs,url,format,'post');
			},
		'get':function(data,onload,onerror,bs,url,format){
			return $A(data,onload,onerror,bs,url,format,'get');
			}
		});

/* Request */
$.request=function(data){
	var rdata=$.extend({},{		
		dataType:'json'
		,type:'GET'		
		},data);
		
	var resFormat=rdata.dataType=='script'?'js':rdata.dataType;
	if (!rdata.url){
		rdata.url='/'+trimStr(PAGE_URI,'/ ')+'.'+resFormat;
		}
	
	var urlParts=rdata.url.split('?');
	var urlBase=urlParts.shift();
	if (urlBase.substring(urlBase.length-(resFormat.length+1))!=('.'+resFormat)){
		urlBase+='.'+resFormat;
		}	
	urlParts.unshift(urlBase);
	rdata.url=urlParts.join('?');
	var 
		clientSuccess=rdata.success,
		clientError=rdata.error;
	
	rdata.success=function(res){
		$.status().hide();
		clientSuccess && clientSuccess(rdata.dataType=='json' && res.res!=undefined?res.res:res);  
		};
	rdata.error=function(xhr){
		var 
			res={},
			errorMsg;
		if (rdata.dataType=='json'){
			try{
				eval('res='+xhr.responseText);
				}catch(e){}
			if (res && res.res && res.res.errorMsg){
				errorMsg='Ошибка: '+_prop(res,'res.errorMsg');
				}
			}
		$.status.error(errorMsg||message('error_'+xhr.status)||message('error'));
		clientError && clientError(xhr);
		}
	!rdata.quite && $.status.progress();
	$.ajax(rdata);	
	}
$.request.post=function(data){
	data.type='POST';
	return $.request(data); 
	}
$.request['get']=function(data){
	data.type='GET';
	return $.request(data); 
	}

/* Status */
	$.status = function(msg) {	
		var 
			self=$.status,
			_timer,
			resetTimer=function(){
				clearTimeout(_timer);
				_timer=undefined;
				};
		
		!$.status.isInitialized && $.extend($.status,{
			settings:{
				delayOff:1000
				,align:'center'
				,topAttach:true
				,defaultProgressMsg:message('loading')
				,defaultErrorMsg:message('error')
				,containerCss:{
	//				position:'static'				
					}			
				,hiddenCss:{
					top:-1000
					}
				,visibleCss:{
					top:''
					}
				}
			,initialize:function(){
				self.container=$('<div id="statusbar" />').css(self.settings.containerCss).css(self.settings.hiddenCss).appendTo(document.body);
				self.bindEvents();
				self.isInitialized=true;
				return self;
				}
			,bindEvents:function(){
				self.container.click(function(){
					self.hide();
					});
				return self;}
			,hide:function(){
				self.container.css(self.settings.hiddenCss);
				resetTimer(_timer);
				return self;
				}		
			,show:function(){
				self.container.css(self.settings.visibleCss);
				self.place();
				return self;
				}
			,place:function(){
				if (self.settings.align=='center'){
					self.container.css({left:'50%',marginLeft:-self.container.width()/2});
					}
				return self;
				}
			,msg:function(msg,cl){
				$('<strong />').appendTo(self.container.attr('class',cl||'').empty()).text(msg);
				self.show();
				return self;
				}
			,msgTmp:function(msg){
				self.msg(msg);
				resetTimer(_timer);
				_timer=setTimeout(function(){
					self.hide();
					},self.settings.delayOff);
				return self;
				}
			,msgProgress:function(msg){
				self.msg(msg||self.settings.defaultProgressMsg,'progress');
				return self;
				}
			,msgError:function(msg){
				self.msg(msg||self.settings.defaultErrorMsg,'error');
				return self;
				}
			}) && $.status.initialize();
		if (msg){
			$.status.msgTmp(msg);
			}
		return $.status;
		};	
	$.status.progress=function(msg){
		return $.status().msgProgress(msg);
		};
	$.status.error=function(msg){
		return $.status().msgError(msg);
		}

/* Tinymce settings */
function getTinymceSettings(key){
	var settings={
		_default:/*{
				script_url:PATH_JS+'lib/tiny_mce/tiny_mce.js',
				// General options
				theme : "advanced",
				plugins : "safari,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template",
	
				// Theme options
				theme_advanced_buttons1 : "save,newdocument,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,styleselect,formatselect,fontselect,fontsizeselect",
				theme_advanced_buttons2 : "cut,copy,paste,pastetext,pasteword,|,search,replace,|,bullist,numlist,|,outdent,indent,blockquote,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code,|,insertdate,inserttime,preview,|,forecolor,backcolor",
				theme_advanced_buttons3 : "tablecontrols,|,hr,removeformat,visualaid,|,sub,sup,|,charmap,emotions,iespell,media,advhr,|,print,|,ltr,rtl,|,fullscreen",
				theme_advanced_buttons4 : "insertlayer,moveforward,movebackward,absolute,|,styleprops,|,cite,abbr,acronym,del,ins,attribs,|,visualchars,nonbreaking,template,pagebreak",
				theme_advanced_toolbar_location : "top",
				theme_advanced_toolbar_align : "left",
				theme_advanced_statusbar_location : "bottom",
				theme_advanced_resizing : true,
	
				// Example content CSS (should be your site CSS)
				content_css : "css/example.css",
	
				// Drop lists for link/image/media/template dialogs
				template_external_list_url : "lists/template_list.js",
				external_link_list_url : "lists/link_list.js",
				external_image_list_url : "lists/image_list.js",
				media_external_list_url : "lists/media_list.js",
	
				// Replace values for the template plugin
				template_replace_values : {
					username : "Some User",
					staffid : "991234"
				}
			}*/{
			theme:'advanced',
			plugins:'table,fullscreen,inlinepopups,paste',
			script_url:PATH_JS+'lib/tiny_mce/tiny_mce.js',
			content_css:PATH_CSS+'content.css',
			body_class:'content',
			theme_advanced_styles:'Small=weak,Highlighted=highlighted,thead=thead,nobr=nobr',
			theme_advanced_blockformats : "p,div,h3,h4,h5,h6",

			
			theme_advanced_toolbar_location:'top',
			theme_advanced_toolbar_align:'left',
			
			theme_advanced_buttons1:'bold,underline,strikethrough,separator,sub,sup,separator,justifyleft,justifycenter,separator,link,unlink,anchor,separator,image,separator,styleselect,formatselect,bullist,numlist,separator,code,separator,fullscreen',
			theme_advanced_buttons2:'undo,redo,tablecontrols,separator,removeformat,pasteword,pastetext,separator,charmap,hr',
			theme_advanced_buttons3:'',
			
			extended_valid_elements : 'noindex',
			
			relative_urls:false,
			file_browser_callback:'TinyMceBrowserDialogue'
			},
		simple:{
			theme:'advanced',
			plugins:'table,fullscreen',
			script_url:PATH_JS+'lib/tiny_mce/tiny_mce.js',
			content_css:PATH_CSS+'content.css',
			body_class:'content',
			theme_advanced_styles:'Small=weak,highlighted=highlighted,nobr=nobr',
			theme_advanced_blockformats : "p,div,h3,h4,h5,h6",
			
			theme_advanced_toolbar_location:'top',
			theme_advanced_toolbar_align:'left',
			
			theme_advanced_buttons1:'bold,separator,justifyleft,justifycenter,separator,link,unlink,separator,styleselect,formatselect,separator,undo,redo,separator,code,separator,fullscreen',
			theme_advanced_buttons2:'',
			theme_advanced_buttons3:'',
			
			relative_urls:false,
			extended_valid_elements : 'noindex'
			}
		};
	return settings[key]?settings[key]:settings._default;
	}

function TinyMceBrowserDialogue(field_name,url,type,win){
	    var cmsURL = window.location.toString();    // script URL - use an absolute path!
	    cmsURL+=(cmsURL.indexOf("?") < 0?'?':'&')+'action=displayPix'
	    tinyMCE.activeEditor.windowManager.open({
	        file : cmsURL,
	        title : 'My File Browser',
	        width : 500,  // Your dimensions may differ - toy around with them!
	        height : 400,
	        resizable : "yes",
	        inline : "yes",  // This parameter only has an effect if you use the inlinepopups plugin!
	        close_previous : "no"
	    }, {
	        window : win,
	        input : field_name
	    });
	return false;
	}

function picSrc(p,size,ext,noRnd){
	var picId,picType='jpg';
	if (is_object(p)){
		picId=p.id;
		picType=p.type;
		}
	else{
		picId=String(p);
		}
	if (size==3 && picType && !ext){
		ext=picType;
		}
	var 
		d1=picId.substr(0,1);
		d2=picId.length>=2?picId.substr(1,1):'0';
	return PATH_DATA_PIX+d1+'/'+d2+'/'+picId+'_'+(size||2)+'.'+(ext||'jpg')+(noRnd?'':'?rnd='+Math.round(Math.random()*1000));
	}
	
		
/* At start */
	$(function(){
		$('.autofocus:first').focus();
		var searchWord='поиск';
		$('input#req')
			.focus(function(){
				$(this).val()==searchWord && $(this).val('').addClass('active');			
				})
			.blur(function(){
				!$(this).val() && $(this).val(searchWord).removeClass('active');
				});
				
		/* Search and initialize slider links */
		var hash=(location.hash||'#').substr(1);
		$('a.slider-link')
			.each(
				function(){
					var tid=this.href.split('#').pop();
					(hash==tid) && $('#'+tid).show();
					}
				)
			.click(
				function(){
					$('#'+this.href.split('#').pop()).slideToggle('fast');				
					return false;					  
					}
				)
			.focus(selfBlur);
			
		/* Tabs */
		$('DT.tab').click(function(){
			$(this).siblings().removeClass('active').end().next('dd').andSelf().addClass('active');
			});
			
			
		/* Common order ipopup */
			$('#meta-1-item-3 a').click(function(){
				var link=$(this);
				var fields=_prop(window,'COMMONORDER_FORM.fields')||{};	
				
				var container=$('<div/>')
					.appendTo(document.body)
					.attr('id','order-form')
					.addClass('ipopup')
					.html(''
						+'<span class="action-cancel close-bullet"></span>'
						+'<div class="ipopup-header">'
							+'<h2>Заказ</h2>'
							+'<p>Если вы не нашли нужных наименований <a href="/eq/">оборудования</a> или <a href="/tools/">инструмента</a> в&nbsp;соответствующих разделах сайта, отправьте нам их описание и мы постараемся вам помочь.</p>'
						+'</div>'
						+'<div class="ipopup-body">'
							+'<form method="post" action="">'
								+'<dl>'
									+'<dd>'
										+'<label for="order-givenname">'+fields.givenname+':</label>'
										+'<input type="text" name="givenname" id="order-givenname" class="input-text" />'
									+'</dd>'
									+'<dd>'
										+'<label for="order-company">'+fields.company+':</label>'
										+'<input type="text" name="company" id="order-company" class="input-text" />'
									+'</dd>'
									+'<dd>'
										+'<label for="order-email">'+fields.email+':</label>'
										+'<input type="text" name="email" id="order-email" class="field-mail input-text" />'
									+'</dd>'
									+'<dd>'
										+'<label for="order-phone">'+fields.phone+':</label>'
										+'<input type="text" name="phone" id="order-phone" class="input-text" />'
									+'</dd>'
									+'<dd>'
										+'<label for="order-body">'+fields.body+':</label>'
										+'<textarea type="text" name="body" id="order-body	" cols="40" rows="7" class="field-notemptyvalue"></textarea>'
									+'</dd>'
									+'<dd class="submit">'
										+'<input type="hidden" name="from_uri" value="'+window.location+'" />'
										+'<button type="submit">Отправить</button>'
										+'<a href="javascript:;" class="action-cancel">Закрыть</a>'
									+'</dd>'
								+'</dl>'
							+'</form>'
						+'</div>'
						);
				var close=function(){
					unblockScreen();
					container.remove();
					}
				var init=function(){
					container.find('.action-cancel').css('cursor','pointer').click(close);
					putInScreenCenter(container);
					blockScreen();			
					container.find('input').eq(0).focus();
					}
				container.find('form').validate({
					onsubmit:function(res){
						$.request({
							type:'POST',
							quite:true,
							url:'/order/',
							data:res,
							success:function(res){
								container.html(''
									+'<span class="action-cancel close-bullet"></span>'
									+'<div class="ipopup-header">'
										+'<h2>Заявка принята</h2>'
										+'<p>Мы свяжемся с вами в ближайшее время</p>'
									+'</div>'					
									+'<div class="ipopup-body">' 
										+'<div class="distant">'
											+'<button class="action-cancel">Закрыть</button>'
										+'</div>'
									+'</div>');
								init();
								},
							error:function(){
								container.html(''
									+'<span class="action-cancel close-bullet"></span>'
									+'<div class="ipopup-header">'
										+'<h2>Произошла ошибка</h2>'
										+'<p>В процессе отправки заявки произошла техническая ошибка. Пожалуйста, повторите попытку позже.</p>'
									+'</div>'					
									+'<div class="ipopup-body">' 
										+'<div class="distant">'
											+'<button class="action-cancel">Закрыть</button>'
										+'</div>'
									+'</div>'
									);
								init();
								}
							});
						
						return false;
						}
					})
				init();		
				return false;
				});
				
				
		/* Feedback ipopup */
			$('#meta-1-item-2 a').click(function(){
				var link=$(this);
				var fields=_prop(window,'FEEDBACK_FORM.fields')||{};	
				var container=$('<div/>')
					.appendTo(document.body)
					.attr('id','order-form')
					.addClass('ipopup')
					.html(''
						+'<span class="action-cancel close-bullet"></span>'
						+'<div class="ipopup-header">'
							+'<h2>Напишите нам</h2>'
							+'<p>Отправьте нам любое сообщение или предложение.</p>'
						+'</div>'
						+'<div class="ipopup-body">'
							+'<form method="post" action="">'
								+'<dl>'
									+'<dd>'
										+'<label for="order-email">'+fields.email+':</label>'
										+'<input type="text" name="email" id="order-email" class="field-mail input-text" />'
									+'</dd>'
									+'<dd>'
										+'<label for="order-body">'+fields.body+':</label>'
										+'<textarea type="text" name="body" id="order-body	" cols="40" rows="7" class="field-notemptyvalue"></textarea>'
									+'</dd>'
									+'<dd class="submit">'
										+'<input type="hidden" name="from_uri" value="'+window.location+'" />'
										+'<button type="submit">Отправить</button>'
										+'<a href="javascript:;" class="action-cancel">Закрыть</a>'
									+'</dd>'
								+'</dl>'
							+'</form>'
						+'</div>'
						);
				var close=function(){
					unblockScreen();
					container.remove();
					}
				var init=function(){
					container.find('.action-cancel').css('cursor','pointer').click(close);
					putInScreenCenter(container);
					blockScreen();			
					container.find('input').eq(0).focus();
					}
				container.find('form').validate({
					onsubmit:function(res){
						$.request({
							type:'POST',
							quite:true,
							url:'/feedback/',
							data:res,
							success:function(res){
								container.html(''
									+'<span class="action-cancel close-bullet"></span>'
									+'<div class="ipopup-header">'
										+'<h2>Сообщение отправлено</h2>'
									+'</div>'					
									+'<div class="ipopup-body">' 
										+'<div class="distant">'
											+'<button class="action-cancel">Закрыть</button>'
										+'</div>'
									+'</div>');
								init();
								},
							error:function(){
								container.html(''
									+'<span class="action-cancel close-bullet"></span>'
									+'<div class="ipopup-header">'
										+'<h2>Произошла ошибка</h2>'
										+'<p>В процессе отправки сообщения произошла техническая ошибка. Пожалуйста, повторите попытку позже.</p>'
									+'</div>'					
									+'<div class="ipopup-body">' 
										+'<div class="distant">'
											+'<button class="action-cancel">Закрыть</button>'
										+'</div>'
									+'</div>'
									);
								init();
								}
							});
						
						return false;
						}
					})
				init();		
				return false;
				});
			
			
			
			
			
		})