var sitoesModalValidationSettings = {
	errorClass: "mm_input_error",
	errorElement: "div",
	focusInvalid: false,
	highlight: function(element, errorClass, validClass) {
		$(element).addClass(errorClass);
	},
	onfocusout: false,
	onkeyup: false,
	onclick: false,
	showErrors: function(errorMap, errorList) {

		var errorCount = this.numberOfInvalids();
		if (errorCount > 1)
			var errorText = 'errors';
		else
			var errorText = 'error';

		if (errorCount > 0) {
			$('.mm_formmessage').css('display', 'none');
			$('.mm_errormessage').html(errorCount + ' ' + errorText + '.');
			$('.mm_errormessage').css('display', 'block');
		} else {
			$('.mm_errormessage').css('display', 'none');
		}

		for (var i = 0; i < errorList.length; i++) {
			//alert(elementId);
			var elementId = $(errorList[i].element).attr('id');
			var message   = errorList[i].message;

			var errorElement = setErrorMessage(message);

			//var jqElement = $(errorList[i].element);
			var jqElement = $('#' + elementId);

			if (jqElement.length) {

				//$('#' + elementId).parent('li.mm_reqd').addClass('mm_error');

				if (jqElement.hasClass('mm_error_3rd_parent')) {
					jqElement.parent().parent().parent('li').addClass('mm_error');
					//jqElement.parent().parent().parent('li').find('.mm_input_error_container').remove();

				}

				else if (jqElement.parent().hasClass('mm_adjust_asterisk')) {
					jqElement.parent().addClass('mm_error');
					var errorElement = setErrorMessageLower(message);
					//jqElement.parent().parent('li').find('.mm_input_error_container').remove();

				}

				else if (jqElement.hasClass('mm_error_2nd_parent')) {
					jqElement.parent().parent('li').addClass('mm_error');
					//jqElement.parent().parent('li').find('.mm_input_error_container').remove();

				} else {
					jqElement.parent().addClass('mm_error');
					//jqElement.parent().find('.mm_input_error_container').remove();
				}
				jqElement.after(errorElement);

			}
		}

		this.defaultShowErrors();
	},
	errorPlacement: function(error, element) {
		return true;
	},
	unhighlight: function(element, errorClass, validClass) {
		$(element).removeClass(errorClass);
	},
	success: function(errorElement) {
		var htmlFor = $(errorElement).attr('htmlfor');
		//$('#' + htmlFor).parent('li.mm_reqd').removeClass('mm_error');

		if (htmlFor == 'data[User][gender]') {
			htmlFor = 'UserGenderM';
		}

		if ($('#' + htmlFor).hasClass('mm_error_3rd_parent')) {
			$('#' + htmlFor).parent().parent().parent('li').removeClass('mm_error');

		} else if ($('#' + htmlFor).hasClass('mm_error_2nd_parent')) {
			$('#' + htmlFor).parent().parent('li').removeClass('mm_error');

		} else {
			$('#' + htmlFor).parent().removeClass('mm_error');

		}


		//$('.mm_errormessage').css('display', 'none');
	}
};

var sitoesInlineValidationSettings = {
	errorClass: "mm_input_error",
	errorElement: "div",
	focusInvalid: false,
	highlight: function(element, errorClass, validClass) {
		$(element).addClass(errorClass);
	},
	onfocusout: false,
	onkeyup: false,
	onclick: false,
	showErrors: function(errorMap, errorList) {

		var errorCount = this.numberOfInvalids();
		if (errorCount > 1)
			var errorText = 'errors';
		else
			var errorText = 'error';

		if (errorCount > 0) {
			$('.gm_FormMessage').css('display', 'none');
			$('.gm_ErrorMessage').html(errorCount + ' ' + errorText + '.');
			$('.gm_ErrorMessage').css('display', 'block');
		} else {
			$('.gm_ErrorMessage').css('display', 'none');
		}

		for (var i = 0; i < errorList.length; i++) {
			//alert(elementId);
			var elementId = $(errorList[i].element).attr('id');
			var message   = errorList[i].message;

			var errorElement = setErrorMessage(message);

			//var jqElement = $(errorList[i].element);
			var jqElement = $('#' + elementId);

			if (jqElement.length) {
				jqElement.after(errorElement);
				//$('#' + elementId).parent('li.mm_reqd').addClass('mm_error');

				if (jqElement.hasClass('mm_error_3rd_parent')) {
					jqElement.parent().parent().parent('li').addClass('gm_error');
					//jqElement.parent().parent().parent('li').find('.mm_input_error_container').remove();

				} else if (jqElement.hasClass('mm_error_2nd_parent')) {
					jqElement.parent().parent('li').addClass('gm_error');
					//jqElement.parent().parent('li').find('.mm_input_error_container').remove();

				} else {
					jqElement.parent().addClass('gm_error');
					//jqElement.parent().find('.mm_input_error_container').remove();
				}


			}
		}

		this.defaultShowErrors();
	},
	errorPlacement: function(error, element) {
		return true;
	},
	unhighlight: function(element, errorClass, validClass) {
		$(element).removeClass(errorClass);
	},
	success: function(errorElement) {
		var htmlFor = $(errorElement).attr('htmlfor');
		//$('#' + htmlFor).parent('li.mm_reqd').removeClass('mm_error');

		// if (htmlFor == 'data[User][gender]') {
			// htmlFor = 'UserGenderM';
		// }

		if ($('#' + htmlFor).hasClass('mm_error_3rd_parent')) {
			$('#' + htmlFor).parent().parent().parent('li').removeClass('gm_error');

		} else if ($('#' + htmlFor).hasClass('mm_error_2nd_parent')) {
			$('#' + htmlFor).parent().parent('li').removeClass('gm_error');

		} else {
			$('#' + htmlFor).parent().removeClass('gm_error');

		}


		//$('.mm_errormessage').css('display', 'none');
	}
};

