var submitting = false;
(function($){

	$.fn.validateInputs = function(invokeOnInvalid, lockIfValid) {

        if (lockIfValid == true && submitting)
		    return false;
		    
        var valid = true;
		
		submitting = true;

		this.each(function(){
            $(this)
                .find("input[@type='checkbox'], input[@type='text'], input[@type='password'], select, textarea")
	            .filter(":enabled")
	            .each(function() {
		            if ( !validateField(this) )
		            {
		                valid = false;
		                if (invokeOnInvalid != null && typeof(invokeOnInvalid) == "function")
		                    invokeOnInvalid(this);
		            }
	            });

		});
		
		try
		{	
	        if (!valid)
	        {
	            $("<a id='ancor'></a>")
	                .insertAfter( $('.Invalid:first') )
	                .ScrollTo(700, null, null, function() { $('#ancor').remove(); } , -150);
	        }
	    } catch(e) {}
	    
	    // to prevent double posts
	    if (!valid)
		    submitting = false;
		    
		return valid;
	};
	
	$.fn.autoValidate = function() {
		return this.each(function() {
            $(this)
                .find("input[@type='checkbox'], input[@type='text'], input[@type='password'], select, textarea")
	            .filter(".Required:enabled, .Regex:enabled, .ValidationExpression:enabled")
	            .blur(function() { validateField(this); })
	            .change(function() { validateField(this); });
		});
	};

})(jQuery);

function validateField(sender) {

    var element = $(sender);
    
    if (
            ( element.is('.Required') && ( element.val() == '' || element.val() == "0" || element.is('input[@type=checkbox]:not(:checked)') ) ) ||
            ( element.is('.Regex') && !new RegExp(element.attr("regex"), "gi").test(element.val()) && element.val() != "" ) ||
            ( element.is('.ValidationExpression') && !eval( element.attr("validationExpression") ) )
       )
    {
        element.addClass('Invalid');
        
        if (typeof(element.attr('error')) != "undefined" && element.attr('error') != null)
        {
            if(element.parent().find('.error').length == 0)
                $("<div class='error'>" + element.attr('error') +"</div>")
                .insertAfter( element );
        }
        return false;
    }
    else
    {
        element.removeClass('Invalid');
        element.parent().find('.error').remove();//hide(function(){$(this).remove();});
        return true;
    }
}

function fadeInAndOutInvalid(sender, num) 
{
    if (!num || num > 0)
        $(sender).fadeOut(300, function() { 
            $(this).fadeIn(300); 
            if (num)
                fadeInAndOutInvalid(sender, num - 1);
        });
}
