
window.addEvent('domready', function(){
	/*
	var neighbors = $$('#neighbors .location');
	
	if(neighbors && neighbors.length > 0){
		var lwn = new listWrapper({
			'elements': neighbors,
			'container': $('neighbors')
		});
	}
	*/
	/*
	var tags = $$('#menu_tags li');
	
	if(tags){
		var lwt = new listWrapper({
			'elements': tags,
			'container': $('menu_tags'),
			'create_cols': false,
			'col_class': 'menu_column',
			'cols_in_wrap': 3,
			'in_col': 7
		});
	}
	*/
	
	var lastrews = $$('#lastreviews .review');
	
	if(lastrews && lastrews.length > 0){
		var lwn = new listWrapper({
			'elements': lastrews,
			'container': $('lastreviews'),
			'url': '/get/last_reviews/',
			'elementFn': function(el_obj, container){
				var el = new Element('div', {
					'class': 'review short'
				});
				
				new Element('div', {
					'class': 'title',
					'html': '<a href="/mesto'+el_obj.lid+'">'+el_obj.title+'</a>'
				}).inject(el);
				new Element('div', {
					'class': 'msg',
					'html': '<div class="l_mark"><div class="mark_stars">'+generateStars(el_obj.mark)+'</div><div class="mark_fon"><noindex>*****</noindex></div></div><div class="date">'+formatDate(el_obj.timediff, el_obj.created)+'</div><div class="uspic"><img height="25" width="25" title="'+el_obj.username+'" alt="'+el_obj.username+'" src="/users/thmb/'+el_obj.uspic+'"/></div>'+el_obj.shortcut
				}).inject(el);
				new Element('div', {
					'class': 'cb'
				}).inject(el);
				
				this.elements.include(el);
			}
			
		});
	}
	
	var lastcomments = $$('#lastcomments .comment');
	
	if(lastcomments && lastcomments.length > 0){
		var lwn = new listWrapper({
			'elements': lastcomments,
			'container': $('lastcomments'),
			'url': '/get/last_comments/',
			'elementFn': function(el_obj, container){
				var el = new Element('div', {
					'class': 'comment short'
				});
				
				new Element('div', {
					'class': 'title',
					'html': '<a href="/mesto'+el_obj.lid+'/otziv'+el_obj.rid+'#comments">'+el_obj.title+'</a>'
				}).inject(el);
				new Element('div', {
					'class': 'date',
					'html': formatDate(el_obj.timediff, el_obj.created)
				}).inject(el);
				new Element('div', {
					'class': 'user',
					'html': '<img width="25" height="25" src="/users/thmb/'+el_obj.uspic+'" title="'+el_obj.username+'" /><a href="/user'+el_obj.uid+'">'+el_obj.username+'</a>'
				}).inject(el);
				new Element('div', {
					'class': 'msg',
					'html': el_obj.text
				}).inject(el);
				new Element('div', {
					'class': 'cb'
				}).inject(el);
				
				this.elements.include(el);
			}
			
		});
	}
	
	
	
	if(wrapper = $('menu_tags')){
		resizeCols();
		this.addEvent('resize', resizeCols);
		
		/*
		var els = $$('#menu_tags .menu_column li');
		
		var container = new Element('ul', {
			'class': 'tags_container'
		}).inject(wrapper);
		wrapper.addClass('tags_wrapper');
		
		els.each(function(block){
			if(block.get('text') != '')
				block.addClass('tag_block').inject(container);
		});
		
		$$('#menu_tags .menu_column').destroy();
		
		reorderCols();
		this.addEvent('resize', reorderCols);
		*/
	}
	
});

function runNeighborsWrapper(container, lid){
	
	var neighbors = container.getElements('.place');
	
	if(neighbors && neighbors.length > 0){
		
		//var res =/\/mesto(\d+)(\/|$)/.exec(location.href);
		//var lid = res[1];
		
		var lwn = new listWrapper({
			'elements': neighbors,
			'container': container,
			'url': '/get/place_neighbors/?id='+lid,
			'elementFn': function(el_obj, container){
				var el = new Element('div', {
					'class': 'place short'
				});

				var distance = 'в нескольких шагах';
				if(el_obj.distance > 0.09){
					var minutes = (el_obj.distance/4 * 60).ceil();
					distance =  minutes+' '+ruWordByInt(minutes, new Array('минута', 'минуты', 'минут'))+' пешком';
				}
				var tags = '';
				new Hash(el_obj.TAG).each(function(tag){
					if(tags != '')
						tags += ', ';
					tags += tag.val;
				});
				
				new Element('div', {
					'class': 'title',
					'html': '<a href="/mesto'+el_obj.id+'">'+el_obj.title+'</a>'
				}).inject(el);
				new Element('div', {
					'class': 'tags',
					'html': tags
				}).inject(el);
				new Element('div', {
					'class': 'distance',
					'html': distance 
				}).inject(el);
				new Element('div', {
					'class': 'cb'
				}).inject(el);
				
				this.elements.include(el);
			}
		});
	}
}


