$(document).ready(function(){
	
	var brandModelVersionForm = {

			bindEvents: function(){
				$( ".mseurocar_brand_model_version_brand" ).bind( "change", {that: this}, this.optionSelected );
				$( ".mseurocar_brand_model_version_model" ).bind( "change", {that: this}, this.optionSelected );
			},
			
			unbindEvents: function(){
				$( ".mseurocar_brand_model_version_brand" ).unbind();
				$( ".mseurocar_brand_model_version_model" ).unbind();
			},
			
			updateForm: function( html ){
				var brandModelVersionDiv = $( "#ajax_brand_model_version" );
				var brandModelVersionDivClass = brandModelVersionDiv.attr( 'class' );
				brandModelVersionDiv.replaceWith( '<div id="ajax_brand_model_version" class="' + brandModelVersionDivClass + '">' + html + '</div>' );	 		
			},
			
			selectedOption: function( id ){
				var selectedOption;
				 $.each( $( "." + id ).children(), function( key, option ){
					 if( $(option).attr('selected') ){
						selectedOption = $(option).val();
					 }
				 });
				 return selectedOption;
			},
			
			optionSelected: function( event ){
				 var that = event.data.that;
				 
				 var selectClass = $( event.currentTarget ).attr( 'class' )
				 var selectClassPrefix = 'mseurocar_brand_model_version_';
				 var selectedElement = selectClass.substr( selectClassPrefix.length );
				 
				 var attributeBase = that.calculateFromHiddenHTML( 'brandmodelversion_attribute_base' );
				 var attributeId = that.calculateFromHiddenHTML( 'brandmodelversion_attribute_id' );
				 var brandId = that.selectedOption( "mseurocar_brand_model_version_brand" );
				 var modelId = that.selectedOption( "mseurocar_brand_model_version_model" );
				 var versionId = that.selectedOption( "mseurocar_brand_model_version_version" );
				 
				 $.ajax({
		                type: "POST",
						url: that.calculateFromHiddenHTML( 'brandmodelversion_ajax_url' ),
						data: {
							attribute_base: attributeBase,
							attribute_id: attributeId,
					 		brand_id: brandId,
					 		model_id: modelId,
					 		version_id: versionId,
					 		selected_element: selectedElement,
					 	},
						dataType: "html",
					    success: function( html ){
					 		that.updateForm( html );
					 	},
						error: function( XMLHttpRequest, textStatus ){
							var errorMessage = "Problemy techniczne";
						},
						beforeSend: function(){
							that.unbindEvents();
							that.setCursor('wait');
							$( ".mseurocar_brand_model_version_brand" ).attr('disabled', 'disabled');
							$( ".mseurocar_brand_model_version_model" ).attr('disabled', 'disabled');
							$( ".mseurocar_brand_model_version_version" ).attr('disabled', 'disabled');
							
							$("#ajax_brand_model_version").fadeTo( 'slow', 0.3, function(){});
						},
						complete: function(){
							that.setCursor('default');
							that.bindEvents();
						}
					});
			},
			
			setCursor: function ( type ){
				$('body').css('cursor', type);
				$(this).css('cursor', type);
			},
			
			calculateFromHiddenHTML: function( identifier ){
				return $( '#' + identifier ).text();
			}			
		};
		
	brandModelVersionForm.bindEvents();
	brandModelVersionForm.setCursor( 'default' );
});
