/*
	(c) 2009 by Sebastian Deutsch
	depencies:
		- jQuery
		- jQuery.hint 
		- jQuery.scrollTo (optional)
*/

jQuery.fn.superValidation = function (options) {
    // get defaults
	var defaults = {
		returnHandlers : false
	};

	var opts = jQuery.extend(defaults, options);
    
    var form = jQuery(this);
    var validate = function() {
    	var submit = true;
    	var wrong_elements = [];
    	var message = '';
	
    	// iterate through all input fields
    	jQuery('input, textarea, select', form).each(function(index) {
    		var input = jQuery(this);
		
    		// remove prior errors
    		input.removeClass('error');
			
			// validate-presence
    		if(input.hasClass('validate-presence') && input.val() == "") {
    			wrong_elements.push(input);
										
    			var label = jQuery('label[for=' + this.id + ']');
    			if(label) {
    				var str = label.html();
    				message += "Bitte füllen Sie '" + str.replace(/[\*:]+/,'').replace(/<br>/,' ') + "' aus.\n";
    			}
		
    			submit = false;
    		}
    		
    		// validate-acceptance
    		if(input.hasClass('validate-acceptance') && !jQuery('#' + input.attr('id') + ':checked').val() ) {
    		    wrong_elements.push(input);
    		    message += "Die AGBs müssen akzeptiert werden.\n";
    		    
    		    submit = false;
    		}
    	});
	
    	// mark all input fields
    	for(var i=0; i<wrong_elements.length; i++) {
    		wrong_elements[i].addClass('error');
    	}
	
    	// disable submit so that you can just click once
    	if(!submit) {
    		message += "\nBitte korrigieren Sie die fehlerhaften Felder.\n";
    		alert(message);
    	}
	
    	// scroll to the first wrong input field
    	if(jQuery.fn.ScrollTo) {
    		if(wrong_elements.length>0) {
    			wrong_elements[0].ScrollTo();
    		}
    	}
	
    	// disable submit so that you can just click once
    	if(submit) {
    		jQuery('input[type="submit"]', form).attr('disabled', true);
    	}
	
    	return submit;
	}
	
	// constructor
	if(form.data('superValidation-consrtuctor-called') != '1') {
	    if(jQuery.fn.hint) {
			jQuery('input[title!=""]', form).hint();
			jQuery('textarea[title!=""]', form).hint();
		}
	    
	    if(opts['returnHandlers'] == false) {
	        form.submit(validate);
	    }
	    
		form.data('superValidation-consrtuctor-called', '1');
	}
	
	if(opts['returnHandlers'] == false) {
	    return(this);
    } else {
        var handlers = {
            validate : validate,
            enableSubmitButton : function() {
                jQuery('input[type="submit"]', form).removeAttr('disabled');
            }
        }
        
        return(handlers);
    }
}