function generateStars(mark){
	var stars = '';
	for (i=1;i<=mark;i++){
		stars += '*';
	}
	
	return stars;
}

function reorderCols(){
	var els = $$('#menu_tags .tags_container li');
	
	
	var wrapper = $('menu_tags');
	var old_container = $('menu_tags').getElement('.tags_container');
	//var curr_cols = $$('#menu_tags .menu_column');
	
	var container = new Element('ul', {
		'class': 'tags_container'
	}).inject(wrapper, 'top');

	var cont_w = wrapper.getWidth();
	//min-width = 186px
	var cols_num = Math.floor( cont_w / 186);
	var in_col = Math.ceil( els.length / cols_num);
	var col_w = (100 / cols_num) - 4;
	
	
	//var col_blank = curr_cols[0].clone().empty();
	console.log('incol ' + in_col);
	var i=1;
	var col;
	for (i=1;i<=in_col;i++){
		var z=0;
		for (z=0;z<cols_num;z++){
			
			console.log( (i + z*in_col) -1);
			
			if(els[ (i + z*in_col) -1 ])
				els[ (i + z*in_col) -1 ].setStyle('width', col_w+'%').inject(container);
		}
		
	}
	
	old_container.destroy();
	
}


function resizeCols(){
	var els = $$('#menu_tags .menu_column li');
	
	var container = $('menu_tags');
	var curr_cols = $$('#menu_tags .menu_column');
	
	var cont_w = container.getWidth();
	//min-width = 186px
	var cols_num = Math.floor( cont_w / 186);
	var in_col = Math.ceil( els.length / cols_num);
	var col_w = (100 / cols_num) - 4;
	
	if(els.length <= 15 && cols_num > 3)
		return curr_cols.setStyle('max-width', (col_w + 3)+'%');
		
	if(cols_num == curr_cols.length || cols_num < 3 || in_col < 5)
		return true;
	
	
	var col_blank = curr_cols[0].clone().empty();
	
	var i=1;
	var col;
	for (i=1;i<=cols_num;i++){
		col = col_blank.clone().setStyle('width', col_w+'%').inject(container);
		
		var z=0;
		for (z=0;z<in_col;z++){
			if(els[z + ((i-1)*in_col)])
				els[z + ((i-1)*in_col)].inject(col);
		}
	}
	curr_cols.destroy();
	
}