var sitoesModalv4ValidationSettings = {
	errorClass: "element_is_error",
	errorElement: "div",
	focusInvalid: false,
	highlight: function(element, errorClass, validClass) {
		$(element).addClass(errorClass);
	},
	onfocusout: false,
	onkeyup: false,
	onclick: false,
	invalidHandler: function(form, validator) {
			$("#added_whole_msg").html("missing required fields");
			$("#" + validator.currentForm.attributes.id.nodeValue).find(".whole_msg").removeClass("isHidden");
	},
	showErrors: function(errorMap, errorList) {
		var errorCount = this.numberOfInvalids();
//	console.log(this.idOrName());
// console.log(this.currentForm.id);
//	console.log(this);
		/*

		if (errorCount > 1)
			var errorText = 'errors';
		else
			var errorText = 'error';

		if (errorCount > 0) {
			$('.mm_formmessage').css('display', 'none');
			$('.mm_errormessage').html(errorCount + ' ' + errorText + '.');
			$('.mm_errormessage').css('display', 'block');
		} else {
			$('.mm_errormessage').css('display', 'none');
		}
		*/

		var added_whole_msg = "";
		//console.log(errorMap);
		for (var i = 0; i < errorList.length; i++) {

			var elementId = $(errorList[i].element).attr('id');
			var message   = errorList[i].message;

			//alert(elementId);
				//var errorElement = setErrorMessage(message);

				//var jqElement = $(errorList[i].element);
			var jqElement = $('#' + elementId);

			if (jqElement.length) {
				var container = $('#' + elementId);

				if(message == "This field is required.")
				{
					//$("#added_whole_msg").text("</br> Missing required fields");
					added_whole_msg = "</br> Missing required fields";
					container.siblings(".element_error").children(".error_msg").text(message);
				}
				else
				{
					container.siblings(".element_error").children(".error_msg").text(message);
				}

				container.siblings(".mm_Validation").removeClass("isHidden").removeClass("isGood").removeClass("isAuto isOn").addClass("isError");

				if(container.siblings(".good_tooltip").length > 0)
				{
					container.siblings(".good_tooltip").remove();
				}

			}

		}

		//if(added_whole_msg != "")
		//	$("#added_whole_msg").html(added_whole_msg);
		//else
		//	$("#added_whole_msg").html("");

		//if(errorCount > 0)
			//$("#" + this.currentForm.id).find(".whole_msg").removeClass("isHidden");

		this.defaultShowErrors();
	},
	errorPlacement: function(error, element) {
		return true;
	},
	unhighlight: function(element, errorClass, validClass) {
		$(element).removeClass(errorClass);
	},
	success: function(errorElement) {

		var htmlFor = $(errorElement).attr('htmlfor');
		//$('#' + htmlFor).parent('li.mm_reqd').removeClass('mm_error');

		var container = $('#' + htmlFor);
		container.siblings(".mm_Validation").removeClass("isHidden").removeClass("isError").removeClass("isAuto isOn").addClass("isGood");


		//$('.mm_errormessage').css('display', 'none');
	}
};

