/*Скрипт для скрипта нетипового блока галереи*/
	var UWUTILS = {
		// Очередь функций, для выполнения сразу поле загрузки DOM
		loadList  : [],
		// Обработчик для события "загрузка DOM"
		DOMLoadHandler: function(){
			// quit if this function has already been called
	    	if (arguments.callee.done) return;

	    	// flag this function so we don't do the same thing twice
	    	arguments.callee.done = true;

	    	//kill the timer
	    	if (_timer) clearInterval(_timer);
	    	
			for (var i = 0; i < this.loadList.length; i++)
				this.loadList[i]();
		},
		getResizedURL : function(url, width, height){
			var trim = /(^\s+)|(\s+$)/g;
			url.replace(trim, '');

			if (url.indexOf('http://') == 0 || url.substring(url.length-4)!='.jpg' || (width==0 && height==0))
				return url;

			var t = url.lastIndexOf('.');
			var name = url.substring(0, t);

			return name + '_' + ((width==0)?'':width) + 'x' + ((height==0)?'':height) + '.jpg';
		},
		url : function(url){
			var r = {};
			var rxp = /(?:([a-zA-Z]+):\/\/((?:[a-zA-z0-9-]+\.)+[a-zA-z0-9]{2,4}))?(?::(\d+))?((?:\/[a-zA-Z0-9-]+)*\/)((?:[a-zA-Z0-9-]|_(?!\d+x\d+\.|\d+x\.|x\d+.))+)?(?:_(\d+)?x(\d+)?)?(?:\.([a-zA-Z]{3,4}))?(?:#([a-zA-Z0-9-_]+))?/g
			var r = rxp.exec(url);
			rxp.lastIndex = 0;

			function _set(value){return (value==undefined)?'':value;}
			
			return {
				protocol: _set(r[1]),
				domain: _set(r[2]),
				port : _set(r[3]),
				path : _set(r[4]),
				name : _set(r[5]),
				width : _set(r[6]),
				height : _set(r[7]),
				extention : _set(r[8]),
				hash : _set(r[9]),
				url : function(){
					if (!!this.width || !!this.height)
						if (this.path.match(/^\/images/)!=undefined) this.path = '/r' + this.path.substring(1);

					var str = '';
					for (var i in this)
					{
						switch(i)
						{
							case 'url':
								break;
							case 'protocol':
								str += (!!this[i])?this[i]+'://':'';
								break;
							case 'port':
								str += (!!this[i])?':'+this[i]:'';
								break;
							case 'hash':
								str += (!!this[i])?'#'+this[i]:'';
								break;
							case 'extention':
								str += (!!this[i])?'.'+this[i]:'';
								break;
							case 'width':
								str += (!!this[i])?'_'+this[i]+'x':'';
								break;
							case 'height':
								if (!!this[i]) str+=(!!this.width)?this[i]:'_x'+this[i];
								break;
							default:
								str+=(!!this[i])?this[i]:'';
						}
					}
					return str;
				}
			};
		}
	};
	
/*Скрипт для нетипового блока галереи*/
	var BlockGallery = {
		add : function(gallery){
			this.resizeGallery(gallery);
			this.collection.push(gallery);/*
alert(gallery.length);*/
			var _this = this; 
			if (this.collection.length == 1)
				UWUTILS.loadList.push(function (){
					var div = document.getElementsByTagName('div');
					var places = [];
					for (var i = 0; i <div.length; i++)
						if (div[i].className == 'gallery'){
							places.push(div[i]);
						}
					
					for (var i = 0; i < places.length; i++){
						_this.createGallery(places[i], _this.collection[i]);
					}
				});
		},
		resizeGallery : function(gallery){
			var dir = {}, x, k;
			if (!!UWCONST.gallery.width) dir.width = UWCONST.gallery.width;
			if (!!UWCONST.gallery.height) dir.height = UWCONST.gallery.height;
			
			for (var i = 0; i < gallery.length; i++)
			{
				for (var j in dir)
				{
					if (gallery[i][j] > dir[j])
					{
						x = UWUTILS.url(gallery[i].url);
						x[j] = dir[j];
						gallery[i].resurl = x.url();
						
						k = (j=='width')?'height':'width';
						if (j=='height' && !!dir[k]) gallery[i][j] = dir[j];
							
						gallery[i][k] = parseInt(gallery[i][k]*(dir[j]/gallery[i][j]));
						gallery[i][j] = dir[j];
					}
				}
			}
			
			
	
		},
		getBoxSize: function(gallery){
			var r = {width: 0, height: 0};
			for (var i in r)
				if (UWCONST.gallery[i] != 0)
					r[i] = UWCONST.gallery[i];
				else
					for (var j = 0; j < gallery.length; j++)
						if (r[i] < gallery[j][i])r[i]=gallery[j][i];
			return r;
			
		},	
		createGallery : function(place, gallery){
			var _this = this;

			var box = _this.getBoxSize(gallery);
			var frame = {};
			frame.width = UWCONST.gallery.imagesPerFrame * (box.width + 2*UWCONST.gallery.border) + (UWCONST.gallery.imagesPerFrame - 1)*UWCONST.gallery.gap;
			frame.height = box.height + 2*UWCONST.gallery.border;

			var wrapper = document.createElement("div");
			wrapper.className = "wrapper";
			
			var captions = document.createElement('div');
			captions.className='captions';
			
			if (UWCONST.gallery.captions == 'top') place.appendChild(captions);
			
			place.appendChild(wrapper);
			
			place.style.width = frame.width + 'px';
			
			var index = 0;
			var last_index = parseInt(gallery.length / UWCONST.gallery.imagesPerFrame) - 1;
			var remainder = gallery.length % UWCONST.gallery.imagesPerFrame;
			if (remainder) last_index++;
			
			var sumwidth = 0;
			var block = false;
			
			var titles = new Array();
			for (var i = 0; i < gallery.length; i ++)
			{
				var cur_page = Math.floor(i / UWCONST.gallery.imagesPerFrame);
				if(! titles[cur_page])
				{
					title_span = document.createElement('span');
					title_span.style.position = 'absolute';
					title_span.style.left = (frame.width * cur_page) + 'px';
//					wrapper.appendChild(title_span);
					titles[cur_page] = title_span;
				}
				if(gallery[i].title)
				{
					titles[cur_page].innerHTML = gallery[i].title;
				}

				var node = document.createElement('img');
				
				node.src = (gallery[i].resurl == undefined)? gallery[i].url : gallery[i].resurl;
				node.style.position = 'static';
				node.style.cssFloat = 'left';
				
				var delta = {};
				delta.x = box.width - gallery[i].width;
				delta.y = box.height - gallery[i].height;
				delta.xerr = delta.x % 2;
				delta.yerr = delta.y % 2;
				delta.x = parseInt(delta.x / 2);
				delta.y = parseInt(delta.y / 2);
				
				var gap = ((i+1) % UWCONST.gallery.imagesPerFrame)? UWCONST.gallery.gap : 0;

				node.style.marginLeft = delta.x + 'px'; 
				node.style.marginRight = delta.x + delta.xerr + gap + 'px';
				node.style.marginTop = delta.y + 'px'; 
				node.style.marginBottom = delta.y + delta.yerr + 'px';

				if (!!UWCONST.gallery.border)
					node.style.borderWidth = UWCONST.gallery.border + 'px';
				
				if (UWCONST.gallery.originalView && gallery[i].resurl!=undefined)
				{
					var  a = document.createElement('a');
					a.setAttribute('href', gallery[i].url);
					a.setAttribute('title', gallery[i].caption);
					a.appendChild(node);
					
					function cl(p){
						return function(){photoGallery.addImage(p); return false;};
					}
					
					a.onclick = cl(a);
					wrapper.appendChild(a);
				}else{
					wrapper.appendChild(node);
				}

			}

			wrapper.style.width = frame.width*gallery.length + "px";
			wrapper.style.overflow = "hidden";

			wrapper.style.position= "relative";
			wrapper.style.left= 0;
		
			place.style.position = "relative";
			place.style.overflow = "hidden";
			
			if (UWCONST.gallery.captions == 'bottom') place.appendChild(captions);
			
			var navibar = document.createElement('div');
			navibar.className="navigation";
			
			place.appendChild(navibar);
			
			updateNavigation();
			updateCaptions();
			

			var scrollStep = parseInt(frame.width * UWCONST.gallery.scrollK);
			//var scrollStep = 150;
			var interval = 100;
			var clear = null;
			
			function updateCaptions()
			{
				if (UWCONST.gallery.captions != 'bottom' && UWCONST.gallery.captions != 'top' ) return;
				captions.innerHTML = '';
				var n =  UWCONST.gallery.imagesPerFrame;
				
				//n = (remainder == 0)? UWCONST.gallery.imagesPerFrame : remainder;
				var n =  (remainder != 0 && index==last_index)? remainder : UWCONST.gallery.imagesPerFrame;  
				
				var str = ''
				for (var i = 0; i < n; i++)
				{
					
					//captions.innerHTML += '<p class="caption"';
					str += '<p class="caption"';
					
					if (UWCONST.gallery.capAutoPlacement)
					{
						str += ' style="float: left; width: ' + box.width  + 'px;';
						str += ' padding-left: ' + UWCONST.gallery.border + 'px; ' +  ' padding-right: ' + UWCONST.gallery.border + 'px;';
						if (i < n-1) str+= ' margin-right: ' + UWCONST.gallery.gap + 'px;';
						str += '">';
					}
					
					str += '' + gallery[UWCONST.gallery.imagesPerFrame*index + i].title + '</p>';
				}
				captions.innerHTML=str;
			}

			function updateNavigation()
			{
				switch(UWCONST.gallery.navigation)
				{
				case 'pager':
					if (UWCONST.gallery.navigation != 'pager') return;

					var pager = {};
					pager.size = UWCONST.gallery.pagerSize;
					
					pager.firstIndex = (index - pager.size > 0)? index - pager.size : 0;
					pager.lastIndex = index + pager.size*((pager.firstIndex)?1:2);
					if (pager.lastIndex > last_index)pager.lastIndex  = last_index; 
					
					dots = {};
					dots.left = {};
					dots.right = {};
					
					edge = {};
					edge.left = {};
					edge.right = {};
					
					edge.right.flag = (pager.lastIndex < last_index) ? true : false;
					edge.left.flag = (pager.firstIndex  > 0) ? true : false;
					
					edge.size = UWCONST.gallery.pagerEdgeSize;


					if (edge.right.flag)
					{
						edge.right.lastIndex = last_index;
						edge.right.firstIndex = (pager.lastIndex < (last_index - (edge.size - 1))) ? last_index - (edge.size - 1) : pager.lastIndex + 1;
					}
					
					if (edge.left.flag)
					{
						edge.left.firstIndex = 0;
						edge.left.lastIndex = ((edge.size - 1) < pager.firstIndex)? edge.size - 1: pager.firstIndex - 1;

					}
					
					dots.left.flag = (edge.size < pager.firstIndex)? true : false;
					dots.right.flag = (pager.lastIndex < (last_index - edge.size))? true : false;
					
					if (dots.left.flag)
					{
						 dots.left.node = document.createElement('li');
						 if (pager.firstIndex == edge.size + 1)
						 {
							 dots.left.node.appendChild(document.createTextNode(edge.size + 1));
							 dots.left.node.onclick = position;
						 }else{
							 dots.left.node.appendChild(document.createTextNode('…'));
						 }
					}
					
					if (dots.right.flag)
					{
						dots.right.node = document.createElement('li');
						 if (pager.lastIndex == last_index - edge.size- 1)
						 {
							 dots.right.node.appendChild(document.createTextNode(last_index-edge.size + 1));
							 dots.right.node.onclick = position;
						 }else{
							 dots.right.node.appendChild(document.createTextNode('…'));
						 }
					}

					var pagerNode = document.createElement("ul");
					pagerNode.className='pager';
					
					node = document.createElement('li');
					node.appendChild(document.createTextNode('<'));
					node.className="back";
					if (index == 0) node.className="back noactive";
					node.onclick = back;
					pagerNode.appendChild(node);				
					

					if (edge.left.flag)
					{
						for (var i = edge.left.firstIndex; i <= edge.left.lastIndex; i++)
						{
							 node = document.createElement('li');
							 node.appendChild(document.createTextNode(i + 1));
							 node.onclick = position;
							 pagerNode.appendChild(node);
						}
					}
					if (dots.left.flag) pagerNode.appendChild(dots.left.node);
					
					
					for (var i = pager.firstIndex,node; i <= pager.lastIndex; i++)
					{
						 node = document.createElement('li');
						 node.appendChild(document.createTextNode(i + 1));
						 if (i == index)
							node.className = 'selected';
						 else
							 node.onclick = position;
						 
						 pagerNode.appendChild(node);

					}

					if (dots.right.flag) pagerNode.appendChild(dots.right.node);
					
					if (edge.right.flag)
					{
						for (var i = edge.right.firstIndex; i <= edge.right.lastIndex; i++)
						{
							 node = document.createElement('li');
							 node.appendChild(document.createTextNode(i + 1));
							 node.onclick = position;
							 pagerNode.appendChild(node);
						}
					}
					
					node = document.createElement('li');
					node.appendChild(document.createTextNode('>'));
					node.onclick = next;
					node.className='back';
					if (index == last_index) node.className="next noactive";
					pagerNode.appendChild(node);						
					
					if (navibar.firstChild)
						navibar.replaceChild(pagerNode, navibar.firstChild);
					else
						navibar.appendChild(pagerNode);		
					
					break;
				
				case 'player':
					var player = document.createElement('ul');
					var text = UWCONST.gallery.playerBtnText;
					player.className='player';
					
					player.innerHTML += '<li class="first'+((index==0)?' noactive':'')+'">'+((text)?'<span>|&lt;</span>':'')+'</li>';
					player.innerHTML += '<li class="back'+((index==0)?' noactive':'')+'">'+((text)?'<span>&lt;</span>':'')+'</li>';
					player.innerHTML += '<li class="next' + ((index==last_index)?' noactive':'') + '">'+((text)?'<span>&gt;</span>':'')+'</li>';
					player.innerHTML += '<li class="last' + ((index==last_index)?' noactive':'') +  '">'+((text)?'<span>&gt;|</span>':'')+'</li>';

					player.childNodes[0].onclick = first;
					player.childNodes[1].onclick = back;
					player.childNodes[2].onclick = next;
					player.childNodes[3].onclick = last;
					
					if (navibar.firstChild)
						navibar.replaceChild(player, navibar.firstChild);
					else
						navibar.appendChild(player);	
					
					break;

				default:
					break;

				}
				
			}
				

			
			function abstractNext(pos)
			{
				var k = Math.abs(pos - index);
				
				var left = wrapper.style.left;
				left = parseInt(left.match(/-?\d+/));
				
				var next_left = -pos*frame.width; 
		
				if (Math.abs(left - next_left) > k*scrollStep)
				{
					left = (pos-index > 0)?left - k*scrollStep : left + k*scrollStep;
					wrapper.style.left =  left + 'px';
					return false;
				}
				
				index = pos;
				wrapper.style.left = next_left + 'px';
				window.clearInterval(clear);
				updateNavigation();
				updateCaptions();
				block=false;
			}
			
			
			function position()
			{
				var pos = parseInt(this.childNodes[0].nodeValue);
				if ((pos-1) == index) return;
			
				if (block==false) 
					block=true;
				else
					return;
				
				captions.innerHTML='';
				clear = window.setInterval(function(){abstractNext(pos-1);}, interval);
			}
		
			function next()
			{
				if (index == last_index) return;
				if (block==false) 
					block=true;
				else
					return;
				
				captions.innerHTML='';
				clear = window.setInterval(function(){abstractNext(index + 1);}, interval);
			}
		
			function back()
			{
				if (index == 0) return;
				
				if (block==false) 
					block=true;
				else
					return;

				captions.innerHTML='';
				clear = window.setInterval(function(){abstractNext(index - 1);}, interval);
			}
			
			function first()
			{
				if (index==0)  return;
				
				if (block==false) 
					block=true;
				else 
					return;
				
				captions.innerHTML='';
				clear = window.setInterval(function(){abstractNext(0);}, interval);
			}
			
			function last()
			{
				if (index==last_index)  return;
	
				if (block==false) 
					block=true;
				else 
					return;
				
				captions.innerHTML='';
				clear = window.setInterval(function(){abstractNext(last_index);}, interval);
			}

		},
		collection : []
	}

//--------------------------------------------------------------------------
//	Загрузчики скриптов
//--------------------------------------------------------------------------
	
	/* for Mozilla/Opera9 */
	if (document.addEventListener) {
	    document.addEventListener("DOMContentLoaded", function(){UWUTILS.DOMLoadHandler()}, false);
	}

	/* for Internet Explorer */
	/*@cc_on @*/
	/*@if (@_win32)
	    document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
	    var script = document.getElementById("__ie_onload");
	    script.onreadystatechange = function() {
	        if (this.readyState == "complete") {
	            UWUTILS.DOMLoadHandler(); // call the onload handler
	        }
	    };
	/*@end @*/

	/* for Safari */
	if (/WebKit/i.test(navigator.userAgent)) { // sniff
	    var _timer = setInterval(function() {
	        if (/loaded|complete/.test(document.readyState)) {
	        	UWUTILS.DOMLoadHandler(); // call the onload handler
	        }
	    }, 10);
	}

	/* for other browsers */
	(function(){
		var t = window.onload;
		window.onload = function(){
			if (typeof t == 'function') t();
			UWUTILS.DOMLoadHandler();
		}
	})();
