function contactsClick() {

    var MARGIN_TOP = -155; // откуда начинать
    var PERIOD     = 20;   // шаг в мс.
    var SPEED_A    = 10;   // ускорение на каждом шаге
  	var SPEED_MAX  = 40;   // максимальная скорость
    var CAC  = [3, -25, 0, -10, 0]; // пределы колебаний

	var opened  = false;
	var running = false;
	var block   = document.getElementById("contacts");
	var timer;
	var speed   = 0;
    var margin  = 0;
    var iCac    = 0;
    var speed_s = 1;

	function open() {
		block.style.display = "block";
		block.style.marginTop = MARGIN_TOP + "px";
		margin = MARGIN_TOP;
		speed = SPEED_A;
		timer = setInterval(openStep, PERIOD);
		running = true;
		iCac    = 0;
		speed_s = 1;
		openStep();
	}
	
	function close() {
		margin = 0;
		speed  = SPEED_A;
		timer  = setInterval(closeStep, PERIOD);
		running = true;
		closeStep();
	}
	
	function openStep() {
		margin += speed * speed_s;
		speed  += SPEED_A;
		if (speed > SPEED_MAX) {
			speed = SPEED_MAX;
		}
		var pereh = (margin * speed_s >= CAC[iCac] * speed_s);
		if (pereh) {
			margin = CAC[iCac];
		}
		block.style.marginTop = margin + "px";		
		if (pereh) {
			iCac++;
			if (iCac >= CAC.length) {
				clearInterval(timer);
				timer = null;
				running = false;
				opened  = true;
				return true;				
			}
			speed_s = speed_s * (-1);
			speed   = SPEED_A;
		}		
	}
	
	function closeStep() {
		margin -= speed;
		speed  += SPEED_A;
		if (speed > SPEED_MAX) {
			speed = SPEED_MAX;
		}
		if (margin <= MARGIN_TOP) {
			margin = MARGIN_TOP;
		}
		block.style.marginTop = margin + "px";
		if (margin <= MARGIN_TOP) {
			clearInterval(timer);
			timer = null;
			running = false;
			opened = false;
			block.style.display = "none";
		}
	}

	function f() {
		if (running) {
			return false;
		}
		if (opened) {
			close();
		} else {
			open();
		}
		return true;
	}

	contactsClick = f;
	return f();
}

