skoda.maps.Dealer = function(cfg) {
  this.id  = cfg.id;
  this.cfg = cfg;
  this.setMarker();
};

skoda.maps.createInfoBox = function(){
  var myOptions = {
    disableAutoPan: false,
    pixelOffset: new google.maps.Size(-128, -300),
    zIndex: null,
    infoBoxClearance: new google.maps.Size(120, 120),
    pane: "floatPane",
    enableEventPropagation: false
  };
  skoda.maps.infoBox = new InfoBox(myOptions);
}

skoda.maps.Dealer.prototype.setMarker = function(){
	var latLng = new google.maps.LatLng(this.cfg.latitude,this.cfg.longitude);
	var title = this.cfg.name;
	var dealer = this;
	this.marker = new skodaMarker(latLng, title, dealer);
	skoda.maps.bounds.extend(latLng);
	skoda.maps.map.fitBounds(skoda.maps.bounds);
};

skoda.maps.Dealer.prototype.show = function() {
  this._body = '';
  this.renderInfoBox();
};

skoda.maps.Dealer.prototype.getHeader = function(){
  // default header
  if(typeof(this._header) == 'undefined') {
    var header = '<div class="side">'
	+ '<img src="/images/medias/vo/default_concess.jpg" alt="" /></div>'
	+ '<h3 class="title-dealer">' + this.cfg.name + '</h3>'
    + '<p class="address">'
    +  this.cfg.address + '<br />'
    +  this.cfg.zipcode + ' ' + this.cfg.city
    + '</p>'
    + '<p class="web">'
    + '<a href="' + this.cfg.used_cars_url + '" class="btn-std"><span>Voir tous les véhicules ('+this.cfg.count+')</span></a>'
    + '</p>'
    + '<div class="clearer"></div></div>';
    this._header = header;
  }
  return this._header;
}
skoda.maps.Dealer.prototype.getBody = function()
{
  if(typeof(this._body) == 'undefined') {
    this._body = '';
  }
  return this._body;
};
skoda.maps.Dealer.prototype.getFooter = function()
{
  // default footer
  if(typeof(this._footer) == 'undefined') {
    var footer = '<ul class="ft-vh">';
    $.each(this.cfg.vehicles, function(id, vehicle) {
      footer = footer + '<li><a href="javascript:openVehiculeDetail(\''+vehicle.link+'\')">';
      if (vehicle.thumbnail) {
        footer = footer+'<img src="'+vehicle.thumbnail+'" />';
      }
      footer = footer + '<strong class="right">'+vehicle.price+'&nbsp;€</strong>'
        +'<strong>'+vehicle.brand+'</strong><br />'
        +vehicle.model
        +'</a><div class="clearer"></div></li>';
    });
    footer = footer + '</ul><div class="clearer"></div>';
    this._footer = footer;
  }
  return this._footer;
};
skoda.maps.Dealer.prototype.decorate = function (content)
{
  var output = '<div id="infobox">'
  + '<a href="javascript:skoda.maps.infoBox.close()" class="closer">x</a>'
  + '<div class="dealer">'
  + content
  + '</div>'
  + '</div>'
  + '<div class="box-arrow"></div>'
  + '<div class="box-shadow"></div>';
  return output;
};

skoda.maps.Dealer.prototype.renderInfoBox = function(){
  var content = this.decorate(this.getHeader() + this.getBody() + this.getFooter());
  skoda.maps.showInfoBox(content, this.marker);
}

skoda.maps.Dealer.prototype.renderDiv = function()
{
  var content = (this.getHeader() + this.getBody() + this.getFooter());
  $("#vehicles").html(content);
  $("#vehicles").toggle();
}

function openVehiculeDetail(url){
  $('.uc_content').fadeIn(500);
  $('#shadow').css('display', 'block').animate({opacity:0.8}, 250);

  $('#vehicles li.off').removeClass('off');
  $('#vehicles .uc_menu .detail a').trigger('click');

  $('#vo-detail').empty().hide();
  $.ajax({
		type: 'GET',
		url: url,
		success: function(data){
			$('#vo-detail').html(data).fadeIn(250);
		}
  });
}

function showDealerInMap(id){
	for (i in skoda.maps.dealers){
		if (skoda.maps.dealers[i].id==id){
			skoda.maps.map.setCenter(new google.maps.LatLng(skoda.maps.dealers[i].cfg.latitude, skoda.maps.dealers[i].cfg.longitude));
   			skoda.maps.map.setZoom(12);
			skoda.maps.dealers[i].show();
		}
	}
}

