/**
 * Spawns error/info dialogs in a FancyBox.
 * @class dtSpawnDialogs
 **/

/*jslint strict:false*/
/*global DT:false*/

DT.CORE.register('dtSpawnDialogs', function (io, $) {
	var my = {
		spawnAll: function () {
			var idp;
			idp = $('.itemDetailPanel');
			if (idp.length) {
				if (idp.data('spawned')) {
					return;
				}
				idp.data('spawned', this.spawn('.error-panel', '.error'));
			} else {
				my.spawn('.error-panel', '.error');
			}
			my.spawn('.info-panel', '.info,.infoLabel');
			my.spawn('.quizContainer .validation-summary', '');
		},
		spawn: function (selector, subSelector) {
			var panel, messages = [], dialog;
			panel = $(selector);
			$.each(panel, function (i) {
				var sub = $(this).find(subSelector), textLength;

				if (!sub.attr('data-shown')) {
				    textLength = $(panel[i]).text().replace(/^\s+|\s+$/g, '').length;
					if ((sub.length && textLength) || (!subSelector && textLength)) {
						messages.push($(panel[i]).html());
					}
					sub.attr('data-shown', 'true');
				}
			});
			if (messages.length) {
				//should be probably joined as paragraphs
				dialog = $('body').append('<div style="display:none"><div id="spawn-this-as-dialog">' + messages.join('<br/>') + '</div></div>');
				$.fancybox({href: '#spawn-this-as-dialog'});
				return true;
			}
			return false;
		}
	};
	return {
		init: function () {
			if (DT.TOOLKIT.isBE) {
				return;
			}
			io.listen([
				DT.CONSTANTS.EVENT_PARTIAL_REFRESH
			], this.handleNotification, this);
			my.spawnAll();
		},
		handleNotification: function (note) {
			if (note.type === DT.CONSTANTS.EVENT_PARTIAL_REFRESH) {
				my.spawnAll();
			}
		}
	};
});
