﻿$jq.namespace('MatchCore');

MatchCore.Delegate = function() {
	var _handlers = [];
	
	return {
		add : function(handler) {
			_handlers.push(handler);
		},
		
		fire : function() {
			for (var i = 0; i < _handlers.length; i++) {
				_handlers[i](arguments);
			}
			_handlers = [];	
		},
		
		count : function() {
			return _handlers.length;
		}
	};
};

MatchCore.ServiceProxy = function(baseUrl) {
	var _baseUrl;
	var _methodName;
	
	if (baseUrl)
		_baseUrl = baseUrl;
		
	return {
		invoke : function(opts) {
			var verb = (opts.verb) ? opts.verb : "GET";
			var dataType = (opts.dataType) ? opts.dataType : "json";
			var proxyUrl = (dataType.toLowerCase() == 'json') ? _baseUrl + '/' + opts.method : _baseUrl + '/' + opts.method + '/' + dataType;
			
			$jq.ajax({
				type: verb,
				url: proxyUrl,
				data: opts.data,
				dataType: dataType,
				success: function(response) {
					if (opts.success)
						opts.success(response);
				},
				error : function (xmlhttp, status, exception) {
					if (opts.failure)
						opts.failure(xmlhttp, status, exception);					
				}
			});
		}
	};
};

MatchCore.Messaging = function() {
	var _messages = null;
	
	var hasMessageSummary = function() {
		return getMessageSummary().length > 0;
	};
	
	var getMessageSummary = function() {
		return $jq('.userMessageSummary');
	};
	
	return {
		reset : function() {
			if (hasMessageSummary) {
				getMessageSummary().html('');
				getMessageSummary().hide();
			}
			
			if (_messages) {
				for (var i = 0; i < _messages.length; i++) {
					var field = $jq('INPUT[@name="' + _messages[i].field + '"]')[0];
					var label = $jq('LABEL[@for="' + _messages[i].field + '"]')[0];
					
					$jq(label).removeClass('invalidFieldLabel');
					$jq(field).removeClass('invalidField');
				}
			}
			
			_messages = null;
		},
		
		show : function(messages) {
			this.reset();
			
			_messages = messages;
			
			if (hasMessageSummary()) {
				getMessageSummary().html('<ul></ul>');
				getMessageSummary().show();
			}

			for (var i = 0; i < messages.length; i++) {
				if (messages[i].Field) {
					var field = $jq('INPUT[@name="' + messages[i].Field + '"]');
					var label = $jq('LABEL[@for="' + messages[i].Field + '"]');
					
					label.addClass('invalidFieldLabel');
					field.addClass('invalidField');
					if (i == 0 && field.length > 0)
						field[0].focus();
				}
				
				if (hasMessageSummary())
					$jq('UL', getMessageSummary()[0]).append('<li>' + messages[i].Text + '</li>');

			}
		}
	};
}();