
(function($) {
	"wedia.wxm.screenLocker".namespace(function(){
		
		var $lockingDiv, uploadProgresses = {}, default_message;
		
		function _getDefaultMessage() {
			if(typeof default_message === "undefined") {
				default_message = boi18n.getMessage("/bov3/wxm", "wxm.default.screenlocker.message");
			}
			return default_message;
		}
		
		function _getMessage(val) {
			if(_isString(val) && val.length > 0) {
				return val;
			}
			return _getDefaultMessage();
		}
		
		function _isString(val) {
			return typeof val === "string";
		}
		
		function _build() {
			$lockingDiv = $("<div></div>").addClass("wxm-screenlocker").hide().appendTo($("body"));
			$.each([0,10,20,30,40,50,60,70,80,90,100], function(index, item){
				uploadProgresses[""+item] = "wxm-screenlocker-wait-progress progress-bar-" + item;
			});
		}
		
		function _lock(message) {
			$lockingDiv.show();
			_message();
		}
		
		function _unlock() {
			$lockingDiv.hide();
		}
		
		function _message(message, options) {
			if(! _isVisible()) {
				$lockingDiv.show();
			}
			options = $.extend({
				className : "wxm-screenlocker-default-wait"
			}, options || {});
			$lockingDiv.empty().append($("<p></p>").append($("<span class=\"wxm-screenlocker-wait\"></span>").addClass(options.className).text(_getMessage(message))));
			
		}
		
		function _progress(progress, message) {
			if(! _isVisible()) {
				$lockingDiv.show();
			}
			_message(message || $lockingDiv.find("p>span").text(), {
				className: uploadProgresses["" + Math.min(Math.max(0, (Math.floor(progress*10) * 10)), 100)]
			});
		}
		
		function _isVisible() {
			return $lockingDiv.is(":visible");
		}
		
		$(document).ready(_build);
		
		return {
			lock: _lock,
			unlock: _unlock,
			message: _message,
			progress: _progress,
			isVisible: _isVisible
		};
	}());
	
})(jQuery);