var listWrapper = new Class({

	Implements: [Chain, Events, Options],

	options: {
		'elements': false,
		'in_col': 3,
		'create_cols': true,
		'container': false,
		'col_class': false,
		'cols_in_wrap': 1,
		'duration': 400,
		'transition': Fx.Transitions.Quad.easeInOut,
		'url': null,
		'elementFn': null
	},

	initialize: function(options){
		this.setOptions(options);
		
		this.elements = this.options.elements;
		this.container = $(this.options.container);
		
		this.pagenum = 1;
		this.cols_len = 0;
		
		var this_c = this;
		
		
		if(this.options.url && this.options.elementFn){
			this.new_els = new Array();
			
			this.request = new Request.JSON({
				'url': this.options.url,
				'method': 'get',
				//'async': false,
				'onSuccess': function(JSON){
					
					if(JSON){
						var els = new Hash(JSON);
						
						els.each(this.options.elementFn.bind(this));
						
						if(els.getLength() > 0){
							if(!this.right)
								this.createArrows();
							
							this.right.removeClass('dis');
						}
						this.createCols();
						
						if(this.curr)
							this.next = this.curr.getNext();
					}
					
				}.bind(this)
			});
			
			this.getAjax = true;
		}
		
		
		if( !this.container || (!this.options.create_cols && !this.options.col_class) || (this.options.create_cols && (!this.elements || ( (this.options.in_col >= this.elements.length && !this.options.url ) || (this.options.in_col > this.elements.length && this.options.url) )  )) ){
			this.container.getElements('.list_arws').destroy();
			return false;
		}
		
		this.cols_in_wrap = (this.options.cols_in_wrap.toInt() <= 0) ? 1 : this.options.cols_in_wrap.toInt();
			
		
		this.wrapper = new Element('div', {
			'class':'wrapper',
			'styles':{
				'width': '100%',
				'overflow': 'hidden',
				'position': 'relative'
			}
		
		}).inject( this.container );
		
		
		if(this.options.create_cols)
			this.createCols();
		else{
			var col_els = this.container.getElements('.' + this.options.col_class);
			
			this.cols_len = col_els.length;
			this.cols = new Element('div', {
				'class':'wrapcols',
				'styles':{
					'width': (this.cols_len * 100) + '%'
				}

			}).inject( this.wrapper );
			col_els.inject(this.cols);
			
		}
		
		
		this.curr = this.cols.getFirst().setStyle('display', 'block');
		this.previous = this.curr.getPrevious();
		this.next = this.curr.getNext();
		
		if(this.next)
			this.next.setStyle('display', 'none');
		if(this.previous)
			this.previous.setStyle('display', 'none');
		
		var scroll = new Fx.Scroll(this.wrapper, {
			'wait': false,
			'duration': this.options.duration,
			'transition': this.options.transition,
			'wheelStops': false,
			'onStart': function(){
				this.busy = true;
			},
			'onComplete': function(){
				if(this.next)
					this.next.setStyle('display', 'none');
				if(this.previous)
					this.previous.setStyle('display', 'none');
				
				this.scroll.set(0, 0);
				
				this.scroll.busy = false;
			}.bind(this)
		});
		
		this.scroll = scroll;
		
		if(this.getAjax){
			this.request.send('p='+ (this.cols_len + 1) );
		}
		
		
		window.addEvent('resize', function() {
			if(this.curr)
				scroll.toElement( this.curr );
		}.bindWithEvent(this));
		
		if(!this.container.getElement('.list_arws') && this.cols_len > 1 /*&& (this.cols.getLast().getPosition()['x'] - this.container.getPosition()['x']) > this.wrapper.getWidth()*/)
			this.createArrows();
	
	},
	
	
	
	createCols: function(injecttop){
		var newcols_len = (this.elements.length / this.options.in_col).ceil();
		
		if(!this.cols){
			this.cols = new Element('div', {
				'class':'wrapcols',
				'styles':{
					'width': '200%'
				}
			}).inject( this.wrapper );
		}

		this.cols_len += newcols_len;
		
		var col;
		
		var i=1;
		for (i=1;i<=newcols_len;i++){
			col = this.createCol();
			
			var z=1;
			for (z=1;z<=this.options.in_col;z++){
				if(this.elements.length > 0)
					this.elements.shift().inject( col, ((injecttop) ? 'top' : 'bottom') );
				else
					break;
			}
		}
		
	},
	
	createCol: function(){
		
		return new Element('div', {
			'class':'wrapcol',
			'styles':{
				'float': 'left',
				'width': '50%',
				'display': 'none'
			}
		}).inject( this.cols );
		
	},

	createArrows: function(){
		var la = new Element('div', {
			'class':'list_arws'
		}).inject(this.container, 'top');
		this.left = new Element('img', {
			'class':'larr dis',
			'src':'/spics/blank.gif'
		}).inject(la);
		this.right = new Element('img', {
			'class':'rarr',
			'src':'/spics/blank.gif'
		}).inject(la);
		
		this.addArrowsEvents();
	},
	
	addArrowsEvents: function(){
		
		this.left.addEvent('click', function(e, this_btn) {
			e.stop();
			
			if(this_btn.hasClass('dis') || !this.previous || this.scroll.busy) return;
			
			
			if(this.right.hasClass('dis'))
				this.right.removeClass('dis');
				
			this.next = this.curr;
			this.curr = this.previous.setStyle('display', 'block');
			this.previous = this.curr.getPrevious();
			var pos = this.next.getPosition(this.container);
			this.scroll.set(pos.x, pos.y);
        
			this.scroll.toElement( this.curr );
        
			if(!$chk(this.previous))
				this_btn.addClass('dis');
        
			this.pagenum--;
        
		}.bindWithEvent(this, this.left));
		
		
		
		this.right.addEvent('click', function(e, this_btn) {
			e.stop();
        	
			if( this_btn.hasClass('dis') || !this.next || this.scroll.busy) return;
        	
			if(this.left.hasClass('dis'))
				this.left.removeClass('dis');
        
			this.previous = this.curr;
			this.curr = this.next.setStyle('display', 'block');
			this.next = this.curr.getNext();
        
			this.scroll.toElement( this.curr );
			
			var dis = false;
        
			if(!$chk(this.next) ){
				this_btn.addClass('dis');
				dis = true;
			}
			
			this.pagenum += 1;
        
			if(this.getAjax && dis )
				this.request.send('p='+ (this.cols_len + 1) );
        
		}.bindWithEvent(this, this.right));
		
	}	
	
});