(function (window) {
	var layer = window.layer || {},
		document = window.document;
	
	(function(){
		function loadFile() {
			try {
				var s = document.createElement('script');
				s.src = layer.js + arguments[0] + '.js';
				s.setAttribute('async', 'true');
				document.documentElement.firstChild.appendChild(s);
			}
			catch(e) {
				
			}
		}
		
		function loader() {
			var files = [],
				func,
				js,
				i;
				
			for (var i = 0; i < arguments.length; i++) {
				var arg = arguments[i];
				
				switch (typeof arg) {
					case 'string':
						files.push(arg);
						break;
					case 'function':
						func = arg;
						break;
					default:
				}
			}
			
			for(js in files) {
				loadFile(files[js]);
			}
			
			if(func) { 
				func.call(layer);
			}
		}
		
		function overlay(id, params) {
			var $container = $('.ui-overlay-container'),
				$block = $('.ui-overlay-block'),
				$inner = $('.ui-overlay-inner'),
				$overlay = $('.ui-overlay-mask'),
				$content = $('.ui-overlay-content'),
				$loading = $('img', $overlay);
			
			var $box = $(document.getElementById(id)),
				$html = '',
				params = params || {};
	
			function open() {
				$loading.show();
						
				$overlay.fadeIn(function(){
					if($box.length) {
						var $elm = $(document.createElement('div'));
						$elm.append($box.show());
						$html = $elm.remove().html();
						init();
					} else {
						$.ajax({
							url: params.url || '?',
							type: 'get',
							data: params.data || {},
							dataType: 'json',
							success: function(R) {
								if(R.html) {
									$html = R.html;
									init();
								}
								if(R.redir) {
									window.location.href = R.redir;
								}
							},
							error: function(E) {
								close();
							}
						});
					}
				});
			}
			
			function init() {
				$container.show();
				$loading.hide();
				$content.html($html);
				
				$(document).on('click.overlay', function(e){				
					$t = $(e.target);
					if(!$t.closest($inner).length || $t.closest('.ui-layer-close').length) {
						e.preventDefault();
						close();
					}
				});
		
				$inner.css({ top: '50%', 'margin-top': ($content.children().height()/2 + 30) * -1 });
				
				if(params.init) {
					params.init.call($(document.getElementById(id)));
				}
			}
			
			function close() {
				$container.add($overlay).hide();
				$(document).off('click.overlay');
			}
			
			open();
		}


		layer.loader = loader;
		layer.overlay = overlay;
	}());
}(window));

$(document).ready(function() {
	// captcha
	$("#ChangeCaptcha, IMG#captcha").on('click', function(e){ 
		var $captcha = $('IMG#captcha');
		$captcha.attr('src', '/captcha.php?' + Math.random()); 
	});

	// spoiler
	$('.tag-option').live('click', function(e) {
		e.preventDefault();
		
		var $this = $(this),
			$parent = $this.parents('.tag-hide');
			
		$('.tag-content', $parent).toggle();
	});
	
	$("#ButtonLogin").on('click', function(e){
		e.preventDefault();
		
		var $username = $('#Login input[name=username]');
		layer.overlay('Login', {
		    url: '/layers.php',
		    data: {
		    	open: 'login'
		    },
		    init: function() {
		    	$('input[name=username]', this).focus();
		    }
		});
	});
	
	layer.loader(function(){
		var	$messenger = $('.o-messenger');
	
		$messenger.on('click', function(e){
			e.preventDefault();
			
			var id = $(this).data('receiver');
			
			layer.overlay('Messenger' + id, {
				url: '/layers.php',
				data: {
					open: layer.auth ? 'messenger' : 'login',
					receiver: id
				}
			});
		});
	});
});

jQuery.fn.extend({
    tabs: function() {
    	var $box = $(this),
    		$tabs = $('.ui-tabs', $box),
    		$container = $('.ui-tabs-container', $box),
    		$tab = $('> LI', $tabs),
    		$block = $('> LI', $container);
    	
    	window.tabs = {};
    		
    	$tab.on('click', function(e){
    		e.preventDefault();
    		
    		var $this = $(this),
    			active = $this.hasClass('active'),
    			loaded = $this.hasClass('loaded'),
    			index = $this.index(),
    			fn = $this.data('call');
    		
			if(!active && !loaded && fn && window.tabs[fn]) {
				window.tabs[fn].call(this, $block.eq(index));
			}
			
			$tab.add($block).filter('.active').removeClass('active');
			$this.add($block.eq(index)).addClass('active');
    	});
    }
});
