	jQuery.fn.zipcityAutoSuggest = function (options) {
		var $this = this;
		var options = jQuery.extend({}, options);
		
		if (options.cityWidth == null) {
			options.cityWidth = 192;
		}
		if (options.zipWidth == null) {
			options.zipWidth = 262;
		}
		
    	<!-- init the city field autosuggest -->
    	jQuery(this).find('.city').keypress(function(e){
		      if(e.which == 13){
		      	return false;
		       }
	      });
		
		function formatItemCity(row) {
			return '<div style=\'float: left; width: 68%;\'>' + row.localityName + '</div>' 
					+ '<div style=\'float: left; width: 22%;\'>' + row.postcode + '</div>'
					+ '<div style=\'float: left; width: 10%;\'>' + row.canton + '</div>';
		}
		
		jQuery(this).find('.city').autocomplete('/seam/resource/rest/zipcity/find', {
			width: options.cityWidth,
	        dataType: 'json',
	        highlight: false,
	        scroll: true,
	        scrollHeight: 300,
	        parse: function(data) {
	                var array = new Array();
	                for(var i=0;i<data.length;i++)
	                {
	                        array[array.length] = { data: data[i], value: data[i], result: data[i].localityName };
	                }
	                return array;
	        },
	        
	        formatItem: formatItemCity,
	        extraParams: {languageid: options.languageid}
	    });
		jQuery(this).find('.city').result(function(event, data, formatted) {
			jQuery(this).parents('.zipcity-div').find('.zipcode').val(data.postcode);
			jQuery(this).parents('.zipcity-div').find('input[id$="PostcodeAdditional"]').val(data.postcodeAdditional);
			});
		jQuery(this).find('.city').noresult(function($this) {
			jQuery(this).parents('.zipcity-div').find('.zipcode').val('');
			jQuery(this).parents('.zipcity-div').find('input[id$="PostcodeAdditional"]').val('');
			});

		<!-- init the zip field autosuggest -->
		jQuery(this).find('.zipcode').keypress(function(e){
		      if(e.which == 13){
		      	return false;
		       }
	      });
		
		function formatItemZip(row) {
			return '<div style=\'float: left; width: 17%;\'>' + row.postcode + '</div>' 
					+ '<div style=\'float: left; width: 72%;\'>' + row.localityName + '</div>' 
					+ '<div style=\'float: left; width: 10%;\'>' + row.canton + '</div>';
		}
		
		jQuery(this).find('.zipcode').autocomplete('/seam/resource/rest/zipcity/find', {
			width: options.zipWidth,
	        dataType: 'json',
	        highlight: false,
	        scroll: true,
	        scrollHeight: 300,
	        parse: function(data) {
	                var array = new Array();
	                for(var i=0;i<data.length;i++)
	                {
	                        array[array.length] = { data: data[i], value: data[i], result: data[i].postcode };
	                }
	                return array;
	        },
	        
	        formatItem: formatItemZip,
	        extraParams: {languageid: options.languageid }
	    });
		jQuery(this).find('.zipcode').result(function(event, data, formatted) {
			jQuery(this).parents('.zipcity-div').find('.city').val(data.localityName);
			jQuery(this).parents('.zipcity-div').find('input[id$="PostcodeAdditional"]').val(data.postcodeAdditional);
			});
		jQuery(this).find('.zipcode').noresult(function() {
			jQuery(this).parents('.zipcity-div').find('.city').val('');
			jQuery(this).parents('.zipcity-div').find('input[id$="PostcodeAdditional"]').val('');
			});
    }