$(document).ready(function() {

	$.validator.addMethod("nodefault", function(value, element, params) {
		return this.optional(element) || jQuery.trim(value) != params;
	}, "This field is required.");

	$.validator.addMethod("optionalnodefault", function(value, element, params) {
		return this.optional(element) || jQuery.trim(value) != params;
	}, "This field is required.");

	$.validator.addMethod("usernamefield", function(value, element) {
		return this.optional(element) || /^[0-9a-z]+$/i.test(value);
	}, "Only alphanumeric please.");

	$.validator.addMethod("businessnamefield", function(value, element) {
		return this.optional(element) || /^[0-9a-z-_.]+$/i.test(value);
	}, "Only alphanumeric, dash, dot, underscore please.");

	$.validator.addMethod("numberwithdefault", function(value, element, params) {
		return this.optional(element) || /^[0-9]+$/i.test(value) || jQuery.trim(value).toLowerCase() == params.toLowerCase();
	}, "Only number please.");

	$.validator.addMethod("mynumber", function(value, element, params) {
		//alert(jQuery.trim(value).length);

		if(this.optional(element) || /^[0-9]+$/i.test(value) || jQuery.trim(value).length == 0)
		{
			$('#' + params).parent().removeClass("mm_error");
			$('#' + params).parent().find('.mm_required').css('background-color', 'white');
		}
		return this.optional(element) || /^[0-9]+$/i.test(value) || jQuery.trim(value).length == 0;
	}, "Only number please.");

	$.validator.addMethod("notinarraydefault", function(value, element, params) {
		return this.optional(element) || jQuery.trim(value) == params.defaultvalue || params.arrayvalue[value] != undefined;
	}, "The screename is used.");

	$.validator.addMethod("urlwithdefault", function(value, element, params) {
		return this.optional(element) || /^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value) || jQuery.trim(value).toLowerCase() == params.toLowerCase();
	}, "Only URL please.");

	$.validator.addMethod("multiplefields", function(value, element, params) {

		var out = false;
		var empty = 0;

		for (var i = 0; i < params.length; i++) {
			if (jQuery.trim($(params[i]).val()).length == 0) {
				empty++;
			}
		}

		if (empty == 0) {
			out = true;
		}

		//return this.optional(element) || out;
		return out;

	}, "Please fill all fields.");

	$.validator.addMethod("optionalbutcomplete", function(value, element, params) {

		var out = false;
		var empty = 0;

		for (var i = 0; i < params.length; i++) {
			if (jQuery.trim($(params[i]).val()).length == 0) {
				empty++;
			}
		}

		if (empty == 0) {
			out = true;
		}

		else if(empty > 0 && empty == 3)
		{
			out = true;
		}

		//return this.optional(element) || out;
		return out;

	}, "Please fill all fields in a row or leave the fields blank.");

	$.validator.addMethod("numbermultiple", function(value, element) {

		var out = false;
		var numberOfErrors = 0;

		//alert("aaa");
		var priceElements = document.getElementsByName("data[Menuprice][price][]");
		//alert(priceElements[0]);

		for (var i = 0; i < priceElements.length; i++) {
			//alert(priceElements[i].value);
			if (jQuery.trim($(priceElements[i]).val()).length > 0  && (/^[0-9]+$/i.test(priceElements[i].value)) == false) {
				//alert("aaa");
				$(priceElements[i]).parent().addClass("mm_error");
				numberOfErrors++;
			}
		}

		if (numberOfErrors == 0) {
			out = true;
		}

		//return this.optional(element) || out;
		return out;

	}, "Please fill all fields.");

	$.validator.addMethod("requiredId", function(value, element, params) {
		if ($("#"+params).val())
			return true;
		else
			return false;
	}, "Please tell us the Venue name");

	// compound classes
	$.validator.addClassRules("sv_price", {
		number: true
	});

	$('input.mm_input_error[type=text], input.mm_input_error[type=password], textarea.mm_input_error, select.mm_input_error').live('focus', function() {

		var tagname = $(this)[0].tagName.toLowerCase();
		if (tagname == 'textarea' || $(this).parent('li').hasClass('mm_adjust_asterisk')) {
			$('.mm_input_error_container').css('top', '-15px');
		} else {
			$('.mm_input_error_container').css('top', '-35px');
		}

		$(this).next('.mm_input_error_container').fadeIn('fast');
		$(this).next('.mm_input_error_container_lower').fadeIn('fast');
	});

	$('input.mm_input_error[type=text], input.mm_input_error[type=password], textarea, select').live('blur', function() {
		$(this).next('.mm_input_error_container').fadeOut('fast');
		$(this).next('.mm_input_error_container_lower').fadeOut('fast');
	});

	$('.emptyOnFocus').live('focus', function() {
		$(this).val('');
	});

});

function setErrorMessage(message) {
	return '<div class="mm_input_error_container"><ol><li>'+ message +'</li></ol><span>&nbsp;</span></div>';
}

function setErrorMessageLower(message) {
	return '<div class="mm_input_error_container_lower"><ol><li>'+ message +'</li></ol><span>&nbsp;</span></div>';
}


function setFormOkMessage() {
	//$('.mm_formmessage').html('done');
	//$('.mm_formmessage').css('display', 'none');
}

