function lastSearch (){

	var search_cookie = getCookie("search");	
	if (search_cookie){
		var search_var = jQuery.parseJSON(decode64(search_cookie));
	} else {
		var search_var = "";
	}
	if (search_var.a){
		$("#search_form #transact"+search_var.a).attr("checked", "checked");
	} else {
		$("#search_form #transact1").attr("checked", "checked");
	}
	if (search_var.b){
		$("#search_form #type_prod").val(search_var.b);
	}
	if (search_var.c){
		$("#search_form #autocomplete").val(search_var.c);
	}
	if (search_var.d){
		$("#search_form #budget_min").val(search_var.d);
	} else {
		if ($("#search_form #transact1").attr("checked")){
			$("#search_form #budget_min").val(budgetMin1);
		} else if ($("#search_form #transact2").attr("checked")){
			$("#search_form #budget_min").val(budgetMin2);
		}
	}
	if (search_var.e){
		$("#search_form #budget_max").val(search_var.e);
	} else {
		if ($("#search_form #transact1").attr("checked")){
			$("#search_form #budget_max").val(budgetMax1);
		} else if ($("#search_form #transact2").attr("checked")){
			$("#search_form #budget_max").val(budgetMax2);
		}
	}
	if (search_var.f){
		$("#search_form #surface").val(search_var.f);
	} else {
		$("#search_form #surface").val(10);
	}
	if (search_var.g){
		$("#type_appt").val(search_var.g);
	}
	if (search_var.j){
		$("#type_comm").val(search_var.j);
	}
	if (search_var.p){
		$("#type_comm").val(search_var.p);
	}
	if (search_var.h){
		$("#type_pro").val(search_var.h);
	}
	if (search_var.i){
		$("#type_park").val(search_var.i);
	}
	if (search_var.m){
		for (var i in search_var.m){
			$("#search_form #rooms"+search_var.m[i]).attr("checked", "checked");
		}
	}
	if (search_var.k){
		$("#region").val(search_var.k);
	}
	if (search_var.n){
		$("#sector_list").val(search_var.n);
	}
	// to finish
	/*if (search_var.view){
		document.search_form.view[(search_var.view - 1)].checked = true;
	}*/
	
	if (search_var.b){
		type_prod_ar = search_var.b;
		for (var i in type_prod_ar){
			if (type_prod_ar[i] == "appt" || type_prod_ar[i] == "comm" || type_prod_ar[i] == "pro" || type_prod_ar[i] == "park"){
				$("#precision #tr_type_"+type_prod_ar[i]).appendTo("#precision_container");
				$("#precision_container").css("display", "block");
				multiselectPrecision(type_prod_ar[i]);
			}
		}
		$("ul.ui-helper-reset.type_prod").mouseleave(function() {
			multiselectClose("#type_prod");
		});
	}

}

function prod_carousel_init(carousel){
	carousel.buttonNext.bind('click', function(){
		carousel.startAuto(0);
	});
	carousel.buttonPrev.bind('click', function(){
		carousel.startAuto(0);
	});
	carousel.clip.hover(function(){
		carousel.stopAuto();
	}, function(){
		carousel.startAuto();
	});
}

function multiselectPrecision(type_prod){
	$("#type_"+type_prod).multiselect({
		show: "blind",
		header: false,
		height: "auto",
		minWidth: 183,
		selectedList: 2,
		noneSelectedText: noneSelectedText,
		selectedText: selectedText,
		click: function(event, ui){
			updateProdCount();
			$("ul.ui-helper-reset.type_prod").mouseleave(function() {
				multiselectClose("#type_"+type_prod);
			});
		}
	});
}


function multiselectClose(id){
	$(id).multiselect("close");	
}


function checkRequired(mode){
	type_prod = $(".ui-multiselect-checkboxes input[type='checkbox']").fieldValue();
	type_offer = $("#transact input[type='radio']").fieldValue();
	if (type_prod == "" || type_offer == ""){
		if (mode == "alert" && type_prod == ""){
			jAlert("Merci de sélectionner un type de bien");
		}
		if (mode == "alert" && type_offer == ""){
			jAlert("Merci de précisier si vous souhaitez acheter ou louer");
		} 
		return false;
	} else {
		return true;
	}
}


