(function($) {
	
	$.fn.insuranceImport = function(o) {
		
		var $this = $(this);
		
		var success = o.success;
		var error = o.error; 
		
		var regexs = new Array();
		
		regexs['gender'] = '/^(1|2){1}$/';
		regexs['firstname'] = '/^[ßäüöa-zA-Z]{3,35}$/';
		regexs['surname'] = '/^[ßäüöa-zA-Z]{3,35}$/';
		regexs['street'] = '/^[ßäüöa-zA-Z0-9 \-\.]{3,35}$/';
		regexs['zip'] = '/^[0-9]{4,6}$/';
		regexs['residence'] = '/^[ßäüöa-zA-Z \-]{3,35}$/';
		regexs['phone_private_prefix'] = '/^[0-9/\(\) \-]{2,7}$/';
		regexs['phone_private'] = '/^[0-9/\(\) \-]{4,20}$/';
		regexs['birthday'] = '/^19[3-9]{1}[0-9]{1}-([0]{0,1}[1-9]{1}|1[012]{1})-([0]{0,1}[1-9]{1}|1[0-9]{1}|2[0-9]{1}|3[01]{1})$/';
		regexs['occupation_id'] = '/^[0-9]{1,2}$/';
		regexs['mindestverdienst'] = '/^(ja|nein)$/';
		regexs['maritalstatus'] = '/^(0|1|2|3)$/';
		regexs['children'] = '/[-]{0,1}[0-9]{1}$/';
		
		$this.bind('click', {options: o}, function(e) {
			e.preventDefault();
			send(e.data.options);
		});
		
		// function send the request to the tarifcheck server
		var send = function(o) {
			
			// validate success and error parameter
			if (!o.success.match(/^\/?[a-zA-Z0-9_]+(\.php|\.html){1}$/) || !o.error.match(/^\/?[a-zA-Z0-9_]+(\.php|\.html){1}$/)) {
				return false;
			}
			
			if (!o.partner_id.match(/^[0-9]+$/)) {
				return false;
			}
			
			data = get_data();
			
			// validte parameter
			if (typeof(data.gender) == 'undefined'
				|| typeof(data.firstname) == 'undefined'
				|| typeof(data.surname) == 'undefined'
				|| typeof(data.street) == 'undefined'
				|| typeof(data.zip) == 'undefined'
				|| typeof(data.residence) == 'undefined'
				|| typeof(data.phone_private_prefix) == 'undefined'
				|| typeof(data.phone_private) == 'undefined'
				|| typeof(data.birthday) == 'undefined'
				|| typeof(data.occupation_id) == 'undefined'
				|| typeof(data.mindestverdienst) == 'undefined'
				|| typeof(data.maritalstatus) == 'undefined'
				|| typeof(data.children) == 'undefined'
				) {
				
				return false;
			
			} else {
			
				res = validate_data(data, regexs);
				
				// check the datasecurity checkbox
                if (!$('#datasecurity:checked').val()) {
                    $('#datasecurity_label').addClass('FormError');
                    return false;
                    
                } else if ($('#datasecurity:checked').val() && $('#datasecurity_label').hasClass('FormError')) {
                    $('#datasecurity_label').removeClass('FormError');
                }
				
				// check form data
				if (res == false) {
					
					return false;
				}
				
			}
			
			ajax_data = '?' + 'partner_id=' +  o.partner_id +
						'&gender=' + data['gender'] +
						'&firstname=' + data['firstname'] + 
						'&surname=' + data['surname'] + 
						'&street=' + data['street'] + 
						'&zip=' + data['zip'] +
						'&residence=' + data['residence'] +
						'&phone_private_prefix=' + data['phone_private_prefix'] +
						'&phone_private=' + data['phone_private'] +
						'&birthday=' + data['birthday'] +
						'&occupation_id=' + data['occupation_id'] +
						'&mindestverdienst=' + data['mindestverdienst'] +
						'&maritalstatus=' + data['maritalstatus'] +
						'&children=' + data['children'] +
						'&email=' + data['email'] +
						'&phone_private_accessibility=ganztags' +
						'&sehhilfen=egal' +
						'&selbstbeteiligung_betrag=-' +
						'&zahn_behandlung=100%' + 
						'&zahn_ersatz=100%' +
						'&krankenhaus_zimmer=1-bett' + 
						'&krankenhaus_privat=ja' +
						'&datasecurity=akzeptiert' +
						'&insurance_id=' + o.insurance_id +
						'&registered_ip=' + o.registered_ip +
						'&template=1';
			
			// test url
			$.getJSON("http://form.partner-versicherung.de/api/import.php" + ajax_data + "&jsoncallback=?", function(data) {
				
			    if (data.status == "ok") {
					
				    // lead imported, show success template
					top.location = success;
					
				} else {
					
				    // lead was not accepted by the server, show error template
					top.location = error;			
					
				}
				
			});
			     
		};
		
		
		var get_data = function() {
			
			var data = new Array();
			
			data['gender'] = $('#gender').val();
            data['firstname'] = $('#firstname').val();
            data['surname'] = $('#surname').val();
            data['street'] = $('#street').val() + ' ' + $('#streetnr').val();
            data['zip'] = $('#zip').val();
            data['residence'] = $('#residence').val();
            data['phone_private_prefix'] = $('#phone_private_prefix').val();
            data['phone_private'] = $('#phone_private').val();
            data['email'] = $('#email').val();
            data['birthday'] = $('#birthday_year').val() + '-' + $('#birthday_month').val() + '-' + $('#birthday_day').val();
            data['occupation_id'] = $('#occupation_id').val();
            data['mindestverdienst'] = $('#mindestverdienst').val();
            data['maritalstatus'] = $('#maritalstatus').val();
            data['children'] = $('#children').val();
			data['datasecurity'] = $('#datasecurity').val();
            
            return data;
		}
		
		// function validates the mandatory parameters
		var validate_data = function(data, regs) {
			
			error = false;
			
			for (paraname in regs) {
				
				if (data[paraname] == '') {
					
					error = true;
					$('#' + paraname + "_label").addClass('FormError');
					
				} else if (!data[paraname].match(eval(regs[paraname]))) {
					
					error = true;
					$('#' + paraname + "_label").addClass('FormError');
					
				} else if ($('#' + paraname + "_label").hasClass('FormError')) {
				    
				    $('#' + paraname + "_label").removeClass('FormError');
				}
				
			}
			
			if (error == true) {
				return false;
			}
			
			return true;
		};
		
	}
	
})(jQuery);