function createValues(){
	var tri = $('#vo-list .sv_sort').find('.on a').attr('rel');
	var dealer = $('#dealer_id').val();
	var cats = new Array();
	for (var i=0; i<$('#uc_category_family input:checked').length; i++){
		cats.push($("#uc_category_family input:checked").eq(i).val());
	};
	var brands = new Array();
	for (var i=0; i<$('#uc_brand input:checked').length; i++){
		brands.push($("#uc_brand input:checked").eq(i).val());
	};
	var models = new Array();
	for (var i=0; i<$('#uc_model input:checked').length; i++){
		models.push($("#uc_model input:checked").eq(i).val());
	};
	var price_min = $('#price_min').val();
	var price_max = $('#price_max').val();
	var zip = $('#zipcode').val();
	var amount = $("#distance").val();
	var energy = new Array();
	for (var i=0; i<$('#uc_energy_list input:checked').length; i++){
		energy.push($("#uc_energy_list input:checked").eq(i).val());
	};
	var km_min = $('#km_min').val();
	var km_max = $('#km_max').val();
	var year_min = $('#year_min').val();
	var year_max = $('#year_max').val();
	var equipments = new Array();
	for (var i=0; i<$('#equipments_families_list input:checked').length; i++){
		equipments.push($("#equipments_families_list input:checked").eq(i).val());
	};
	var fiscalpower_min = $('#fiscalpower_min').val();
	var fiscalpower_max = $('#fiscalpower_max').val();
	var realpower_min = $('#realpower_min').val();
	var realpower_max = $('#realpower_max').val();
	var nbdoors_min = $('#nbdoors_min').val();
	var nbdoors_max = $('#nbdoors_max').val();
	var nbseats_min = $('#nbseats_min').val();
	var nbseats_max = $('#nbseats_max').val();
	var gear_type = new Array();
	for (var i=0; i<$('#gear_type input:checked').length; i++){
		gear_type.push($("#gear_type input:checked").eq(i).val());
	};
	if ($('#with_photos').is(':checked')){
		var photos = true;
	}else {
		var photos = false;
	}
	if ($('#is_favorite').is(':checked')){
		var favorite = true;
	}else {
		var favorite = false;
	}

	var form_values = {
		"sort":tri,
		"page":1,
		"dealer_id":dealer,
		"uc_category_family_id":cats,
		"uc_brand_id":brands,
		"uc_model_id":models,
		"price_min":price_min,
		"price_max":price_max,
		"zipcode":zip,
		"distance":amount,
		"energy":energy,
		"km_min":km_min,
		"km_max":km_max,
		"year_min":year_min,
		"year_max":year_max,
		"equipments_families_list":equipments,
		"fiscalpower_min":fiscalpower_min,
		"fiscalpower_max":fiscalpower_max,
		"realpower_min":realpower_min,
		"realpower_max":realpower_max,
		"nbdoors_min":nbdoors_min,
		"nbdoors_max":nbdoors_max,
		"nbseats_min":nbseats_min,
		"nbseats_max":nbseats_max,
		"gear_type":gear_type,
		"with_photos":photos,
		"is_favorite":favorite
	};

	return form_values;
}

function updateVOMap(s_url, l_url){
	// clear markers
	for(var i in skoda.maps.dealers){
		skoda.maps.dealers[i].marker.setMap(null);
	}
	skoda.maps.dealers.length=0;
	// reset bounds
	skoda.maps.bounds = new google.maps.LatLngBounds();
	// hide infobox
	skoda.maps.infoBox.close();
	//get form values
	var form_values = createValues();
	// refresh map
	$.ajax({
		url: s_url,
		dataType: 'json',
		data: form_values,
		success: function(data){
			skoda.maps.getDealersCallback(data);
			$.ajax({
				type: 'GET',
				url: l_url,
				data: form_values,
				success: function(html){
					$('#xhr').html(html);
				}
			});
		}
	});
}
function updateVOList(l_url, page){
	//get form values
	var form_values = createValues();
	form_values["page"] = page;
	// refresh list
	$.ajax({
		type: 'GET',
		url: l_url,
		data: form_values,
		success: function(html){
			$('#xhr').html(html);
		}
	});
}

function initVOForm(s_url, l_url, m_url){
	toggleFilters();
	toggleMulti();
	toggleSubFilters();
	toggleCheckList(s_url, l_url, m_url);
	checkboxReplace($('#palette'));
    updateBrandsList();
    updateModelsList();
	$(".ui-slider").bind( "slidechange", function(event) {
		updateVOMap(s_url, l_url);
		if($('#vehicles').is(':visible')){
			$('#vehicles .uc_menu a').eq(1).trigger('click');
		}
	});
	$('#palette input').live(($.browser.msie ? "click" : "change"), function(event){
        // update counter for brands and models
        updateBrandsList();
        updateModelsList();
		updateVOMap(s_url, l_url);
		if($('#vehicles').is(':visible')){
			$('#vehicles .uc_menu a').eq(1).trigger('click');
		};
	});
}

