/*
  Using:

  $.modal({
				'loadUrl': '<?php echo url_for('@hotel_add_cotraveler'.'?region='.$hotel->getUrlRegion().'&slug='.$hotel->getSlug()) ?>',
				'template': '<div class="l-popup l-popup_add_travel ui-modal-box" style="margin:0 0 0 -430px;"><div class="l-popup__close"><a href="#">Выйти<i></i></a></div><div class="l-popup__i"></div></div>'
			});
  или не ajax
    $.modal({
          'content': '<b>Hello</b> world!'
    });
    
  
	$.modal('close', {
		complete: function() {
			if (typeof(updCotravelersList) == 'function') {
				updCotravelersList();
			}
		}
	}); 
  
*/

(function($) {
	$.modal = function(exec, options) {
		
		if (options == undefined) {
			options = exec;
			exec = undefined;
		}
		
		this.options = {
			id: 'ui-modal-window',
			noCache: false,
			noScroll: true,
			placeInCenter: true
		};
		
		this.options = $.extend(this.options, options);
		var self = this;
		var _container_selector = (self.options.container === undefined) ? '.l-popup__i' : self.options.container;
			
		this.instance = {
			
			close: function(_o) {
				
				if (_o !== undefined)
					if (typeof(_o.onClosing) == 'function')
						if(!_o.onClosing(self))
							return;
				
				$('.l-popup.ui-modal-box').find(_container_selector).slideUp('normal', function() {
        
					$('.ui-modal-box').remove();
					
					if (_o !== undefined) {
						if (typeof(_o.complete) == 'function') {
							_o.complete();
						}
					}
				});
			},
			
			show: function() {			
				var _div = $('<div />').appendTo($('body'));
				_div.addClass('l-tint').addClass('ui-modal-box').attr('id', self.options.id);
				
				var containerClass = 'l-popup_login';
				
				if (self.options.containerClassName !== undefined) {
					containerClass = self.options.containerClassName;
				}        
        
				if (self.options.template === undefined) {
					var _popup = '<div class="l-popup '+containerClass+' ui-modal-box"><div class="l-popup__close"><a href="#" id="l-popup-close-href">Выйти<i></i></a></div><div class="l-popup__t"><i class="l-popup__tl"></i><i class="l-popup__tr"></i></div><div class="l-popup__i"></div><div class="l-popup__b"><i class="l-popup__bl"></i><i class="l-popup__br"></i></div></div>';
				} else {
					var _popup = self.options.template;
				}
				
				_popup = $(_popup);
				_popup.appendTo($('body'));
				
				//position
				if (self.options.placeInCenter) {
					if(document.compatMode=='CSS1Compat')
						var client_size = document.documentElement.clientHeight;
					else
						var client_size =  document.body.clientHeight;

					var scroll = self.pageYOffset 
									|| (document.documentElement && document.documentElement.scrollTop) 
									|| (document.body && document.body.scrollTop);

					var position = (parseInt(client_size / 2) + scroll) - 200;
					
					_popup.css('top',  position + 'px');
				}
				
				var _container = _popup.find(_container_selector);
				
				_popup.find('.l-popup__close a').click(function(_ev, callback) {
					_ev.preventDefault();
					_ev.stopPropagation();
					
					if (typeof(callback) == 'function') {
						self.options.complete = callback;
					}
										
					self.instance.close(self.options);
				});
				
				if (!self.options.noScroll) {
					$.scrollTo('.'+containerClass, 700, {'axis': 'y'});
				}
				
				if (self.options.loadUrl) {
					$( '.l-popup__i', _popup).addClass('loading');
										
					$.ajax({
						url: self.options.loadUrl,
						success: function(_data) {						
							$( '.l-popup__i', _popup).removeClass('loading');
							_container.hide().html(_data).slideDown();
							
							if (self.options.onLoad !== undefined) {
								self.options.onLoad.call(_container);
							}
						},
						error: function (xhr, ajaxOptions, thrownError){
							alert('Произошла ошибка');
						}, 
						cache: self.options.noCache ? false : true
					})
				} else {
					_container.hide();
					if (self.options.content instanceof jQuery) {
						_container.append(self.options.content.show());
					} else {
						_container.html(self.options.content);
					}
					
					if (typeof(self.options.onLoad) == 'function') {
						
						self.options.onLoad.call(_container);
					}
					_container.slideDown();
				}
			}
		};
		
		if (exec !== undefined) {
			if (typeof(self.instance[exec]) == 'function') {
				self.instance[exec](options);
			}
			return;
		}
		
		this.instance.show();
	}
})(jQuery);