/*
 * Semi Custom Yachts JS Tools  
 *
 * Author: waldemarmatlosz
 */
 
 
/**
 * Global variables 
 *
 * Author: waldemarm
 */
var m_to_ft = 3.2808399;	// value which is required to correct recalculate meters to feets 
 
 
$(document).ready(function() {

	/** Search Engine Section ---------------------------- */
		
	 	/**
		 * If cookie with 'length_id_models' is not available then set the cookie 
		 *
		 * Author: waldemarm
		 */		
		 if(_getCookie('property_yacht_length_id_preferred')==null){
		 	_setCookie('property_yacht_length_id_preferred',$('#property_yacht_length_id_semi_custom').val());
		 }
		 
		/**
		 * If cookie with 'length_id is available then set selected value in selectbox 
		 *
		 * Author: waldemarm
		 */			 
		  if(_getCookie('property_yacht_length_id_preferred')!=null){
	  			$("#property_yacht_length_id_semi_custom").selectOptions(_getCookie('property_yacht_length_id_preferred'),true);
				$("#property_yacht_length_id_beam").selectOptions(_getCookie('property_yacht_length_id_preferred'),true);				
		  }
		  
	 
		/** set default min/max values for length slider **/
		var slider_length_min = 23;
		var slider_length_max = 100;
		
		var slider_length_min_converted = slider_length_min;
		var slider_length_max_converted = slider_length_max;		
		
		var slider_length_min_current = null;
		var slider_length_max_current = null;		
		
		/** set default min/max values for length slider **/
		var slider_beam_min = 0;
		var slider_beam_max = 50;
		
		var slider_beam_min_converted = slider_beam_min;
		var slider_beam_max_converted = slider_beam_max;	
		
		var slider_beam_min_current = null;
		var slider_beam_max_current = null;			
		
		
		
		/** assign length_id letter from the selectbox **/
		var length_id_length = $('#property_yacht_length_id_semi_custom :selected').text();

		/** 
		 * because in default we do not have data in label with min - max value so we have to 
		 * insert default values in the label when initilize component 
		 * We also have to keep in mind the fact that we have cookie with default selected unit, so if thie unit is a 'ft' then we have to recalculate 
		 * the values from the metres to the feet
		 **/				 
		if(length_id_length=='ft'){

			slider_length_min_converted = Math.round(slider_length_min*m_to_ft);			
			slider_length_max_converted = Math.round(slider_length_max*m_to_ft);			
			length_from = Math.round(slider_length_min*m_to_ft);
			length_to = Math.round(slider_length_max*m_to_ft);		
	
						
			//$('#length_from').val(length_from);
			//$('#length_to').val(length_to);	
			
			if($('#length_from').val()==''){	
				slider_length_min_current = slider_length_min_converted;
				slider_length_max_current = slider_length_max_converted;			
				$('#length_from').val(slider_length_min_current);
				$('#length_to').val(slider_length_max_current);				
			}
			else{
				slider_length_min_current = $('#length_from').val();
				slider_length_max_current = $('#length_to').val();	
			}
			updateLength(slider_length_min_current, slider_length_max_current, length_id_length);				
			
			
			slider_beam_min_converted = Math.round(slider_beam_min*m_to_ft);			
			slider_beam_max_converted = Math.round(slider_beam_max*m_to_ft);			
			beam_from = Math.round(slider_beam_min*m_to_ft);
			beam_to = Math.round(slider_beam_max*m_to_ft);				
			
			
		
			if($('#beam_from').val()==''){
				slider_beam_min_current = slider_beam_min_converted;
				slider_beam_max_current = slider_beam_max_converted;	
				$('#beam_from').val(slider_beam_min_current);
				$('#beam_to').val(slider_beam_max_current)
			}
			else{
				slider_beam_min_current = $('#beam_from').val();
				slider_beam_max_current = $('#beam_to').val();				
			}
			
			updateBeam(slider_beam_min_current, slider_beam_max_current, length_id_length);	
			
			
		}
		else{

			//$('#length_from').val(slider_length_min);
			//$('#length_to').val(slider_length_max);	
			
			if($('#length_from').val()==''){	
				slider_length_min_current = slider_length_min_converted;
				slider_length_max_current = slider_length_max_converted;
				$('#length_from').val(slider_length_min_current);
				$('#length_to').val(slider_length_max_current);					
			}
			else{
				slider_length_min_current = $('#length_from').val();
				slider_length_max_current = $('#length_to').val();	
			}			

			updateLength(slider_length_min_current, slider_length_max_current, length_id_length);

			if($('#beam_from').val()==''){	
				slider_beam_min_current = slider_beam_min_converted;
				slider_beam_max_current = slider_beam_max_converted;
				$('#beam_from').val(slider_beam_min_current);
				$('#beam_to').val(slider_beam_max_current)				
			}
			else{
				slider_beam_min_current = $('#beam_from').val();
				slider_beam_max_current = $('#beam_to').val();	
			}

			updateBeam(slider_beam_min_current, slider_beam_max_current, length_id_length);	
			
			//$('#beam_from').val(slider_beam_min);
			//$('#beam_to').val(slider_beam_max);				
		}
		
		
		/** bind actions on length unit change **/
		$('.lengthSelectbox').change(function(){
			var this_id = '#'+$(this).attr('id');
			length_id_length = $(this_id+' :selected').text();
			
			
			/**
			 * Store selected 'length_id' in the cookie.
			 * This will be used to set default unit when user visit the website next time.
			 *
			 * Author: waldemarm
			 */
			_setCookie('property_yacht_length_id_preferred',$(this_id).val());	
			
			
			$("#property_yacht_length_id_semi_custom").removeOption(/./);
			$("#property_yacht_length_id_beam").removeOption(/./);
			
			/** copy values from the length template **/
			$("#property_yacht_length_id_template").copyOptions("#property_yacht_length_id_semi_custom", "all");
			$("#property_yacht_length_id_template").copyOptions("#property_yacht_length_id_beam", "all");
			
			/** set the values **/
			$("#property_yacht_length_id_semi_custom").selectOptions(_getCookie('property_yacht_length_id_preferred'));
			$("#property_yacht_length_id_beam").selectOptions(_getCookie('property_yacht_length_id_preferred'));			
			
			/** refresh selectboxes **/
			/** it is necessary because we need to handle changes in both length selectboxes  **/
			document.getElementById('property_yacht_length_id_semi_custom').refresh(); 	
			document.getElementById('property_yacht_length_id_semi_custom').refresh(); 				
			
			
			
			
			
			/** on change we also need to recalculate values from metres to feets or feets to metres **/
			if(length_id_length=='ft'){
				
				length_from = Math.round(slider_length_min*m_to_ft);
				length_to = Math.round(slider_length_max*m_to_ft);
				
				/** assign recalculated values to the slider **/
				$("#slider-length-range").slider('option','min',length_from);
				$("#slider-length-range").slider('option','max',length_to);					
				$("#slider-length-range").slider('values',0,length_from);
				$("#slider-length-range").slider('values',1,length_to);	
				
				$('#length_from').val(length_from);
				$('#length_to').val(length_to);		

				/** update label values **/
				updateLength(length_from, length_to, length_id_length);	

				/** beam values **/
				beam_from = Math.round(slider_beam_min*m_to_ft);
				beam_to = Math.round(slider_beam_max*m_to_ft);

				/** assign recalculated values to the beam slider **/
				$("#slider-beam-range").slider('option','min',beam_from);
				$("#slider-beam-range").slider('option','max',beam_to);					
				$("#slider-beam-range").slider('values',0,beam_from);
				$("#slider-beam-range").slider('values',1,beam_to);					
		
		
				$('#beam_from').val(beam_from);
				$('#beam_to').val(beam_to);			
				
				/** update beam label values **/
				updateBeam(beam_from, beam_to, length_id_length);	
				
				queryAjaxSearchService();

			
			}
			else{
				$("#slider-length-range").slider('option','min',slider_length_min);
				$("#slider-length-range").slider('option','max',slider_length_max);					
				$("#slider-length-range").slider('values',0, slider_length_min);
				$("#slider-length-range").slider('values',1,slider_length_max);	
				
				$('#length_from').val(slider_length_min);
				$('#length_to').val(slider_length_max);	

				/** update label values **/
				updateLength(slider_length_min, slider_length_max, length_id_length);	

				/** assign recalculated values to the beam slider **/
				$("#slider-beam-range").slider('option','min',slider_beam_min);
				$("#slider-beam-range").slider('option','max',slider_beam_max);					
				$("#slider-beam-range").slider('values',0, slider_beam_min);
				$("#slider-beam-range").slider('values',1,slider_beam_max);	
				
				$('#beam_from').val(slider_beam_min);
				$('#beam_to').val(slider_beam_max);					
				
				/** update label values **/
				updateBeam(slider_beam_min, slider_beam_max, length_id_length);					
				
				queryAjaxSearchService();
				
			}
		});
		
		
		/** slider length **/
		$("#slider-length-range").slider({
			range: true,
			min: slider_length_min_converted,
			max: slider_length_max_converted,
			values: [slider_length_min_current, slider_length_max_current],
			slide: function(event, ui) {
				if($('#property_yacht_length_id_semi_custom').val()==2 && ui.values[1]==328){
					add_plus = '+';
				} else if($('#property_yacht_length_id_semi_custom').val()==1 && ui.values[1]==100){
					add_plus = '+';
				} else add_plus = '';
				
				
				$("#length").val('' + ui.values[0] + length_id_length+' - ' + ui.values[1]+length_id_length+add_plus);
				$("#length_from").val(ui.values[0]);
				$("#length_to").val(ui.values[1]); 
			},
			stop: function(event, ui){
				queryAjaxSearchService();
			}			
		});	 		
		
		
		
		/** length range [OLD]**/
		/*
		$("#slider-length-range").slider({
			range: true,
			min: 24,
			max: 70,
			values: [$("#length_from").val(), $("#length_to").val()],
			slide: function(event, ui) {
				$("#length").val('' + ui.values[0] + 'm - ' + ui.values[1]+'m');
				$("#length_from").val(ui.values[0]);
				$("#length_to").val(ui.values[1]); 
			},
			stop: function(event, ui){
				queryAjaxSearchService();			
			}			
		});
		$("#length").val($("#slider-length-range").slider("values", 0) + 'm - ' + $("#slider-length-range").slider("values", 1)+'m');
		$("#length_from").val($("#slider-length-range").slider("values", 0));
		$("#length_to").val($("#slider-length-range").slider("values", 1)); 
		*/
		/** eof length range **/
		
		
		
		
		/** slider beam range **/
		$("#slider-beam-range").slider({
			range: true,
			min: slider_beam_min_converted,
			max: slider_beam_max_converted,
			values: [slider_beam_min_current, slider_beam_max_current],
			slide: function(event, ui) {
				$("#beam").val('' + ui.values[0] + length_id_length+' - ' + ui.values[1]+length_id_length);
				$("#beam_from").val(ui.values[0]);
				$("#beam_to").val(ui.values[1]); 
			},
			stop: function(event, ui){
				queryAjaxSearchService();
			}			
		});			
		
		
		/** beam range [OLD]**/
		/*
		$("#slider-beam-range").slider({
			range: true,
			min: 0,
			max: 50,
			values: [$("#beam_from").val(), $("#beam_to").val()],
			slide: function(event, ui) {
				$("#beam").val('' + ui.values[0] + 'm - ' + ui.values[1]+'m');
				$("#beam_from").val(ui.values[0]);
				$("#beam_to").val(ui.values[1]); 

	

			},
			stop: function(event, ui){
				queryAjaxSearchService();			
			}
		});
		$("#beam").val($("#slider-beam-range").slider("values", 0) + 'm - ' + $("#slider-beam-range").slider("values", 1)+'m');
		$("#beam_from").val($("#slider-beam-range").slider("values", 0));
		$("#beam_to").val($("#slider-beam-range").slider("values", 1)); 	
		*/
		
		
	

	/** auto suggest yacht designer name **/
	var yacht_name_options = {
		script: "/property/builder/name",
		varname: "?name",
		json: false,
		maxresults: 35,
		callback: function(d) {
			$('#yacht_builder_id').val(d.id);
			queryAjaxSearchService();
		}
	};
	
	var as = new bsn.AutoSuggest('property_yacht_builder_name', yacht_name_options);	
		
	

	/** clear builder ID if architect name is empty **/
	$('#property_yacht_builder_name').bind('keyup',function(){
			$('#yacht_builder_id').val('');
			queryAjaxSearchService();
	});	
	
	
	
	/**
	 * Call service for list number of searches 
	 *
	 */
	 $('#btnSubmit').click(function(e){
	 	 e.preventDefault(); 
		 e.stopPropagation(); 
		 
			queryAjaxSearchService();
	 });
	 
	 
	 
	 /** 
	  * Bind form changes 
	  *
	  */
	  $('#property_yacht_type_id, #yacht_builder_id').bind('change',function(){
		  	queryAjaxSearchService();
	  });
	  
 
	  
	 
	 /**
	  * Call yacht search service when document readey
	  */
	  queryAjaxSearchService();
	  
	  /**
	   * Submit button action 
	   */
	 $('#btnSearchSubmit').click(function(){
	 	$('#pageForm').submit();
	 });
	 
	 
	 /**
	  * Function which return number of yachts founded 
	  * 
	  */
	 function queryAjaxSearchService(){
		 $('#total_count').html('Updating...');
		 var length_to_service = $('#length_to').val();
		 if($('#length_to').val()==100 || $('#length_to').val()==328){
		 	length_to_service = 999;
		 }
		 
		 $.ajax({
		   type: "POST",
		   url: "/yacht/builders/semi_custom_yachts_search",
		   data: 'length_from='+$('#length_from').val()+'&length_to='+length_to_service+'&property_yacht_type_id='+$('#property_yacht_type_id').val()+'&yacht_builder_id='+$('#yacht_builder_id').val()+'&property_yacht_builder_name='+$('#property_yacht_builder_name').val()+'&length_id='+$('#property_yacht_length_id_semi_custom').val(),
		   success: function(returnedData){
			$('#total_count').html($(returnedData).find('query_result').attr('total_results')+' <span>Models Found</span>');
			$('#completed_yachts_list').val($(returnedData).find('query_result').text());
			 //alert( "Returned results: " + $(returnedData).find('query_result').attr('total_results'));
		   }
		 });	 
	 }
 /** eof Search Engine Section ---------------------------- */



		/** initialize stylish dropdown stuff **/	   
		MSDropDown.init("#property_yacht_length_id_semi_custom, #property_yacht_length_id_beam");
		MSDropDown.showIconWithTitle(false);	

}); //eof DOM ready