function updateProdCount(){
	if (checkRequired() == true){
		$.get(
			"/recherche",
			$("#search_form").formSerialize() + "&count=1",
			function(data){
				prod_count = parseInt(data);
				if (isNaN(prod_count) == false){
					if (prod_count == 1){
						result_str = ' résultat';
					} else {
						result_str = ' résultats';
					}
					$("#result_count").html("<strong>"+prod_count + "</strong>"+result_str);
				}
			}
		);
	}
}


function RangeSlider(sliderId, type_offer, multiply){
	
	inputControl1 = "#budget_min"; 
	inputControl2 = "#budget_max";
	
	if (type_offer == "sell"){
		minValue = 0;
		maxValue = 910000 * multiply;
		inStepsOf = 10000 * multiply;
	} else if (type_offer == "rent"){
		minValue = 0;
		maxValue = 2050 * multiply;
		inStepsOf = 50 * multiply;
	}
	value1 = $(inputControl1).val();
	value2 = $(inputControl2).val();
	if (isNaN(parseInt(value2))){
		value2 = maxValue;
	}

	$(sliderId).slider({
		range: true,
		animate: true,
		min: minValue,
		max: maxValue,
		step: inStepsOf,
		values: [value1, value2],
		change: function(event, ui) {
			updateProdCount();
		},
		slide: function(event, ui) {
			$(inputControl1).val(ui.values[0]);
			$(inputControl2).val(ui.values[1]);
			if (ui.values[1] == maxValue){
				$(inputControl2).val("illimité");
			}
		}
	});	
	
	$(inputControl1).numeric()
	$(inputControl2).numeric()
	//$(inputControl1).val($(sliderId).slider("values", 0));		
	//$(inputControl2).val($(sliderId).slider("values", 1));
	
	if (value2 == maxValue){
		$(inputControl2).val("illimité");
	}
}


function MinSlider(sliderId, minValue, maxValue, inStepsOf, inputControl){		
	$(sliderId).slider({
		range: "max",
		animate: true,
		min: minValue,
		max: maxValue,
		step: inStepsOf,
		value: $(inputControl).val(),
		change: function(event, ui) {
			updateProdCount();
		},
		slide: function(event, ui) {
			$(inputControl).val(ui.value);
		}
	});
	$(inputControl).numeric()
	//$(inputControl).val($(sliderId).slider("value"));
}


function SetRangeSliderValue(sliderId, inputControl, index){
	
	var minimum = $(sliderId).slider("option", "min");
	var maximum = $(sliderId).slider("option", "max");
	var amount = parseInt(inputControl.value);
	var amount_ok = 0;
	
	if (index == 0){
		other_amount = parseInt($("#budget_max").val());
		if (amount < other_amount){
			amount_ok = 1;
		}
	} else {
		other_amount = parseInt($("#budget_min").val());
		if (amount > other_amount){
			amount_ok = 2;
		}
	}

	if (amount_ok > 0 && (amount > minimum || amount < maximum)){ 
		$(sliderId).slider("values", index, amount);
	}
}

function SetMinSliderValue(sliderId, inputControl){
	var amount = parseInt(inputControl.value);
	$(sliderId).slider("value", amount);
}

function limitText(limitField, limitCount, limitNum) {
	if (limitField.value.length > limitNum) {
		limitField.value = limitField.value.substring(0, limitNum);
	} else {
		limitCount.value = limitNum - limitField.value.length;
	}
}

function getCookie(name) {
	var dc = document.cookie;
	var prefix = name + "=";
	var begin = dc.indexOf("; " + prefix);
	if (begin == -1) {
		begin = dc.indexOf(prefix);
		if (begin != 0) return null;
	} else {
		begin += 2;
	}
	var end = document.cookie.indexOf(";", begin);
	if (end == -1) {
		end = dc.length;
	}
	return unescape(dc.substring(begin + prefix.length, end));
}

