jQuery.validator.setDefaults({ 
	onkeyup: function(element) { 
		if ( document.onKeyUpOmit ) {
			if( jQuery.inArray( element.name, document.onKeyUpOmit ) >= 0 ) { return true; }
		}
		if ( element.name in this.submitted || element == this.lastElement ) { this.element(element); } 
	} 
});
jQuery.validator.setDefaults({ ignore: '.ignore'});
//
// So currently default 'remote' method will send only 'folder' value, should send 'folder', 'handler' and 'id' 
//
function customRemote(url){return url + '&' + jQuery.param( {'type':$("input[name=handler]").val(), 'id':$("input[name=id]").val()}	);}
//
// Create a custom method 'alphanumeric' - it should allow only latin characters, numbers and _ sign to be filled in a field. 
//
jQuery.validator.addMethod("alphanumeric", function(value, element) {return this.optional(element) || /^\w+$/i.test(value);}, "Letters, numbers, spaces or underscores only please"); 
//
// Extend 'required' method so it is able to check a set of textfields. If at least one field is filled - then the whole set is considered as not empty. 
//
jQuery.validator.addMethod("requiredSet", function(value, element) 
{
	var group = $("[name='"+$(element).attr("name")+"']");
	if(jQuery.trim(value) != "")
		{group.addClass('ignore');group.removeClass('erorr');$(element).removeClass('ignore');return true;}
	else
		return (group.filter(function(){return (jQuery.trim($(this).val()) != "")}).length > 0)
}, "You need to fill one or all fields in this set!"); 
//
// create a custom method that will check a group of fields. Rule is considered as 'passed' when any of those fields is not empty 
//
jQuery.validator.addMethod("atLeastOne", function(value, element)
{
	//
	// find in witch of groups this element is
	//
	var items = Array();
	for(var i in group_validator.settings.groups)
	{
		if($.inArray($(element).attr("name"),group_validator.settings.groups[i].split(" "))>-1)
			items = group_validator.settings.groups[i].split(" ");
	}
	var selector = '';
	for(var j in items)
	{
		selector += "[name='"+items[j]+"'],";
	}
	var group = $(selector);

	if(jQuery.trim(value) != "")
	{
		group.addClass('ignore');group.removeClass('erorr');$(element).removeClass('ignore');return true;				
	}
	else
	{
		return  (group.filter(function(){var i = $(this).val(); return ((i!=null) && (jQuery.trim(i.toString()) != ""));}).length > 0);
	}
},
"Error!"
);
//
// Function to add a field into onKeyUpOmit array 
//
function onKeyUpOmit( fieldName )
{
	if( !document.onKeyUpOmit ){ document.onKeyUpOmit = new Array; }		
	document.onKeyUpOmit.push( fieldName );
}