function initVoList(l_url){
	var pages = $('#vo-list .pagination a');
	pages.live('click', function(event){
		event.preventDefault();
		updateVOList(l_url, $(this).attr('rel'));
	})
	var sorters = $('#vo-list .sv_sort li');
	sorters.live('click', function(event){
		event.preventDefault();
		if(!$(this).is('.on')){
			$('#vo-list .sv_sort').find('.on').toggleClass('on');
			$(this).toggleClass('on');
		} else {
			var rel = $(this).find('a').attr('rel');
			if(!$(this).is('.desc')){
				rel += '_revert';
				$(this).find('a').attr('rel', rel);
				$(this).toggleClass('desc');
			} else {
				rel = rel.replace('_revert', '');
				$(this).find('a').attr('rel', rel);
				$(this).toggleClass('desc');
			}
		}
		updateVOList(l_url, 1);
	});
}


function updateBrandsList()
{
    // counter
    var nb_brands =  $('#sub02').find(':checked').length;
    var label_suffixe_brand = $('#sub02 a.toggle-multi').find('span');
    if (nb_brands > 0){
        label_suffixe_brand.text( ' (' + nb_brands + ')');
		 $('#sub201 .toggle-multi').removeClass('off');
	} else {
        label_suffixe_brand.text('');
		$('#sub201 .toggle-multi').addClass('off');
	}
}

function updateModelsList()
{
    var form_values = createValues();
    if(form_values['uc_brand_id'] != ''){
		toggleModels(form_values['uc_brand_id']);
		updateNbBrands();
    }
}

function updateNbBrands(){
	var nb_brands =  $('#sub201').find(':checked').length;
	var label_suffixe_brand = $('#sub201 a.toggle-multi').find('span');
	if (nb_brands > 0){
		label_suffixe_brand.text( ' (' + nb_brands + ')');
	} else{
		label_suffixe_brand.text('');
	}
}

function toggleModels(brands){
	for (var i=0; i<brands.length; i++){
		brands[i] = '#brand_'+brands[i];
	} // create list of brands div
	var selectors = brands.join(', ');
	// all brands
	var groups = $('#uc_model .brand_group');
	
	groups.hide();
	$(selectors).show();
	
	groups.not(selectors).find('input').attr('checked', false);
	updateNbBrands();
}

function toggleCheckList(s_url, l_url, m_url){
	var btn = $('#palette .select-all');
	var state = 0;
	btn.live('click', function(event){
		event.preventDefault();
		if(state==0){
			$(this).next().find('input:visible').attr('checked', true);
			$(this).text('Aucune');
			state = 1;
		}else if (state==1){
			$(this).next().find('input:visible').attr('checked', false);
			$(this).text('Toutes');
			state = 0;
		}
		updateVOMap(s_url, l_url);
		updateModelsList();
		updateBrandsList();
	});
}


function updateBrandsList()
{
    // counter
    var nb_brands =  $('#sub02').find(':checked').length;
    var label_suffixe_brand = $('#sub02 a.toggle-multi').find('span');
    if (nb_brands > 0){
        label_suffixe_brand.text( ' (' + nb_brands + ')');
		 $('#sub201 .toggle-multi').removeClass('off');
	} else {
        label_suffixe_brand.text('');
		$('#sub201 .toggle-multi').addClass('off');
	}
}

function updateModelsList()
{
    var form_values = createValues();
    if(form_values['uc_brand_id'] != ''){
		toggleModels(form_values['uc_brand_id']);
		updateNbBrands();
    }
}

function updateNbBrands(){
	var nb_brands =  $('#sub201').find(':checked').length;
	var label_suffixe_brand = $('#sub201 a.toggle-multi').find('span');
	if (nb_brands > 0){
		label_suffixe_brand.text( ' (' + nb_brands + ')');
	} else{
		label_suffixe_brand.text('');
	}
}

function toggleModels(brands){
	for (var i=0; i<brands.length; i++){
		brands[i] = '#brand_'+brands[i];
	} // create list of brands div
	var selectors = brands.join(', ');
	// all brands
	var groups = $('#uc_model .brand_group');
	
	groups.hide();
	$(selectors).show();
	
	groups.not(selectors).find('input').attr('checked', false);
	updateNbBrands();
}

function toggleCheckList(s_url, l_url, m_url){
	var btn = $('#palette .select-all');
	var state = 0;
	btn.live('click', function(event){
		event.preventDefault();
		if(state==0){
			$(this).next().find('input:visible').attr('checked', true);
			$(this).text('Aucune');
			state = 1;
		}else if (state==1){
			$(this).next().find('input:visible').attr('checked', false);
			$(this).text('Toutes');
			state = 0;
		}
		updateVOMap(s_url, l_url);
		updateModelsList();
		updateBrandsList();
	});
}