function decode64(input) {
	var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
	var output = "";
	var chr1, chr2, chr3;
	var enc1, enc2, enc3, enc4;
	var i = 0;
	
	input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '');

   do {
      enc1 = keyStr.indexOf(input.charAt(i++));
      enc2 = keyStr.indexOf(input.charAt(i++));
      enc3 = keyStr.indexOf(input.charAt(i++));
      enc4 = keyStr.indexOf(input.charAt(i++));

      chr1 = (enc1 << 2) | (enc2 >> 4);
      chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
      chr3 = ((enc3 & 3) << 6) | enc4;

      output = output + String.fromCharCode(chr1);

      if (enc3 != 64) {
         output = output + String.fromCharCode(chr2);
      }
      if (enc4 != 64) {
         output = output + String.fromCharCode(chr3);
      }
   } while (i < input.length);

   return output;
}


/** Font Size **/

var min=10;
var max=14;

function increaseFontSize() {
	var elem = document.getElementById('page_content');
	if(elem.style.fontSize) {
	 var s = parseInt(elem.style.fontSize.replace("pt",""));
	} else {
	 var s = 10;
	}
	if(s!=max) {
	 s += 1;
	}
	elem.style.fontSize = s+"pt"
}
function decreaseFontSize() {
	var elem = document.getElementById('page_content');
	if(elem.style.fontSize) {
	 var s = parseInt(elem.style.fontSize.replace("pt",""));
	} else {
	 var s = 10;
	}
	if(s!=min) {
	 s -= 1;
	}
	elem.style.fontSize = s+"pt"
}

/** My selection **/
function mySelection() {
	var item = getCookie('my_selection');
	var delimiter = '-';
	tempArray=new Array(1);
	var count=0;
	var tempString=new String(item);
	
	while (tempString.indexOf(delimiter)>0) {
		tempArray[count]=tempString.substr(0,tempString.indexOf(delimiter));
		tempString=tempString.substr(tempString.indexOf(delimiter)+1,tempString.length-tempString.indexOf(delimiter)+1);
		count=count+1
	}
}


function search_results_init (carousel) {
	
	$("#search_results").css("visibility", "visible");
	$(".jcarousel-control a:eq(0)").addClass("active");

	$(".jcarousel-control a").bind("click", function(){
		carousel.scroll($.jcarousel.intval($(this).text()));
		$.each($(".jcarousel-control a"), function(){
			$(this).removeClass("active");
		});
		$(this).addClass("active");
		current = parseInt($(this).text());
		return false;
	});

	$("#btn_next").bind("click", function(){
		carousel.next();
		return false;
	});

	$("#btn_prev").bind("click", function(){
		carousel.prev();
		return false;
	});
	
	$("#btn_prev div.btn_prev").addClass("inactive");
	
	info_bubble_init();

};


function search_results_item (carousel, item, idx, state) {
	if (state == "init"){
		return;
	}
	$.each($(".jcarousel-control a"), function() {
		$(this).removeClass("active");
	});
	$(".jcarousel-control a:eq("+(idx-1)+")").addClass("active");
	
	$("#btn_next div.btn_next").removeClass("inactive");
	$("#btn_prev div.btn_prev").removeClass("inactive");
	$("#btn_next div.btn_next").unbind("click");
	$("#btn_prev div.btn_prev").unbind("click");

	if (idx == carousel.size()){
		$("#btn_next div.btn_next").addClass("inactive");
		$("#btn_next div.btn_next").click(function() { return false; });
	} else if (idx == 1){
		$("#btn_prev div.btn_prev").addClass("inactive");
		$("#btn_prev div.btn_prev").click(function() { return false; });
	}
};
	

function info_bubble_init (){
	if ($.browser.msie == true && $.browser.version == '7.0'){
		return;
	}
	$.each($("#page_content .info_bubble"), function(){
		var id = $(this).attr("id");
		var nb = $(this).attr("rel"); 
		var drop_direction = (nb == 1) ? "right" : "left";
		$(this).hover(
			function(){
				$("#content_"+id).stop(true, true).show("drop", { direction: drop_direction }, 350);
			},
			function(){
				$("#content_"+id).fadeOut(250);
			}
		);
	});
};