function lengthRange(){};
function beamRange(){};

/**
 * Function which set cookie with name, value and lifetime passed as the function parameter 
 * @param 'cookieLifetime' in default is set to 365 days
 *
 * Author: waldemarm
 */
function _setCookie(cookieName, cookieValue, cookieLifetime){
		if(isNaN(cookieLifetime)){
			cookieLifetime = 365;
		}
		$.cookie(cookieName, cookieValue, { expires: cookieLifetime });
}

/**
 * Function which set cookie value of the selected cookie
 * @param 'cookieName' 
 *
 * Author: waldemarm
 */
function _getCookie(cookieName){
		return $.cookie(cookieName);
}


/**
 * Function which update length label
 *
 * Author: waldemarm
 */
function updateLength(slider_length_min, slider_length_max, length_id_length){
	 $("#length").val('' + slider_length_min + length_id_length+' - ' + slider_length_max+length_id_length+'+');
	 $("#beam").val('' + slider_length_min + length_id_length+' - ' + slider_length_max+length_id_length);
}


/**
 * Function which update beam label
 *
 * Author: waldemarm
 */
function updateBeam(slider_length_min, slider_length_max, length_id_length){
	 $("#beam").val('' + slider_length_min + length_id_length+' - ' + slider_length_max+length_id_length);
}





