/*
 * jquery.validfrm.js
 * jQuery-Plugin for simple Form-Validation
 *
 * @author Michael Bayer <michael.bayer@arsmedium.com>
 */
(function($) {

jQuery.fn.validfrm = function(cfg) {

	try { $.fn.validfrm.customFields = cfg.custom_fields.split("--"); } catch(err){}
	
	this.bind('submit',function() {

	try {

		$.fn.validfrm.error = false;
		$.fn.validfrm.thisForm = this;

		$('*',this).removeClass('vafm_error');

		// Pruefung des Formulars
		$.each( $('.vafm_required:visible',this),function(i, n) {
			checkField($(n));
		});
		if($.fn.validfrm.customFields != 0) {			
			for(x=0;x<=$.fn.validfrm.customFields.length;x++) {
				checkField($($.fn.validfrm.customFields[x]));
			}
		}

		if($.fn.validfrm.error == true) {
			if(cfg.error_container != '') {
				if($(cfg.error_container).text().replace(/^\s+/,'').replace(/\s+$/,'').length == 0) {
					$(cfg.error_container).hide().html(cfg.error_msg).slideDown('normal');
				} else {
					$(cfg.error_container).html(cfg.error_msg);
				}
			}
			return false;
		} else {
			return true;
		}
	
	} catch(err){
		// ERROR - Forumlar wird abgeschickt.
		return true;
	}
		
	});
};

function checkField(input_element) {
	
	if(input_element.is("input[type='radio']")) {
		var checked = false, radioElements = new Array(),x = 0, localError = false;
		$.each( $("input[type='radio'][name='"+input_element.attr('name')+"']",$.fn.validfrm.thisForm),function(i,n) {
			var radioElement = $(n);
			if(radioElement.attr('checked') == true) {
				checked = true;
			} else {
				// Bei einem Fehler, wird geprueft, ob es zu dem Radio-Button ein passendes Label-Feld gibt.
				// Wenn ja, wird dieses der CSS-Error-Klasse zugewiesen
				if( $('label[for="'+radioElement.attr('id')+'"]',$.fn.validfrm.thisForm).length != 0 ) {
					$('label[for="'+radioElement.attr('id')+'"]',$.fn.validfrm.thisForm).addClass('vafm_error');
					radioElements[x] = 'label[for="'+radioElement.attr('id')+'"]';
					x++;
				}
			}
		});
		if(input_element.attr('checked') == false && checked == false) {
			$.fn.validfrm.error = true;
		} else {
			for(x=0;x<=radioElements.length;x++) {
				$(radioElements[x],$.fn.validfrm.thisForm).removeClass('vafm_error');
			}
		}
	} else if(input_element.is("input[type='checkbox']")) {
		if(input_element.attr('checked') == false) {
			input_element.addClass('vafm_error');
			$.fn.validfrm.error = true;
			if( $('label[for="'+input_element.attr('id')+'"]',$.fn.validfrm.thisForm).length != 0 ) {
				$('label[for="'+input_element.attr('id')+'"]',$.fn.validfrm.thisForm).addClass('vafm_error');
			}
		}
	} else if(input_element.is('select')) {
		if(input_element.attr('selectedIndex') == 0) {
			input_element.addClass('vafm_error');
			$.fn.validfrm.error = true;
		}
	} else if(input_element.is('textarea')) {
		if( input_element.val().replace(/^\s+/,'').replace(/\s+$/,'').length == 0) {
			input_element.addClass('vafm_error');
			$.fn.validfrm.error = true;
		}
	} else if(input_element.is("input")) {
		if(input_element.hasClass('vafm_numeric')) {
			if( isNaN(input_element.val()) || input_element.val().length == 0) {
				input_element.addClass('vafm_error');
				$.fn.validfrm.error = true;
			}

		} else if(input_element.hasClass('vafm_email')) {
			var pattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
			if(!pattern.test(input_element.val())) {
				input_element.addClass('vafm_error');
				$.fn.validfrm.error = true;
			}

		} else if(input_element.hasClass('vafm_zip')) {
			if( !(!isNaN(input_element.val()) && input_element.val().length == 5)) {
				input_element.addClass('vafm_error');
				$.fn.validfrm.error = true;
			}
/*
		} else if(input_element.hasClass('vafm_customerid')) {
			if( !(!isNaN(input_element.val()) && input_element.val().length == 4)) {
				input_element.addClass('vafm_error');
				error = true;
			}

		} else if(input_element.hasClass('vafm_birthdate')) {
			if( !(!isNaN(input_element.val()) && input_element.val().length == 4) || (thisYear < parseInt(input_element.val())) ) {
				input_element.addClass('vafm_error');
				error = true;
			}
*/
		} else if(input_element.hasClass('vafm_password')) {
			$.each( $("input[type='password'][name='"+input_element.attr('name')+"']",$.fn.validfrm.thisForm),function(i,n) {
				var passwordElement = $(n);
				if(passwordElement.val() != input_element.val() || input_element.val().length < 4) {
					$.fn.validfrm.error = true;
					passwordElement.addClass('vafm_error');
				}
			});

		} else {
			
			// einfache Pruefung ob Inhalt vorhanden ist (Whitespaces werden entfernt)
			if( input_element.val().replace(/^\s+/,'').replace(/\s+$/,'').length == 0) {
				input_element.addClass('vafm_error');
				$.fn.validfrm.error = true;
			}
		}
	}

};
$.fn.validfrm.error = false;
$.fn.validfrm.thisForm = '';
$.fn.validfrm.customFields = new Array();

})(jQuery);