(function( $ ) {
    $.fn.mValidate = function( options ) {
       
	
	var objTarScr = options;
	var objID= "#"+$(this).attr('id');
	
	$.fn.goToByScroll = function (cb){
		$('html,body').animate({scrollTop: $(this).offset().top-20},'slow'); 
		if ( $.isFunction(cb)) {cb();}
	}
	function oc(a){var o = {};	for(var i=0;i<a.length;i++){o[a[i]]='';} return o;}
	
	
	
  	function validator(objID){ 
  		var formerror=0;
		var waitForCC =0 ;
		var radioArray= new Array(); 
		var chkBoxGroupArray= new Array(); 
		var chkBoxGroupvaluesArray= new Array();
		$(objID + ' .IsreqMail').each(function (i) {	
		
		var filter = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		var email = $(this).val();

		if (!filter.test(email)) {
					$(this).addClass('invalid');
					formerror=1;
					$('.emailNL-missing').fadeIn();
			} else {
					$(this).removeClass('invalid');
					$('.emailNL-missing').hide();
			}
		});	
		
		
  		$(objID + ' .Isreq').each(function (i) {

			var testval=$(this).val();
			if (testval=="") {
				$(this).addClass('invalid');
				formerror=1;
			} else {
				$(this).removeClass('invalid');
			}
		});
  
		$(objID + ' .sreqSel').each(function (i) {
			var testval=$(this).val();
			if (testval=="-1") {
			$(this).addClass('invalid');
			formerror=1;
			} else {
			$(this).removeClass('invalid');
			}
		});	
		
		$(objID + ' .IsreqChk').each(function (i) {
			var testval=$(this).is(":checked");
			if (testval!=1) {
			$(objID +' input[name="'+value+'"]').wrap('<span class="invalid invalidChk"></span>');
			formerror=1;
			} else {
				if($(objID +' input[name="'+value+'"]').parent('.invalid').length > 0){
					$(objID +' input[name="'+value+'"]').unwrap('<span class="invalid invalidChk"></span>');
				}
			}
		});

//Checkboxgruppen
		$(objID + ' .IsreqChkGr').each(function (i) {
			 if($(this).attr('id') in oc(chkBoxGroupArray)){}else{
				  chkBoxGroupArray.push($(this).attr('id'));
			 }
		});

	if(chkBoxGroupArray.length > 0){ 
		$.each(chkBoxGroupArray, function(index, value) { 
		chkBoxGroupArray[index]=new Array();
			$(objID + ' #'+value+' .IsreqChkGi:checked').each(function (i) {
				chkBoxGroupArray[index].push($(this).val());
			});

		if(chkBoxGroupArray[index].length < 1){
			
			$(objID + ' #'+value).addClass('invalid');
			formerror=1;
			} else {
			$(objID + ' #'+value).removeClass('invalid');
			}

		});
		
	}

	//RADIO CHECK START
		$(objID + ' .IsreqRadio').each(function (i) {
				
			  if($(this).attr('name') in oc(radioArray)){}else{
				  radioArray.push($(this).attr('name'));
				  }
			
		});
		
	if(radioArray.length > 0){
		var testval="";
		$.each(radioArray, function(index, value) { 
		testval="";
		 testval=$(objID + ' input[name="'+value+'"]:checked').val();	

	 if(!testval || testval=='undefined'){
if($(objID +' input[name="'+value+'"]').parent('.invalid').length < 1){
		$(objID +' input[name="'+value+'"]').wrap('<span class="invalid invalidChk"></span>');
}
			formerror=1;
			} else {
				if($(objID +' input[name="'+value+'"]').parent('.invalid').length > 0){
					$(objID +' input[name="'+value+'"]').unwrap('<span class="invalid invalidChk"></span>');
				}
			}
			});
		
		}
  
  //RADIO CHECK END
  if(formerror > 0){

				$('.invalid').goToByScroll();	

	  }

  return formerror; 
	}
  
 // ANIMATION BEIM SENDEN 
  
  $.fn.animateForm = function( mycallback  ) {
	  

	   
	  var formID="#"+$(this).attr('id');
	var	 sendoverlay = document.createElement('div');
		 $(sendoverlay).hide();	
		var	 loader = document.createElement('div');
		$(loader).addClass('Floader');
		$(sendoverlay).addClass('sendoverlay');
		
		$(formID).parent('.mFormholder').append(sendoverlay);	
		
	
		$(formID).css('overflow', 'hidden').animate({opacity: 0.5}).animate({height: '0'}, function(){
		$(this).hide(); 	
		
			$(sendoverlay).append(loader);   
			$(sendoverlay).fadeIn(
		
				function(){
		
					if ( $.isFunction(mycallback)) {
						mycallback();
						}
				
			});
			
		
		
	}
		);
			
	  }
  
 // FORMULAR ABSENDEN
 
  
  function sendForm(objID){
	
	
			$(objID).animateForm(
			function(){
				
			var capSe=$(objID +" .IsreqCaptcha").attr('CCS');	
			  var formdata=$(objID).serialize();
			
			datasend='capSe='+capSe+'&sendform='+objTarScr+'&'+formdata;
			$.ajax({
			url: 'forms/bin/sendform.php',
			type: 'POST',
    		data: datasend,
			success: function(data){
			$('.sendoverlay').fadeOut(
			function(){
				$(objID).parent('.mFormholder').html(data);
				$(objID).reset();
				}
			);
			}
			});
				}
			);
				
	
		
			return false;	
  }
  
  function presubmit(){
	  
	  var cf=validator(objID);

  if($(objID +" .IsreqCaptcha").length > 0){
	 waitForCC=1;
	 
	 var testCC=$(objID +" .IsreqCaptcha").val();
	 var testCCS=$(objID +" .IsreqCaptcha").attr('CCS');
	 
	 $.ajax({
		url: 'forms/captcha/checkcaptcha.php',
		type: 'POST',
    	data: 'sessionVar='+testCCS+'&codeIs='+testCC,
		success: function(data){
				waitForCC=0;
			if (data=="1") {
					$(objID +" .IsreqCaptcha").removeClass('invalid');
				if( cf < 1){
						sendForm(objID);
				}  
					
				} else {
					
					$(objID +" .IsreqCaptcha").addClass('invalid');
					formerror=1;
					return false;
								
				}	
			
		}
		
		});
	  }else{
		  
		  	if( cf < 1){
						sendForm(objID);
				}
		  }
	  }
  
  $(objID).keypress(function(e){
      if(e.which == 13){	presubmit(); return false;  } });
  
  $(objID+' .submitter').click(function(){
		
	presubmit();
return false;
	  
	  });

    };
})( jQuery );
