$(document).ready(function() {

	var brandModelVersionForm = {
		bindEvents : function() {
			$("#mseurocar_catalog_identifier > *").bind('focusin', { that : this }, this.focusin);
			$("#mseurocar_catalog_identifier > *").bind('focusout', { that : this }, this.focusout);
		},

		unbindEvents : function() {
			$("#mseurocar_catalog_identifier > *").unbind();
		},
		
		isAlphanumericKey: function( keyCode ){
			
	        if( (57>=keyCode && keyCode>=48) 
		        || (105>=keyCode && keyCode>=96) 
		        || (90>=keyCode && keyCode>=65) 
		        || (40>=keyCode && keyCode>=37)
		        || (keyCode == 8) || (keyCode == 46)  
		        || (keyCode == 13) || (keyCode == 32) )
	        {
	        	return true;
	        }
	        else
	        {
	        	return false;
	        }
		},

		focusin : function(event) {
			$("#mseurocar_catalog_identifier > *").keyup(function(event) {
				if (event.keyCode == '13') {
					event.preventDefault();
				}
				
				if( brandModelVersionForm.isAlphanumericKey( event.keyCode ) ){

					brandModelVersionForm.keyup( event );
				}
			});
		},

		focusout : function(event) {
			$("#mseurocar_catalog_identifier > *").unbind('keyup');
		},
		
		updateTemplate: function( html ){
			var messageSpan = $( "#mseurocar_catalog_identifier_message" );
			messageSpan.replaceWith( '<span id="mseurocar_catalog_identifier_message">' + html + '</span>' );	 		
		},


		keyup : function( event ) {
			var that = this;
			var catalogIdentifier = $("#mseurocar_catalog_identifier > *").val(); 
			var contentObjectId = $("#mseurocar_catalog_identifier_content_object_id").html();
			 $.ajax({
	                type: "POST",
					url: that.calculateFromHiddenHTML( 'mseurocar_catalog_identifier_url' ),
					data: {
				 		catalog_identifier: catalogIdentifier,
				 		content_object_id: contentObjectId,
				 	},
					dataType: "html",
				    success: function( html ){
				 		that.updateTemplate( html );
				 	},
					error: function( XMLHttpRequest, textStatus ){
						var errorMessage = "Problemy techniczne";
					},
					beforeSend: function(){
						that.unbindEvents();
						that.setCursor('wait');
						$("#mseurocar_catalog_identifier_icon").show();
					},
					complete: function(){
						that.setCursor('default');
						that.bindEvents();
						$("#mseurocar_catalog_identifier > *").trigger('focusin');
						$("#mseurocar_catalog_identifier_icon").hide();
					}
				});
			
		},
		
		setCursor: function ( type ){
			$('body').css('cursor', type);
			$(this).css('cursor', type);
		},
		
		calculateFromHiddenHTML: function( identifier ){
			return $( '#' + identifier ).text();
		}		

	};

	brandModelVersionForm.bindEvents();
});