// Show/Hide a category
function category(category){
	var state = document.getElementById("check_"+category).checked;
	if (state == true){
		addMarkers(category);
	} else {
		clearMarkers(category);
	}
}


// Get map bounds
function getBounds(){
	bounds = map.getBounds();
	boundsUrl = bounds.toUrlValue(7);
	bounds_ar = boundsUrl.split(",");
	return bounds_ar[2] +","+ bounds_ar[1] +","+ bounds_ar[0] +","+ bounds_ar[3];
}


// Update markers on viewpoint change
function updateMarkers (){
	if (categories.length > 0){
		for (var i = 0; i < categories.length; i++) {
			var category = categories[i];
			var state = document.getElementById("check_"+category).checked;
			if (state == true){
				clearMarkers(category);
				addMarkers(category);
			}
		}
	}
}


// Add markers via API
function addMarkers(category){
	
	busyIndicator("show");
	var api_url = "http://api.tellmewhere.com/v1/searchplaces.json?rect="+ getBounds() +"&cat="+ category +"&lang=fr&apikey=ibq427gqyElm&callback=?";

	$.getJSON(api_url, function(data) {
								
		var found = data.places.found;
		var locations = data.places.place;
		markers[category] = new Array();

		for (var i = 0; i < locations.length; i++) {
			
			var place = locations[i];
			var title = place["name"];
			
			var content = '<div class="info_win">';

			content += "<b>"+place["name"]+"</b><br />";
			if (place["address"]["street"] !== undefined){
				content += place["address"]["street"] +"<br />";
			}
			if (place["phone"] !== undefined){
				content += place["phone"] +"<br />";
			}
			content += "</div>";

			var myLatLng = new google.maps.LatLng(place["position"]["lat"], place["position"]["lng"]);
			var marker = createMarker(myLatLng, title, content, category, i);
		}

		busyIndicator("hide");
	
	});
	
}

// Create marker function
function createMarker(myLatLng, title, content, category, i) {

	var marker = new google.maps.Marker({
		position: myLatLng,
		map: map,
		icon: "/img/marker_"+ category +".png",
		shadow: "/img/marker_shadow.png",
		title: title,
		zIndex: Math.round(myLatLng.lat()*-100000)<<5
	});
	
 	var linkid = "link"+ (gmarkers.length);
	
	google.maps.event.addListener(marker, "click", function() {
        infoWindow.setContent(content);
        infoWindow.open(map,marker);
    });

	markers[category].push(marker);
	
}


// Clear markers
function clearMarkers(category) {
	infoWindow.close();
	if (markers[category] !== undefined){
		for(var i = 0; i < markers[category].length; i++) {
		 markers[category][i].setMap(null);
		}
		markers[category].length = 0;
	}
}

// Busy indicator
function busyIndicator(action){
	if (action == "show"){
		document.getElementById("map_busy").style.display = "block";
	} else if (action == "hide") {
		document.getElementById("map_busy").style.display = "none";
	}
}


function geocodeAddMarker(address, info, info_open){
	geocoder.geocode( { "address": address}, function(results, status) {
	  if (status == google.maps.GeocoderStatus.OK) {
		map.setCenter(results[0].geometry.location);
		var marker = new google.maps.Marker({
			map: map, 
			position: results[0].geometry.location,
			clickable: true,
			icon: "/img/marker_red.png",
			shadow: "/img/marker_shadow.png"
		});
		map.fitBounds(results[0].geometry.viewport);
		if (info){
			google.maps.event.addListener(marker, "click", function() {
				infoWindow.setContent(info);
				infoWindow.open(map,marker);
			});
			markers.push(marker);
		}
		if (info_open == 1){
		    google.maps.event.trigger(markers[0],'click');	
		}
	  } else {
		alert("L'adresse n'a pas été trouvée.");
	  }
	});
}

