$.include(JS_URL_BASE + 'jquery/jquery.metadata.js');
$.include(JS_URL_BASE + 'jquery/jquery.blockUI.js');

$.include(JS_URL_BASE + 'produtos/busca_lateral.js');

var App = {
	init: function () {
		jQuery.metadata.setType('elem', 'script');

		if (typeof(humanMsg) != 'undefined') {
			jQuery.extend(humanMsg.defaults, {
				timeout: 7000,
				timeoutEvents: 3000
			});
	
			humanMsg.setup(null, 'Mensagens anteriores');
		}

		$.blockUI.defaults.overlayCSS = { backgroundColor: '#000', opacity: 0.7 };
		$.blockUI.defaults.displayBoxCSS = { width: '400px', height: '400px', top:'50%', left:'50%', border: 'solid 1px #555', backgroundColor: '#FFF' };
		$.blockUI.defaults.pageMessageCSS = { width:'250px', margin:'-50px 0 0 -125px', top:'50%', left:'50%', backgroundColor:'#fff', border: 'solid 1px #555' };
	},

	flash: function (message, className, url) {
		if (className) {
			var classNames = className.split(/\s+/);
			var types = [];
			var status = 'message';
			
			for (var i in classNames) {
				if (typeof classNames[i] === 'string') {
					i = classNames[i];
					var value = /^t:(.+)$/.exec(i);
					if (value && value[1]) {
						types.push(value[1]);
					} else {
						status = i;
					}
				}
			};
			
			for (var type in types) {
				if (typeof types[type] === 'string') {
					type = types[type];
	
					App.flash.bind(type, App.flash.display);
		
					App.flash.trigger(type, [type, status, message, className, url]);
				}
			};

		}
		//return App.flash.display(message, className, url);
	},
	
	url: function (url, opts) {
		if (typeof url === 'object' || !url) {
			opts = url;
			url = '';
		}
		/*if (url === '/') {
			url = URL_BASE;
		}*/
		var re = new RegExp("^" + URL_BASE);
		
		if (url && url.substr(0, 1) === '/' && !re.test(url)) {
			url = URL_BASE + url;
		};
		if (typeof url === 'undefined' || url === '') {
			url = App.url(window.location.href);
		};
		
		var uri = new ParseUri(url);

		for (var i in opts) {
			if (uri[i]) {
				uri[i](opts[i]);
			}
		};
		
		return uri.source();
	}
};

window.App = App;

jQuery.extend(App.flash, {
	display: function (e, type, status, message, className, url) {
		if (App.flash._cancelDisplay) {
			delete App.flash._cancelDisplay;
			return;
		}
		/*if ($('#flashMessage').size() == 0) {
			if (App.Home.is) {
				$('#conteudoHome').prepend('<div id="flashMessage" class="flash"></div>');
			} else {
				if ($('#conteudo > .blocoConteudo').size() == 0) {
					$('#conteudo').prepend('<div id="flashMessage" class="flash"></div>');
				} else {
					$('#conteudo > .blocoConteudo').prepend('<div id="flashMessage" class="flash"></div>');
				}
			}
		}

		var flashDiv = $('#flashMessage').get(0);
		
		var p = $(flashDiv).append('<p class="' + className + '">' + message + '</p>').find('p:last-child').get(0);
		
		setTimeout(App.flash.hide(p, true), 8000);*/
		
		if (humanMsg) {
			humanMsg.displayMsg('<p class="' + className + '">' + message + '</p>');
		}
		
		$(App.flash._events).unbind(type, App.flash.display);
	},
	
	cancelDisplay: function () {
		App.flash._cancelDisplay = true;
	},
	
	// Curryed function
	hide: function (element, getCurry) {
		var curry = function () {
			if (element) {
				$(element).remove();
			}
		};
		
		if (!getCurry) {
			curry();
		} else {
			return curry;
		}
	},
	
	bind: function (type, data, fn) {
		if (!App.flash._events) {
			$('body').append('<div id="App_Flash_Events"></div>');
			App.flash._events = $('#App_Flash_Events').hide().get(0);
		};
		
		return $(App.flash._events).bind(type, data, fn);
	},
	
	one: function (type, data, fn) {
		if (!App.flash._events) {
			$('body').append('<div id="App_Flash_Events"></div>');
			App.flash._events = $('#App_Flash_Events').hide().get(0);
		};

		var ret = $(App.flash._events).one(type, data, fn);
		return ret;
	},
	
	unbind: function(type, data) {
		return $(App.flash._events).unbind(type, data);
	},
	
	trigger: function (type, data) {
		if (App.flash._events) {
			return $(App.flash._events).trigger(type, data);
		}
	}
});

jQuery(App.init);