//aśłłąśó
//console.log();alert=console.log;

/**
	Meteor.ImagePicker.setDefaults({
		photoUploaderURL : "http://localhost/playground/?c=MImagePickerPU",

		photoUploaderStartCallback : function(){
			console.log("blokowanie UI");
			Meteor.ImagePicker.hide();
		},
		photoUploaderCompleteCallback : function(){
			console.log("odblokowanie UI");
		},
		photoUploaderErrorHandler : function(data){
			console.log(data);
		}
	});

	Meteor.ImagePicker.bind($('#imagePickerB'),{
		url : 'index.php?c=MImagePicker',
		pickCallback : function(data){
			$('#images').append('<img src="'+data.src.small+'" />');
		},
		thumbnailSize : 'small'
	});


*/

if(typeof(Meteor) == 'undefined'){ Meteor = {}; }
(function ($){
	Meteor.ImagePicker = (function(){
		var _mainContainer = null;
		var _mainContainerDim = {};
		var _animationInProgress = false;
		var _currentPickCallback = function(data){ };
		
		var defaults = {
			url : 'index.php?c=MImagePicker',
			pickCallback : function(data){ },
			thumbnailSize : 'small',
			closeText : 'zamknij',
			noDescriptionText : 'brak opisu',
			noImagesText : 'Brak fotografii',
			x : 0,
			y : 0,
			descriptionLimt : 20,
			description : true,
			inRow : 3,
			stopClickPropagation : false,
			checkScrollOffsetTop : false,
			button : null,
			metaData : {},
			photoUploaderURL : false,
			photoUploaderStartCallback : function(){
				_mainContainer.find('.MImagePickerImageList').html('trwa ładowanie zdjęcia ...');
			},
			photoUploaderCompleteCallback : function(){},
			photoUploaderErrorHandler : function(){}
		};

		var findPosition = function ( oElement ) {
			if( typeof( oElement.offsetParent ) != 'undefined' ) {
				for( var posX = 0, posY = 0; oElement; oElement = oElement.offsetParent ) {
					posX += oElement.offsetLeft;
					posY += oElement.offsetTop;
					if(defaults.checkScrollOffsetTop){
						posY -= oElement.scrollTop;
					}
				}
				return {x:posX, y :posY };
			} else {
				return {x: oElement.x, y: oElement.y};
			}
		};
		
		var photoSubmiter = function(){
			setInterval(function(){
				var f = _mainContainer.find('.MImagePickerPhotoUploaderForm');
				if(f.find('.MImagePickerPhotoUploaderFile').val() != ''){
					f.submit();
					f.get(0).reset();
				}
				
			}, 100);
		};
		
		var throwException = function(msg){
			throw "Meteor.ImagePicker: " + msg;
		};
		
		return {
			/** 
			*	pokazywanie ImagePickera
			*/
			show : function(options){
				if(_animationInProgress){
					return;
				}
				
							
				_animationInProgress = true;
				var that = this;					
				if(_mainContainer === null) { this.init(options); }
					
					
				//ostawianie opcji
				var tmpOptions = defaults;
				for(var i in options){ tmpOptions[i] = options[i]; }
				options = tmpOptions; 

				_currentPickCallback = options.pickCallback;
				
				//MImagePickerPhotoUploaderShowB
				if(options.photoUploaderURL){
					_mainContainer.find('.MImagePickerPhotoUploaderForm').get(0).reset();
					_mainContainer.find('.MImagePickerPhotoUploaderShowB').show();
					_mainContainer.find('.MImagePickerPhotoUploaderForm').attr('action', options.photoUploaderURL);
				} else {
					_mainContainer.find('.MImagePickerPhotoUploaderShowB').hide();
				}
				
				//pozycjonowanie kontenera
				_mainContainer.css({top : options.y, left : options.x});
				_mainContainer.slideDown(function(){
					_animationInProgress = false;
				});
				
				
				//korekta pozycji				
				var pos = findPosition(_mainContainer.get(0));
				var bodyDim = {
					w : $(document.body).width(),
					h : $(document.body).height()
				};
				
				if( (pos.x + _mainContainerDim.w) - bodyDim.w >= 0 ){
					var korektaX = 20 + (pos.x + _mainContainerDim.w) - bodyDim.w;
					_mainContainer.css({left : options.x - korektaX});
				}
				
				_mainContainer.find('.MImagePickerImageList').html('<br/>&nbsp;Proszę czekać ...');
				$.get(options.url, function(o){
					var data = eval(o);
					var html = '';
					var empty = true;
					for(var i in data){	empty = false; }
					
					if(!empty){
						var counter = 0;
						for(var i in data){
							var opis = options.noDescriptionText;
							var bonusClass = counter%options.inRow === 0 ? 'MImagePickerImageWrapperFirst' : '';
							if(data[i].opis.length>0){
								opis = data[i].opis.length > options.descriptionLimt ? data[i].opis.substr(0, options.descriptionLimt) + '...' : data[i].opis;
							}
							html += '<div id="index' + i + '" class="MImagePickerImageWrapper ' + bonusClass+'"><img class="MImagePickerImage" src="' + data[i].src[options.thumbnailSize] + '"  />'+(options.description ? '<div class="MImagePickerImageDescription">'+opis+'</div>' : '')+'</div>';
							counter ++;
						}
					} else {
						html = '<div class="MImagePickerNoFotoInfo">' + defaults.noImagesText + '</div>';
					}
					_mainContainer.find('.MImagePickerImageList').html(html);
					_mainContainer.find('.MImagePickerImageWrapper').click(function(){
						options.pickCallback(data[this.id.substr(5)], options);
						that.hide();
						return false;
					});
				});
			},
			
			/** 
			*	inicjowanie ImagePickera
			*/
			init : function(args){
				var _options = {
					containerPosition : "absolute"
				};

				if(typeof(args) === "object"){
					for(var i in args){
						_options[i] = args[i];
					}
				}

				if($('#MImagePickerContainer').length > 0){
					throwException('wykryto inną instancję');
				}
				var that = this;
				var photoUploaderHTML = '<form method="post"  enctype="multipart/form-data" action="" class="MImagePickerPhotoUploaderForm" style="display:none; text-align:center; "><input type="file" name="MImagePickerPhotoUploaderFile" class="MImagePickerPhotoUploaderFile" /><a href="#" class="MImagePickerCloseB">'+defaults.closeText+'</a></form>';
				
				$(document.body).append('<div id="MImagePickerContainer"><div class="MImagePickerControlsTop"><a href="#" class="MImagePickerPhotoUploaderShowB">dodaj nowe zdjęcie/logo z komputera</a> <a href="#" class="MImagePickerCloseB">'+defaults.closeText+'</a></div>' + photoUploaderHTML + '<div class="MImagePickerImageList"></div></div>');
				_mainContainer = $('#MImagePickerContainer');
				
				//BGIframe
				if(typeof($.bgiframe) !== 'undefined'){
					_mainContainer.bgiframe();
				}
				
				$(document.body).css('position', 'relative')
				
				//MImagePickerCloseB
				_mainContainer.find('.MImagePickerCloseB').click(function(){
					that.hide();
					return false;
				});
				
				//MImagePickerPhotoUploader			
				_mainContainer.find('.MImagePickerPhotoUploaderShowB').click(function(){
					_mainContainer.find('.MImagePickerPhotoUploaderForm').show();
					_mainContainer.find('.MImagePickerControlsTop').hide();
					return false;
				});
				
				if(defaults.photoUploaderURL){
					if(typeof(Meteor.Util) == 'undefined' || typeof(Meteor.Util.FileUploader) == 'undefined'){
						throwException("brak Meteor.Util.FileUploader");
					}
					Meteor.Util.FileUploader.submit(_mainContainer.find('.MImagePickerPhotoUploaderForm').get(0), {
						onComplete : function(odp){
							defaults.photoUploaderCompleteCallback();
							try {
								_currentPickCallback(eval("(" + odp + ")" ));
							} catch (ex) {
								defaults.photoUploaderErrorHandler(odp)
							}						
							that.hide();
						}
					});	
				}
				_mainContainer.find('.MImagePickerPhotoUploaderForm').submit(function(){
					defaults.photoUploaderStartCallback();
				});
				
				
				_mainContainer.css({
					position : _options.containerPosition,
					overflow : 'auto',
					display : 'none'
				});	

				_mainContainerDim = {
					w : _mainContainer.width(),
					h : _mainContainer.height()
				};
				
				//ukrywanie jeśli kliknieto poza głónym kontenerem
				$("html").click(function (evt) {
					var target = evt.target;
					if($(target).parents('#MImagePickerContainer').length == 0){
						that.hide();
					}
				});	

				photoSubmiter();
			},
			
			/** 
			*	ukrywanie
			*/
			hide : function(){
				if(_animationInProgress || !_mainContainer.is(":visible")){
					return;
				}
				_animationInProgress = true;
				_mainContainer.find('.MImagePickerPhotoUploaderForm').hide();
				_mainContainer.find('.MImagePickerControlsTop').show();	
				_mainContainer.slideUp('fast', function(){
					_animationInProgress = false;
				});		
			},
			
			/** 
			*	bindowanie ImagePickera do przycisku
			*/
			bind : function(button, options, bindOptions){
				//ustawianie opcji			
				var tmpOptions = {};
				for(var i in defaults){ tmpOptions[i] = defaults[i]};				
				for(var i in options){	tmpOptions[i] = options[i];		}
				options = tmpOptions;

				//bindOptions
				if(typeof(bindOptions) == 'undefined'){ bindOptions = {}; }
				bindOptions.offsetX = bindOptions.offsetX || 5;
				bindOptions.offsetY = bindOptions.offsetY || 6;


				var that = this;
				$(button).click(function(){
					var pos = findPosition($(button).get(0));
					pos.x = pos.x >= 0 ? pos.x : 0;
					pos.y = pos.y >= 0 ? pos.y : 0;

					options.x = pos.x + bindOptions.offsetX;
					options.y = pos.y + $(button).height() + bindOptions.offsetY;
					options.button = $(button);
					that.show(options);
					if(defaults.stopClickPropagation){
						return false;
					}
				});
			},

			setDefaults : function(obj){			
				for(var i in obj){	
					defaults[i] = obj[i];		
				}
			}
		};
	})();
	

	
})(jQuery);





