var formSended = false;

( function( ) {

$.fn.validateForm = function(settings) {

    var options = $.extend({
	lang: 'ger', 
        url: null,
        instantValidation: false, 
        requiredFields: [],
        errBorderColor: '#CC0000',
        errBackgroundColor: '#FEFFAF',
        successMsg: 'Das Formular wurde abgeschickt'
    },  settings);

    var myForm = $(this);
    var formID = $(this).attr('id');
    var borderWidths;
    var borderColors;
    var backgroundColor;
    var requiredFields;
    
    var errorMsg = "";


    var init = function() {
        
	//doLog('FUNCTION validateForm->init()');
        
        requiredFields = options.requiredFields;
	   
    
        if ( myForm == undefined || myForm == null || myForm.length == 0 ) {
 
            //doLog('->Formular nicht gefunden!');

            return; 

        } else {
                 
          //doLog('->Formular: ' + myForm.attr('name'));

          borderWidths    = myForm.children('[type=text]:first').css('border-width');
          borderColors    = myForm.children('[type=text]:first').css('border-color');
          backgroundColor = myForm.children('[type=text]:first').css('background-color');

          for ( i= 0; i < requiredFields.length; i++ ) {

              elementName = requiredFields[i][0];
  
              $('[name=' + elementName + ']').addClass('required');
              $('[name=' + elementName + ']').attr('msg', requiredFields[i][1]);
   
              $('label[for=' + elementName + ']').append('<sup class="requiredSign">*</sup>');
              
          }

          if ( myForm.attr('action') && myForm.attr('action').length > 0 ) {
          
              // Falls die url nicht von einem Formularfeld geliefert wird, wird die Form-Action benutzt (falls vorhanden)  
              if ( options.url != 'useFormField' ) {

                  options.url = myForm.attr('action');
              }

              myForm.attr('action','');
          } 



          // Fehler und Erfolgsmeldung überprüfen (Container jeweils muss vorhanden sein)
          if ( $('#' + formID).parent().find('#errorMsgContainer').length == 0 ) {
              
              myForm.parent().append('<div id="errorMsgContainer" style="display: none;"><h2>Fehler</h2><p>Beim Absenden des Formulars ist leider ein Fehler passiert. Bitte versuchen Sie es nocheinmal.</p></div>');
          } 

          if ( $('#' + formID).parent().find('#successMsgContainer').length == 0 ) {
           
              myForm.parent().append('<div id="successMsgContainer" style="display: none;"><h2>Vielen Dank f&uuml;r Ihr Interesse</h2><p>Ihr Formular wurde erfolgreich versendet.</p></div>');
          } 


          if ( options.instantValidation ) {

              validate();

          } else  {

              $('#submitButton').bind('click', validate ); 
          }

        }
       
    };




    var validate = function(e) {

        //doLog('FUNCTION validateForm->validate()');
        if ( e != 'undefined' && e != undefined ) { e.preventDefault(); }

        var errorMsg = "";

        //doLog('->Formular ' + formID + ': ' + myForm.attr('id'));
       
        		
        var formHasErrors = false;

        myForm.find('.required').each( function() {

             //doLog('->find children of form  ... found: ' + $(this).attr('name') + ', type: ' + $(this).attr('type') + ', val: ' + $(this).val());
             
             var error = 0;
             var elementType = $(this).attr('type');
             var elementName = $(this).attr("name"); 


             switch(elementType) {
                  
                 case "select-one":
                 case "select-multiple":
                         
                     if ( $(this).val() === $(this).children("option:first").val() ) error++;
                     break;


                 case "checkbox": 
                 case "radio":
                     
                     if($("input[name=" + elementName + "]:checked").size() == 0) error++;
                     break;

					 
                 case "textarea": 
                 case "text":
                     if ( $.trim($(this).val()).length <= 2 ) error++;
                     if ( (elementName == 'email' || $(this).attr('checkingType') == 'email') && !_checkEmail( $(this).val() )) error++; 
                     break;
             }

             if ( error > 0 ) { 
                 formHasErrors = true; 
                 errorMsg += "<br />- " + $(this).attr('msg'); 
                 _highlightElement($(this)); 
             }
             else { 
                 _deHighlightElement($(this)); 
             }

        });

        if ( formHasErrors ) {

	    if ( options.lang == 'ger' ) {
                html = 'Bitte f&uuml;llen Sie alle Pflichtfelder aus.<br />';
	    } else {
                html = 'Please fill out all required fields.<br />';
	    }
      
            errorMsg = html + errorMsg;

            _createErrorMsg(errorMsg);
            //_createSuccessMsg();

	    return false;
	}
	else {

	    if ( options.url ==  null ) {

                try { 

                    _createErrorMsg('URL nicht gefunden!');

                } catch(err) {  

                    alert('Fehlfunktion: URL nicht gefunden, Validierung wird abgebrochen!');
                }

                return false; 
                 
            } else {

                if ( options.url == 'useFormField' ) options.url = $('input[name=url]').val();

                var params = myForm.serializeArray();

                $.ajax({
                    type: "POST",
                    url: options.url,
                    data: params,
                    context: myForm,
                    error: function(textStatus, errorThrown) { 
                        _createErrorMsg('Wegen eines technischen Problems kann das Formular derzeit nicht versendet werden. '); 
                    },
                    success: function(data, textStatus){
                        //alert( "Data Saved: " + data.toString());
                        myData = '';
						myData = data.toString();
						
						if ( myData.indexOf('<body') > 0 ) {    // Ist HTML
							
							if (myData.indexOf('Sie sind schon eingetragen.') > 0 ) {
							
								errorMsg = '<p>Sie sind schon eingetragen. Mit diesem Formular k&ouml;nnen Sie sich momentan nur vom Paschen-Newsletter abmelden.</p>';
							
								_createErrorMsg(errorMsg);
							}
							
							if ( myData.indexOf('Ihre E-Mailadresse ist nicht in unserer Datenbank vorhanden.') > 0 ) {
							
							    errorMsg = '<p>Ihre E-Mailadresse ist nicht in unserer Datenbank vorhanden.</p>';
								
								_createErrorMsg(errorMsg);
							}
							
							if (myData.indexOf('Newsletter abbestellen') > 0 ) {
								
								if (myData.indexOf('<form action="newsletter_abo_aendern_speichern.php" method="post">') > 0 ) {
								
								    //vormals.replace(/Hinz/g, "Kunz, geb. Hinz");
									var windowData = myData.replace(/newsletter_abo_aendern_speichern.php/g, "http://www.paschen.de/mailscripts/newsletter_abo_aendern_speichern.php");
									
									var newWindow = window.open(windowData, 'Newsletter abmelden'); 
									
									newWindow.document.write(windowData);
								
								} else {  
									$('#successMsgContainer').html('<h2 >Vielen Dank f&uuml;r Ihr bisheriges Interesse</h2><p>Sie wurden aus unserer Abonnenten-Datenbank gel&ouml;scht.</p>');
									
									_createSuccessMsg();
								}
								
								
							}	

                            if (myData.indexOf('Herzlichen Dank') > 0) {

								msg = 	'<h2 >Herzlichen Dank f&uuml;r Ihre Anmeldung</h2>' +
										'Sie erhalten in K&uuml;rze eine E-Mail an die von Ihnen angegebene Adresse. Klicken Sie dort bitte auf den Link, um Ihr Abonnement zu best&auml;tigen.' +
										'<br/><br/>' +
										'Dies ist n&ouml;tig, um zu verhindern, dass Sie von Dritten ohne Ihre Zustimmung angemeldet werden.' + 
										'<br/><br/>' +
										'Ihr Paschen Team';
										
								$('#successMsgContainer').html(msg);
								_createSuccessMsg();
                                                        }							
							
						} 
						else if( myData.indexOf('return',0) > 0 ) {    // Ist JSON

                                              
                                                    if( myData.indexOf('false',0) > 0 ) { 

                                                        _createErrorMsg('Beim Abschicken ist ein Fehler aufgetreten - bitte versuchen Sie es nocheinmal.'); 

                                                    } else {

                                                        _createSuccessMsg();
                                                    }
                                                   
						}
						else { // keine Ahnung was das ist
							//alert('kein Typ');
							_createSuccessMsg();
						}						
						
                    }
                });
            }
        } 
    };



	
    var _highlightElement = function(element) {

	if ( element.attr('type') == "text" || element.attr('type') == "select-one" || element.attr('type') == "select-multiple" ) {

            element.css({'border-color': options.errBorderColor});
           

        } else {

            element.parent().css({
                'border-width': '1px',
                'border-style': 'solid',
                'border-color': options.errBorderColor,
                'width': 'auto'
            });

        }		
    };

	
    var _deHighlightElement = function(element) {
		
	if ( element.attr('type') == "text" || element.attr('type') == "select-one" || element.attr('type') == "select-multiple" ) {
	    
            element.attr('style', '');
			
	} else {
            element.parent().attr('style', '');
	    //alert('Error in Function _dehighlightElement, Type is not supported: ' + element);
	}
    };



    var _checkEmail = function(s) {

		var a = false;
			var res = false;
			
		if(typeof(RegExp) == 'function') {
			var b = new RegExp('abc');
			if(b.test('abc') == true){a = true;}
		}
			
		if(a == true) {
			reg = new RegExp('^([a-zA-Z0-9\\-\\.\\_]+)'+
					 '(\\@)([a-zA-Z0-9\\-\\.]+)'+
					 '(\\.)([a-zA-Z]{2,4})$');
			res = (reg.test(s));
		} else {
			res = (s.search('@') >= 1 &&
			   s.lastIndexOf('.') > s.search('@') &&
			   s.lastIndexOf('.') >= s.length-5)
		}
			
		//doLog('element is E-Mail, proof email is valid: ' +  res);
			
		return(res);
    };
   


    var _createErrorMsg = function(errorMsg) {

        if ( $('.msgContainer').length > 0 ) $('.msgContainer').remove();

        var msgContainer = document.createElement('div');

        html = "<div id='msgContainerTitle'>\n" +
               "    <a href='#' id='msgContainerClose'> x </a>\n" +
               "</div>\n" + errorMsg;

        $(msgContainer).append(errorMsg);

        $(msgContainer).dialog({ 
                title: "Fehler",
                closeText: '[x]',
                dialogClass: 'msgContainer error',
                minWidth: 200, 
                minHeight: 150, 
                modal: false, 
                resizable: true, 
                zIndex: 3999 
         });

        /*$(msgContainer).append(html);

        $(msgContainer).addClass('msgContainer error');

        $('selected .page').prepend(msgContainer); 


        $('#msgContainerTitle').bind('mousedown', function() { 

            $('.msgContainer').draggable({});

        }).css('cursor','move');

        myForm.scrollTo( $('.msgContainer'), 800 ); 
    
        $('#msgContainerClose').bind('click', function(event) { event.preventDefault(); $(msgContainer).remove(); }); */

    };


    var _createSuccessMsg = function() {

        //doLog('FUNCTION _createSuccessMsg was called ...');
        //doLog('parent: ' + myForm.parent());


        if ( $.browser.msie ) {  
		
			myForm.html('');

			$('#successMsgContainer').css({height: '100px', display: 'block'}); 		
		
		}
        else { 
		
			var formHeight = myForm.outerHeight();

			myForm.html('');

			$('#successMsgContainer').css({height: formHeight, display: 'block'}); 
			
            $(window).scrollTop(0);
        }


    };



    var doLog = function(message) {
		try { console.log(message); } 
		catch (err) {	};
    };
    init();
    //if ( ajaxComplete == 1 ) init();

};
})(jQuery);

