CoreErrorHandling = {
	
	idLength: 0,

	displayFieldError: function(errorMessageElement, field) {

		if(typeof(errorQueue) == 'undefined') { var errorQueue = []; }

		var numberElementIdentifier;
		if($(field).parents('body').find('.c16').length) {
			this.idLength = 3;
			numberElementIdentifier = 'EM';
		} else {
			this.idLength = 4;
			numberElementIdentifier = 'p';
		}
		if(errorMessageElement[0].innerHTML != "") {
					
			var errorMessageText = errorMessageElement[0].innerHTML;
			var errorLine = errorMessageElement.attr('for').substr(0,this.idLength);
			var countIdenticalLineMessages = (errorMessageElement.attr('for').startsWith(numberElementIdentifier)) ? $("#alertbar ul li[id~='" + errorLine + "']:contains('" + errorMessageText + "')").length : 0;
			var errorMessageId = "error-" + errorMessageElement.attr('for');
			if (countIdenticalLineMessages < 1) {
				if(!$("#alertbar ul li[id='" + errorMessageId + "']").length) {
					var elem = $("<li id='" + errorMessageId + "' class='error' />");
				} else {
					var elem = $("#alertbar ul li[id='" + errorMessageId + "']");
				}
				var errorContainerHTML = "<span class='hide'>Error - <\/span>" + errorMessageElement[0].innerHTML;		
				elem.html(errorContainerHTML);
				errorQueue.push(elem);
				var idLength = this.idLength;
				// this timeout is to remove an IE JS DOM bug caused by its poor rendering where IE would focus the wrong element and allow it to be edited, regardless of what it was
				setTimeout(function() {
					$(errorQueue).each(function() {
						if(!$("#alertbar ul li[id~='" + $(this).attr('id').substr(0, idLength) + "']:contains('" + $(this).text() + "')").length) {
							$('#alertbar ul').append($(this));
						}
					});
					if($("#alertbar ul li.error").length) { window.scrollTo(0,0); }

					/* Code bock fixes calendar appearing in wrong place because of DOM manipulation */
					if($("#error-firstdrawcheckCalendarInput").length) {
						var offset = $("#firstdrawcheckCalendarInput").offset();
						var top = offset.top + $("#firstdrawcheckCalendarInput").outerHeight();
						$("#ui-datepicker-div").css("top",  top);
					}
					if($("#error-lastdrawcheckCalendarInput").length) {
						var offset = $("#lastdrawcheckCalendarInput").offset();
						var top = offset.top + $("#lastdrawcheckCalendarInput").outerHeight();
						$("#ui-datepicker-div").css("top",  top);
					}
					/* end block */

				}, 100);
			} else {
				var currentLineList = [];
				var newErrorLineId = "lineerror-" + errorMessageElement.attr('for').substr(0,this.idLength);   
				if(!$("#alertbar ul li[id='" + newErrorLineId + "']").length) {
					currentLineList.push($("#alertbar ul li[id^='error-" + errorLine + "']:contains('" + errorMessageText + "')").attr("id").substr(6,6));
					$("#alertbar ul li[id^='error-" + errorLine + "']:contains('" + errorMessageText + "')").attr("id", newErrorLineId);	
				}
				
				if($("#alertbar").data(errorLine)) { currentLineList = $("#alertbar").data(errorLine); }
			
				if(currentLineList.indexOf(errorMessageElement.attr('for')) == -1) { currentLineList.push(errorMessageElement.attr('for')) };
				$("#alertbar").data(errorLine, currentLineList);
			}
			CoreErrorHandling.updateErrorSummary();
		};
	},

	updateErrorSummary: function() {
		$("li[id^='formerrmsgcontainer'], #jserrmsgcontainer").hide();
		$('#marketingmess2container, #customermesscontainer').addClass('hide');
	},
	
	success: function(errorMessageElement) {
		$('#alertbar li[id="error-' + errorMessageElement.attr('for') + '"]').remove();	
		
		var errorLine = errorMessageElement.attr('for').substr(0,this.idLength);
		
		if($("#alertbar").data(errorLine)) {
			
			if(($("#alertbar").data(errorLine).length >= 1) && ($("#alertbar").data(errorLine).indexOf(errorMessageElement.attr("for")) != -1)) {
				var arrayPos = $("#alertbar").data(errorLine).indexOf(errorMessageElement.attr("for"));
				$("#alertbar").data(errorLine).splice(arrayPos, 1);
			}
			if ($("#alertbar").data(errorLine).length < 1){
				$("#alertbar").removeData(errorLine);
				$('#alertbar li[id="lineerror-' + errorLine + '"]').remove();
			}
		}
		
		if ($("#alertbar li.error").length<1) { $('#marketingmess2container, #customermesscontainer').removeClass('hide'); }
   },
	
	highlightError: function(element) {
		if ($(element).hasClass('hiValParent2-playslip')) {
			$(element).parent().parent().addClass('error');
			$(element).parent().addClass('error');
		} else if ($(element).hasClass('hiValParent3-playslip')) {
			$(element).parent().parent().parent().addClass('error');
			$(element).parent().addClass('error');
		} else if ($(element).hasClass('hiValParent3')) {
			$(element).parent().parent().parent().addClass('error');
		} else if ($(element).hasClass('hiValParent2')) {
			$(element).parent().parent().addClass('error');
		} else if ($(element).hasClass('hiValParent1')) {
			$(element).parent().addClass('error');
		} else if ($(element).hasClass('drawselect')) {
			$(element).parents('.step1').addClass('noplay');
		}
		$(element).addClass('error');
		setTimeout(function() { $(element).parents('form').find('#playsliplist input.error:first').focus().val(''); });
	},
	
	unhighlightError: function(element) {
		if ($(element).hasClass('hiValParent2-playslip')) {
			$(element).parent().removeClass('error');
			var topParent = $(element).parent().parent();
			if(topParent.find("li.error").length == 0) {
				topParent.removeClass('error');
			}
		} else	if ($(element).hasClass('hiValParent3-playslip')) {
			$(element).parent().removeClass('error');
			var topParent = $(element).parent().parent().parent();
			if(topParent.find("li.error").length == 0) {
				topParent.removeClass('error');
			}
		} else if ($(element).hasClass('hiValParent3')) {
			$(element).parent().parent().parent().removeClass('error');
		} else if ($(element).hasClass('hiValParent2')) {
			$(element).parent().parent().removeClass('error');
		} else if ($(element).hasClass('hiValParent1')) {
			$(element).parent().removeClass('error');
		} else if ($(element).hasClass('drawselect')) {
			$(element).parents('.step1').removeClass('noplay');
		}
		if($(element).hasClass('error')) {
			$(element).removeClass('error');
		}
	}
}
